@librechat/agents 3.2.21 → 3.2.31

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 (398) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +3 -2
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/events.cjs.map +1 -1
  4. package/dist/cjs/graphs/Graph.cjs +200 -54
  5. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  6. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  7. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +13 -7
  8. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  9. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  10. package/dist/cjs/hooks/types.cjs.map +1 -1
  11. package/dist/cjs/instrumentation.cjs +2 -2
  12. package/dist/cjs/instrumentation.cjs.map +1 -1
  13. package/dist/cjs/langfuse.cjs +17 -1
  14. package/dist/cjs/langfuse.cjs.map +1 -1
  15. package/dist/cjs/langfuseToolOutputTracing.cjs +2 -2
  16. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  17. package/dist/cjs/llm/anthropic/index.cjs +1 -1
  18. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  19. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  20. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +1 -1
  21. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  22. package/dist/cjs/llm/bedrock/index.cjs +2 -2
  23. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  24. package/dist/cjs/llm/bedrock/toolCache.cjs +8 -5
  25. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  26. package/dist/cjs/llm/fake.cjs +16 -14
  27. package/dist/cjs/llm/fake.cjs.map +1 -1
  28. package/dist/cjs/llm/google/index.cjs +22 -0
  29. package/dist/cjs/llm/google/index.cjs.map +1 -1
  30. package/dist/cjs/llm/google/utils/common.cjs +88 -27
  31. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  32. package/dist/cjs/llm/init.cjs +2 -2
  33. package/dist/cjs/llm/invoke.cjs +108 -11
  34. package/dist/cjs/llm/invoke.cjs.map +1 -1
  35. package/dist/cjs/llm/openai/index.cjs +1 -1
  36. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  37. package/dist/cjs/llm/openai/utils/index.cjs +1 -1
  38. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  39. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  40. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  41. package/dist/cjs/main.cjs +1 -0
  42. package/dist/cjs/main.cjs.map +1 -1
  43. package/dist/cjs/messages/cache.cjs +8 -7
  44. package/dist/cjs/messages/cache.cjs.map +1 -1
  45. package/dist/cjs/messages/content.cjs.map +1 -1
  46. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  47. package/dist/cjs/messages/format.cjs +124 -17
  48. package/dist/cjs/messages/format.cjs.map +1 -1
  49. package/dist/cjs/messages/prune.cjs.map +1 -1
  50. package/dist/cjs/messages/reducer.cjs +1 -1
  51. package/dist/cjs/messages/reducer.cjs.map +1 -1
  52. package/dist/cjs/messages/tools.cjs +1 -1
  53. package/dist/cjs/messages/tools.cjs.map +1 -1
  54. package/dist/cjs/openai/index.cjs.map +1 -1
  55. package/dist/cjs/responses/index.cjs.map +1 -1
  56. package/dist/cjs/run.cjs +41 -20
  57. package/dist/cjs/run.cjs.map +1 -1
  58. package/dist/cjs/session/AgentSession.cjs +4 -4
  59. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  60. package/dist/cjs/session/JsonlSessionStore.cjs +2 -2
  61. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  62. package/dist/cjs/session/handlers.cjs +2 -2
  63. package/dist/cjs/session/handlers.cjs.map +1 -1
  64. package/dist/cjs/stream.cjs +248 -25
  65. package/dist/cjs/stream.cjs.map +1 -1
  66. package/dist/cjs/summarization/node.cjs.map +1 -1
  67. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +1 -1
  68. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  69. package/dist/cjs/tools/Calculator.cjs +1 -1
  70. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  71. package/dist/cjs/tools/CodeExecutor.cjs +1 -1
  72. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  73. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  74. package/dist/cjs/tools/ToolNode.cjs +37 -18
  75. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  76. package/dist/cjs/tools/ToolSearch.cjs +1 -1
  77. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  78. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +7 -4
  79. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  80. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +4 -4
  81. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  82. package/dist/cjs/tools/handlers.cjs +2 -1
  83. package/dist/cjs/tools/handlers.cjs.map +1 -1
  84. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  85. package/dist/cjs/tools/local/FileCheckpointer.cjs +2 -1
  86. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  87. package/dist/cjs/tools/local/LocalCodingTools.cjs +45 -19
  88. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  89. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +3 -3
  90. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  91. package/dist/cjs/tools/local/LocalExecutionTools.cjs +2 -2
  92. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  93. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +4 -3
  94. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  95. package/dist/cjs/tools/local/attachments.cjs +0 -5
  96. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  97. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +4 -4
  98. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  99. package/dist/cjs/tools/search/firecrawl.cjs +1 -1
  100. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  101. package/dist/cjs/tools/search/rerankers.cjs +7 -3
  102. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  103. package/dist/cjs/tools/search/tavily-search.cjs +1 -1
  104. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  105. package/dist/cjs/tools/search/utils.cjs +76 -8
  106. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  107. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1 -1
  108. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  109. package/dist/cjs/utils/handlers.cjs +1 -1
  110. package/dist/cjs/utils/handlers.cjs.map +1 -1
  111. package/dist/cjs/utils/run.cjs +1 -1
  112. package/dist/cjs/utils/run.cjs.map +1 -1
  113. package/dist/esm/agents/AgentContext.mjs +3 -2
  114. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  115. package/dist/esm/events.mjs.map +1 -1
  116. package/dist/esm/graphs/Graph.mjs +200 -54
  117. package/dist/esm/graphs/Graph.mjs.map +1 -1
  118. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  119. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +13 -7
  120. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  121. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  122. package/dist/esm/hooks/types.mjs.map +1 -1
  123. package/dist/esm/instrumentation.mjs +2 -2
  124. package/dist/esm/instrumentation.mjs.map +1 -1
  125. package/dist/esm/langfuse.mjs +17 -2
  126. package/dist/esm/langfuse.mjs.map +1 -1
  127. package/dist/esm/langfuseToolOutputTracing.mjs +2 -2
  128. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  129. package/dist/esm/llm/anthropic/index.mjs +1 -1
  130. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  131. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  132. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +1 -1
  133. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  134. package/dist/esm/llm/bedrock/index.mjs +2 -2
  135. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  136. package/dist/esm/llm/bedrock/toolCache.mjs +8 -5
  137. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  138. package/dist/esm/llm/fake.mjs +16 -14
  139. package/dist/esm/llm/fake.mjs.map +1 -1
  140. package/dist/esm/llm/google/index.mjs +23 -1
  141. package/dist/esm/llm/google/index.mjs.map +1 -1
  142. package/dist/esm/llm/google/utils/common.mjs +88 -27
  143. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  144. package/dist/esm/llm/init.mjs +2 -2
  145. package/dist/esm/llm/invoke.mjs +104 -7
  146. package/dist/esm/llm/invoke.mjs.map +1 -1
  147. package/dist/esm/llm/openai/index.mjs +1 -1
  148. package/dist/esm/llm/openai/index.mjs.map +1 -1
  149. package/dist/esm/llm/openai/utils/index.mjs +1 -1
  150. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  151. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  152. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  153. package/dist/esm/main.mjs +1 -1
  154. package/dist/esm/messages/cache.mjs +8 -7
  155. package/dist/esm/messages/cache.mjs.map +1 -1
  156. package/dist/esm/messages/content.mjs.map +1 -1
  157. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  158. package/dist/esm/messages/format.mjs +124 -18
  159. package/dist/esm/messages/format.mjs.map +1 -1
  160. package/dist/esm/messages/prune.mjs.map +1 -1
  161. package/dist/esm/messages/reducer.mjs +1 -1
  162. package/dist/esm/messages/reducer.mjs.map +1 -1
  163. package/dist/esm/messages/tools.mjs +1 -1
  164. package/dist/esm/messages/tools.mjs.map +1 -1
  165. package/dist/esm/openai/index.mjs.map +1 -1
  166. package/dist/esm/responses/index.mjs.map +1 -1
  167. package/dist/esm/run.mjs +41 -20
  168. package/dist/esm/run.mjs.map +1 -1
  169. package/dist/esm/session/AgentSession.mjs +4 -4
  170. package/dist/esm/session/AgentSession.mjs.map +1 -1
  171. package/dist/esm/session/JsonlSessionStore.mjs +2 -2
  172. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  173. package/dist/esm/session/handlers.mjs +2 -2
  174. package/dist/esm/session/handlers.mjs.map +1 -1
  175. package/dist/esm/stream.mjs +248 -25
  176. package/dist/esm/stream.mjs.map +1 -1
  177. package/dist/esm/summarization/node.mjs.map +1 -1
  178. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +1 -1
  179. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  180. package/dist/esm/tools/Calculator.mjs +1 -1
  181. package/dist/esm/tools/Calculator.mjs.map +1 -1
  182. package/dist/esm/tools/CodeExecutor.mjs +1 -1
  183. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  184. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  185. package/dist/esm/tools/ToolNode.mjs +37 -18
  186. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  187. package/dist/esm/tools/ToolSearch.mjs +1 -1
  188. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  189. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +7 -4
  190. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  191. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +4 -4
  192. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  193. package/dist/esm/tools/handlers.mjs +2 -1
  194. package/dist/esm/tools/handlers.mjs.map +1 -1
  195. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  196. package/dist/esm/tools/local/FileCheckpointer.mjs +2 -1
  197. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  198. package/dist/esm/tools/local/LocalCodingTools.mjs +45 -19
  199. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  200. package/dist/esm/tools/local/LocalExecutionEngine.mjs +3 -3
  201. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  202. package/dist/esm/tools/local/LocalExecutionTools.mjs +2 -2
  203. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  204. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +4 -3
  205. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  206. package/dist/esm/tools/local/attachments.mjs +0 -5
  207. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  208. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +4 -4
  209. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  210. package/dist/esm/tools/search/firecrawl.mjs +1 -1
  211. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  212. package/dist/esm/tools/search/rerankers.mjs +8 -4
  213. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  214. package/dist/esm/tools/search/tavily-search.mjs +1 -1
  215. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  216. package/dist/esm/tools/search/utils.mjs +76 -9
  217. package/dist/esm/tools/search/utils.mjs.map +1 -1
  218. package/dist/esm/tools/subagent/SubagentExecutor.mjs +1 -1
  219. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  220. package/dist/esm/utils/handlers.mjs +1 -1
  221. package/dist/esm/utils/handlers.mjs.map +1 -1
  222. package/dist/esm/utils/run.mjs +1 -1
  223. package/dist/esm/utils/run.mjs.map +1 -1
  224. package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +1 -1
  225. package/dist/types/events.d.ts +1 -1
  226. package/dist/types/graphs/Graph.d.ts +7 -1
  227. package/dist/types/hooks/executeHooks.d.ts +1 -1
  228. package/dist/types/hooks/types.d.ts +5 -0
  229. package/dist/types/langfuse.d.ts +4 -0
  230. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
  231. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
  232. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +2 -2
  233. package/dist/types/llm/bedrock/index.d.ts +2 -2
  234. package/dist/types/llm/fake.d.ts +3 -3
  235. package/dist/types/llm/google/index.d.ts +1 -0
  236. package/dist/types/llm/google/types.d.ts +1 -1
  237. package/dist/types/llm/google/utils/common.d.ts +2 -2
  238. package/dist/types/llm/google/utils/tools.d.ts +1 -1
  239. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +1 -1
  240. package/dist/types/llm/openai/index.d.ts +2 -2
  241. package/dist/types/llm/openai/utils/index.d.ts +1 -1
  242. package/dist/types/llm/openrouter/index.d.ts +4 -4
  243. package/dist/types/messages/contextPruning.d.ts +1 -1
  244. package/dist/types/messages/format.d.ts +9 -4
  245. package/dist/types/messages/prune.d.ts +1 -1
  246. package/dist/types/session/JsonlSessionStore.d.ts +1 -1
  247. package/dist/types/session/handlers.d.ts +1 -1
  248. package/dist/types/session/types.d.ts +1 -1
  249. package/dist/types/summarization/node.d.ts +1 -1
  250. package/dist/types/tools/SubagentTool.d.ts +2 -2
  251. package/dist/types/tools/ToolNode.d.ts +9 -2
  252. package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +1 -1
  253. package/dist/types/tools/search/types.d.ts +1 -1
  254. package/dist/types/tools/search/utils.d.ts +11 -0
  255. package/dist/types/types/graph.d.ts +4 -4
  256. package/dist/types/types/llm.d.ts +4 -3
  257. package/dist/types/types/messages.d.ts +1 -1
  258. package/dist/types/types/run.d.ts +6 -6
  259. package/dist/types/types/stream.d.ts +2 -2
  260. package/dist/types/types/tools.d.ts +5 -1
  261. package/dist/types/utils/handlers.d.ts +2 -2
  262. package/dist/types/utils/run.d.ts +1 -1
  263. package/package.json +6 -3
  264. package/src/__tests__/stream.eagerEventExecution.test.ts +543 -6
  265. package/src/agents/AgentContext.ts +2 -2
  266. package/src/agents/__tests__/AgentContext.test.ts +3 -3
  267. package/src/agents/__tests__/promptCacheLiveHelpers.ts +1 -1
  268. package/src/events.ts +1 -1
  269. package/src/graphs/Graph.ts +329 -72
  270. package/src/graphs/MultiAgentGraph.ts +1 -1
  271. package/src/graphs/__tests__/Graph.reasoning.test.ts +919 -6
  272. package/src/graphs/__tests__/MultiAgentGraph.test.ts +1 -1
  273. package/src/graphs/__tests__/composition.smoke.test.ts +1 -1
  274. package/src/hooks/__tests__/HookRegistry.test.ts +1 -1
  275. package/src/hooks/__tests__/compactHooks.test.ts +8 -8
  276. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +34 -22
  277. package/src/hooks/__tests__/executeHooks.test.ts +3 -3
  278. package/src/hooks/__tests__/integration.test.ts +3 -3
  279. package/src/hooks/__tests__/toolHooks.test.ts +10 -10
  280. package/src/hooks/createWorkspacePolicyHook.ts +17 -14
  281. package/src/hooks/executeHooks.ts +1 -1
  282. package/src/hooks/types.ts +5 -0
  283. package/src/instrumentation.ts +11 -11
  284. package/src/langfuse.ts +35 -1
  285. package/src/langfuseToolOutputTracing.ts +2 -2
  286. package/src/llm/anthropic/index.ts +1 -1
  287. package/src/llm/anthropic/utils/message_inputs.ts +1 -1
  288. package/src/llm/anthropic/utils/message_outputs.ts +3 -5
  289. package/src/llm/anthropic/utils/output_parsers.ts +5 -5
  290. package/src/llm/bedrock/index.ts +4 -4
  291. package/src/llm/bedrock/toolCache.test.ts +48 -9
  292. package/src/llm/bedrock/toolCache.ts +11 -6
  293. package/src/llm/fake.ts +30 -25
  294. package/src/llm/google/index.ts +43 -1
  295. package/src/llm/google/llm.spec.ts +173 -1
  296. package/src/llm/google/types.ts +1 -1
  297. package/src/llm/google/utils/common.ts +154 -45
  298. package/src/llm/google/utils/tools.ts +8 -8
  299. package/src/llm/google/utils/zod_to_genai_parameters.ts +4 -4
  300. package/src/llm/invoke.test.ts +3 -3
  301. package/src/llm/invoke.ts +170 -10
  302. package/src/llm/openai/index.ts +4 -4
  303. package/src/llm/openai/utils/index.ts +14 -14
  304. package/src/llm/openrouter/index.ts +4 -4
  305. package/src/llm/openrouter/reasoning.test.ts +2 -2
  306. package/src/llm/vertexai/fixThoughtSignatures.test.ts +1 -1
  307. package/src/llm/vertexai/index.ts +1 -1
  308. package/src/messages/cache.test.ts +22 -0
  309. package/src/messages/cache.ts +25 -12
  310. package/src/messages/content.ts +1 -1
  311. package/src/messages/contextPruning.ts +1 -1
  312. package/src/messages/format.ts +227 -43
  313. package/src/messages/formatAgentMessages.skills.test.ts +105 -26
  314. package/src/messages/formatAgentMessages.test.ts +841 -10
  315. package/src/messages/labelContentByAgent.test.ts +2 -2
  316. package/src/messages/prune.ts +1 -1
  317. package/src/messages/reducer.ts +1 -1
  318. package/src/messages/tools.ts +1 -1
  319. package/src/openai/__tests__/openai.test.ts +2 -2
  320. package/src/openai/index.ts +1 -1
  321. package/src/responses/__tests__/responses.test.ts +2 -2
  322. package/src/responses/index.ts +1 -1
  323. package/src/run.ts +68 -41
  324. package/src/session/AgentSession.ts +6 -6
  325. package/src/session/JsonlSessionStore.ts +3 -3
  326. package/src/session/__tests__/JsonlSessionStore.test.ts +5 -5
  327. package/src/session/__tests__/handlers.test.ts +2 -2
  328. package/src/session/handlers.ts +5 -5
  329. package/src/session/types.ts +1 -1
  330. package/src/specs/agent-handoffs.test.ts +1 -1
  331. package/src/specs/langfuse-callbacks.test.ts +2 -2
  332. package/src/specs/langfuse-metadata.test.ts +39 -0
  333. package/src/specs/langfuse-tool-output-tracing.test.ts +1 -1
  334. package/src/specs/multi-agent-summarization.test.ts +4 -4
  335. package/src/specs/subagent.test.ts +3 -3
  336. package/src/specs/summarization-unit.test.ts +1 -1
  337. package/src/specs/thinking-handoff.test.ts +1 -1
  338. package/src/splitStream.test.ts +48 -0
  339. package/src/stream.test.ts +53 -3
  340. package/src/stream.ts +450 -39
  341. package/src/summarization/__tests__/aggregator.test.ts +2 -2
  342. package/src/summarization/__tests__/node.test.ts +2 -2
  343. package/src/summarization/node.ts +1 -1
  344. package/src/tools/BashProgrammaticToolCalling.ts +5 -5
  345. package/src/tools/Calculator.ts +1 -1
  346. package/src/tools/CodeExecutor.ts +2 -4
  347. package/src/tools/SubagentTool.ts +2 -2
  348. package/src/tools/ToolNode.ts +37 -16
  349. package/src/tools/ToolSearch.ts +1 -1
  350. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +4 -4
  351. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +12 -12
  352. package/src/tools/__tests__/LocalExecutionTools.test.ts +125 -93
  353. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +29 -5
  354. package/src/tools/__tests__/ReadFile.test.ts +1 -1
  355. package/src/tools/__tests__/SkillTool.test.ts +4 -4
  356. package/src/tools/__tests__/SubagentExecutor.test.ts +17 -13
  357. package/src/tools/__tests__/SubagentTool.test.ts +2 -2
  358. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +1 -1
  359. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +2 -5
  360. package/src/tools/__tests__/ToolNode.session.test.ts +1 -1
  361. package/src/tools/__tests__/ToolSearch.test.ts +1 -1
  362. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +1 -1
  363. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +35 -32
  364. package/src/tools/__tests__/directToolHooks.test.ts +41 -0
  365. package/src/tools/__tests__/handlers.test.ts +2 -2
  366. package/src/tools/__tests__/hitl.test.ts +11 -11
  367. package/src/tools/__tests__/localToolNames.test.ts +8 -6
  368. package/src/tools/__tests__/skillCatalog.test.ts +1 -1
  369. package/src/tools/__tests__/subagentHooks.test.ts +20 -10
  370. package/src/tools/__tests__/workspaceSeam.test.ts +20 -7
  371. package/src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts +9 -6
  372. package/src/tools/cloudflare/CloudflareSandboxTools.ts +19 -19
  373. package/src/tools/handlers.ts +5 -5
  374. package/src/tools/local/CompileCheckTool.ts +4 -7
  375. package/src/tools/local/FileCheckpointer.ts +6 -5
  376. package/src/tools/local/LocalCodingTools.ts +100 -45
  377. package/src/tools/local/LocalExecutionEngine.ts +5 -5
  378. package/src/tools/local/LocalExecutionTools.ts +9 -9
  379. package/src/tools/local/LocalProgrammaticToolCalling.ts +5 -4
  380. package/src/tools/local/attachments.ts +0 -6
  381. package/src/tools/local/resolveLocalExecutionTools.ts +15 -15
  382. package/src/tools/search/firecrawl.ts +1 -1
  383. package/src/tools/search/jina-reranker.test.ts +148 -37
  384. package/src/tools/search/rerankers.ts +14 -4
  385. package/src/tools/search/tavily-search.ts +2 -2
  386. package/src/tools/search/types.ts +1 -1
  387. package/src/tools/search/utils.ts +99 -9
  388. package/src/tools/subagent/SubagentExecutor.ts +12 -6
  389. package/src/types/graph.ts +12 -12
  390. package/src/types/llm.ts +7 -6
  391. package/src/types/messages.ts +1 -1
  392. package/src/types/run.ts +7 -7
  393. package/src/types/stream.ts +2 -2
  394. package/src/types/tools.ts +5 -1
  395. package/src/utils/handlers.ts +2 -2
  396. package/src/utils/llmConfig.ts +1 -1
  397. package/src/utils/logging.ts +20 -10
  398. package/src/utils/run.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.cjs","sources":["../../../src/session/handlers.ts"],"sourcesContent":["import type { UsageMetadata } from '@langchain/core/messages';\nimport { GraphEvents } from '@/common';\nimport { ModelEndHandler, ToolEndHandler } from '@/events';\nimport { createContentAggregator } from '@/stream';\nimport type * as t from '@/types';\nimport type {\n AgentSessionHandlersResult,\n AgentSessionStreamEvent,\n AgentSessionUsage,\n} from './types';\nimport { createTimestamp } from './ids';\nimport { toJsonValue } from './messageSerialization';\n\ntype CompletedRunStepResult =\n | t.ToolEndEvent\n | (t.SummaryCompleted & { id: string; index: number });\n\nfunction isToolCompletion(\n result: CompletedRunStepResult\n): result is t.ToolEndEvent {\n return 'tool_call' in result;\n}\n\nfunction createEventFactory(params: {\n runId: string;\n threadId: string;\n}): (\n type: AgentSessionStreamEvent['type'],\n data?: unknown\n) => AgentSessionStreamEvent {\n let sequence = 0;\n return (type, data) => ({\n type,\n sequence: sequence++,\n runId: params.runId,\n threadId: params.threadId,\n timestamp: createTimestamp(),\n ...(typeof data !== 'undefined' ? { data: toJsonValue(data) } : {}),\n });\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction updateUsage(usage: AgentSessionUsage, data: t.ModelEndData): void {\n const metadata = data?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!metadata) {\n return;\n }\n const inputTokens = getTokenCount(metadata.input_tokens);\n const outputTokens = getTokenCount(metadata.output_tokens);\n const totalTokens =\n metadata.total_tokens == null\n ? inputTokens + outputTokens\n : getTokenCount(metadata.total_tokens);\n usage.inputTokens += inputTokens;\n usage.outputTokens += outputTokens;\n usage.totalTokens += totalTokens;\n}\n\nasync function callUserHandler(params: {\n userHandlers?: Record<string, t.EventHandler>;\n event: string;\n data: Parameters<t.EventHandler['handle']>[1];\n metadata?: Record<string, unknown>;\n graph?: Parameters<t.EventHandler['handle']>[3];\n}): Promise<void> {\n const handler = params.userHandlers?.[params.event];\n if (!handler) {\n return;\n }\n await handler.handle(\n params.event,\n params.data,\n params.metadata,\n params.graph\n );\n}\n\nexport function createRunHandlers(params: {\n runId: string;\n threadId: string;\n userHandlers?: Record<string, t.EventHandler>;\n onEvent?: (event: AgentSessionStreamEvent) => void;\n}): AgentSessionHandlersResult {\n const { contentParts, aggregateContent } = createContentAggregator();\n const steps: t.RunStep[] = [];\n const usage: AgentSessionUsage = {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n };\n const events: AgentSessionStreamEvent[] = [];\n const createEvent = createEventFactory({\n runId: params.runId,\n threadId: params.threadId,\n });\n const emitEvent = (event: AgentSessionStreamEvent): void => {\n events.push(event);\n params.onEvent?.(event);\n };\n const toolEndHandler = new ToolEndHandler();\n const modelEndHandler = new ModelEndHandler();\n\n emitEvent(createEvent('run.started'));\n\n const handlers: Record<string, t.EventHandler> = {\n [GraphEvents.CHAT_MODEL_STREAM]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n await modelEndHandler.handle(\n event,\n data as t.ModelEndData,\n metadata,\n graph\n );\n updateUsage(usage, data as t.ModelEndData);\n emitEvent(createEvent('usage.updated', usage));\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.TOOL_END]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n await toolEndHandler.handle(\n event,\n data as t.StreamEventData,\n metadata,\n graph\n );\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const runStep = data as t.RunStep;\n steps.push(runStep);\n aggregateContent({ event: GraphEvents.ON_RUN_STEP, data: runStep });\n if (runStep.stepDetails.type === 'tool_calls') {\n emitEvent(createEvent('tool.started', runStep));\n }\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const delta = data as t.RunStepDeltaEvent;\n aggregateContent({ event: GraphEvents.ON_RUN_STEP_DELTA, data: delta });\n emitEvent(createEvent('tool.delta', delta));\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_RUN_STEP_COMPLETED]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const completed = data as unknown as { result: CompletedRunStepResult };\n aggregateContent({\n event: GraphEvents.ON_RUN_STEP_COMPLETED,\n data: completed as { result: t.ToolEndEvent },\n });\n if (isToolCompletion(completed.result)) {\n emitEvent(createEvent('tool.completed', completed));\n }\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const delta = data as t.MessageDeltaEvent;\n aggregateContent({ event: GraphEvents.ON_MESSAGE_DELTA, data: delta });\n emitEvent(createEvent('message.delta', delta));\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const delta = data as t.ReasoningDeltaEvent;\n aggregateContent({\n event: GraphEvents.ON_REASONING_DELTA,\n data: delta,\n });\n emitEvent(createEvent('reasoning.delta', delta));\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_SUMMARIZE_DELTA]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n aggregateContent({\n event: GraphEvents.ON_SUMMARIZE_DELTA,\n data: data as t.SummarizeDeltaData,\n });\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_SUMMARIZE_COMPLETE]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n aggregateContent({\n event: GraphEvents.ON_SUMMARIZE_COMPLETE,\n data: data as t.SummarizeCompleteEvent,\n });\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n };\n\n return { contentParts, steps, usage, events, handlers };\n}\n"],"names":["createTimestamp","toJsonValue","createContentAggregator","events","ToolEndHandler","ModelEndHandler","GraphEvents"],"mappings":";;;;;;;;AAiBA,SAAS,gBAAgB,CACvB,MAA8B,EAAA;IAE9B,OAAO,WAAW,IAAI,MAAM;AAC9B;AAEA,SAAS,kBAAkB,CAAC,MAG3B,EAAA;IAIC,IAAI,QAAQ,GAAG,CAAC;AAChB,IAAA,OAAO,CAAC,IAAI,EAAE,IAAI,MAAM;QACtB,IAAI;QACJ,QAAQ,EAAE,QAAQ,EAAE;QACpB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAEA,mBAAe,EAAE;QAC5B,IAAI,OAAO,IAAI,KAAK,WAAW,GAAG,EAAE,IAAI,EAAEC,gCAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;AACpE,KAAA,CAAC;AACJ;AAEA,SAAS,aAAa,CAAC,KAAgC,EAAA;AACrD,IAAA,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;AACxE;AAEA,SAAS,WAAW,CAAC,KAAwB,EAAE,IAAoB,EAAA;AACjE,IAAA,MAAM,QAAQ,GAAG,IAAI,EAAE,MAAM,EAAE,cAElB;IACb,IAAI,CAAC,QAAQ,EAAE;QACb;IACF;IACA,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;IACxD,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC1D,IAAA,MAAM,WAAW,GACf,QAAQ,CAAC,YAAY,IAAI;UACrB,WAAW,GAAG;AAChB,UAAE,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC1C,IAAA,KAAK,CAAC,WAAW,IAAI,WAAW;AAChC,IAAA,KAAK,CAAC,YAAY,IAAI,YAAY;AAClC,IAAA,KAAK,CAAC,WAAW,IAAI,WAAW;AAClC;AAEA,eAAe,eAAe,CAAC,MAM9B,EAAA;IACC,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE;QACZ;IACF;IACA,MAAM,OAAO,CAAC,MAAM,CAClB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,KAAK,CACb;AACH;AAEM,SAAU,iBAAiB,CAAC,MAKjC,EAAA;IACC,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAGC,8BAAuB,EAAE;IACpE,MAAM,KAAK,GAAgB,EAAE;AAC7B,IAAA,MAAM,KAAK,GAAsB;AAC/B,QAAA,WAAW,EAAE,CAAC;AACd,QAAA,YAAY,EAAE,CAAC;AACf,QAAA,WAAW,EAAE,CAAC;KACf;IACD,MAAMC,QAAM,GAA8B,EAAE;IAC5C,MAAM,WAAW,GAAG,kBAAkB,CAAC;QACrC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC1B,KAAA,CAAC;AACF,IAAA,MAAM,SAAS,GAAG,CAAC,KAA8B,KAAU;AACzD,QAAAA,QAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClB,QAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;AACzB,IAAA,CAAC;AACD,IAAA,MAAM,cAAc,GAAG,IAAIC,qBAAc,EAAE;AAC3C,IAAA,MAAM,eAAe,GAAG,IAAIC,sBAAe,EAAE;AAE7C,IAAA,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAErC,IAAA,MAAM,QAAQ,GAAmC;AAC/C,QAAA,CAACC,iBAAW,CAAC,iBAAiB,GAAG;YAC/B,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;AAC5D,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,cAAc,GAAG;YAC5B,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;AAC5D,gBAAA,MAAM,eAAe,CAAC,MAAM,CAC1B,KAAK,EACL,IAAsB,EACtB,QAAQ,EACR,KAAK,CACN;AACD,gBAAA,WAAW,CAAC,KAAK,EAAE,IAAsB,CAAC;gBAC1C,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC9C,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,QAAQ,GAAG;YACtB,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;AAC5D,gBAAA,MAAM,cAAc,CAAC,MAAM,CACzB,KAAK,EACL,IAAyB,EACzB,QAAQ,EACR,KAAK,CACN;AACD,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,WAAW,GAAG;YACzB,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;gBAC5D,MAAM,OAAO,GAAG,IAAiB;AACjC,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;AACnB,gBAAA,gBAAgB,CAAC,EAAE,KAAK,EAAEA,iBAAW,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBACnE,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE;oBAC7C,SAAS,CAAC,WAAW,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBACjD;AACA,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,iBAAiB,GAAG;YAC/B,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;gBAC5D,MAAM,KAAK,GAAG,IAA2B;AACzC,gBAAA,gBAAgB,CAAC,EAAE,KAAK,EAAEA,iBAAW,CAAC,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACvE,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC3C,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,qBAAqB,GAAG;YACnC,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;gBAC5D,MAAM,SAAS,GAAG,IAAqD;AACvE,gBAAA,gBAAgB,CAAC;oBACf,KAAK,EAAEA,iBAAW,CAAC,qBAAqB;AACxC,oBAAA,IAAI,EAAE,SAAuC;AAC9C,iBAAA,CAAC;AACF,gBAAA,IAAI,gBAAgB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;oBACtC,SAAS,CAAC,WAAW,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;gBACrD;AACA,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,gBAAgB,GAAG;YAC9B,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;gBAC5D,MAAM,KAAK,GAAG,IAA2B;AACzC,gBAAA,gBAAgB,CAAC,EAAE,KAAK,EAAEA,iBAAW,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACtE,SAAS,CAAC,WAAW,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC9C,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,kBAAkB,GAAG;YAChC,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;gBAC5D,MAAM,KAAK,GAAG,IAA6B;AAC3C,gBAAA,gBAAgB,CAAC;oBACf,KAAK,EAAEA,iBAAW,CAAC,kBAAkB;AACrC,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA,CAAC;gBACF,SAAS,CAAC,WAAW,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAChD,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,kBAAkB,GAAG;YAChC,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;AAC5D,gBAAA,gBAAgB,CAAC;oBACf,KAAK,EAAEA,iBAAW,CAAC,kBAAkB;AACrC,oBAAA,IAAI,EAAE,IAA4B;AACnC,iBAAA,CAAC;AACF,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;AACD,QAAA,CAACA,iBAAW,CAAC,qBAAqB,GAAG;YACnC,MAAM,EAAE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,KAAmB;AAC5D,gBAAA,gBAAgB,CAAC;oBACf,KAAK,EAAEA,iBAAW,CAAC,qBAAqB;AACxC,oBAAA,IAAI,EAAE,IAAgC;AACvC,iBAAA,CAAC;AACF,gBAAA,MAAM,eAAe,CAAC;oBACpB,YAAY,EAAE,MAAM,CAAC,YAAY;oBACjC,KAAK;oBACL,IAAI;oBACJ,QAAQ;oBACR,KAAK;AACN,iBAAA,CAAC;YACJ,CAAC;AACF,SAAA;KACF;IAED,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,UAAEH,QAAM,EAAE,QAAQ,EAAE;AACzD;;;;"}
1
+ {"version":3,"file":"handlers.cjs","sources":["../../../src/session/handlers.ts"],"sourcesContent":["import type { UsageMetadata } from '@langchain/core/messages';\nimport type {\n AgentSessionHandlersResult,\n AgentSessionStreamEvent,\n AgentSessionUsage,\n} from './types';\nimport type * as t from '@/types';\nimport { ModelEndHandler, ToolEndHandler } from '@/events';\nimport { toJsonValue } from './messageSerialization';\nimport { createContentAggregator } from '@/stream';\nimport { createTimestamp } from './ids';\nimport { GraphEvents } from '@/common';\n\ntype CompletedRunStepResult =\n | t.ToolEndEvent\n | (t.SummaryCompleted & { id: string; index: number });\n\nfunction isToolCompletion(\n result: CompletedRunStepResult\n): result is t.ToolEndEvent {\n return 'tool_call' in result;\n}\n\nfunction createEventFactory(params: {\n runId: string;\n threadId: string;\n}): (\n type: AgentSessionStreamEvent['type'],\n data?: unknown\n) => AgentSessionStreamEvent {\n let sequence = 0;\n return (type, data) => ({\n type,\n sequence: sequence++,\n runId: params.runId,\n threadId: params.threadId,\n timestamp: createTimestamp(),\n ...(typeof data !== 'undefined' ? { data: toJsonValue(data) } : {}),\n });\n}\n\nfunction getTokenCount(value: number | null | undefined): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : 0;\n}\n\nfunction updateUsage(usage: AgentSessionUsage, data: t.ModelEndData): void {\n const metadata = data?.output?.usage_metadata as\n | Partial<UsageMetadata>\n | undefined;\n if (!metadata) {\n return;\n }\n const inputTokens = getTokenCount(metadata.input_tokens);\n const outputTokens = getTokenCount(metadata.output_tokens);\n const totalTokens =\n metadata.total_tokens == null\n ? inputTokens + outputTokens\n : getTokenCount(metadata.total_tokens);\n usage.inputTokens += inputTokens;\n usage.outputTokens += outputTokens;\n usage.totalTokens += totalTokens;\n}\n\nasync function callUserHandler(params: {\n userHandlers?: Record<string, t.EventHandler>;\n event: string;\n data: Parameters<t.EventHandler['handle']>[1];\n metadata?: Record<string, unknown>;\n graph?: Parameters<t.EventHandler['handle']>[3];\n}): Promise<void> {\n const handler = params.userHandlers?.[params.event];\n if (!handler) {\n return;\n }\n await handler.handle(\n params.event,\n params.data,\n params.metadata,\n params.graph\n );\n}\n\nexport function createRunHandlers(params: {\n runId: string;\n threadId: string;\n userHandlers?: Record<string, t.EventHandler>;\n onEvent?: (event: AgentSessionStreamEvent) => void;\n}): AgentSessionHandlersResult {\n const { contentParts, aggregateContent } = createContentAggregator();\n const steps: t.RunStep[] = [];\n const usage: AgentSessionUsage = {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n };\n const events: AgentSessionStreamEvent[] = [];\n const createEvent = createEventFactory({\n runId: params.runId,\n threadId: params.threadId,\n });\n const emitEvent = (event: AgentSessionStreamEvent): void => {\n events.push(event);\n params.onEvent?.(event);\n };\n const toolEndHandler = new ToolEndHandler();\n const modelEndHandler = new ModelEndHandler();\n\n emitEvent(createEvent('run.started'));\n\n const handlers: Record<string, t.EventHandler> = {\n [GraphEvents.CHAT_MODEL_STREAM]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.CHAT_MODEL_END]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n await modelEndHandler.handle(\n event,\n data as t.ModelEndData,\n metadata,\n graph\n );\n updateUsage(usage, data as t.ModelEndData);\n emitEvent(createEvent('usage.updated', usage));\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.TOOL_END]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n await toolEndHandler.handle(\n event,\n data as t.StreamEventData,\n metadata,\n graph\n );\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_RUN_STEP]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const runStep = data as t.RunStep;\n steps.push(runStep);\n aggregateContent({ event: GraphEvents.ON_RUN_STEP, data: runStep });\n if (runStep.stepDetails.type === 'tool_calls') {\n emitEvent(createEvent('tool.started', runStep));\n }\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_RUN_STEP_DELTA]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const delta = data as t.RunStepDeltaEvent;\n aggregateContent({ event: GraphEvents.ON_RUN_STEP_DELTA, data: delta });\n emitEvent(createEvent('tool.delta', delta));\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_RUN_STEP_COMPLETED]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const completed = data as unknown as { result: CompletedRunStepResult };\n aggregateContent({\n event: GraphEvents.ON_RUN_STEP_COMPLETED,\n data: completed as { result: t.ToolEndEvent },\n });\n if (isToolCompletion(completed.result)) {\n emitEvent(createEvent('tool.completed', completed));\n }\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_MESSAGE_DELTA]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const delta = data as t.MessageDeltaEvent;\n aggregateContent({ event: GraphEvents.ON_MESSAGE_DELTA, data: delta });\n emitEvent(createEvent('message.delta', delta));\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_REASONING_DELTA]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n const delta = data as t.ReasoningDeltaEvent;\n aggregateContent({\n event: GraphEvents.ON_REASONING_DELTA,\n data: delta,\n });\n emitEvent(createEvent('reasoning.delta', delta));\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_SUMMARIZE_DELTA]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n aggregateContent({\n event: GraphEvents.ON_SUMMARIZE_DELTA,\n data: data as t.SummarizeDeltaData,\n });\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n [GraphEvents.ON_SUMMARIZE_COMPLETE]: {\n handle: async (event, data, metadata, graph): Promise<void> => {\n aggregateContent({\n event: GraphEvents.ON_SUMMARIZE_COMPLETE,\n data: data as t.SummarizeCompleteEvent,\n });\n await callUserHandler({\n userHandlers: params.userHandlers,\n event,\n data,\n metadata,\n graph,\n });\n },\n },\n };\n\n return { contentParts, steps, usage, events, handlers };\n}\n"],"names":["createTimestamp","toJsonValue","createContentAggregator","events","ToolEndHandler","ModelEndHandler","GraphEvents"],"mappings":"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"}
@@ -1,16 +1,18 @@
1
1
  'use strict';
2
2
 
3
3
  var _enum = require('./common/enum.cjs');
4
+ var streamedToolCallSeals = require('./tools/streamedToolCallSeals.cjs');
5
+ var eagerEventExecution = require('./tools/eagerEventExecution.cjs');
4
6
  var handlers = require('./tools/handlers.cjs');
7
+ var truncation = require('./utils/truncation.cjs');
8
+ var toolOutputReferences = require('./tools/toolOutputReferences.cjs');
9
+ var events = require('./utils/events.cjs');
10
+ var llm = require('./utils/llm.cjs');
5
11
  require('./messages/core.cjs');
6
12
  var ids = require('./messages/ids.cjs');
7
13
  require('@langchain/core/messages');
8
- var truncation = require('./utils/truncation.cjs');
9
- var events = require('./utils/events.cjs');
14
+ require('node:crypto');
10
15
  require('uuid');
11
- var eagerEventExecution = require('./tools/eagerEventExecution.cjs');
12
- var streamedToolCallSeals = require('./tools/streamedToolCallSeals.cjs');
13
- var toolOutputReferences = require('./tools/toolOutputReferences.cjs');
14
16
 
15
17
  const LOCAL_CODING_BUNDLE_NAME_SET = new Set(_enum.LOCAL_CODING_BUNDLE_NAMES);
16
18
  /**
@@ -206,6 +208,120 @@ function hasDirectToolCallChunkStateInStep(args) {
206
208
  }
207
209
  return false;
208
210
  }
211
+ function isGoogleServerSideToolContentPart(contentPart) {
212
+ return contentPart.type === 'toolCall' || contentPart.type === 'toolResponse';
213
+ }
214
+ function isTextContentPart(contentPart) {
215
+ return contentPart.type?.startsWith(_enum.ContentTypes.TEXT) ?? false;
216
+ }
217
+ function isReasoningContentPart(contentPart) {
218
+ return ((contentPart.type?.startsWith(_enum.ContentTypes.THINKING) ?? false) ||
219
+ (contentPart.type?.startsWith(_enum.ContentTypes.REASONING) ?? false) ||
220
+ (contentPart.type?.startsWith(_enum.ContentTypes.REASONING_CONTENT) ?? false) ||
221
+ contentPart.type === 'redacted_thinking');
222
+ }
223
+ function getReasoningTextFromContentPart(contentPart) {
224
+ return (contentPart.thinking ??
225
+ contentPart.reasoning ??
226
+ contentPart.reasoningText
227
+ ?.text ??
228
+ '');
229
+ }
230
+ function getReasoningTextFromChunk(chunk, agentContext) {
231
+ const reasoning = chunk.additional_kwargs?.[agentContext.reasoningKey];
232
+ if (typeof reasoning === 'string') {
233
+ return reasoning;
234
+ }
235
+ return reasoning?.summary?.[0]?.text ?? '';
236
+ }
237
+ const googleServerSideToolStepIdsByGraph = new WeakMap();
238
+ function markGoogleServerSideToolMessageStep(graph, stepId) {
239
+ const stepIds = googleServerSideToolStepIdsByGraph.get(graph) ?? new Set();
240
+ stepIds.add(stepId);
241
+ googleServerSideToolStepIdsByGraph.set(graph, stepIds);
242
+ }
243
+ function isGoogleServerSideToolMessageStep(graph, stepId) {
244
+ return googleServerSideToolStepIdsByGraph.get(graph)?.has(stepId) === true;
245
+ }
246
+ function shouldStartFreshMessageStepAfterGoogleServerSideTool({ graph, stepId, runStep, content, }) {
247
+ if (runStep?.type !== _enum.StepTypes.MESSAGE_CREATION ||
248
+ !isGoogleServerSideToolMessageStep(graph, stepId)) {
249
+ return false;
250
+ }
251
+ if (typeof content === 'string') {
252
+ return true;
253
+ }
254
+ return (content.every((c) => isTextContentPart(c)) ||
255
+ content.every((c) => isReasoningContentPart(c)));
256
+ }
257
+ async function dispatchMessageCreationStep({ graph, stepKey, metadata, }) {
258
+ const messageId = ids.getMessageId(stepKey, graph, true) ?? '';
259
+ return graph.dispatchRunStep(stepKey, {
260
+ type: _enum.StepTypes.MESSAGE_CREATION,
261
+ message_creation: {
262
+ message_id: messageId,
263
+ },
264
+ }, metadata);
265
+ }
266
+ async function dispatchMessageContentParts({ graph, stepKey, content, metadata, }) {
267
+ for (const contentPart of content) {
268
+ const currentStepId = await dispatchMessageCreationStep({
269
+ graph,
270
+ stepKey,
271
+ metadata,
272
+ });
273
+ if (isGoogleServerSideToolContentPart(contentPart)) {
274
+ markGoogleServerSideToolMessageStep(graph, currentStepId);
275
+ }
276
+ await graph.dispatchMessageDelta(currentStepId, {
277
+ content: [contentPart],
278
+ }, metadata);
279
+ }
280
+ }
281
+ async function dispatchReasoningContentParts({ graph, stepKey, content, metadata, }) {
282
+ if (content.length === 0) {
283
+ return;
284
+ }
285
+ const currentStepId = await dispatchMessageCreationStep({
286
+ graph,
287
+ stepKey,
288
+ metadata,
289
+ });
290
+ await graph.dispatchReasoningDelta(currentStepId, {
291
+ content,
292
+ }, metadata);
293
+ }
294
+ async function dispatchGoogleServerSideToolStreamContent({ graph, stepKey, chunk, agentContext, content, metadata, }) {
295
+ const reasoningContent = [];
296
+ const reasoningText = getReasoningTextFromChunk(chunk, agentContext);
297
+ if (reasoningText !== '') {
298
+ reasoningContent.push({
299
+ type: _enum.ContentTypes.THINK,
300
+ think: reasoningText,
301
+ });
302
+ }
303
+ reasoningContent.push(...content
304
+ .filter((contentPart) => isReasoningContentPart(contentPart))
305
+ .map((contentPart) => ({
306
+ type: _enum.ContentTypes.THINK,
307
+ think: getReasoningTextFromContentPart(contentPart),
308
+ }))
309
+ .filter((contentPart) => contentPart.think !== ''));
310
+ await dispatchReasoningContentParts({
311
+ graph,
312
+ stepKey,
313
+ content: reasoningContent,
314
+ metadata,
315
+ });
316
+ const messageContent = content.filter((contentPart) => isTextContentPart(contentPart) ||
317
+ isGoogleServerSideToolContentPart(contentPart));
318
+ await dispatchMessageContentParts({
319
+ graph,
320
+ stepKey,
321
+ content: messageContent,
322
+ metadata,
323
+ });
324
+ }
209
325
  function createEagerToolExecutionPlan(args) {
210
326
  const { graph, metadata, agentContext, toolCalls, skipExisting = false, } = args;
211
327
  if (!isEagerToolExecutionEnabledForBatch({
@@ -595,21 +711,16 @@ function startReadyStreamedEagerToolExecutions(args) {
595
711
  });
596
712
  }
597
713
  function getChunkContent({ chunk, provider, reasoningKey, }) {
714
+ if (llm.isGoogleLike(provider) &&
715
+ Array.isArray(chunk?.content) &&
716
+ chunk.content.some((c) => isGoogleServerSideToolContentPart(c))) {
717
+ return chunk.content;
718
+ }
598
719
  if ((provider === _enum.Providers.OPENAI || provider === _enum.Providers.AZURE) &&
599
720
  chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text != null &&
600
721
  (chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text?.length ?? 0) > 0) {
601
722
  return chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text;
602
723
  }
603
- /**
604
- * For OpenRouter, reasoning is stored in additional_kwargs.reasoning (not reasoning_content).
605
- * NOTE: We intentionally do NOT extract text from reasoning_details here.
606
- * The reasoning_details array contains the FULL accumulated reasoning text (set only on final chunk),
607
- * but individual reasoning tokens are already streamed via additional_kwargs.reasoning.
608
- * Extracting from reasoning_details would cause duplication.
609
- * The reasoning_details is only used for:
610
- * 1. Detecting reasoning mode in handleReasoning()
611
- * 2. Final message storage (for thought signatures)
612
- */
613
724
  if (provider === _enum.Providers.OPENROUTER) {
614
725
  // Content presence signals end of reasoning phase - prefer content over reasoning
615
726
  // This handles transitional chunks that may have both reasoning and content
@@ -620,10 +731,84 @@ function getChunkContent({ chunk, provider, reasoningKey, }) {
620
731
  if (reasoning != null && reasoning !== '') {
621
732
  return reasoning;
622
733
  }
734
+ const reasoningContent = chunk?.additional_kwargs?.reasoning_content;
735
+ if (reasoningContent != null && reasoningContent !== '') {
736
+ return reasoningContent;
737
+ }
623
738
  return chunk?.content;
624
739
  }
625
- return ((chunk?.additional_kwargs?.[reasoningKey] ?? '') ||
626
- chunk?.content);
740
+ const keyedReasoning = chunk?.additional_kwargs?.[reasoningKey];
741
+ if (typeof chunk?.content === 'string' &&
742
+ chunk.content !== '' &&
743
+ keyedReasoning != null &&
744
+ keyedReasoning !== '') {
745
+ return chunk.content;
746
+ }
747
+ return (keyedReasoning ?? '') || chunk?.content;
748
+ }
749
+ function isDisableStreamingEnabled(clientOptions) {
750
+ return (clientOptions != null &&
751
+ 'disableStreaming' in clientOptions &&
752
+ clientOptions.disableStreaming === true);
753
+ }
754
+ function hasReasoningContent(value) {
755
+ if (typeof value === 'string') {
756
+ return value !== '';
757
+ }
758
+ if (Array.isArray(value)) {
759
+ return value.length > 0;
760
+ }
761
+ if (value == null) {
762
+ return false;
763
+ }
764
+ return (value.summary?.some((summary) => summary.text != null && summary.text.length > 0) === true);
765
+ }
766
+ function shouldDeferMixedFinalReasoningChunk({ chunk, agentContext, }) {
767
+ if ((chunk.tool_calls?.length ?? 0) > 0 ||
768
+ (chunk.tool_call_chunks?.length ?? 0) > 0 ||
769
+ typeof chunk.content !== 'string' ||
770
+ chunk.content === '') {
771
+ return false;
772
+ }
773
+ const additionalKwargs = chunk.additional_kwargs;
774
+ if (agentContext.provider === _enum.Providers.OPENROUTER &&
775
+ hasReasoningContent(additionalKwargs?.reasoning_details)) {
776
+ return true;
777
+ }
778
+ if (!isDisableStreamingEnabled(agentContext.clientOptions)) {
779
+ return false;
780
+ }
781
+ return (hasReasoningContent(additionalKwargs?.[agentContext.reasoningKey]) ||
782
+ hasReasoningContent(additionalKwargs?.reasoning_content) ||
783
+ hasReasoningContent(additionalKwargs?.reasoning) ||
784
+ hasReasoningContent(additionalKwargs?.reasoning_details));
785
+ }
786
+ function hasCurrentTextDeltaStep({ graph, metadata, }) {
787
+ if (metadata == null) {
788
+ return false;
789
+ }
790
+ const baseStepKey = graph.getStepBaseKey(metadata);
791
+ for (const [stepKey, stepIds] of graph.stepKeyIds) {
792
+ if (stepKey !== baseStepKey && !stepKey.startsWith(`${baseStepKey}_`)) {
793
+ continue;
794
+ }
795
+ if (stepIds.some((stepId) => graph.messageStepHasTextDeltas.has(stepId))) {
796
+ return true;
797
+ }
798
+ }
799
+ return false;
800
+ }
801
+ function shouldSkipLateOpenRouterReasoningChunk({ chunk, agentContext, graph, metadata, }) {
802
+ if (agentContext.provider !== _enum.Providers.OPENROUTER ||
803
+ (chunk.tool_calls?.length ?? 0) > 0 ||
804
+ (chunk.tool_call_chunks?.length ?? 0) > 0 ||
805
+ (chunk.content != null && chunk.content !== '')) {
806
+ return false;
807
+ }
808
+ return ((hasReasoningContent(chunk.additional_kwargs?.reasoning) ||
809
+ hasReasoningContent(chunk.additional_kwargs?.reasoning_content) ||
810
+ hasReasoningContent(chunk.additional_kwargs?.reasoning_details)) &&
811
+ hasCurrentTextDeltaStep({ graph, metadata }));
627
812
  }
628
813
  class ChatModelStreamHandler {
629
814
  async handle(event, data, metadata, graph) {
@@ -653,10 +838,34 @@ class ChatModelStreamHandler {
653
838
  if (skipHandling) {
654
839
  return;
655
840
  }
841
+ if (shouldDeferMixedFinalReasoningChunk({ chunk, agentContext })) {
842
+ return;
843
+ }
844
+ if (shouldSkipLateOpenRouterReasoningChunk({
845
+ chunk,
846
+ agentContext,
847
+ graph,
848
+ metadata,
849
+ })) {
850
+ return;
851
+ }
656
852
  this.handleReasoning(chunk, agentContext);
657
853
  const stepKey = graph.getStepKey(metadata);
658
854
  let hasToolCalls = false;
659
855
  const hasToolCallChunks = (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) ?? false;
856
+ const hasGoogleServerSideToolContent = llm.isGoogleLike(agentContext.provider) &&
857
+ Array.isArray(content) &&
858
+ content.some((c) => isGoogleServerSideToolContentPart(c));
859
+ if (hasGoogleServerSideToolContent && Array.isArray(content)) {
860
+ await dispatchGoogleServerSideToolStreamContent({
861
+ graph,
862
+ stepKey,
863
+ chunk,
864
+ agentContext,
865
+ content,
866
+ metadata,
867
+ });
868
+ }
660
869
  if (chunk.tool_calls &&
661
870
  chunk.tool_calls.length > 0 &&
662
871
  chunk.tool_calls.every((tc) => tc.id != null &&
@@ -729,6 +938,9 @@ class ChatModelStreamHandler {
729
938
  if (isEmptyContent) {
730
939
  return;
731
940
  }
941
+ if (hasGoogleServerSideToolContent) {
942
+ return;
943
+ }
732
944
  const message_id = ids.getMessageId(stepKey, graph) ?? '';
733
945
  if (message_id) {
734
946
  await graph.dispatchRunStep(stepKey, {
@@ -738,8 +950,17 @@ class ChatModelStreamHandler {
738
950
  },
739
951
  }, metadata);
740
952
  }
741
- const stepId = graph.getStepIdByKey(stepKey);
742
- const runStep = graph.getRunStep(stepId);
953
+ let stepId = graph.getStepIdByKey(stepKey);
954
+ let runStep = graph.getRunStep(stepId);
955
+ if (shouldStartFreshMessageStepAfterGoogleServerSideTool({
956
+ graph,
957
+ stepId,
958
+ runStep,
959
+ content,
960
+ })) {
961
+ stepId = await dispatchMessageCreationStep({ graph, stepKey, metadata });
962
+ runStep = graph.getRunStep(stepId);
963
+ }
743
964
  if (!runStep) {
744
965
  console.warn(`\n
745
966
  ==============================================================
@@ -822,15 +1043,12 @@ hasToolCallChunks: ${hasToolCallChunks}
822
1043
  }, metadata);
823
1044
  }
824
1045
  }
825
- else if (content.every((c) => c.type?.startsWith(_enum.ContentTypes.TEXT) ?? false)) {
1046
+ else if (content.every((c) => isTextContentPart(c))) {
826
1047
  await graph.dispatchMessageDelta(stepId, {
827
1048
  content,
828
1049
  }, metadata);
829
1050
  }
830
- else if (content.every((c) => (c.type?.startsWith(_enum.ContentTypes.THINKING) ?? false) ||
831
- (c.type?.startsWith(_enum.ContentTypes.REASONING) ?? false) ||
832
- (c.type?.startsWith(_enum.ContentTypes.REASONING_CONTENT) ?? false) ||
833
- c.type === 'redacted_thinking')) {
1051
+ else if (content.every((c) => isReasoningContentPart(c))) {
834
1052
  await graph.dispatchReasoningDelta(stepId, {
835
1053
  content: content.map((c) => ({
836
1054
  type: _enum.ContentTypes.THINK,
@@ -868,7 +1086,9 @@ hasToolCallChunks: ${hasToolCallChunks}
868
1086
  Array.isArray(chunk.additional_kwargs.reasoning_details) &&
869
1087
  chunk.additional_kwargs.reasoning_details.length > 0) ||
870
1088
  (typeof chunk.additional_kwargs?.reasoning === 'string' &&
871
- chunk.additional_kwargs.reasoning !== ''))) {
1089
+ chunk.additional_kwargs.reasoning !== '') ||
1090
+ (typeof chunk.additional_kwargs?.reasoning_content === 'string' &&
1091
+ chunk.additional_kwargs.reasoning_content !== ''))) {
872
1092
  reasoning_content = 'valid';
873
1093
  }
874
1094
  if (reasoning_content != null &&
@@ -975,6 +1195,9 @@ function createContentAggregator() {
975
1195
  };
976
1196
  contentParts[index] = update;
977
1197
  }
1198
+ else if (partType === 'toolCall' || partType === 'toolResponse') {
1199
+ contentParts[index] = contentPart;
1200
+ }
978
1201
  else if (partType === _enum.ContentTypes.SUMMARY) {
979
1202
  const currentSummary = contentParts[index];
980
1203
  const incoming = contentPart;