@librechat/agents 3.4.7 → 3.5.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.
Files changed (924) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +0 -356
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/agents/projection.cjs +0 -9
  4. package/dist/cjs/agents/projection.cjs.map +1 -1
  5. package/dist/cjs/common/constants.cjs +0 -26
  6. package/dist/cjs/common/constants.cjs.map +1 -1
  7. package/dist/cjs/common/enum.cjs +0 -85
  8. package/dist/cjs/common/enum.cjs.map +1 -1
  9. package/dist/cjs/events.cjs +0 -14
  10. package/dist/cjs/events.cjs.map +1 -1
  11. package/dist/cjs/graphs/Graph.cjs +1 -909
  12. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  13. package/dist/cjs/graphs/MultiAgentGraph.cjs +7 -272
  14. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  15. package/dist/cjs/graphs/applyGraphRuntimeConfig.cjs.map +1 -1
  16. package/dist/cjs/graphs/createGraph.cjs.map +1 -1
  17. package/dist/cjs/hitl/askUserQuestion.cjs +0 -53
  18. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  19. package/dist/cjs/hitl/askUserQuestions.cjs +0 -20
  20. package/dist/cjs/hitl/askUserQuestions.cjs.map +1 -1
  21. package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs +0 -6
  22. package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs.map +1 -1
  23. package/dist/cjs/hooks/HookRegistry.cjs +0 -127
  24. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  25. package/dist/cjs/hooks/createToolPolicyHook.cjs +0 -38
  26. package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
  27. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +0 -77
  28. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  29. package/dist/cjs/hooks/executeHooks.cjs +0 -79
  30. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  31. package/dist/cjs/hooks/index.cjs +0 -16
  32. package/dist/cjs/hooks/index.cjs.map +1 -1
  33. package/dist/cjs/hooks/matchers.cjs +0 -104
  34. package/dist/cjs/hooks/matchers.cjs.map +1 -1
  35. package/dist/cjs/hooks/types.cjs +0 -8
  36. package/dist/cjs/hooks/types.cjs.map +1 -1
  37. package/dist/cjs/instrumentation.cjs +0 -14
  38. package/dist/cjs/instrumentation.cjs.map +1 -1
  39. package/dist/cjs/langfuse.cjs +0 -75
  40. package/dist/cjs/langfuse.cjs.map +1 -1
  41. package/dist/cjs/langfuseConfig.cjs.map +1 -1
  42. package/dist/cjs/langfuseRuntimeContext.cjs +0 -13
  43. package/dist/cjs/langfuseRuntimeContext.cjs.map +1 -1
  44. package/dist/cjs/langfuseRuntimeScope.cjs +0 -4
  45. package/dist/cjs/langfuseRuntimeScope.cjs.map +1 -1
  46. package/dist/cjs/langfuseSpanRegistry.cjs +0 -28
  47. package/dist/cjs/langfuseSpanRegistry.cjs.map +1 -1
  48. package/dist/cjs/langfuseToolOutputTracing.cjs +0 -3
  49. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  50. package/dist/cjs/langfuseTraceShaping.cjs +0 -74
  51. package/dist/cjs/langfuseTraceShaping.cjs.map +1 -1
  52. package/dist/cjs/llm/anthropic/index.cjs +0 -3
  53. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  55. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +1 -111
  56. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  57. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +0 -1
  58. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  59. package/dist/cjs/llm/anthropic/utils/stream_events.cjs +0 -8
  60. package/dist/cjs/llm/anthropic/utils/stream_events.cjs.map +1 -1
  61. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  62. package/dist/cjs/llm/bedrock/cachePoints.cjs.map +1 -1
  63. package/dist/cjs/llm/bedrock/index.cjs +1 -95
  64. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  65. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  66. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +0 -78
  67. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  68. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +0 -24
  69. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
  70. package/dist/cjs/llm/contextOverflowRecovery.cjs +0 -62
  71. package/dist/cjs/llm/contextOverflowRecovery.cjs.map +1 -1
  72. package/dist/cjs/llm/fake.cjs.map +1 -1
  73. package/dist/cjs/llm/google/index.cjs +2 -21
  74. package/dist/cjs/llm/google/index.cjs.map +1 -1
  75. package/dist/cjs/llm/google/utils/common.cjs +0 -35
  76. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  77. package/dist/cjs/llm/init.cjs +0 -9
  78. package/dist/cjs/llm/init.cjs.map +1 -1
  79. package/dist/cjs/llm/invoke.cjs +1 -270
  80. package/dist/cjs/llm/invoke.cjs.map +1 -1
  81. package/dist/cjs/llm/mistral/index.cjs.map +1 -1
  82. package/dist/cjs/llm/openai/index.cjs +0 -99
  83. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  84. package/dist/cjs/llm/openai/streamMetadata.cjs +0 -21
  85. package/dist/cjs/llm/openai/streamMetadata.cjs.map +1 -1
  86. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  87. package/dist/cjs/llm/openrouter/index.cjs +0 -1
  88. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  89. package/dist/cjs/llm/openrouter/toolCache.cjs +0 -6
  90. package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
  91. package/dist/cjs/llm/preempt.cjs +0 -75
  92. package/dist/cjs/llm/preempt.cjs.map +1 -1
  93. package/dist/cjs/llm/providers.cjs.map +1 -1
  94. package/dist/cjs/llm/request.cjs +0 -10
  95. package/dist/cjs/llm/request.cjs.map +1 -1
  96. package/dist/cjs/llm/stream/chunkAdapters.cjs +0 -62
  97. package/dist/cjs/llm/stream/chunkAdapters.cjs.map +1 -1
  98. package/dist/cjs/llm/stream/smoother.cjs +0 -58
  99. package/dist/cjs/llm/stream/smoother.cjs.map +1 -1
  100. package/dist/cjs/llm/streamLimits.cjs +4 -293
  101. package/dist/cjs/llm/streamLimits.cjs.map +1 -1
  102. package/dist/cjs/llm/truncation.cjs +0 -36
  103. package/dist/cjs/llm/truncation.cjs.map +1 -1
  104. package/dist/cjs/llm/vertexai/index.cjs +0 -330
  105. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  106. package/dist/cjs/messages/alternation.cjs +0 -43
  107. package/dist/cjs/messages/alternation.cjs.map +1 -1
  108. package/dist/cjs/messages/anthropicToolCache.cjs +0 -45
  109. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
  110. package/dist/cjs/messages/assistantPhase.cjs +0 -12
  111. package/dist/cjs/messages/assistantPhase.cjs.map +1 -1
  112. package/dist/cjs/messages/budget.cjs +0 -9
  113. package/dist/cjs/messages/budget.cjs.map +1 -1
  114. package/dist/cjs/messages/cache.cjs +0 -172
  115. package/dist/cjs/messages/cache.cjs.map +1 -1
  116. package/dist/cjs/messages/content.cjs +0 -9
  117. package/dist/cjs/messages/content.cjs.map +1 -1
  118. package/dist/cjs/messages/contextPruning.cjs +0 -15
  119. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  120. package/dist/cjs/messages/contextPruningSettings.cjs +0 -3
  121. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
  122. package/dist/cjs/messages/core.cjs +0 -48
  123. package/dist/cjs/messages/core.cjs.map +1 -1
  124. package/dist/cjs/messages/format.cjs +1 -345
  125. package/dist/cjs/messages/format.cjs.map +1 -1
  126. package/dist/cjs/messages/handoffCue.cjs +0 -36
  127. package/dist/cjs/messages/handoffCue.cjs.map +1 -1
  128. package/dist/cjs/messages/ids.cjs.map +1 -1
  129. package/dist/cjs/messages/injected.cjs +0 -33
  130. package/dist/cjs/messages/injected.cjs.map +1 -1
  131. package/dist/cjs/messages/langchain.cjs +0 -14
  132. package/dist/cjs/messages/langchain.cjs.map +1 -1
  133. package/dist/cjs/messages/prune.cjs +1 -184
  134. package/dist/cjs/messages/prune.cjs.map +1 -1
  135. package/dist/cjs/messages/recency.cjs +0 -32
  136. package/dist/cjs/messages/recency.cjs.map +1 -1
  137. package/dist/cjs/messages/reducer.cjs +0 -30
  138. package/dist/cjs/messages/reducer.cjs.map +1 -1
  139. package/dist/cjs/messages/tools.cjs +0 -14
  140. package/dist/cjs/messages/tools.cjs.map +1 -1
  141. package/dist/cjs/openai/index.cjs.map +1 -1
  142. package/dist/cjs/prompts/activityLabel.cjs +9 -79
  143. package/dist/cjs/prompts/activityLabel.cjs.map +1 -1
  144. package/dist/cjs/responses/index.cjs.map +1 -1
  145. package/dist/cjs/run.cjs +2 -538
  146. package/dist/cjs/run.cjs.map +1 -1
  147. package/dist/cjs/session/AgentSession.cjs +1 -17
  148. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  149. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  150. package/dist/cjs/session/handlers.cjs +0 -7
  151. package/dist/cjs/session/handlers.cjs.map +1 -1
  152. package/dist/cjs/session/ids.cjs.map +1 -1
  153. package/dist/cjs/session/messageSerialization.cjs +0 -4
  154. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  155. package/dist/cjs/stream.cjs +1 -93
  156. package/dist/cjs/stream.cjs.map +1 -1
  157. package/dist/cjs/summarization/index.cjs +0 -27
  158. package/dist/cjs/summarization/index.cjs.map +1 -1
  159. package/dist/cjs/summarization/node.cjs +0 -273
  160. package/dist/cjs/summarization/node.cjs.map +1 -1
  161. package/dist/cjs/tools/BashExecutor.cjs +0 -35
  162. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  163. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +0 -24
  164. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  165. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  166. package/dist/cjs/tools/CodeExecutor.cjs +0 -13
  167. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  168. package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
  169. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +0 -101
  170. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  171. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  172. package/dist/cjs/tools/SkillTool.cjs +0 -5
  173. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  174. package/dist/cjs/tools/SubagentTool.cjs +0 -10
  175. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  176. package/dist/cjs/tools/ToolNode.cjs +6 -1038
  177. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  178. package/dist/cjs/tools/ToolSearch.cjs +0 -179
  179. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  180. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
  181. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
  182. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +0 -39
  183. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  184. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  185. package/dist/cjs/tools/eagerEventExecution.cjs +0 -6
  186. package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
  187. package/dist/cjs/tools/handlers.cjs +1 -41
  188. package/dist/cjs/tools/handlers.cjs.map +1 -1
  189. package/dist/cjs/tools/intentArg.cjs +1 -132
  190. package/dist/cjs/tools/intentArg.cjs.map +1 -1
  191. package/dist/cjs/tools/local/CompileCheckTool.cjs +0 -25
  192. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  193. package/dist/cjs/tools/local/FileCheckpointer.cjs +0 -23
  194. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  195. package/dist/cjs/tools/local/LocalCodingTools.cjs +0 -80
  196. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  197. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +0 -126
  198. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  199. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  200. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +0 -12
  201. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  202. package/dist/cjs/tools/local/attachments.cjs +0 -44
  203. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  204. package/dist/cjs/tools/local/bashAst.cjs +0 -16
  205. package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
  206. package/dist/cjs/tools/local/editStrategies.cjs +0 -14
  207. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
  208. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  209. package/dist/cjs/tools/local/syntaxCheck.cjs +0 -31
  210. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
  211. package/dist/cjs/tools/local/textEncoding.cjs +0 -11
  212. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
  213. package/dist/cjs/tools/local/workspaceFS.cjs +0 -33
  214. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
  215. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  216. package/dist/cjs/tools/schema.cjs +0 -8
  217. package/dist/cjs/tools/schema.cjs.map +1 -1
  218. package/dist/cjs/tools/search/anthropic.cjs +0 -9
  219. package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
  220. package/dist/cjs/tools/search/content.cjs.map +1 -1
  221. package/dist/cjs/tools/search/crw-scraper.cjs +0 -33
  222. package/dist/cjs/tools/search/crw-scraper.cjs.map +1 -1
  223. package/dist/cjs/tools/search/crw-search.cjs +0 -2
  224. package/dist/cjs/tools/search/crw-search.cjs.map +1 -1
  225. package/dist/cjs/tools/search/firecrawl.cjs +0 -25
  226. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  227. package/dist/cjs/tools/search/format.cjs +0 -30
  228. package/dist/cjs/tools/search/format.cjs.map +1 -1
  229. package/dist/cjs/tools/search/highlights.cjs +0 -16
  230. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  231. package/dist/cjs/tools/search/keenable-scraper.cjs +0 -8
  232. package/dist/cjs/tools/search/keenable-scraper.cjs.map +1 -1
  233. package/dist/cjs/tools/search/keenable-search.cjs +0 -7
  234. package/dist/cjs/tools/search/keenable-search.cjs.map +1 -1
  235. package/dist/cjs/tools/search/rerankers.cjs +0 -35
  236. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  237. package/dist/cjs/tools/search/schema.cjs +0 -1
  238. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  239. package/dist/cjs/tools/search/search.cjs +1 -14
  240. package/dist/cjs/tools/search/search.cjs.map +1 -1
  241. package/dist/cjs/tools/search/serper-scraper.cjs +0 -46
  242. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  243. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  244. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  245. package/dist/cjs/tools/search/tool.cjs +0 -25
  246. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  247. package/dist/cjs/tools/search/utils.cjs +0 -8
  248. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  249. package/dist/cjs/tools/skillCatalog.cjs +0 -6
  250. package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
  251. package/dist/cjs/tools/streamedToolCallSeals.cjs +0 -6
  252. package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
  253. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +0 -2
  254. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -1
  255. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +3 -213
  256. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  257. package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
  258. package/dist/cjs/tools/subagent/childGraphConfig.cjs +0 -4
  259. package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -1
  260. package/dist/cjs/tools/subagent/runtimeLimits.cjs.map +1 -1
  261. package/dist/cjs/tools/toolOutputReferences.cjs +1 -322
  262. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  263. package/dist/cjs/types/hitl.cjs +0 -5
  264. package/dist/cjs/types/hitl.cjs.map +1 -1
  265. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  266. package/dist/cjs/utils/errors.cjs +14 -165
  267. package/dist/cjs/utils/errors.cjs.map +1 -1
  268. package/dist/cjs/utils/events.cjs +0 -10
  269. package/dist/cjs/utils/events.cjs.map +1 -1
  270. package/dist/cjs/utils/graph.cjs.map +1 -1
  271. package/dist/cjs/utils/handlers.cjs +0 -3
  272. package/dist/cjs/utils/handlers.cjs.map +1 -1
  273. package/dist/cjs/utils/llm.cjs +0 -1
  274. package/dist/cjs/utils/llm.cjs.map +1 -1
  275. package/dist/cjs/utils/misc.cjs +0 -16
  276. package/dist/cjs/utils/misc.cjs.map +1 -1
  277. package/dist/cjs/utils/proxy.cjs +0 -26
  278. package/dist/cjs/utils/proxy.cjs.map +1 -1
  279. package/dist/cjs/utils/run.cjs +0 -6
  280. package/dist/cjs/utils/run.cjs.map +1 -1
  281. package/dist/cjs/utils/schema.cjs +0 -5
  282. package/dist/cjs/utils/schema.cjs.map +1 -1
  283. package/dist/cjs/utils/title.cjs +0 -6
  284. package/dist/cjs/utils/title.cjs.map +1 -1
  285. package/dist/cjs/utils/tokens.cjs +0 -113
  286. package/dist/cjs/utils/tokens.cjs.map +1 -1
  287. package/dist/cjs/utils/toolContent.cjs +0 -41
  288. package/dist/cjs/utils/toolContent.cjs.map +1 -1
  289. package/dist/cjs/utils/truncation.cjs +0 -61
  290. package/dist/cjs/utils/truncation.cjs.map +1 -1
  291. package/dist/esm/agents/AgentContext.mjs +0 -356
  292. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  293. package/dist/esm/agents/projection.mjs +0 -9
  294. package/dist/esm/agents/projection.mjs.map +1 -1
  295. package/dist/esm/common/constants.mjs +0 -26
  296. package/dist/esm/common/constants.mjs.map +1 -1
  297. package/dist/esm/common/enum.mjs +0 -85
  298. package/dist/esm/common/enum.mjs.map +1 -1
  299. package/dist/esm/events.mjs +0 -14
  300. package/dist/esm/events.mjs.map +1 -1
  301. package/dist/esm/graphs/Graph.mjs +1 -909
  302. package/dist/esm/graphs/Graph.mjs.map +1 -1
  303. package/dist/esm/graphs/MultiAgentGraph.mjs +7 -272
  304. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  305. package/dist/esm/graphs/applyGraphRuntimeConfig.mjs.map +1 -1
  306. package/dist/esm/graphs/createGraph.mjs.map +1 -1
  307. package/dist/esm/hitl/askUserQuestion.mjs +0 -53
  308. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  309. package/dist/esm/hitl/askUserQuestions.mjs +0 -20
  310. package/dist/esm/hitl/askUserQuestions.mjs.map +1 -1
  311. package/dist/esm/hitl/askUserQuestionsInterrupt.mjs +0 -6
  312. package/dist/esm/hitl/askUserQuestionsInterrupt.mjs.map +1 -1
  313. package/dist/esm/hooks/HookRegistry.mjs +0 -127
  314. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  315. package/dist/esm/hooks/createToolPolicyHook.mjs +0 -38
  316. package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
  317. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +0 -77
  318. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  319. package/dist/esm/hooks/executeHooks.mjs +0 -79
  320. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  321. package/dist/esm/hooks/index.mjs +0 -16
  322. package/dist/esm/hooks/index.mjs.map +1 -1
  323. package/dist/esm/hooks/matchers.mjs +0 -104
  324. package/dist/esm/hooks/matchers.mjs.map +1 -1
  325. package/dist/esm/hooks/types.mjs +0 -8
  326. package/dist/esm/hooks/types.mjs.map +1 -1
  327. package/dist/esm/instrumentation.mjs +0 -14
  328. package/dist/esm/instrumentation.mjs.map +1 -1
  329. package/dist/esm/langfuse.mjs +0 -75
  330. package/dist/esm/langfuse.mjs.map +1 -1
  331. package/dist/esm/langfuseConfig.mjs.map +1 -1
  332. package/dist/esm/langfuseRuntimeContext.mjs +0 -13
  333. package/dist/esm/langfuseRuntimeContext.mjs.map +1 -1
  334. package/dist/esm/langfuseRuntimeScope.mjs +0 -4
  335. package/dist/esm/langfuseRuntimeScope.mjs.map +1 -1
  336. package/dist/esm/langfuseSpanRegistry.mjs +0 -28
  337. package/dist/esm/langfuseSpanRegistry.mjs.map +1 -1
  338. package/dist/esm/langfuseToolOutputTracing.mjs +0 -3
  339. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  340. package/dist/esm/langfuseTraceShaping.mjs +0 -74
  341. package/dist/esm/langfuseTraceShaping.mjs.map +1 -1
  342. package/dist/esm/llm/anthropic/index.mjs +0 -3
  343. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  344. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  345. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +1 -111
  346. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  347. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +0 -1
  348. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  349. package/dist/esm/llm/anthropic/utils/stream_events.mjs +0 -8
  350. package/dist/esm/llm/anthropic/utils/stream_events.mjs.map +1 -1
  351. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  352. package/dist/esm/llm/bedrock/cachePoints.mjs.map +1 -1
  353. package/dist/esm/llm/bedrock/index.mjs +1 -95
  354. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  355. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  356. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +0 -78
  357. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  358. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +0 -24
  359. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
  360. package/dist/esm/llm/contextOverflowRecovery.mjs +0 -62
  361. package/dist/esm/llm/contextOverflowRecovery.mjs.map +1 -1
  362. package/dist/esm/llm/fake.mjs.map +1 -1
  363. package/dist/esm/llm/google/index.mjs +2 -21
  364. package/dist/esm/llm/google/index.mjs.map +1 -1
  365. package/dist/esm/llm/google/utils/common.mjs +0 -35
  366. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  367. package/dist/esm/llm/init.mjs +0 -9
  368. package/dist/esm/llm/init.mjs.map +1 -1
  369. package/dist/esm/llm/invoke.mjs +1 -270
  370. package/dist/esm/llm/invoke.mjs.map +1 -1
  371. package/dist/esm/llm/mistral/index.mjs.map +1 -1
  372. package/dist/esm/llm/openai/index.mjs +0 -99
  373. package/dist/esm/llm/openai/index.mjs.map +1 -1
  374. package/dist/esm/llm/openai/streamMetadata.mjs +0 -21
  375. package/dist/esm/llm/openai/streamMetadata.mjs.map +1 -1
  376. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  377. package/dist/esm/llm/openrouter/index.mjs +0 -1
  378. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  379. package/dist/esm/llm/openrouter/toolCache.mjs +0 -6
  380. package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
  381. package/dist/esm/llm/preempt.mjs +0 -75
  382. package/dist/esm/llm/preempt.mjs.map +1 -1
  383. package/dist/esm/llm/providers.mjs.map +1 -1
  384. package/dist/esm/llm/request.mjs +0 -10
  385. package/dist/esm/llm/request.mjs.map +1 -1
  386. package/dist/esm/llm/stream/chunkAdapters.mjs +0 -62
  387. package/dist/esm/llm/stream/chunkAdapters.mjs.map +1 -1
  388. package/dist/esm/llm/stream/smoother.mjs +0 -58
  389. package/dist/esm/llm/stream/smoother.mjs.map +1 -1
  390. package/dist/esm/llm/streamLimits.mjs +4 -293
  391. package/dist/esm/llm/streamLimits.mjs.map +1 -1
  392. package/dist/esm/llm/truncation.mjs +0 -36
  393. package/dist/esm/llm/truncation.mjs.map +1 -1
  394. package/dist/esm/llm/vertexai/index.mjs +0 -330
  395. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  396. package/dist/esm/messages/alternation.mjs +0 -43
  397. package/dist/esm/messages/alternation.mjs.map +1 -1
  398. package/dist/esm/messages/anthropicToolCache.mjs +0 -45
  399. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
  400. package/dist/esm/messages/assistantPhase.mjs +0 -12
  401. package/dist/esm/messages/assistantPhase.mjs.map +1 -1
  402. package/dist/esm/messages/budget.mjs +0 -9
  403. package/dist/esm/messages/budget.mjs.map +1 -1
  404. package/dist/esm/messages/cache.mjs +0 -172
  405. package/dist/esm/messages/cache.mjs.map +1 -1
  406. package/dist/esm/messages/content.mjs +0 -9
  407. package/dist/esm/messages/content.mjs.map +1 -1
  408. package/dist/esm/messages/contextPruning.mjs +0 -15
  409. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  410. package/dist/esm/messages/contextPruningSettings.mjs +0 -3
  411. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
  412. package/dist/esm/messages/core.mjs +0 -48
  413. package/dist/esm/messages/core.mjs.map +1 -1
  414. package/dist/esm/messages/format.mjs +1 -345
  415. package/dist/esm/messages/format.mjs.map +1 -1
  416. package/dist/esm/messages/handoffCue.mjs +0 -36
  417. package/dist/esm/messages/handoffCue.mjs.map +1 -1
  418. package/dist/esm/messages/ids.mjs.map +1 -1
  419. package/dist/esm/messages/injected.mjs +0 -33
  420. package/dist/esm/messages/injected.mjs.map +1 -1
  421. package/dist/esm/messages/langchain.mjs +0 -14
  422. package/dist/esm/messages/langchain.mjs.map +1 -1
  423. package/dist/esm/messages/prune.mjs +1 -184
  424. package/dist/esm/messages/prune.mjs.map +1 -1
  425. package/dist/esm/messages/recency.mjs +0 -32
  426. package/dist/esm/messages/recency.mjs.map +1 -1
  427. package/dist/esm/messages/reducer.mjs +0 -30
  428. package/dist/esm/messages/reducer.mjs.map +1 -1
  429. package/dist/esm/messages/tools.mjs +0 -14
  430. package/dist/esm/messages/tools.mjs.map +1 -1
  431. package/dist/esm/openai/index.mjs.map +1 -1
  432. package/dist/esm/prompts/activityLabel.mjs +9 -79
  433. package/dist/esm/prompts/activityLabel.mjs.map +1 -1
  434. package/dist/esm/responses/index.mjs.map +1 -1
  435. package/dist/esm/run.mjs +2 -538
  436. package/dist/esm/run.mjs.map +1 -1
  437. package/dist/esm/session/AgentSession.mjs +1 -17
  438. package/dist/esm/session/AgentSession.mjs.map +1 -1
  439. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  440. package/dist/esm/session/handlers.mjs +0 -7
  441. package/dist/esm/session/handlers.mjs.map +1 -1
  442. package/dist/esm/session/ids.mjs.map +1 -1
  443. package/dist/esm/session/messageSerialization.mjs +0 -4
  444. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  445. package/dist/esm/stream.mjs +1 -93
  446. package/dist/esm/stream.mjs.map +1 -1
  447. package/dist/esm/summarization/index.mjs +0 -27
  448. package/dist/esm/summarization/index.mjs.map +1 -1
  449. package/dist/esm/summarization/node.mjs +0 -273
  450. package/dist/esm/summarization/node.mjs.map +1 -1
  451. package/dist/esm/tools/BashExecutor.mjs +0 -35
  452. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  453. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +0 -24
  454. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  455. package/dist/esm/tools/Calculator.mjs.map +1 -1
  456. package/dist/esm/tools/CodeExecutor.mjs +0 -13
  457. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  458. package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
  459. package/dist/esm/tools/ProgrammaticToolCalling.mjs +0 -101
  460. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  461. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  462. package/dist/esm/tools/SkillTool.mjs +0 -5
  463. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  464. package/dist/esm/tools/SubagentTool.mjs +0 -10
  465. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  466. package/dist/esm/tools/ToolNode.mjs +6 -1038
  467. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  468. package/dist/esm/tools/ToolSearch.mjs +0 -179
  469. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  470. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
  471. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
  472. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +0 -39
  473. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  474. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  475. package/dist/esm/tools/eagerEventExecution.mjs +0 -6
  476. package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
  477. package/dist/esm/tools/handlers.mjs +1 -41
  478. package/dist/esm/tools/handlers.mjs.map +1 -1
  479. package/dist/esm/tools/intentArg.mjs +1 -132
  480. package/dist/esm/tools/intentArg.mjs.map +1 -1
  481. package/dist/esm/tools/local/CompileCheckTool.mjs +0 -25
  482. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  483. package/dist/esm/tools/local/FileCheckpointer.mjs +0 -23
  484. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  485. package/dist/esm/tools/local/LocalCodingTools.mjs +0 -80
  486. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  487. package/dist/esm/tools/local/LocalExecutionEngine.mjs +0 -126
  488. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  489. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  490. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +0 -12
  491. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  492. package/dist/esm/tools/local/attachments.mjs +0 -44
  493. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  494. package/dist/esm/tools/local/bashAst.mjs +0 -16
  495. package/dist/esm/tools/local/bashAst.mjs.map +1 -1
  496. package/dist/esm/tools/local/editStrategies.mjs +0 -14
  497. package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
  498. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  499. package/dist/esm/tools/local/syntaxCheck.mjs +0 -31
  500. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
  501. package/dist/esm/tools/local/textEncoding.mjs +0 -11
  502. package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
  503. package/dist/esm/tools/local/workspaceFS.mjs +0 -33
  504. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
  505. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  506. package/dist/esm/tools/schema.mjs +0 -8
  507. package/dist/esm/tools/schema.mjs.map +1 -1
  508. package/dist/esm/tools/search/anthropic.mjs +0 -9
  509. package/dist/esm/tools/search/anthropic.mjs.map +1 -1
  510. package/dist/esm/tools/search/content.mjs.map +1 -1
  511. package/dist/esm/tools/search/crw-scraper.mjs +0 -33
  512. package/dist/esm/tools/search/crw-scraper.mjs.map +1 -1
  513. package/dist/esm/tools/search/crw-search.mjs +0 -2
  514. package/dist/esm/tools/search/crw-search.mjs.map +1 -1
  515. package/dist/esm/tools/search/firecrawl.mjs +0 -25
  516. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  517. package/dist/esm/tools/search/format.mjs +0 -30
  518. package/dist/esm/tools/search/format.mjs.map +1 -1
  519. package/dist/esm/tools/search/highlights.mjs +0 -16
  520. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  521. package/dist/esm/tools/search/keenable-scraper.mjs +0 -8
  522. package/dist/esm/tools/search/keenable-scraper.mjs.map +1 -1
  523. package/dist/esm/tools/search/keenable-search.mjs +0 -7
  524. package/dist/esm/tools/search/keenable-search.mjs.map +1 -1
  525. package/dist/esm/tools/search/rerankers.mjs +0 -35
  526. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  527. package/dist/esm/tools/search/schema.mjs +0 -1
  528. package/dist/esm/tools/search/schema.mjs.map +1 -1
  529. package/dist/esm/tools/search/search.mjs +1 -14
  530. package/dist/esm/tools/search/search.mjs.map +1 -1
  531. package/dist/esm/tools/search/serper-scraper.mjs +0 -46
  532. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  533. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  534. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  535. package/dist/esm/tools/search/tool.mjs +0 -25
  536. package/dist/esm/tools/search/tool.mjs.map +1 -1
  537. package/dist/esm/tools/search/utils.mjs +0 -8
  538. package/dist/esm/tools/search/utils.mjs.map +1 -1
  539. package/dist/esm/tools/skillCatalog.mjs +0 -6
  540. package/dist/esm/tools/skillCatalog.mjs.map +1 -1
  541. package/dist/esm/tools/streamedToolCallSeals.mjs +0 -6
  542. package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
  543. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +0 -2
  544. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -1
  545. package/dist/esm/tools/subagent/SubagentExecutor.mjs +3 -213
  546. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  547. package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
  548. package/dist/esm/tools/subagent/childGraphConfig.mjs +0 -4
  549. package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -1
  550. package/dist/esm/tools/subagent/runtimeLimits.mjs.map +1 -1
  551. package/dist/esm/tools/toolOutputReferences.mjs +1 -322
  552. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  553. package/dist/esm/types/hitl.mjs +0 -5
  554. package/dist/esm/types/hitl.mjs.map +1 -1
  555. package/dist/esm/utils/callbacks.mjs.map +1 -1
  556. package/dist/esm/utils/errors.mjs +14 -165
  557. package/dist/esm/utils/errors.mjs.map +1 -1
  558. package/dist/esm/utils/events.mjs +0 -10
  559. package/dist/esm/utils/events.mjs.map +1 -1
  560. package/dist/esm/utils/graph.mjs.map +1 -1
  561. package/dist/esm/utils/handlers.mjs +0 -3
  562. package/dist/esm/utils/handlers.mjs.map +1 -1
  563. package/dist/esm/utils/llm.mjs +0 -1
  564. package/dist/esm/utils/llm.mjs.map +1 -1
  565. package/dist/esm/utils/misc.mjs +0 -16
  566. package/dist/esm/utils/misc.mjs.map +1 -1
  567. package/dist/esm/utils/proxy.mjs +0 -26
  568. package/dist/esm/utils/proxy.mjs.map +1 -1
  569. package/dist/esm/utils/run.mjs +0 -6
  570. package/dist/esm/utils/run.mjs.map +1 -1
  571. package/dist/esm/utils/schema.mjs +0 -5
  572. package/dist/esm/utils/schema.mjs.map +1 -1
  573. package/dist/esm/utils/title.mjs +0 -6
  574. package/dist/esm/utils/title.mjs.map +1 -1
  575. package/dist/esm/utils/tokens.mjs +0 -113
  576. package/dist/esm/utils/tokens.mjs.map +1 -1
  577. package/dist/esm/utils/toolContent.mjs +0 -41
  578. package/dist/esm/utils/toolContent.mjs.map +1 -1
  579. package/dist/esm/utils/truncation.mjs +0 -61
  580. package/dist/esm/utils/truncation.mjs.map +1 -1
  581. package/package.json +35 -32
  582. package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +0 -52
  583. package/dist/types/test/mockTools.d.ts +0 -28
  584. package/dist/types/utils/__tests__/fixtures/contextOverflowSignatures.d.ts +0 -40
  585. package/src/__tests__/stream.eagerArgsDivergence.test.ts +0 -911
  586. package/src/__tests__/stream.eagerEventExecution.test.ts +0 -5046
  587. package/src/__tests__/stream.streamLimits.test.ts +0 -1982
  588. package/src/agents/__tests__/AgentContext.anthropic.live.test.ts +0 -448
  589. package/src/agents/__tests__/AgentContext.bedrock.live.test.ts +0 -655
  590. package/src/agents/__tests__/AgentContext.openrouter.live.test.ts +0 -128
  591. package/src/agents/__tests__/AgentContext.overflow.test.ts +0 -205
  592. package/src/agents/__tests__/AgentContext.test.ts +0 -2425
  593. package/src/agents/__tests__/projection.test.ts +0 -73
  594. package/src/agents/__tests__/promptCacheLiveHelpers.ts +0 -175
  595. package/src/aggregator.test.ts +0 -1214
  596. package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +0 -273
  597. package/src/graphs/__tests__/Graph.closeRunStep.test.ts +0 -385
  598. package/src/graphs/__tests__/Graph.contextOverflow.test.ts +0 -1766
  599. package/src/graphs/__tests__/Graph.preemptSignal.test.ts +0 -126
  600. package/src/graphs/__tests__/Graph.reasoning.test.ts +0 -1717
  601. package/src/graphs/__tests__/Graph.subagentResumeState.test.ts +0 -80
  602. package/src/graphs/__tests__/MultiAgentGraph.test.ts +0 -177
  603. package/src/graphs/__tests__/composition.smoke.test.ts +0 -509
  604. package/src/graphs/__tests__/createGraph.test.ts +0 -206
  605. package/src/hooks/__tests__/HookRegistry.test.ts +0 -334
  606. package/src/hooks/__tests__/compactHooks.test.ts +0 -250
  607. package/src/hooks/__tests__/createToolPolicyHook.test.ts +0 -268
  608. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +0 -405
  609. package/src/hooks/__tests__/executeHooks.test.ts +0 -1294
  610. package/src/hooks/__tests__/integration.test.ts +0 -337
  611. package/src/hooks/__tests__/matchers.test.ts +0 -238
  612. package/src/hooks/__tests__/preemptBoundary.test.ts +0 -152
  613. package/src/hooks/__tests__/toolHooks.test.ts +0 -669
  614. package/src/llm/__tests__/contextOverflowRecovery.test.ts +0 -401
  615. package/src/llm/__tests__/fallbackOverflow.test.ts +0 -287
  616. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  617. package/src/llm/anthropic/inherited-content-utils.spec.ts +0 -249
  618. package/src/llm/anthropic/inherited-stream-events.spec.ts +0 -1259
  619. package/src/llm/anthropic/inherited-strict.spec.ts +0 -302
  620. package/src/llm/anthropic/llm.spec.ts +0 -3394
  621. package/src/llm/anthropic/utils/cross-provider-reasoning.test.ts +0 -383
  622. package/src/llm/anthropic/utils/cross-provider-server-tools.test.ts +0 -110
  623. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +0 -508
  624. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +0 -361
  625. package/src/llm/anthropic/utils/stripPrefillCache.test.ts +0 -111
  626. package/src/llm/anthropic/utils/tool-id-normalization.test.ts +0 -287
  627. package/src/llm/bedrock/inherited-cache.spec.ts +0 -144
  628. package/src/llm/bedrock/inherited.spec.ts +0 -724
  629. package/src/llm/bedrock/llm.spec.ts +0 -1533
  630. package/src/llm/bedrock/streamSealDispatch.test.ts +0 -331
  631. package/src/llm/bedrock/toolCache.test.ts +0 -194
  632. package/src/llm/bedrock/utils/cross-provider-reasoning.test.ts +0 -131
  633. package/src/llm/bedrock/utils/cross-provider-server-tools.test.ts +0 -122
  634. package/src/llm/bedrock/utils/message_inputs.test.ts +0 -650
  635. package/src/llm/bedrock/utils/message_outputs.test.ts +0 -85
  636. package/src/llm/bedrock/utils/toolResultCachePoint.test.ts +0 -118
  637. package/src/llm/custom-chat-models.smoke.test.ts +0 -1966
  638. package/src/llm/google/data/gettysburg10.wav +0 -0
  639. package/src/llm/google/data/hotdog.jpg +0 -0
  640. package/src/llm/google/inherited-stream-events.spec.ts +0 -350
  641. package/src/llm/google/llm.spec.ts +0 -1388
  642. package/src/llm/google/streamSmoothing.test.ts +0 -121
  643. package/src/llm/google/utils/common.test.ts +0 -196
  644. package/src/llm/invoke.alternation.test.ts +0 -87
  645. package/src/llm/invoke.handoffCue.test.ts +0 -112
  646. package/src/llm/invoke.streamLimits.test.ts +0 -142
  647. package/src/llm/invoke.test.ts +0 -1198
  648. package/src/llm/mistral/streamSmoothing.test.ts +0 -97
  649. package/src/llm/openai/cacheWriteTokens.test.ts +0 -112
  650. package/src/llm/openai/contentBlocks.test.ts +0 -381
  651. package/src/llm/openai/deepseek.test.ts +0 -747
  652. package/src/llm/openai/inherited-deepseek.spec.ts +0 -347
  653. package/src/llm/openai/inherited-xai.spec.ts +0 -416
  654. package/src/llm/openai/llm.spec.ts +0 -1774
  655. package/src/llm/openai/managedRequests.test.ts +0 -182
  656. package/src/llm/openai/sequentialToolCallSeals.test.ts +0 -199
  657. package/src/llm/openai/streamMetadata.spec.ts +0 -86
  658. package/src/llm/openai/streamMetadataDedup.spec.ts +0 -166
  659. package/src/llm/openai/utils/isReasoningModel.test.ts +0 -90
  660. package/src/llm/openai/utils/messages.test.ts +0 -488
  661. package/src/llm/openrouter/reasoning.test.ts +0 -561
  662. package/src/llm/openrouter/toolCache.test.ts +0 -134
  663. package/src/llm/preempt.test.ts +0 -323
  664. package/src/llm/stream/chunkAdapters.test.ts +0 -202
  665. package/src/llm/stream/reassembly.test.ts +0 -241
  666. package/src/llm/stream/smoother.bench.test.ts +0 -155
  667. package/src/llm/stream/smoother.test.ts +0 -519
  668. package/src/llm/streamLimits.test.ts +0 -450
  669. package/src/llm/truncation.test.ts +0 -242
  670. package/src/llm/vertexai/fixThoughtSignatures.test.ts +0 -154
  671. package/src/llm/vertexai/inherited-stream-events.spec.ts +0 -271
  672. package/src/llm/vertexai/llm.spec.ts +0 -159
  673. package/src/llm/vertexai/repairUsageMetadata.test.ts +0 -54
  674. package/src/llm/vertexai/sealStreamedToolCalls.test.ts +0 -88
  675. package/src/llm/vertexai/streamSealDispatch.test.ts +0 -148
  676. package/src/llm/vertexai/streamSmoothing.test.ts +0 -109
  677. package/src/messages/__tests__/anthropicToolCache.test.ts +0 -339
  678. package/src/messages/__tests__/observationMasking.test.ts +0 -312
  679. package/src/messages/__tests__/recency.test.ts +0 -267
  680. package/src/messages/__tests__/tools.test.ts +0 -473
  681. package/src/messages/alternation.test.ts +0 -212
  682. package/src/messages/assistantPhase.test.ts +0 -75
  683. package/src/messages/cache.tail.test.ts +0 -533
  684. package/src/messages/cache.test.ts +0 -2166
  685. package/src/messages/content.test.ts +0 -362
  686. package/src/messages/contextPruning.test.ts +0 -184
  687. package/src/messages/ensureThinkingBlock.test.ts +0 -1427
  688. package/src/messages/foldToollessToolBlocks.test.ts +0 -596
  689. package/src/messages/formatAgentMessages.reducer.test.ts +0 -162
  690. package/src/messages/formatAgentMessages.skills.test.ts +0 -513
  691. package/src/messages/formatAgentMessages.steer.test.ts +0 -598
  692. package/src/messages/formatAgentMessages.test.ts +0 -8111
  693. package/src/messages/formatAgentMessages.tools.test.ts +0 -522
  694. package/src/messages/formatMessage.test.ts +0 -693
  695. package/src/messages/handoffCue.test.ts +0 -96
  696. package/src/messages/injected.test.ts +0 -107
  697. package/src/messages/labelContentByAgent.test.ts +0 -962
  698. package/src/messages/reducer.spec.ts +0 -32
  699. package/src/messages/shiftIndexTokenCountMap.test.ts +0 -81
  700. package/src/messages/tailCacheConversion.test.ts +0 -161
  701. package/src/openai/__tests__/openai.test.ts +0 -337
  702. package/src/responses/__tests__/responses.test.ts +0 -652
  703. package/src/scripts/abort.ts +0 -157
  704. package/src/scripts/activity-labels/captured.json +0 -56
  705. package/src/scripts/activity-labels/checks.cjs +0 -205
  706. package/src/scripts/activity-labels/corpus.cjs +0 -473
  707. package/src/scripts/activity-labels/report.cjs +0 -203
  708. package/src/scripts/activity-labels/rescore.cjs +0 -102
  709. package/src/scripts/activity-labels/run.ts +0 -705
  710. package/src/scripts/activity-labels/variants.ts +0 -71
  711. package/src/scripts/ant_web_search.ts +0 -159
  712. package/src/scripts/ant_web_search_edge_case.ts +0 -163
  713. package/src/scripts/ant_web_search_error_edge_case.ts +0 -149
  714. package/src/scripts/args.ts +0 -48
  715. package/src/scripts/bedrock-cache-debug.ts +0 -250
  716. package/src/scripts/bedrock-content-aggregation-test.ts +0 -266
  717. package/src/scripts/bedrock-merge-test.ts +0 -107
  718. package/src/scripts/bedrock-parallel-tools-test.ts +0 -204
  719. package/src/scripts/bench-prompt-cache.ts +0 -479
  720. package/src/scripts/caching.ts +0 -132
  721. package/src/scripts/cli.ts +0 -172
  722. package/src/scripts/cli2.ts +0 -133
  723. package/src/scripts/cli3.ts +0 -184
  724. package/src/scripts/cli4.ts +0 -191
  725. package/src/scripts/cli5.ts +0 -191
  726. package/src/scripts/code_exec.ts +0 -214
  727. package/src/scripts/code_exec_files.ts +0 -237
  728. package/src/scripts/code_exec_multi_session.ts +0 -237
  729. package/src/scripts/code_exec_ptc.ts +0 -335
  730. package/src/scripts/code_exec_session.ts +0 -283
  731. package/src/scripts/code_exec_simple.ts +0 -148
  732. package/src/scripts/compare_pi_vs_ours.ts +0 -1259
  733. package/src/scripts/content.ts +0 -139
  734. package/src/scripts/context-overflow-probe.ts +0 -997
  735. package/src/scripts/empty_input.ts +0 -137
  736. package/src/scripts/handoff-test.ts +0 -134
  737. package/src/scripts/local_engine.ts +0 -166
  738. package/src/scripts/local_engine_checkpointer.ts +0 -205
  739. package/src/scripts/local_engine_compile.ts +0 -263
  740. package/src/scripts/local_engine_hooks.ts +0 -226
  741. package/src/scripts/local_engine_image.ts +0 -201
  742. package/src/scripts/local_engine_ptc.ts +0 -151
  743. package/src/scripts/local_engine_workspace.ts +0 -258
  744. package/src/scripts/memory.ts +0 -107
  745. package/src/scripts/multi-agent-chain.ts +0 -332
  746. package/src/scripts/multi-agent-conditional.ts +0 -222
  747. package/src/scripts/multi-agent-document-review-chain.ts +0 -198
  748. package/src/scripts/multi-agent-hybrid-flow.ts +0 -311
  749. package/src/scripts/multi-agent-parallel-start.ts +0 -265
  750. package/src/scripts/multi-agent-parallel.ts +0 -395
  751. package/src/scripts/multi-agent-sequence.ts +0 -217
  752. package/src/scripts/multi-agent-subagent.ts +0 -246
  753. package/src/scripts/multi-agent-supervisor.ts +0 -366
  754. package/src/scripts/multi-agent-test.ts +0 -187
  755. package/src/scripts/openrouter_prompt_cache_live.ts +0 -310
  756. package/src/scripts/parallel-asymmetric-tools-test.ts +0 -275
  757. package/src/scripts/parallel-full-metadata-test.ts +0 -241
  758. package/src/scripts/parallel-tools-test.ts +0 -341
  759. package/src/scripts/preempt-probe.ts +0 -330
  760. package/src/scripts/preempt-scenarios.ts +0 -388
  761. package/src/scripts/programmatic_exec.ts +0 -387
  762. package/src/scripts/programmatic_exec_agent.ts +0 -232
  763. package/src/scripts/search.ts +0 -147
  764. package/src/scripts/sequential-full-metadata-test.ts +0 -198
  765. package/src/scripts/session_live.ts +0 -548
  766. package/src/scripts/simple.ts +0 -226
  767. package/src/scripts/single-agent-metadata-test.ts +0 -196
  768. package/src/scripts/stream.ts +0 -141
  769. package/src/scripts/subagent-configurable-inheritance.ts +0 -252
  770. package/src/scripts/subagent-event-driven-debug.ts +0 -190
  771. package/src/scripts/subagent-tools-debug.ts +0 -160
  772. package/src/scripts/subagent-usage-sink.ts +0 -176
  773. package/src/scripts/summarization-recency.ts +0 -462
  774. package/src/scripts/test-custom-prompt-key.ts +0 -145
  775. package/src/scripts/test-handoff-input.ts +0 -170
  776. package/src/scripts/test-handoff-preamble.ts +0 -278
  777. package/src/scripts/test-handoff-steering.ts +0 -430
  778. package/src/scripts/test-multi-agent-list-handoff.ts +0 -418
  779. package/src/scripts/test-parallel-agent-labeling.ts +0 -327
  780. package/src/scripts/test-parallel-handoffs.ts +0 -292
  781. package/src/scripts/test-thinking-handoff-bedrock.ts +0 -154
  782. package/src/scripts/test-thinking-handoff.ts +0 -156
  783. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +0 -166
  784. package/src/scripts/test-tool-before-handoff-role-order.ts +0 -276
  785. package/src/scripts/test-tools-before-handoff.ts +0 -222
  786. package/src/scripts/test_code_api.ts +0 -354
  787. package/src/scripts/thinking-bedrock.ts +0 -160
  788. package/src/scripts/thinking-vertexai.ts +0 -168
  789. package/src/scripts/thinking.ts +0 -172
  790. package/src/scripts/tool_search.ts +0 -153
  791. package/src/scripts/tools.ts +0 -163
  792. package/src/session/__tests__/JsonlSessionStore.test.ts +0 -1463
  793. package/src/session/__tests__/handlers.test.ts +0 -161
  794. package/src/specs/activity-label-observability.live.test.ts +0 -262
  795. package/src/specs/activity-label-observability.test.ts +0 -167
  796. package/src/specs/activity-label-prompt.test.ts +0 -359
  797. package/src/specs/activity-label-trace-seed.test.ts +0 -47
  798. package/src/specs/activity-phase-label.test.ts +0 -306
  799. package/src/specs/agent-handoffs.live.test.ts +0 -140
  800. package/src/specs/agent-handoffs.test.ts +0 -2465
  801. package/src/specs/anthropic.simple.test.ts +0 -453
  802. package/src/specs/ask-user-question-batch.test.ts +0 -289
  803. package/src/specs/ask-user-questions.live.test.ts +0 -185
  804. package/src/specs/ask-user-questions.test.ts +0 -293
  805. package/src/specs/azure.simple.test.ts +0 -502
  806. package/src/specs/bedrock-toolless.live.test.ts +0 -123
  807. package/src/specs/bedrock-truncation.live.test.ts +0 -191
  808. package/src/specs/cache.simple.test.ts +0 -416
  809. package/src/specs/context-accuracy.live.test.ts +0 -409
  810. package/src/specs/context-overflow-recovery.live.test.ts +0 -213
  811. package/src/specs/context-usage-event.test.ts +0 -117
  812. package/src/specs/context-usage.live.test.ts +0 -297
  813. package/src/specs/custom-event-await.test.ts +0 -304
  814. package/src/specs/deepseek.simple.test.ts +0 -290
  815. package/src/specs/deterministic-trace-id.test.ts +0 -43
  816. package/src/specs/discovered-tools.test.ts +0 -217
  817. package/src/specs/durability-checkpoint.integration.test.ts +0 -243
  818. package/src/specs/graph-subagent.live.test.ts +0 -242
  819. package/src/specs/graph-subagent.test.ts +0 -322
  820. package/src/specs/handoffCue.test.ts +0 -165
  821. package/src/specs/langfuse-callbacks.test.ts +0 -1578
  822. package/src/specs/langfuse-config.test.ts +0 -247
  823. package/src/specs/langfuse-instrumentation.test.ts +0 -393
  824. package/src/specs/langfuse-metadata.test.ts +0 -245
  825. package/src/specs/langfuse-routing.integration.test.ts +0 -844
  826. package/src/specs/langfuse-runtime-context.test.ts +0 -92
  827. package/src/specs/langfuse-span-registry.test.ts +0 -87
  828. package/src/specs/langfuse-tool-output-tracing.test.ts +0 -1858
  829. package/src/specs/langfuse-trace-shaping.test.ts +0 -591
  830. package/src/specs/moonshot.simple.test.ts +0 -367
  831. package/src/specs/multi-agent-summarization.test.ts +0 -396
  832. package/src/specs/openai.simple.test.ts +0 -315
  833. package/src/specs/openrouter.simple.test.ts +0 -275
  834. package/src/specs/preemptSeal.test.ts +0 -678
  835. package/src/specs/prune.test.ts +0 -3741
  836. package/src/specs/reasoning.test.ts +0 -201
  837. package/src/specs/run-step-timestamps.test.ts +0 -414
  838. package/src/specs/spec.utils.ts +0 -15
  839. package/src/specs/subagent.test.ts +0 -864
  840. package/src/specs/summarization-unit.test.ts +0 -973
  841. package/src/specs/summarization.test.ts +0 -3823
  842. package/src/specs/summarize-prune.test.ts +0 -376
  843. package/src/specs/thinking-handoff.test.ts +0 -621
  844. package/src/specs/thinking-prune.test.ts +0 -827
  845. package/src/specs/token-accounting-e2e.test.ts +0 -1034
  846. package/src/specs/token-accounting-pipeline.test.ts +0 -1008
  847. package/src/specs/token-distribution-edge-case.test.ts +0 -315
  848. package/src/specs/token-memoization.test.ts +0 -40
  849. package/src/specs/tokens.test.ts +0 -1000
  850. package/src/specs/tool-error-resume.test.ts +0 -194
  851. package/src/specs/tool-error.test.ts +0 -198
  852. package/src/specs/vllm-reasoning-toolcalls.test.ts +0 -340
  853. package/src/stream.dispatch.test.ts +0 -63
  854. package/src/stream.test.ts +0 -144
  855. package/src/summarization/__tests__/aggregator.test.ts +0 -236
  856. package/src/summarization/__tests__/node.test.ts +0 -1996
  857. package/src/summarization/__tests__/trigger.test.ts +0 -149
  858. package/src/summarization/chunkHandler.test.ts +0 -196
  859. package/src/test/mockTools.ts +0 -386
  860. package/src/tools/Calculator.test.ts +0 -278
  861. package/src/tools/__tests__/BashExecutor.test.ts +0 -108
  862. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +0 -939
  863. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +0 -858
  864. package/src/tools/__tests__/CodeExecutor.stateful.test.ts +0 -124
  865. package/src/tools/__tests__/LocalExecutionRoots.test.ts +0 -8
  866. package/src/tools/__tests__/LocalExecutionTools.test.ts +0 -2733
  867. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.ts +0 -318
  868. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +0 -1557
  869. package/src/tools/__tests__/ReadFile.test.ts +0 -44
  870. package/src/tools/__tests__/SkillTool.test.ts +0 -442
  871. package/src/tools/__tests__/SubagentExecutor.test.ts +0 -3728
  872. package/src/tools/__tests__/SubagentReplay.test.ts +0 -329
  873. package/src/tools/__tests__/SubagentTool.test.ts +0 -149
  874. package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +0 -595
  875. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +0 -1191
  876. package/src/tools/__tests__/ToolNode.invalidToolCalls.test.ts +0 -757
  877. package/src/tools/__tests__/ToolNode.langfuse.test.ts +0 -57
  878. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +0 -736
  879. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +0 -1710
  880. package/src/tools/__tests__/ToolNode.runtimeState.test.ts +0 -120
  881. package/src/tools/__tests__/ToolNode.session.test.ts +0 -1352
  882. package/src/tools/__tests__/ToolNode.streamLimits.test.ts +0 -69
  883. package/src/tools/__tests__/ToolSearch.integration.test.ts +0 -161
  884. package/src/tools/__tests__/ToolSearch.test.ts +0 -1227
  885. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +0 -561
  886. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +0 -980
  887. package/src/tools/__tests__/directToolHooks.test.ts +0 -700
  888. package/src/tools/__tests__/eagerEventExecution.session.test.ts +0 -92
  889. package/src/tools/__tests__/handlers.test.ts +0 -997
  890. package/src/tools/__tests__/hitl.test.ts +0 -4663
  891. package/src/tools/__tests__/intentArg.test.ts +0 -357
  892. package/src/tools/__tests__/intentCoverage.test.ts +0 -139
  893. package/src/tools/__tests__/localToolNames.test.ts +0 -75
  894. package/src/tools/__tests__/skillCatalog.test.ts +0 -161
  895. package/src/tools/__tests__/subagentHooks.test.ts +0 -1651
  896. package/src/tools/__tests__/toolOutputReferences.test.ts +0 -515
  897. package/src/tools/__tests__/workspaceSeam.test.ts +0 -147
  898. package/src/tools/local/__tests__/FileCheckpointer.test.ts +0 -162
  899. package/src/tools/local/__tests__/editStrategies.test.ts +0 -134
  900. package/src/tools/search/content.test.ts +0 -173
  901. package/src/tools/search/crw.test.ts +0 -836
  902. package/src/tools/search/format.test.ts +0 -242
  903. package/src/tools/search/http-agent.test.ts +0 -133
  904. package/src/tools/search/jina-reranker.test.ts +0 -306
  905. package/src/tools/search/keenable-scraper.test.ts +0 -153
  906. package/src/tools/search/keenable.test.ts +0 -183
  907. package/src/tools/search/outcome.test.ts +0 -90
  908. package/src/tools/search/output.md +0 -2775
  909. package/src/tools/search/rag-api-reranker.test.ts +0 -891
  910. package/src/tools/search/source-processing.test.ts +0 -516
  911. package/src/tools/search/tavily.test.ts +0 -965
  912. package/src/tools/search/test.html +0 -884
  913. package/src/tools/search/test.md +0 -643
  914. package/src/tools/subagent/__tests__/SubagentExecutionRegistry.test.ts +0 -637
  915. package/src/tools/subagent/__tests__/SubagentExecutor.lazy.test.ts +0 -3054
  916. package/src/tools/subagent/__tests__/childGraphConfig.test.ts +0 -521
  917. package/src/utils/__tests__/apportion.test.ts +0 -32
  918. package/src/utils/__tests__/errors.test.ts +0 -270
  919. package/src/utils/__tests__/fixtures/contextOverflowSignatures.ts +0 -336
  920. package/src/utils/__tests__/redactSecrets.test.ts +0 -56
  921. package/src/utils/__tests__/truncation.test.ts +0 -66
  922. package/src/utils/llm.test.ts +0 -18
  923. package/src/utils/proxy.test.ts +0 -176
  924. package/src/utils/toolContent.test.ts +0 -1432
@@ -1 +1 @@
1
- {"version":3,"file":"MultiAgentGraph.cjs","names":["HumanMessage","StandardGraph","ToolMessage","Command","aiMsg","AIMessage","serializeToolContentBounded","HARD_MAX_TOOL_RESULT_CHARS","StateGraph","Annotation","END","START","PromptTemplate"],"sources":["../../../src/graphs/MultiAgentGraph.ts"],"sourcesContent":["import { tool } from '@langchain/core/tools';\nimport { PromptTemplate } from '@langchain/core/prompts';\nimport {\n AIMessage,\n ToolMessage,\n HumanMessage,\n getBufferString,\n} from '@langchain/core/messages';\nimport {\n END,\n START,\n Command,\n StateGraph,\n Annotation,\n messagesStateReducer,\n} from '@langchain/langgraph';\nimport type { BaseMessage, AIMessageChunk } from '@langchain/core/messages';\nimport type { LangGraphRunnableConfig } from '@langchain/langgraph';\nimport type { ToolRuntime } from '@langchain/core/tools';\nimport type { GraphFactoryDependencies } from '@/graphs/graphFactory';\nimport type * as t from '@/types';\nimport { serializeToolContentBounded } from '@/utils/toolContent';\nimport { HARD_MAX_TOOL_RESULT_CHARS } from '@/utils/truncation';\nimport { StandardGraph } from './Graph';\nimport { Constants } from '@/common';\n\n/** Pattern to extract instructions from transfer ToolMessage content */\nconst HANDOFF_INSTRUCTIONS_PATTERN = /(?:Instructions?|Context):\\s*(.+)/is;\nconst HANDOFF_INSTRUCTIONS_KEY = 'handoff_instructions';\n\n/**\n * Handoff and fan-in prompts that route work between agents. Built in-run and\n * never persisted as standalone payload entries, so they are marked synthetic:\n * `messagesStateReducer` would otherwise give them a plain UUID and downstream\n * consumers — compaction coverage anchors — could not tell them apart from a\n * message replayed out of the payload.\n */\nfunction buildRoutingPrompt(content: string): HumanMessage {\n return new HumanMessage({\n content,\n additional_kwargs: { role: 'user', isMeta: true, source: 'routing' },\n });\n}\n\nfunction getHandoffInstructions(\n input: Record<string, unknown>,\n promptKey: string,\n hasHandoffInput: boolean\n): string | null {\n if (\n !hasHandoffInput ||\n !Object.prototype.hasOwnProperty.call(input, promptKey)\n ) {\n return null;\n }\n const value = input[promptKey];\n return typeof value === 'string' ? value : null;\n}\n\nfunction formatHandoffPromptLabel(promptKey: string): string {\n return promptKey.charAt(0).toUpperCase() + promptKey.slice(1);\n}\n\nfunction extractLegacyHandoffInstructions(\n content: string,\n promptLabels: Set<string> | undefined\n): string | null {\n let markerIndex = -1;\n let markerLength = 0;\n for (const label of promptLabels ?? []) {\n const marker = `\\n\\n${label}:`;\n const index = content.indexOf(marker);\n if (index >= 0 && (markerIndex < 0 || index < markerIndex)) {\n markerIndex = index;\n markerLength = marker.length;\n }\n }\n if (markerIndex >= 0) {\n return content.slice(markerIndex + markerLength).trim();\n }\n return content.match(HANDOFF_INSTRUCTIONS_PATTERN)?.[1]?.trim() ?? null;\n}\n\n/** Whether a tool name marks a handoff transfer (static or conditional). */\nfunction isTransferToolName(name: unknown): boolean {\n return (\n typeof name === 'string' &&\n (name.startsWith(Constants.LC_TRANSFER_TO_) ||\n name === 'conditional_transfer')\n );\n}\n\n/**\n * Drop transfer `tool_use` content blocks from an AI message's array content.\n * Companion to the reception's tool-call filtering: array-content providers\n * (Anthropic) serialize retained blocks verbatim, so a transfer block whose\n * call/result the reception stripped — or a parallel sibling's transfer block,\n * whose result never reaches this recipient's state — would replay as an\n * unmatched `tool_use`. Matched by the gathered ids AND by transfer name\n * (sibling blocks have no collectable id here). String content passes through.\n */\nfunction filterTransferToolUseBlocks(\n content: AIMessage['content'],\n transferToolCallIds: ReadonlySet<string>\n): AIMessage['content'] {\n if (!Array.isArray(content)) {\n return content;\n }\n return content.filter((block) => {\n if (\n typeof block !== 'object' ||\n (block as { type?: string } | null)?.type !== 'tool_use'\n ) {\n return true;\n }\n const toolUse = block as { id?: string; name?: string };\n if (toolUse.id != null && transferToolCallIds.has(toolUse.id)) {\n return false;\n }\n return !isTransferToolName(toolUse.name);\n });\n}\n\nfunction isValidHandoffGroupId(value: unknown): value is number {\n return typeof value === 'number' && Number.isSafeInteger(value) && value > 0;\n}\n\nfunction getLastNewAiMessage(\n messages: BaseMessage[],\n previousMessages: BaseMessage[]\n): BaseMessage | undefined {\n const previousMessageObjects = new Set(previousMessages);\n const previousMessageIds = new Set<string>();\n for (const message of previousMessages) {\n if (message.id != null) {\n previousMessageIds.add(message.id);\n }\n }\n for (let index = messages.length - 1; index >= 0; index--) {\n const message = messages[index];\n if (\n message.getType() === 'ai' &&\n !previousMessageObjects.has(message) &&\n (message.id == null || !previousMessageIds.has(message.id))\n ) {\n return message;\n }\n }\n return undefined;\n}\n\nfunction withHandoffGroupMetadata(\n config: LangGraphRunnableConfig | undefined,\n groupId: number | undefined\n): LangGraphRunnableConfig {\n return {\n ...config,\n metadata: {\n ...config?.metadata,\n [Constants.HANDOFF_GROUP_ID]: groupId ?? null,\n },\n };\n}\n\n/**\n * MultiAgentGraph extends StandardGraph to support dynamic multi-agent workflows\n * with handoffs, fan-in/fan-out, and other composable patterns.\n *\n * Key behavior:\n * - Agents with ONLY handoff edges: Can dynamically route to any handoff destination\n * - Agents with ONLY direct edges: Always follow their direct edges\n * - Agents with BOTH: Use Command for exclusive routing (handoff OR direct, not both)\n * - If handoff occurs: Only the handoff destination executes\n * - If no handoff: Direct edges execute (potentially in parallel)\n *\n * This enables the common pattern where an agent either delegates (handoff)\n * OR continues its workflow (direct edges), but not both simultaneously.\n */\nexport class MultiAgentGraph extends StandardGraph {\n private edges: t.GraphEdge[];\n private startingNodes: Set<string> = new Set();\n private directEdges: t.GraphEdge[] = [];\n private handoffEdges: t.GraphEdge[] = [];\n private handoffSourceIds = new Set<string>();\n private readonly resultAgentId?: string;\n private readonly memberRecursionLimit?: number;\n private handoffPromptLabels: Map<string, Set<string>> = new Map();\n /**\n * Map of agentId to parallel group info.\n * Contains groupId (incrementing number reflecting execution order) for agents in parallel groups.\n * Sequential agents (not in any parallel group) have undefined entry.\n *\n * Example for: researcher -> [analyst1, analyst2, analyst3] -> summarizer\n * - researcher: undefined (sequential, order 0)\n * - analyst1, analyst2, analyst3: { groupId: 1 } (parallel group, order 1)\n * - summarizer: undefined (sequential, order 2)\n */\n private agentParallelGroups: Map<string, number> = new Map();\n\n constructor(\n input: t.MultiAgentGraphInput,\n dependencies?: GraphFactoryDependencies\n ) {\n super(input, dependencies);\n this.edges = input.edges;\n this.resultAgentId = input.resultAgentId;\n this.memberRecursionLimit = input.memberRecursionLimit;\n if (\n this.memberRecursionLimit != null &&\n (!Number.isSafeInteger(this.memberRecursionLimit) ||\n this.memberRecursionLimit <= 0)\n ) {\n throw new Error(\n 'MultiAgentGraph: memberRecursionLimit must be a positive safe integer.'\n );\n }\n if (\n this.resultAgentId != null &&\n !this.agentContexts.has(this.resultAgentId)\n ) {\n throw new Error(\n `MultiAgentGraph: resultAgentId \"${this.resultAgentId}\" is not present in agents.`\n );\n }\n this.validateEdgeAgents();\n this.categorizeEdges();\n this.validateCommandRoutedDirectEdges();\n this.analyzeGraph();\n this.createHandoffTools();\n }\n\n /**\n * Fails fast when an edge references an agent that is not in\n * `agentContexts`. Without this check, the underlying LangGraph\n * `StateGraph.compile()` would throw the opaque\n * `Found edge ending at unknown node \"<id>\"` error after graph\n * construction — far from the true root cause.\n *\n * This catches the common misuse of passing `edges` into a multi-agent\n * config without also passing the corresponding sub-agent configs in\n * `agents` (e.g. a host that forgot to pre-load handoff targets).\n */\n private validateEdgeAgents(): void {\n const known = new Set(this.agentContexts.keys());\n const unknown = new Set<string>();\n for (const edge of this.edges) {\n const participants = [\n ...(Array.isArray(edge.from) ? edge.from : [edge.from]),\n ...(Array.isArray(edge.to) ? edge.to : [edge.to]),\n ];\n for (const id of participants) {\n if (typeof id === 'string' && !known.has(id)) {\n unknown.add(id);\n }\n }\n }\n if (unknown.size === 0) {\n return;\n }\n const missing = Array.from(unknown)\n .map((id) => `\"${id}\"`)\n .join(', ');\n throw new Error(\n `MultiAgentGraph: edges reference agent(s) not present in agents: [${missing}]. ` +\n 'Ensure every agent referenced by an edge is also included in the `agents` array, ' +\n 'or filter orphaned edges before constructing the graph.'\n );\n }\n\n /**\n * Categorize edges into handoff and direct types\n */\n private categorizeEdges(): void {\n for (const edge of this.edges) {\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n const destinations = Array.isArray(edge.to) ? edge.to : [edge.to];\n const isDefaultDirect =\n edge.edgeType == null &&\n edge.condition == null &&\n sources.length === 1 &&\n destinations.length > 1;\n if (edge.edgeType === 'direct' || isDefaultDirect) {\n this.directEdges.push(edge);\n continue;\n }\n this.handoffEdges.push(edge);\n for (const source of sources) {\n this.handoffSourceIds.add(source);\n }\n }\n }\n\n /** Static waiting/prompt edges cannot also be driven by Command routing. */\n private validateCommandRoutedDirectEdges(): void {\n const destinationGroups = new Map<\n string,\n { hasPrompt: boolean; commandSource?: string }\n >();\n for (const edge of this.directEdges) {\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n const commandSource = sources.find((source) =>\n this.handoffSourceIds.has(source)\n );\n if (commandSource != null && sources.length > 1) {\n throw new Error(\n 'MultiAgentGraph: grouped direct edge cannot include command-routed ' +\n `source \"${commandSource}\". Split handoff routing from all-of fan-in.`\n );\n }\n const destinations = Array.isArray(edge.to) ? edge.to : [edge.to];\n const hasPrompt = edge.prompt != null && edge.prompt !== '';\n for (const destination of destinations) {\n const group = destinationGroups.get(destination) ?? {\n hasPrompt: false,\n };\n group.hasPrompt ||= hasPrompt;\n group.commandSource ??= commandSource;\n destinationGroups.set(destination, group);\n }\n }\n for (const { hasPrompt, commandSource } of destinationGroups.values()) {\n if (!hasPrompt || commandSource == null) {\n continue;\n }\n throw new Error(\n 'MultiAgentGraph: prompted direct edge cannot include command-routed ' +\n `source \"${commandSource}\". Move the prompt into the routed node.`\n );\n }\n }\n\n /**\n * Analyze graph structure to determine starting nodes and connections\n */\n private analyzeGraph(): void {\n const hasIncomingEdge = new Set<string>();\n\n // Track all nodes that have incoming edges\n for (const edge of this.edges) {\n const destinations = Array.isArray(edge.to) ? edge.to : [edge.to];\n destinations.forEach((dest) => hasIncomingEdge.add(dest));\n }\n\n // Starting nodes are those without incoming edges\n for (const agentId of this.agentContexts.keys()) {\n if (!hasIncomingEdge.has(agentId)) {\n this.startingNodes.add(agentId);\n }\n }\n\n // If no starting nodes found, use the first agent\n if (this.startingNodes.size === 0 && this.agentContexts.size > 0) {\n this.startingNodes.add(this.agentContexts.keys().next().value!);\n }\n\n // Determine if graph has parallel execution capability\n this.computeParallelCapability();\n }\n\n /**\n * Compute parallel groups by traversing the graph in execution order.\n * Assigns incrementing group IDs that reflect the sequential order of execution.\n *\n * For: researcher -> [analyst1, analyst2, analyst3] -> summarizer\n * - researcher: no group (first sequential node)\n * - analyst1, analyst2, analyst3: groupId 1 (first parallel group)\n * - summarizer: no group (next sequential node)\n *\n * This allows frontend to render in order:\n * Row 0: researcher\n * Row 1: [analyst1, analyst2, analyst3] (grouped)\n * Row 2: summarizer\n */\n private computeParallelCapability(): void {\n let groupCounter = 1; // Start at 1, 0 reserved for \"no group\"\n\n // Check 1: Multiple starting nodes means parallel from the start (group 1)\n if (this.startingNodes.size > 1) {\n for (const agentId of this.startingNodes) {\n this.agentParallelGroups.set(agentId, groupCounter);\n }\n groupCounter++;\n }\n\n // Check 2: Traverse direct edges in order to find fan-out patterns\n // Build a simple execution order by following edges from starting nodes\n const visited = new Set<string>();\n const queue: string[] = [...this.startingNodes];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (visited.has(current)) continue;\n visited.add(current);\n\n // Find direct edges from this node\n for (const edge of this.directEdges) {\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n if (!sources.includes(current)) continue;\n\n const destinations = Array.isArray(edge.to) ? edge.to : [edge.to];\n\n // Fan-out: multiple destinations = parallel group\n if (destinations.length > 1) {\n for (const dest of destinations) {\n // Only set if not already in a group (first group wins)\n if (!this.agentParallelGroups.has(dest)) {\n this.agentParallelGroups.set(dest, groupCounter);\n }\n if (!visited.has(dest)) {\n queue.push(dest);\n }\n }\n groupCounter++;\n } else {\n // Single destination - add to queue for traversal\n for (const dest of destinations) {\n if (!visited.has(dest)) {\n queue.push(dest);\n }\n }\n }\n }\n\n // Also follow handoff edges for traversal (but they don't create parallel groups)\n for (const edge of this.handoffEdges) {\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n if (!sources.includes(current)) continue;\n\n const destinations = Array.isArray(edge.to) ? edge.to : [edge.to];\n for (const dest of destinations) {\n if (!visited.has(dest)) {\n queue.push(dest);\n }\n }\n }\n }\n }\n\n /**\n * Get the parallel group ID for an agent, if any.\n * Returns undefined if the agent is not part of a parallel group.\n * Group IDs are incrementing numbers reflecting execution order.\n */\n getParallelGroupId(agentId: string): number | undefined {\n return this.agentParallelGroups.get(agentId);\n }\n\n /**\n * Override to indicate this is a multi-agent graph.\n * Enables agentId to be included in RunStep for frontend agent labeling.\n */\n protected override isMultiAgentGraph(): boolean {\n return true;\n }\n\n /**\n * Override base class method to provide parallel group IDs for run steps.\n */\n protected override getParallelGroupIdForAgent(\n agentId: string\n ): number | undefined {\n return this.agentParallelGroups.get(agentId);\n }\n\n /**\n * Create handoff tools for agents based on handoff edges only\n */\n private createHandoffTools(): void {\n // Group handoff edges by source agent(s)\n const handoffsByAgent = new Map<string, t.GraphEdge[]>();\n\n // Only process handoff edges for tool creation\n for (const edge of this.handoffEdges) {\n if (typeof edge.prompt === 'string') {\n const label = formatHandoffPromptLabel(\n edge.promptKey ?? 'instructions'\n );\n const destinations = Array.isArray(edge.to) ? edge.to : [edge.to];\n for (const destination of destinations) {\n const labels =\n this.handoffPromptLabels.get(destination) ?? new Set<string>();\n labels.add(label);\n this.handoffPromptLabels.set(destination, labels);\n }\n }\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n sources.forEach((source) => {\n if (!handoffsByAgent.has(source)) {\n handoffsByAgent.set(source, []);\n }\n handoffsByAgent.get(source)!.push(edge);\n });\n }\n\n // Create handoff tools for each agent\n for (const [agentId, edges] of handoffsByAgent) {\n const agentContext = this.agentContexts.get(agentId);\n if (!agentContext) continue;\n\n // Create handoff tools for this agent's outgoing edges\n const handoffTools: t.GenericTool[] = [];\n const sourceAgentName = agentContext.name ?? agentId;\n for (const edge of edges) {\n handoffTools.push(\n ...this.createHandoffToolsForEdge(edge, agentId, sourceAgentName)\n );\n }\n\n if (!agentContext.graphTools) {\n agentContext.graphTools = [];\n }\n agentContext.graphTools.push(...handoffTools);\n }\n }\n\n /**\n * Create handoff tools for an edge (handles multiple destinations)\n * @param edge - The graph edge defining the handoff\n * @param sourceAgentId - The ID of the agent that will perform the handoff\n * @param sourceAgentName - The human-readable name of the source agent\n */\n private createHandoffToolsForEdge(\n edge: t.GraphEdge,\n sourceAgentId: string,\n sourceAgentName: string\n ): t.GenericTool[] {\n const tools: t.GenericTool[] = [];\n const destinations = Array.isArray(edge.to) ? edge.to : [edge.to];\n\n /** If there's a condition, create a single conditional handoff tool */\n if (edge.condition != null) {\n const toolName = 'conditional_transfer';\n const toolDescription =\n edge.description ?? 'Conditionally transfer control based on state';\n\n /** Check if we have a prompt for handoff input */\n const hasHandoffInput =\n edge.prompt != null && typeof edge.prompt === 'string';\n const handoffInputDescription = hasHandoffInput ? edge.prompt : undefined;\n const promptKey = edge.promptKey ?? 'instructions';\n\n tools.push(\n tool(\n async (rawInput, runtime: ToolRuntime) => {\n const input = rawInput as Record<string, unknown>;\n const state = runtime.state as t.BaseGraphState;\n const toolCallId = runtime.toolCall?.id ?? 'unknown';\n\n /** Evaluated condition */\n const result = edge.condition!(state);\n let destination: string;\n\n if (typeof result === 'boolean') {\n /** If true, use first destination; if false, don't transfer */\n if (!result) return null;\n destination = destinations[0];\n } else if (typeof result === 'string') {\n destination = result;\n } else {\n /** Array of destinations - for now, use the first */\n destination = Array.isArray(result) ? result[0] : destinations[0];\n }\n\n const handoffInstructions = getHandoffInstructions(\n input,\n promptKey,\n hasHandoffInput\n );\n let content = `Conditionally transferred to ${destination}`;\n if (handoffInstructions !== null) {\n content += `\\n\\n${formatHandoffPromptLabel(promptKey)}: ${handoffInstructions}`;\n }\n\n const toolMessage = new ToolMessage({\n content,\n name: toolName,\n tool_call_id: toolCallId,\n additional_kwargs: {\n /** Store destination for programmatic access in handoff detection */\n handoff_destination: destination,\n /** Store source agent name for receiving agent to know who handed off */\n handoff_source_name: sourceAgentName,\n ...(handoffInstructions !== null && {\n [HANDOFF_INSTRUCTIONS_KEY]: handoffInstructions,\n }),\n },\n });\n\n return new Command({\n goto: destination,\n update: { messages: state.messages.concat(toolMessage) },\n graph: Command.PARENT,\n });\n },\n {\n name: toolName,\n schema: hasHandoffInput\n ? {\n type: 'object',\n properties: {\n [promptKey]: {\n type: 'string',\n description: handoffInputDescription as string,\n },\n },\n required: [],\n }\n : { type: 'object', properties: {}, required: [] },\n description: toolDescription,\n }\n )\n );\n } else {\n /** Create individual tools for each destination */\n for (const destination of destinations) {\n const toolName = `${Constants.LC_TRANSFER_TO_}${destination}`;\n const toolDescription =\n edge.description ?? `Transfer control to agent '${destination}'`;\n\n /** Check if we have a prompt for handoff input */\n const hasHandoffInput =\n edge.prompt != null && typeof edge.prompt === 'string';\n const handoffInputDescription = hasHandoffInput\n ? edge.prompt\n : undefined;\n const promptKey = edge.promptKey ?? 'instructions';\n\n tools.push(\n tool(\n async (rawInput, runtime: ToolRuntime) => {\n const input = rawInput as Record<string, unknown>;\n const toolCallId = runtime.toolCall?.id ?? 'unknown';\n\n const handoffInstructions = getHandoffInstructions(\n input,\n promptKey,\n hasHandoffInput\n );\n let content = `Successfully transferred to ${destination}`;\n if (handoffInstructions !== null) {\n content += `\\n\\n${formatHandoffPromptLabel(promptKey)}: ${handoffInstructions}`;\n }\n\n const toolMessage = new ToolMessage({\n content,\n name: toolName,\n tool_call_id: toolCallId,\n additional_kwargs: {\n /** Store source agent name for receiving agent to know who handed off */\n handoff_source_name: sourceAgentName,\n ...(handoffInstructions !== null && {\n [HANDOFF_INSTRUCTIONS_KEY]: handoffInstructions,\n }),\n },\n });\n\n const state = runtime.state as t.BaseGraphState;\n\n /**\n * For parallel handoff support:\n * Build messages that include ONLY this tool call's context.\n * This prevents errors when LLM calls multiple transfers simultaneously -\n * each destination gets a valid AIMessage with matching tool_call and tool_result.\n *\n * Strategy:\n * 1. Find the AIMessage containing this tool call\n * 2. Create a filtered AIMessage with ONLY this tool_call\n * 3. Include all messages before the AIMessage plus the filtered pair\n */\n const messages = state.messages;\n let filteredMessages: BaseMessage[];\n let aiMessageIndex = -1;\n\n /** Find the AIMessage containing this tool call */\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.getType() === 'ai') {\n const aiMsg = msg as AIMessage;\n const hasThisCall = aiMsg.tool_calls?.some(\n (tc) => tc.id === toolCallId\n );\n if (hasThisCall === true) {\n aiMessageIndex = i;\n break;\n }\n }\n }\n\n if (aiMessageIndex >= 0) {\n const originalAiMsg = messages[aiMessageIndex] as AIMessage;\n const thisToolCall = originalAiMsg.tool_calls?.find(\n (tc) => tc.id === toolCallId\n );\n\n if (\n thisToolCall != null &&\n (originalAiMsg.tool_calls?.length ?? 0) > 1\n ) {\n /**\n * Multiple tool calls - create filtered AIMessage with ONLY this call.\n * This ensures valid message structure for parallel handoffs.\n */\n const filteredAiMsg = new AIMessage({\n content: originalAiMsg.content,\n tool_calls: [thisToolCall],\n id: originalAiMsg.id,\n });\n\n filteredMessages = [\n ...messages.slice(0, aiMessageIndex),\n filteredAiMsg,\n toolMessage,\n ];\n } else {\n /** Single tool call - use messages as-is */\n filteredMessages = messages.concat(toolMessage);\n }\n } else {\n /** Fallback - append tool message */\n filteredMessages = messages.concat(toolMessage);\n }\n\n return new Command({\n goto: destination,\n update: { messages: filteredMessages },\n graph: Command.PARENT,\n });\n },\n {\n name: toolName,\n schema: hasHandoffInput\n ? {\n type: 'object',\n properties: {\n [promptKey]: {\n type: 'string',\n description: handoffInputDescription as string,\n },\n },\n required: [],\n }\n : { type: 'object', properties: {}, required: [] },\n description: toolDescription,\n }\n )\n );\n }\n }\n\n return tools;\n }\n\n /**\n * Create a complete agent subgraph (similar to createReactAgent)\n */\n private createAgentSubgraph(agentId: string): t.CompiledAgentWorfklow {\n /** This is essentially the same as `createAgentNode` from `StandardGraph` */\n return this.createAgentNode(agentId);\n }\n\n /**\n * Detects if the current agent is receiving a handoff and processes the messages accordingly.\n * Returns filtered messages with the transfer tool call/message removed, plus any instructions,\n * source agent, and parallel sibling information extracted from the transfer.\n *\n * Supports both single handoffs (last message is the transfer) and parallel handoffs\n * (multiple transfer ToolMessages, need to find the one targeting this agent).\n *\n * @param messages - Current state messages\n * @param agentId - The agent ID to check for handoff reception\n * @returns Object with filtered messages, extracted instructions, source agent, and parallel siblings\n */\n private processHandoffReception(\n messages: BaseMessage[],\n agentId: string\n ): {\n filteredMessages: BaseMessage[];\n instructions: string | null;\n sourceAgentName: string | null;\n parallelSiblings: string[];\n parallelGroupId?: number;\n } | null {\n if (messages.length === 0) return null;\n\n /**\n * A handoff is active only while resolving the most recent assistant\n * tool-call round. Older transfer results remain in conversation history,\n * but must not be reused when this agent is reached later through a direct\n * edge or cycle.\n */\n const activeTransferToolCallIds = new Set<string>();\n let activeToolMessageStartIndex = messages.length;\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.getType() === 'tool') continue;\n\n if (msg.getType() === 'ai') {\n const aiMsg = msg as AIMessage | AIMessageChunk;\n for (const toolCall of aiMsg.tool_calls ?? []) {\n if (\n toolCall.id != null &&\n (toolCall.name.startsWith(Constants.LC_TRANSFER_TO_) ||\n toolCall.name === 'conditional_transfer')\n ) {\n activeTransferToolCallIds.add(toolCall.id);\n }\n }\n activeToolMessageStartIndex = i + 1;\n }\n break;\n }\n\n if (activeTransferToolCallIds.size === 0) return null;\n\n /**\n * Search for a transfer ToolMessage targeting this agent.\n * For parallel handoffs, multiple transfer messages may exist - find ours.\n * Search backwards from the end to find the most recent transfer to this agent.\n */\n let toolMessage: ToolMessage | null = null;\n let toolMessageIndex = -1;\n\n for (let i = messages.length - 1; i >= activeToolMessageStartIndex; i--) {\n const msg = messages[i];\n if (msg.getType() !== 'tool') continue;\n\n const candidateMsg = msg as ToolMessage;\n const toolName = candidateMsg.name;\n\n if (\n typeof toolName !== 'string' ||\n !activeTransferToolCallIds.has(candidateMsg.tool_call_id)\n ) {\n continue;\n }\n\n /** Check for standard transfer pattern */\n const isTransferMessage = toolName.startsWith(Constants.LC_TRANSFER_TO_);\n const isConditionalTransfer = toolName === 'conditional_transfer';\n\n if (!isTransferMessage && !isConditionalTransfer) continue;\n\n /** Extract destination from tool name or additional_kwargs */\n let destinationAgent: string | null = null;\n\n if (isTransferMessage) {\n destinationAgent = toolName.replace(Constants.LC_TRANSFER_TO_, '');\n } else if (isConditionalTransfer) {\n const handoffDest = candidateMsg.additional_kwargs.handoff_destination;\n destinationAgent = typeof handoffDest === 'string' ? handoffDest : null;\n }\n\n /** Check if this transfer targets our agent */\n if (destinationAgent === agentId) {\n toolMessage = candidateMsg;\n toolMessageIndex = i;\n break;\n }\n }\n\n /** No transfer targeting this agent found */\n if (toolMessage === null || toolMessageIndex < 0) return null;\n\n /** Extract instructions from the ToolMessage content */\n const contentStr =\n typeof toolMessage.content === 'string'\n ? toolMessage.content\n : serializeToolContentBounded(\n toolMessage.content,\n HARD_MAX_TOOL_RESULT_CHARS\n );\n\n const structuredInstructions =\n toolMessage.additional_kwargs[HANDOFF_INSTRUCTIONS_KEY];\n const instructions =\n typeof structuredInstructions === 'string'\n ? structuredInstructions.trim()\n : extractLegacyHandoffInstructions(\n contentStr,\n this.handoffPromptLabels.get(agentId)\n );\n\n /** Extract source agent name from additional_kwargs */\n const handoffSourceName = toolMessage.additional_kwargs.handoff_source_name;\n const sourceAgentName =\n typeof handoffSourceName === 'string' ? handoffSourceName : null;\n\n /** Extract parallel siblings (set by ToolNode for parallel handoffs) */\n const rawSiblings = toolMessage.additional_kwargs.handoff_parallel_siblings;\n const siblingIds: string[] = Array.isArray(rawSiblings)\n ? rawSiblings.filter((s): s is string => typeof s === 'string')\n : [];\n /** Convert IDs to display names */\n const parallelSiblings = siblingIds.map((id) => {\n const ctx = this.agentContexts.get(id);\n return ctx?.name ?? id;\n });\n const storedParallelGroupId =\n toolMessage.additional_kwargs[Constants.HANDOFF_GROUP_ID];\n const parallelGroupId = isValidHandoffGroupId(storedParallelGroupId)\n ? storedParallelGroupId\n : undefined;\n\n /** Get the tool_call_id to find and filter the AI message's tool call */\n const toolCallId = toolMessage.tool_call_id;\n\n /**\n * Collect all transfer tool_call_ids to filter out.\n * For parallel handoffs, we filter ALL transfer messages (not just ours)\n * to give the receiving agent a clean context without handoff noise.\n */\n const transferToolCallIds = new Set<string>([toolCallId]);\n for (const msg of messages) {\n if (msg.getType() === 'tool') {\n const tm = msg as ToolMessage;\n const tName = tm.name;\n if (\n typeof tName === 'string' &&\n (tName.startsWith(Constants.LC_TRANSFER_TO_) ||\n tName === 'conditional_transfer')\n ) {\n transferToolCallIds.add(tm.tool_call_id);\n }\n } else if (msg.getType() === 'ai') {\n const aiMsg = msg as AIMessage | AIMessageChunk;\n for (const toolCall of aiMsg.tool_calls ?? []) {\n if (\n toolCall.id != null &&\n (toolCall.name.startsWith(Constants.LC_TRANSFER_TO_) ||\n toolCall.name === 'conditional_transfer')\n ) {\n transferToolCallIds.add(toolCall.id);\n }\n }\n }\n }\n\n /** Filter out all transfer messages */\n const filteredMessages: BaseMessage[] = [];\n\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i];\n const msgType = msg.getType();\n\n /** Skip transfer ToolMessages */\n if (msgType === 'tool') {\n const tm = msg as ToolMessage;\n if (transferToolCallIds.has(tm.tool_call_id)) {\n continue;\n }\n }\n\n if (msgType === 'ai') {\n /** Check if this AI message contains any transfer tool calls */\n const aiMsg = msg as AIMessage | AIMessageChunk;\n const toolCalls = aiMsg.tool_calls;\n\n if (toolCalls && toolCalls.length > 0) {\n /** Filter out all transfer tool calls */\n const remainingToolCalls = toolCalls.filter(\n (tc) => tc.id == null || !transferToolCallIds.has(tc.id)\n );\n\n const hasTransferCalls = remainingToolCalls.length < toolCalls.length;\n\n if (hasTransferCalls) {\n if (\n remainingToolCalls.length > 0 ||\n (typeof aiMsg.content === 'string' && aiMsg.content.trim())\n ) {\n /**\n * Keep the message but without transfer tool calls — AND\n * without their `tool_use` content blocks. Array-content\n * providers (Anthropic) serialize the retained blocks\n * verbatim, so a transfer block whose call/result this\n * filter just stripped would reach the receiving agent as\n * an unmatched `tool_use` and the provider rejects the\n * request. Filtered by transfer NAME as well as the\n * gathered ids: a parallel sibling's transfer block has no\n * result in THIS recipient's state, so its id is never\n * collected, but its name still marks it.\n */\n const filteredAiMsg = new AIMessage({\n content: filterTransferToolUseBlocks(\n aiMsg.content,\n transferToolCallIds\n ),\n tool_calls: remainingToolCalls,\n id: aiMsg.id,\n });\n filteredMessages.push(filteredAiMsg);\n }\n /** If no remaining content or tool calls, skip this message entirely */\n continue;\n }\n }\n }\n\n /** Keep all other messages */\n filteredMessages.push(msg);\n }\n\n return {\n filteredMessages,\n instructions,\n sourceAgentName,\n parallelSiblings,\n parallelGroupId,\n };\n }\n\n /**\n * Create the multi-agent workflow with dynamic handoffs\n */\n override createWorkflow(): t.CompiledMultiAgentWorkflow {\n this.hasCompiledCheckpointer = this.compileOptions?.checkpointer != null;\n const StateAnnotation = Annotation.Root({\n messages: Annotation<BaseMessage[]>({\n reducer: (a, b) => {\n if (!this.messages.length) {\n this.startIndex = a.length + b.length;\n }\n const result = messagesStateReducer(a, b);\n this.messages = result;\n return result;\n },\n default: () => [],\n }),\n /** Channel for passing filtered messages to agents when excludeResults is true */\n agentMessages: Annotation<BaseMessage[]>({\n /** Replaces state entirely */\n reducer: (a, b) => b,\n default: () => [],\n }),\n subagentResult: Annotation<t.SubagentGraphResult | undefined>({\n reducer: (_current, update) => update,\n default: () => undefined,\n }),\n });\n\n const builder = new StateGraph(StateAnnotation);\n const addDirectEdge = (sources: string[], destination: string): void => {\n if (sources.length === 0) {\n return;\n }\n const source = sources.length === 1 ? sources[0] : sources;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n builder.addEdge(source, destination);\n };\n\n // Add all agents as complete subgraphs\n for (const [agentId] of this.agentContexts) {\n // Get all possible destinations for this agent\n const handoffDestinations = new Set<string>();\n const directDestinations = new Set<string>();\n\n // Check handoff edges for destinations\n for (const edge of this.handoffEdges) {\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n if (sources.includes(agentId) === true) {\n const dests = Array.isArray(edge.to) ? edge.to : [edge.to];\n dests.forEach((dest) => handoffDestinations.add(dest));\n }\n }\n\n // Check direct edges for destinations\n for (const edge of this.directEdges) {\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n if (sources.includes(agentId) === true) {\n const dests = Array.isArray(edge.to) ? edge.to : [edge.to];\n dests.forEach((dest) => directDestinations.add(dest));\n }\n }\n\n /** Check if this agent has BOTH handoff and direct edges */\n const hasHandoffEdges = handoffDestinations.size > 0;\n const hasDirectEdges = directDestinations.size > 0;\n const needsCommandRouting = hasHandoffEdges && hasDirectEdges;\n\n /** Collect all possible destinations for this agent */\n const allDestinations = new Set([\n ...handoffDestinations,\n ...directDestinations,\n ]);\n if (handoffDestinations.size > 0 || directDestinations.size === 0) {\n allDestinations.add(END);\n }\n\n /** Agent subgraph (includes agent + tools) */\n const agentSubgraph = this.createAgentSubgraph(agentId);\n\n /** Wrapper function that handles agentMessages channel, handoff reception, and conditional routing */\n const agentWrapper = async (\n state: t.MultiAgentGraphState,\n config?: LangGraphRunnableConfig\n ): Promise<t.MultiAgentGraphState | Command> => {\n let result: t.MultiAgentGraphState;\n let inputMessages = state.messages;\n const memberConfig =\n this.memberRecursionLimit == null\n ? config\n : { ...config, recursionLimit: this.memberRecursionLimit };\n\n /**\n * Check if this agent is receiving a handoff.\n * If so, filter out the transfer messages and inject instructions as preamble.\n * This prevents the receiving agent from seeing the transfer as \"completed work\"\n * and prematurely producing an end token.\n */\n const handoffContext = this.processHandoffReception(\n state.messages,\n agentId\n );\n const agentContext = this.agentContexts.get(agentId);\n\n if (\n handoffContext?.sourceAgentName != null &&\n handoffContext.sourceAgentName !== ''\n ) {\n agentContext?.setHandoffContext(\n handoffContext.sourceAgentName,\n handoffContext.parallelSiblings\n );\n } else {\n agentContext?.clearHandoffContext();\n }\n\n if (handoffContext !== null) {\n const { filteredMessages, instructions, parallelGroupId } =\n handoffContext;\n\n /** Build messages for the receiving agent */\n let messagesForAgent = filteredMessages;\n\n /**\n * If there are instructions, inject them as a HumanMessage to\n * ground the receiving agent.\n *\n * When the last filtered message is a ToolMessage (e.g. from a\n * non-handoff tool the router called before handing off), a\n * synthetic AIMessage is inserted first to satisfy the\n * tool → assistant role ordering required by chat APIs. Without\n * this bridge, appending a HumanMessage directly after a\n * ToolMessage causes \"400 Unexpected role 'user' after role\n * 'tool'\" errors (see issue #54).\n */\n const hasInstructions = instructions !== null && instructions !== '';\n if (hasInstructions) {\n const lastMsg =\n filteredMessages.length > 0\n ? filteredMessages[filteredMessages.length - 1]\n : null;\n\n if (lastMsg != null && lastMsg.getType() === 'tool') {\n messagesForAgent = [\n ...filteredMessages,\n new AIMessage(\n `[Processed tool result and transferring to ${agentId}]`\n ),\n buildRoutingPrompt(instructions),\n ];\n } else {\n messagesForAgent = [\n ...filteredMessages,\n buildRoutingPrompt(instructions),\n ];\n }\n }\n\n /** Update token map if we have a token counter */\n if (agentContext?.tokenCounter && hasInstructions) {\n const freshTokenMap: Record<string, number> = {};\n for (\n let i = 0;\n i < Math.min(filteredMessages.length, this.startIndex);\n i++\n ) {\n const tokenCount = agentContext.indexTokenCountMap[i];\n if (tokenCount !== undefined) {\n freshTokenMap[i] = tokenCount;\n }\n }\n /** Add tokens for the bridge AIMessage + instructions HumanMessage */\n for (\n let i = filteredMessages.length;\n i < messagesForAgent.length;\n i++\n ) {\n freshTokenMap[i] = agentContext.tokenCounter(messagesForAgent[i]);\n }\n agentContext.updateTokenMapWithInstructions(freshTokenMap);\n }\n\n const transformedState: t.MultiAgentGraphState = {\n ...state,\n messages: messagesForAgent,\n };\n inputMessages = messagesForAgent;\n result = await agentSubgraph.invoke(\n transformedState,\n withHandoffGroupMetadata(memberConfig, parallelGroupId)\n );\n result = {\n ...result,\n agentMessages: [],\n };\n } else if (\n state.agentMessages != null &&\n state.agentMessages.length > 0\n ) {\n /**\n * When using agentMessages (excludeResults=true), we need to update\n * the token map to account for the new prompt message\n */\n if (agentContext && agentContext.tokenCounter) {\n /** The agentMessages contains:\n * 1. Filtered messages (0 to startIndex) - already have token counts\n * 2. New prompt message - needs token counting\n */\n const freshTokenMap: Record<string, number> = {};\n\n /** Copy existing token counts for filtered messages (0 to startIndex) */\n for (let i = 0; i < this.startIndex; i++) {\n const tokenCount = agentContext.indexTokenCountMap[i];\n if (tokenCount !== undefined) {\n freshTokenMap[i] = tokenCount;\n }\n }\n\n /** Calculate tokens only for the new prompt message (last message) */\n const promptMessageIndex = state.agentMessages.length - 1;\n if (promptMessageIndex >= this.startIndex) {\n const promptMessage = state.agentMessages[promptMessageIndex];\n freshTokenMap[promptMessageIndex] =\n agentContext.tokenCounter(promptMessage);\n }\n\n /** Update the agent's token map with instructions added */\n agentContext.updateTokenMapWithInstructions(freshTokenMap);\n }\n\n /** Temporary state with messages replaced by `agentMessages` */\n const transformedState: t.MultiAgentGraphState = {\n ...state,\n messages: state.agentMessages,\n };\n inputMessages = state.agentMessages;\n result = await agentSubgraph.invoke(transformedState, memberConfig);\n result = {\n ...result,\n /** Clear agentMessages for next agent */\n agentMessages: [],\n };\n } else {\n result = await agentSubgraph.invoke(state, memberConfig);\n }\n\n if (this.resultAgentId === agentId) {\n result = {\n ...result,\n subagentResult: {\n agentId,\n message: getLastNewAiMessage(result.messages, inputMessages),\n },\n };\n }\n\n /** If agent has both handoff and direct edges, use Command for exclusive routing */\n if (needsCommandRouting) {\n /** Check if a handoff occurred */\n const lastMessage = result.messages[\n result.messages.length - 1\n ] as BaseMessage | null;\n if (\n lastMessage != null &&\n lastMessage.getType() === 'tool' &&\n typeof lastMessage.name === 'string' &&\n lastMessage.name.startsWith(Constants.LC_TRANSFER_TO_)\n ) {\n /** Handoff occurred - extract destination and navigate there exclusively */\n const handoffDest = lastMessage.name.replace(\n Constants.LC_TRANSFER_TO_,\n ''\n );\n return new Command({\n update: result,\n goto: handoffDest,\n });\n } else {\n /** No handoff - proceed with direct edges */\n const directDests = Array.from(directDestinations);\n if (directDests.length === 1) {\n return new Command({\n update: result,\n goto: directDests[0],\n });\n } else if (directDests.length > 1) {\n /** Multiple direct destinations - they'll run in parallel */\n return new Command({\n update: result,\n goto: directDests,\n });\n }\n }\n }\n\n /** No special routing needed - return state normally */\n return result;\n };\n\n /** Wrapped agent as a node with its possible destinations */\n builder.addNode(agentId, agentWrapper, {\n ends: Array.from(allDestinations),\n });\n }\n\n // Add starting edges for all starting nodes\n for (const startNode of this.startingNodes) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n builder.addEdge(START, startNode);\n }\n\n /**\n * Add direct edges for automatic transitions\n * Group edges by destination to handle fan-in scenarios\n */\n const edgesByDestination = new Map<string, t.GraphEdge[]>();\n\n for (const edge of this.directEdges) {\n const destinations = Array.isArray(edge.to) ? edge.to : [edge.to];\n for (const destination of destinations) {\n if (!edgesByDestination.has(destination)) {\n edgesByDestination.set(destination, []);\n }\n edgesByDestination.get(destination)!.push(edge);\n }\n }\n\n for (const [destination, edges] of edgesByDestination) {\n /** Checks if this is a fan-in scenario with prompt instructions */\n const edgesWithPrompt = edges.filter(\n (edge) => edge.prompt != null && edge.prompt !== ''\n );\n\n if (edgesWithPrompt.length > 0) {\n /**\n * Single wrapper node for destination (Fan-in with prompt)\n */\n const wrapperNodeId = `fan_in_${destination}_prompt`;\n /**\n * First edge's `prompt`\n * (they should all be the same for fan-in)\n */\n const prompt = edgesWithPrompt[0].prompt;\n /**\n * First edge's `excludeResults` flag\n * (they should all be the same for fan-in)\n */\n const excludeResults = edgesWithPrompt[0].excludeResults;\n\n builder.addNode(wrapperNodeId, async (state: t.BaseGraphState) => {\n let promptText: string | undefined;\n let effectiveExcludeResults = excludeResults;\n\n if (typeof prompt === 'function') {\n promptText = await prompt(state.messages, this.startIndex);\n } else if (prompt != null) {\n if (prompt.includes('{results}')) {\n const resultsMessages = state.messages.slice(this.startIndex);\n const resultsString = getBufferString(resultsMessages);\n const promptTemplate = PromptTemplate.fromTemplate(prompt);\n const result = await promptTemplate.invoke({\n results: resultsString,\n });\n promptText = result.value;\n effectiveExcludeResults =\n excludeResults !== false && promptText !== '';\n } else {\n promptText = prompt;\n }\n }\n\n if (promptText != null && promptText !== '') {\n if (\n effectiveExcludeResults == null ||\n effectiveExcludeResults === false\n ) {\n return {\n messages: [buildRoutingPrompt(promptText)],\n };\n }\n\n /** When `excludeResults` is true, use agentMessages channel\n * to pass filtered messages + prompt to the destination agent\n */\n const filteredMessages = state.messages.slice(0, this.startIndex);\n const promptMessage = buildRoutingPrompt(promptText);\n return {\n messages: [promptMessage],\n agentMessages: messagesStateReducer(filteredMessages, [\n promptMessage,\n ]),\n };\n }\n\n /** No prompt needed, return empty update */\n return {};\n });\n\n /** Add edges from all sources to the wrapper, then wrapper to destination */\n for (const edge of edges) {\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n addDirectEdge(sources, wrapperNodeId);\n }\n\n /** Single edge from wrapper to destination */\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n /** @ts-ignore */\n builder.addEdge(wrapperNodeId, destination);\n } else {\n /** No prompt instructions, add direct edges (skip if source uses Command routing) */\n for (const edge of edges) {\n const sources = Array.isArray(edge.from) ? edge.from : [edge.from];\n const staticSources = sources.filter(\n (source) =>\n !this.handoffEdges.some((handoffEdge) => {\n const handoffSources = Array.isArray(handoffEdge.from)\n ? handoffEdge.from\n : [handoffEdge.from];\n return handoffSources.includes(source);\n })\n );\n addDirectEdge(staticSources, destination);\n }\n }\n }\n\n return builder.compile(this.compileOptions as unknown as never);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"MultiAgentGraph.cjs","names":["HumanMessage","StandardGraph","ToolMessage","Command","aiMsg","AIMessage","serializeToolContentBounded","HARD_MAX_TOOL_RESULT_CHARS","StateGraph","Annotation","END","START","PromptTemplate"],"sources":["../../../src/graphs/MultiAgentGraph.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"applyGraphRuntimeConfig.cjs","names":[],"sources":["../../../src/graphs/applyGraphRuntimeConfig.ts"],"sourcesContent":["import type { StandardGraph } from './Graph';\n\nexport type GraphRuntimeConfig = Pick<\n StandardGraph,\n | 'hookRegistry'\n | 'humanInTheLoop'\n | 'toolOutputReferences'\n | 'eagerEventToolExecution'\n | 'codeSessionToolNames'\n | 'interruptingToolNames'\n | 'toolExecution'\n>;\n\nexport function applyGraphRuntimeConfig(\n graph: StandardGraph,\n config: GraphRuntimeConfig\n): void {\n graph.hookRegistry = config.hookRegistry;\n graph.humanInTheLoop = config.humanInTheLoop;\n graph.toolOutputReferences = config.toolOutputReferences;\n graph.eagerEventToolExecution = config.eagerEventToolExecution;\n graph.codeSessionToolNames = config.codeSessionToolNames;\n graph.interruptingToolNames = config.interruptingToolNames;\n graph.toolExecution = config.toolExecution;\n}\n"],"mappings":";AAaA,SAAgB,wBACd,OACA,QACM;CACN,MAAM,eAAe,OAAO;CAC5B,MAAM,iBAAiB,OAAO;CAC9B,MAAM,uBAAuB,OAAO;CACpC,MAAM,0BAA0B,OAAO;CACvC,MAAM,uBAAuB,OAAO;CACpC,MAAM,wBAAwB,OAAO;CACrC,MAAM,gBAAgB,OAAO;AAC/B"}
1
+ {"version":3,"file":"applyGraphRuntimeConfig.cjs","names":[],"sources":["../../../src/graphs/applyGraphRuntimeConfig.ts"],"mappings":";AAaA,SAAgB,wBACd,OACA,QACM;CACN,MAAM,eAAe,OAAO;CAC5B,MAAM,iBAAiB,OAAO;CAC9B,MAAM,uBAAuB,OAAO;CACpC,MAAM,0BAA0B,OAAO;CACvC,MAAM,uBAAuB,OAAO;CACpC,MAAM,wBAAwB,OAAO;CACrC,MAAM,gBAAgB,OAAO;AAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"createGraph.cjs","names":["MultiAgentGraph","StandardGraph"],"sources":["../../../src/graphs/createGraph.ts"],"sourcesContent":["import type {\n GraphFactory,\n GraphFactoryDependencies,\n GraphFactoryRequest,\n} from '@/graphs/graphFactory';\nimport type { MultiAgentGraphInput, StandardGraphInput } from '@/types';\nimport { MultiAgentGraph } from '@/graphs/MultiAgentGraph';\nimport { StandardGraph } from '@/graphs/Graph';\n\nconst createGraphByKind: GraphFactory = (request) => {\n if (request.kind === 'multi-agent') {\n return new MultiAgentGraph(request.input, dependencies);\n }\n return new StandardGraph(request.input, dependencies);\n};\n\nconst dependencies: GraphFactoryDependencies = {\n graphFactory: createGraphByKind,\n};\n\nexport function createGraph(request: {\n kind: 'standard';\n input: StandardGraphInput;\n}): StandardGraph;\nexport function createGraph(request: {\n kind: 'multi-agent';\n input: MultiAgentGraphInput;\n}): MultiAgentGraph;\nexport function createGraph(request: GraphFactoryRequest): StandardGraph;\nexport function createGraph(request: GraphFactoryRequest): StandardGraph {\n return createGraphByKind(request);\n}\n"],"mappings":";;;AASA,MAAM,qBAAmC,YAAY;CACnD,IAAI,QAAQ,SAAS,eACnB,OAAO,IAAIA,wBAAAA,gBAAgB,QAAQ,OAAO,YAAY;CAExD,OAAO,IAAIC,cAAAA,cAAc,QAAQ,OAAO,YAAY;AACtD;AAEA,MAAM,eAAyC,EAC7C,cAAc,kBAChB;AAWA,SAAgB,YAAY,SAA6C;CACvE,OAAO,kBAAkB,OAAO;AAClC"}
1
+ {"version":3,"file":"createGraph.cjs","names":["MultiAgentGraph","StandardGraph"],"sources":["../../../src/graphs/createGraph.ts"],"mappings":";;;AASA,MAAM,qBAAmC,YAAY;CACnD,IAAI,QAAQ,SAAS,eACnB,OAAO,IAAIA,wBAAAA,gBAAgB,QAAQ,OAAO,YAAY;CAExD,OAAO,IAAIC,cAAAA,cAAc,QAAQ,OAAO,YAAY;AACtD;AAEA,MAAM,eAAyC,EAC7C,cAAc,kBAChB;AAWA,SAAgB,YAAY,SAA6C;CACvE,OAAO,kBAAkB,OAAO;AAClC"}
@@ -1,58 +1,5 @@
1
1
  let _langchain_langgraph = require("@langchain/langgraph");
2
2
  //#region src/hitl/askUserQuestion.ts
3
- /**
4
- * Typed convenience wrapper around LangGraph's `interrupt()` for the
5
- * `ask_user_question` interrupt category. Lets a custom graph node
6
- * (or a tool implementation) suspend execution to collect a free-form
7
- * answer from the human, without the host having to assemble the
8
- * interrupt payload by hand. The companion to `Run.resume(answer)` on
9
- * the host side.
10
- *
11
- * AsyncLocalStorage anchoring: this helper does NOT call
12
- * `runWithConfig` itself — it expects to be invoked from inside a
13
- * LangGraph node where the framework has already established the
14
- * runnable config. ToolNode is the one place in this codebase that
15
- * needs the manual `runWithConfig` shim, because its
16
- * `RunnableCallable.trace = false` skips the upstream tracing path
17
- * that normally sets up the AsyncLocalStorage frame; ordinary user
18
- * nodes (RunnableLambda, addNode callbacks) do not have that
19
- * constraint.
20
- */
21
- /**
22
- * Suspend the current graph node to ask the human a question. Returns
23
- * the host-supplied resolution after `Run.resume(resolution)` is
24
- * called against a Run rebuilt with the same `thread_id` and
25
- * checkpointer.
26
- *
27
- * On the FIRST call (no resume value available), `interrupt()` throws
28
- * a `GraphInterrupt` that LangGraph catches; this function does not
29
- * return — execution unwinds, the SDK persists the checkpoint, and
30
- * the run completes with `run.getInterrupt()` returning a
31
- * `RunInterruptResult` whose `payload` is an
32
- * `AskUserQuestionInterruptPayload`.
33
- *
34
- * On RESUME, LangGraph re-runs the node from the start and this call
35
- * returns the host's `AskUserQuestionResolution` directly.
36
- *
37
- * Hosts that prefer the raw `interrupt()` (e.g., to attach extra
38
- * metadata) can construct an `AskUserQuestionInterruptPayload` and
39
- * call `interrupt()` themselves — this helper is purely convenience.
40
- *
41
- * @example
42
- * ```ts
43
- * const builder = new StateGraph(MessagesAnnotation)
44
- * .addNode('clarifier', () => {
45
- * const { answer } = askUserQuestion({
46
- * question: 'Which environment should I deploy to?',
47
- * options: [
48
- * { label: 'Staging', value: 'staging' },
49
- * { label: 'Production', value: 'production' },
50
- * ],
51
- * });
52
- * return { messages: [new HumanMessage(`Use ${answer}`)] };
53
- * });
54
- * ```
55
- */
56
3
  function askUserQuestion(question, options) {
57
4
  return (0, _langchain_langgraph.interrupt)({
58
5
  type: "ask_user_question",
@@ -1 +1 @@
1
- {"version":3,"file":"askUserQuestion.cjs","names":[],"sources":["../../../src/hitl/askUserQuestion.ts"],"sourcesContent":["/**\n * Typed convenience wrapper around LangGraph's `interrupt()` for the\n * `ask_user_question` interrupt category. Lets a custom graph node\n * (or a tool implementation) suspend execution to collect a free-form\n * answer from the human, without the host having to assemble the\n * interrupt payload by hand. The companion to `Run.resume(answer)` on\n * the host side.\n *\n * AsyncLocalStorage anchoring: this helper does NOT call\n * `runWithConfig` itself — it expects to be invoked from inside a\n * LangGraph node where the framework has already established the\n * runnable config. ToolNode is the one place in this codebase that\n * needs the manual `runWithConfig` shim, because its\n * `RunnableCallable.trace = false` skips the upstream tracing path\n * that normally sets up the AsyncLocalStorage frame; ordinary user\n * nodes (RunnableLambda, addNode callbacks) do not have that\n * constraint.\n */\n\nimport { interrupt } from '@langchain/langgraph';\nimport type {\n AskUserQuestionRequest,\n AskUserQuestionResolution,\n AskUserQuestionInterruptPayload,\n} from '@/types/hitl';\n\n/**\n * Suspend the current graph node to ask the human a question. Returns\n * the host-supplied resolution after `Run.resume(resolution)` is\n * called against a Run rebuilt with the same `thread_id` and\n * checkpointer.\n *\n * On the FIRST call (no resume value available), `interrupt()` throws\n * a `GraphInterrupt` that LangGraph catches; this function does not\n * return — execution unwinds, the SDK persists the checkpoint, and\n * the run completes with `run.getInterrupt()` returning a\n * `RunInterruptResult` whose `payload` is an\n * `AskUserQuestionInterruptPayload`.\n *\n * On RESUME, LangGraph re-runs the node from the start and this call\n * returns the host's `AskUserQuestionResolution` directly.\n *\n * Hosts that prefer the raw `interrupt()` (e.g., to attach extra\n * metadata) can construct an `AskUserQuestionInterruptPayload` and\n * call `interrupt()` themselves — this helper is purely convenience.\n *\n * @example\n * ```ts\n * const builder = new StateGraph(MessagesAnnotation)\n * .addNode('clarifier', () => {\n * const { answer } = askUserQuestion({\n * question: 'Which environment should I deploy to?',\n * options: [\n * { label: 'Staging', value: 'staging' },\n * { label: 'Production', value: 'production' },\n * ],\n * });\n * return { messages: [new HumanMessage(`Use ${answer}`)] };\n * });\n * ```\n */\nexport function askUserQuestion(\n question: AskUserQuestionRequest,\n options?: {\n /**\n * The calling tool's `tool_call_id`, surfaced on the interrupt payload\n * as `tool_call_id` so hosts can attribute the question (and answer) to\n * the exact tool-call content part. Tool bodies created with\n * `tool(fn, …)` receive it as `config.toolCall.id` — LangChain stamps\n * the full ToolCall onto the config when a tool is invoked with one.\n * Optional: positional hosts and custom nodes can omit it.\n */\n toolCallId?: string;\n }\n): AskUserQuestionResolution {\n const payload: AskUserQuestionInterruptPayload = {\n type: 'ask_user_question',\n question,\n ...(options?.toolCallId != null &&\n options.toolCallId !== '' && { tool_call_id: options.toolCallId }),\n };\n return interrupt<AskUserQuestionInterruptPayload, AskUserQuestionResolution>(\n payload\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,SAAgB,gBACd,UACA,SAW2B;CAO3B,QAAA,GAAA,qBAAA,UAAA,CACE;EANA,MAAM;EACN;EACA,GAAI,SAAS,cAAc,QACzB,QAAQ,eAAe,MAAM,EAAE,cAAc,QAAQ,WAAW;CAG5D,CACR;AACF"}
1
+ {"version":3,"file":"askUserQuestion.cjs","names":[],"sources":["../../../src/hitl/askUserQuestion.ts"],"mappings":";;AA6DA,SAAgB,gBACd,UACA,SAW2B;CAO3B,QAAA,GAAA,qBAAA,UAAA,CACE;EANA,MAAM;EACN;EACA,GAAI,SAAS,cAAc,QACzB,QAAQ,eAAe,MAAM,EAAE,cAAc,QAAQ,WAAW;CAG5D,CACR;AACF"}
@@ -26,26 +26,6 @@ function validateResolution(value, questions) {
26
26
  }
27
27
  return { answers: validated };
28
28
  }
29
- /**
30
- * Suspend once to collect answers to several related questions. The first
31
- * question is also included in the legacy `question` field so existing hosts
32
- * can render a useful fallback during a staged rollout.
33
- *
34
- * Question ids must be non-empty and unique within the batch. The helper
35
- * accepts at most four questions so hosts can render the interaction as one
36
- * focused decision surface rather than an unbounded form.
37
- *
38
- * @example
39
- * ```ts
40
- * const { answers } = askUserQuestions({
41
- * questions: [
42
- * { id: 'environment', question: 'Which environment?' },
43
- * { id: 'region', question: 'Which region?' },
44
- * ],
45
- * });
46
- * return `Deploy to ${answers.environment} in ${answers.region}`;
47
- * ```
48
- */
49
29
  function askUserQuestions(request, options) {
50
30
  const first = validateQuestions(request.questions);
51
31
  return validateResolution((0, _langchain_langgraph.interrupt)({
@@ -1 +1 @@
1
- {"version":3,"file":"askUserQuestions.cjs","names":["isAskUserQuestionRequest","ASK_USER_QUESTION_ID_PATTERN"],"sources":["../../../src/hitl/askUserQuestions.ts"],"sourcesContent":["import { interrupt } from '@langchain/langgraph';\nimport type {\n AskUserQuestionBatchItem,\n AskUserQuestionRequest,\n AskUserQuestionsInterruptPayload,\n AskUserQuestionsRequest,\n AskUserQuestionsResolution,\n} from '@/types/hitl';\nimport {\n ASK_USER_QUESTION_ID_PATTERN,\n isAskUserQuestionRequest,\n MAX_ASK_USER_QUESTIONS,\n} from './askUserQuestionsInterrupt';\n\nfunction validateQuestions(\n questions: readonly AskUserQuestionBatchItem[]\n): AskUserQuestionBatchItem {\n if (questions.length === 0) {\n throw new RangeError('askUserQuestions requires at least one question.');\n }\n if (questions.length > MAX_ASK_USER_QUESTIONS) {\n throw new RangeError(\n `askUserQuestions accepts at most ${MAX_ASK_USER_QUESTIONS} questions.`\n );\n }\n\n const ids = new Set<string>();\n for (const question of questions) {\n if (!isAskUserQuestionRequest(question)) {\n throw new TypeError(\n 'askUserQuestions requires each question and option to have valid string fields.'\n );\n }\n if (!ASK_USER_QUESTION_ID_PATTERN.test(question.id)) {\n throw new Error(\n 'askUserQuestions requires each question id to match [A-Za-z][A-Za-z0-9_-]{0,63}.'\n );\n }\n if (ids.has(question.id)) {\n throw new Error(\n `askUserQuestions requires unique question ids; received \"${question.id}\" more than once.`\n );\n }\n ids.add(question.id);\n }\n return questions[0];\n}\n\ninterface AskUserQuestionsResolutionCandidate {\n answers?: unknown;\n}\n\nfunction validateResolution(\n value: unknown,\n questions: readonly AskUserQuestionBatchItem[]\n): AskUserQuestionsResolution {\n if (typeof value !== 'object' || value === null) {\n throw new TypeError('askUserQuestions requires an answers object.');\n }\n const answers = (value as AskUserQuestionsResolutionCandidate).answers;\n if (\n typeof answers !== 'object' ||\n answers === null ||\n Array.isArray(answers)\n ) {\n throw new TypeError('askUserQuestions requires an answers object.');\n }\n\n const validated: Record<string, string> = {};\n for (const question of questions) {\n const descriptor = Object.getOwnPropertyDescriptor(answers, question.id);\n const answer: unknown = descriptor?.value;\n if (descriptor == null || typeof answer !== 'string') {\n throw new TypeError(\n `askUserQuestions requires a string answer for question id \"${question.id}\".`\n );\n }\n validated[question.id] = answer;\n }\n return { answers: validated };\n}\n\n/**\n * Suspend once to collect answers to several related questions. The first\n * question is also included in the legacy `question` field so existing hosts\n * can render a useful fallback during a staged rollout.\n *\n * Question ids must be non-empty and unique within the batch. The helper\n * accepts at most four questions so hosts can render the interaction as one\n * focused decision surface rather than an unbounded form.\n *\n * @example\n * ```ts\n * const { answers } = askUserQuestions({\n * questions: [\n * { id: 'environment', question: 'Which environment?' },\n * { id: 'region', question: 'Which region?' },\n * ],\n * });\n * return `Deploy to ${answers.environment} in ${answers.region}`;\n * ```\n */\nexport function askUserQuestions(\n request: AskUserQuestionsRequest,\n options?: { toolCallId?: string }\n): AskUserQuestionsResolution {\n const first = validateQuestions(request.questions);\n const fallback: AskUserQuestionRequest = {\n question: first.question,\n ...(first.description != null && { description: first.description }),\n ...(first.options != null && { options: first.options }),\n ...(first.multiSelect != null && { multiSelect: first.multiSelect }),\n };\n const payload: AskUserQuestionsInterruptPayload = {\n type: 'ask_user_question',\n question: fallback,\n questions: request.questions,\n ...(options?.toolCallId != null &&\n options.toolCallId !== '' && { tool_call_id: options.toolCallId }),\n };\n\n const resolution = interrupt<AskUserQuestionsInterruptPayload, unknown>(\n payload\n );\n return validateResolution(resolution, request.questions);\n}\n"],"mappings":";;;AAcA,SAAS,kBACP,WAC0B;CAC1B,IAAI,UAAU,WAAW,GACvB,MAAM,IAAI,WAAW,kDAAkD;CAEzE,IAAI,UAAU,SAAA,GACZ,MAAM,IAAI,WACR,+CACF;CAGF,MAAM,sBAAM,IAAI,IAAY;CAC5B,KAAK,MAAM,YAAY,WAAW;EAChC,IAAI,CAACA,kCAAAA,yBAAyB,QAAQ,GACpC,MAAM,IAAI,UACR,iFACF;EAEF,IAAI,CAACC,kCAAAA,6BAA6B,KAAK,SAAS,EAAE,GAChD,MAAM,IAAI,MACR,kFACF;EAEF,IAAI,IAAI,IAAI,SAAS,EAAE,GACrB,MAAM,IAAI,MACR,4DAA4D,SAAS,GAAG,kBAC1E;EAEF,IAAI,IAAI,SAAS,EAAE;CACrB;CACA,OAAO,UAAU;AACnB;AAMA,SAAS,mBACP,OACA,WAC4B;CAC5B,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,MAAM,IAAI,UAAU,8CAA8C;CAEpE,MAAM,UAAW,MAA8C;CAC/D,IACE,OAAO,YAAY,YACnB,YAAY,QACZ,MAAM,QAAQ,OAAO,GAErB,MAAM,IAAI,UAAU,8CAA8C;CAGpE,MAAM,YAAoC,CAAC;CAC3C,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,aAAa,OAAO,yBAAyB,SAAS,SAAS,EAAE;EACvE,MAAM,SAAkB,YAAY;EACpC,IAAI,cAAc,QAAQ,OAAO,WAAW,UAC1C,MAAM,IAAI,UACR,8DAA8D,SAAS,GAAG,GAC5E;EAEF,UAAU,SAAS,MAAM;CAC3B;CACA,OAAO,EAAE,SAAS,UAAU;AAC9B;;;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,iBACd,SACA,SAC4B;CAC5B,MAAM,QAAQ,kBAAkB,QAAQ,SAAS;CAkBjD,OAAO,oBAAA,GAAA,qBAAA,UAAA,CAFL;EARA,MAAM;EACN,UAAU;GAPV,UAAU,MAAM;GAChB,GAAI,MAAM,eAAe,QAAQ,EAAE,aAAa,MAAM,YAAY;GAClE,GAAI,MAAM,WAAW,QAAQ,EAAE,SAAS,MAAM,QAAQ;GACtD,GAAI,MAAM,eAAe,QAAQ,EAAE,aAAa,MAAM,YAAY;EAIjD;EACjB,WAAW,QAAQ;EACnB,GAAI,SAAS,cAAc,QACzB,QAAQ,eAAe,MAAM,EAAE,cAAc,QAAQ,WAAW;CAI5D,CAE2B,GAAG,QAAQ,SAAS;AACzD"}
1
+ {"version":3,"file":"askUserQuestions.cjs","names":["isAskUserQuestionRequest","ASK_USER_QUESTION_ID_PATTERN"],"sources":["../../../src/hitl/askUserQuestions.ts"],"mappings":";;;AAcA,SAAS,kBACP,WAC0B;CAC1B,IAAI,UAAU,WAAW,GACvB,MAAM,IAAI,WAAW,kDAAkD;CAEzE,IAAI,UAAU,SAAA,GACZ,MAAM,IAAI,WACR,+CACF;CAGF,MAAM,sBAAM,IAAI,IAAY;CAC5B,KAAK,MAAM,YAAY,WAAW;EAChC,IAAI,CAACA,kCAAAA,yBAAyB,QAAQ,GACpC,MAAM,IAAI,UACR,iFACF;EAEF,IAAI,CAACC,kCAAAA,6BAA6B,KAAK,SAAS,EAAE,GAChD,MAAM,IAAI,MACR,kFACF;EAEF,IAAI,IAAI,IAAI,SAAS,EAAE,GACrB,MAAM,IAAI,MACR,4DAA4D,SAAS,GAAG,kBAC1E;EAEF,IAAI,IAAI,SAAS,EAAE;CACrB;CACA,OAAO,UAAU;AACnB;AAMA,SAAS,mBACP,OACA,WAC4B;CAC5B,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,MAAM,IAAI,UAAU,8CAA8C;CAEpE,MAAM,UAAW,MAA8C;CAC/D,IACE,OAAO,YAAY,YACnB,YAAY,QACZ,MAAM,QAAQ,OAAO,GAErB,MAAM,IAAI,UAAU,8CAA8C;CAGpE,MAAM,YAAoC,CAAC;CAC3C,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,aAAa,OAAO,yBAAyB,SAAS,SAAS,EAAE;EACvE,MAAM,SAAkB,YAAY;EACpC,IAAI,cAAc,QAAQ,OAAO,WAAW,UAC1C,MAAM,IAAI,UACR,8DAA8D,SAAS,GAAG,GAC5E;EAEF,UAAU,SAAS,MAAM;CAC3B;CACA,OAAO,EAAE,SAAS,UAAU;AAC9B;AAsBA,SAAgB,iBACd,SACA,SAC4B;CAC5B,MAAM,QAAQ,kBAAkB,QAAQ,SAAS;CAkBjD,OAAO,oBAAA,GAAA,qBAAA,UAAA,CAFL;EARA,MAAM;EACN,UAAU;GAPV,UAAU,MAAM;GAChB,GAAI,MAAM,eAAe,QAAQ,EAAE,aAAa,MAAM,YAAY;GAClE,GAAI,MAAM,WAAW,QAAQ,EAAE,SAAS,MAAM,QAAQ;GACtD,GAAI,MAAM,eAAe,QAAQ,EAAE,aAAa,MAAM,YAAY;EAIjD;EACjB,WAAW,QAAQ;EACnB,GAAI,SAAS,cAAc,QACzB,QAAQ,eAAe,MAAM,EAAE,cAAc,QAAQ,WAAW;CAI5D,CAE2B,GAAG,QAAQ,SAAS;AACzD"}
@@ -1,8 +1,6 @@
1
1
  const require_hitl = require("../types/hitl.cjs");
2
2
  //#region src/hitl/askUserQuestionsInterrupt.ts
3
- /** Maximum questions supported by one batched clarification interaction. */
4
3
  const MAX_ASK_USER_QUESTIONS = 4;
5
- /** Safe identifier format for answer-map keys in a batched question. */
6
4
  const ASK_USER_QUESTION_ID_PATTERN = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/;
7
5
  function isAskUserQuestionOption(value) {
8
6
  if (typeof value !== "object" || value === null) return false;
@@ -24,10 +22,6 @@ function isAskUserQuestionBatchItem(value) {
24
22
  const question = value;
25
23
  return typeof question.id === "string" && ASK_USER_QUESTION_ID_PATTERN.test(question.id) && (question.header === void 0 || typeof question.header === "string");
26
24
  }
27
- /**
28
- * Type guard for the batched form of an `ask_user_question` interrupt. Hosts
29
- * use this to select the multi-question UI and `AskUserQuestionsResolution`.
30
- */
31
25
  function isAskUserQuestionsInterrupt(payload) {
32
26
  if (!require_hitl.isAskUserQuestionInterrupt(payload) || !isAskUserQuestionRequest(payload.question) || payload.tool_call_id !== void 0 && typeof payload.tool_call_id !== "string" || !Array.isArray(payload.questions) || payload.questions.length === 0 || payload.questions.length > 4) return false;
33
27
  const ids = /* @__PURE__ */ new Set();
@@ -1 +1 @@
1
- {"version":3,"file":"askUserQuestionsInterrupt.cjs","names":["isAskUserQuestionInterrupt"],"sources":["../../../src/hitl/askUserQuestionsInterrupt.ts"],"sourcesContent":["import type {\n AskUserQuestionBatchItem,\n AskUserQuestionOption,\n AskUserQuestionRequest,\n AskUserQuestionsInterruptPayload,\n} from '@/types/hitl';\nimport { isAskUserQuestionInterrupt } from '@/types/hitl';\n\n/** Maximum questions supported by one batched clarification interaction. */\nexport const MAX_ASK_USER_QUESTIONS = 4;\n\n/** Safe identifier format for answer-map keys in a batched question. */\nexport const ASK_USER_QUESTION_ID_PATTERN = /^[A-Za-z][A-Za-z0-9_-]{0,63}$/;\n\ninterface AskUserQuestionOptionCandidate {\n label?: unknown;\n value?: unknown;\n}\n\ninterface AskUserQuestionCandidate {\n question?: unknown;\n description?: unknown;\n options?: unknown;\n multiSelect?: unknown;\n}\n\ninterface AskUserQuestionBatchItemCandidate extends AskUserQuestionCandidate {\n id?: unknown;\n header?: unknown;\n}\n\nfunction isAskUserQuestionOption(\n value: unknown\n): value is AskUserQuestionOption {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const option = value as AskUserQuestionOptionCandidate;\n return typeof option.label === 'string' && typeof option.value === 'string';\n}\n\nfunction isAskUserQuestionOptions(\n value: unknown\n): value is AskUserQuestionOption[] {\n if (!Array.isArray(value)) {\n return false;\n }\n for (let index = 0; index < value.length; index++) {\n if (!Object.hasOwn(value, index) || !isAskUserQuestionOption(value[index])) {\n return false;\n }\n }\n return true;\n}\n\nexport function isAskUserQuestionRequest(\n value: unknown\n): value is AskUserQuestionRequest {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n const question = value as AskUserQuestionCandidate;\n return (\n typeof question.question === 'string' &&\n (question.description === undefined ||\n typeof question.description === 'string') &&\n (question.options === undefined ||\n isAskUserQuestionOptions(question.options)) &&\n (question.multiSelect === undefined ||\n typeof question.multiSelect === 'boolean')\n );\n}\n\nfunction isAskUserQuestionBatchItem(\n value: unknown\n): value is AskUserQuestionBatchItem {\n if (!isAskUserQuestionRequest(value)) {\n return false;\n }\n const question = value as AskUserQuestionBatchItemCandidate;\n return (\n typeof question.id === 'string' &&\n ASK_USER_QUESTION_ID_PATTERN.test(question.id) &&\n (question.header === undefined || typeof question.header === 'string')\n );\n}\n\n/**\n * Type guard for the batched form of an `ask_user_question` interrupt. Hosts\n * use this to select the multi-question UI and `AskUserQuestionsResolution`.\n */\nexport function isAskUserQuestionsInterrupt(\n payload: unknown\n): payload is AskUserQuestionsInterruptPayload {\n if (\n !isAskUserQuestionInterrupt(payload) ||\n !isAskUserQuestionRequest(payload.question) ||\n (payload.tool_call_id !== undefined &&\n typeof payload.tool_call_id !== 'string') ||\n !Array.isArray(payload.questions) ||\n payload.questions.length === 0 ||\n payload.questions.length > MAX_ASK_USER_QUESTIONS\n ) {\n return false;\n }\n\n const ids = new Set<string>();\n for (const question of payload.questions) {\n if (!isAskUserQuestionBatchItem(question) || ids.has(question.id)) {\n return false;\n }\n ids.add(question.id);\n }\n return true;\n}\n"],"mappings":";;;AASA,MAAa,yBAAyB;;AAGtC,MAAa,+BAA+B;AAmB5C,SAAS,wBACP,OACgC;CAChC,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,OAAO;CAET,MAAM,SAAS;CACf,OAAO,OAAO,OAAO,UAAU,YAAY,OAAO,OAAO,UAAU;AACrE;AAEA,SAAS,yBACP,OACkC;CAClC,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO;CAET,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SACxC,IAAI,CAAC,OAAO,OAAO,OAAO,KAAK,KAAK,CAAC,wBAAwB,MAAM,MAAM,GACvE,OAAO;CAGX,OAAO;AACT;AAEA,SAAgB,yBACd,OACiC;CACjC,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,OAAO;CAET,MAAM,WAAW;CACjB,OACE,OAAO,SAAS,aAAa,aAC5B,SAAS,gBAAgB,KAAA,KACxB,OAAO,SAAS,gBAAgB,cACjC,SAAS,YAAY,KAAA,KACpB,yBAAyB,SAAS,OAAO,OAC1C,SAAS,gBAAgB,KAAA,KACxB,OAAO,SAAS,gBAAgB;AAEtC;AAEA,SAAS,2BACP,OACmC;CACnC,IAAI,CAAC,yBAAyB,KAAK,GACjC,OAAO;CAET,MAAM,WAAW;CACjB,OACE,OAAO,SAAS,OAAO,YACvB,6BAA6B,KAAK,SAAS,EAAE,MAC5C,SAAS,WAAW,KAAA,KAAa,OAAO,SAAS,WAAW;AAEjE;;;;;AAMA,SAAgB,4BACd,SAC6C;CAC7C,IACE,CAACA,aAAAA,2BAA2B,OAAO,KACnC,CAAC,yBAAyB,QAAQ,QAAQ,KACzC,QAAQ,iBAAiB,KAAA,KACxB,OAAO,QAAQ,iBAAiB,YAClC,CAAC,MAAM,QAAQ,QAAQ,SAAS,KAChC,QAAQ,UAAU,WAAW,KAC7B,QAAQ,UAAU,SAAA,GAElB,OAAO;CAGT,MAAM,sBAAM,IAAI,IAAY;CAC5B,KAAK,MAAM,YAAY,QAAQ,WAAW;EACxC,IAAI,CAAC,2BAA2B,QAAQ,KAAK,IAAI,IAAI,SAAS,EAAE,GAC9D,OAAO;EAET,IAAI,IAAI,SAAS,EAAE;CACrB;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"askUserQuestionsInterrupt.cjs","names":["isAskUserQuestionInterrupt"],"sources":["../../../src/hitl/askUserQuestionsInterrupt.ts"],"mappings":";;AASA,MAAa,yBAAyB;AAGtC,MAAa,+BAA+B;AAmB5C,SAAS,wBACP,OACgC;CAChC,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,OAAO;CAET,MAAM,SAAS;CACf,OAAO,OAAO,OAAO,UAAU,YAAY,OAAO,OAAO,UAAU;AACrE;AAEA,SAAS,yBACP,OACkC;CAClC,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO;CAET,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SACxC,IAAI,CAAC,OAAO,OAAO,OAAO,KAAK,KAAK,CAAC,wBAAwB,MAAM,MAAM,GACvE,OAAO;CAGX,OAAO;AACT;AAEA,SAAgB,yBACd,OACiC;CACjC,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,OAAO;CAET,MAAM,WAAW;CACjB,OACE,OAAO,SAAS,aAAa,aAC5B,SAAS,gBAAgB,KAAA,KACxB,OAAO,SAAS,gBAAgB,cACjC,SAAS,YAAY,KAAA,KACpB,yBAAyB,SAAS,OAAO,OAC1C,SAAS,gBAAgB,KAAA,KACxB,OAAO,SAAS,gBAAgB;AAEtC;AAEA,SAAS,2BACP,OACmC;CACnC,IAAI,CAAC,yBAAyB,KAAK,GACjC,OAAO;CAET,MAAM,WAAW;CACjB,OACE,OAAO,SAAS,OAAO,YACvB,6BAA6B,KAAK,SAAS,EAAE,MAC5C,SAAS,WAAW,KAAA,KAAa,OAAO,SAAS,WAAW;AAEjE;AAMA,SAAgB,4BACd,SAC6C;CAC7C,IACE,CAACA,aAAAA,2BAA2B,OAAO,KACnC,CAAC,yBAAyB,QAAQ,QAAQ,KACzC,QAAQ,iBAAiB,KAAA,KACxB,OAAO,QAAQ,iBAAiB,YAClC,CAAC,MAAM,QAAQ,QAAQ,SAAS,KAChC,QAAQ,UAAU,WAAW,KAC7B,QAAQ,UAAU,SAAA,GAElB,OAAO;CAGT,MAAM,sBAAM,IAAI,IAAY;CAC5B,KAAK,MAAM,YAAY,QAAQ,WAAW;EACxC,IAAI,CAAC,2BAA2B,QAAQ,KAAK,IAAI,IAAI,SAAS,EAAE,GAC9D,OAAO;EAET,IAAI,IAAI,SAAS,EAAE;CACrB;CACA,OAAO;AACT"}
@@ -15,55 +15,16 @@ function deserializeApprovalKey(value) {
15
15
  toolUseId: parsed[2]
16
16
  };
17
17
  }
18
- /**
19
- * Events whose hooks can change a tool call's input or output. Presence of
20
- * any of these disables eager tool execution and early completion emission;
21
- * observation-only events (`PostToolBatch`, `Stop`, telemetry hooks) do not.
22
- */
23
18
  const RESULT_ALTERING_HOOK_EVENTS = [
24
19
  "PreToolUse",
25
20
  "PostToolUse",
26
21
  "PostToolUseFailure"
27
22
  ];
28
- /**
29
- * Run-scoped storage for hook matchers with an additional layer for
30
- * session-scoped matchers that should be cleaned up between sessions.
31
- *
32
- * Hosts construct one registry per `Run` (mirroring how `HandlerRegistry` is
33
- * scoped) and register global matchers + per-session matchers against it.
34
- * Registration is strictly additive — nothing in this class mutates a
35
- * matcher's callbacks or flags after insertion.
36
- *
37
- * ## Why `Map<sessionId, MatcherBucket>` and not `Record`
38
- *
39
- * LibreChat runs thousands of parallel sessions in one Node process, and
40
- * hook registration happens inside hot paths (tool loading, agent spawning).
41
- * A `Record<sessionId, ...>` has to be spread on every insertion, which is
42
- * O(n) per call and O(n²) total for a batch of parallel registrations. A
43
- * Map mutates in place, keeping insertions O(1). This mirrors the reasoning
44
- * Claude Code documents at `utils/hooks/sessionHooks.ts:62`.
45
- */
46
23
  var HookRegistry = class {
47
24
  global = {};
48
25
  sessions = /* @__PURE__ */ new Map();
49
- /**
50
- * Per-session halt signals. Scoped by `sessionId` (= the run id the
51
- * hook fired under) so a host that shares one registry across
52
- * concurrent runs cannot leak `preventContinuation` from one run
53
- * into another. Without scoping, a halt raised by run A's hook
54
- * would trip run B's stream-loop poll on the next iteration —
55
- * silently terminating an unrelated run.
56
- *
57
- * Map storage mirrors the reasoning above for session matchers:
58
- * O(1) insertion in hot paths, no spread-on-write.
59
- */
60
26
  haltSignals = /* @__PURE__ */ new Map();
61
- /** One-shot hook contributions retained until approval is consumed. */
62
27
  pendingToolApprovals = /* @__PURE__ */ new Map();
63
- /**
64
- * Register a matcher for the lifetime of this registry (= one Run).
65
- * Returns an unregister function that removes the matcher by reference.
66
- */
67
28
  register(event, matcher) {
68
29
  const list = ensureList(this.global, event);
69
30
  list.push(widen(matcher));
@@ -71,11 +32,6 @@ var HookRegistry = class {
71
32
  removeFromList(list, matcher);
72
33
  };
73
34
  }
74
- /**
75
- * Register a matcher for a specific session. Cleared automatically when
76
- * `clearSession(sessionId)` is called, or can be removed directly via the
77
- * returned unregister function.
78
- */
79
35
  registerSession(sessionId, event, matcher) {
80
36
  const list = ensureList(this.ensureSessionBucket(sessionId), event);
81
37
  list.push(widen(matcher));
@@ -83,12 +39,6 @@ var HookRegistry = class {
83
39
  removeFromList(list, matcher);
84
40
  };
85
41
  }
86
- /**
87
- * Returns all matchers registered for `event`, concatenating global first
88
- * and then session-specific (when `sessionId` is supplied). The caller
89
- * receives a fresh array, so iterating it is safe even if a matcher is
90
- * removed mid-iteration (e.g. via `once: true`).
91
- */
92
42
  getMatchers(event, sessionId) {
93
43
  const globalList = readList(this.global, event);
94
44
  if (sessionId === void 0) return snapshot(globalList);
@@ -99,11 +49,6 @@ var HookRegistry = class {
99
49
  if (sessionList.length === 0) return snapshot(globalList);
100
50
  return snapshot([...globalList, ...sessionList]);
101
51
  }
102
- /**
103
- * Removes `matcher` by reference from global storage first, falling back
104
- * to the session bucket when `sessionId` is supplied. Used by
105
- * `executeHooks` to drop `once: true` matchers after they fire.
106
- */
107
52
  removeMatcher(event, matcher, sessionId) {
108
53
  if (removeFromList(readList(this.global, event), matcher)) return true;
109
54
  if (sessionId === void 0) return false;
@@ -111,16 +56,10 @@ var HookRegistry = class {
111
56
  if (bucket === void 0) return false;
112
57
  return removeFromList(readList(bucket, event), matcher);
113
58
  }
114
- /**
115
- * Drops every session-scoped matcher for `sessionId`. Call this in the
116
- * `finally` block around a Run so a `once: true` hook that never fired
117
- * cannot leak into the next session on the same registry.
118
- */
119
59
  clearSession(sessionId) {
120
60
  this.sessions.delete(sessionId);
121
61
  this.pendingToolApprovals.delete(sessionId);
122
62
  }
123
- /** Copies session-scoped policy into a rebuilt or branched Run. */
124
63
  copySession(sourceSessionId, targetSessionId) {
125
64
  if (sourceSessionId === targetSessionId) return;
126
65
  const source = this.sessions.get(sourceSessionId);
@@ -184,25 +123,6 @@ var HookRegistry = class {
184
123
  }
185
124
  this.pendingToolApprovals.set(sessionId, restored);
186
125
  }
187
- /**
188
- * Raise a halt signal scoped to `sessionId` (= the run id the hook
189
- * fired under). The SDK's run loop polls for this between stream
190
- * events with the run's own id. First-write-wins per session: a
191
- * halt already raised by an earlier hook in the same run is
192
- * preserved so the original `reason` / `source` aren't overwritten.
193
- *
194
- * Per-session scoping is critical when hosts share one registry
195
- * across concurrent runs (e.g. a global policy registered once and
196
- * reused). Without it, a `preventContinuation` from run A would
197
- * trip run B's stream-loop poll on the next iteration and silently
198
- * terminate an unrelated run.
199
- *
200
- * Called by the SDK after `executeHooks` returns an aggregate with
201
- * `preventContinuation: true`. Hosts can also call it directly from
202
- * inside a hook callback if they want to halt without going through
203
- * the aggregated return value, but `preventContinuation` is the
204
- * canonical path.
205
- */
206
126
  haltRun(sessionId, reason, source) {
207
127
  if (this.haltSignals.has(sessionId)) return;
208
128
  this.haltSignals.set(sessionId, {
@@ -210,32 +130,12 @@ var HookRegistry = class {
210
130
  source
211
131
  });
212
132
  }
213
- /**
214
- * Returns the halt signal raised by hooks running under `sessionId`,
215
- * or `undefined` if no hook in that run has halted. Polled by
216
- * `Run.processStream` between stream events using the run's own id.
217
- */
218
133
  getHaltSignal(sessionId) {
219
134
  return this.haltSignals.get(sessionId);
220
135
  }
221
- /**
222
- * Clears the halt signal for `sessionId`. Called by
223
- * `Run.processStream` in its `finally` block so a subsequent
224
- * invocation of the same Run (e.g. resume) starts with a fresh
225
- * halt state. No-op when no signal exists for that session.
226
- */
227
136
  clearHaltSignal(sessionId) {
228
137
  this.haltSignals.delete(sessionId);
229
138
  }
230
- /**
231
- * True when any registered hook can alter a tool result before or after
232
- * execution (`PreToolUse`, `PostToolUse`, `PostToolUseFailure`). Eager
233
- * tool execution and early completion emission gate on this instead of
234
- * registry presence, so observation-only registries (e.g. a
235
- * `PostToolBatch` steering drain) keep those fast paths. With
236
- * `sessionId`, checks global + that session; without it, conservatively
237
- * scans every session bucket.
238
- */
239
139
  hasResultAlteringHooks(sessionId) {
240
140
  if (hasResultAlteringInBucket(this.global)) return true;
241
141
  if (sessionId !== void 0) {
@@ -245,7 +145,6 @@ var HookRegistry = class {
245
145
  for (const bucket of this.sessions.values()) if (hasResultAlteringInBucket(bucket)) return true;
246
146
  return false;
247
147
  }
248
- /** True if at least one matcher exists for `event` (global + session). */
249
148
  hasHookFor(event, sessionId) {
250
149
  if (readList(this.global, event).length > 0) return true;
251
150
  if (sessionId === void 0) return false;
@@ -253,20 +152,6 @@ var HookRegistry = class {
253
152
  if (bucket === void 0) return false;
254
153
  return readList(bucket, event).length > 0;
255
154
  }
256
- /**
257
- * True when at least one matcher for `event` would actually DISPATCH on a
258
- * query-less call — a wildcard pattern with a non-empty `hooks` array.
259
- *
260
- * `hasHookFor` answers "is one registered", which is not the same question:
261
- * a matcher carrying a pattern is inert for events that supply no
262
- * `matchQuery`, so a caller using registration as a proxy for "something
263
- * will run" can act on a hook that never fires. Mirrors the two skips in
264
- * `executeHooks` (pattern mismatch, empty `hooks`).
265
- *
266
- * Non-allocating on purpose — `StandardGraph.canClaimPreemptSeal` reads it
267
- * once per streamed chunk, where `getMatchers`' defensive `slice()` would
268
- * allocate on every delta.
269
- */
270
155
  hasDispatchableHookFor(event, sessionId) {
271
156
  if (hasDispatchableInList(readList(this.global, event))) return true;
272
157
  if (sessionId === void 0) return false;
@@ -306,21 +191,9 @@ function removeFromList(list, matcher) {
306
191
  list.splice(idx, 1);
307
192
  return true;
308
193
  }
309
- /**
310
- * Widen a per-event matcher to the storage's uniform slot type. Unsound at
311
- * the type level (function parameters are contravariant) but safe by
312
- * construction: `HookRegistry.register<E>` only ever puts matchers into the
313
- * bucket slot for their own event, and reads go through `snapshot<E>`
314
- * which is only called with the same `E`.
315
- */
316
194
  function widen(matcher) {
317
195
  return matcher;
318
196
  }
319
- /**
320
- * Narrow a storage list back to a per-event matcher list on the way out.
321
- * Sound counterpart to `widen`: the list only contains matchers that were
322
- * registered against `E`, because the public API enforces it on insert.
323
- */
324
197
  function snapshot(list) {
325
198
  return list.slice();
326
199
  }