@illuma-ai/agents 1.0.90 → 1.0.94

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 (839) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +98 -49
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/common/constants.cjs +25 -0
  4. package/dist/cjs/common/constants.cjs.map +1 -0
  5. package/dist/cjs/common/enum.cjs +30 -0
  6. package/dist/cjs/common/enum.cjs.map +1 -1
  7. package/dist/cjs/events.cjs +9 -4
  8. package/dist/cjs/events.cjs.map +1 -1
  9. package/dist/cjs/graphs/Graph.cjs +397 -92
  10. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  11. package/dist/cjs/graphs/MultiAgentGraph.cjs +223 -92
  12. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  13. package/dist/cjs/instrumentation.cjs +30 -14
  14. package/dist/cjs/instrumentation.cjs.map +1 -1
  15. package/dist/cjs/llm/anthropic/index.cjs +43 -11
  16. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  17. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  18. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +10 -7
  19. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  20. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +32 -0
  21. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  22. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  23. package/dist/cjs/llm/bedrock/index.cjs +129 -101
  24. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  25. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +489 -0
  26. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -0
  27. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +176 -0
  28. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -0
  29. package/dist/cjs/llm/fake.cjs.map +1 -1
  30. package/dist/cjs/llm/google/index.cjs.map +1 -1
  31. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  32. package/dist/cjs/llm/openai/index.cjs +1 -1
  33. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  34. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  35. package/dist/cjs/llm/openrouter/index.cjs +59 -5
  36. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  37. package/dist/cjs/llm/providers.cjs.map +1 -1
  38. package/dist/cjs/llm/text.cjs.map +1 -1
  39. package/dist/cjs/llm/vertexai/index.cjs +80 -2
  40. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  41. package/dist/cjs/main.cjs +60 -27
  42. package/dist/cjs/main.cjs.map +1 -1
  43. package/dist/cjs/messages/cache.cjs +131 -108
  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/core.cjs +3 -0
  47. package/dist/cjs/messages/core.cjs.map +1 -1
  48. package/dist/cjs/messages/format.cjs +265 -47
  49. package/dist/cjs/messages/format.cjs.map +1 -1
  50. package/dist/cjs/messages/ids.cjs.map +1 -1
  51. package/dist/cjs/messages/prune.cjs +55 -2
  52. package/dist/cjs/messages/prune.cjs.map +1 -1
  53. package/dist/cjs/messages/summarize.cjs +170 -0
  54. package/dist/cjs/messages/summarize.cjs.map +1 -0
  55. package/dist/cjs/messages/tools.cjs.map +1 -1
  56. package/dist/cjs/run.cjs +87 -30
  57. package/dist/cjs/run.cjs.map +1 -1
  58. package/dist/cjs/schemas/validate.cjs.map +1 -1
  59. package/dist/cjs/splitStream.cjs.map +1 -1
  60. package/dist/cjs/stream.cjs +59 -25
  61. package/dist/cjs/stream.cjs.map +1 -1
  62. package/dist/cjs/tools/AskUser.cjs +131 -0
  63. package/dist/cjs/tools/AskUser.cjs.map +1 -0
  64. package/dist/cjs/tools/BrowserTools.cjs +11 -7
  65. package/dist/cjs/tools/BrowserTools.cjs.map +1 -1
  66. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  67. package/dist/cjs/tools/CodeExecutor.cjs +60 -5
  68. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  69. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +36 -53
  70. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  71. package/dist/cjs/tools/StreamingToolCallBuffer.cjs +208 -0
  72. package/dist/cjs/tools/StreamingToolCallBuffer.cjs.map +1 -0
  73. package/dist/cjs/tools/ToolNode.cjs +333 -30
  74. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  75. package/dist/cjs/tools/ToolSearch.cjs +66 -30
  76. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  77. package/dist/cjs/tools/handlers.cjs +94 -8
  78. package/dist/cjs/tools/handlers.cjs.map +1 -1
  79. package/dist/cjs/tools/schema.cjs.map +1 -1
  80. package/dist/cjs/tools/search/content.cjs.map +1 -1
  81. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  82. package/dist/cjs/tools/search/format.cjs.map +1 -1
  83. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  84. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  85. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  86. package/dist/cjs/tools/search/search.cjs +1 -0
  87. package/dist/cjs/tools/search/search.cjs.map +1 -1
  88. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  89. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  90. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  91. package/dist/cjs/types/graph.cjs +1 -1
  92. package/dist/cjs/types/graph.cjs.map +1 -1
  93. package/dist/cjs/utils/contextAnalytics.cjs +23 -6
  94. package/dist/cjs/utils/contextAnalytics.cjs.map +1 -1
  95. package/dist/cjs/utils/events.cjs.map +1 -1
  96. package/dist/cjs/utils/graph.cjs.map +1 -1
  97. package/dist/cjs/utils/handlers.cjs.map +1 -1
  98. package/dist/cjs/utils/llm.cjs.map +1 -1
  99. package/dist/cjs/utils/misc.cjs.map +1 -1
  100. package/dist/cjs/utils/run.cjs +3 -1
  101. package/dist/cjs/utils/run.cjs.map +1 -1
  102. package/dist/cjs/utils/schema.cjs.map +1 -1
  103. package/dist/cjs/utils/title.cjs.map +1 -1
  104. package/dist/cjs/utils/tokens.cjs +33 -58
  105. package/dist/cjs/utils/tokens.cjs.map +1 -1
  106. package/dist/cjs/utils/toolCallContinuation.cjs +55 -0
  107. package/dist/cjs/utils/toolCallContinuation.cjs.map +1 -0
  108. package/dist/cjs/utils/toonFormat.cjs.map +1 -1
  109. package/dist/esm/agents/AgentContext.mjs +98 -49
  110. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  111. package/dist/esm/common/constants.mjs +22 -0
  112. package/dist/esm/common/constants.mjs.map +1 -0
  113. package/dist/esm/common/enum.mjs +31 -1
  114. package/dist/esm/common/enum.mjs.map +1 -1
  115. package/dist/esm/events.mjs +9 -4
  116. package/dist/esm/events.mjs.map +1 -1
  117. package/dist/esm/graphs/Graph.mjs +393 -88
  118. package/dist/esm/graphs/Graph.mjs.map +1 -1
  119. package/dist/esm/graphs/MultiAgentGraph.mjs +224 -93
  120. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  121. package/dist/esm/instrumentation.mjs +30 -14
  122. package/dist/esm/instrumentation.mjs.map +1 -1
  123. package/dist/esm/llm/anthropic/index.mjs +43 -11
  124. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  125. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  126. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +10 -7
  127. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  128. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +32 -0
  129. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  130. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  131. package/dist/esm/llm/bedrock/index.mjs +128 -101
  132. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  133. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +484 -0
  134. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -0
  135. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +171 -0
  136. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -0
  137. package/dist/esm/llm/fake.mjs.map +1 -1
  138. package/dist/esm/llm/google/index.mjs.map +1 -1
  139. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  140. package/dist/esm/llm/openai/index.mjs +1 -1
  141. package/dist/esm/llm/openai/index.mjs.map +1 -1
  142. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  143. package/dist/esm/llm/openrouter/index.mjs +59 -5
  144. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  145. package/dist/esm/llm/providers.mjs.map +1 -1
  146. package/dist/esm/llm/text.mjs.map +1 -1
  147. package/dist/esm/llm/vertexai/index.mjs +80 -2
  148. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  149. package/dist/esm/main.mjs +8 -3
  150. package/dist/esm/main.mjs.map +1 -1
  151. package/dist/esm/messages/cache.mjs +131 -108
  152. package/dist/esm/messages/cache.mjs.map +1 -1
  153. package/dist/esm/messages/content.mjs.map +1 -1
  154. package/dist/esm/messages/core.mjs +4 -1
  155. package/dist/esm/messages/core.mjs.map +1 -1
  156. package/dist/esm/messages/format.mjs +267 -49
  157. package/dist/esm/messages/format.mjs.map +1 -1
  158. package/dist/esm/messages/ids.mjs.map +1 -1
  159. package/dist/esm/messages/prune.mjs +56 -4
  160. package/dist/esm/messages/prune.mjs.map +1 -1
  161. package/dist/esm/messages/summarize.mjs +161 -0
  162. package/dist/esm/messages/summarize.mjs.map +1 -0
  163. package/dist/esm/messages/tools.mjs.map +1 -1
  164. package/dist/esm/run.mjs +88 -31
  165. package/dist/esm/run.mjs.map +1 -1
  166. package/dist/esm/schemas/validate.mjs.map +1 -1
  167. package/dist/esm/splitStream.mjs.map +1 -1
  168. package/dist/esm/stream.mjs +60 -26
  169. package/dist/esm/stream.mjs.map +1 -1
  170. package/dist/esm/tools/AskUser.mjs +125 -0
  171. package/dist/esm/tools/AskUser.mjs.map +1 -0
  172. package/dist/esm/tools/BrowserTools.mjs +11 -7
  173. package/dist/esm/tools/BrowserTools.mjs.map +1 -1
  174. package/dist/esm/tools/Calculator.mjs.map +1 -1
  175. package/dist/esm/tools/CodeExecutor.mjs +60 -5
  176. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  177. package/dist/esm/tools/ProgrammaticToolCalling.mjs +37 -54
  178. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  179. package/dist/esm/tools/StreamingToolCallBuffer.mjs +206 -0
  180. package/dist/esm/tools/StreamingToolCallBuffer.mjs.map +1 -0
  181. package/dist/esm/tools/ToolNode.mjs +333 -30
  182. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  183. package/dist/esm/tools/ToolSearch.mjs +66 -30
  184. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  185. package/dist/esm/tools/handlers.mjs +95 -9
  186. package/dist/esm/tools/handlers.mjs.map +1 -1
  187. package/dist/esm/tools/schema.mjs.map +1 -1
  188. package/dist/esm/tools/search/content.mjs.map +1 -1
  189. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  190. package/dist/esm/tools/search/format.mjs.map +1 -1
  191. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  192. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  193. package/dist/esm/tools/search/schema.mjs.map +1 -1
  194. package/dist/esm/tools/search/search.mjs +1 -0
  195. package/dist/esm/tools/search/search.mjs.map +1 -1
  196. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  197. package/dist/esm/tools/search/tool.mjs.map +1 -1
  198. package/dist/esm/tools/search/utils.mjs.map +1 -1
  199. package/dist/esm/types/graph.mjs +1 -1
  200. package/dist/esm/types/graph.mjs.map +1 -1
  201. package/dist/esm/utils/contextAnalytics.mjs +23 -6
  202. package/dist/esm/utils/contextAnalytics.mjs.map +1 -1
  203. package/dist/esm/utils/events.mjs.map +1 -1
  204. package/dist/esm/utils/graph.mjs.map +1 -1
  205. package/dist/esm/utils/handlers.mjs.map +1 -1
  206. package/dist/esm/utils/llm.mjs.map +1 -1
  207. package/dist/esm/utils/misc.mjs.map +1 -1
  208. package/dist/esm/utils/run.mjs +3 -1
  209. package/dist/esm/utils/run.mjs.map +1 -1
  210. package/dist/esm/utils/schema.mjs.map +1 -1
  211. package/dist/esm/utils/title.mjs.map +1 -1
  212. package/dist/esm/utils/tokens.mjs +33 -59
  213. package/dist/esm/utils/tokens.mjs.map +1 -1
  214. package/dist/esm/utils/toolCallContinuation.mjs +52 -0
  215. package/dist/esm/utils/toolCallContinuation.mjs.map +1 -0
  216. package/dist/esm/utils/toonFormat.mjs.map +1 -1
  217. package/dist/types/agents/AgentContext.d.ts +14 -7
  218. package/dist/types/common/constants.d.ts +18 -0
  219. package/dist/types/common/enum.d.ts +28 -0
  220. package/dist/types/common/index.d.ts +1 -0
  221. package/dist/types/events.d.ts +10 -3
  222. package/dist/types/graphs/Graph.d.ts +37 -0
  223. package/dist/types/index.d.ts +4 -0
  224. package/dist/types/llm/anthropic/index.d.ts +7 -1
  225. package/dist/types/llm/anthropic/types.d.ts +5 -2
  226. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
  227. package/dist/types/llm/bedrock/index.d.ts +40 -33
  228. package/dist/types/llm/bedrock/utils/message_outputs.d.ts +1 -1
  229. package/dist/types/llm/google/index.d.ts +2 -3
  230. package/dist/types/llm/openrouter/index.d.ts +21 -1
  231. package/dist/types/llm/vertexai/index.d.ts +3 -2
  232. package/dist/types/messages/cache.d.ts +1 -1
  233. package/dist/types/messages/index.d.ts +1 -0
  234. package/dist/types/messages/prune.d.ts +2 -7
  235. package/dist/types/messages/summarize.d.ts +33 -0
  236. package/dist/types/run.d.ts +6 -0
  237. package/dist/types/tools/AskUser.d.ts +408 -0
  238. package/dist/types/tools/BrowserTools.d.ts +2 -2
  239. package/dist/types/tools/CodeExecutor.d.ts +28 -4
  240. package/dist/types/tools/StreamingToolCallBuffer.d.ts +106 -0
  241. package/dist/types/tools/ToolNode.d.ts +55 -3
  242. package/dist/types/tools/ToolSearch.d.ts +9 -5
  243. package/dist/types/tools/handlers.d.ts +2 -2
  244. package/dist/types/types/graph.d.ts +9 -2
  245. package/dist/types/types/llm.d.ts +8 -3
  246. package/dist/types/types/run.d.ts +2 -0
  247. package/dist/types/types/tools.d.ts +20 -2
  248. package/dist/types/utils/contextAnalytics.d.ts +5 -4
  249. package/dist/types/utils/index.d.ts +1 -0
  250. package/dist/types/utils/tokens.d.ts +6 -19
  251. package/dist/types/utils/toolCallContinuation.d.ts +30 -0
  252. package/package.json +15 -8
  253. package/src/agents/AgentContext.js +782 -0
  254. package/src/agents/AgentContext.js.map +1 -0
  255. package/src/agents/AgentContext.test.js +421 -0
  256. package/src/agents/AgentContext.test.js.map +1 -0
  257. package/src/agents/AgentContext.ts +132 -64
  258. package/src/agents/__tests__/AgentContext.test.js +678 -0
  259. package/src/agents/__tests__/AgentContext.test.js.map +1 -0
  260. package/src/agents/__tests__/AgentContext.test.ts +25 -4
  261. package/src/agents/__tests__/resolveStructuredOutputMode.test.js +117 -0
  262. package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
  263. package/src/common/__tests__/enum.test.ts +135 -0
  264. package/src/common/constants.ts +21 -0
  265. package/src/common/enum.js +192 -0
  266. package/src/common/enum.js.map +1 -0
  267. package/src/common/enum.ts +30 -0
  268. package/src/common/index.js +3 -0
  269. package/src/common/index.js.map +1 -0
  270. package/src/common/index.ts +2 -1
  271. package/src/events.js +166 -0
  272. package/src/events.js.map +1 -0
  273. package/src/events.ts +11 -14
  274. package/src/graphs/Graph.js +1857 -0
  275. package/src/graphs/Graph.js.map +1 -0
  276. package/src/graphs/Graph.ts +580 -162
  277. package/src/graphs/MultiAgentGraph.js +1092 -0
  278. package/src/graphs/MultiAgentGraph.js.map +1 -0
  279. package/src/graphs/MultiAgentGraph.ts +331 -112
  280. package/src/graphs/__tests__/adaptive-thinking.test.ts +369 -0
  281. package/src/graphs/__tests__/graph-direct-tool-names.test.ts +210 -0
  282. package/src/graphs/__tests__/multi-agent-edges.test.ts +237 -0
  283. package/src/graphs/__tests__/structured-output.integration.test.js +624 -0
  284. package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
  285. package/src/graphs/__tests__/structured-output.test.js +144 -0
  286. package/src/graphs/__tests__/structured-output.test.js.map +1 -0
  287. package/src/graphs/contextManagement.e2e.test.js +718 -0
  288. package/src/graphs/contextManagement.e2e.test.js.map +1 -0
  289. package/src/graphs/contextManagement.e2e.test.ts +990 -0
  290. package/src/graphs/contextManagement.test.js +485 -0
  291. package/src/graphs/contextManagement.test.js.map +1 -0
  292. package/src/graphs/contextManagement.test.ts +625 -0
  293. package/src/graphs/handoffValidation.test.js +276 -0
  294. package/src/graphs/handoffValidation.test.js.map +1 -0
  295. package/src/graphs/handoffValidation.test.ts +353 -0
  296. package/src/graphs/index.js +3 -0
  297. package/src/graphs/index.js.map +1 -0
  298. package/src/index.js +28 -0
  299. package/src/index.js.map +1 -0
  300. package/src/index.ts +13 -0
  301. package/src/instrumentation.js +21 -0
  302. package/src/instrumentation.js.map +1 -0
  303. package/src/instrumentation.ts +38 -17
  304. package/src/llm/anthropic/index.js +319 -0
  305. package/src/llm/anthropic/index.js.map +1 -0
  306. package/src/llm/anthropic/index.ts +68 -15
  307. package/src/llm/anthropic/llm.spec.ts +402 -0
  308. package/src/llm/anthropic/types.js +46 -0
  309. package/src/llm/anthropic/types.js.map +1 -0
  310. package/src/llm/anthropic/types.ts +8 -2
  311. package/src/llm/anthropic/utils/message_inputs.js +627 -0
  312. package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
  313. package/src/llm/anthropic/utils/message_inputs.ts +16 -33
  314. package/src/llm/anthropic/utils/message_outputs.js +290 -0
  315. package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
  316. package/src/llm/anthropic/utils/message_outputs.ts +40 -1
  317. package/src/llm/anthropic/utils/output_parsers.js +89 -0
  318. package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
  319. package/src/llm/anthropic/utils/tools.js +25 -0
  320. package/src/llm/anthropic/utils/tools.js.map +1 -0
  321. package/src/llm/bedrock/__tests__/bedrock-caching.test.js +392 -0
  322. package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -0
  323. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +24 -40
  324. package/src/llm/bedrock/index.js +303 -0
  325. package/src/llm/bedrock/index.js.map +1 -0
  326. package/src/llm/bedrock/index.ts +171 -134
  327. package/src/llm/bedrock/llm.spec.ts +395 -52
  328. package/src/llm/bedrock/types.js +2 -0
  329. package/src/llm/bedrock/types.js.map +1 -0
  330. package/src/llm/bedrock/utils/index.js +6 -0
  331. package/src/llm/bedrock/utils/index.js.map +1 -0
  332. package/src/llm/bedrock/utils/message_inputs.js +463 -0
  333. package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
  334. package/src/llm/bedrock/utils/message_inputs.ts +30 -5
  335. package/src/llm/bedrock/utils/message_outputs.js +269 -0
  336. package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
  337. package/src/llm/bedrock/utils/message_outputs.ts +70 -22
  338. package/src/llm/fake.js +92 -0
  339. package/src/llm/fake.js.map +1 -0
  340. package/src/llm/google/index.js +215 -0
  341. package/src/llm/google/index.js.map +1 -0
  342. package/src/llm/google/index.ts +2 -3
  343. package/src/llm/google/types.js +12 -0
  344. package/src/llm/google/types.js.map +1 -0
  345. package/src/llm/google/utils/common.js +670 -0
  346. package/src/llm/google/utils/common.js.map +1 -0
  347. package/src/llm/google/utils/tools.js +111 -0
  348. package/src/llm/google/utils/tools.js.map +1 -0
  349. package/src/llm/google/utils/zod_to_genai_parameters.js +47 -0
  350. package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
  351. package/src/llm/openai/index.js +1033 -0
  352. package/src/llm/openai/index.js.map +1 -0
  353. package/src/llm/openai/types.js +2 -0
  354. package/src/llm/openai/types.js.map +1 -0
  355. package/src/llm/openai/utils/index.js +756 -0
  356. package/src/llm/openai/utils/index.js.map +1 -0
  357. package/src/llm/openai/utils/isReasoningModel.test.js +79 -0
  358. package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
  359. package/src/llm/openrouter/index.js +261 -0
  360. package/src/llm/openrouter/index.js.map +1 -0
  361. package/src/llm/openrouter/index.ts +117 -6
  362. package/src/llm/openrouter/reasoning.test.js +181 -0
  363. package/src/llm/openrouter/reasoning.test.js.map +1 -0
  364. package/src/llm/openrouter/reasoning.test.ts +207 -0
  365. package/src/llm/providers.js +36 -0
  366. package/src/llm/providers.js.map +1 -0
  367. package/src/llm/text.js +65 -0
  368. package/src/llm/text.js.map +1 -0
  369. package/src/llm/vertexai/index.js +402 -0
  370. package/src/llm/vertexai/index.js.map +1 -0
  371. package/src/llm/vertexai/index.ts +115 -5
  372. package/src/llm/vertexai/llm.spec.ts +114 -0
  373. package/src/messages/__tests__/tools.test.js +392 -0
  374. package/src/messages/__tests__/tools.test.js.map +1 -0
  375. package/src/messages/cache.js +404 -0
  376. package/src/messages/cache.js.map +1 -0
  377. package/src/messages/cache.test.js +1167 -0
  378. package/src/messages/cache.test.js.map +1 -0
  379. package/src/messages/cache.test.ts +178 -16
  380. package/src/messages/cache.ts +152 -147
  381. package/src/messages/content.js +48 -0
  382. package/src/messages/content.js.map +1 -0
  383. package/src/messages/content.test.js +314 -0
  384. package/src/messages/content.test.js.map +1 -0
  385. package/src/messages/core.js +359 -0
  386. package/src/messages/core.js.map +1 -0
  387. package/src/messages/core.ts +5 -0
  388. package/src/messages/ensureThinkingBlock.test.js +997 -0
  389. package/src/messages/ensureThinkingBlock.test.js.map +1 -0
  390. package/src/messages/ensureThinkingBlock.test.ts +751 -10
  391. package/src/messages/format.js +973 -0
  392. package/src/messages/format.js.map +1 -0
  393. package/src/messages/format.ts +334 -57
  394. package/src/messages/formatAgentMessages.test.js +2278 -0
  395. package/src/messages/formatAgentMessages.test.js.map +1 -0
  396. package/src/messages/formatAgentMessages.test.ts +1175 -1
  397. package/src/messages/formatAgentMessages.tools.test.js +362 -0
  398. package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
  399. package/src/messages/formatMessage.test.js +608 -0
  400. package/src/messages/formatMessage.test.js.map +1 -0
  401. package/src/messages/ids.js +18 -0
  402. package/src/messages/ids.js.map +1 -0
  403. package/src/messages/index.js +9 -0
  404. package/src/messages/index.js.map +1 -0
  405. package/src/messages/index.ts +1 -0
  406. package/src/messages/labelContentByAgent.test.js +725 -0
  407. package/src/messages/labelContentByAgent.test.js.map +1 -0
  408. package/src/messages/prune.js +438 -0
  409. package/src/messages/prune.js.map +1 -0
  410. package/src/messages/prune.ts +87 -25
  411. package/src/messages/reducer.js +60 -0
  412. package/src/messages/reducer.js.map +1 -0
  413. package/src/messages/shiftIndexTokenCountMap.test.js +63 -0
  414. package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
  415. package/src/messages/summarize.js +146 -0
  416. package/src/messages/summarize.js.map +1 -0
  417. package/src/messages/summarize.test.js +332 -0
  418. package/src/messages/summarize.test.js.map +1 -0
  419. package/src/messages/summarize.test.ts +466 -0
  420. package/src/messages/summarize.ts +222 -0
  421. package/src/messages/tools.js +90 -0
  422. package/src/messages/tools.js.map +1 -0
  423. package/src/mockStream.js +81 -0
  424. package/src/mockStream.js.map +1 -0
  425. package/src/prompts/collab.js +7 -0
  426. package/src/prompts/collab.js.map +1 -0
  427. package/src/prompts/index.js +3 -0
  428. package/src/prompts/index.js.map +1 -0
  429. package/src/prompts/taskmanager.js +58 -0
  430. package/src/prompts/taskmanager.js.map +1 -0
  431. package/src/run.js +427 -0
  432. package/src/run.js.map +1 -0
  433. package/src/run.ts +101 -33
  434. package/src/schemas/index.js +3 -0
  435. package/src/schemas/index.js.map +1 -0
  436. package/src/schemas/schema-preparation.test.js +370 -0
  437. package/src/schemas/schema-preparation.test.js.map +1 -0
  438. package/src/schemas/validate.js +314 -0
  439. package/src/schemas/validate.js.map +1 -0
  440. package/src/schemas/validate.test.js +264 -0
  441. package/src/schemas/validate.test.js.map +1 -0
  442. package/src/scripts/abort.js +127 -0
  443. package/src/scripts/abort.js.map +1 -0
  444. package/src/scripts/ant_web_search.js +130 -0
  445. package/src/scripts/ant_web_search.js.map +1 -0
  446. package/src/scripts/ant_web_search.ts +1 -0
  447. package/src/scripts/ant_web_search_edge_case.js +133 -0
  448. package/src/scripts/ant_web_search_edge_case.js.map +1 -0
  449. package/src/scripts/ant_web_search_edge_case.ts +1 -0
  450. package/src/scripts/ant_web_search_error_edge_case.js +119 -0
  451. package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
  452. package/src/scripts/ant_web_search_error_edge_case.ts +1 -0
  453. package/src/scripts/args.js +41 -0
  454. package/src/scripts/args.js.map +1 -0
  455. package/src/scripts/bedrock-cache-debug.js +186 -0
  456. package/src/scripts/bedrock-cache-debug.js.map +1 -0
  457. package/src/scripts/bedrock-cache-debug.ts +250 -0
  458. package/src/scripts/bedrock-content-aggregation-test.js +195 -0
  459. package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
  460. package/src/scripts/bedrock-content-aggregation-test.ts +266 -0
  461. package/src/scripts/bedrock-merge-test.js +80 -0
  462. package/src/scripts/bedrock-merge-test.js.map +1 -0
  463. package/src/scripts/bedrock-merge-test.ts +107 -0
  464. package/src/scripts/bedrock-parallel-tools-test.js +150 -0
  465. package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
  466. package/src/scripts/bedrock-parallel-tools-test.ts +204 -0
  467. package/src/scripts/caching.js +106 -0
  468. package/src/scripts/caching.js.map +1 -0
  469. package/src/scripts/caching.ts +1 -0
  470. package/src/scripts/cli.js +152 -0
  471. package/src/scripts/cli.js.map +1 -0
  472. package/src/scripts/cli2.js +119 -0
  473. package/src/scripts/cli2.js.map +1 -0
  474. package/src/scripts/cli3.js +163 -0
  475. package/src/scripts/cli3.js.map +1 -0
  476. package/src/scripts/cli4.js +165 -0
  477. package/src/scripts/cli4.js.map +1 -0
  478. package/src/scripts/cli5.js +165 -0
  479. package/src/scripts/cli5.js.map +1 -0
  480. package/src/scripts/code_exec.js +171 -0
  481. package/src/scripts/code_exec.js.map +1 -0
  482. package/src/scripts/code_exec.ts +1 -0
  483. package/src/scripts/code_exec_files.js +180 -0
  484. package/src/scripts/code_exec_files.js.map +1 -0
  485. package/src/scripts/code_exec_files.ts +1 -0
  486. package/src/scripts/code_exec_multi_session.js +185 -0
  487. package/src/scripts/code_exec_multi_session.js.map +1 -0
  488. package/src/scripts/code_exec_multi_session.ts +9 -13
  489. package/src/scripts/code_exec_ptc.js +265 -0
  490. package/src/scripts/code_exec_ptc.js.map +1 -0
  491. package/src/scripts/code_exec_ptc.ts +1 -0
  492. package/src/scripts/code_exec_session.js +217 -0
  493. package/src/scripts/code_exec_session.js.map +1 -0
  494. package/src/scripts/code_exec_session.ts +1 -0
  495. package/src/scripts/code_exec_simple.js +120 -0
  496. package/src/scripts/code_exec_simple.js.map +1 -0
  497. package/src/scripts/code_exec_simple.ts +1 -0
  498. package/src/scripts/content.js +111 -0
  499. package/src/scripts/content.js.map +1 -0
  500. package/src/scripts/content.ts +1 -0
  501. package/src/scripts/empty_input.js +125 -0
  502. package/src/scripts/empty_input.js.map +1 -0
  503. package/src/scripts/handoff-test.js +96 -0
  504. package/src/scripts/handoff-test.js.map +1 -0
  505. package/src/scripts/image.js +138 -0
  506. package/src/scripts/image.js.map +1 -0
  507. package/src/scripts/image.ts +3 -1
  508. package/src/scripts/memory.js +83 -0
  509. package/src/scripts/memory.js.map +1 -0
  510. package/src/scripts/memory.ts +16 -6
  511. package/src/scripts/multi-agent-chain.js +271 -0
  512. package/src/scripts/multi-agent-chain.js.map +1 -0
  513. package/src/scripts/multi-agent-chain.ts +1 -0
  514. package/src/scripts/multi-agent-conditional.js +185 -0
  515. package/src/scripts/multi-agent-conditional.js.map +1 -0
  516. package/src/scripts/multi-agent-conditional.ts +1 -0
  517. package/src/scripts/multi-agent-document-review-chain.js +171 -0
  518. package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
  519. package/src/scripts/multi-agent-document-review-chain.ts +1 -0
  520. package/src/scripts/multi-agent-hybrid-flow.js +264 -0
  521. package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
  522. package/src/scripts/multi-agent-hybrid-flow.ts +1 -0
  523. package/src/scripts/multi-agent-parallel-start.js +214 -0
  524. package/src/scripts/multi-agent-parallel-start.js.map +1 -0
  525. package/src/scripts/multi-agent-parallel-start.ts +4 -4
  526. package/src/scripts/multi-agent-parallel.js +346 -0
  527. package/src/scripts/multi-agent-parallel.js.map +1 -0
  528. package/src/scripts/multi-agent-parallel.ts +1 -0
  529. package/src/scripts/multi-agent-sequence.js +184 -0
  530. package/src/scripts/multi-agent-sequence.js.map +1 -0
  531. package/src/scripts/multi-agent-sequence.ts +4 -4
  532. package/src/scripts/multi-agent-supervisor.js +324 -0
  533. package/src/scripts/multi-agent-supervisor.js.map +1 -0
  534. package/src/scripts/multi-agent-supervisor.ts +1 -0
  535. package/src/scripts/multi-agent-test.js +147 -0
  536. package/src/scripts/multi-agent-test.js.map +1 -0
  537. package/src/scripts/multi-agent-test.ts +1 -0
  538. package/src/scripts/parallel-asymmetric-tools-test.js +202 -0
  539. package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
  540. package/src/scripts/parallel-asymmetric-tools-test.ts +1 -0
  541. package/src/scripts/parallel-full-metadata-test.js +176 -0
  542. package/src/scripts/parallel-full-metadata-test.js.map +1 -0
  543. package/src/scripts/parallel-full-metadata-test.ts +1 -0
  544. package/src/scripts/parallel-tools-test.js +256 -0
  545. package/src/scripts/parallel-tools-test.js.map +1 -0
  546. package/src/scripts/parallel-tools-test.ts +1 -0
  547. package/src/scripts/poc-multi-agent-comprehensive.ts +1222 -0
  548. package/src/scripts/programmatic_exec.js +277 -0
  549. package/src/scripts/programmatic_exec.js.map +1 -0
  550. package/src/scripts/programmatic_exec_agent.js +168 -0
  551. package/src/scripts/programmatic_exec_agent.js.map +1 -0
  552. package/src/scripts/programmatic_exec_agent.ts +1 -0
  553. package/src/scripts/search.js +118 -0
  554. package/src/scripts/search.js.map +1 -0
  555. package/src/scripts/search.ts +1 -0
  556. package/src/scripts/sequential-full-metadata-test.js +143 -0
  557. package/src/scripts/sequential-full-metadata-test.js.map +1 -0
  558. package/src/scripts/sequential-full-metadata-test.ts +1 -0
  559. package/src/scripts/simple.js +174 -0
  560. package/src/scripts/simple.js.map +1 -0
  561. package/src/scripts/simple.ts +2 -1
  562. package/src/scripts/single-agent-metadata-test.js +152 -0
  563. package/src/scripts/single-agent-metadata-test.js.map +1 -0
  564. package/src/scripts/single-agent-metadata-test.ts +4 -6
  565. package/src/scripts/stream.js +113 -0
  566. package/src/scripts/stream.js.map +1 -0
  567. package/src/scripts/stream.ts +1 -0
  568. package/src/scripts/test-custom-prompt-key.js +132 -0
  569. package/src/scripts/test-custom-prompt-key.js.map +1 -0
  570. package/src/scripts/test-handoff-input.js +143 -0
  571. package/src/scripts/test-handoff-input.js.map +1 -0
  572. package/src/scripts/test-handoff-preamble.js +227 -0
  573. package/src/scripts/test-handoff-preamble.js.map +1 -0
  574. package/src/scripts/test-handoff-preamble.ts +1 -0
  575. package/src/scripts/test-handoff-steering.js +353 -0
  576. package/src/scripts/test-handoff-steering.js.map +1 -0
  577. package/src/scripts/test-handoff-steering.ts +430 -0
  578. package/src/scripts/test-multi-agent-list-handoff.js +318 -0
  579. package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
  580. package/src/scripts/test-multi-agent-list-handoff.ts +1 -0
  581. package/src/scripts/test-parallel-agent-labeling.js +253 -0
  582. package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
  583. package/src/scripts/test-parallel-agent-labeling.ts +2 -0
  584. package/src/scripts/test-parallel-handoffs.js +229 -0
  585. package/src/scripts/test-parallel-handoffs.js.map +1 -0
  586. package/src/scripts/test-parallel-handoffs.ts +1 -0
  587. package/src/scripts/test-thinking-handoff-bedrock.js +132 -0
  588. package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
  589. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -0
  590. package/src/scripts/test-thinking-handoff.js +132 -0
  591. package/src/scripts/test-thinking-handoff.js.map +1 -0
  592. package/src/scripts/test-thinking-handoff.ts +1 -0
  593. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js +140 -0
  594. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
  595. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +166 -0
  596. package/src/scripts/test-tool-before-handoff-role-order.js +223 -0
  597. package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
  598. package/src/scripts/test-tool-before-handoff-role-order.ts +276 -0
  599. package/src/scripts/test-tools-before-handoff.js +187 -0
  600. package/src/scripts/test-tools-before-handoff.js.map +1 -0
  601. package/src/scripts/test-tools-before-handoff.ts +4 -8
  602. package/src/scripts/test_code_api.js +263 -0
  603. package/src/scripts/test_code_api.js.map +1 -0
  604. package/src/scripts/thinking-bedrock.js +128 -0
  605. package/src/scripts/thinking-bedrock.js.map +1 -0
  606. package/src/scripts/thinking-bedrock.ts +1 -0
  607. package/src/scripts/thinking-vertexai.js +130 -0
  608. package/src/scripts/thinking-vertexai.js.map +1 -0
  609. package/src/scripts/thinking-vertexai.ts +168 -0
  610. package/src/scripts/thinking.js +134 -0
  611. package/src/scripts/thinking.js.map +1 -0
  612. package/src/scripts/thinking.ts +1 -0
  613. package/src/scripts/tool_search.js +114 -0
  614. package/src/scripts/tool_search.js.map +1 -0
  615. package/src/scripts/tools.js +125 -0
  616. package/src/scripts/tools.js.map +1 -0
  617. package/src/scripts/tools.ts +5 -19
  618. package/src/specs/agent-handoffs-bedrock.integration.test.js +280 -0
  619. package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
  620. package/src/specs/agent-handoffs-bedrock.integration.test.ts +412 -375
  621. package/src/specs/agent-handoffs.test.js +924 -0
  622. package/src/specs/agent-handoffs.test.js.map +1 -0
  623. package/src/specs/agent-handoffs.test.ts +152 -39
  624. package/src/specs/anthropic.simple.test.js +287 -0
  625. package/src/specs/anthropic.simple.test.js.map +1 -0
  626. package/src/specs/anthropic.simple.test.ts +7 -4
  627. package/src/specs/azure.simple.test.js +381 -0
  628. package/src/specs/azure.simple.test.js.map +1 -0
  629. package/src/specs/azure.simple.test.ts +143 -5
  630. package/src/specs/cache.simple.test.js +282 -0
  631. package/src/specs/cache.simple.test.js.map +1 -0
  632. package/src/specs/cache.simple.test.ts +9 -2
  633. package/src/specs/custom-event-await.test.js +148 -0
  634. package/src/specs/custom-event-await.test.js.map +1 -0
  635. package/src/specs/custom-event-await.test.ts +215 -0
  636. package/src/specs/deepseek.simple.test.js +189 -0
  637. package/src/specs/deepseek.simple.test.js.map +1 -0
  638. package/src/specs/deepseek.simple.test.ts +4 -2
  639. package/src/specs/emergency-prune.test.js +308 -0
  640. package/src/specs/emergency-prune.test.js.map +1 -0
  641. package/src/specs/moonshot.simple.test.js +237 -0
  642. package/src/specs/moonshot.simple.test.js.map +1 -0
  643. package/src/specs/moonshot.simple.test.ts +6 -2
  644. package/src/specs/observability.integration.test.js +1337 -0
  645. package/src/specs/observability.integration.test.js.map +1 -0
  646. package/src/specs/observability.integration.test.ts +2223 -0
  647. package/src/specs/openai.simple.test.js +233 -0
  648. package/src/specs/openai.simple.test.js.map +1 -0
  649. package/src/specs/openai.simple.test.ts +4 -2
  650. package/src/specs/openrouter.simple.test.js +202 -0
  651. package/src/specs/openrouter.simple.test.js.map +1 -0
  652. package/src/specs/openrouter.simple.test.ts +165 -4
  653. package/src/specs/prune.test.js +733 -0
  654. package/src/specs/prune.test.js.map +1 -0
  655. package/src/specs/prune.test.ts +1 -0
  656. package/src/specs/reasoning.test.js +144 -0
  657. package/src/specs/reasoning.test.js.map +1 -0
  658. package/src/specs/reasoning.test.ts +2 -2
  659. package/src/specs/spec.utils.js +4 -0
  660. package/src/specs/spec.utils.js.map +1 -0
  661. package/src/specs/thinking-handoff.test.js +486 -0
  662. package/src/specs/thinking-handoff.test.js.map +1 -0
  663. package/src/specs/thinking-handoff.test.ts +3 -2
  664. package/src/specs/thinking-prune.test.js +600 -0
  665. package/src/specs/thinking-prune.test.js.map +1 -0
  666. package/src/specs/token-distribution-edge-case.test.js +246 -0
  667. package/src/specs/token-distribution-edge-case.test.js.map +1 -0
  668. package/src/specs/token-memoization.test.js +32 -0
  669. package/src/specs/token-memoization.test.js.map +1 -0
  670. package/src/specs/token-memoization.test.ts +14 -5
  671. package/src/specs/tokens.test.js +49 -0
  672. package/src/specs/tokens.test.js.map +1 -0
  673. package/src/specs/tokens.test.ts +64 -0
  674. package/src/specs/tool-error.test.js +139 -0
  675. package/src/specs/tool-error.test.js.map +1 -0
  676. package/src/specs/tool-error.test.ts +2 -2
  677. package/src/splitStream.js +204 -0
  678. package/src/splitStream.js.map +1 -0
  679. package/src/splitStream.test.js +504 -0
  680. package/src/splitStream.test.js.map +1 -0
  681. package/src/stream.js +650 -0
  682. package/src/stream.js.map +1 -0
  683. package/src/stream.test.js +225 -0
  684. package/src/stream.test.js.map +1 -0
  685. package/src/stream.test.ts +25 -15
  686. package/src/stream.ts +82 -32
  687. package/src/test/mockTools.js +340 -0
  688. package/src/test/mockTools.js.map +1 -0
  689. package/src/tools/AskUser.ts +159 -0
  690. package/src/tools/BrowserTools.js +245 -0
  691. package/src/tools/BrowserTools.js.map +1 -0
  692. package/src/tools/BrowserTools.ts +12 -8
  693. package/src/tools/Calculator.js +38 -0
  694. package/src/tools/Calculator.js.map +1 -0
  695. package/src/tools/Calculator.test.js +225 -0
  696. package/src/tools/Calculator.test.js.map +1 -0
  697. package/src/tools/CodeExecutor.js +233 -0
  698. package/src/tools/CodeExecutor.js.map +1 -0
  699. package/src/tools/CodeExecutor.selfhealing.test.ts +435 -0
  700. package/src/tools/CodeExecutor.ts +82 -5
  701. package/src/tools/ProgrammaticToolCalling.js +602 -0
  702. package/src/tools/ProgrammaticToolCalling.js.map +1 -0
  703. package/src/tools/ProgrammaticToolCalling.ts +40 -52
  704. package/src/tools/StreamingToolCallBuffer.js +179 -0
  705. package/src/tools/StreamingToolCallBuffer.js.map +1 -0
  706. package/src/tools/StreamingToolCallBuffer.ts +218 -0
  707. package/src/tools/ToolNode.js +930 -0
  708. package/src/tools/ToolNode.js.map +1 -0
  709. package/src/tools/ToolNode.ts +454 -41
  710. package/src/tools/ToolSearch.js +904 -0
  711. package/src/tools/ToolSearch.js.map +1 -0
  712. package/src/tools/ToolSearch.ts +84 -33
  713. package/src/tools/__tests__/AskUser.test.ts +537 -0
  714. package/src/tools/__tests__/BrowserTools.test.js +306 -0
  715. package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
  716. package/src/tools/__tests__/BrowserTools.test.ts +131 -6
  717. package/src/tools/__tests__/CodeExecutor.test.ts +76 -0
  718. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js +276 -0
  719. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
  720. package/src/tools/__tests__/ProgrammaticToolCalling.test.js +807 -0
  721. package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
  722. package/src/tools/__tests__/StreamingToolCallBuffer.test.js +175 -0
  723. package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +1 -0
  724. package/src/tools/__tests__/StreamingToolCallBuffer.test.ts +263 -0
  725. package/src/tools/__tests__/ToolApproval.test.js +675 -0
  726. package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
  727. package/src/tools/__tests__/ToolApproval.test.ts +194 -20
  728. package/src/tools/__tests__/ToolNode.hitl.test.ts +267 -0
  729. package/src/tools/__tests__/ToolNode.recovery.test.js +200 -0
  730. package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
  731. package/src/tools/__tests__/ToolNode.recovery.test.ts +276 -0
  732. package/src/tools/__tests__/ToolNode.session.test.js +319 -0
  733. package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
  734. package/src/tools/__tests__/ToolNode.session.test.ts +465 -0
  735. package/src/tools/__tests__/ToolSearch.integration.test.js +125 -0
  736. package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
  737. package/src/tools/__tests__/ToolSearch.test.js +812 -0
  738. package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
  739. package/src/tools/__tests__/ToolSearch.test.ts +78 -5
  740. package/src/tools/__tests__/handlers.test.js +799 -0
  741. package/src/tools/__tests__/handlers.test.js.map +1 -0
  742. package/src/tools/__tests__/handlers.test.ts +1100 -0
  743. package/src/tools/__tests__/truncation-recovery.integration.test.js +362 -0
  744. package/src/tools/__tests__/truncation-recovery.integration.test.js.map +1 -0
  745. package/src/tools/__tests__/truncation-recovery.integration.test.ts +560 -0
  746. package/src/tools/handlers.js +306 -0
  747. package/src/tools/handlers.js.map +1 -0
  748. package/src/tools/handlers.ts +119 -16
  749. package/src/tools/schema.js +25 -0
  750. package/src/tools/schema.js.map +1 -0
  751. package/src/tools/search/anthropic.js +34 -0
  752. package/src/tools/search/anthropic.js.map +1 -0
  753. package/src/tools/search/content.js +116 -0
  754. package/src/tools/search/content.js.map +1 -0
  755. package/src/tools/search/content.test.js +133 -0
  756. package/src/tools/search/content.test.js.map +1 -0
  757. package/src/tools/search/firecrawl.js +173 -0
  758. package/src/tools/search/firecrawl.js.map +1 -0
  759. package/src/tools/search/format.js +198 -0
  760. package/src/tools/search/format.js.map +1 -0
  761. package/src/tools/search/highlights.js +241 -0
  762. package/src/tools/search/highlights.js.map +1 -0
  763. package/src/tools/search/index.js +3 -0
  764. package/src/tools/search/index.js.map +1 -0
  765. package/src/tools/search/jina-reranker.test.js +106 -0
  766. package/src/tools/search/jina-reranker.test.js.map +1 -0
  767. package/src/tools/search/rerankers.js +165 -0
  768. package/src/tools/search/rerankers.js.map +1 -0
  769. package/src/tools/search/schema.js +102 -0
  770. package/src/tools/search/schema.js.map +1 -0
  771. package/src/tools/search/search.js +561 -0
  772. package/src/tools/search/search.js.map +1 -0
  773. package/src/tools/search/serper-scraper.js +126 -0
  774. package/src/tools/search/serper-scraper.js.map +1 -0
  775. package/src/tools/search/test.js +129 -0
  776. package/src/tools/search/test.js.map +1 -0
  777. package/src/tools/search/tool.js +453 -0
  778. package/src/tools/search/tool.js.map +1 -0
  779. package/src/tools/search/types.js +2 -0
  780. package/src/tools/search/types.js.map +1 -0
  781. package/src/tools/search/utils.js +59 -0
  782. package/src/tools/search/utils.js.map +1 -0
  783. package/src/types/graph.js +24 -0
  784. package/src/types/graph.js.map +1 -0
  785. package/src/types/graph.test.js +192 -0
  786. package/src/types/graph.test.js.map +1 -0
  787. package/src/types/graph.ts +26 -6
  788. package/src/types/index.js +7 -0
  789. package/src/types/index.js.map +1 -0
  790. package/src/types/llm.js +2 -0
  791. package/src/types/llm.js.map +1 -0
  792. package/src/types/llm.ts +8 -3
  793. package/src/types/messages.js +2 -0
  794. package/src/types/messages.js.map +1 -0
  795. package/src/types/run.js +2 -0
  796. package/src/types/run.js.map +1 -0
  797. package/src/types/run.ts +2 -0
  798. package/src/types/stream.js +2 -0
  799. package/src/types/stream.js.map +1 -0
  800. package/src/types/tools.js +2 -0
  801. package/src/types/tools.js.map +1 -0
  802. package/src/types/tools.ts +21 -2
  803. package/src/utils/contextAnalytics.js +79 -0
  804. package/src/utils/contextAnalytics.js.map +1 -0
  805. package/src/utils/contextAnalytics.test.js +166 -0
  806. package/src/utils/contextAnalytics.test.js.map +1 -0
  807. package/src/utils/contextAnalytics.test.ts +222 -0
  808. package/src/utils/contextAnalytics.ts +27 -9
  809. package/src/utils/events.js +26 -0
  810. package/src/utils/events.js.map +1 -0
  811. package/src/utils/graph.js +11 -0
  812. package/src/utils/graph.js.map +1 -0
  813. package/src/utils/handlers.js +65 -0
  814. package/src/utils/handlers.js.map +1 -0
  815. package/src/utils/index.js +10 -0
  816. package/src/utils/index.js.map +1 -0
  817. package/src/utils/index.ts +1 -0
  818. package/src/utils/llm.js +21 -0
  819. package/src/utils/llm.js.map +1 -0
  820. package/src/utils/llmConfig.js +205 -0
  821. package/src/utils/llmConfig.js.map +1 -0
  822. package/src/utils/llmConfig.ts +5 -5
  823. package/src/utils/logging.js +37 -0
  824. package/src/utils/logging.js.map +1 -0
  825. package/src/utils/misc.js +51 -0
  826. package/src/utils/misc.js.map +1 -0
  827. package/src/utils/run.js +69 -0
  828. package/src/utils/run.js.map +1 -0
  829. package/src/utils/run.ts +108 -106
  830. package/src/utils/schema.js +21 -0
  831. package/src/utils/schema.js.map +1 -0
  832. package/src/utils/title.js +119 -0
  833. package/src/utils/title.js.map +1 -0
  834. package/src/utils/tokens.js +92 -0
  835. package/src/utils/tokens.js.map +1 -0
  836. package/src/utils/tokens.ts +118 -142
  837. package/src/utils/toolCallContinuation.ts +55 -0
  838. package/src/utils/toonFormat.js +379 -0
  839. package/src/utils/toonFormat.js.map +1 -0
@@ -0,0 +1,306 @@
1
+ /* eslint-disable no-console */
2
+ // src/tools/handlers.ts
3
+ import { nanoid } from 'nanoid';
4
+ import { ToolMessage } from '@langchain/core/messages';
5
+ import { ToolCallTypes, GraphEvents, StepTypes, Providers, Constants, } from '@/common';
6
+ import { coerceAnthropicSearchResults, isAnthropicWebSearchResult, } from '@/tools/search/anthropic';
7
+ import { formatResultsForLLM } from '@/tools/search/format';
8
+ import { getMessageId } from '@/messages';
9
+ export async function handleToolCallChunks({ graph, stepKey, toolCallChunks, metadata, }) {
10
+ let prevStepId;
11
+ let prevRunStep;
12
+ try {
13
+ prevStepId = graph.getStepIdByKey(stepKey);
14
+ prevRunStep = graph.getRunStep(prevStepId);
15
+ }
16
+ catch {
17
+ /** Edge Case: If no previous step exists, create a new message creation step */
18
+ const message_id = getMessageId(stepKey, graph, true) ?? '';
19
+ prevStepId = await graph.dispatchRunStep(stepKey, {
20
+ type: StepTypes.MESSAGE_CREATION,
21
+ message_creation: {
22
+ message_id,
23
+ },
24
+ }, metadata);
25
+ prevRunStep = graph.getRunStep(prevStepId);
26
+ }
27
+ const _stepId = graph.getStepIdByKey(stepKey);
28
+ /** Edge Case: Tool Call Run Step or `tool_call_ids` never dispatched */
29
+ const tool_calls = prevStepId && prevRunStep && prevRunStep.type === StepTypes.MESSAGE_CREATION
30
+ ? []
31
+ : undefined;
32
+ /**
33
+ * Feed streaming tool call buffer — accumulate raw arg strings for truncation recovery.
34
+ *
35
+ * Provider chunk patterns:
36
+ * - OpenAI/Anthropic: every chunk has {id, args} → direct append
37
+ * - Bedrock: START chunk has {id, name, index}, DELTA chunks have {args, index} (no id)
38
+ * → use index-to-id mapping to resolve the target buffer entry
39
+ */
40
+ for (const toolCallChunk of toolCallChunks) {
41
+ const chunkIndex = toolCallChunk.index;
42
+ // START chunk: has id (and usually name). Store index→id mapping for future DELTA chunks.
43
+ if (toolCallChunk.id) {
44
+ if (typeof chunkIndex === 'number') {
45
+ graph.streamingToolCallBuffer.setIndexMapping(chunkIndex, toolCallChunk.id);
46
+ }
47
+ if (toolCallChunk.name) {
48
+ graph.streamingToolCallBuffer.setToolName(toolCallChunk.id, toolCallChunk.name);
49
+ }
50
+ // Append args if present on the same chunk (OpenAI/Anthropic pattern)
51
+ if (toolCallChunk.args) {
52
+ graph.streamingToolCallBuffer.append(toolCallChunk.id, toolCallChunk.args);
53
+ }
54
+ }
55
+ else if (toolCallChunk.args && typeof chunkIndex === 'number') {
56
+ // DELTA chunk: no id, but has args + index. Resolve id via index mapping (Bedrock pattern).
57
+ const resolvedId = graph.streamingToolCallBuffer.getIdByIndex(chunkIndex);
58
+ if (resolvedId) {
59
+ graph.streamingToolCallBuffer.append(resolvedId, toolCallChunk.args);
60
+ }
61
+ }
62
+ }
63
+ /** Edge Case: `id` and `name` fields cannot be empty strings */
64
+ for (const toolCallChunk of toolCallChunks) {
65
+ if (toolCallChunk.name === '') {
66
+ toolCallChunk.name = undefined;
67
+ }
68
+ if (toolCallChunk.id === '') {
69
+ toolCallChunk.id = undefined;
70
+ }
71
+ else if (tool_calls != null &&
72
+ toolCallChunk.id != null &&
73
+ toolCallChunk.name != null) {
74
+ tool_calls.push({
75
+ args: {},
76
+ id: toolCallChunk.id,
77
+ name: toolCallChunk.name,
78
+ type: ToolCallTypes.TOOL_CALL,
79
+ });
80
+ }
81
+ }
82
+ let stepId = _stepId;
83
+ const alreadyDispatched = prevRunStep?.type === StepTypes.MESSAGE_CREATION &&
84
+ graph.messageStepHasToolCalls.has(prevStepId);
85
+ if (prevRunStep?.type === StepTypes.TOOL_CALLS) {
86
+ /**
87
+ * If previous step is already a tool_calls step, use that step ID
88
+ * This ensures tool call deltas are dispatched to the correct step
89
+ */
90
+ stepId = prevStepId;
91
+ }
92
+ else if (!alreadyDispatched &&
93
+ prevRunStep?.type === StepTypes.MESSAGE_CREATION) {
94
+ /**
95
+ * Create tool_calls step as soon as we receive the first tool call chunk
96
+ * This ensures deltas are always associated with the correct step
97
+ *
98
+ * NOTE: We do NOT dispatch an empty text block here because:
99
+ * - Empty text blocks cause providers (Anthropic, Bedrock) to reject messages
100
+ * - The tool_calls themselves are sufficient for the step
101
+ * - Empty content with tool_call_ids gets stored in conversation history
102
+ * and causes "messages must have non-empty content" errors on replay
103
+ */
104
+ graph.messageStepHasToolCalls.set(prevStepId, true);
105
+ stepId = await graph.dispatchRunStep(stepKey, {
106
+ type: StepTypes.TOOL_CALLS,
107
+ tool_calls: tool_calls ?? [],
108
+ }, metadata);
109
+ }
110
+ await graph.dispatchRunStepDelta(stepId, {
111
+ type: StepTypes.TOOL_CALLS,
112
+ tool_calls: toolCallChunks,
113
+ });
114
+ }
115
+ export const handleToolCalls = async (toolCalls, metadata, graph) => {
116
+ if (!graph || !metadata) {
117
+ console.warn('Graph or metadata not found in `handleToolCalls`');
118
+ return;
119
+ }
120
+ if (!toolCalls) {
121
+ return;
122
+ }
123
+ if (toolCalls.length === 0) {
124
+ return;
125
+ }
126
+ const stepKey = graph.getStepKey(metadata);
127
+ /**
128
+ * Track whether we've already reused an empty TOOL_CALLS step created by
129
+ * handleToolCallChunks during streaming. Only reuse it once (for the first
130
+ * tool call); subsequent parallel tool calls must create their own steps.
131
+ */
132
+ let reusedChunkStepId;
133
+ for (const tool_call of toolCalls) {
134
+ const toolCallId = tool_call.id ?? `toolu_${nanoid()}`;
135
+ tool_call.id = toolCallId;
136
+ // If this tool call ID was already tracked via handleToolCallChunks,
137
+ // the step exists but may lack the name (Bedrock sends name only at model end).
138
+ // Dispatch a delta with the complete data so the client can fill in the name.
139
+ if (toolCallId && graph.toolCallStepIds.has(toolCallId)) {
140
+ const existingStepId = graph.toolCallStepIds.get(toolCallId);
141
+ if (existingStepId != null && existingStepId !== '') {
142
+ const argsStr = typeof tool_call.args === 'string'
143
+ ? tool_call.args
144
+ : JSON.stringify(tool_call.args);
145
+ await graph.dispatchRunStepDelta(existingStepId, {
146
+ type: StepTypes.TOOL_CALLS,
147
+ tool_calls: [{ name: tool_call.name, args: argsStr, id: toolCallId }],
148
+ });
149
+ }
150
+ continue;
151
+ }
152
+ let prevStepId = '';
153
+ let prevRunStep;
154
+ try {
155
+ prevStepId = graph.getStepIdByKey(stepKey);
156
+ prevRunStep = graph.getRunStep(prevStepId);
157
+ }
158
+ catch {
159
+ // no previous step
160
+ }
161
+ // If the previous step is TOOL_CALLS (created by handleToolCallChunks),
162
+ // either reuse it (if empty) or dispatch a new TOOL_CALLS step directly —
163
+ // skip the intermediate MESSAGE_CREATION to avoid orphaned gaps.
164
+ if (prevRunStep?.type === StepTypes.TOOL_CALLS) {
165
+ const details = prevRunStep.stepDetails;
166
+ const isEmpty = !details.tool_calls || details.tool_calls.length === 0;
167
+ if (isEmpty && prevStepId !== reusedChunkStepId) {
168
+ graph.toolCallStepIds.set(toolCallId, prevStepId);
169
+ reusedChunkStepId = prevStepId;
170
+ continue;
171
+ }
172
+ await graph.dispatchRunStep(stepKey, { type: StepTypes.TOOL_CALLS, tool_calls: [tool_call] }, metadata);
173
+ continue;
174
+ }
175
+ /**
176
+ * NOTE: We do NOT dispatch empty text blocks with tool_call_ids because:
177
+ * - Empty text blocks cause providers (Anthropic, Bedrock) to reject messages
178
+ * - They get stored in conversation history and cause errors on replay:
179
+ * "messages must have non-empty content" (Anthropic)
180
+ * "The content field in the Message object is empty" (Bedrock)
181
+ * - The tool_calls themselves are sufficient
182
+ */
183
+ /* If the previous step exists and is a message creation */
184
+ if (prevStepId && prevRunStep) {
185
+ graph.messageStepHasToolCalls.set(prevStepId, true);
186
+ /* If the previous step doesn't exist */
187
+ }
188
+ else if (!prevRunStep) {
189
+ const messageId = getMessageId(stepKey, graph, true) ?? '';
190
+ const stepId = await graph.dispatchRunStep(stepKey, {
191
+ type: StepTypes.MESSAGE_CREATION,
192
+ message_creation: {
193
+ message_id: messageId,
194
+ },
195
+ }, metadata);
196
+ graph.messageStepHasToolCalls.set(stepId, true);
197
+ }
198
+ await graph.dispatchRunStep(stepKey, {
199
+ type: StepTypes.TOOL_CALLS,
200
+ tool_calls: [tool_call],
201
+ }, metadata);
202
+ }
203
+ };
204
+ export const toolResultTypes = new Set([
205
+ // 'tool_use',
206
+ // 'server_tool_use',
207
+ // 'input_json_delta',
208
+ 'tool_result',
209
+ 'web_search_result',
210
+ 'web_search_tool_result',
211
+ ]);
212
+ /**
213
+ * Handles the result of a server tool call; in other words, a provider's built-in tool.
214
+ * As of 2025-07-06, only Anthropic handles server tool calls with this pattern.
215
+ */
216
+ export async function handleServerToolResult({ graph, content, metadata, agentContext, }) {
217
+ let skipHandling = false;
218
+ if (agentContext?.provider !== Providers.ANTHROPIC) {
219
+ return skipHandling;
220
+ }
221
+ if (typeof content === 'string' ||
222
+ content == null ||
223
+ content.length === 0 ||
224
+ (content.length === 1 &&
225
+ content[0].tool_use_id == null)) {
226
+ return skipHandling;
227
+ }
228
+ for (const contentPart of content) {
229
+ const toolUseId = contentPart.tool_use_id;
230
+ if (toolUseId == null || toolUseId === '') {
231
+ continue;
232
+ }
233
+ const stepId = graph.toolCallStepIds.get(toolUseId);
234
+ if (stepId == null || stepId === '') {
235
+ console.warn(`Tool use ID ${toolUseId} not found in graph, cannot dispatch tool result.`);
236
+ continue;
237
+ }
238
+ const runStep = graph.getRunStep(stepId);
239
+ if (!runStep) {
240
+ console.warn(`Run step for ${stepId} does not exist, cannot dispatch tool result.`);
241
+ continue;
242
+ }
243
+ else if (runStep.type !== StepTypes.TOOL_CALLS) {
244
+ console.warn(`Run step for ${stepId} is not a tool call step, cannot dispatch tool result.`);
245
+ continue;
246
+ }
247
+ const toolCall = runStep.stepDetails.type === StepTypes.TOOL_CALLS
248
+ ? runStep.stepDetails.tool_calls?.find((toolCall) => toolCall.id === toolUseId)
249
+ : undefined;
250
+ if (!toolCall) {
251
+ continue;
252
+ }
253
+ if (contentPart.type === 'web_search_result' ||
254
+ contentPart.type === 'web_search_tool_result') {
255
+ await handleAnthropicSearchResults({
256
+ contentPart: contentPart,
257
+ toolCall,
258
+ metadata,
259
+ graph,
260
+ });
261
+ }
262
+ if (!skipHandling) {
263
+ skipHandling = true;
264
+ }
265
+ }
266
+ return skipHandling;
267
+ }
268
+ async function handleAnthropicSearchResults({ contentPart, toolCall, metadata, graph, }) {
269
+ if (!Array.isArray(contentPart.content)) {
270
+ console.warn(`Expected content to be an array, got ${typeof contentPart.content}`);
271
+ return;
272
+ }
273
+ if (!isAnthropicWebSearchResult(contentPart.content[0])) {
274
+ console.warn(`Expected content to be an Anthropic web search result, got ${JSON.stringify(contentPart.content)}`);
275
+ return;
276
+ }
277
+ const turn = graph.invokedToolIds?.size ?? 0;
278
+ const searchResultData = coerceAnthropicSearchResults({
279
+ turn,
280
+ results: contentPart.content,
281
+ });
282
+ const name = toolCall.name;
283
+ const input = toolCall.args ?? {};
284
+ const artifact = {
285
+ [Constants.WEB_SEARCH]: searchResultData,
286
+ };
287
+ const { output: formattedOutput } = formatResultsForLLM(turn, searchResultData);
288
+ const output = new ToolMessage({
289
+ name,
290
+ artifact,
291
+ content: formattedOutput,
292
+ tool_call_id: toolCall.id,
293
+ });
294
+ const toolEndData = {
295
+ input,
296
+ output,
297
+ };
298
+ await graph.handlerRegistry
299
+ ?.getHandler(GraphEvents.TOOL_END)
300
+ ?.handle(GraphEvents.TOOL_END, toolEndData, metadata, graph);
301
+ if (graph.invokedToolIds == null) {
302
+ graph.invokedToolIds = new Set();
303
+ }
304
+ graph.invokedToolIds.add(toolCall.id);
305
+ }
306
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["handlers.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { nanoid } from 'nanoid';
4
4
  import { ToolMessage } from '@langchain/core/messages';
5
5
  import type { AnthropicWebSearchResultBlockParam } from '@/llm/anthropic/types';
6
6
  import type { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';
7
- import type { MultiAgentGraph, StandardGraph } from '@/graphs';
7
+ import type { Graph, MultiAgentGraph, StandardGraph } from '@/graphs';
8
8
  import type { AgentContext } from '@/agents/AgentContext';
9
9
  import type * as t from '@/types';
10
10
  import {
@@ -61,6 +61,74 @@ export async function handleToolCallChunks({
61
61
  ? []
62
62
  : undefined;
63
63
 
64
+ /**
65
+ * Feed streaming tool call buffer — accumulate raw arg strings for truncation recovery.
66
+ *
67
+ * Provider chunk patterns:
68
+ * - OpenAI/Anthropic: every chunk has {id, args} → direct append
69
+ * - Bedrock: START chunk has {id, name, index}, DELTA chunks have {args, index} (no id)
70
+ * → use index-to-id mapping to resolve the target buffer entry
71
+ *
72
+ * Duplicate detection: LangChain's `streamEvents` can emit the same `on_chat_model_stream`
73
+ * event multiple times when the model is wrapped in nested runnables. The buffer's `append()`
74
+ * tracks the last fragment per tool call and returns false for exact duplicates.
75
+ * When ALL chunks in a batch are duplicates, we skip the entire delta dispatch.
76
+ */
77
+ let allDuplicates = true;
78
+ for (const toolCallChunk of toolCallChunks) {
79
+ const chunkIndex = toolCallChunk.index;
80
+
81
+ // START chunk: has id (and usually name). Store index→id mapping for future DELTA chunks.
82
+ if (toolCallChunk.id) {
83
+ if (typeof chunkIndex === 'number') {
84
+ graph.streamingToolCallBuffer.setIndexMapping(
85
+ chunkIndex,
86
+ toolCallChunk.id
87
+ );
88
+ }
89
+ if (toolCallChunk.name) {
90
+ graph.streamingToolCallBuffer.setToolName(
91
+ toolCallChunk.id,
92
+ toolCallChunk.name
93
+ );
94
+ }
95
+ // Append args if present on the same chunk (OpenAI/Anthropic pattern)
96
+ if (toolCallChunk.args) {
97
+ const appended = graph.streamingToolCallBuffer.append(
98
+ toolCallChunk.id,
99
+ toolCallChunk.args
100
+ );
101
+ if (appended) allDuplicates = false;
102
+ } else {
103
+ // START chunk without args is never a duplicate (it sets up id/name)
104
+ allDuplicates = false;
105
+ }
106
+ } else if (toolCallChunk.args && typeof chunkIndex === 'number') {
107
+ // DELTA chunk: no id, but has args + index. Resolve id via index mapping (Bedrock pattern).
108
+ const resolvedId = graph.streamingToolCallBuffer.getIdByIndex(chunkIndex);
109
+ if (resolvedId) {
110
+ const appended = graph.streamingToolCallBuffer.append(
111
+ resolvedId,
112
+ toolCallChunk.args
113
+ );
114
+ if (appended) allDuplicates = false;
115
+ }
116
+ } else {
117
+ // Chunks without args or index are not duplicates
118
+ allDuplicates = false;
119
+ }
120
+ }
121
+
122
+ // If every chunk in this batch was an exact duplicate, skip the delta dispatch entirely.
123
+ // This prevents the frontend from receiving doubled fragments that corrupt accumulated args.
124
+ if (allDuplicates && toolCallChunks.length > 0) {
125
+ // TEMP DEBUG: dedup fix active — remove after E2E verification
126
+ console.log(
127
+ '[handleToolCallChunks:DEDUP] All chunks duplicate — skipping delta dispatch'
128
+ );
129
+ return;
130
+ }
131
+
64
132
  /** Edge Case: `id` and `name` fields cannot be empty strings */
65
133
  for (const toolCallChunk of toolCallChunks) {
66
134
  if (toolCallChunk.name === '') {
@@ -117,6 +185,7 @@ export async function handleToolCallChunks({
117
185
  metadata
118
186
  );
119
187
  }
188
+
120
189
  await graph.dispatchRunStepDelta(stepId, {
121
190
  type: StepTypes.TOOL_CALLS,
122
191
  tool_calls: toolCallChunks,
@@ -126,10 +195,10 @@ export async function handleToolCallChunks({
126
195
  export const handleToolCalls = async (
127
196
  toolCalls?: ToolCall[],
128
197
  metadata?: Record<string, unknown>,
129
- graph?: StandardGraph | MultiAgentGraph
198
+ graph?: Graph | StandardGraph | MultiAgentGraph
130
199
  ): Promise<void> => {
131
200
  if (!graph || !metadata) {
132
- console.warn(`Graph or metadata not found in ${event} event`);
201
+ console.warn('Graph or metadata not found in `handleToolCalls`');
133
202
  return;
134
203
  }
135
204
 
@@ -143,10 +212,32 @@ export const handleToolCalls = async (
143
212
 
144
213
  const stepKey = graph.getStepKey(metadata);
145
214
 
215
+ /**
216
+ * Track whether we've already reused an empty TOOL_CALLS step created by
217
+ * handleToolCallChunks during streaming. Only reuse it once (for the first
218
+ * tool call); subsequent parallel tool calls must create their own steps.
219
+ */
220
+ let reusedChunkStepId: string | undefined;
221
+
146
222
  for (const tool_call of toolCalls) {
147
223
  const toolCallId = tool_call.id ?? `toolu_${nanoid()}`;
148
224
  tool_call.id = toolCallId;
149
- if (!toolCallId || graph.toolCallStepIds.has(toolCallId)) {
225
+
226
+ // If this tool call ID was already tracked via handleToolCallChunks,
227
+ // the step exists but may lack the name (Bedrock sends name only at model end).
228
+ // Dispatch a delta with the complete data so the client can fill in the name.
229
+ if (toolCallId && graph.toolCallStepIds.has(toolCallId)) {
230
+ const existingStepId = graph.toolCallStepIds.get(toolCallId);
231
+ if (existingStepId != null && existingStepId !== '') {
232
+ const argsStr =
233
+ typeof tool_call.args === 'string'
234
+ ? tool_call.args
235
+ : JSON.stringify(tool_call.args);
236
+ await graph.dispatchRunStepDelta(existingStepId, {
237
+ type: StepTypes.TOOL_CALLS,
238
+ tool_calls: [{ name: tool_call.name, args: argsStr, id: toolCallId }],
239
+ });
240
+ }
150
241
  continue;
151
242
  }
152
243
 
@@ -159,6 +250,25 @@ export const handleToolCalls = async (
159
250
  // no previous step
160
251
  }
161
252
 
253
+ // If the previous step is TOOL_CALLS (created by handleToolCallChunks),
254
+ // either reuse it (if empty) or dispatch a new TOOL_CALLS step directly —
255
+ // skip the intermediate MESSAGE_CREATION to avoid orphaned gaps.
256
+ if (prevRunStep?.type === StepTypes.TOOL_CALLS) {
257
+ const details = prevRunStep.stepDetails as t.ToolCallsDetails;
258
+ const isEmpty = !details.tool_calls || details.tool_calls.length === 0;
259
+ if (isEmpty && prevStepId !== reusedChunkStepId) {
260
+ graph.toolCallStepIds.set(toolCallId, prevStepId);
261
+ reusedChunkStepId = prevStepId;
262
+ continue;
263
+ }
264
+ await graph.dispatchRunStep(
265
+ stepKey,
266
+ { type: StepTypes.TOOL_CALLS, tool_calls: [tool_call] },
267
+ metadata
268
+ );
269
+ continue;
270
+ }
271
+
162
272
  /**
163
273
  * NOTE: We do NOT dispatch empty text blocks with tool_call_ids because:
164
274
  * - Empty text blocks cause providers (Anthropic, Bedrock) to reject messages
@@ -169,17 +279,10 @@ export const handleToolCalls = async (
169
279
  */
170
280
 
171
281
  /* If the previous step exists and is a message creation */
172
- if (
173
- prevStepId &&
174
- prevRunStep &&
175
- prevRunStep.type === StepTypes.MESSAGE_CREATION
176
- ) {
282
+ if (prevStepId && prevRunStep) {
177
283
  graph.messageStepHasToolCalls.set(prevStepId, true);
178
- /* If the previous step doesn't exist or is not a message creation */
179
- } else if (
180
- !prevRunStep ||
181
- prevRunStep.type !== StepTypes.MESSAGE_CREATION
182
- ) {
284
+ /* If the previous step doesn't exist */
285
+ } else if (!prevRunStep) {
183
286
  const messageId = getMessageId(stepKey, graph, true) ?? '';
184
287
  const stepId = await graph.dispatchRunStep(
185
288
  stepKey,
@@ -271,8 +374,8 @@ export async function handleServerToolResult({
271
374
  const toolCall =
272
375
  runStep.stepDetails.type === StepTypes.TOOL_CALLS
273
376
  ? (runStep.stepDetails.tool_calls?.find(
274
- (toolCall) => toolCall.id === toolUseId
275
- ) as ToolCall)
377
+ (toolCall) => toolCall.id === toolUseId
378
+ ) as ToolCall)
276
379
  : undefined;
277
380
 
278
381
  if (!toolCall) {
@@ -0,0 +1,25 @@
1
+ import { tool } from '@langchain/core/tools';
2
+ /**
3
+ * Creates a schema-only tool for LLM binding in event-driven mode.
4
+ * These tools have valid schemas for the LLM to understand but should
5
+ * never be invoked directly - ToolNode handles execution via events.
6
+ */
7
+ export function createSchemaOnlyTool(definition) {
8
+ const { name, description, parameters, responseFormat } = definition;
9
+ return tool(async () => {
10
+ throw new Error(`Tool "${name}" should not be invoked directly in event-driven mode. ` +
11
+ 'ToolNode should dispatch ON_TOOL_EXECUTE events instead.');
12
+ }, {
13
+ name,
14
+ description: description ?? '',
15
+ schema: parameters ?? { type: 'object', properties: {} },
16
+ responseFormat: responseFormat ?? 'content_and_artifact',
17
+ });
18
+ }
19
+ /**
20
+ * Creates schema-only tools for all definitions in an array.
21
+ */
22
+ export function createSchemaOnlyTools(definitions) {
23
+ return definitions.map((def) => createSchemaOnlyTool(def));
24
+ }
25
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgC,MAAM,uBAAuB,CAAC;AAG3E;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAkB;IAElB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC;IAErE,OAAO,IAAI,CACT,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,yDAAyD;YACpE,0DAA0D,CAC7D,CAAC;IACJ,CAAC,EACD;QACE,IAAI;QACJ,WAAW,EAAE,WAAW,IAAI,EAAE;QAC9B,MAAM,EAAE,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;QACxD,cAAc,EAAE,cAAc,IAAI,sBAAsB;KACzD,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,WAAqB;IAErB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { getAttribution } from './utils';
2
+ /**
3
+ * Coerces Anthropic web search results to the SearchResultData format
4
+ * @param results - Array of Anthropic web search results
5
+ * @param turn - The turn number to associate with these results
6
+ * @returns SearchResultData with minimal ProcessedOrganic items
7
+ */
8
+ export function coerceAnthropicSearchResults({ results, turn = 0, }) {
9
+ const organic = results
10
+ .filter((result) => result.type === 'web_search_result')
11
+ .map((result, index) => ({
12
+ link: result.url,
13
+ position: index + 1,
14
+ title: result.title,
15
+ date: result.page_age ?? undefined,
16
+ attribution: getAttribution(result.url),
17
+ }));
18
+ return {
19
+ turn,
20
+ organic,
21
+ };
22
+ }
23
+ /**
24
+ * Helper function to check if an object is an Anthropic web search result
25
+ */
26
+ export function isAnthropicWebSearchResult(obj) {
27
+ return (typeof obj === 'object' &&
28
+ obj !== null &&
29
+ 'type' in obj &&
30
+ obj.type === 'web_search_result' &&
31
+ 'url' in obj &&
32
+ typeof obj.url === 'string');
33
+ }
34
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["anthropic.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,EAC3C,OAAO,EACP,IAAI,GAAG,CAAC,GAIT;IACC,MAAM,OAAO,GAAuB,OAAO;SACxC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC;SACvD,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC,GAAG;QAChB,QAAQ,EAAE,KAAK,GAAG,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,IAAI,EAAE,MAAM,CAAC,QAAQ,IAAI,SAAS;QAClC,WAAW,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;KACxC,CAAC,CAAC,CAAC;IAEN,OAAO;QACL,IAAI;QACJ,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAY;IAEZ,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACZ,MAAM,IAAI,GAAG;QACb,GAAG,CAAC,IAAI,KAAK,mBAAmB;QAChC,KAAK,IAAI,GAAG;QACZ,OAAQ,GAA+B,CAAC,GAAG,KAAK,QAAQ,CACzD,CAAC;AACJ,CAAC"}