@mastra/server 1.57.0 → 1.58.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/dist/{a2a-uPi5sPwb.js → a2a-CHi9AJ0n.js} +598 -178
- package/dist/a2a-CHi9AJ0n.js.map +1 -0
- package/dist/{a2a-DKnwIgiw.cjs → a2a-D3ZYeXIx.cjs} +598 -178
- package/dist/a2a-D3ZYeXIx.cjs.map +1 -0
- package/dist/{api-schema-manifest-7-NC9Dyc.cjs → api-schema-manifest-J5hfk5ZZ.cjs} +2 -2
- package/dist/{api-schema-manifest-7-NC9Dyc.cjs.map → api-schema-manifest-J5hfk5ZZ.cjs.map} +1 -1
- package/dist/{api-schema-manifest-C5hpdIE_.js → api-schema-manifest-R8CsF6RX.js} +2 -2
- package/dist/{api-schema-manifest-C5hpdIE_.js.map → api-schema-manifest-R8CsF6RX.js.map} +1 -1
- package/dist/{datasets-Cvix7Rms.cjs → datasets-BMeFvFwT.cjs} +43 -1
- package/dist/datasets-BMeFvFwT.cjs.map +1 -0
- package/dist/{datasets-dhXnHLAL.js → datasets-BeBH9Seg.js} +38 -2
- package/dist/datasets-BeBH9Seg.js.map +1 -0
- package/dist/{dist-COHIL6fR.cjs → dist-DgY0llRv.cjs} +116 -28
- package/dist/dist-DgY0llRv.cjs.map +1 -0
- package/dist/{dist-DGqlUp0b.js → dist-IUXZtNBY.js} +116 -28
- package/dist/dist-IUXZtNBY.js.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/docs/references/docs-agents-a2a.md +36 -2
- package/dist/route-builder-CIk5k35M.js.map +1 -1
- package/dist/route-builder-CgLVYL1c.cjs.map +1 -1
- package/dist/{routes-hSY4wTeS.cjs → routes-BzR8iVj4.cjs} +2 -2
- package/dist/{routes-hSY4wTeS.cjs.map → routes-BzR8iVj4.cjs.map} +1 -1
- package/dist/{routes-CRoTKPvQ.js → routes-C7iRCN_l.js} +2 -2
- package/dist/{routes-CRoTKPvQ.js.map → routes-C7iRCN_l.js.map} +1 -1
- package/dist/server/a2a/store.cjs +26 -2
- package/dist/server/a2a/store.cjs.map +1 -1
- package/dist/server/a2a/store.d.ts +18 -2
- package/dist/server/a2a/store.d.ts.map +1 -1
- package/dist/server/a2a/store.js +26 -3
- package/dist/server/a2a/store.js.map +1 -1
- package/dist/server/a2a/task-state.d.ts +4 -0
- package/dist/server/a2a/task-state.d.ts.map +1 -0
- package/dist/server/a2a/tasks.d.ts +1 -1
- package/dist/server/a2a/tasks.d.ts.map +1 -1
- package/dist/server/handlers/a2a.cjs +1 -1
- package/dist/server/handlers/a2a.d.ts +3 -2
- package/dist/server/handlers/a2a.d.ts.map +1 -1
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +1 -1
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agent-versions.cjs +6 -0
- package/dist/server/handlers/agent-versions.cjs.map +1 -1
- package/dist/server/handlers/agent-versions.d.ts.map +1 -1
- package/dist/server/handlers/agent-versions.js +6 -0
- package/dist/server/handlers/agent-versions.js.map +1 -1
- package/dist/server/handlers/datasets.cjs +26 -11
- package/dist/server/handlers/datasets.cjs.map +1 -1
- package/dist/server/handlers/datasets.d.ts +136 -0
- package/dist/server/handlers/datasets.d.ts.map +1 -1
- package/dist/server/handlers/datasets.js +26 -11
- package/dist/server/handlers/datasets.js.map +1 -1
- package/dist/server/handlers/mcp-client-versions.cjs +1 -1
- package/dist/server/handlers/mcp-client-versions.js +1 -1
- package/dist/server/handlers/observability.cjs +20 -9
- package/dist/server/handlers/observability.cjs.map +1 -1
- package/dist/server/handlers/observability.d.ts.map +1 -1
- package/dist/server/handlers/observability.js +20 -9
- package/dist/server/handlers/observability.js.map +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +1 -1
- package/dist/server/handlers/prompt-block-versions.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +1 -1
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/stored-agents.cjs +16 -1
- package/dist/server/handlers/stored-agents.cjs.map +1 -1
- package/dist/server/handlers/stored-agents.d.ts.map +1 -1
- package/dist/server/handlers/stored-agents.js +16 -1
- package/dist/server/handlers/stored-agents.js.map +1 -1
- package/dist/server/handlers/stored-mcp-clients.cjs +1 -1
- package/dist/server/handlers/stored-mcp-clients.js +1 -1
- package/dist/server/handlers/stored-prompt-blocks.cjs +1 -1
- package/dist/server/handlers/stored-prompt-blocks.js +1 -1
- package/dist/server/handlers/stored-scorers.cjs +1 -1
- package/dist/server/handlers/stored-scorers.js +1 -1
- package/dist/server/handlers/stored-skill-favorites.cjs +1 -1
- package/dist/server/handlers/stored-skill-favorites.js +1 -1
- package/dist/server/handlers/stored-skills.cjs +1 -1
- package/dist/server/handlers/stored-skills.js +1 -1
- package/dist/server/handlers/system.cjs +1 -1
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers/validate-agent-instructions.cjs +52 -0
- package/dist/server/handlers/validate-agent-instructions.cjs.map +1 -0
- package/dist/server/handlers/validate-agent-instructions.d.ts +13 -0
- package/dist/server/handlers/validate-agent-instructions.d.ts.map +1 -0
- package/dist/server/handlers/validate-agent-instructions.js +51 -0
- package/dist/server/handlers/validate-agent-instructions.js.map +1 -0
- package/dist/server/handlers/workflows.cjs +12 -0
- package/dist/server/handlers/workflows.cjs.map +1 -1
- package/dist/server/handlers/workflows.d.ts.map +1 -1
- package/dist/server/handlers/workflows.js +12 -0
- package/dist/server/handlers/workflows.js.map +1 -1
- package/dist/server/handlers.cjs +1 -1
- package/dist/server/handlers.js +1 -1
- package/dist/server/schemas/datasets.d.ts +53 -0
- package/dist/server/schemas/datasets.d.ts.map +1 -1
- package/dist/server/schemas/index.cjs +3 -2
- package/dist/server/schemas/index.js +3 -3
- package/dist/server/server-adapter/index.cjs +1 -1
- package/dist/server/server-adapter/index.js +1 -1
- package/dist/server/server-adapter/routes/datasets.d.ts +136 -0
- package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
- package/package.json +5 -5
- package/dist/a2a-DKnwIgiw.cjs.map +0 -1
- package/dist/a2a-uPi5sPwb.js.map +0 -1
- package/dist/datasets-Cvix7Rms.cjs.map +0 -1
- package/dist/datasets-dhXnHLAL.js.map +0 -1
- package/dist/dist-COHIL6fR.cjs.map +0 -1
- package/dist/dist-DGqlUp0b.js.map +0 -1
|
@@ -5959,7 +5959,7 @@ function splitLines(text) {
|
|
|
5959
5959
|
return result;
|
|
5960
5960
|
}
|
|
5961
5961
|
//#endregion
|
|
5962
|
-
//#region ../memory/dist/src-
|
|
5962
|
+
//#region ../memory/dist/src-Iw-V5CfD.js
|
|
5963
5963
|
var __defProp$3 = Object.defineProperty;
|
|
5964
5964
|
var __exportAll = (all, no_symbols) => {
|
|
5965
5965
|
let target = {};
|
|
@@ -20722,6 +20722,7 @@ var Extractor = class Extractor {
|
|
|
20722
20722
|
includePreviousExtraction;
|
|
20723
20723
|
metadataKeyPath;
|
|
20724
20724
|
onExtracted;
|
|
20725
|
+
retryStructuredExtractionOnEmptyObject;
|
|
20725
20726
|
/** @internal */
|
|
20726
20727
|
internal;
|
|
20727
20728
|
instructionsConfig;
|
|
@@ -20744,6 +20745,7 @@ var Extractor = class Extractor {
|
|
|
20744
20745
|
this.includePreviousExtraction = config.includePreviousExtraction ?? true;
|
|
20745
20746
|
this.metadataKeyPath = config.metadataKeyPath ?? `extracted.${slug}`;
|
|
20746
20747
|
this.onExtracted = config.onExtracted;
|
|
20748
|
+
this.retryStructuredExtractionOnEmptyObject = config.retryStructuredExtractionOnEmptyObject ?? false;
|
|
20747
20749
|
this.internal = internal;
|
|
20748
20750
|
}
|
|
20749
20751
|
async resolve(context) {
|
|
@@ -20756,7 +20758,8 @@ var Extractor = class Extractor {
|
|
|
20756
20758
|
...schema ? { schema } : {},
|
|
20757
20759
|
includePreviousExtraction: this.includePreviousExtraction,
|
|
20758
20760
|
metadataKeyPath: this.metadataKeyPath,
|
|
20759
|
-
onExtracted: this.onExtracted
|
|
20761
|
+
onExtracted: this.onExtracted,
|
|
20762
|
+
retryStructuredExtractionOnEmptyObject: this.retryStructuredExtractionOnEmptyObject
|
|
20760
20763
|
}, this.internal);
|
|
20761
20764
|
}
|
|
20762
20765
|
};
|
|
@@ -21075,6 +21078,9 @@ if (OM_DEBUG_LOG) {
|
|
|
21075
21078
|
function isAbortError$1(error, abortSignal) {
|
|
21076
21079
|
return abortSignal?.aborted === true || error instanceof DOMException && error.name === "AbortError" || error instanceof Error && error.name === "AbortError";
|
|
21077
21080
|
}
|
|
21081
|
+
function shouldRetryEmptyStructuredObject(object, extractors) {
|
|
21082
|
+
return Object.keys(object).length === 0 && extractors.some((extractor) => extractor.retryStructuredExtractionOnEmptyObject);
|
|
21083
|
+
}
|
|
21078
21084
|
async function extractStructuredValues(opts) {
|
|
21079
21085
|
const structuredExtractors = (opts.extractors ?? []).filter((extractor) => extractor.mode === "structured");
|
|
21080
21086
|
if (structuredExtractors.length === 0) return {
|
|
@@ -21111,8 +21117,10 @@ ${extractorInstructions}${priorLines.length > 0 ? `\n\n## Prior Extracted Values
|
|
|
21111
21117
|
return output.object;
|
|
21112
21118
|
};
|
|
21113
21119
|
let object;
|
|
21120
|
+
let retryEmptyObject = false;
|
|
21114
21121
|
try {
|
|
21115
21122
|
object = await generateWithStructuredOutput();
|
|
21123
|
+
retryEmptyObject = shouldRetryEmptyStructuredObject(object, structuredExtractors);
|
|
21116
21124
|
} catch (error) {
|
|
21117
21125
|
if (isAbortError$1(error, opts.abortSignal)) throw error;
|
|
21118
21126
|
try {
|
|
@@ -21129,6 +21137,19 @@ ${extractorInstructions}${priorLines.length > 0 ? `\n\n## Prior Extracted Values
|
|
|
21129
21137
|
};
|
|
21130
21138
|
}
|
|
21131
21139
|
}
|
|
21140
|
+
if (retryEmptyObject) try {
|
|
21141
|
+
object = await generateWithStructuredOutput(coreFeatures.has("json-prompt-injection:inline") ? "inline" : true);
|
|
21142
|
+
} catch (fallbackError) {
|
|
21143
|
+
if (isAbortError$1(fallbackError, opts.abortSignal)) throw fallbackError;
|
|
21144
|
+
const message = fallbackError instanceof Error ? fallbackError.message : String(fallbackError);
|
|
21145
|
+
return {
|
|
21146
|
+
values,
|
|
21147
|
+
failures: structuredExtractors.map((extractor) => ({
|
|
21148
|
+
slug: extractor.slug,
|
|
21149
|
+
error: message
|
|
21150
|
+
}))
|
|
21151
|
+
};
|
|
21152
|
+
}
|
|
21132
21153
|
for (const extractor of structuredExtractors) {
|
|
21133
21154
|
const value = object[extractor.slug];
|
|
21134
21155
|
if (value === void 0 || value === null || value === "") continue;
|
|
@@ -24412,6 +24433,17 @@ var TokenCounter = class TokenCounter {
|
|
|
24412
24433
|
toolResultDelta
|
|
24413
24434
|
};
|
|
24414
24435
|
}
|
|
24436
|
+
if (invocation.state === "output-error") {
|
|
24437
|
+
toolResultDelta++;
|
|
24438
|
+
const errorText = invocation.errorText;
|
|
24439
|
+
const errorMessage = typeof errorText === "string" ? errorText : "Tool execution failed";
|
|
24440
|
+
tokens += this.readOrPersistPartEstimate(part, "tool-result-error", errorMessage);
|
|
24441
|
+
return {
|
|
24442
|
+
tokens,
|
|
24443
|
+
overheadDelta,
|
|
24444
|
+
toolResultDelta
|
|
24445
|
+
};
|
|
24446
|
+
}
|
|
24415
24447
|
throw new Error(`Unhandled tool-invocation state '${part.toolInvocation?.state}' in token counting for part type '${part.type}'`);
|
|
24416
24448
|
}
|
|
24417
24449
|
if (typeof part.type === "string" && part.type.startsWith("data-")) return {
|
|
@@ -24633,6 +24665,7 @@ var WorkingMemoryExtractor = class extends Extractor {
|
|
|
24633
24665
|
name: "Working Memory",
|
|
24634
24666
|
includePreviousExtraction: false,
|
|
24635
24667
|
metadataKeyPath: false,
|
|
24668
|
+
retryStructuredExtractionOnEmptyObject: true,
|
|
24636
24669
|
instructions: async (context) => buildWorkingMemoryInstructions(await getWorkingMemoryDetails(context)),
|
|
24637
24670
|
schema: async (context) => {
|
|
24638
24671
|
return (await getWorkingMemoryDetails(context)).usesSchema ? z$2.union([z$2.record(z$2.string(), z$2.unknown()), z$2.null()]) : void 0;
|
|
@@ -26798,7 +26831,7 @@ var ObservationStrategy = class ObservationStrategy {
|
|
|
26798
26831
|
transient: true
|
|
26799
26832
|
}).catch(() => {});
|
|
26800
26833
|
const markerThreadId = marker.data?.threadId ?? this.opts.threadId;
|
|
26801
|
-
await this.persistMarkerToStorage(marker, markerThreadId, this.opts.resourceId);
|
|
26834
|
+
if (!await this.persistMarkerToMessage(marker, this.opts.messageList, markerThreadId, this.opts.resourceId)) await this.persistMarkerToStorage(marker, markerThreadId, this.opts.resourceId);
|
|
26802
26835
|
}
|
|
26803
26836
|
getObservationMarkerConfig() {
|
|
26804
26837
|
return {
|
|
@@ -26926,9 +26959,13 @@ var ObservationStrategy = class ObservationStrategy {
|
|
|
26926
26959
|
/**
|
|
26927
26960
|
* Persist a marker part on the last assistant message in a MessageList
|
|
26928
26961
|
* AND save the updated message to the DB.
|
|
26962
|
+
*
|
|
26963
|
+
* @returns true when a marker was placed on an assistant message, false when
|
|
26964
|
+
* no list was provided or the list contains no assistant message (caller
|
|
26965
|
+
* should fall back to `persistMarkerToStorage`).
|
|
26929
26966
|
*/
|
|
26930
26967
|
async persistMarkerToMessage(marker, messageList, threadId, resourceId) {
|
|
26931
|
-
if (!messageList) return;
|
|
26968
|
+
if (!messageList) return false;
|
|
26932
26969
|
const allMsgs = messageList.get.all.db();
|
|
26933
26970
|
for (let i = allMsgs.length - 1; i >= 0; i--) {
|
|
26934
26971
|
const msg = allMsgs[i];
|
|
@@ -26944,9 +26981,10 @@ var ObservationStrategy = class ObservationStrategy {
|
|
|
26944
26981
|
} catch (e) {
|
|
26945
26982
|
omDebug(`[OM:persistMarker] failed to save marker to DB: ${e}`);
|
|
26946
26983
|
}
|
|
26947
|
-
return;
|
|
26984
|
+
return true;
|
|
26948
26985
|
}
|
|
26949
26986
|
}
|
|
26987
|
+
return false;
|
|
26950
26988
|
}
|
|
26951
26989
|
};
|
|
26952
26990
|
var SyncObservationStrategy = class extends ObservationStrategy {
|
|
@@ -27743,6 +27781,12 @@ var ObservationStep = class {
|
|
|
27743
27781
|
stepNumber;
|
|
27744
27782
|
_prepared = false;
|
|
27745
27783
|
_context;
|
|
27784
|
+
/**
|
|
27785
|
+
* True when this step seeded an empty assistant response message for a step-0
|
|
27786
|
+
* observation. While set, the response-id rotation hook must NOT run — rotating
|
|
27787
|
+
* would orphan the seed (markers would sit on a message the agent never streams into).
|
|
27788
|
+
*/
|
|
27789
|
+
seededResponseMessage = false;
|
|
27746
27790
|
constructor(turn, stepNumber) {
|
|
27747
27791
|
this.turn = turn;
|
|
27748
27792
|
this.stepNumber = stepNumber;
|
|
@@ -27871,15 +27915,41 @@ var ObservationStep = class {
|
|
|
27871
27915
|
});
|
|
27872
27916
|
buffered = true;
|
|
27873
27917
|
}
|
|
27874
|
-
|
|
27875
|
-
|
|
27876
|
-
|
|
27877
|
-
|
|
27878
|
-
if (
|
|
27879
|
-
|
|
27880
|
-
|
|
27918
|
+
const willObserveNow = statusSnapshot.shouldObserve && !hasIncompleteToolCalls;
|
|
27919
|
+
/** In-flight message ids the step-0 cleanup must never remove from live context. */
|
|
27920
|
+
let step0PreserveIds;
|
|
27921
|
+
if (this.stepNumber > 0 || willObserveNow) {
|
|
27922
|
+
if (this.stepNumber > 0) {
|
|
27923
|
+
const newInput = messageList.clear.input.db();
|
|
27924
|
+
const newOutput = messageList.clear.response.db();
|
|
27925
|
+
const messagesToSave = [...newInput, ...newOutput];
|
|
27926
|
+
if (messagesToSave.length > 0) {
|
|
27927
|
+
await om.persistMessages(messagesToSave, threadId, resourceId);
|
|
27928
|
+
for (const msg of messagesToSave) messageList.add(msg, "memory");
|
|
27929
|
+
}
|
|
27930
|
+
} else {
|
|
27931
|
+
const pending = [...messageList.get.input.db(), ...messageList.get.response.db()];
|
|
27932
|
+
if (pending.length > 0) await om.persistMessages(pending, threadId, resourceId);
|
|
27933
|
+
step0PreserveIds = pending.map((msg) => msg.id);
|
|
27934
|
+
}
|
|
27935
|
+
if (this.stepNumber === 0 && willObserveNow && this.turn.responseMessageId) {
|
|
27936
|
+
const seed = {
|
|
27937
|
+
id: this.turn.responseMessageId,
|
|
27938
|
+
role: "assistant",
|
|
27939
|
+
content: {
|
|
27940
|
+
format: 2,
|
|
27941
|
+
parts: []
|
|
27942
|
+
},
|
|
27943
|
+
type: "text",
|
|
27944
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
27945
|
+
threadId,
|
|
27946
|
+
resourceId
|
|
27947
|
+
};
|
|
27948
|
+
messageList.add(seed, "response");
|
|
27949
|
+
this.seededResponseMessage = true;
|
|
27950
|
+
omDebug(`[OM:step0] seeded response message ${seed.id} for step-0 observation markers`);
|
|
27881
27951
|
}
|
|
27882
|
-
if (
|
|
27952
|
+
if (willObserveNow) {
|
|
27883
27953
|
const preObsGeneration = this.turn.record.generationCount;
|
|
27884
27954
|
const obsResult = await this.runThresholdObservation();
|
|
27885
27955
|
observerExchange = obsResult.observerExchange;
|
|
@@ -27893,7 +27963,8 @@ var ObservationStep = class {
|
|
|
27893
27963
|
resourceId,
|
|
27894
27964
|
messages: messageList,
|
|
27895
27965
|
observedMessageIds: observedIds,
|
|
27896
|
-
retentionFloor: minRemaining
|
|
27966
|
+
retentionFloor: minRemaining,
|
|
27967
|
+
preserveMessageIds: step0PreserveIds
|
|
27897
27968
|
});
|
|
27898
27969
|
if (statusSnapshot.asyncObservationEnabled) await om.resetBufferingState({
|
|
27899
27970
|
threadId,
|
|
@@ -27957,10 +28028,11 @@ var ObservationStep = class {
|
|
|
27957
28028
|
const { threadId, resourceId, messageList } = this.turn;
|
|
27958
28029
|
const om = this.turn.om;
|
|
27959
28030
|
await om.waitForBuffering(threadId, resourceId);
|
|
28031
|
+
const observableMessages = this.seededResponseMessage ? messageList.get.all.db().filter((msg) => msg.id !== this.turn.responseMessageId) : messageList.get.all.db();
|
|
27960
28032
|
const freshStatus = await om.getStatus({
|
|
27961
28033
|
threadId,
|
|
27962
28034
|
resourceId,
|
|
27963
|
-
messages:
|
|
28035
|
+
messages: observableMessages
|
|
27964
28036
|
});
|
|
27965
28037
|
if (!freshStatus.shouldObserve) return {
|
|
27966
28038
|
succeeded: false,
|
|
@@ -27970,7 +28042,7 @@ var ObservationStep = class {
|
|
|
27970
28042
|
const activation = await om.activate({
|
|
27971
28043
|
threadId,
|
|
27972
28044
|
resourceId,
|
|
27973
|
-
messages:
|
|
28045
|
+
messages: observableMessages,
|
|
27974
28046
|
currentModel: this.turn.actorModelContext,
|
|
27975
28047
|
writer: this.turn.writer,
|
|
27976
28048
|
messageList
|
|
@@ -28003,7 +28075,8 @@ var ObservationStep = class {
|
|
|
28003
28075
|
const obsResult = await om.observe({
|
|
28004
28076
|
threadId,
|
|
28005
28077
|
resourceId,
|
|
28006
|
-
messages:
|
|
28078
|
+
messages: observableMessages,
|
|
28079
|
+
messageList,
|
|
28007
28080
|
trigger: "turn-sync",
|
|
28008
28081
|
requestContext: this.turn.requestContext,
|
|
28009
28082
|
writer: this.turn.writer,
|
|
@@ -28020,10 +28093,12 @@ var ObservationStep = class {
|
|
|
28020
28093
|
break;
|
|
28021
28094
|
}
|
|
28022
28095
|
}
|
|
28023
|
-
|
|
28096
|
+
let messageToSeal = latestObservedIndex >= 0 ? liveMessages[latestObservedIndex] : void 0;
|
|
28097
|
+
if (this.stepNumber === 0 && messageToSeal?.role !== "assistant") messageToSeal = void 0;
|
|
28024
28098
|
const messagesToSeal = messageToSeal ? [messageToSeal] : [];
|
|
28025
28099
|
om.sealMessagesForBuffering(messagesToSeal);
|
|
28026
|
-
|
|
28100
|
+
if (this.seededResponseMessage) omDebug("[OM:observe] skipping response-id rotation — step-0 seeded response message holds the active id");
|
|
28101
|
+
else try {
|
|
28027
28102
|
await this.turn.hooks?.onSyncObservationComplete?.();
|
|
28028
28103
|
} catch (error) {
|
|
28029
28104
|
omDebug(`[OM:observe] onSyncObservationComplete hook failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -28082,6 +28157,8 @@ var ObservationTurn = class {
|
|
|
28082
28157
|
sendSignal;
|
|
28083
28158
|
/** Current actor model for this step. Updated by the processor before prepare(). */
|
|
28084
28159
|
actorModelContext;
|
|
28160
|
+
/** The active assistant response message ID for this step. Updated by the processor before prepare(). */
|
|
28161
|
+
responseMessageId;
|
|
28085
28162
|
/** Processor-provided hooks for turn/step lifecycle integration. */
|
|
28086
28163
|
hooks;
|
|
28087
28164
|
constructor(opts) {
|
|
@@ -30742,6 +30819,7 @@ ${formattedMessages}
|
|
|
30742
30819
|
*/
|
|
30743
30820
|
async getObservedMessageIdsForCleanup(opts) {
|
|
30744
30821
|
const { threadId, resourceId, messages, observedMessageIds, retentionFloor } = opts;
|
|
30822
|
+
const preserveSet = opts.preserveMessageIds?.length ? new Set(opts.preserveMessageIds) : null;
|
|
30745
30823
|
const record = await this.getOrCreateRecord(threadId, resourceId);
|
|
30746
30824
|
const effectiveObservedIds = observedMessageIds && observedMessageIds.length > 0 ? observedMessageIds : Array.isArray(record.observedMessageIds) ? record.observedMessageIds : [];
|
|
30747
30825
|
if (effectiveObservedIds.length === 0) return [];
|
|
@@ -30753,6 +30831,10 @@ ${formattedMessages}
|
|
|
30753
30831
|
const retentionCounter = typeof retentionFloor === "number" ? new TokenCounter() : null;
|
|
30754
30832
|
for (const msg of messages) {
|
|
30755
30833
|
if (!msg?.id || msg.id === "om-continuation" || !observedSet.has(msg.id)) continue;
|
|
30834
|
+
if (preserveSet?.has(msg.id)) {
|
|
30835
|
+
skipped += 1;
|
|
30836
|
+
continue;
|
|
30837
|
+
}
|
|
30756
30838
|
const unobservedParts = getUnobservedParts(msg);
|
|
30757
30839
|
const totalParts = msg.content?.parts?.length ?? 0;
|
|
30758
30840
|
if (unobservedParts.length > 0 && unobservedParts.length < totalParts) {
|
|
@@ -30797,7 +30879,7 @@ ${formattedMessages}
|
|
|
30797
30879
|
*/
|
|
30798
30880
|
/** @internal Used by ObservationStep. */
|
|
30799
30881
|
async cleanupMessages(opts) {
|
|
30800
|
-
const { threadId, resourceId, observedMessageIds, retentionFloor } = opts;
|
|
30882
|
+
const { threadId, resourceId, observedMessageIds, retentionFloor, preserveMessageIds } = opts;
|
|
30801
30883
|
const messageList = this.isMessageList(opts.messages) ? opts.messages : void 0;
|
|
30802
30884
|
const allMsgs = messageList ? messageList.get.all.db() : opts.messages;
|
|
30803
30885
|
let markerIdx = -1;
|
|
@@ -30818,7 +30900,8 @@ ${formattedMessages}
|
|
|
30818
30900
|
resourceId,
|
|
30819
30901
|
messages: allMsgs,
|
|
30820
30902
|
observedMessageIds,
|
|
30821
|
-
retentionFloor
|
|
30903
|
+
retentionFloor,
|
|
30904
|
+
preserveMessageIds
|
|
30822
30905
|
});
|
|
30823
30906
|
if (messageList) {
|
|
30824
30907
|
if (idsToRemoveList.length > 0) messageList.removeByIds(idsToRemoveList);
|
|
@@ -30830,18 +30913,21 @@ ${formattedMessages}
|
|
|
30830
30913
|
if (markerMsg && markerIdx !== -1) {
|
|
30831
30914
|
const idsToRemove = [];
|
|
30832
30915
|
const messagesToSave = [];
|
|
30916
|
+
const preserveSet = preserveMessageIds?.length ? new Set(preserveMessageIds) : null;
|
|
30833
30917
|
for (let i = 0; i < markerIdx; i++) {
|
|
30834
30918
|
const msg = allMsgs[i];
|
|
30835
|
-
if (msg?.id && msg.id !== "om-continuation") {
|
|
30919
|
+
if (msg?.id && msg.id !== "om-continuation" && !preserveSet?.has(msg.id)) {
|
|
30836
30920
|
idsToRemove.push(msg.id);
|
|
30837
30921
|
messagesToSave.push(msg);
|
|
30838
30922
|
}
|
|
30839
30923
|
}
|
|
30840
30924
|
messagesToSave.push(markerMsg);
|
|
30841
|
-
|
|
30842
|
-
|
|
30843
|
-
if (
|
|
30844
|
-
|
|
30925
|
+
if (!Boolean(markerMsg.id && preserveSet?.has(markerMsg.id))) {
|
|
30926
|
+
const unobservedParts = getUnobservedParts(markerMsg);
|
|
30927
|
+
if (unobservedParts.length === 0) {
|
|
30928
|
+
if (markerMsg.id) idsToRemove.push(markerMsg.id);
|
|
30929
|
+
} else if (unobservedParts.length < (markerMsg.content?.parts?.length ?? 0)) markerMsg.content.parts = unobservedParts;
|
|
30930
|
+
}
|
|
30845
30931
|
if (messageList) {
|
|
30846
30932
|
if (idsToRemove.length > 0) messageList.removeByIds(idsToRemove);
|
|
30847
30933
|
if (messagesToSave.length > 0) await this.persistMessages(messagesToSave, threadId, resourceId);
|
|
@@ -31628,6 +31714,7 @@ ${formattedMessages}
|
|
|
31628
31714
|
threadId,
|
|
31629
31715
|
resourceId,
|
|
31630
31716
|
messages: unobservedMessages,
|
|
31717
|
+
messageList: opts.messageList,
|
|
31631
31718
|
reflectionHooks,
|
|
31632
31719
|
agent: opts.agent,
|
|
31633
31720
|
requestContext,
|
|
@@ -32013,7 +32100,7 @@ var ObservationalMemoryProcessor = class {
|
|
|
32013
32100
|
this.temporalMarkers = options?.temporalMarkers ?? false;
|
|
32014
32101
|
}
|
|
32015
32102
|
async processInputStep(args) {
|
|
32016
|
-
const { messageList, requestContext, stepNumber, state: _state, writer, model, abortSignal, abort, rotateResponseMessageId } = args;
|
|
32103
|
+
const { messageList, requestContext, stepNumber, state: _state, writer, model, abortSignal, abort, messageId, rotateResponseMessageId } = args;
|
|
32017
32104
|
const state = _state ?? {};
|
|
32018
32105
|
omDebug(`[OM:processInputStep:ENTER] step=${stepNumber}, hasMastraMemory=${!!requestContext?.get("MastraMemory")}, hasMemoryInfo=${!!messageList?.serialize()?.memoryInfo?.threadId}`);
|
|
32019
32106
|
const context = this.engine.getThreadContext(requestContext, messageList);
|
|
@@ -32099,6 +32186,7 @@ var ObservationalMemoryProcessor = class {
|
|
|
32099
32186
|
state.__omObservabilityContext = observabilityContext;
|
|
32100
32187
|
this.turn.observabilityContext = observabilityContext;
|
|
32101
32188
|
this.turn.actorModelContext = actorModelContext;
|
|
32189
|
+
this.turn.responseMessageId = messageId;
|
|
32102
32190
|
{
|
|
32103
32191
|
const step = this.turn.step(stepNumber);
|
|
32104
32192
|
let ctx;
|
|
@@ -44602,4 +44690,4 @@ const agentBuilderWorkflows = {
|
|
|
44602
44690
|
//#endregion
|
|
44603
44691
|
export { agentBuilderWorkflows };
|
|
44604
44692
|
|
|
44605
|
-
//# sourceMappingURL=dist-
|
|
44693
|
+
//# sourceMappingURL=dist-IUXZtNBY.js.map
|