@mastra/server 1.56.0-alpha.2 → 1.56.0-alpha.4
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 +43 -0
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +6 -0
- package/dist/{a2a-DaFY01Nq.js → a2a-BHqh8DdO.js} +2 -2
- package/dist/{a2a-DaFY01Nq.js.map → a2a-BHqh8DdO.js.map} +1 -1
- package/dist/{a2a-_ekkh9Eo.cjs → a2a-Dmw3AD3r.cjs} +2 -2
- package/dist/{a2a-_ekkh9Eo.cjs.map → a2a-Dmw3AD3r.cjs.map} +1 -1
- package/dist/{agent-builder-CaeaWZFr.cjs → agent-builder-BDYN3r89.cjs} +2 -2
- package/dist/{agent-builder-CaeaWZFr.cjs.map → agent-builder-BDYN3r89.cjs.map} +1 -1
- package/dist/{agent-builder-B077LU0q.js → agent-builder-Dqy_qumV.js} +2 -2
- package/dist/{agent-builder-B077LU0q.js.map → agent-builder-Dqy_qumV.js.map} +1 -1
- package/dist/{api-schema-manifest-TXvvzJiU.cjs → api-schema-manifest-BD9sVZgj.cjs} +2 -2
- package/dist/{api-schema-manifest-TXvvzJiU.cjs.map → api-schema-manifest-BD9sVZgj.cjs.map} +1 -1
- package/dist/{api-schema-manifest-BT6M02Lr.js → api-schema-manifest-DOHg_30B.js} +2 -2
- package/dist/{api-schema-manifest-BT6M02Lr.js.map → api-schema-manifest-DOHg_30B.js.map} +1 -1
- package/dist/{builder-registry-DLAloBZv.cjs → builder-registry-NmiGAW1q.cjs} +2 -2
- package/dist/{builder-registry-DLAloBZv.cjs.map → builder-registry-NmiGAW1q.cjs.map} +1 -1
- package/dist/{builder-registry-D-6UWXLu.js → builder-registry-dh22nXUR.js} +2 -2
- package/dist/{builder-registry-D-6UWXLu.js.map → builder-registry-dh22nXUR.js.map} +1 -1
- package/dist/{dist-CgHgmUmP.js → dist-BlHxui7N.js} +183 -33
- package/dist/dist-BlHxui7N.js.map +1 -0
- package/dist/{dist-3OAfymQm.cjs → dist-D9hQEsv9.cjs} +183 -33
- package/dist/dist-D9hQEsv9.cjs.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{routes-5DQoCzuO.cjs → routes-Bmt4vUom.cjs} +19 -3
- package/dist/routes-Bmt4vUom.cjs.map +1 -0
- package/dist/{routes-C_zs_0NM.js → routes-YeBVxmmg.js} +19 -3
- package/dist/routes-YeBVxmmg.js.map +1 -0
- package/dist/server/fga-permissions.d.ts.map +1 -1
- package/dist/server/handlers/a2a.cjs +1 -1
- package/dist/server/handlers/a2a.d.ts +4 -4
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +4 -4
- package/dist/server/handlers/agent-builder.d.ts +35 -5
- package/dist/server/handlers/agent-builder.d.ts.map +1 -1
- package/dist/server/handlers/agent-builder.js +4 -4
- package/dist/server/handlers/agent-versions.cjs +1 -1
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +2 -2
- package/dist/server/handlers/agents.js +2 -2
- package/dist/server/handlers/builder-registry.cjs +1 -1
- package/dist/server/handlers/builder-registry.js +1 -1
- package/dist/server/handlers/conversations.cjs +1 -1
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/datasets.d.ts +11 -11
- package/dist/server/handlers/logs.cjs +1 -1
- package/dist/server/handlers/logs.js +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/memory.cjs +1 -1
- package/dist/server/handlers/memory.js +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/responses.cjs +1 -1
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/responses.storage.cjs +1 -1
- package/dist/server/handlers/responses.storage.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-agent-favorites.cjs +1 -1
- package/dist/server/handlers/stored-agent-favorites.js +1 -1
- package/dist/server/handlers/stored-agents.cjs +1 -1
- package/dist/server/handlers/stored-agents.js +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/stored-workflows.cjs +6 -0
- package/dist/server/handlers/stored-workflows.d.ts +820 -0
- package/dist/server/handlers/stored-workflows.d.ts.map +1 -0
- package/dist/server/handlers/stored-workflows.js +2 -0
- package/dist/server/handlers/stored-workspaces.cjs +1 -1
- package/dist/server/handlers/stored-workspaces.js +1 -1
- package/dist/server/handlers/system.cjs +1 -1
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers/tools.cjs +2 -2
- package/dist/server/handlers/tools.js +2 -2
- package/dist/server/handlers/utils.cjs +1 -1
- package/dist/server/handlers/utils.js +1 -1
- package/dist/server/handlers/workflows.cjs +4 -4
- package/dist/server/handlers/workflows.cjs.map +1 -1
- package/dist/server/handlers/workflows.d.ts +45 -7
- package/dist/server/handlers/workflows.d.ts.map +1 -1
- package/dist/server/handlers/workflows.js +4 -4
- package/dist/server/handlers/workflows.js.map +1 -1
- package/dist/server/handlers.cjs +8 -1
- package/dist/server/handlers.d.ts +1 -0
- package/dist/server/handlers.d.ts.map +1 -1
- package/dist/server/handlers.js +3 -2
- package/dist/server/schemas/a2a.d.ts +3 -3
- package/dist/server/schemas/datasets.d.ts +5 -5
- package/dist/server/schemas/index.cjs +2 -2
- package/dist/server/schemas/index.js +2 -2
- package/dist/server/schemas/stored-workflows.d.ts +614 -0
- package/dist/server/schemas/stored-workflows.d.ts.map +1 -0
- package/dist/server/schemas/workflows.d.ts +24 -0
- package/dist/server/schemas/workflows.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +2 -2
- package/dist/server/server-adapter/index.js +2 -2
- package/dist/server/server-adapter/routes/a2a.d.ts +4 -4
- package/dist/server/server-adapter/routes/agent-builder.d.ts +35 -5
- package/dist/server/server-adapter/routes/agent-builder.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/datasets.d.ts +11 -11
- package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-workflows.d.ts +16 -0
- package/dist/server/server-adapter/routes/stored-workflows.d.ts.map +1 -0
- package/dist/server/server-adapter/routes/workflows.d.ts +45 -7
- package/dist/server/server-adapter/routes/workflows.d.ts.map +1 -1
- package/dist/server/utils.d.ts.map +1 -1
- package/dist/stored-workflows-B3zZJg8e.js +338 -0
- package/dist/stored-workflows-B3zZJg8e.js.map +1 -0
- package/dist/stored-workflows-RgQKpn7N.cjs +367 -0
- package/dist/stored-workflows-RgQKpn7N.cjs.map +1 -0
- package/dist/{utils-BNoVHi8G.cjs → utils-5wLvbOLW.cjs} +4 -2
- package/dist/{utils-BNoVHi8G.cjs.map → utils-5wLvbOLW.cjs.map} +1 -1
- package/dist/{utils-Bfyc8rsg.js → utils-CmHd1Sgh.js} +3 -1
- package/dist/{utils-C1_mI2Ws.cjs.map → utils-CmHd1Sgh.js.map} +1 -1
- package/dist/{utils-EZi2K0ph.js → utils-DVelcVp5.js} +4 -2
- package/dist/{utils-EZi2K0ph.js.map → utils-DVelcVp5.js.map} +1 -1
- package/dist/{utils-C1_mI2Ws.cjs → utils-wTwyTjg3.cjs} +3 -1
- package/dist/utils-wTwyTjg3.cjs.map +1 -0
- package/dist/{workflows-CiUa_yVU.js → workflows-DPW6FrY0.js} +8 -3
- package/dist/workflows-DPW6FrY0.js.map +1 -0
- package/dist/{workflows-Bxy77CRQ.cjs → workflows-XfiENvkF.cjs} +8 -3
- package/dist/workflows-XfiENvkF.cjs.map +1 -0
- package/package.json +7 -7
- package/dist/dist-3OAfymQm.cjs.map +0 -1
- package/dist/dist-CgHgmUmP.js.map +0 -1
- package/dist/routes-5DQoCzuO.cjs.map +0 -1
- package/dist/routes-C_zs_0NM.js.map +0 -1
- package/dist/utils-Bfyc8rsg.js.map +0 -1
- package/dist/workflows-Bxy77CRQ.cjs.map +0 -1
- package/dist/workflows-CiUa_yVU.js.map +0 -1
|
@@ -5961,7 +5961,7 @@ function splitLines(text) {
|
|
|
5961
5961
|
return result;
|
|
5962
5962
|
}
|
|
5963
5963
|
//#endregion
|
|
5964
|
-
//#region ../memory/dist/src-
|
|
5964
|
+
//#region ../memory/dist/src-DoNjfXNm.js
|
|
5965
5965
|
var __defProp$4 = Object.defineProperty;
|
|
5966
5966
|
var __exportAll = (all, no_symbols) => {
|
|
5967
5967
|
let target = {};
|
|
@@ -21098,13 +21098,19 @@ ${extractorInstructions}${priorLines.length > 0 ? `\n\n## Prior Extracted Values
|
|
|
21098
21098
|
* auth, versions, routing hints, and resource id, but they must not present as
|
|
21099
21099
|
* another run on the parent thread or core's cross-agent thread wait can block
|
|
21100
21100
|
* on the parent run that is waiting for OM to complete.
|
|
21101
|
+
*
|
|
21102
|
+
* A fresh RequestContext clone is always returned so that memory-scoped writes
|
|
21103
|
+
* made by the internal agent run (e.g. the `MastraMemory` entry that agent.generate
|
|
21104
|
+
* sets from the observer's temporary `structured-observer` memory) cannot leak back
|
|
21105
|
+
* into the parent's RequestContext. Without this isolation the parent's OM turn later
|
|
21106
|
+
* reads the temporary observer's resourceId and injects a continuation message that
|
|
21107
|
+
* fails MessageList's resourceId validation.
|
|
21101
21108
|
*/
|
|
21102
21109
|
function withOmInternalThreadId(requestContext, omAgentId) {
|
|
21103
21110
|
if (!requestContext) return void 0;
|
|
21104
|
-
const parentThreadId = requestContext.get(_mastra_core_request_context.MASTRA_THREAD_ID_KEY);
|
|
21105
|
-
if (typeof parentThreadId !== "string" || !parentThreadId) return requestContext;
|
|
21106
21111
|
const internalRequestContext = new _mastra_core_request_context.RequestContext(requestContext.entries());
|
|
21107
|
-
|
|
21112
|
+
const parentThreadId = requestContext.get(_mastra_core_request_context.MASTRA_THREAD_ID_KEY);
|
|
21113
|
+
if (typeof parentThreadId === "string" && parentThreadId) internalRequestContext.set(_mastra_core_request_context.MASTRA_THREAD_ID_KEY, `${parentThreadId}-${omAgentId}`);
|
|
21108
21114
|
return internalRequestContext;
|
|
21109
21115
|
}
|
|
21110
21116
|
const ANCHOR_ID_PATTERN = /^\[(O\d+(?:-N\d+)?)\]\s*/;
|
|
@@ -22920,7 +22926,7 @@ var ObserverRunner = class {
|
|
|
22920
22926
|
extractors: activeExtractors,
|
|
22921
22927
|
memory: temporaryMemory?.options,
|
|
22922
22928
|
priorExtractedValues: options?.priorExtractedValues,
|
|
22923
|
-
requestContext:
|
|
22929
|
+
requestContext: internalRequestContext,
|
|
22924
22930
|
observabilityContext: options?.observabilityContext,
|
|
22925
22931
|
abortSignal
|
|
22926
22932
|
});
|
|
@@ -26652,7 +26658,10 @@ var ObservationStrategy = class ObservationStrategy {
|
|
|
26652
26658
|
await this.persistMarkerToStorage(failedMarkerForStorage, threadId, this.opts.resourceId).catch(() => {});
|
|
26653
26659
|
if (abortSignal?.aborted) throw error;
|
|
26654
26660
|
omError("[OM] Observation failed", error);
|
|
26655
|
-
return {
|
|
26661
|
+
return {
|
|
26662
|
+
observed: false,
|
|
26663
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
26664
|
+
};
|
|
26656
26665
|
}
|
|
26657
26666
|
omError("[OM] Observation failed", error);
|
|
26658
26667
|
throw error;
|
|
@@ -27690,7 +27699,12 @@ var ObservationStep = class {
|
|
|
27690
27699
|
currentModel: this.turn.actorModelContext,
|
|
27691
27700
|
requestContext: this.turn.requestContext,
|
|
27692
27701
|
observabilityContext: this.turn.observabilityContext,
|
|
27693
|
-
lastActivityAt: getLastActivityFromMessages(messageList.get.all.db())
|
|
27702
|
+
lastActivityAt: getLastActivityFromMessages(messageList.get.all.db()),
|
|
27703
|
+
reflectionHooks: om.composeHooks(void 0, {
|
|
27704
|
+
threadId,
|
|
27705
|
+
resourceId,
|
|
27706
|
+
trigger: "turn-sync"
|
|
27707
|
+
})
|
|
27694
27708
|
});
|
|
27695
27709
|
await this.turn.refreshRecord();
|
|
27696
27710
|
if (this.turn.record.generationCount > preReflectGeneration) reflected = true;
|
|
@@ -27850,7 +27864,12 @@ var ObservationStep = class {
|
|
|
27850
27864
|
currentModel: this.turn.actorModelContext,
|
|
27851
27865
|
requestContext: this.turn.requestContext,
|
|
27852
27866
|
observabilityContext: this.turn.observabilityContext,
|
|
27853
|
-
lastActivityAt: getLastActivityFromMessages(messageList.get.all.db())
|
|
27867
|
+
lastActivityAt: getLastActivityFromMessages(messageList.get.all.db()),
|
|
27868
|
+
reflectionHooks: om.composeHooks(void 0, {
|
|
27869
|
+
threadId,
|
|
27870
|
+
resourceId,
|
|
27871
|
+
trigger: "turn-sync"
|
|
27872
|
+
})
|
|
27854
27873
|
});
|
|
27855
27874
|
return {
|
|
27856
27875
|
succeeded: true,
|
|
@@ -27863,6 +27882,7 @@ var ObservationStep = class {
|
|
|
27863
27882
|
threadId,
|
|
27864
27883
|
resourceId,
|
|
27865
27884
|
messages: messageList.get.all.db(),
|
|
27885
|
+
trigger: "turn-sync",
|
|
27866
27886
|
requestContext: this.turn.requestContext,
|
|
27867
27887
|
writer: this.turn.writer,
|
|
27868
27888
|
observabilityContext: this.turn.observabilityContext
|
|
@@ -28646,7 +28666,7 @@ var ReflectorRunner = class {
|
|
|
28646
28666
|
extractors: activeExtractors,
|
|
28647
28667
|
memory: temporaryMemory?.options,
|
|
28648
28668
|
priorExtractedValues,
|
|
28649
|
-
requestContext,
|
|
28669
|
+
requestContext: internalRequestContext,
|
|
28650
28670
|
observabilityContext,
|
|
28651
28671
|
abortSignal
|
|
28652
28672
|
});
|
|
@@ -28688,12 +28708,16 @@ var ReflectorRunner = class {
|
|
|
28688
28708
|
});
|
|
28689
28709
|
reflectionHooks?.onReflectionStart?.();
|
|
28690
28710
|
const asyncOp = this.doAsyncBufferedReflection(record, bufferKey, writer, requestContext, observabilityContext, priorExtractedValues, mainAgent, sendSignal).then((outcome) => {
|
|
28691
|
-
|
|
28692
|
-
|
|
28693
|
-
|
|
28694
|
-
|
|
28695
|
-
|
|
28696
|
-
|
|
28711
|
+
try {
|
|
28712
|
+
reflectionHooks?.onReflectionEnd?.({
|
|
28713
|
+
usage: outcome?.usage,
|
|
28714
|
+
...outcome?.providerMetadata ? { providerMetadata: outcome.providerMetadata } : {}
|
|
28715
|
+
});
|
|
28716
|
+
} catch (hookError) {
|
|
28717
|
+
omError("[OM] onReflectionEnd hook failed after async buffered reflection", hookError);
|
|
28718
|
+
}
|
|
28719
|
+
}, async (error) => {
|
|
28720
|
+
if (writer) try {
|
|
28697
28721
|
const failedMarker = createBufferingFailedMarker({
|
|
28698
28722
|
cycleId: `reflect-buf-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,
|
|
28699
28723
|
operationType: "reflection",
|
|
@@ -28708,12 +28732,18 @@ var ReflectorRunner = class {
|
|
|
28708
28732
|
transient: true
|
|
28709
28733
|
}).catch(() => {});
|
|
28710
28734
|
await this.persistMarkerToStorage(failedMarker, record.threadId ?? "", record.resourceId ?? void 0);
|
|
28735
|
+
} catch (markerError) {
|
|
28736
|
+
omError("[OM] Failed to persist buffering-failed marker after async buffered reflection failure", markerError);
|
|
28711
28737
|
}
|
|
28712
28738
|
omError("[OM] Async buffered reflection failed", error);
|
|
28713
|
-
|
|
28714
|
-
|
|
28715
|
-
|
|
28716
|
-
|
|
28739
|
+
try {
|
|
28740
|
+
reflectionHooks?.onReflectionEnd?.({
|
|
28741
|
+
usage: void 0,
|
|
28742
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
28743
|
+
});
|
|
28744
|
+
} catch (hookError) {
|
|
28745
|
+
omError("[OM] onReflectionEnd hook failed after async buffered reflection failure", hookError);
|
|
28746
|
+
}
|
|
28717
28747
|
BufferingCoordinator.lastBufferedBoundary.delete(bufferKey);
|
|
28718
28748
|
}).finally(() => {
|
|
28719
28749
|
BufferingCoordinator.asyncBufferingOps.delete(bufferKey);
|
|
@@ -28960,7 +28990,6 @@ var ReflectorRunner = class {
|
|
|
28960
28990
|
return;
|
|
28961
28991
|
}
|
|
28962
28992
|
}
|
|
28963
|
-
reflectionHooks?.onReflectionStart?.();
|
|
28964
28993
|
await this.storage.setReflectingFlag(record.id, true);
|
|
28965
28994
|
registerOp(record.id, "reflecting");
|
|
28966
28995
|
const cycleId = crypto.randomUUID();
|
|
@@ -29001,6 +29030,7 @@ var ReflectorRunner = class {
|
|
|
29001
29030
|
let reflectionUsage;
|
|
29002
29031
|
let reflectionProviderMetadata;
|
|
29003
29032
|
let reflectionError;
|
|
29033
|
+
reflectionHooks?.onReflectionStart?.();
|
|
29004
29034
|
try {
|
|
29005
29035
|
const compressionStartLevel = await this.getCompressionStartLevel(requestContext);
|
|
29006
29036
|
const reflectResult = await this.call(record.activeObservations, void 0, streamContext, reflectThreshold, abortSignal, void 0, compressionStartLevel, requestContext, priorExtractedValues, observabilityContext, void 0, mainAgent, sendSignal);
|
|
@@ -29064,12 +29094,15 @@ var ReflectorRunner = class {
|
|
|
29064
29094
|
omError("[OM] Reflection failed", error);
|
|
29065
29095
|
} finally {
|
|
29066
29096
|
await this.storage.setReflectingFlag(record.id, false);
|
|
29067
|
-
|
|
29068
|
-
|
|
29069
|
-
|
|
29070
|
-
|
|
29071
|
-
|
|
29072
|
-
|
|
29097
|
+
try {
|
|
29098
|
+
reflectionHooks?.onReflectionEnd?.({
|
|
29099
|
+
usage: reflectionUsage,
|
|
29100
|
+
error: reflectionError,
|
|
29101
|
+
...reflectionProviderMetadata ? { providerMetadata: reflectionProviderMetadata } : {}
|
|
29102
|
+
});
|
|
29103
|
+
} finally {
|
|
29104
|
+
unregisterOp(record.id, "reflecting");
|
|
29105
|
+
}
|
|
29073
29106
|
}
|
|
29074
29107
|
}
|
|
29075
29108
|
};
|
|
@@ -29518,6 +29551,8 @@ var ObservationalMemory = class ObservationalMemory {
|
|
|
29518
29551
|
reflectionConfig;
|
|
29519
29552
|
onDebugEvent;
|
|
29520
29553
|
onIndexObservations;
|
|
29554
|
+
/** Config-level lifecycle hooks fired for every observation/reflection cycle. */
|
|
29555
|
+
hooks;
|
|
29521
29556
|
/** Observer agent runner — handles LLM calls for extracting observations. */
|
|
29522
29557
|
observer;
|
|
29523
29558
|
/** Reflector agent runner — handles LLM calls for compressing observations. */
|
|
@@ -29578,6 +29613,7 @@ var ObservationalMemory = class ObservationalMemory {
|
|
|
29578
29613
|
this.scope = config.scope ?? "thread";
|
|
29579
29614
|
this.retrieval = Boolean(config.retrieval);
|
|
29580
29615
|
this.onIndexObservations = config.onIndexObservations;
|
|
29616
|
+
this.hooks = config.hooks;
|
|
29581
29617
|
this.mastra = config.mastra;
|
|
29582
29618
|
this.memory = config.memory;
|
|
29583
29619
|
const resolveModel = (model, defaultModel) => model === "default" ? defaultModel : model;
|
|
@@ -30499,7 +30535,11 @@ ${formattedMessages}
|
|
|
30499
30535
|
transient: true
|
|
30500
30536
|
}).catch(() => {});
|
|
30501
30537
|
omDebug(`[OM:bufferInput] cycleId=${cycleId}, msgCount=${messagesToBuffer.length}, msgTokens=${tokensToBuffer}, ids=${messagesToBuffer.map((m) => `${m.id?.slice(0, 8)}@${m.createdAt ? new Date(m.createdAt).toISOString() : "none"}`).join(",")}`);
|
|
30502
|
-
await
|
|
30538
|
+
await this.runBufferedObservationCycle({
|
|
30539
|
+
threadId,
|
|
30540
|
+
resourceId: freshRecord.resourceId ?? void 0,
|
|
30541
|
+
trigger: "async-buffer"
|
|
30542
|
+
}, () => ObservationStrategy.create(this, {
|
|
30503
30543
|
record: freshRecord,
|
|
30504
30544
|
threadId,
|
|
30505
30545
|
resourceId: freshRecord.resourceId ?? void 0,
|
|
@@ -30509,7 +30549,7 @@ ${formattedMessages}
|
|
|
30509
30549
|
writer,
|
|
30510
30550
|
requestContext,
|
|
30511
30551
|
observabilityContext
|
|
30512
|
-
}).run();
|
|
30552
|
+
}).run());
|
|
30513
30553
|
const maxTs = this.getMaxMessageTimestamp(messagesToBuffer);
|
|
30514
30554
|
const cursor = new Date(maxTs.getTime() + 1);
|
|
30515
30555
|
BufferingCoordinator.lastBufferedAtTime.set(bufferKey, cursor);
|
|
@@ -31082,7 +31122,11 @@ ${formattedMessages}
|
|
|
31082
31122
|
...startMarker,
|
|
31083
31123
|
transient: true
|
|
31084
31124
|
}).catch(() => {});
|
|
31085
|
-
await
|
|
31125
|
+
await this.runBufferedObservationCycle({
|
|
31126
|
+
threadId,
|
|
31127
|
+
resourceId: record.resourceId ?? resourceId,
|
|
31128
|
+
trigger: "async-buffer"
|
|
31129
|
+
}, () => ObservationStrategy.create(this, {
|
|
31086
31130
|
record,
|
|
31087
31131
|
threadId,
|
|
31088
31132
|
resourceId: record.resourceId ?? void 0,
|
|
@@ -31095,7 +31139,7 @@ ${formattedMessages}
|
|
|
31095
31139
|
requestContext,
|
|
31096
31140
|
currentModel: opts.currentModel,
|
|
31097
31141
|
observabilityContext
|
|
31098
|
-
}).run();
|
|
31142
|
+
}).run());
|
|
31099
31143
|
if (isOmReproCaptureEnabled()) writeObserverExchangeReproCapture({
|
|
31100
31144
|
threadId,
|
|
31101
31145
|
resourceId: record.resourceId ?? void 0,
|
|
@@ -31305,6 +31349,88 @@ ${formattedMessages}
|
|
|
31305
31349
|
};
|
|
31306
31350
|
}
|
|
31307
31351
|
/**
|
|
31352
|
+
* Compose the config-level hooks with optional per-call hooks into a single
|
|
31353
|
+
* `ObserveHooks` object, binding call context onto the config-level
|
|
31354
|
+
* callbacks. Config-level hooks are guarded so a throwing consumer hook can
|
|
31355
|
+
* never fail an observation/reflection cycle; per-call hooks keep their
|
|
31356
|
+
* existing payloads and propagation semantics. Returns undefined when
|
|
31357
|
+
* neither is configured, so call sites stay zero-cost.
|
|
31358
|
+
*
|
|
31359
|
+
* Used internally by every pipeline path (manual observe/reflect,
|
|
31360
|
+
* turn-engine sync observation, async buffering); public only so the
|
|
31361
|
+
* observation turn engine can thread config-level reflection hooks into
|
|
31362
|
+
* reflector calls.
|
|
31363
|
+
*
|
|
31364
|
+
* @internal
|
|
31365
|
+
*/
|
|
31366
|
+
composeHooks(callHooks, context) {
|
|
31367
|
+
const configHooks = this.hooks;
|
|
31368
|
+
if (!configHooks) return callHooks;
|
|
31369
|
+
if (!callHooks && !Object.keys(configHooks).length) return void 0;
|
|
31370
|
+
const fireConfigHook = (name, arg) => {
|
|
31371
|
+
const hook = configHooks[name];
|
|
31372
|
+
if (!hook) return;
|
|
31373
|
+
const logHookFailure = (error) => omDebug(`[OM:hooks] config-level ${name} hook failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
31374
|
+
try {
|
|
31375
|
+
const out = hook(arg);
|
|
31376
|
+
if (out && typeof out.then === "function") out.then(void 0, logHookFailure);
|
|
31377
|
+
} catch (error) {
|
|
31378
|
+
logHookFailure(error);
|
|
31379
|
+
}
|
|
31380
|
+
};
|
|
31381
|
+
return {
|
|
31382
|
+
onObservationStart: () => {
|
|
31383
|
+
fireConfigHook("onObservationStart", context);
|
|
31384
|
+
callHooks?.onObservationStart?.();
|
|
31385
|
+
},
|
|
31386
|
+
onObservationEnd: (result) => {
|
|
31387
|
+
fireConfigHook("onObservationEnd", {
|
|
31388
|
+
...context,
|
|
31389
|
+
...result
|
|
31390
|
+
});
|
|
31391
|
+
callHooks?.onObservationEnd?.(result);
|
|
31392
|
+
},
|
|
31393
|
+
onReflectionStart: () => {
|
|
31394
|
+
fireConfigHook("onReflectionStart", context);
|
|
31395
|
+
callHooks?.onReflectionStart?.();
|
|
31396
|
+
},
|
|
31397
|
+
onReflectionEnd: (result) => {
|
|
31398
|
+
fireConfigHook("onReflectionEnd", {
|
|
31399
|
+
...context,
|
|
31400
|
+
...result
|
|
31401
|
+
});
|
|
31402
|
+
callHooks?.onReflectionEnd?.(result);
|
|
31403
|
+
}
|
|
31404
|
+
};
|
|
31405
|
+
}
|
|
31406
|
+
/**
|
|
31407
|
+
* Run one buffered observation cycle, firing config-level hooks around it.
|
|
31408
|
+
* Shared by both async-buffer lanes — buffer() and
|
|
31409
|
+
* runAsyncBufferedObservation() — whose fire-and-forget callers never see
|
|
31410
|
+
* the strategy result. The async-buffer strategy swallows failures
|
|
31411
|
+
* (rethrowOnFailure=false) and surfaces them on the result instead, so the
|
|
31412
|
+
* end hook reports `error` for failed cycles even though nothing throws.
|
|
31413
|
+
*/
|
|
31414
|
+
async runBufferedObservationCycle(context, run) {
|
|
31415
|
+
const hooks = this.composeHooks(void 0, context);
|
|
31416
|
+
hooks?.onObservationStart?.();
|
|
31417
|
+
let runResult;
|
|
31418
|
+
let runError;
|
|
31419
|
+
try {
|
|
31420
|
+
runResult = await run();
|
|
31421
|
+
return runResult;
|
|
31422
|
+
} catch (error) {
|
|
31423
|
+
runError = error instanceof Error ? error : new Error(String(error));
|
|
31424
|
+
throw error;
|
|
31425
|
+
} finally {
|
|
31426
|
+
hooks?.onObservationEnd?.({
|
|
31427
|
+
usage: runResult?.usage,
|
|
31428
|
+
error: runError ?? runResult?.error,
|
|
31429
|
+
...runResult?.providerMetadata ? { providerMetadata: runResult.providerMetadata } : {}
|
|
31430
|
+
});
|
|
31431
|
+
}
|
|
31432
|
+
}
|
|
31433
|
+
/**
|
|
31308
31434
|
* Manually trigger observation.
|
|
31309
31435
|
*
|
|
31310
31436
|
* When `messages` is provided, those are used directly (filtered for unobserved)
|
|
@@ -31315,8 +31441,13 @@ ${formattedMessages}
|
|
|
31315
31441
|
* along with the updated record.
|
|
31316
31442
|
*/
|
|
31317
31443
|
async observe(opts) {
|
|
31318
|
-
const { threadId, resourceId, messages,
|
|
31444
|
+
const { threadId, resourceId, messages, requestContext } = opts;
|
|
31319
31445
|
const lockKey = this.buffering.getLockKey(threadId, resourceId);
|
|
31446
|
+
const hooks = this.composeHooks(opts.hooks, {
|
|
31447
|
+
threadId,
|
|
31448
|
+
resourceId,
|
|
31449
|
+
trigger: opts.trigger ?? "manual"
|
|
31450
|
+
});
|
|
31320
31451
|
const reflectionHooks = hooks ? {
|
|
31321
31452
|
onReflectionStart: hooks.onReflectionStart,
|
|
31322
31453
|
onReflectionEnd: hooks.onReflectionEnd
|
|
@@ -31389,6 +31520,15 @@ ${formattedMessages}
|
|
|
31389
31520
|
};
|
|
31390
31521
|
await this.storage.setReflectingFlag(record.id, true);
|
|
31391
31522
|
registerOp(record.id, "reflecting");
|
|
31523
|
+
const hooks = this.composeHooks(void 0, {
|
|
31524
|
+
threadId,
|
|
31525
|
+
resourceId,
|
|
31526
|
+
trigger: "manual"
|
|
31527
|
+
});
|
|
31528
|
+
hooks?.onReflectionStart?.();
|
|
31529
|
+
let reflectionUsage;
|
|
31530
|
+
let reflectionProviderMetadata;
|
|
31531
|
+
let reflectionError;
|
|
31392
31532
|
try {
|
|
31393
31533
|
const thread = await this.storage.getThreadById({ threadId });
|
|
31394
31534
|
const previousOmMetadata = (0, _mastra_core_memory.getThreadOMMetadata)(thread?.metadata);
|
|
@@ -31418,12 +31558,16 @@ ${formattedMessages}
|
|
|
31418
31558
|
metadata: newMetadata
|
|
31419
31559
|
});
|
|
31420
31560
|
}
|
|
31561
|
+
const updatedRecord = await this.getOrCreateRecord(threadId, resourceId);
|
|
31562
|
+
reflectionUsage = reflectResult.usage;
|
|
31563
|
+
reflectionProviderMetadata = reflectResult.providerMetadata;
|
|
31421
31564
|
return {
|
|
31422
31565
|
reflected: true,
|
|
31423
|
-
record:
|
|
31566
|
+
record: updatedRecord,
|
|
31424
31567
|
usage: reflectResult.usage
|
|
31425
31568
|
};
|
|
31426
31569
|
} catch (error) {
|
|
31570
|
+
reflectionError = error instanceof Error ? error : new Error(String(error));
|
|
31427
31571
|
omError("[OM] reflect() failed", error);
|
|
31428
31572
|
return {
|
|
31429
31573
|
reflected: false,
|
|
@@ -31431,6 +31575,11 @@ ${formattedMessages}
|
|
|
31431
31575
|
usage: void 0
|
|
31432
31576
|
};
|
|
31433
31577
|
} finally {
|
|
31578
|
+
hooks?.onReflectionEnd?.({
|
|
31579
|
+
usage: reflectionUsage,
|
|
31580
|
+
error: reflectionError,
|
|
31581
|
+
...reflectionProviderMetadata ? { providerMetadata: reflectionProviderMetadata } : {}
|
|
31582
|
+
});
|
|
31434
31583
|
await this.storage.setReflectingFlag(record.id, false);
|
|
31435
31584
|
unregisterOp(record.id, "reflecting");
|
|
31436
31585
|
}
|
|
@@ -32997,6 +33146,7 @@ ${workingMemory}`;
|
|
|
32997
33146
|
model: omConfig.model,
|
|
32998
33147
|
mastra: this._mastraInstance,
|
|
32999
33148
|
onIndexObservations,
|
|
33149
|
+
hooks: omConfig.hooks,
|
|
33000
33150
|
observation: omConfig.observation ? {
|
|
33001
33151
|
model: omConfig.observation.model,
|
|
33002
33152
|
messageTokens: omConfig.observation.messageTokens,
|
|
@@ -44288,4 +44438,4 @@ const agentBuilderWorkflows = {
|
|
|
44288
44438
|
//#endregion
|
|
44289
44439
|
exports.agentBuilderWorkflows = agentBuilderWorkflows;
|
|
44290
44440
|
|
|
44291
|
-
//# sourceMappingURL=dist-
|
|
44441
|
+
//# sourceMappingURL=dist-D9hQEsv9.cjs.map
|