@librechat/agents 3.8.1 → 3.8.2

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.
Files changed (65) hide show
  1. package/dist/cjs/graphs/Graph.cjs +2 -2
  2. package/dist/cjs/graphs/MultiAgentGraph.cjs +1 -1
  3. package/dist/cjs/hitl/approvalReview.cjs +89 -0
  4. package/dist/cjs/hitl/approvalReview.cjs.map +1 -0
  5. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +1 -1
  6. package/dist/cjs/main.cjs +3 -3
  7. package/dist/cjs/messages/core.cjs +1 -1
  8. package/dist/cjs/messages/format.cjs +1 -1
  9. package/dist/cjs/messages/prune.cjs +2 -2
  10. package/dist/cjs/run.cjs +17 -6
  11. package/dist/cjs/run.cjs.map +1 -1
  12. package/dist/cjs/session/AgentSession.cjs +1 -1
  13. package/dist/cjs/stream.cjs +2 -2
  14. package/dist/cjs/summarization/node.cjs +1 -1
  15. package/dist/cjs/tools/ToolNode.cjs +256 -84
  16. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  17. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +24 -9
  18. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  19. package/dist/cjs/tools/subagent/SubagentReplay.cjs +2 -0
  20. package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
  21. package/dist/cjs/tools/toolBatchReplay.cjs +187 -0
  22. package/dist/cjs/tools/toolBatchReplay.cjs.map +1 -0
  23. package/dist/cjs/tools/toolOutputReferences.cjs +12 -0
  24. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  25. package/dist/cjs/types/hitl.cjs +4 -0
  26. package/dist/cjs/types/hitl.cjs.map +1 -1
  27. package/dist/esm/graphs/Graph.mjs +2 -2
  28. package/dist/esm/graphs/MultiAgentGraph.mjs +1 -1
  29. package/dist/esm/hitl/approvalReview.mjs +83 -0
  30. package/dist/esm/hitl/approvalReview.mjs.map +1 -0
  31. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +1 -1
  32. package/dist/esm/main.mjs +3 -3
  33. package/dist/esm/messages/core.mjs +1 -1
  34. package/dist/esm/messages/format.mjs +1 -1
  35. package/dist/esm/messages/prune.mjs +2 -2
  36. package/dist/esm/run.mjs +18 -7
  37. package/dist/esm/run.mjs.map +1 -1
  38. package/dist/esm/session/AgentSession.mjs +1 -1
  39. package/dist/esm/stream.mjs +2 -2
  40. package/dist/esm/summarization/node.mjs +1 -1
  41. package/dist/esm/tools/ToolNode.mjs +256 -84
  42. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  43. package/dist/esm/tools/subagent/SubagentExecutor.mjs +24 -9
  44. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  45. package/dist/esm/tools/subagent/SubagentReplay.mjs +1 -1
  46. package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
  47. package/dist/esm/tools/toolBatchReplay.mjs +176 -0
  48. package/dist/esm/tools/toolBatchReplay.mjs.map +1 -0
  49. package/dist/esm/tools/toolOutputReferences.mjs +12 -0
  50. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  51. package/dist/esm/types/hitl.mjs +4 -1
  52. package/dist/esm/types/hitl.mjs.map +1 -1
  53. package/dist/types/hitl/approvalReview.d.ts +32 -0
  54. package/dist/types/tools/ToolNode.d.ts +12 -6
  55. package/dist/types/tools/subagent/SubagentReplay.d.ts +2 -0
  56. package/dist/types/tools/toolBatchReplay.d.ts +54 -0
  57. package/dist/types/tools/toolOutputReferences.d.ts +2 -0
  58. package/package.json +1 -1
  59. package/src/hitl/approvalReview.ts +209 -0
  60. package/src/run.ts +34 -20
  61. package/src/tools/ToolNode.ts +518 -184
  62. package/src/tools/subagent/SubagentExecutor.ts +35 -6
  63. package/src/tools/subagent/SubagentReplay.ts +2 -2
  64. package/src/tools/toolBatchReplay.ts +395 -0
  65. package/src/tools/toolOutputReferences.ts +16 -0
@@ -0,0 +1,176 @@
1
+ import { attachRunStepResumeState, getRunStepResumeState, stripRunStepResumeState } from "./runStepResume.mjs";
2
+ import { isToolNodeResumeState, isToolOutputReferenceState, requireValidSubagentResumeManifest, stripSubagentResumeManifest } from "./subagent/SubagentReplay.mjs";
3
+ import { isToolApprovalInterrupt } from "../types/hitl.mjs";
4
+ import { TOOL_APPROVAL_REVIEW_CONFIG_KEY, createToolApprovalReviewEvidence, getToolApprovalReviewEvidence } from "../hitl/approvalReview.mjs";
5
+ import "../hooks/types.mjs";
6
+ import { isBaseMessage } from "@langchain/core/messages";
7
+ import { Command, MemorySaver, isCommand } from "@langchain/langgraph";
8
+ //#region src/tools/toolBatchReplay.ts
9
+ const TOOL_BATCH_REPLAY_KEY = "__librechat_tool_batch_replay";
10
+ const TOOL_BATCH_PAYLOAD_KEY = "__librechat_tool_batch_payload";
11
+ const TOOL_BATCH_WRAPPER_KEY = "__librechat_tool_batch_wrapper";
12
+ const serializer = new MemorySaver().serde;
13
+ function isRecord(value) {
14
+ return value != null && typeof value === "object" && !Array.isArray(value);
15
+ }
16
+ function restoreToolReplayConfig(configurable, interruptId, payload) {
17
+ delete configurable[TOOL_BATCH_REPLAY_KEY];
18
+ delete configurable[TOOL_APPROVAL_REVIEW_CONFIG_KEY];
19
+ const state = getToolBatchReplayState(payload);
20
+ const publicPayload = getPublicToolInterruptPayload(payload);
21
+ const review = createToolApprovalReviewEvidence(interruptId, publicPayload, state?.approvalOwner);
22
+ if (isToolApprovalInterrupt(publicPayload) && (review == null || state != null && state.approvalOwner == null)) throw new Error("Invalid tool approval checkpoint");
23
+ if (state != null) configurable[TOOL_BATCH_REPLAY_KEY] = state;
24
+ if (review != null) configurable[TOOL_APPROVAL_REVIEW_CONFIG_KEY] = review;
25
+ }
26
+ function getToolBatchReplayOwner(config, agentId) {
27
+ return JSON.stringify([
28
+ getToolBatchReplayScope(config),
29
+ config.configurable?.["__librechat_tool_approval_execution_scope"] == null ? config.configurable?.checkpoint_ns ?? "" : "",
30
+ agentId
31
+ ]);
32
+ }
33
+ function getToolBatchReplayScope(config) {
34
+ const scope = config.configurable?.["__librechat_tool_approval_execution_scope"] ?? config.configurable?.thread_id;
35
+ return typeof scope === "string" && scope.length > 0 ? scope : void 0;
36
+ }
37
+ function isChildToolApprovalOwner(config, owner, trustedParentCallIds) {
38
+ const manifest = requireValidSubagentResumeManifest(config.configurable);
39
+ if (manifest == null || trustedParentCallIds.size === 0) return false;
40
+ const identity = JSON.parse(owner);
41
+ if (!Array.isArray(identity) || identity.length !== 3 || identity[1] !== "") return false;
42
+ const pending = manifest.executions.filter((execution) => trustedParentCallIds.has(execution.parentToolCallId));
43
+ while (pending.length > 0) {
44
+ const execution = pending.pop();
45
+ if (execution.approvalExecutionScope === identity[0]) return true;
46
+ pending.push(...execution.descendant?.executions ?? []);
47
+ }
48
+ return false;
49
+ }
50
+ function rebindToolBatchReplayScope(configurable, sourceScope, destinationScope) {
51
+ const rebind = (key) => {
52
+ const parts = JSON.parse(key);
53
+ if (!Array.isArray(parts) || parts[0] !== sourceScope) return key;
54
+ return JSON.stringify([destinationScope, ...parts.slice(1)]);
55
+ };
56
+ const review = getToolApprovalReviewEvidence({ configurable });
57
+ if (review?.owner != null) configurable[TOOL_APPROVAL_REVIEW_CONFIG_KEY] = {
58
+ ...review,
59
+ owner: rebind(review.owner)
60
+ };
61
+ const state = getToolBatchReplayState(configurable);
62
+ if (state != null) configurable[TOOL_BATCH_REPLAY_KEY] = {
63
+ ...state,
64
+ approvalOwner: state.approvalOwner == null ? void 0 : rebind(state.approvalOwner),
65
+ records: state.records.map((record) => ({
66
+ ...record,
67
+ owner: rebind(record.owner),
68
+ batch: rebind(record.batch)
69
+ }))
70
+ };
71
+ }
72
+ function rebindToolBatchReplayPayload(payload, sourceScope, destinationScope) {
73
+ const state = getToolBatchReplayState(payload);
74
+ const value = stripRunStepResumeState(payload);
75
+ if (state == null || !isRecord(value)) return payload;
76
+ const configurable = { [TOOL_BATCH_REPLAY_KEY]: state };
77
+ rebindToolBatchReplayScope(configurable, sourceScope, destinationScope);
78
+ const rebound = {
79
+ ...value,
80
+ [TOOL_BATCH_REPLAY_KEY]: configurable[TOOL_BATCH_REPLAY_KEY]
81
+ };
82
+ const runStepState = getRunStepResumeState(payload);
83
+ return runStepState == null ? rebound : attachRunStepResumeState(rebound, runStepState);
84
+ }
85
+ function getToolBatchReplayState(payload) {
86
+ const value = stripRunStepResumeState(payload);
87
+ if (value == null || typeof value !== "object" || !("__librechat_tool_batch_replay" in value)) return;
88
+ const candidate = value[TOOL_BATCH_REPLAY_KEY];
89
+ if (candidate === void 0) return;
90
+ const state = candidate;
91
+ if (state?.version !== 1 || state.wrappedPayload != null && typeof state.wrappedPayload !== "boolean" || state.approvalOwner != null && typeof state.approvalOwner !== "string" || !Array.isArray(state.records) || state.records.some((value) => {
92
+ if (value == null || typeof value !== "object") return true;
93
+ const record = value;
94
+ return typeof record.owner !== "string" || typeof record.batch !== "string" || typeof record.encoding !== "string" || typeof record.data !== "string" || record.turnState != null && !isToolNodeResumeState(record.turnState) || record.referenceState != null && !isToolOutputReferenceState(record.referenceState);
95
+ })) throw new Error("Invalid tool batch replay checkpoint");
96
+ return structuredClone(state);
97
+ }
98
+ function stripToolBatchReplayState(payload) {
99
+ if (payload == null || typeof payload !== "object" || !("__librechat_tool_batch_replay" in payload)) return payload;
100
+ const state = getToolBatchReplayState(payload);
101
+ const { [TOOL_BATCH_REPLAY_KEY]: _state, ...publicPayload } = payload;
102
+ if (state?.wrappedPayload === true && TOOL_BATCH_PAYLOAD_KEY in publicPayload) return publicPayload[TOOL_BATCH_PAYLOAD_KEY];
103
+ return publicPayload;
104
+ }
105
+ function getPublicToolInterruptPayload(payload) {
106
+ return stripSubagentResumeManifest(stripToolBatchReplayState(stripRunStepResumeState(payload)));
107
+ }
108
+ async function attachToolBatchReplayState(payload, owner, batches, turnState, referenceState) {
109
+ const publicPayload = stripRunStepResumeState(payload);
110
+ const previous = getToolBatchReplayState(publicPayload);
111
+ const records = previous?.records.filter((record) => record.owner !== owner) ?? [];
112
+ for (const [batch, results] of batches) {
113
+ const [encoding, bytes] = await serializer.dumpsTyped([...results]);
114
+ records.push({
115
+ owner,
116
+ batch,
117
+ encoding,
118
+ data: Buffer.from(bytes).toString("base64"),
119
+ ...turnState == null ? {} : { turnState },
120
+ ...referenceState == null ? {} : { referenceState }
121
+ });
122
+ }
123
+ const approvalOwner = previous?.approvalOwner ?? (isToolApprovalInterrupt(publicPayload) ? owner : void 0);
124
+ if (records.length === 0 && approvalOwner == null) return payload;
125
+ const result = {
126
+ ...isRecord(publicPayload) ? publicPayload : {
127
+ [TOOL_BATCH_WRAPPER_KEY]: 1,
128
+ [TOOL_BATCH_PAYLOAD_KEY]: publicPayload
129
+ },
130
+ [TOOL_BATCH_REPLAY_KEY]: {
131
+ version: 1,
132
+ approvalOwner,
133
+ records,
134
+ wrappedPayload: previous?.wrappedPayload ?? !isRecord(publicPayload)
135
+ }
136
+ };
137
+ const runStepState = getRunStepResumeState(payload);
138
+ return runStepState == null ? result : attachRunStepResumeState(result, runStepState);
139
+ }
140
+ async function restoreToolBatchReplayState(config, owner) {
141
+ const state = getToolBatchReplayState(config.configurable);
142
+ if (state == null) return [];
143
+ return Promise.all(state.records.filter((record) => record.owner === owner).map(async (record) => {
144
+ const values = await serializer.loadsTyped(record.encoding, Buffer.from(record.data, "base64"));
145
+ if (!Array.isArray(values)) throw new Error("Invalid settled tool batch results");
146
+ const seen = /* @__PURE__ */ new Set();
147
+ const results = values.map((entry) => {
148
+ if (!Array.isArray(entry) || entry.length !== 2 || typeof entry[0] !== "string" || seen.has(entry[0])) throw new Error("Invalid settled tool batch results");
149
+ const result = entry[1];
150
+ if (result == null || !isBaseMessage(result.output) && !isCommand(result.output) || !Array.isArray(result.additionalContexts) || result.additionalContexts.some((context) => typeof context !== "string") || result.completionHandled != null && typeof result.completionHandled !== "boolean" || result.referenceContent != null && typeof result.referenceContent !== "string" || result.turn != null && (!Number.isSafeInteger(result.turn) || result.turn < 0) || !isRecord(result.proposal) || typeof result.proposal.name !== "string" || result.proposal.name.length === 0 || !isRecord(result.proposal.args) || result.resolvedArgs != null && !isRecord(result.resolvedArgs)) throw new Error("Invalid settled tool batch results");
151
+ seen.add(entry[0]);
152
+ const output = isCommand(result.output) ? new Command({
153
+ update: result.output.update,
154
+ goto: result.output.goto,
155
+ graph: result.output.graph,
156
+ resume: result.output.resume
157
+ }) : result.output;
158
+ return [entry[0], {
159
+ ...result,
160
+ proposal: result.proposal,
161
+ output,
162
+ additionalContexts: result.additionalContexts
163
+ }];
164
+ });
165
+ return {
166
+ batch: record.batch,
167
+ results,
168
+ turnState: record.turnState,
169
+ referenceState: record.referenceState
170
+ };
171
+ }));
172
+ }
173
+ //#endregion
174
+ export { TOOL_BATCH_REPLAY_KEY, attachToolBatchReplayState, getPublicToolInterruptPayload, getToolBatchReplayOwner, getToolBatchReplayScope, getToolBatchReplayState, isChildToolApprovalOwner, rebindToolBatchReplayPayload, rebindToolBatchReplayScope, restoreToolBatchReplayState, restoreToolReplayConfig, stripToolBatchReplayState };
175
+
176
+ //# sourceMappingURL=toolBatchReplay.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolBatchReplay.mjs","names":[],"sources":["../../../src/tools/toolBatchReplay.ts"],"mappings":"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"}
@@ -129,6 +129,18 @@ var ToolOutputReferenceRegistry = class ToolOutputReferenceRegistry {
129
129
  warnedNonStringTools: [...bucket?.warnedNonStringTools ?? []]
130
130
  };
131
131
  }
132
+ resumeBatch(runId, state) {
133
+ if (!this.runStates.has(runId)) this.restoreState(runId, state);
134
+ const bucket = this.getOrCreate(runId);
135
+ bucket.turnCounter = Math.max(bucket.turnCounter, state.turnCounter + 1);
136
+ const inputs = new ToolOutputReferenceRegistry({
137
+ maxOutputSize: this.maxOutputSize,
138
+ maxTotalSize: this.maxTotalSize,
139
+ maxActiveRuns: 1
140
+ });
141
+ inputs.restoreState(runId, state);
142
+ return inputs.snapshot(runId);
143
+ }
132
144
  restoreState(runId, state) {
133
145
  this.releaseRun(runId);
134
146
  const bucket = this.getOrCreate(runId);
@@ -1 +1 @@
1
- {"version":3,"file":"toolOutputReferences.mjs","names":[],"sources":["../../../src/tools/toolOutputReferences.ts"],"mappings":"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"}
1
+ {"version":3,"file":"toolOutputReferences.mjs","names":[],"sources":["../../../src/tools/toolOutputReferences.ts"],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  //#region src/types/hitl.ts
2
+ function isToolApprovalInterrupt(payload) {
3
+ return typeof payload === "object" && payload !== null && payload.type === "tool_approval";
4
+ }
2
5
  function isAskUserQuestionInterrupt(payload) {
3
6
  return typeof payload === "object" && payload !== null && payload.type === "ask_user_question";
4
7
  }
5
8
  //#endregion
6
- export { isAskUserQuestionInterrupt };
9
+ export { isAskUserQuestionInterrupt, isToolApprovalInterrupt };
7
10
 
8
11
  //# sourceMappingURL=hitl.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.mjs","names":[],"sources":["../../../src/types/hitl.ts"],"mappings":";AAyQA,SAAgB,2BACd,SAC4C;CAC5C,OACE,OAAO,YAAY,YACnB,YAAY,QACX,QAA+B,SAAS;AAE7C"}
1
+ {"version":3,"file":"hitl.mjs","names":[],"sources":["../../../src/types/hitl.ts"],"mappings":";AA0PA,SAAgB,wBACd,SACyC;CACzC,OACE,OAAO,YAAY,YACnB,YAAY,QACX,QAA+B,SAAS;AAE7C;AAOA,SAAgB,2BACd,SAC4C;CAC5C,OACE,OAAO,YAAY,YACnB,YAAY,QACX,QAA+B,SAAS;AAE7C"}
@@ -0,0 +1,32 @@
1
+ import type { RunnableConfig } from '@langchain/core/runnables';
2
+ import type { ToolApprovalInterruptPayload, ToolApprovalRequest, ToolApprovalReviewConfig } from '@/types/hitl';
3
+ /**
4
+ * Private resume-only config entry populated from the checkpointed interrupt.
5
+ * Hosts must never need to construct or inspect this value.
6
+ */
7
+ export declare const TOOL_APPROVAL_REVIEW_CONFIG_KEY = "__librechat_tool_approval_review";
8
+ export interface ToolApprovalReviewEvidence {
9
+ interruptId: string;
10
+ payload: ToolApprovalInterruptPayload;
11
+ owner?: string;
12
+ }
13
+ export interface ReviewedToolApproval {
14
+ request: ToolApprovalRequest;
15
+ reviewConfig: ToolApprovalReviewConfig;
16
+ }
17
+ /** Detach approval payloads from host- or transport-owned object graphs. */
18
+ export declare function cloneToolApprovalInterruptPayload<T>(payload: T): T;
19
+ /** Build trusted review evidence from the interrupt restored by `Run`. */
20
+ export declare function createToolApprovalReviewEvidence(interruptId: string | undefined, payload: unknown, owner?: string): ToolApprovalReviewEvidence | undefined;
21
+ /** Read only well-shaped evidence from a ToolNode's runnable config. */
22
+ export declare function getToolApprovalReviewEvidence(config: RunnableConfig, owner?: string): ToolApprovalReviewEvidence | undefined;
23
+ export declare function getReviewedToolApproval(payload: ToolApprovalInterruptPayload | undefined, toolCallId: string | undefined): ReviewedToolApproval | undefined;
24
+ /**
25
+ * Bind a resume decision to the exact proposal the reviewer saw. Description
26
+ * text is deliberately excluded: it explains policy but cannot change the
27
+ * side effect. Tool identity, normalized arguments and available decisions
28
+ * are execution-authoritative.
29
+ */
30
+ export declare function toolApprovalProposalMatches(current: ReviewedToolApproval, reviewed: ReviewedToolApproval): boolean;
31
+ /** Preserve batch order as part of the decision-to-request binding. */
32
+ export declare function toolApprovalPayloadMatches(current: ToolApprovalInterruptPayload, reviewed: ToolApprovalInterruptPayload): boolean;
@@ -2,7 +2,7 @@ import { ToolCall } from '@langchain/core/messages/tool';
2
2
  import { END, Command, MessagesAnnotation } from '@langchain/langgraph';
3
3
  import type { RunnableConfig } from '@langchain/core/runnables';
4
4
  import type { BaseMessage } from '@langchain/core/messages';
5
- import type { ToolOutputResolveView, ResolvedArgsByCallId } from '@/tools/toolOutputReferences';
5
+ import type { ToolOutputResolveView, ToolOutputReferenceState, ResolvedArgsByCallId } from '@/tools/toolOutputReferences';
6
6
  import type { SubagentToolNodeResumeState } from '@/tools/subagent/SubagentReplay';
7
7
  import type * as t from '@/types';
8
8
  import { ToolOutputReferenceRegistry } from '@/tools/toolOutputReferences';
@@ -53,6 +53,10 @@ type RunToolBatchContext<T = unknown> = {
53
53
  additionalContextsSink?: string[];
54
54
  /** Stable identity of the assistant tool-call batch across HITL replay. */
55
55
  replayBatchKey?: string;
56
+ /** Positions in the original proposal, before completed calls are filtered. */
57
+ replayCallPositions?: ReadonlyMap<ToolCall, number>;
58
+ /** Tool-call identities owned by this ToolNode invocation. */
59
+ approvalScopeCallIds?: ReadonlySet<string>;
56
60
  /**
57
61
  * Graph state the ToolNode was invoked with, threaded from `run()`
58
62
  * so `tool.invoke` can forward it as langgraph 1.4's `runtime.state`
@@ -116,10 +120,10 @@ export declare class ToolNode<T = any> extends RunnableCallable<T, T> {
116
120
  * the Run ends.
117
121
  */
118
122
  private directPathTurns;
119
- /** Terminal results from interrupting siblings that must survive a
120
- * LangGraph replay of the containing ToolNode. Includes the sidecar data
121
- * the fresh batch needs for hook-context injection and completion events. */
122
- private settledInterruptingResults;
123
+ /** Terminal direct results that must survive a LangGraph replay of the
124
+ * containing ToolNode. Includes the sidecar data the fresh batch needs for
125
+ * hook-context injection and completion-event deduplication. */
126
+ private settledDirectResultsByBatch;
123
127
  /** Tool registry for filtering (lazy computation of programmatic maps) */
124
128
  private toolRegistry?;
125
129
  /** Schema-only definitions used when event mode has no runtime registry. */
@@ -527,7 +531,9 @@ export declare class ToolNode<T = any> extends RunnableCallable<T, T> {
527
531
  * invocations cannot race on shared mutable state.
528
532
  */
529
533
  private executeViaEvent;
530
- protected run(input: any, config: RunnableConfig): Promise<T>;
534
+ protected run(input: any, config: RunnableConfig, referenceReplay?: {
535
+ state?: ToolOutputReferenceState;
536
+ }): Promise<T>;
531
537
  private isSendInput;
532
538
  private isMessagesState;
533
539
  }
@@ -67,6 +67,8 @@ export interface SubagentResumeManifest {
67
67
  version: 1;
68
68
  executions: SubagentResumeExecution[];
69
69
  }
70
+ export declare function isToolNodeResumeState(value: unknown): value is SubagentToolNodeResumeState;
71
+ export declare function isToolOutputReferenceState(value: unknown): value is ToolOutputReferenceState;
70
72
  export declare function getSubagentResumeManifest(payload: unknown): SubagentResumeManifest | undefined;
71
73
  export declare function requireValidSubagentResumeManifest(payload: unknown): SubagentResumeManifest | undefined;
72
74
  export declare function attachSubagentResumeManifest(payload: unknown, manifest: SubagentResumeManifest): object;
@@ -0,0 +1,54 @@
1
+ import { Command } from '@langchain/langgraph';
2
+ import type { BaseMessage } from '@langchain/core/messages';
3
+ import type { RunnableConfig } from '@langchain/core/runnables';
4
+ import type { SubagentToolNodeResumeState } from '@/tools/subagent/SubagentReplay';
5
+ import type { ToolOutputReferenceState } from '@/tools/toolOutputReferences';
6
+ export declare const TOOL_BATCH_REPLAY_KEY = "__librechat_tool_batch_replay";
7
+ export interface SettledToolBatchResult {
8
+ proposal: {
9
+ name: string;
10
+ args: Record<string, unknown>;
11
+ };
12
+ output: BaseMessage | Command;
13
+ additionalContexts: string[];
14
+ resolvedArgs?: Record<string, unknown>;
15
+ completionHandled?: boolean;
16
+ referenceContent?: string;
17
+ turn?: number;
18
+ }
19
+ export interface ToolBatchReplayRecord {
20
+ owner: string;
21
+ batch: string;
22
+ encoding: string;
23
+ data: string;
24
+ turnState?: SubagentToolNodeResumeState;
25
+ referenceState?: ToolOutputReferenceState;
26
+ }
27
+ interface ToolBatchReplayState {
28
+ version: 1;
29
+ approvalOwner?: string;
30
+ records: ToolBatchReplayRecord[];
31
+ wrappedPayload?: boolean;
32
+ }
33
+ /** The only host-to-runtime entry point for checkpoint-owned tool replay state. */
34
+ export declare function restoreToolReplayConfig(configurable: Record<string, unknown>, interruptId: string | undefined, payload: unknown): void;
35
+ export declare function getToolBatchReplayOwner(config: RunnableConfig, agentId: string): string;
36
+ export declare function getToolBatchReplayScope(config: RunnableConfig): string | undefined;
37
+ /** Foreign approval evidence may only transit a checkpoint-proven child path. */
38
+ export declare function isChildToolApprovalOwner(config: RunnableConfig, owner: string, trustedParentCallIds: ReadonlySet<string>): boolean;
39
+ /** Rebind only the checkpoint-proven source execution when a child fork is created. */
40
+ export declare function rebindToolBatchReplayScope(configurable: Record<string, unknown>, sourceScope: string, destinationScope: string): void;
41
+ /** A fork may be paused again before it consumes its pending interrupt. */
42
+ export declare function rebindToolBatchReplayPayload(payload: unknown, sourceScope: string, destinationScope: string): unknown;
43
+ export declare function getToolBatchReplayState(payload: unknown): ToolBatchReplayState | undefined;
44
+ export declare function stripToolBatchReplayState(payload: unknown): unknown;
45
+ /** Decode outer execution metadata before shape-sensitive child wrappers. */
46
+ export declare function getPublicToolInterruptPayload(payload: unknown): unknown;
47
+ export declare function attachToolBatchReplayState(payload: unknown, owner: string, batches: ReadonlyMap<string, ReadonlyMap<string, object>>, turnState?: SubagentToolNodeResumeState, referenceState?: ToolOutputReferenceState): Promise<unknown>;
48
+ export declare function restoreToolBatchReplayState(config: RunnableConfig, owner: string): Promise<Array<{
49
+ batch: string;
50
+ results: Array<[string, SettledToolBatchResult]>;
51
+ turnState?: SubagentToolNodeResumeState;
52
+ referenceState?: ToolOutputReferenceState;
53
+ }>>;
54
+ export {};
@@ -199,6 +199,8 @@ export declare class ToolOutputReferenceRegistry {
199
199
  snapshot(runId: string | undefined): ToolOutputResolveView;
200
200
  /** Captures the checkpoint-safe state needed to resume one run bucket. */
201
201
  snapshotState(runId: string | undefined): ToolOutputReferenceState;
202
+ /** Restore batch inputs without rolling back graph-owned concurrent outputs. */
203
+ resumeBatch(runId: string, state: ToolOutputReferenceState): ToolOutputResolveView;
202
204
  /** Restores a checkpointed run bucket under the current resume scope. */
203
205
  restoreState(runId: string | undefined, state: ToolOutputReferenceState): void;
204
206
  private resolveAgainst;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@librechat/agents",
3
- "version": "3.8.1",
3
+ "version": "3.8.2",
4
4
  "reova": {
5
5
  "enabled": true,
6
6
  "endpoint": "https://telemetry.reo.dev/data"
@@ -0,0 +1,209 @@
1
+ import type { RunnableConfig } from '@langchain/core/runnables';
2
+ import type {
3
+ ToolApprovalInterruptPayload,
4
+ ToolApprovalRequest,
5
+ ToolApprovalReviewConfig,
6
+ } from '@/types/hitl';
7
+ import { stableStringify } from '@/tools/eagerEventExecution';
8
+ import { isToolApprovalInterrupt } from '@/types/hitl';
9
+
10
+ /**
11
+ * Private resume-only config entry populated from the checkpointed interrupt.
12
+ * Hosts must never need to construct or inspect this value.
13
+ */
14
+ export const TOOL_APPROVAL_REVIEW_CONFIG_KEY =
15
+ '__librechat_tool_approval_review';
16
+
17
+ export interface ToolApprovalReviewEvidence {
18
+ interruptId: string;
19
+ payload: ToolApprovalInterruptPayload;
20
+ owner?: string;
21
+ }
22
+
23
+ export interface ReviewedToolApproval {
24
+ request: ToolApprovalRequest;
25
+ reviewConfig: ToolApprovalReviewConfig;
26
+ }
27
+
28
+ const APPROVAL_DECISIONS = new Set(['approve', 'reject', 'edit', 'respond']);
29
+
30
+ /** Detach approval payloads from host- or transport-owned object graphs. */
31
+ export function cloneToolApprovalInterruptPayload<T>(payload: T): T {
32
+ return isToolApprovalInterrupt(payload) ? structuredClone(payload) : payload;
33
+ }
34
+
35
+ function isRecord(value: unknown): value is Record<string, unknown> {
36
+ return value != null && typeof value === 'object' && !Array.isArray(value);
37
+ }
38
+
39
+ function hasValidApprovalShape(payload: ToolApprovalInterruptPayload): boolean {
40
+ if (
41
+ !Array.isArray(payload.action_requests) ||
42
+ !Array.isArray(payload.review_configs) ||
43
+ payload.action_requests.length !== payload.review_configs.length
44
+ ) {
45
+ return false;
46
+ }
47
+
48
+ const toolCallIds = new Set<string>();
49
+ return payload.action_requests.every((request, index) => {
50
+ const reviewConfig = payload.review_configs[index];
51
+ if (!isRecord(request) || !isRecord(reviewConfig)) {
52
+ return false;
53
+ }
54
+ const toolCallId = request.tool_call_id;
55
+ const toolName = request.name;
56
+ const allowedDecisions = reviewConfig.allowed_decisions;
57
+ if (
58
+ typeof toolCallId !== 'string' ||
59
+ toolCallId.length === 0 ||
60
+ toolCallIds.has(toolCallId) ||
61
+ typeof toolName !== 'string' ||
62
+ toolName.length === 0 ||
63
+ !isRecord(request.arguments) ||
64
+ (request.description != null &&
65
+ typeof request.description !== 'string') ||
66
+ reviewConfig.tool_call_id !== toolCallId ||
67
+ reviewConfig.action_name !== toolName ||
68
+ !Array.isArray(allowedDecisions) ||
69
+ !allowedDecisions.every(
70
+ (decision) =>
71
+ typeof decision === 'string' && APPROVAL_DECISIONS.has(decision)
72
+ )
73
+ ) {
74
+ return false;
75
+ }
76
+ toolCallIds.add(toolCallId);
77
+ return true;
78
+ });
79
+ }
80
+
81
+ /** Build trusted review evidence from the interrupt restored by `Run`. */
82
+ export function createToolApprovalReviewEvidence(
83
+ interruptId: string | undefined,
84
+ payload: unknown,
85
+ owner?: string
86
+ ): ToolApprovalReviewEvidence | undefined {
87
+ if (
88
+ typeof interruptId !== 'string' ||
89
+ interruptId.length === 0 ||
90
+ !isToolApprovalInterrupt(payload) ||
91
+ !hasValidApprovalShape(payload)
92
+ ) {
93
+ return undefined;
94
+ }
95
+ return {
96
+ interruptId,
97
+ payload: cloneToolApprovalInterruptPayload(payload),
98
+ ...(owner == null ? {} : { owner }),
99
+ };
100
+ }
101
+
102
+ /** Read only well-shaped evidence from a ToolNode's runnable config. */
103
+ export function getToolApprovalReviewEvidence(
104
+ config: RunnableConfig,
105
+ owner?: string
106
+ ): ToolApprovalReviewEvidence | undefined {
107
+ const candidate = config.configurable?.[TOOL_APPROVAL_REVIEW_CONFIG_KEY];
108
+ if (candidate == null || typeof candidate !== 'object') {
109
+ return undefined;
110
+ }
111
+ const {
112
+ interruptId,
113
+ payload,
114
+ owner: evidenceOwner,
115
+ } = candidate as {
116
+ interruptId?: unknown;
117
+ payload?: unknown;
118
+ owner?: unknown;
119
+ };
120
+ if (
121
+ evidenceOwner != null &&
122
+ (typeof evidenceOwner !== 'string' ||
123
+ (owner != null && owner !== evidenceOwner))
124
+ ) {
125
+ return undefined;
126
+ }
127
+ return createToolApprovalReviewEvidence(
128
+ typeof interruptId === 'string' ? interruptId : undefined,
129
+ payload,
130
+ typeof evidenceOwner === 'string' ? evidenceOwner : undefined
131
+ );
132
+ }
133
+
134
+ export function getReviewedToolApproval(
135
+ payload: ToolApprovalInterruptPayload | undefined,
136
+ toolCallId: string | undefined
137
+ ): ReviewedToolApproval | undefined {
138
+ if (payload == null || toolCallId == null || toolCallId === '') {
139
+ return undefined;
140
+ }
141
+ const request = payload.action_requests.find(
142
+ (candidate) => candidate.tool_call_id === toolCallId
143
+ );
144
+ const reviewConfig = payload.review_configs.find(
145
+ (candidate) => candidate.tool_call_id === toolCallId
146
+ );
147
+ if (request == null || reviewConfig == null) {
148
+ return undefined;
149
+ }
150
+ return { request, reviewConfig };
151
+ }
152
+
153
+ function decisionsEqual(
154
+ left: ReadonlyArray<string>,
155
+ right: ReadonlyArray<string>
156
+ ): boolean {
157
+ if (left.length !== right.length) {
158
+ return false;
159
+ }
160
+ const sortedLeft = [...left].sort();
161
+ const sortedRight = [...right].sort();
162
+ return sortedLeft.every((value, index) => value === sortedRight[index]);
163
+ }
164
+
165
+ /**
166
+ * Bind a resume decision to the exact proposal the reviewer saw. Description
167
+ * text is deliberately excluded: it explains policy but cannot change the
168
+ * side effect. Tool identity, normalized arguments and available decisions
169
+ * are execution-authoritative.
170
+ */
171
+ export function toolApprovalProposalMatches(
172
+ current: ReviewedToolApproval,
173
+ reviewed: ReviewedToolApproval
174
+ ): boolean {
175
+ return (
176
+ current.request.tool_call_id === reviewed.request.tool_call_id &&
177
+ current.request.name === reviewed.request.name &&
178
+ current.reviewConfig.tool_call_id === reviewed.reviewConfig.tool_call_id &&
179
+ current.reviewConfig.action_name === reviewed.reviewConfig.action_name &&
180
+ stableStringify(current.request.arguments) ===
181
+ stableStringify(reviewed.request.arguments) &&
182
+ decisionsEqual(
183
+ current.reviewConfig.allowed_decisions,
184
+ reviewed.reviewConfig.allowed_decisions
185
+ )
186
+ );
187
+ }
188
+
189
+ /** Preserve batch order as part of the decision-to-request binding. */
190
+ export function toolApprovalPayloadMatches(
191
+ current: ToolApprovalInterruptPayload,
192
+ reviewed: ToolApprovalInterruptPayload
193
+ ): boolean {
194
+ if (
195
+ current.action_requests.length !== reviewed.action_requests.length ||
196
+ current.review_configs.length !== reviewed.review_configs.length
197
+ ) {
198
+ return false;
199
+ }
200
+ return current.action_requests.every((request, index) => {
201
+ const currentReviewConfig = current.review_configs[index];
202
+ const reviewedRequest = reviewed.action_requests[index];
203
+ const reviewedReviewConfig = reviewed.review_configs[index];
204
+ return toolApprovalProposalMatches(
205
+ { request, reviewConfig: currentReviewConfig },
206
+ { request: reviewedRequest, reviewConfig: reviewedReviewConfig }
207
+ );
208
+ });
209
+ }