@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
|
@@ -5958,7 +5958,7 @@ function splitLines(text) {
|
|
|
5958
5958
|
return result;
|
|
5959
5959
|
}
|
|
5960
5960
|
//#endregion
|
|
5961
|
-
//#region ../memory/dist/src-
|
|
5961
|
+
//#region ../memory/dist/src-DoNjfXNm.js
|
|
5962
5962
|
var __defProp$4 = Object.defineProperty;
|
|
5963
5963
|
var __exportAll = (all, no_symbols) => {
|
|
5964
5964
|
let target = {};
|
|
@@ -21095,13 +21095,19 @@ ${extractorInstructions}${priorLines.length > 0 ? `\n\n## Prior Extracted Values
|
|
|
21095
21095
|
* auth, versions, routing hints, and resource id, but they must not present as
|
|
21096
21096
|
* another run on the parent thread or core's cross-agent thread wait can block
|
|
21097
21097
|
* on the parent run that is waiting for OM to complete.
|
|
21098
|
+
*
|
|
21099
|
+
* A fresh RequestContext clone is always returned so that memory-scoped writes
|
|
21100
|
+
* made by the internal agent run (e.g. the `MastraMemory` entry that agent.generate
|
|
21101
|
+
* sets from the observer's temporary `structured-observer` memory) cannot leak back
|
|
21102
|
+
* into the parent's RequestContext. Without this isolation the parent's OM turn later
|
|
21103
|
+
* reads the temporary observer's resourceId and injects a continuation message that
|
|
21104
|
+
* fails MessageList's resourceId validation.
|
|
21098
21105
|
*/
|
|
21099
21106
|
function withOmInternalThreadId(requestContext, omAgentId) {
|
|
21100
21107
|
if (!requestContext) return void 0;
|
|
21101
|
-
const parentThreadId = requestContext.get(MASTRA_THREAD_ID_KEY);
|
|
21102
|
-
if (typeof parentThreadId !== "string" || !parentThreadId) return requestContext;
|
|
21103
21108
|
const internalRequestContext = new RequestContext(requestContext.entries());
|
|
21104
|
-
|
|
21109
|
+
const parentThreadId = requestContext.get(MASTRA_THREAD_ID_KEY);
|
|
21110
|
+
if (typeof parentThreadId === "string" && parentThreadId) internalRequestContext.set(MASTRA_THREAD_ID_KEY, `${parentThreadId}-${omAgentId}`);
|
|
21105
21111
|
return internalRequestContext;
|
|
21106
21112
|
}
|
|
21107
21113
|
const ANCHOR_ID_PATTERN = /^\[(O\d+(?:-N\d+)?)\]\s*/;
|
|
@@ -22917,7 +22923,7 @@ var ObserverRunner = class {
|
|
|
22917
22923
|
extractors: activeExtractors,
|
|
22918
22924
|
memory: temporaryMemory?.options,
|
|
22919
22925
|
priorExtractedValues: options?.priorExtractedValues,
|
|
22920
|
-
requestContext:
|
|
22926
|
+
requestContext: internalRequestContext,
|
|
22921
22927
|
observabilityContext: options?.observabilityContext,
|
|
22922
22928
|
abortSignal
|
|
22923
22929
|
});
|
|
@@ -26649,7 +26655,10 @@ var ObservationStrategy = class ObservationStrategy {
|
|
|
26649
26655
|
await this.persistMarkerToStorage(failedMarkerForStorage, threadId, this.opts.resourceId).catch(() => {});
|
|
26650
26656
|
if (abortSignal?.aborted) throw error;
|
|
26651
26657
|
omError("[OM] Observation failed", error);
|
|
26652
|
-
return {
|
|
26658
|
+
return {
|
|
26659
|
+
observed: false,
|
|
26660
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
26661
|
+
};
|
|
26653
26662
|
}
|
|
26654
26663
|
omError("[OM] Observation failed", error);
|
|
26655
26664
|
throw error;
|
|
@@ -27687,7 +27696,12 @@ var ObservationStep = class {
|
|
|
27687
27696
|
currentModel: this.turn.actorModelContext,
|
|
27688
27697
|
requestContext: this.turn.requestContext,
|
|
27689
27698
|
observabilityContext: this.turn.observabilityContext,
|
|
27690
|
-
lastActivityAt: getLastActivityFromMessages(messageList.get.all.db())
|
|
27699
|
+
lastActivityAt: getLastActivityFromMessages(messageList.get.all.db()),
|
|
27700
|
+
reflectionHooks: om.composeHooks(void 0, {
|
|
27701
|
+
threadId,
|
|
27702
|
+
resourceId,
|
|
27703
|
+
trigger: "turn-sync"
|
|
27704
|
+
})
|
|
27691
27705
|
});
|
|
27692
27706
|
await this.turn.refreshRecord();
|
|
27693
27707
|
if (this.turn.record.generationCount > preReflectGeneration) reflected = true;
|
|
@@ -27847,7 +27861,12 @@ var ObservationStep = class {
|
|
|
27847
27861
|
currentModel: this.turn.actorModelContext,
|
|
27848
27862
|
requestContext: this.turn.requestContext,
|
|
27849
27863
|
observabilityContext: this.turn.observabilityContext,
|
|
27850
|
-
lastActivityAt: getLastActivityFromMessages(messageList.get.all.db())
|
|
27864
|
+
lastActivityAt: getLastActivityFromMessages(messageList.get.all.db()),
|
|
27865
|
+
reflectionHooks: om.composeHooks(void 0, {
|
|
27866
|
+
threadId,
|
|
27867
|
+
resourceId,
|
|
27868
|
+
trigger: "turn-sync"
|
|
27869
|
+
})
|
|
27851
27870
|
});
|
|
27852
27871
|
return {
|
|
27853
27872
|
succeeded: true,
|
|
@@ -27860,6 +27879,7 @@ var ObservationStep = class {
|
|
|
27860
27879
|
threadId,
|
|
27861
27880
|
resourceId,
|
|
27862
27881
|
messages: messageList.get.all.db(),
|
|
27882
|
+
trigger: "turn-sync",
|
|
27863
27883
|
requestContext: this.turn.requestContext,
|
|
27864
27884
|
writer: this.turn.writer,
|
|
27865
27885
|
observabilityContext: this.turn.observabilityContext
|
|
@@ -28643,7 +28663,7 @@ var ReflectorRunner = class {
|
|
|
28643
28663
|
extractors: activeExtractors,
|
|
28644
28664
|
memory: temporaryMemory?.options,
|
|
28645
28665
|
priorExtractedValues,
|
|
28646
|
-
requestContext,
|
|
28666
|
+
requestContext: internalRequestContext,
|
|
28647
28667
|
observabilityContext,
|
|
28648
28668
|
abortSignal
|
|
28649
28669
|
});
|
|
@@ -28685,12 +28705,16 @@ var ReflectorRunner = class {
|
|
|
28685
28705
|
});
|
|
28686
28706
|
reflectionHooks?.onReflectionStart?.();
|
|
28687
28707
|
const asyncOp = this.doAsyncBufferedReflection(record, bufferKey, writer, requestContext, observabilityContext, priorExtractedValues, mainAgent, sendSignal).then((outcome) => {
|
|
28688
|
-
|
|
28689
|
-
|
|
28690
|
-
|
|
28691
|
-
|
|
28692
|
-
|
|
28693
|
-
|
|
28708
|
+
try {
|
|
28709
|
+
reflectionHooks?.onReflectionEnd?.({
|
|
28710
|
+
usage: outcome?.usage,
|
|
28711
|
+
...outcome?.providerMetadata ? { providerMetadata: outcome.providerMetadata } : {}
|
|
28712
|
+
});
|
|
28713
|
+
} catch (hookError) {
|
|
28714
|
+
omError("[OM] onReflectionEnd hook failed after async buffered reflection", hookError);
|
|
28715
|
+
}
|
|
28716
|
+
}, async (error) => {
|
|
28717
|
+
if (writer) try {
|
|
28694
28718
|
const failedMarker = createBufferingFailedMarker({
|
|
28695
28719
|
cycleId: `reflect-buf-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,
|
|
28696
28720
|
operationType: "reflection",
|
|
@@ -28705,12 +28729,18 @@ var ReflectorRunner = class {
|
|
|
28705
28729
|
transient: true
|
|
28706
28730
|
}).catch(() => {});
|
|
28707
28731
|
await this.persistMarkerToStorage(failedMarker, record.threadId ?? "", record.resourceId ?? void 0);
|
|
28732
|
+
} catch (markerError) {
|
|
28733
|
+
omError("[OM] Failed to persist buffering-failed marker after async buffered reflection failure", markerError);
|
|
28708
28734
|
}
|
|
28709
28735
|
omError("[OM] Async buffered reflection failed", error);
|
|
28710
|
-
|
|
28711
|
-
|
|
28712
|
-
|
|
28713
|
-
|
|
28736
|
+
try {
|
|
28737
|
+
reflectionHooks?.onReflectionEnd?.({
|
|
28738
|
+
usage: void 0,
|
|
28739
|
+
error: error instanceof Error ? error : new Error(String(error))
|
|
28740
|
+
});
|
|
28741
|
+
} catch (hookError) {
|
|
28742
|
+
omError("[OM] onReflectionEnd hook failed after async buffered reflection failure", hookError);
|
|
28743
|
+
}
|
|
28714
28744
|
BufferingCoordinator.lastBufferedBoundary.delete(bufferKey);
|
|
28715
28745
|
}).finally(() => {
|
|
28716
28746
|
BufferingCoordinator.asyncBufferingOps.delete(bufferKey);
|
|
@@ -28957,7 +28987,6 @@ var ReflectorRunner = class {
|
|
|
28957
28987
|
return;
|
|
28958
28988
|
}
|
|
28959
28989
|
}
|
|
28960
|
-
reflectionHooks?.onReflectionStart?.();
|
|
28961
28990
|
await this.storage.setReflectingFlag(record.id, true);
|
|
28962
28991
|
registerOp(record.id, "reflecting");
|
|
28963
28992
|
const cycleId = crypto.randomUUID();
|
|
@@ -28998,6 +29027,7 @@ var ReflectorRunner = class {
|
|
|
28998
29027
|
let reflectionUsage;
|
|
28999
29028
|
let reflectionProviderMetadata;
|
|
29000
29029
|
let reflectionError;
|
|
29030
|
+
reflectionHooks?.onReflectionStart?.();
|
|
29001
29031
|
try {
|
|
29002
29032
|
const compressionStartLevel = await this.getCompressionStartLevel(requestContext);
|
|
29003
29033
|
const reflectResult = await this.call(record.activeObservations, void 0, streamContext, reflectThreshold, abortSignal, void 0, compressionStartLevel, requestContext, priorExtractedValues, observabilityContext, void 0, mainAgent, sendSignal);
|
|
@@ -29061,12 +29091,15 @@ var ReflectorRunner = class {
|
|
|
29061
29091
|
omError("[OM] Reflection failed", error);
|
|
29062
29092
|
} finally {
|
|
29063
29093
|
await this.storage.setReflectingFlag(record.id, false);
|
|
29064
|
-
|
|
29065
|
-
|
|
29066
|
-
|
|
29067
|
-
|
|
29068
|
-
|
|
29069
|
-
|
|
29094
|
+
try {
|
|
29095
|
+
reflectionHooks?.onReflectionEnd?.({
|
|
29096
|
+
usage: reflectionUsage,
|
|
29097
|
+
error: reflectionError,
|
|
29098
|
+
...reflectionProviderMetadata ? { providerMetadata: reflectionProviderMetadata } : {}
|
|
29099
|
+
});
|
|
29100
|
+
} finally {
|
|
29101
|
+
unregisterOp(record.id, "reflecting");
|
|
29102
|
+
}
|
|
29070
29103
|
}
|
|
29071
29104
|
}
|
|
29072
29105
|
};
|
|
@@ -29515,6 +29548,8 @@ var ObservationalMemory = class ObservationalMemory {
|
|
|
29515
29548
|
reflectionConfig;
|
|
29516
29549
|
onDebugEvent;
|
|
29517
29550
|
onIndexObservations;
|
|
29551
|
+
/** Config-level lifecycle hooks fired for every observation/reflection cycle. */
|
|
29552
|
+
hooks;
|
|
29518
29553
|
/** Observer agent runner — handles LLM calls for extracting observations. */
|
|
29519
29554
|
observer;
|
|
29520
29555
|
/** Reflector agent runner — handles LLM calls for compressing observations. */
|
|
@@ -29575,6 +29610,7 @@ var ObservationalMemory = class ObservationalMemory {
|
|
|
29575
29610
|
this.scope = config.scope ?? "thread";
|
|
29576
29611
|
this.retrieval = Boolean(config.retrieval);
|
|
29577
29612
|
this.onIndexObservations = config.onIndexObservations;
|
|
29613
|
+
this.hooks = config.hooks;
|
|
29578
29614
|
this.mastra = config.mastra;
|
|
29579
29615
|
this.memory = config.memory;
|
|
29580
29616
|
const resolveModel = (model, defaultModel) => model === "default" ? defaultModel : model;
|
|
@@ -30496,7 +30532,11 @@ ${formattedMessages}
|
|
|
30496
30532
|
transient: true
|
|
30497
30533
|
}).catch(() => {});
|
|
30498
30534
|
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(",")}`);
|
|
30499
|
-
await
|
|
30535
|
+
await this.runBufferedObservationCycle({
|
|
30536
|
+
threadId,
|
|
30537
|
+
resourceId: freshRecord.resourceId ?? void 0,
|
|
30538
|
+
trigger: "async-buffer"
|
|
30539
|
+
}, () => ObservationStrategy.create(this, {
|
|
30500
30540
|
record: freshRecord,
|
|
30501
30541
|
threadId,
|
|
30502
30542
|
resourceId: freshRecord.resourceId ?? void 0,
|
|
@@ -30506,7 +30546,7 @@ ${formattedMessages}
|
|
|
30506
30546
|
writer,
|
|
30507
30547
|
requestContext,
|
|
30508
30548
|
observabilityContext
|
|
30509
|
-
}).run();
|
|
30549
|
+
}).run());
|
|
30510
30550
|
const maxTs = this.getMaxMessageTimestamp(messagesToBuffer);
|
|
30511
30551
|
const cursor = new Date(maxTs.getTime() + 1);
|
|
30512
30552
|
BufferingCoordinator.lastBufferedAtTime.set(bufferKey, cursor);
|
|
@@ -31079,7 +31119,11 @@ ${formattedMessages}
|
|
|
31079
31119
|
...startMarker,
|
|
31080
31120
|
transient: true
|
|
31081
31121
|
}).catch(() => {});
|
|
31082
|
-
await
|
|
31122
|
+
await this.runBufferedObservationCycle({
|
|
31123
|
+
threadId,
|
|
31124
|
+
resourceId: record.resourceId ?? resourceId,
|
|
31125
|
+
trigger: "async-buffer"
|
|
31126
|
+
}, () => ObservationStrategy.create(this, {
|
|
31083
31127
|
record,
|
|
31084
31128
|
threadId,
|
|
31085
31129
|
resourceId: record.resourceId ?? void 0,
|
|
@@ -31092,7 +31136,7 @@ ${formattedMessages}
|
|
|
31092
31136
|
requestContext,
|
|
31093
31137
|
currentModel: opts.currentModel,
|
|
31094
31138
|
observabilityContext
|
|
31095
|
-
}).run();
|
|
31139
|
+
}).run());
|
|
31096
31140
|
if (isOmReproCaptureEnabled()) writeObserverExchangeReproCapture({
|
|
31097
31141
|
threadId,
|
|
31098
31142
|
resourceId: record.resourceId ?? void 0,
|
|
@@ -31302,6 +31346,88 @@ ${formattedMessages}
|
|
|
31302
31346
|
};
|
|
31303
31347
|
}
|
|
31304
31348
|
/**
|
|
31349
|
+
* Compose the config-level hooks with optional per-call hooks into a single
|
|
31350
|
+
* `ObserveHooks` object, binding call context onto the config-level
|
|
31351
|
+
* callbacks. Config-level hooks are guarded so a throwing consumer hook can
|
|
31352
|
+
* never fail an observation/reflection cycle; per-call hooks keep their
|
|
31353
|
+
* existing payloads and propagation semantics. Returns undefined when
|
|
31354
|
+
* neither is configured, so call sites stay zero-cost.
|
|
31355
|
+
*
|
|
31356
|
+
* Used internally by every pipeline path (manual observe/reflect,
|
|
31357
|
+
* turn-engine sync observation, async buffering); public only so the
|
|
31358
|
+
* observation turn engine can thread config-level reflection hooks into
|
|
31359
|
+
* reflector calls.
|
|
31360
|
+
*
|
|
31361
|
+
* @internal
|
|
31362
|
+
*/
|
|
31363
|
+
composeHooks(callHooks, context) {
|
|
31364
|
+
const configHooks = this.hooks;
|
|
31365
|
+
if (!configHooks) return callHooks;
|
|
31366
|
+
if (!callHooks && !Object.keys(configHooks).length) return void 0;
|
|
31367
|
+
const fireConfigHook = (name, arg) => {
|
|
31368
|
+
const hook = configHooks[name];
|
|
31369
|
+
if (!hook) return;
|
|
31370
|
+
const logHookFailure = (error) => omDebug(`[OM:hooks] config-level ${name} hook failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
31371
|
+
try {
|
|
31372
|
+
const out = hook(arg);
|
|
31373
|
+
if (out && typeof out.then === "function") out.then(void 0, logHookFailure);
|
|
31374
|
+
} catch (error) {
|
|
31375
|
+
logHookFailure(error);
|
|
31376
|
+
}
|
|
31377
|
+
};
|
|
31378
|
+
return {
|
|
31379
|
+
onObservationStart: () => {
|
|
31380
|
+
fireConfigHook("onObservationStart", context);
|
|
31381
|
+
callHooks?.onObservationStart?.();
|
|
31382
|
+
},
|
|
31383
|
+
onObservationEnd: (result) => {
|
|
31384
|
+
fireConfigHook("onObservationEnd", {
|
|
31385
|
+
...context,
|
|
31386
|
+
...result
|
|
31387
|
+
});
|
|
31388
|
+
callHooks?.onObservationEnd?.(result);
|
|
31389
|
+
},
|
|
31390
|
+
onReflectionStart: () => {
|
|
31391
|
+
fireConfigHook("onReflectionStart", context);
|
|
31392
|
+
callHooks?.onReflectionStart?.();
|
|
31393
|
+
},
|
|
31394
|
+
onReflectionEnd: (result) => {
|
|
31395
|
+
fireConfigHook("onReflectionEnd", {
|
|
31396
|
+
...context,
|
|
31397
|
+
...result
|
|
31398
|
+
});
|
|
31399
|
+
callHooks?.onReflectionEnd?.(result);
|
|
31400
|
+
}
|
|
31401
|
+
};
|
|
31402
|
+
}
|
|
31403
|
+
/**
|
|
31404
|
+
* Run one buffered observation cycle, firing config-level hooks around it.
|
|
31405
|
+
* Shared by both async-buffer lanes — buffer() and
|
|
31406
|
+
* runAsyncBufferedObservation() — whose fire-and-forget callers never see
|
|
31407
|
+
* the strategy result. The async-buffer strategy swallows failures
|
|
31408
|
+
* (rethrowOnFailure=false) and surfaces them on the result instead, so the
|
|
31409
|
+
* end hook reports `error` for failed cycles even though nothing throws.
|
|
31410
|
+
*/
|
|
31411
|
+
async runBufferedObservationCycle(context, run) {
|
|
31412
|
+
const hooks = this.composeHooks(void 0, context);
|
|
31413
|
+
hooks?.onObservationStart?.();
|
|
31414
|
+
let runResult;
|
|
31415
|
+
let runError;
|
|
31416
|
+
try {
|
|
31417
|
+
runResult = await run();
|
|
31418
|
+
return runResult;
|
|
31419
|
+
} catch (error) {
|
|
31420
|
+
runError = error instanceof Error ? error : new Error(String(error));
|
|
31421
|
+
throw error;
|
|
31422
|
+
} finally {
|
|
31423
|
+
hooks?.onObservationEnd?.({
|
|
31424
|
+
usage: runResult?.usage,
|
|
31425
|
+
error: runError ?? runResult?.error,
|
|
31426
|
+
...runResult?.providerMetadata ? { providerMetadata: runResult.providerMetadata } : {}
|
|
31427
|
+
});
|
|
31428
|
+
}
|
|
31429
|
+
}
|
|
31430
|
+
/**
|
|
31305
31431
|
* Manually trigger observation.
|
|
31306
31432
|
*
|
|
31307
31433
|
* When `messages` is provided, those are used directly (filtered for unobserved)
|
|
@@ -31312,8 +31438,13 @@ ${formattedMessages}
|
|
|
31312
31438
|
* along with the updated record.
|
|
31313
31439
|
*/
|
|
31314
31440
|
async observe(opts) {
|
|
31315
|
-
const { threadId, resourceId, messages,
|
|
31441
|
+
const { threadId, resourceId, messages, requestContext } = opts;
|
|
31316
31442
|
const lockKey = this.buffering.getLockKey(threadId, resourceId);
|
|
31443
|
+
const hooks = this.composeHooks(opts.hooks, {
|
|
31444
|
+
threadId,
|
|
31445
|
+
resourceId,
|
|
31446
|
+
trigger: opts.trigger ?? "manual"
|
|
31447
|
+
});
|
|
31317
31448
|
const reflectionHooks = hooks ? {
|
|
31318
31449
|
onReflectionStart: hooks.onReflectionStart,
|
|
31319
31450
|
onReflectionEnd: hooks.onReflectionEnd
|
|
@@ -31386,6 +31517,15 @@ ${formattedMessages}
|
|
|
31386
31517
|
};
|
|
31387
31518
|
await this.storage.setReflectingFlag(record.id, true);
|
|
31388
31519
|
registerOp(record.id, "reflecting");
|
|
31520
|
+
const hooks = this.composeHooks(void 0, {
|
|
31521
|
+
threadId,
|
|
31522
|
+
resourceId,
|
|
31523
|
+
trigger: "manual"
|
|
31524
|
+
});
|
|
31525
|
+
hooks?.onReflectionStart?.();
|
|
31526
|
+
let reflectionUsage;
|
|
31527
|
+
let reflectionProviderMetadata;
|
|
31528
|
+
let reflectionError;
|
|
31389
31529
|
try {
|
|
31390
31530
|
const thread = await this.storage.getThreadById({ threadId });
|
|
31391
31531
|
const previousOmMetadata = getThreadOMMetadata(thread?.metadata);
|
|
@@ -31415,12 +31555,16 @@ ${formattedMessages}
|
|
|
31415
31555
|
metadata: newMetadata
|
|
31416
31556
|
});
|
|
31417
31557
|
}
|
|
31558
|
+
const updatedRecord = await this.getOrCreateRecord(threadId, resourceId);
|
|
31559
|
+
reflectionUsage = reflectResult.usage;
|
|
31560
|
+
reflectionProviderMetadata = reflectResult.providerMetadata;
|
|
31418
31561
|
return {
|
|
31419
31562
|
reflected: true,
|
|
31420
|
-
record:
|
|
31563
|
+
record: updatedRecord,
|
|
31421
31564
|
usage: reflectResult.usage
|
|
31422
31565
|
};
|
|
31423
31566
|
} catch (error) {
|
|
31567
|
+
reflectionError = error instanceof Error ? error : new Error(String(error));
|
|
31424
31568
|
omError("[OM] reflect() failed", error);
|
|
31425
31569
|
return {
|
|
31426
31570
|
reflected: false,
|
|
@@ -31428,6 +31572,11 @@ ${formattedMessages}
|
|
|
31428
31572
|
usage: void 0
|
|
31429
31573
|
};
|
|
31430
31574
|
} finally {
|
|
31575
|
+
hooks?.onReflectionEnd?.({
|
|
31576
|
+
usage: reflectionUsage,
|
|
31577
|
+
error: reflectionError,
|
|
31578
|
+
...reflectionProviderMetadata ? { providerMetadata: reflectionProviderMetadata } : {}
|
|
31579
|
+
});
|
|
31431
31580
|
await this.storage.setReflectingFlag(record.id, false);
|
|
31432
31581
|
unregisterOp(record.id, "reflecting");
|
|
31433
31582
|
}
|
|
@@ -32994,6 +33143,7 @@ ${workingMemory}`;
|
|
|
32994
33143
|
model: omConfig.model,
|
|
32995
33144
|
mastra: this._mastraInstance,
|
|
32996
33145
|
onIndexObservations,
|
|
33146
|
+
hooks: omConfig.hooks,
|
|
32997
33147
|
observation: omConfig.observation ? {
|
|
32998
33148
|
model: omConfig.observation.model,
|
|
32999
33149
|
messageTokens: omConfig.observation.messageTokens,
|
|
@@ -44282,4 +44432,4 @@ const agentBuilderWorkflows = {
|
|
|
44282
44432
|
//#endregion
|
|
44283
44433
|
export { agentBuilderWorkflows };
|
|
44284
44434
|
|
|
44285
|
-
//# sourceMappingURL=dist-
|
|
44435
|
+
//# sourceMappingURL=dist-BlHxui7N.js.map
|