@librechat/agents 3.3.13 → 3.4.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/dist/cjs/graphs/Graph.cjs +121 -27
- package/dist/cjs/graphs/Graph.cjs.map +1 -1
- package/dist/cjs/hooks/HookRegistry.cjs +83 -0
- package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
- package/dist/cjs/hooks/executeHooks.cjs +60 -14
- package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
- package/dist/cjs/hooks/index.cjs.map +1 -1
- package/dist/cjs/hooks/types.cjs +2 -0
- package/dist/cjs/hooks/types.cjs.map +1 -1
- package/dist/cjs/llm/anthropic/index.cjs +35 -206
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
- package/dist/cjs/llm/bedrock/index.cjs +121 -241
- package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
- package/dist/cjs/llm/google/index.cjs +19 -12
- package/dist/cjs/llm/google/index.cjs.map +1 -1
- package/dist/cjs/llm/init.cjs +3 -3
- package/dist/cjs/llm/invoke.cjs +2 -2
- package/dist/cjs/llm/mistral/index.cjs +26 -0
- package/dist/cjs/llm/mistral/index.cjs.map +1 -0
- package/dist/cjs/llm/openai/index.cjs +82 -80
- package/dist/cjs/llm/openai/index.cjs.map +1 -1
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
- package/dist/cjs/llm/providers.cjs +19 -19
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/llm/stream/chunkAdapters.cjs +198 -0
- package/dist/cjs/llm/stream/chunkAdapters.cjs.map +1 -0
- package/dist/cjs/llm/stream/smoother.cjs +369 -0
- package/dist/cjs/llm/stream/smoother.cjs.map +1 -0
- package/dist/cjs/llm/vertexai/index.cjs +13 -1
- package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
- package/dist/cjs/main.cjs +25 -16
- package/dist/cjs/messages/format.cjs +40 -23
- package/dist/cjs/messages/format.cjs.map +1 -1
- package/dist/cjs/run.cjs +82 -15
- package/dist/cjs/run.cjs.map +1 -1
- package/dist/cjs/session/AgentSession.cjs +37 -2
- package/dist/cjs/session/AgentSession.cjs.map +1 -1
- package/dist/cjs/stream.cjs +1 -1
- package/dist/cjs/summarization/node.cjs +6 -3
- package/dist/cjs/summarization/node.cjs.map +1 -1
- package/dist/cjs/tools/BashExecutor.cjs +1 -1
- package/dist/cjs/tools/CodeExecutor.cjs +1 -1
- package/dist/cjs/tools/ProgrammaticToolCalling.cjs +1 -1
- package/dist/cjs/tools/ToolNode.cjs +316 -94
- package/dist/cjs/tools/ToolNode.cjs.map +1 -1
- package/dist/cjs/tools/ToolSearch.cjs +1 -1
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs +664 -80
- package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
- package/dist/cjs/tools/subagent/SubagentReplay.cjs +175 -0
- package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -0
- package/dist/cjs/tools/toolOutputReferences.cjs +20 -0
- package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
- package/dist/cjs/utils/index.cjs +2 -2
- package/dist/cjs/utils/tokens.cjs +76 -29
- package/dist/cjs/utils/tokens.cjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +121 -27
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/hooks/HookRegistry.mjs +83 -0
- package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
- package/dist/esm/hooks/executeHooks.mjs +60 -14
- package/dist/esm/hooks/executeHooks.mjs.map +1 -1
- package/dist/esm/hooks/index.mjs.map +1 -1
- package/dist/esm/hooks/types.mjs +2 -1
- package/dist/esm/hooks/types.mjs.map +1 -1
- package/dist/esm/llm/anthropic/index.mjs +34 -205
- package/dist/esm/llm/anthropic/index.mjs.map +1 -1
- package/dist/esm/llm/bedrock/index.mjs +120 -240
- package/dist/esm/llm/bedrock/index.mjs.map +1 -1
- package/dist/esm/llm/google/index.mjs +19 -12
- package/dist/esm/llm/google/index.mjs.map +1 -1
- package/dist/esm/llm/init.mjs +1 -1
- package/dist/esm/llm/invoke.mjs +2 -2
- package/dist/esm/llm/mistral/index.mjs +26 -0
- package/dist/esm/llm/mistral/index.mjs.map +1 -0
- package/dist/esm/llm/openai/index.mjs +82 -80
- package/dist/esm/llm/openai/index.mjs.map +1 -1
- package/dist/esm/llm/openrouter/index.mjs.map +1 -1
- package/dist/esm/llm/providers.mjs +3 -3
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/llm/stream/chunkAdapters.mjs +195 -0
- package/dist/esm/llm/stream/chunkAdapters.mjs.map +1 -0
- package/dist/esm/llm/stream/smoother.mjs +365 -0
- package/dist/esm/llm/stream/smoother.mjs.map +1 -0
- package/dist/esm/llm/vertexai/index.mjs +13 -1
- package/dist/esm/llm/vertexai/index.mjs.map +1 -1
- package/dist/esm/main.mjs +13 -11
- package/dist/esm/messages/format.mjs +40 -23
- package/dist/esm/messages/format.mjs.map +1 -1
- package/dist/esm/run.mjs +83 -16
- package/dist/esm/run.mjs.map +1 -1
- package/dist/esm/session/AgentSession.mjs +37 -2
- package/dist/esm/session/AgentSession.mjs.map +1 -1
- package/dist/esm/stream.mjs +1 -1
- package/dist/esm/summarization/node.mjs +6 -3
- package/dist/esm/summarization/node.mjs.map +1 -1
- package/dist/esm/tools/BashExecutor.mjs +1 -1
- package/dist/esm/tools/CodeExecutor.mjs +1 -1
- package/dist/esm/tools/ProgrammaticToolCalling.mjs +1 -1
- package/dist/esm/tools/ToolNode.mjs +317 -95
- package/dist/esm/tools/ToolNode.mjs.map +1 -1
- package/dist/esm/tools/ToolSearch.mjs +1 -1
- package/dist/esm/tools/subagent/SubagentExecutor.mjs +665 -81
- package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
- package/dist/esm/tools/subagent/SubagentReplay.mjs +168 -0
- package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -0
- package/dist/esm/tools/toolOutputReferences.mjs +20 -0
- package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
- package/dist/esm/utils/index.mjs +2 -2
- package/dist/esm/utils/tokens.mjs +76 -30
- package/dist/esm/utils/tokens.mjs.map +1 -1
- package/dist/types/graphs/Graph.d.ts +19 -1
- package/dist/types/hooks/HookRegistry.d.ts +10 -1
- package/dist/types/hooks/executeHooks.d.ts +5 -1
- package/dist/types/hooks/index.d.ts +2 -2
- package/dist/types/hooks/types.d.ts +12 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/llm/google/index.d.ts +2 -0
- package/dist/types/llm/mistral/index.d.ts +11 -0
- package/dist/types/llm/openai/index.d.ts +20 -4
- package/dist/types/llm/openrouter/index.d.ts +4 -1
- package/dist/types/llm/stream/chunkAdapters.d.ts +48 -0
- package/dist/types/llm/stream/smoother.d.ts +95 -0
- package/dist/types/llm/vertexai/index.d.ts +2 -0
- package/dist/types/run.d.ts +4 -1
- package/dist/types/session/AgentSession.d.ts +1 -0
- package/dist/types/tools/ToolNode.d.ts +23 -15
- package/dist/types/tools/subagent/SubagentExecutor.d.ts +49 -7
- package/dist/types/tools/subagent/SubagentReplay.d.ts +81 -0
- package/dist/types/tools/toolOutputReferences.d.ts +12 -0
- package/dist/types/types/graph.d.ts +5 -5
- package/dist/types/types/hitl.d.ts +15 -0
- package/dist/types/types/llm.d.ts +21 -14
- package/dist/types/utils/tokens.d.ts +10 -0
- package/package.json +6 -2
- package/src/graphs/Graph.ts +257 -52
- package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +48 -9
- package/src/graphs/__tests__/Graph.contextOverflow.test.ts +1 -1
- package/src/graphs/__tests__/Graph.subagentResumeState.test.ts +80 -0
- package/src/hooks/HookRegistry.ts +151 -1
- package/src/hooks/__tests__/HookRegistry.test.ts +96 -0
- package/src/hooks/__tests__/executeHooks.test.ts +160 -0
- package/src/hooks/executeHooks.ts +133 -15
- package/src/hooks/index.ts +3 -1
- package/src/hooks/types.ts +16 -0
- package/src/index.ts +8 -0
- package/src/llm/anthropic/index.ts +85 -354
- package/src/llm/bedrock/index.ts +174 -390
- package/src/llm/bedrock/llm.spec.ts +2 -0
- package/src/llm/bedrock/streamSealDispatch.test.ts +76 -0
- package/src/llm/custom-chat-models.smoke.test.ts +16 -1
- package/src/llm/google/index.ts +17 -18
- package/src/llm/google/streamSmoothing.test.ts +121 -0
- package/src/llm/mistral/index.ts +33 -0
- package/src/llm/mistral/streamSmoothing.test.ts +97 -0
- package/src/llm/openai/deepseek.test.ts +56 -0
- package/src/llm/openai/index.ts +119 -126
- package/src/llm/openrouter/index.ts +4 -1
- package/src/llm/providers.ts +3 -3
- package/src/llm/stream/chunkAdapters.test.ts +202 -0
- package/src/llm/stream/chunkAdapters.ts +317 -0
- package/src/llm/stream/reassembly.test.ts +241 -0
- package/src/llm/stream/smoother.bench.test.ts +155 -0
- package/src/llm/stream/smoother.test.ts +519 -0
- package/src/llm/stream/smoother.ts +574 -0
- package/src/llm/vertexai/index.ts +17 -1
- package/src/llm/vertexai/streamSmoothing.test.ts +109 -0
- package/src/messages/format.ts +54 -26
- package/src/messages/formatAgentMessages.reducer.test.ts +162 -0
- package/src/messages/formatAgentMessages.steer.test.ts +16 -11
- package/src/messages/formatAgentMessages.test.ts +7 -2
- package/src/run.ts +164 -18
- package/src/session/AgentSession.ts +52 -2
- package/src/session/__tests__/JsonlSessionStore.test.ts +53 -0
- package/src/specs/subagent.test.ts +44 -0
- package/src/specs/tokens.test.ts +159 -14
- package/src/summarization/__tests__/node.test.ts +32 -14
- package/src/summarization/node.ts +15 -11
- package/src/tools/ToolNode.ts +631 -157
- package/src/tools/__tests__/SubagentExecutor.test.ts +590 -7
- package/src/tools/__tests__/SubagentReplay.test.ts +300 -0
- package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +208 -2
- package/src/tools/__tests__/directToolHITLResumeScope.test.ts +486 -2
- package/src/tools/__tests__/hitl.test.ts +234 -5
- package/src/tools/__tests__/subagentHooks.test.ts +1040 -62
- package/src/tools/__tests__/toolOutputReferences.test.ts +19 -2
- package/src/tools/subagent/SubagentExecutor.ts +1438 -136
- package/src/tools/subagent/SubagentReplay.ts +575 -0
- package/src/tools/toolOutputReferences.ts +40 -1
- package/src/types/graph.ts +5 -5
- package/src/types/hitl.ts +16 -0
- package/src/types/llm.ts +53 -36
- package/src/utils/tokens.ts +115 -30
package/dist/esm/run.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SUBAGENT_RESUME_ATTEMPT_CONFIG_KEY, SUBAGENT_RESUME_MANIFEST_CONFIG_KEY, requireValidSubagentResumeManifest, stripSubagentResumeManifest } from "./tools/subagent/SubagentReplay.mjs";
|
|
1
2
|
import { getTraceIdSeed } from "./langfuseRuntimeContext.mjs";
|
|
2
3
|
import { hasToolOutputTracingConfig, resolveLangfuseConfig, resolveToolOutputTracingConfig } from "./langfuseConfig.mjs";
|
|
3
4
|
import { resolveLangfuseRuntimeScope, withLangfuseRuntimeScope } from "./langfuseRuntimeScope.mjs";
|
|
@@ -11,8 +12,8 @@ import { createCompletionTitleRunnable, createTitleRunnable } from "./utils/titl
|
|
|
11
12
|
import { createTokenCounter, encodingForModel } from "./utils/tokens.mjs";
|
|
12
13
|
import { initializeLangfuseTracing } from "./instrumentation.mjs";
|
|
13
14
|
import { isOpenAILike } from "./utils/llm.mjs";
|
|
14
|
-
import { resolveMaxSeals } from "./llm/preempt.mjs";
|
|
15
15
|
import { HandlerRegistry } from "./events.mjs";
|
|
16
|
+
import { resolveMaxSeals } from "./llm/preempt.mjs";
|
|
16
17
|
import { initializeModel } from "./llm/init.mjs";
|
|
17
18
|
import { executeHooks } from "./hooks/executeHooks.mjs";
|
|
18
19
|
import "./hooks/index.mjs";
|
|
@@ -23,7 +24,7 @@ import { PromptTemplate } from "@langchain/core/prompts";
|
|
|
23
24
|
import { RunnableLambda } from "@langchain/core/runnables";
|
|
24
25
|
import { AzureChatOpenAI, ChatOpenAI } from "@langchain/openai";
|
|
25
26
|
import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
|
|
26
|
-
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
|
|
27
|
+
import { BaseMessage, HumanMessage, SystemMessage } from "@langchain/core/messages";
|
|
27
28
|
import { Command, INTERRUPT, MemorySaver, isInterrupted } from "@langchain/langgraph";
|
|
28
29
|
//#region src/run.ts
|
|
29
30
|
const defaultOmitOptions = new Set([
|
|
@@ -69,6 +70,30 @@ function isLangGraphResumeMapForInterrupt(value, interruptId) {
|
|
|
69
70
|
if (value === null || typeof value !== "object" || Array.isArray(value)) return false;
|
|
70
71
|
return Object.prototype.hasOwnProperty.call(value, interruptId);
|
|
71
72
|
}
|
|
73
|
+
function getInterruptHookSessionId(payload) {
|
|
74
|
+
const publicPayload = stripSubagentResumeManifest(payload);
|
|
75
|
+
if (publicPayload == null || typeof publicPayload !== "object" || publicPayload.type !== "tool_approval") return;
|
|
76
|
+
const sessionId = publicPayload.hook_session_id;
|
|
77
|
+
return typeof sessionId === "string" && sessionId.length > 0 ? sessionId : void 0;
|
|
78
|
+
}
|
|
79
|
+
function getFirstPersistedInterrupt(snapshot) {
|
|
80
|
+
for (const task of snapshot.tasks ?? []) for (const pendingInterrupt of task.interrupts ?? []) if (typeof pendingInterrupt.id === "string" && pendingInterrupt.id.length > 0) return {
|
|
81
|
+
id: pendingInterrupt.id,
|
|
82
|
+
value: pendingInterrupt.value
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function getPersistedMessages(snapshot) {
|
|
86
|
+
const messages = snapshot.values?.messages;
|
|
87
|
+
if (!Array.isArray(messages) || !messages.every(BaseMessage.isInstance)) return;
|
|
88
|
+
return messages;
|
|
89
|
+
}
|
|
90
|
+
function getResumeUpdateMessages(update) {
|
|
91
|
+
if (update == null) return;
|
|
92
|
+
const messages = Array.isArray(update) ? update.find(([key]) => key === "messages")?.[1] : update.messages;
|
|
93
|
+
if (BaseMessage.isInstance(messages)) return [messages];
|
|
94
|
+
if (!Array.isArray(messages) || !messages.every(BaseMessage.isInstance)) return;
|
|
95
|
+
return messages;
|
|
96
|
+
}
|
|
72
97
|
var Run = class Run {
|
|
73
98
|
id;
|
|
74
99
|
tokenCounter;
|
|
@@ -140,10 +165,7 @@ var Run = class Run {
|
|
|
140
165
|
} else {
|
|
141
166
|
/** Default to legacy graph for 'standard' or undefined type */
|
|
142
167
|
this.graphRunnable = this.createLegacyGraph(config.graphConfig);
|
|
143
|
-
if (this.Graph)
|
|
144
|
-
this.Graph.compileOptions = config.graphConfig.compileOptions ?? this.Graph.compileOptions;
|
|
145
|
-
this.Graph.handlerRegistry = handlerRegistry;
|
|
146
|
-
}
|
|
168
|
+
if (this.Graph) this.Graph.handlerRegistry = handlerRegistry;
|
|
147
169
|
}
|
|
148
170
|
if (config.initialSessions && this.Graph) for (const [key, value] of config.initialSessions) this.Graph.sessions.set(key, value);
|
|
149
171
|
this.returnContent = config.returnContent ?? false;
|
|
@@ -380,6 +402,9 @@ var Run = class Run {
|
|
|
380
402
|
if (!this.Graph) throw new Error("Graph not initialized. Make sure to use Run.create() to instantiate the Run.");
|
|
381
403
|
return this.Graph.getRunMessages();
|
|
382
404
|
}
|
|
405
|
+
getChildCheckpointThreadIds() {
|
|
406
|
+
return this.Graph?.getChildCheckpointThreadIds() ?? [];
|
|
407
|
+
}
|
|
383
408
|
/**
|
|
384
409
|
* Returns a defensive snapshot of tools discovered by the current run.
|
|
385
410
|
* Pass an agent id for that context, or omit it for the ordered union across
|
|
@@ -498,6 +523,10 @@ var Run = class Run {
|
|
|
498
523
|
recursionLimit,
|
|
499
524
|
configurable: { ...callerConfig.configurable }
|
|
500
525
|
};
|
|
526
|
+
if (!isResume) {
|
|
527
|
+
delete config.configurable?.[SUBAGENT_RESUME_ATTEMPT_CONFIG_KEY];
|
|
528
|
+
delete config.configurable?.[SUBAGENT_RESUME_MANIFEST_CONFIG_KEY];
|
|
529
|
+
}
|
|
501
530
|
/**
|
|
502
531
|
* Cancellation can arrive either at graph construction or per-call through
|
|
503
532
|
* `callerConfig.signal`, and boundary hooks need to observe both — for a
|
|
@@ -855,7 +884,11 @@ var Run = class Run {
|
|
|
855
884
|
* fields.
|
|
856
885
|
*/
|
|
857
886
|
getInterrupt() {
|
|
858
|
-
|
|
887
|
+
if (this._interrupt == null) return;
|
|
888
|
+
return {
|
|
889
|
+
...this._interrupt,
|
|
890
|
+
payload: stripSubagentResumeManifest(this._interrupt.payload)
|
|
891
|
+
};
|
|
859
892
|
}
|
|
860
893
|
/**
|
|
861
894
|
* Returns the reason a hook halted the run via
|
|
@@ -926,29 +959,42 @@ var Run = class Run {
|
|
|
926
959
|
* tool-node resume). Intended for custom, Command-routed graphs.
|
|
927
960
|
*/
|
|
928
961
|
async resume(resumeValue, callerConfig, streamOptions, commandOptions) {
|
|
962
|
+
const resumeConfig = await this.resolveInterruptResumeConfig(callerConfig, commandOptions?.update);
|
|
929
963
|
const interruptId = this._interrupt?.interruptId;
|
|
930
964
|
const scopedResume = typeof interruptId === "string" && interruptId.length > 0 && !isLangGraphResumeMapForInterrupt(resumeValue, interruptId) ? { [interruptId]: resumeValue } : resumeValue;
|
|
931
|
-
const resumeConfig = await this.resolveInterruptResumeConfig(callerConfig);
|
|
932
965
|
return this.processStream(new Command({
|
|
933
966
|
resume: scopedResume,
|
|
934
967
|
...commandOptions?.update !== void 0 ? { update: commandOptions.update } : {},
|
|
935
968
|
...commandOptions?.goto !== void 0 ? { goto: commandOptions.goto } : {}
|
|
936
969
|
}), resumeConfig, streamOptions);
|
|
937
970
|
}
|
|
938
|
-
async resolveInterruptResumeConfig(callerConfig) {
|
|
971
|
+
async resolveInterruptResumeConfig(callerConfig, resumeUpdate) {
|
|
972
|
+
await this.restoreInterruptFromCheckpoint(callerConfig, resumeUpdate);
|
|
939
973
|
const interrupt = this._interrupt;
|
|
974
|
+
const resumeManifest = requireValidSubagentResumeManifest(interrupt?.payload);
|
|
975
|
+
const resumeConfigurable = { ...callerConfig.configurable };
|
|
976
|
+
delete resumeConfigurable[SUBAGENT_RESUME_ATTEMPT_CONFIG_KEY];
|
|
977
|
+
delete resumeConfigurable[SUBAGENT_RESUME_MANIFEST_CONFIG_KEY];
|
|
978
|
+
resumeConfigurable[SUBAGENT_RESUME_ATTEMPT_CONFIG_KEY] = nanoid();
|
|
979
|
+
if (resumeManifest != null) resumeConfigurable[SUBAGENT_RESUME_MANIFEST_CONFIG_KEY] = resumeManifest;
|
|
980
|
+
const manifestConfig = {
|
|
981
|
+
...callerConfig,
|
|
982
|
+
configurable: resumeConfigurable
|
|
983
|
+
};
|
|
984
|
+
const hookSessionId = getInterruptHookSessionId(interrupt?.payload);
|
|
985
|
+
if (hookSessionId != null) this.hookRegistry?.copySession(hookSessionId, this.id);
|
|
940
986
|
const interruptId = interrupt?.interruptId;
|
|
941
987
|
const stateHistory = this.graphRunnable?.getStateHistory;
|
|
942
988
|
if (interrupt?.checkpointId != null && interrupt.checkpointId.length > 0) return {
|
|
943
|
-
...
|
|
989
|
+
...manifestConfig,
|
|
944
990
|
configurable: {
|
|
945
|
-
...
|
|
991
|
+
...manifestConfig.configurable,
|
|
946
992
|
checkpoint_id: interrupt.checkpointId,
|
|
947
993
|
...typeof interrupt.checkpointNs === "string" ? { checkpoint_ns: interrupt.checkpointNs } : {}
|
|
948
994
|
}
|
|
949
995
|
};
|
|
950
|
-
if (interrupt == null || typeof interruptId !== "string" || interruptId.length === 0 || typeof stateHistory !== "function") return
|
|
951
|
-
for await (const snapshot of stateHistory.call(this.graphRunnable,
|
|
996
|
+
if (interrupt == null || typeof interruptId !== "string" || interruptId.length === 0 || typeof stateHistory !== "function") return manifestConfig;
|
|
997
|
+
for await (const snapshot of stateHistory.call(this.graphRunnable, manifestConfig)) {
|
|
952
998
|
const hasMatchingInterrupt = snapshot.tasks?.some((task) => task.interrupts?.some((interrupt) => interrupt.id === interruptId) === true) === true;
|
|
953
999
|
const checkpointConfigurable = snapshot.config?.configurable;
|
|
954
1000
|
if (!hasMatchingInterrupt || checkpointConfigurable == null) continue;
|
|
@@ -961,16 +1007,37 @@ var Run = class Run {
|
|
|
961
1007
|
...typeof checkpointNs === "string" ? { checkpointNs } : {}
|
|
962
1008
|
};
|
|
963
1009
|
return {
|
|
964
|
-
...
|
|
1010
|
+
...manifestConfig,
|
|
965
1011
|
configurable: {
|
|
966
|
-
...
|
|
1012
|
+
...manifestConfig.configurable,
|
|
967
1013
|
checkpoint_id: checkpointId,
|
|
968
1014
|
...typeof checkpointNs === "string" ? { checkpoint_ns: checkpointNs } : {}
|
|
969
1015
|
}
|
|
970
1016
|
};
|
|
971
1017
|
}
|
|
972
1018
|
}
|
|
973
|
-
return
|
|
1019
|
+
return manifestConfig;
|
|
1020
|
+
}
|
|
1021
|
+
async restoreInterruptFromCheckpoint(callerConfig, resumeUpdate) {
|
|
1022
|
+
if (this._interrupt != null || this.humanInTheLoop?.enabled !== true) return;
|
|
1023
|
+
const workflow = this.graphRunnable;
|
|
1024
|
+
if (typeof workflow?.getState !== "function") return;
|
|
1025
|
+
const snapshot = await workflow.getState(callerConfig);
|
|
1026
|
+
const persistedInterrupt = getFirstPersistedInterrupt(snapshot);
|
|
1027
|
+
if (persistedInterrupt == null) return;
|
|
1028
|
+
const persistedMessages = getPersistedMessages(snapshot);
|
|
1029
|
+
if (persistedMessages != null) this.Graph?.restoreCheckpointMessages(persistedMessages, getResumeUpdateMessages(resumeUpdate));
|
|
1030
|
+
const checkpointConfigurable = snapshot.config?.configurable;
|
|
1031
|
+
const checkpointId = checkpointConfigurable?.checkpoint_id;
|
|
1032
|
+
const checkpointNs = checkpointConfigurable?.checkpoint_ns;
|
|
1033
|
+
const threadId = callerConfig.configurable?.thread_id;
|
|
1034
|
+
this._interrupt = {
|
|
1035
|
+
interruptId: persistedInterrupt.id,
|
|
1036
|
+
payload: persistedInterrupt.value,
|
|
1037
|
+
...typeof threadId === "string" ? { threadId } : {},
|
|
1038
|
+
...typeof checkpointId === "string" ? { checkpointId } : {},
|
|
1039
|
+
...typeof checkpointNs === "string" ? { checkpointNs } : {}
|
|
1040
|
+
};
|
|
974
1041
|
}
|
|
975
1042
|
createSystemCallback(clientCallbacks, key) {
|
|
976
1043
|
return ((...args) => {
|