@librechat/agents 4.0.1 → 4.0.3

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 (245) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +3 -2
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/decisions/deadline.cjs +52 -0
  4. package/dist/cjs/decisions/deadline.cjs.map +1 -0
  5. package/dist/cjs/decisions/dialect.cjs +88 -0
  6. package/dist/cjs/decisions/dialect.cjs.map +1 -0
  7. package/dist/cjs/decisions/http.cjs +77 -0
  8. package/dist/cjs/decisions/http.cjs.map +1 -0
  9. package/dist/cjs/decisions/index.cjs +7 -0
  10. package/dist/cjs/decisions/presets.cjs +82 -0
  11. package/dist/cjs/decisions/presets.cjs.map +1 -0
  12. package/dist/cjs/decisions/questions.cjs +70 -0
  13. package/dist/cjs/decisions/questions.cjs.map +1 -0
  14. package/dist/cjs/decisions/structuredChat.cjs +172 -0
  15. package/dist/cjs/decisions/structuredChat.cjs.map +1 -0
  16. package/dist/cjs/decisions/structuredOutput.cjs +18 -0
  17. package/dist/cjs/decisions/structuredOutput.cjs.map +1 -0
  18. package/dist/cjs/decisions/traceMarker.cjs +6 -0
  19. package/dist/cjs/decisions/traceMarker.cjs.map +1 -0
  20. package/dist/cjs/decisions/transport.cjs +166 -0
  21. package/dist/cjs/decisions/transport.cjs.map +1 -0
  22. package/dist/cjs/decisions/types.cjs +44 -0
  23. package/dist/cjs/decisions/types.cjs.map +1 -0
  24. package/dist/cjs/graphs/Graph.cjs +28 -9
  25. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  26. package/dist/cjs/langfuseToolOutputTracing.cjs +6 -1
  27. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  28. package/dist/cjs/llm/google/index.cjs +1 -1
  29. package/dist/cjs/llm/invoke.cjs +34 -12
  30. package/dist/cjs/llm/invoke.cjs.map +1 -1
  31. package/dist/cjs/llm/openai/index.cjs +7 -0
  32. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  33. package/dist/cjs/llm/providerTextBoundary.cjs +355 -0
  34. package/dist/cjs/llm/providerTextBoundary.cjs.map +1 -0
  35. package/dist/cjs/llm/providerTextChunk.cjs +14 -0
  36. package/dist/cjs/llm/providerTextChunk.cjs.map +1 -0
  37. package/dist/cjs/llm/providerTextControls.cjs +236 -0
  38. package/dist/cjs/llm/providerTextControls.cjs.map +1 -0
  39. package/dist/cjs/llm/stream/smoother.cjs +2 -1
  40. package/dist/cjs/llm/stream/smoother.cjs.map +1 -1
  41. package/dist/cjs/main.cjs +49 -1
  42. package/dist/cjs/protection/providerText.cjs +224 -0
  43. package/dist/cjs/protection/providerText.cjs.map +1 -0
  44. package/dist/cjs/protection/providerTextInput.cjs +25 -0
  45. package/dist/cjs/protection/providerTextInput.cjs.map +1 -0
  46. package/dist/cjs/rerank/index.cjs +2 -0
  47. package/dist/cjs/rerank/search.cjs +45 -0
  48. package/dist/cjs/rerank/search.cjs.map +1 -0
  49. package/dist/cjs/rerank/systemone.cjs +70 -0
  50. package/dist/cjs/rerank/systemone.cjs.map +1 -0
  51. package/dist/cjs/run.cjs +11 -1
  52. package/dist/cjs/run.cjs.map +1 -1
  53. package/dist/cjs/stream.cjs +42 -14
  54. package/dist/cjs/stream.cjs.map +1 -1
  55. package/dist/cjs/summarization/node.cjs +26 -8
  56. package/dist/cjs/summarization/node.cjs.map +1 -1
  57. package/dist/cjs/tools/SubagentTool.cjs +11 -3
  58. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  59. package/dist/cjs/tools/ToolNode.cjs +6 -5
  60. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  61. package/dist/cjs/tools/search/rerankers.cjs +1 -0
  62. package/dist/cjs/tools/search/search.cjs +3 -3
  63. package/dist/cjs/tools/search/search.cjs.map +1 -1
  64. package/dist/cjs/tools/search/tool.cjs +4 -3
  65. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  66. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +13 -2
  67. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -1
  68. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +149 -26
  69. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  70. package/dist/cjs/tools/subagent/SubagentReplay.cjs +4 -2
  71. package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
  72. package/dist/cjs/tools/subagent/childGraphConfig.cjs +3 -1
  73. package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -1
  74. package/dist/cjs/tools/subagent/diagnostics.cjs +88 -2
  75. package/dist/cjs/tools/subagent/diagnostics.cjs.map +1 -1
  76. package/dist/cjs/tools/subagent/hostArgs.cjs +214 -0
  77. package/dist/cjs/tools/subagent/hostArgs.cjs.map +1 -0
  78. package/dist/cjs/tools/subagent/index.cjs +2 -0
  79. package/dist/cjs/tools/toolErrorContent.cjs +1 -1
  80. package/dist/esm/agents/AgentContext.mjs +3 -2
  81. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  82. package/dist/esm/decisions/deadline.mjs +52 -0
  83. package/dist/esm/decisions/deadline.mjs.map +1 -0
  84. package/dist/esm/decisions/dialect.mjs +87 -0
  85. package/dist/esm/decisions/dialect.mjs.map +1 -0
  86. package/dist/esm/decisions/http.mjs +75 -0
  87. package/dist/esm/decisions/http.mjs.map +1 -0
  88. package/dist/esm/decisions/index.mjs +8 -0
  89. package/dist/esm/decisions/presets.mjs +77 -0
  90. package/dist/esm/decisions/presets.mjs.map +1 -0
  91. package/dist/esm/decisions/questions.mjs +67 -0
  92. package/dist/esm/decisions/questions.mjs.map +1 -0
  93. package/dist/esm/decisions/structuredChat.mjs +172 -0
  94. package/dist/esm/decisions/structuredChat.mjs.map +1 -0
  95. package/dist/esm/decisions/structuredOutput.mjs +18 -0
  96. package/dist/esm/decisions/structuredOutput.mjs.map +1 -0
  97. package/dist/esm/decisions/traceMarker.mjs +6 -0
  98. package/dist/esm/decisions/traceMarker.mjs.map +1 -0
  99. package/dist/esm/decisions/transport.mjs +164 -0
  100. package/dist/esm/decisions/transport.mjs.map +1 -0
  101. package/dist/esm/decisions/types.mjs +39 -0
  102. package/dist/esm/decisions/types.mjs.map +1 -0
  103. package/dist/esm/graphs/Graph.mjs +28 -9
  104. package/dist/esm/graphs/Graph.mjs.map +1 -1
  105. package/dist/esm/langfuseToolOutputTracing.mjs +6 -1
  106. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  107. package/dist/esm/llm/google/index.mjs +1 -1
  108. package/dist/esm/llm/invoke.mjs +34 -12
  109. package/dist/esm/llm/invoke.mjs.map +1 -1
  110. package/dist/esm/llm/openai/index.mjs +7 -0
  111. package/dist/esm/llm/openai/index.mjs.map +1 -1
  112. package/dist/esm/llm/providerTextBoundary.mjs +355 -0
  113. package/dist/esm/llm/providerTextBoundary.mjs.map +1 -0
  114. package/dist/esm/llm/providerTextChunk.mjs +13 -0
  115. package/dist/esm/llm/providerTextChunk.mjs.map +1 -0
  116. package/dist/esm/llm/providerTextControls.mjs +230 -0
  117. package/dist/esm/llm/providerTextControls.mjs.map +1 -0
  118. package/dist/esm/llm/stream/smoother.mjs +2 -1
  119. package/dist/esm/llm/stream/smoother.mjs.map +1 -1
  120. package/dist/esm/main.mjs +16 -2
  121. package/dist/esm/protection/providerText.mjs +218 -0
  122. package/dist/esm/protection/providerText.mjs.map +1 -0
  123. package/dist/esm/protection/providerTextInput.mjs +24 -0
  124. package/dist/esm/protection/providerTextInput.mjs.map +1 -0
  125. package/dist/esm/rerank/index.mjs +3 -0
  126. package/dist/esm/rerank/search.mjs +45 -0
  127. package/dist/esm/rerank/search.mjs.map +1 -0
  128. package/dist/esm/rerank/systemone.mjs +70 -0
  129. package/dist/esm/rerank/systemone.mjs.map +1 -0
  130. package/dist/esm/run.mjs +11 -1
  131. package/dist/esm/run.mjs.map +1 -1
  132. package/dist/esm/stream.mjs +42 -14
  133. package/dist/esm/stream.mjs.map +1 -1
  134. package/dist/esm/summarization/node.mjs +26 -8
  135. package/dist/esm/summarization/node.mjs.map +1 -1
  136. package/dist/esm/tools/SubagentTool.mjs +11 -3
  137. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  138. package/dist/esm/tools/ToolNode.mjs +6 -5
  139. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  140. package/dist/esm/tools/search/rerankers.mjs +1 -1
  141. package/dist/esm/tools/search/search.mjs +3 -3
  142. package/dist/esm/tools/search/search.mjs.map +1 -1
  143. package/dist/esm/tools/search/tool.mjs +4 -3
  144. package/dist/esm/tools/search/tool.mjs.map +1 -1
  145. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +13 -2
  146. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -1
  147. package/dist/esm/tools/subagent/SubagentExecutor.mjs +149 -26
  148. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  149. package/dist/esm/tools/subagent/SubagentReplay.mjs +4 -2
  150. package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
  151. package/dist/esm/tools/subagent/childGraphConfig.mjs +3 -1
  152. package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -1
  153. package/dist/esm/tools/subagent/diagnostics.mjs +84 -3
  154. package/dist/esm/tools/subagent/diagnostics.mjs.map +1 -1
  155. package/dist/esm/tools/subagent/hostArgs.mjs +207 -0
  156. package/dist/esm/tools/subagent/hostArgs.mjs.map +1 -0
  157. package/dist/esm/tools/subagent/index.mjs +2 -0
  158. package/dist/esm/tools/toolErrorContent.mjs +1 -1
  159. package/dist/types/decisions/deadline.d.ts +3 -0
  160. package/dist/types/decisions/dialect.d.ts +11 -0
  161. package/dist/types/decisions/http.d.ts +22 -0
  162. package/dist/types/decisions/index.d.ts +10 -0
  163. package/dist/types/decisions/presets.d.ts +17 -0
  164. package/dist/types/decisions/questions.d.ts +8 -0
  165. package/dist/types/decisions/structuredChat.d.ts +17 -0
  166. package/dist/types/decisions/structuredOutput.d.ts +4 -0
  167. package/dist/types/decisions/traceMarker.d.ts +2 -0
  168. package/dist/types/decisions/transport.d.ts +29 -0
  169. package/dist/types/decisions/types.d.ts +119 -0
  170. package/dist/types/graphs/Graph.d.ts +7 -3
  171. package/dist/types/index.d.ts +4 -0
  172. package/dist/types/llm/invoke.d.ts +4 -1
  173. package/dist/types/llm/providerTextBoundary.d.ts +4 -0
  174. package/dist/types/llm/providerTextChunk.d.ts +7 -0
  175. package/dist/types/llm/providerTextControls.d.ts +18 -0
  176. package/dist/types/protection/providerText.d.ts +77 -0
  177. package/dist/types/protection/providerTextInput.d.ts +3 -0
  178. package/dist/types/rerank/index.d.ts +4 -0
  179. package/dist/types/rerank/search.d.ts +7 -0
  180. package/dist/types/rerank/systemone.d.ts +13 -0
  181. package/dist/types/rerank/types.d.ts +24 -0
  182. package/dist/types/run.d.ts +2 -0
  183. package/dist/types/tools/BashExecutor.d.ts +4 -0
  184. package/dist/types/tools/CodeExecutor.d.ts +4 -0
  185. package/dist/types/tools/ReadFile.d.ts +4 -0
  186. package/dist/types/tools/SkillTool.d.ts +4 -0
  187. package/dist/types/tools/SubagentTool.d.ts +2 -0
  188. package/dist/types/tools/ToolSearch.d.ts +4 -0
  189. package/dist/types/tools/search/schema.d.ts +4 -0
  190. package/dist/types/tools/search/types.d.ts +3 -1
  191. package/dist/types/tools/subagent/SubagentExecutionRegistry.d.ts +6 -0
  192. package/dist/types/tools/subagent/SubagentExecutor.d.ts +22 -1
  193. package/dist/types/tools/subagent/SubagentReplay.d.ts +3 -1
  194. package/dist/types/tools/subagent/diagnostics.d.ts +56 -8
  195. package/dist/types/tools/subagent/hostArgs.d.ts +57 -0
  196. package/dist/types/tools/subagent/index.d.ts +3 -0
  197. package/dist/types/types/graph.d.ts +39 -0
  198. package/dist/types/types/run.d.ts +6 -2
  199. package/dist/types/types/tools.d.ts +2 -0
  200. package/package.json +4 -4
  201. package/src/agents/AgentContext.ts +3 -2
  202. package/src/decisions/deadline.ts +92 -0
  203. package/src/decisions/dialect.ts +200 -0
  204. package/src/decisions/http.ts +175 -0
  205. package/src/decisions/index.ts +14 -0
  206. package/src/decisions/presets.ts +111 -0
  207. package/src/decisions/questions.ts +128 -0
  208. package/src/decisions/structuredChat.ts +358 -0
  209. package/src/decisions/structuredOutput.ts +25 -0
  210. package/src/decisions/traceMarker.ts +2 -0
  211. package/src/decisions/transport.ts +335 -0
  212. package/src/decisions/types.ts +193 -0
  213. package/src/graphs/Graph.ts +57 -9
  214. package/src/index.ts +9 -0
  215. package/src/langfuseToolOutputTracing.ts +8 -1
  216. package/src/llm/invoke.ts +48 -7
  217. package/src/llm/openai/index.ts +8 -0
  218. package/src/llm/providerTextBoundary.ts +446 -0
  219. package/src/llm/providerTextChunk.ts +15 -0
  220. package/src/llm/providerTextControls.ts +173 -0
  221. package/src/llm/stream/smoother.ts +4 -2
  222. package/src/protection/providerText.ts +325 -0
  223. package/src/protection/providerTextInput.ts +21 -0
  224. package/src/rerank/index.ts +4 -0
  225. package/src/rerank/search.ts +85 -0
  226. package/src/rerank/systemone.ts +140 -0
  227. package/src/rerank/types.ts +28 -0
  228. package/src/run.ts +13 -0
  229. package/src/stream.ts +33 -7
  230. package/src/summarization/node.ts +32 -14
  231. package/src/tools/SubagentTool.ts +14 -3
  232. package/src/tools/ToolNode.ts +7 -3
  233. package/src/tools/search/search.ts +4 -4
  234. package/src/tools/search/tool.ts +27 -25
  235. package/src/tools/search/types.ts +4 -1
  236. package/src/tools/subagent/SubagentExecutionRegistry.ts +27 -2
  237. package/src/tools/subagent/SubagentExecutor.ts +323 -28
  238. package/src/tools/subagent/SubagentReplay.ts +10 -3
  239. package/src/tools/subagent/childGraphConfig.ts +12 -1
  240. package/src/tools/subagent/diagnostics.ts +180 -9
  241. package/src/tools/subagent/hostArgs.ts +413 -0
  242. package/src/tools/subagent/index.ts +20 -0
  243. package/src/types/graph.ts +44 -0
  244. package/src/types/run.ts +6 -2
  245. package/src/types/tools.ts +6 -1
@@ -0,0 +1,172 @@
1
+ const require_traceMarker = require("./traceMarker.cjs");
2
+ const require_types = require("./types.cjs");
3
+ const require_questions = require("./questions.cjs");
4
+ const require_deadline = require("./deadline.cjs");
5
+ const require_transport = require("./transport.cjs");
6
+ const require_structuredOutput = require("./structuredOutput.cjs");
7
+ let _langchain_core_messages = require("@langchain/core/messages");
8
+ //#region src/decisions/structuredChat.ts
9
+ const MAX_QUESTIONS = 32;
10
+ const MAX_CHOICE_OPTIONS = 128;
11
+ const DEFAULT_TIMEOUT_MS = 2e4;
12
+ const PROVIDER_ID = "structured-chat";
13
+ function readChatUsage(raw) {
14
+ if (!require_types.isDecisionObject(raw)) return null;
15
+ const usage = require_types.readDecisionUsage(raw.usage_metadata);
16
+ const response = require_types.isDecisionObject(raw.response_metadata) ? raw.response_metadata : null;
17
+ const nested = require_types.isDecisionObject(response?.metadata) ? response.metadata : null;
18
+ const bedrock = require_types.isDecisionObject(nested?.usage) ? nested.usage : response?.usage;
19
+ if (usage?.inputTokens === void 0 || !require_types.isDecisionObject(bedrock) || usage.inputTokens !== bedrock.inputTokens) return usage;
20
+ const read = bedrock.cacheReadInputTokens;
21
+ const write = bedrock.cacheWriteInputTokens;
22
+ if (read != null && (typeof read !== "number" || !Number.isSafeInteger(read) || read < 0) || write != null && (typeof write !== "number" || !Number.isSafeInteger(write) || write < 0)) return usage;
23
+ const inputTokens = usage.inputTokens + (typeof read === "number" ? read : 0) + (typeof write === "number" ? write : 0);
24
+ return Number.isSafeInteger(inputTokens) ? {
25
+ ...usage,
26
+ inputTokens
27
+ } : usage;
28
+ }
29
+ function providerFailure(error, provider) {
30
+ const details = require_types.isDecisionObject(error) ? error : null;
31
+ const metadata = require_types.isDecisionObject(details?.$metadata) ? details.$metadata : null;
32
+ const rawStatus = details?.status ?? details?.statusCode ?? metadata?.httpStatusCode;
33
+ const status = typeof rawStatus === "number" && Number.isInteger(rawStatus) && rawStatus >= 100 && rawStatus <= 599 ? rawStatus : void 0;
34
+ const failure = new require_types.DecisionError(status == null ? "network" : require_transport.failureForStatus(status), "structured decision model request failed", {
35
+ provider,
36
+ status
37
+ });
38
+ const headers = details?.headers;
39
+ if (headers instanceof Headers) failure.retryAfterMs = require_transport.retryAfterMs(headers.get("retry-after"));
40
+ return failure;
41
+ }
42
+ function decisionSchema(entries) {
43
+ const properties = Object.create(null);
44
+ for (const [id, question] of entries) {
45
+ if (question.type === "boolean") {
46
+ properties[id] = {
47
+ type: "object",
48
+ properties: { decision: { type: "boolean" } },
49
+ required: ["decision"],
50
+ additionalProperties: false
51
+ };
52
+ continue;
53
+ }
54
+ properties[id] = {
55
+ type: "object",
56
+ properties: { choice: {
57
+ type: "string",
58
+ enum: Object.keys(question.criteria)
59
+ } },
60
+ required: ["choice"],
61
+ additionalProperties: false
62
+ };
63
+ }
64
+ return {
65
+ type: "object",
66
+ properties: { answers: {
67
+ type: "object",
68
+ properties,
69
+ required: entries.map(([id]) => id),
70
+ additionalProperties: false
71
+ } },
72
+ required: ["answers"],
73
+ additionalProperties: false
74
+ };
75
+ }
76
+ function readDecisions(parsed, entries, provider) {
77
+ const invalid = () => new require_types.DecisionError("malformed_response", "invalid structured decision model answer", { provider });
78
+ if (!require_types.isDecisionObject(parsed) || Object.keys(parsed).length !== 1 || !require_types.isDecisionObject(parsed.answers) || Object.keys(parsed.answers).length !== entries.length) throw invalid();
79
+ const answers = Object.create(null);
80
+ for (const [id, question] of entries) {
81
+ if (!Object.hasOwn(parsed.answers, id)) throw invalid();
82
+ const raw = parsed.answers[id];
83
+ if (!require_types.isDecisionObject(raw) || Object.keys(raw).length !== 1) throw invalid();
84
+ if (question.type === "boolean") {
85
+ if (typeof raw.decision !== "boolean") throw invalid();
86
+ answers[id] = {
87
+ type: "boolean",
88
+ decision: raw.decision,
89
+ probability: null
90
+ };
91
+ continue;
92
+ }
93
+ if (question.type !== "choice" || typeof raw.choice !== "string" || !Object.hasOwn(question.criteria, raw.choice)) throw invalid();
94
+ answers[id] = {
95
+ type: "choice",
96
+ choice: raw.choice,
97
+ confidence: null,
98
+ probabilities: null
99
+ };
100
+ }
101
+ return answers;
102
+ }
103
+ function questionsForChat(questions, provider, maxQuestions) {
104
+ const entries = require_questions.validateDecisionQuestions(questions, provider);
105
+ let choices = 0;
106
+ for (const [, question] of entries) {
107
+ if (question.type === "score") throw new require_types.DecisionError("unsupported_question", "chat decision cannot score expected values", { provider });
108
+ if (question.type === "choice") choices += Object.keys(question.criteria).length;
109
+ }
110
+ if (entries.length > maxQuestions || choices > MAX_CHOICE_OPTIONS) throw new require_types.DecisionError("unsupported_question", "decision model question batch too large", { provider });
111
+ return entries;
112
+ }
113
+ function createStructuredChatDecisionModel(options) {
114
+ const provider = options.providerId ?? PROVIDER_ID;
115
+ if (!["jsonSchema", "functionCalling"].includes(options.method)) throw new require_types.DecisionError("unsupported_mode", "unsupported structured decision model mode", { provider });
116
+ if (!options.modelId.trim()) throw new require_types.DecisionError("bad_request", "decision model requires a model id", { provider });
117
+ const maxQuestions = options.maxQuestions ?? MAX_QUESTIONS;
118
+ if (!Number.isSafeInteger(maxQuestions) || maxQuestions < 1 || maxQuestions > MAX_QUESTIONS) throw new require_types.DecisionError("bad_request", "invalid decision model question limit", { provider });
119
+ const { model, method } = options;
120
+ const modelId = options.modelId.trim();
121
+ const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
122
+ const onAnswered = options.onAnswered;
123
+ return {
124
+ id: provider,
125
+ model: modelId,
126
+ async decide(request) {
127
+ const started = performance.now();
128
+ return require_deadline.withDecisionDeadline(provider, request.timeoutMs ?? timeoutMs, request.signal, async (signal, waitFor) => {
129
+ let entries;
130
+ let input;
131
+ try {
132
+ entries = questionsForChat(request.questions, provider, maxQuestions);
133
+ input = require_traceMarker.DECISION_PROMPT_PREFIX + JSON.stringify({
134
+ state: request.state,
135
+ questions: Object.fromEntries(entries)
136
+ });
137
+ } catch (error) {
138
+ if (error instanceof require_types.DecisionError) throw error;
139
+ throw new require_types.DecisionError("bad_request", "invalid decision model request", { provider });
140
+ }
141
+ let structured;
142
+ try {
143
+ structured = require_structuredOutput.withDecisionStructuredOutput(model, decisionSchema(entries), method);
144
+ } catch {
145
+ throw new require_types.DecisionError("unsupported_mode", "model cannot enforce the requested strict mode", { provider });
146
+ }
147
+ await waitFor(Promise.resolve());
148
+ let output;
149
+ try {
150
+ output = await waitFor(structured.invoke([new _langchain_core_messages.SystemMessage("Classify the state using the questions. Return only the required decisions. Do not estimate probabilities, confidence, or token usage."), new _langchain_core_messages.HumanMessage(input)], { signal }));
151
+ } catch (error) {
152
+ if (error instanceof require_types.DecisionError) throw error;
153
+ throw providerFailure(error, provider);
154
+ }
155
+ const result = {
156
+ model: modelId,
157
+ answers: readDecisions(output.parsed, entries, provider),
158
+ usage: readChatUsage(output.raw)
159
+ };
160
+ await waitFor(Promise.resolve());
161
+ try {
162
+ onAnswered?.(request.label ?? "decide", performance.now() - started);
163
+ } catch {}
164
+ return result;
165
+ });
166
+ }
167
+ };
168
+ }
169
+ //#endregion
170
+ exports.createStructuredChatDecisionModel = createStructuredChatDecisionModel;
171
+
172
+ //# sourceMappingURL=structuredChat.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredChat.cjs","names":["isDecisionObject","readDecisionUsage","DecisionError","failureForStatus","retryAfterMs","validateDecisionQuestions","withDecisionDeadline","DECISION_PROMPT_PREFIX","withDecisionStructuredOutput","SystemMessage","HumanMessage"],"sources":["../../../src/decisions/structuredChat.ts"],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ //#region src/decisions/structuredOutput.ts
2
+ function withDecisionStructuredOutput(model, schema, method) {
3
+ const options = {
4
+ name: "DecideQuestions",
5
+ method,
6
+ includeRaw: true
7
+ };
8
+ const adapter = model._llmType();
9
+ if (adapter === "openai" || adapter === "azure_openai" || adapter === "anthropic" && method === "functionCalling") return model.withStructuredOutput(schema, {
10
+ ...options,
11
+ strict: true
12
+ });
13
+ throw new Error("unverified strict decision model adapter");
14
+ }
15
+ //#endregion
16
+ exports.withDecisionStructuredOutput = withDecisionStructuredOutput;
17
+
18
+ //# sourceMappingURL=structuredOutput.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structuredOutput.cjs","names":[],"sources":["../../../src/decisions/structuredOutput.ts"],"mappings":";AAKA,SAAgB,6BACd,OACA,QACA,QACmD;CACnD,MAAM,UAAU;EACd,MAAM;EACN;EACA,YAAY;CACd;CACA,MAAM,UAAU,MAAM,SAAS;CAC/B,IACE,YAAY,YACZ,YAAY,kBACX,YAAY,eAAe,WAAW,mBAEvC,OAAO,MAAM,qBAAqB,QAAQ;EAAE,GAAG;EAAS,QAAQ;CAAK,CAAC;CAExE,MAAM,IAAI,MAAM,0CAA0C;AAC5D"}
@@ -0,0 +1,6 @@
1
+ //#region src/decisions/traceMarker.ts
2
+ const DECISION_PROMPT_PREFIX = "librechat-decision-state:";
3
+ //#endregion
4
+ exports.DECISION_PROMPT_PREFIX = DECISION_PROMPT_PREFIX;
5
+
6
+ //# sourceMappingURL=traceMarker.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceMarker.cjs","names":[],"sources":["../../../src/decisions/traceMarker.ts"],"mappings":";AACA,MAAa,yBAAyB"}
@@ -0,0 +1,166 @@
1
+ const require_types = require("./types.cjs");
2
+ const require_deadline = require("./deadline.cjs");
3
+ //#region src/decisions/transport.ts
4
+ const DEFAULT_TIMEOUT_MS = 4e3;
5
+ const DEFAULT_MAX_RETRIES = 2;
6
+ const MAX_RESPONSE_BYTES = 256 * 1024;
7
+ const BACKOFF_MS = [
8
+ 250,
9
+ 750,
10
+ 1500,
11
+ 3e3,
12
+ 6e3
13
+ ];
14
+ const MAX_RETRY_AFTER_MS = 1e4;
15
+ function failureForStatus(status) {
16
+ if (status === 401 || status === 403) return "unauthorized";
17
+ if (status === 429) return "rate_limited";
18
+ if (status >= 500) return "server_error";
19
+ return "bad_request";
20
+ }
21
+ function retryAfterMs(header) {
22
+ if (header == null || header === "") return;
23
+ const seconds = Number(header);
24
+ if (Number.isFinite(seconds) && seconds >= 0) return Math.min(seconds * 1e3, MAX_RETRY_AFTER_MS);
25
+ const at = Date.parse(header);
26
+ return Number.isFinite(at) ? Math.min(Math.max(at - Date.now(), 0), MAX_RETRY_AFTER_MS) : void 0;
27
+ }
28
+ function defaultSleep(ms, signal) {
29
+ if (signal?.aborted === true) return Promise.resolve();
30
+ return new Promise((resolve) => {
31
+ const done = () => {
32
+ clearTimeout(timer);
33
+ signal?.removeEventListener("abort", done);
34
+ resolve();
35
+ };
36
+ const timer = setTimeout(done, ms);
37
+ signal?.addEventListener("abort", done, { once: true });
38
+ });
39
+ }
40
+ async function readResponse(body, waitFor, provider) {
41
+ if (!body) return "";
42
+ const reader = body.getReader();
43
+ const decoder = new TextDecoder();
44
+ let bytes = 0;
45
+ let text = "";
46
+ try {
47
+ for (;;) {
48
+ const chunk = await waitFor(reader.read());
49
+ if (chunk.done) return text + decoder.decode();
50
+ bytes += chunk.value.byteLength;
51
+ if (bytes > MAX_RESPONSE_BYTES) throw new require_types.DecisionError("malformed_response", "decision model response too large", { provider });
52
+ text += decoder.decode(chunk.value, { stream: true });
53
+ }
54
+ } catch (error) {
55
+ reader.cancel().catch(() => {});
56
+ throw error;
57
+ } finally {
58
+ try {
59
+ reader.releaseLock();
60
+ } catch {}
61
+ }
62
+ }
63
+ function createTransport(options) {
64
+ const { providerId } = options;
65
+ const credential = options.apiKey;
66
+ if (options.requiresAuth !== false && (credential == null || typeof credential === "string" && credential.trim() === "")) throw new require_types.DecisionError("unauthorized", "decision model requires an API key", { provider: providerId });
67
+ const endpoint = options.endpoint.trim();
68
+ if (!endpoint) throw new require_types.DecisionError("bad_request", "decision model requires an endpoint", { provider: providerId });
69
+ const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
70
+ const maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;
71
+ const sleep = options.sleep ?? defaultSleep;
72
+ const onAnswered = options.onAnswered;
73
+ if (!Number.isSafeInteger(maxRetries) || maxRetries < 0 || maxRetries > 5) throw new require_types.DecisionError("bad_request", "invalid decision model retry limit", { provider: providerId });
74
+ const fetchImpl = options.fetch ?? globalThis.fetch;
75
+ if (typeof fetchImpl !== "function") throw new require_types.DecisionError("network", "no fetch implementation available", { provider: providerId });
76
+ async function resolveKey(refresh, signal) {
77
+ if (typeof credential === "string") return credential.trim() || null;
78
+ if (!credential) return null;
79
+ const minted = await credential({
80
+ refresh,
81
+ signal
82
+ });
83
+ const token = typeof minted === "string" ? minted.trim() : "";
84
+ if (!token) throw new require_types.DecisionError("unauthorized", "credential function returned no token", { provider: providerId });
85
+ return token;
86
+ }
87
+ return async function send(prepare, callerSignal, label, timeoutOverrideMs) {
88
+ const started = performance.now();
89
+ return require_deadline.withDecisionDeadline(providerId, timeoutOverrideMs ?? timeoutMs, callerSignal, async (signal, waitFor) => {
90
+ let prepared;
91
+ try {
92
+ prepared = prepare();
93
+ } catch (error) {
94
+ if (error instanceof require_types.DecisionError) throw error;
95
+ throw new require_types.DecisionError("bad_request", "invalid decision model request", { provider: providerId });
96
+ }
97
+ const { payload, parse } = prepared;
98
+ await waitFor(Promise.resolve());
99
+ const wasAborted = () => signal.aborted;
100
+ const interrupted = () => new require_types.DecisionError(callerSignal?.aborted === true ? "aborted" : "timeout", "decision model request interrupted", { provider: providerId });
101
+ let refreshed = false;
102
+ let key;
103
+ let lastError;
104
+ for (let attemptNo = 0; attemptNo <= maxRetries; attemptNo++) {
105
+ if (wasAborted()) throw interrupted();
106
+ try {
107
+ if (key === void 0) key = await waitFor(resolveKey(refreshed, signal));
108
+ const response = await waitFor(fetchImpl(endpoint, {
109
+ method: "POST",
110
+ headers: {
111
+ ...key !== null ? { Authorization: `Bearer ${key}` } : {},
112
+ "Content-Type": "application/json"
113
+ },
114
+ body: payload,
115
+ signal,
116
+ redirect: "error"
117
+ }));
118
+ if (!response.ok) {
119
+ response.body?.cancel().catch(() => {});
120
+ const error = new require_types.DecisionError(failureForStatus(response.status), `decision model returned HTTP ${response.status}`, {
121
+ provider: providerId,
122
+ status: response.status
123
+ });
124
+ error.retryAfterMs = retryAfterMs(response.headers.get("retry-after"));
125
+ throw error;
126
+ }
127
+ const body = await readResponse(response.body, waitFor, providerId);
128
+ const result = await waitFor(Promise.resolve(parse(body)));
129
+ try {
130
+ onAnswered?.(label, performance.now() - started);
131
+ } catch {}
132
+ return result;
133
+ } catch (error) {
134
+ if (wasAborted()) throw interrupted();
135
+ if (error instanceof require_types.DecisionError) lastError = error;
136
+ else lastError = new require_types.DecisionError("network", "decision model request failed", { provider: providerId });
137
+ if (lastError.status === 401 && typeof credential === "function" && !refreshed) {
138
+ refreshed = true;
139
+ key = void 0;
140
+ attemptNo -= 1;
141
+ continue;
142
+ }
143
+ if (attemptNo === maxRetries || ![
144
+ "rate_limited",
145
+ "server_error",
146
+ "network"
147
+ ].includes(lastError.failure)) break;
148
+ const wait = lastError.retryAfterMs ?? BACKOFF_MS[Math.min(attemptNo, BACKOFF_MS.length - 1)];
149
+ try {
150
+ await waitFor(sleep(wait, signal));
151
+ } catch (error) {
152
+ if (error instanceof require_types.DecisionError) throw error;
153
+ throw new require_types.DecisionError("network", "decision model backoff failed", { provider: providerId });
154
+ }
155
+ }
156
+ }
157
+ throw lastError ?? new require_types.DecisionError("network", "decision model request failed", { provider: providerId });
158
+ });
159
+ };
160
+ }
161
+ //#endregion
162
+ exports.createTransport = createTransport;
163
+ exports.failureForStatus = failureForStatus;
164
+ exports.retryAfterMs = retryAfterMs;
165
+
166
+ //# sourceMappingURL=transport.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.cjs","names":["DecisionError","withDecisionDeadline"],"sources":["../../../src/decisions/transport.ts"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ //#region src/decisions/types.ts
2
+ var DecisionError = class extends Error {
3
+ failure;
4
+ provider;
5
+ status;
6
+ retryAfterMs;
7
+ constructor(failure, message, options) {
8
+ super(message);
9
+ this.name = "DecisionError";
10
+ this.failure = failure;
11
+ this.provider = options?.provider ?? "unknown";
12
+ this.status = options?.status;
13
+ }
14
+ };
15
+ function isDecisionObject(value) {
16
+ return value !== null && typeof value === "object" && !Array.isArray(value);
17
+ }
18
+ function readDecisionUsage(raw) {
19
+ if (!isDecisionObject(raw)) return null;
20
+ const input = raw.input_tokens;
21
+ const output = raw.output_tokens;
22
+ const usage = {};
23
+ if (typeof input === "number" && Number.isSafeInteger(input) && input >= 0) usage.inputTokens = input;
24
+ if (typeof output === "number" && Number.isSafeInteger(output) && output >= 0) usage.outputTokens = output;
25
+ return Object.keys(usage).length > 0 ? usage : null;
26
+ }
27
+ function isBooleanAnswer(answer) {
28
+ return answer?.type === "boolean";
29
+ }
30
+ function isChoiceAnswer(answer) {
31
+ return answer?.type === "choice";
32
+ }
33
+ function isScoreAnswer(answer) {
34
+ return answer?.type === "score";
35
+ }
36
+ //#endregion
37
+ exports.DecisionError = DecisionError;
38
+ exports.isBooleanAnswer = isBooleanAnswer;
39
+ exports.isChoiceAnswer = isChoiceAnswer;
40
+ exports.isDecisionObject = isDecisionObject;
41
+ exports.isScoreAnswer = isScoreAnswer;
42
+ exports.readDecisionUsage = readDecisionUsage;
43
+
44
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","names":[],"sources":["../../../src/decisions/types.ts"],"mappings":";AAkIA,IAAa,gBAAb,cAAmC,MAAM;CACvC;CACA;CACA;CACA;CAEA,YACE,SACA,SACA,SACA;EACA,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,UAAU;EACf,KAAK,WAAW,SAAS,YAAY;EACrC,KAAK,SAAS,SAAS;CACzB;AACF;AAGA,SAAgB,iBACd,OACqC;CACrC,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAgB,kBAAkB,KAAoC;CACpE,IAAI,CAAC,iBAAiB,GAAG,GACvB,OAAO;CAET,MAAM,QAAQ,IAAI;CAClB,MAAM,SAAS,IAAI;CACnB,MAAM,QAAuB,CAAC;CAC9B,IAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS,GACvE,MAAM,cAAc;CAEtB,IACE,OAAO,WAAW,YAClB,OAAO,cAAc,MAAM,KAC3B,UAAU,GAEV,MAAM,eAAe;CAEvB,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,IAAI,QAAQ;AACjD;AAEA,SAAgB,gBACd,QACyB;CACzB,OAAO,QAAQ,SAAS;AAC1B;AAEA,SAAgB,eACd,QACwB;CACxB,OAAO,QAAQ,SAAS;AAC1B;AAEA,SAAgB,cACd,QACuB;CACvB,OAAO,QAAQ,SAAS;AAC1B"}
@@ -16,10 +16,13 @@ const require_core = require("../messages/core.cjs");
16
16
  const require_preempt = require("../llm/preempt.cjs");
17
17
  const require_callbacks = require("../utils/callbacks.cjs");
18
18
  const require_langfuse = require("../langfuse.cjs");
19
- const require_fading = require("../messages/fading.cjs");
20
19
  const require_runStepResume = require("../tools/runStepResume.cjs");
20
+ const require_fading = require("../messages/fading.cjs");
21
21
  const require_SubagentReplay = require("../tools/subagent/SubagentReplay.cjs");
22
22
  const require_applyGraphRuntimeConfig = require("./applyGraphRuntimeConfig.cjs");
23
+ const require_preparedSubagents = require("../tools/preparedSubagents.cjs");
24
+ const require_streamLimits = require("../llm/streamLimits.cjs");
25
+ const require_providerText = require("../protection/providerText.cjs");
23
26
  const require_tokens = require("../utils/tokens.cjs");
24
27
  const require_llm = require("../utils/llm.cjs");
25
28
  const require_executeHooks = require("../hooks/executeHooks.cjs");
@@ -43,14 +46,13 @@ const require_recency = require("../messages/recency.cjs");
43
46
  const require_assistantPhase = require("../messages/assistantPhase.cjs");
44
47
  require("../messages/index.cjs");
45
48
  const require_graph = require("../utils/graph.cjs");
46
- const require_streamLimits = require("../llm/streamLimits.cjs");
47
49
  const require_handlers = require("../tools/handlers.cjs");
48
50
  const require_acceptedModelResponse = require("./acceptedModelResponse.cjs");
49
51
  const require_toolOutputReferences = require("../tools/toolOutputReferences.cjs");
50
- const require_preparedSubagents = require("../tools/preparedSubagents.cjs");
51
52
  const require_events$1 = require("../events.cjs");
52
53
  const require_run = require("../utils/run.cjs");
53
54
  require("../utils/index.cjs");
55
+ const require_hostArgs = require("../tools/subagent/hostArgs.cjs");
54
56
  const require_childGraphConfig = require("../tools/subagent/childGraphConfig.cjs");
55
57
  const require_SubagentExecutor = require("../tools/subagent/SubagentExecutor.cjs");
56
58
  require("../tools/subagent/index.cjs");
@@ -558,8 +560,10 @@ var StandardGraph = class StandardGraph extends Graph {
558
560
  subagentTasks;
559
561
  subagentExecutionContext;
560
562
  subagentContext;
563
+ onSubagentResolutionFailure;
561
564
  preemption;
562
565
  streamLimits;
566
+ providerTextProtection;
563
567
  streamedToolCallArgTallies = /* @__PURE__ */ new Map();
564
568
  streamDeltaEventCounts = /* @__PURE__ */ new Map();
565
569
  streamLimitChargeCredits;
@@ -571,8 +575,8 @@ var StandardGraph = class StandardGraph extends Graph {
571
575
  });
572
576
  activeStreamLimitGenerations;
573
577
  resolveTrippedBreakerReason(breakerSignal = this.breakerAbort.signal) {
574
- if (breakerSignal.aborted && (breakerSignal.reason instanceof require_streamLimits.StreamLimitExceededError || breakerSignal.reason instanceof require_preparedSubagents.PreparedSubagentError)) return breakerSignal.reason;
575
- if (this.signal?.aborted === true && (this.signal.reason instanceof require_streamLimits.StreamLimitExceededError || this.signal.reason instanceof require_preparedSubagents.PreparedSubagentError)) return this.signal.reason;
578
+ if (breakerSignal.aborted && (breakerSignal.reason instanceof require_streamLimits.StreamLimitExceededError || breakerSignal.reason instanceof require_preparedSubagents.PreparedSubagentError || breakerSignal.reason instanceof require_providerText.ProviderTextProtectionError)) return breakerSignal.reason;
579
+ if (this.signal?.aborted === true && (this.signal.reason instanceof require_streamLimits.StreamLimitExceededError || this.signal.reason instanceof require_preparedSubagents.PreparedSubagentError || this.signal.reason instanceof require_providerText.ProviderTextProtectionError)) return this.signal.reason;
576
580
  }
577
581
  preemptSealBudgetUsed = 0;
578
582
  preemptSealCount = 0;
@@ -585,7 +589,7 @@ var StandardGraph = class StandardGraph extends Graph {
585
589
  preemptHaltReason;
586
590
  pendingPreemptReturn = /* @__PURE__ */ new Set();
587
591
  preemptRestartPending = /* @__PURE__ */ new Set();
588
- constructor({ runId, signal, agents, langfuse, tokenCounter, indexTokenCountMap, calibrationRatio, fadingTier, fadingTiers, subagentUsageSink, subagentTasks, subagentScope, subagentExecutionContext, subagentContext, preemption, streamLimits, toolExecution, clientDelegatedToolNames }, dependencies) {
592
+ constructor({ runId, signal, agents, langfuse, tokenCounter, indexTokenCountMap, calibrationRatio, fadingTier, fadingTiers, subagentUsageSink, subagentTasks, subagentScope, subagentExecutionContext, subagentContext, onSubagentResolutionFailure, preemption, streamLimits, providerTextProtection, toolExecution, clientDelegatedToolNames }, dependencies) {
589
593
  super();
590
594
  this.supportsMultiAgentChildren = dependencies != null;
591
595
  this.graphFactory = dependencies?.graphFactory ?? ((request) => {
@@ -601,8 +605,11 @@ var StandardGraph = class StandardGraph extends Graph {
601
605
  this.subagentScope = subagentScope === true;
602
606
  this.subagentExecutionContext = subagentExecutionContext;
603
607
  this.subagentContext = subagentContext;
608
+ this.onSubagentResolutionFailure = onSubagentResolutionFailure;
604
609
  this.preemption = preemption;
605
610
  this.streamLimits = require_streamLimits.resolveStreamLimits(streamLimits);
611
+ if (providerTextProtection != null) require_providerText.validateProviderTextProtection(providerTextProtection);
612
+ this.providerTextProtection = providerTextProtection;
606
613
  this.toolExecution = toolExecution;
607
614
  if (clientDelegatedToolNames != null && clientDelegatedToolNames.length > 0) {
608
615
  if (agents.length !== 1) throw new Error("Client tool delegation requires a single-agent graph");
@@ -1820,7 +1827,10 @@ var StandardGraph = class StandardGraph extends Graph {
1820
1827
  graph: this,
1821
1828
  metadata
1822
1829
  });
1823
- if (primaryError instanceof require_acceptedModelResponse.InvalidModelToolCallError) throw primaryError;
1830
+ if (primaryError instanceof require_acceptedModelResponse.InvalidModelToolCallError || primaryError instanceof require_providerText.ProviderTextProtectionError) {
1831
+ if (primaryError instanceof require_providerText.ProviderTextProtectionError) attemptBreaker.abort(primaryError);
1832
+ throw primaryError;
1833
+ }
1824
1834
  if (primaryError instanceof require_streamLimits.StreamLimitExceededError || primaryError instanceof require_preparedSubagents.PreparedSubagentError) {
1825
1835
  attemptBreaker.abort(primaryError);
1826
1836
  throw primaryError;
@@ -1966,7 +1976,10 @@ var StandardGraph = class StandardGraph extends Graph {
1966
1976
  }
1967
1977
  }));
1968
1978
  } catch (fallbackError) {
1969
- if (fallbackError instanceof require_acceptedModelResponse.InvalidModelToolCallError) throw fallbackError;
1979
+ if (fallbackError instanceof require_acceptedModelResponse.InvalidModelToolCallError || fallbackError instanceof require_providerText.ProviderTextProtectionError) {
1980
+ if (fallbackError instanceof require_providerText.ProviderTextProtectionError) attemptBreaker.abort(fallbackError);
1981
+ throw fallbackError;
1982
+ }
1970
1983
  if (fallbackError instanceof require_streamLimits.StreamLimitExceededError || fallbackError instanceof require_preparedSubagents.PreparedSubagentError) {
1971
1984
  attemptBreaker.abort(fallbackError);
1972
1985
  throw fallbackError;
@@ -2235,7 +2248,9 @@ var StandardGraph = class StandardGraph extends Graph {
2235
2248
  usageSink: this.subagentUsageSink,
2236
2249
  taskConfig: this.subagentTasks,
2237
2250
  subagentContext: this.subagentContext,
2251
+ onResolutionFailure: this.onSubagentResolutionFailure,
2238
2252
  streamLimits: this.streamLimits,
2253
+ providerTextProtection: this.providerTextProtection,
2239
2254
  humanInTheLoop: this.humanInTheLoop,
2240
2255
  checkpointer: this.compileOptions?.checkpointer,
2241
2256
  maxDepth: effectiveSubagentDepth,
@@ -2247,8 +2262,11 @@ var StandardGraph = class StandardGraph extends Graph {
2247
2262
  createDetachedChildGraphFactory: (parentHandlerRegistry) => snapshotChildGraphFactory(parentHandlerRegistry)
2248
2263
  });
2249
2264
  this.registerSubagentExecutor(executor);
2265
+ const hostArgNames = require_hostArgs.collectSubagentHostArgNames(executableConfigs);
2250
2266
  const subagentTool = (0, _langchain_core_tools.tool)(async (rawInput, config) => {
2251
2267
  const input = rawInput;
2268
+ const hostArgInput = require_hostArgs.pickSubagentHostArgInput(input, hostArgNames);
2269
+ if (!hostArgInput.ok) return hostArgInput.message;
2252
2270
  const description = typeof input.description === "string" && input.description.trim().length > 0 ? input.description : require_SubagentExecutor.DEFAULT_SUBAGENT_DESCRIPTION;
2253
2271
  const subagentType = typeof input.subagent_type === "string" ? input.subagent_type : "";
2254
2272
  const subagentThreadId = typeof input.subagent_thread_id === "string" && input.subagent_thread_id.trim() !== "" ? input.subagent_thread_id.trim() : void 0;
@@ -2266,7 +2284,8 @@ var StandardGraph = class StandardGraph extends Graph {
2266
2284
  signal: config.signal,
2267
2285
  parentToolCallId,
2268
2286
  breaker: batchScope?.controller,
2269
- parentConfigurable: config.configurable
2287
+ parentConfigurable: config.configurable,
2288
+ ...hostArgInput.hostArgs == null ? {} : { hostArgs: hostArgInput.hostArgs }
2270
2289
  };
2271
2290
  if (input.run_in_background === true) return executor.executeInBackground({
2272
2291
  ...executeParams,