@illuma-ai/agents 1.0.81

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 (558) hide show
  1. package/README.md +485 -0
  2. package/dist/cjs/agents/AgentContext.cjs +734 -0
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -0
  4. package/dist/cjs/common/enum.cjs +190 -0
  5. package/dist/cjs/common/enum.cjs.map +1 -0
  6. package/dist/cjs/events.cjs +172 -0
  7. package/dist/cjs/events.cjs.map +1 -0
  8. package/dist/cjs/graphs/Graph.cjs +1615 -0
  9. package/dist/cjs/graphs/Graph.cjs.map +1 -0
  10. package/dist/cjs/graphs/MultiAgentGraph.cjs +890 -0
  11. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -0
  12. package/dist/cjs/instrumentation.cjs +21 -0
  13. package/dist/cjs/instrumentation.cjs.map +1 -0
  14. package/dist/cjs/llm/anthropic/index.cjs +292 -0
  15. package/dist/cjs/llm/anthropic/index.cjs.map +1 -0
  16. package/dist/cjs/llm/anthropic/types.cjs +50 -0
  17. package/dist/cjs/llm/anthropic/types.cjs.map +1 -0
  18. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +630 -0
  19. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -0
  20. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +218 -0
  21. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -0
  22. package/dist/cjs/llm/anthropic/utils/tools.cjs +29 -0
  23. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -0
  24. package/dist/cjs/llm/bedrock/index.cjs +282 -0
  25. package/dist/cjs/llm/bedrock/index.cjs.map +1 -0
  26. package/dist/cjs/llm/fake.cjs +97 -0
  27. package/dist/cjs/llm/fake.cjs.map +1 -0
  28. package/dist/cjs/llm/google/index.cjs +216 -0
  29. package/dist/cjs/llm/google/index.cjs.map +1 -0
  30. package/dist/cjs/llm/google/utils/common.cjs +647 -0
  31. package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
  32. package/dist/cjs/llm/openai/index.cjs +1028 -0
  33. package/dist/cjs/llm/openai/index.cjs.map +1 -0
  34. package/dist/cjs/llm/openai/utils/index.cjs +765 -0
  35. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
  36. package/dist/cjs/llm/openrouter/index.cjs +212 -0
  37. package/dist/cjs/llm/openrouter/index.cjs.map +1 -0
  38. package/dist/cjs/llm/providers.cjs +43 -0
  39. package/dist/cjs/llm/providers.cjs.map +1 -0
  40. package/dist/cjs/llm/text.cjs +69 -0
  41. package/dist/cjs/llm/text.cjs.map +1 -0
  42. package/dist/cjs/llm/vertexai/index.cjs +329 -0
  43. package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
  44. package/dist/cjs/main.cjs +240 -0
  45. package/dist/cjs/main.cjs.map +1 -0
  46. package/dist/cjs/messages/cache.cjs +387 -0
  47. package/dist/cjs/messages/cache.cjs.map +1 -0
  48. package/dist/cjs/messages/content.cjs +53 -0
  49. package/dist/cjs/messages/content.cjs.map +1 -0
  50. package/dist/cjs/messages/core.cjs +367 -0
  51. package/dist/cjs/messages/core.cjs.map +1 -0
  52. package/dist/cjs/messages/format.cjs +761 -0
  53. package/dist/cjs/messages/format.cjs.map +1 -0
  54. package/dist/cjs/messages/ids.cjs +23 -0
  55. package/dist/cjs/messages/ids.cjs.map +1 -0
  56. package/dist/cjs/messages/prune.cjs +398 -0
  57. package/dist/cjs/messages/prune.cjs.map +1 -0
  58. package/dist/cjs/messages/tools.cjs +96 -0
  59. package/dist/cjs/messages/tools.cjs.map +1 -0
  60. package/dist/cjs/run.cjs +328 -0
  61. package/dist/cjs/run.cjs.map +1 -0
  62. package/dist/cjs/schemas/validate.cjs +324 -0
  63. package/dist/cjs/schemas/validate.cjs.map +1 -0
  64. package/dist/cjs/splitStream.cjs +210 -0
  65. package/dist/cjs/splitStream.cjs.map +1 -0
  66. package/dist/cjs/stream.cjs +620 -0
  67. package/dist/cjs/stream.cjs.map +1 -0
  68. package/dist/cjs/tools/BrowserTools.cjs +248 -0
  69. package/dist/cjs/tools/BrowserTools.cjs.map +1 -0
  70. package/dist/cjs/tools/Calculator.cjs +66 -0
  71. package/dist/cjs/tools/Calculator.cjs.map +1 -0
  72. package/dist/cjs/tools/CodeExecutor.cjs +234 -0
  73. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -0
  74. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +636 -0
  75. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -0
  76. package/dist/cjs/tools/ToolNode.cjs +548 -0
  77. package/dist/cjs/tools/ToolNode.cjs.map +1 -0
  78. package/dist/cjs/tools/ToolSearch.cjs +909 -0
  79. package/dist/cjs/tools/ToolSearch.cjs.map +1 -0
  80. package/dist/cjs/tools/handlers.cjs +255 -0
  81. package/dist/cjs/tools/handlers.cjs.map +1 -0
  82. package/dist/cjs/tools/schema.cjs +31 -0
  83. package/dist/cjs/tools/schema.cjs.map +1 -0
  84. package/dist/cjs/tools/search/anthropic.cjs +40 -0
  85. package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
  86. package/dist/cjs/tools/search/content.cjs +140 -0
  87. package/dist/cjs/tools/search/content.cjs.map +1 -0
  88. package/dist/cjs/tools/search/firecrawl.cjs +179 -0
  89. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -0
  90. package/dist/cjs/tools/search/format.cjs +203 -0
  91. package/dist/cjs/tools/search/format.cjs.map +1 -0
  92. package/dist/cjs/tools/search/highlights.cjs +245 -0
  93. package/dist/cjs/tools/search/highlights.cjs.map +1 -0
  94. package/dist/cjs/tools/search/rerankers.cjs +174 -0
  95. package/dist/cjs/tools/search/rerankers.cjs.map +1 -0
  96. package/dist/cjs/tools/search/schema.cjs +117 -0
  97. package/dist/cjs/tools/search/schema.cjs.map +1 -0
  98. package/dist/cjs/tools/search/search.cjs +566 -0
  99. package/dist/cjs/tools/search/search.cjs.map +1 -0
  100. package/dist/cjs/tools/search/serper-scraper.cjs +132 -0
  101. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -0
  102. package/dist/cjs/tools/search/tool.cjs +456 -0
  103. package/dist/cjs/tools/search/tool.cjs.map +1 -0
  104. package/dist/cjs/tools/search/utils.cjs +66 -0
  105. package/dist/cjs/tools/search/utils.cjs.map +1 -0
  106. package/dist/cjs/types/graph.cjs +29 -0
  107. package/dist/cjs/types/graph.cjs.map +1 -0
  108. package/dist/cjs/utils/contextAnalytics.cjs +66 -0
  109. package/dist/cjs/utils/contextAnalytics.cjs.map +1 -0
  110. package/dist/cjs/utils/events.cjs +31 -0
  111. package/dist/cjs/utils/events.cjs.map +1 -0
  112. package/dist/cjs/utils/graph.cjs +16 -0
  113. package/dist/cjs/utils/graph.cjs.map +1 -0
  114. package/dist/cjs/utils/handlers.cjs +70 -0
  115. package/dist/cjs/utils/handlers.cjs.map +1 -0
  116. package/dist/cjs/utils/llm.cjs +27 -0
  117. package/dist/cjs/utils/llm.cjs.map +1 -0
  118. package/dist/cjs/utils/misc.cjs +56 -0
  119. package/dist/cjs/utils/misc.cjs.map +1 -0
  120. package/dist/cjs/utils/run.cjs +73 -0
  121. package/dist/cjs/utils/run.cjs.map +1 -0
  122. package/dist/cjs/utils/schema.cjs +27 -0
  123. package/dist/cjs/utils/schema.cjs.map +1 -0
  124. package/dist/cjs/utils/title.cjs +125 -0
  125. package/dist/cjs/utils/title.cjs.map +1 -0
  126. package/dist/cjs/utils/tokens.cjs +125 -0
  127. package/dist/cjs/utils/tokens.cjs.map +1 -0
  128. package/dist/cjs/utils/toonFormat.cjs +388 -0
  129. package/dist/cjs/utils/toonFormat.cjs.map +1 -0
  130. package/dist/esm/agents/AgentContext.mjs +732 -0
  131. package/dist/esm/agents/AgentContext.mjs.map +1 -0
  132. package/dist/esm/common/enum.mjs +190 -0
  133. package/dist/esm/common/enum.mjs.map +1 -0
  134. package/dist/esm/events.mjs +164 -0
  135. package/dist/esm/events.mjs.map +1 -0
  136. package/dist/esm/graphs/Graph.mjs +1612 -0
  137. package/dist/esm/graphs/Graph.mjs.map +1 -0
  138. package/dist/esm/graphs/MultiAgentGraph.mjs +888 -0
  139. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -0
  140. package/dist/esm/instrumentation.mjs +19 -0
  141. package/dist/esm/instrumentation.mjs.map +1 -0
  142. package/dist/esm/llm/anthropic/index.mjs +290 -0
  143. package/dist/esm/llm/anthropic/index.mjs.map +1 -0
  144. package/dist/esm/llm/anthropic/types.mjs +48 -0
  145. package/dist/esm/llm/anthropic/types.mjs.map +1 -0
  146. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +627 -0
  147. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -0
  148. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +216 -0
  149. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -0
  150. package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
  151. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
  152. package/dist/esm/llm/bedrock/index.mjs +280 -0
  153. package/dist/esm/llm/bedrock/index.mjs.map +1 -0
  154. package/dist/esm/llm/fake.mjs +94 -0
  155. package/dist/esm/llm/fake.mjs.map +1 -0
  156. package/dist/esm/llm/google/index.mjs +214 -0
  157. package/dist/esm/llm/google/index.mjs.map +1 -0
  158. package/dist/esm/llm/google/utils/common.mjs +638 -0
  159. package/dist/esm/llm/google/utils/common.mjs.map +1 -0
  160. package/dist/esm/llm/openai/index.mjs +1018 -0
  161. package/dist/esm/llm/openai/index.mjs.map +1 -0
  162. package/dist/esm/llm/openai/utils/index.mjs +759 -0
  163. package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
  164. package/dist/esm/llm/openrouter/index.mjs +210 -0
  165. package/dist/esm/llm/openrouter/index.mjs.map +1 -0
  166. package/dist/esm/llm/providers.mjs +39 -0
  167. package/dist/esm/llm/providers.mjs.map +1 -0
  168. package/dist/esm/llm/text.mjs +67 -0
  169. package/dist/esm/llm/text.mjs.map +1 -0
  170. package/dist/esm/llm/vertexai/index.mjs +327 -0
  171. package/dist/esm/llm/vertexai/index.mjs.map +1 -0
  172. package/dist/esm/main.mjs +37 -0
  173. package/dist/esm/main.mjs.map +1 -0
  174. package/dist/esm/messages/cache.mjs +382 -0
  175. package/dist/esm/messages/cache.mjs.map +1 -0
  176. package/dist/esm/messages/content.mjs +51 -0
  177. package/dist/esm/messages/content.mjs.map +1 -0
  178. package/dist/esm/messages/core.mjs +359 -0
  179. package/dist/esm/messages/core.mjs.map +1 -0
  180. package/dist/esm/messages/format.mjs +752 -0
  181. package/dist/esm/messages/format.mjs.map +1 -0
  182. package/dist/esm/messages/ids.mjs +21 -0
  183. package/dist/esm/messages/ids.mjs.map +1 -0
  184. package/dist/esm/messages/prune.mjs +393 -0
  185. package/dist/esm/messages/prune.mjs.map +1 -0
  186. package/dist/esm/messages/tools.mjs +93 -0
  187. package/dist/esm/messages/tools.mjs.map +1 -0
  188. package/dist/esm/run.mjs +325 -0
  189. package/dist/esm/run.mjs.map +1 -0
  190. package/dist/esm/schemas/validate.mjs +317 -0
  191. package/dist/esm/schemas/validate.mjs.map +1 -0
  192. package/dist/esm/splitStream.mjs +207 -0
  193. package/dist/esm/splitStream.mjs.map +1 -0
  194. package/dist/esm/stream.mjs +616 -0
  195. package/dist/esm/stream.mjs.map +1 -0
  196. package/dist/esm/tools/BrowserTools.mjs +244 -0
  197. package/dist/esm/tools/BrowserTools.mjs.map +1 -0
  198. package/dist/esm/tools/Calculator.mjs +41 -0
  199. package/dist/esm/tools/Calculator.mjs.map +1 -0
  200. package/dist/esm/tools/CodeExecutor.mjs +226 -0
  201. package/dist/esm/tools/CodeExecutor.mjs.map +1 -0
  202. package/dist/esm/tools/ProgrammaticToolCalling.mjs +622 -0
  203. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -0
  204. package/dist/esm/tools/ToolNode.mjs +545 -0
  205. package/dist/esm/tools/ToolNode.mjs.map +1 -0
  206. package/dist/esm/tools/ToolSearch.mjs +870 -0
  207. package/dist/esm/tools/ToolSearch.mjs.map +1 -0
  208. package/dist/esm/tools/handlers.mjs +250 -0
  209. package/dist/esm/tools/handlers.mjs.map +1 -0
  210. package/dist/esm/tools/schema.mjs +28 -0
  211. package/dist/esm/tools/schema.mjs.map +1 -0
  212. package/dist/esm/tools/search/anthropic.mjs +37 -0
  213. package/dist/esm/tools/search/anthropic.mjs.map +1 -0
  214. package/dist/esm/tools/search/content.mjs +119 -0
  215. package/dist/esm/tools/search/content.mjs.map +1 -0
  216. package/dist/esm/tools/search/firecrawl.mjs +176 -0
  217. package/dist/esm/tools/search/firecrawl.mjs.map +1 -0
  218. package/dist/esm/tools/search/format.mjs +201 -0
  219. package/dist/esm/tools/search/format.mjs.map +1 -0
  220. package/dist/esm/tools/search/highlights.mjs +243 -0
  221. package/dist/esm/tools/search/highlights.mjs.map +1 -0
  222. package/dist/esm/tools/search/rerankers.mjs +168 -0
  223. package/dist/esm/tools/search/rerankers.mjs.map +1 -0
  224. package/dist/esm/tools/search/schema.mjs +104 -0
  225. package/dist/esm/tools/search/schema.mjs.map +1 -0
  226. package/dist/esm/tools/search/search.mjs +563 -0
  227. package/dist/esm/tools/search/search.mjs.map +1 -0
  228. package/dist/esm/tools/search/serper-scraper.mjs +129 -0
  229. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -0
  230. package/dist/esm/tools/search/tool.mjs +454 -0
  231. package/dist/esm/tools/search/tool.mjs.map +1 -0
  232. package/dist/esm/tools/search/utils.mjs +61 -0
  233. package/dist/esm/tools/search/utils.mjs.map +1 -0
  234. package/dist/esm/types/graph.mjs +26 -0
  235. package/dist/esm/types/graph.mjs.map +1 -0
  236. package/dist/esm/utils/contextAnalytics.mjs +64 -0
  237. package/dist/esm/utils/contextAnalytics.mjs.map +1 -0
  238. package/dist/esm/utils/events.mjs +29 -0
  239. package/dist/esm/utils/events.mjs.map +1 -0
  240. package/dist/esm/utils/graph.mjs +13 -0
  241. package/dist/esm/utils/graph.mjs.map +1 -0
  242. package/dist/esm/utils/handlers.mjs +68 -0
  243. package/dist/esm/utils/handlers.mjs.map +1 -0
  244. package/dist/esm/utils/llm.mjs +24 -0
  245. package/dist/esm/utils/llm.mjs.map +1 -0
  246. package/dist/esm/utils/misc.mjs +53 -0
  247. package/dist/esm/utils/misc.mjs.map +1 -0
  248. package/dist/esm/utils/run.mjs +70 -0
  249. package/dist/esm/utils/run.mjs.map +1 -0
  250. package/dist/esm/utils/schema.mjs +24 -0
  251. package/dist/esm/utils/schema.mjs.map +1 -0
  252. package/dist/esm/utils/title.mjs +122 -0
  253. package/dist/esm/utils/title.mjs.map +1 -0
  254. package/dist/esm/utils/tokens.mjs +121 -0
  255. package/dist/esm/utils/tokens.mjs.map +1 -0
  256. package/dist/esm/utils/toonFormat.mjs +381 -0
  257. package/dist/esm/utils/toonFormat.mjs.map +1 -0
  258. package/dist/types/agents/AgentContext.d.ts +293 -0
  259. package/dist/types/common/enum.d.ts +155 -0
  260. package/dist/types/common/index.d.ts +1 -0
  261. package/dist/types/events.d.ts +31 -0
  262. package/dist/types/graphs/Graph.d.ts +216 -0
  263. package/dist/types/graphs/MultiAgentGraph.d.ts +104 -0
  264. package/dist/types/graphs/index.d.ts +2 -0
  265. package/dist/types/index.d.ts +21 -0
  266. package/dist/types/instrumentation.d.ts +1 -0
  267. package/dist/types/llm/anthropic/index.d.ts +39 -0
  268. package/dist/types/llm/anthropic/types.d.ts +37 -0
  269. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +14 -0
  270. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +14 -0
  271. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +22 -0
  272. package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
  273. package/dist/types/llm/bedrock/index.d.ts +141 -0
  274. package/dist/types/llm/bedrock/types.d.ts +27 -0
  275. package/dist/types/llm/bedrock/utils/index.d.ts +5 -0
  276. package/dist/types/llm/bedrock/utils/message_inputs.d.ts +31 -0
  277. package/dist/types/llm/bedrock/utils/message_outputs.d.ts +33 -0
  278. package/dist/types/llm/fake.d.ts +31 -0
  279. package/dist/types/llm/google/index.d.ts +24 -0
  280. package/dist/types/llm/google/types.d.ts +42 -0
  281. package/dist/types/llm/google/utils/common.d.ts +34 -0
  282. package/dist/types/llm/google/utils/tools.d.ts +10 -0
  283. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
  284. package/dist/types/llm/openai/index.d.ts +127 -0
  285. package/dist/types/llm/openai/types.d.ts +10 -0
  286. package/dist/types/llm/openai/utils/index.d.ts +29 -0
  287. package/dist/types/llm/openrouter/index.d.ts +15 -0
  288. package/dist/types/llm/providers.d.ts +5 -0
  289. package/dist/types/llm/text.d.ts +21 -0
  290. package/dist/types/llm/vertexai/index.d.ts +293 -0
  291. package/dist/types/messages/cache.d.ts +54 -0
  292. package/dist/types/messages/content.d.ts +7 -0
  293. package/dist/types/messages/core.d.ts +14 -0
  294. package/dist/types/messages/format.d.ts +137 -0
  295. package/dist/types/messages/ids.d.ts +3 -0
  296. package/dist/types/messages/index.d.ts +7 -0
  297. package/dist/types/messages/prune.d.ts +52 -0
  298. package/dist/types/messages/reducer.d.ts +9 -0
  299. package/dist/types/messages/tools.d.ts +17 -0
  300. package/dist/types/mockStream.d.ts +32 -0
  301. package/dist/types/prompts/collab.d.ts +1 -0
  302. package/dist/types/prompts/index.d.ts +2 -0
  303. package/dist/types/prompts/taskmanager.d.ts +41 -0
  304. package/dist/types/run.d.ts +41 -0
  305. package/dist/types/schemas/index.d.ts +1 -0
  306. package/dist/types/schemas/validate.d.ts +59 -0
  307. package/dist/types/splitStream.d.ts +37 -0
  308. package/dist/types/stream.d.ts +15 -0
  309. package/dist/types/test/mockTools.d.ts +28 -0
  310. package/dist/types/tools/BrowserTools.d.ts +87 -0
  311. package/dist/types/tools/Calculator.d.ts +34 -0
  312. package/dist/types/tools/CodeExecutor.d.ts +57 -0
  313. package/dist/types/tools/ProgrammaticToolCalling.d.ts +138 -0
  314. package/dist/types/tools/ToolNode.d.ts +51 -0
  315. package/dist/types/tools/ToolSearch.d.ts +219 -0
  316. package/dist/types/tools/handlers.d.ts +22 -0
  317. package/dist/types/tools/schema.d.ts +12 -0
  318. package/dist/types/tools/search/anthropic.d.ts +16 -0
  319. package/dist/types/tools/search/content.d.ts +4 -0
  320. package/dist/types/tools/search/firecrawl.d.ts +54 -0
  321. package/dist/types/tools/search/format.d.ts +5 -0
  322. package/dist/types/tools/search/highlights.d.ts +13 -0
  323. package/dist/types/tools/search/index.d.ts +3 -0
  324. package/dist/types/tools/search/rerankers.d.ts +38 -0
  325. package/dist/types/tools/search/schema.d.ts +103 -0
  326. package/dist/types/tools/search/search.d.ts +8 -0
  327. package/dist/types/tools/search/serper-scraper.d.ts +59 -0
  328. package/dist/types/tools/search/test.d.ts +1 -0
  329. package/dist/types/tools/search/tool.d.ts +3 -0
  330. package/dist/types/tools/search/types.d.ts +575 -0
  331. package/dist/types/tools/search/utils.d.ts +10 -0
  332. package/dist/types/types/graph.d.ts +399 -0
  333. package/dist/types/types/index.d.ts +5 -0
  334. package/dist/types/types/llm.d.ts +105 -0
  335. package/dist/types/types/messages.d.ts +4 -0
  336. package/dist/types/types/run.d.ts +112 -0
  337. package/dist/types/types/stream.d.ts +308 -0
  338. package/dist/types/types/tools.d.ts +296 -0
  339. package/dist/types/utils/contextAnalytics.d.ts +37 -0
  340. package/dist/types/utils/events.d.ts +6 -0
  341. package/dist/types/utils/graph.d.ts +2 -0
  342. package/dist/types/utils/handlers.d.ts +34 -0
  343. package/dist/types/utils/index.d.ts +9 -0
  344. package/dist/types/utils/llm.d.ts +3 -0
  345. package/dist/types/utils/llmConfig.d.ts +3 -0
  346. package/dist/types/utils/logging.d.ts +1 -0
  347. package/dist/types/utils/misc.d.ts +7 -0
  348. package/dist/types/utils/run.d.ts +27 -0
  349. package/dist/types/utils/schema.d.ts +8 -0
  350. package/dist/types/utils/title.d.ts +4 -0
  351. package/dist/types/utils/tokens.d.ts +28 -0
  352. package/dist/types/utils/toonFormat.d.ts +111 -0
  353. package/package.json +190 -0
  354. package/src/agents/AgentContext.test.ts +458 -0
  355. package/src/agents/AgentContext.ts +972 -0
  356. package/src/agents/__tests__/AgentContext.test.ts +805 -0
  357. package/src/agents/__tests__/resolveStructuredOutputMode.test.ts +137 -0
  358. package/src/common/enum.ts +203 -0
  359. package/src/common/index.ts +2 -0
  360. package/src/events.ts +223 -0
  361. package/src/graphs/Graph.ts +2228 -0
  362. package/src/graphs/MultiAgentGraph.ts +1063 -0
  363. package/src/graphs/__tests__/structured-output.integration.test.ts +809 -0
  364. package/src/graphs/__tests__/structured-output.test.ts +183 -0
  365. package/src/graphs/index.ts +2 -0
  366. package/src/index.ts +34 -0
  367. package/src/instrumentation.ts +22 -0
  368. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  369. package/src/llm/anthropic/index.ts +413 -0
  370. package/src/llm/anthropic/llm.spec.ts +1442 -0
  371. package/src/llm/anthropic/types.ts +140 -0
  372. package/src/llm/anthropic/utils/message_inputs.ts +757 -0
  373. package/src/llm/anthropic/utils/message_outputs.ts +289 -0
  374. package/src/llm/anthropic/utils/output_parsers.ts +133 -0
  375. package/src/llm/anthropic/utils/tools.ts +29 -0
  376. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +495 -0
  377. package/src/llm/bedrock/index.ts +411 -0
  378. package/src/llm/bedrock/llm.spec.ts +616 -0
  379. package/src/llm/bedrock/types.ts +51 -0
  380. package/src/llm/bedrock/utils/index.ts +18 -0
  381. package/src/llm/bedrock/utils/message_inputs.ts +563 -0
  382. package/src/llm/bedrock/utils/message_outputs.ts +310 -0
  383. package/src/llm/fake.ts +133 -0
  384. package/src/llm/google/data/gettysburg10.wav +0 -0
  385. package/src/llm/google/data/hotdog.jpg +0 -0
  386. package/src/llm/google/index.ts +337 -0
  387. package/src/llm/google/llm.spec.ts +934 -0
  388. package/src/llm/google/types.ts +56 -0
  389. package/src/llm/google/utils/common.ts +873 -0
  390. package/src/llm/google/utils/tools.ts +160 -0
  391. package/src/llm/google/utils/zod_to_genai_parameters.ts +86 -0
  392. package/src/llm/openai/index.ts +1366 -0
  393. package/src/llm/openai/types.ts +24 -0
  394. package/src/llm/openai/utils/index.ts +1035 -0
  395. package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
  396. package/src/llm/openrouter/index.ts +291 -0
  397. package/src/llm/providers.ts +52 -0
  398. package/src/llm/text.ts +94 -0
  399. package/src/llm/vertexai/index.ts +359 -0
  400. package/src/messages/__tests__/tools.test.ts +473 -0
  401. package/src/messages/cache.test.ts +1261 -0
  402. package/src/messages/cache.ts +518 -0
  403. package/src/messages/content.test.ts +362 -0
  404. package/src/messages/content.ts +63 -0
  405. package/src/messages/core.ts +473 -0
  406. package/src/messages/ensureThinkingBlock.test.ts +468 -0
  407. package/src/messages/format.ts +1029 -0
  408. package/src/messages/formatAgentMessages.test.ts +1513 -0
  409. package/src/messages/formatAgentMessages.tools.test.ts +419 -0
  410. package/src/messages/formatMessage.test.ts +693 -0
  411. package/src/messages/ids.ts +26 -0
  412. package/src/messages/index.ts +7 -0
  413. package/src/messages/labelContentByAgent.test.ts +887 -0
  414. package/src/messages/prune.ts +568 -0
  415. package/src/messages/reducer.ts +80 -0
  416. package/src/messages/shiftIndexTokenCountMap.test.ts +81 -0
  417. package/src/messages/tools.ts +108 -0
  418. package/src/mockStream.ts +99 -0
  419. package/src/prompts/collab.ts +6 -0
  420. package/src/prompts/index.ts +2 -0
  421. package/src/prompts/taskmanager.ts +61 -0
  422. package/src/run.ts +467 -0
  423. package/src/schemas/index.ts +2 -0
  424. package/src/schemas/schema-preparation.test.ts +500 -0
  425. package/src/schemas/validate.test.ts +358 -0
  426. package/src/schemas/validate.ts +454 -0
  427. package/src/scripts/abort.ts +157 -0
  428. package/src/scripts/ant_web_search.ts +158 -0
  429. package/src/scripts/ant_web_search_edge_case.ts +162 -0
  430. package/src/scripts/ant_web_search_error_edge_case.ts +148 -0
  431. package/src/scripts/args.ts +48 -0
  432. package/src/scripts/caching.ts +132 -0
  433. package/src/scripts/cli.ts +172 -0
  434. package/src/scripts/cli2.ts +133 -0
  435. package/src/scripts/cli3.ts +184 -0
  436. package/src/scripts/cli4.ts +191 -0
  437. package/src/scripts/cli5.ts +191 -0
  438. package/src/scripts/code_exec.ts +213 -0
  439. package/src/scripts/code_exec_files.ts +236 -0
  440. package/src/scripts/code_exec_multi_session.ts +241 -0
  441. package/src/scripts/code_exec_ptc.ts +334 -0
  442. package/src/scripts/code_exec_session.ts +282 -0
  443. package/src/scripts/code_exec_simple.ts +147 -0
  444. package/src/scripts/content.ts +138 -0
  445. package/src/scripts/empty_input.ts +137 -0
  446. package/src/scripts/handoff-test.ts +135 -0
  447. package/src/scripts/image.ts +178 -0
  448. package/src/scripts/memory.ts +97 -0
  449. package/src/scripts/multi-agent-chain.ts +331 -0
  450. package/src/scripts/multi-agent-conditional.ts +221 -0
  451. package/src/scripts/multi-agent-document-review-chain.ts +197 -0
  452. package/src/scripts/multi-agent-hybrid-flow.ts +310 -0
  453. package/src/scripts/multi-agent-parallel-start.ts +265 -0
  454. package/src/scripts/multi-agent-parallel.ts +394 -0
  455. package/src/scripts/multi-agent-sequence.ts +217 -0
  456. package/src/scripts/multi-agent-supervisor.ts +365 -0
  457. package/src/scripts/multi-agent-test.ts +186 -0
  458. package/src/scripts/parallel-asymmetric-tools-test.ts +274 -0
  459. package/src/scripts/parallel-full-metadata-test.ts +240 -0
  460. package/src/scripts/parallel-tools-test.ts +340 -0
  461. package/src/scripts/programmatic_exec.ts +396 -0
  462. package/src/scripts/programmatic_exec_agent.ts +231 -0
  463. package/src/scripts/search.ts +146 -0
  464. package/src/scripts/sequential-full-metadata-test.ts +197 -0
  465. package/src/scripts/simple.ts +225 -0
  466. package/src/scripts/single-agent-metadata-test.ts +198 -0
  467. package/src/scripts/stream.ts +140 -0
  468. package/src/scripts/test-custom-prompt-key.ts +145 -0
  469. package/src/scripts/test-handoff-input.ts +170 -0
  470. package/src/scripts/test-handoff-preamble.ts +277 -0
  471. package/src/scripts/test-multi-agent-list-handoff.ts +417 -0
  472. package/src/scripts/test-parallel-agent-labeling.ts +325 -0
  473. package/src/scripts/test-parallel-handoffs.ts +291 -0
  474. package/src/scripts/test-thinking-handoff-bedrock.ts +153 -0
  475. package/src/scripts/test-thinking-handoff.ts +155 -0
  476. package/src/scripts/test-tools-before-handoff.ts +226 -0
  477. package/src/scripts/test_code_api.ts +361 -0
  478. package/src/scripts/thinking-bedrock.ts +159 -0
  479. package/src/scripts/thinking.ts +171 -0
  480. package/src/scripts/tool_search.ts +162 -0
  481. package/src/scripts/tools.ts +177 -0
  482. package/src/specs/agent-handoffs.test.ts +888 -0
  483. package/src/specs/anthropic.simple.test.ts +387 -0
  484. package/src/specs/azure.simple.test.ts +364 -0
  485. package/src/specs/cache.simple.test.ts +396 -0
  486. package/src/specs/deepseek.simple.test.ts +283 -0
  487. package/src/specs/emergency-prune.test.ts +407 -0
  488. package/src/specs/moonshot.simple.test.ts +358 -0
  489. package/src/specs/openai.simple.test.ts +311 -0
  490. package/src/specs/openrouter.simple.test.ts +107 -0
  491. package/src/specs/prune.test.ts +901 -0
  492. package/src/specs/reasoning.test.ts +201 -0
  493. package/src/specs/spec.utils.ts +3 -0
  494. package/src/specs/thinking-handoff.test.ts +620 -0
  495. package/src/specs/thinking-prune.test.ts +703 -0
  496. package/src/specs/token-distribution-edge-case.test.ts +316 -0
  497. package/src/specs/token-memoization.test.ts +32 -0
  498. package/src/specs/tool-error.test.ts +198 -0
  499. package/src/splitStream.test.ts +691 -0
  500. package/src/splitStream.ts +234 -0
  501. package/src/stream.test.ts +94 -0
  502. package/src/stream.ts +801 -0
  503. package/src/test/mockTools.ts +386 -0
  504. package/src/tools/BrowserTools.ts +393 -0
  505. package/src/tools/Calculator.test.ts +278 -0
  506. package/src/tools/Calculator.ts +46 -0
  507. package/src/tools/CodeExecutor.ts +270 -0
  508. package/src/tools/ProgrammaticToolCalling.ts +785 -0
  509. package/src/tools/ToolNode.ts +674 -0
  510. package/src/tools/ToolSearch.ts +1095 -0
  511. package/src/tools/__tests__/BrowserTools.test.ts +265 -0
  512. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.ts +319 -0
  513. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +1006 -0
  514. package/src/tools/__tests__/ToolSearch.integration.test.ts +162 -0
  515. package/src/tools/__tests__/ToolSearch.test.ts +1003 -0
  516. package/src/tools/handlers.ts +363 -0
  517. package/src/tools/schema.ts +37 -0
  518. package/src/tools/search/anthropic.ts +51 -0
  519. package/src/tools/search/content.test.ts +173 -0
  520. package/src/tools/search/content.ts +147 -0
  521. package/src/tools/search/firecrawl.ts +210 -0
  522. package/src/tools/search/format.ts +250 -0
  523. package/src/tools/search/highlights.ts +320 -0
  524. package/src/tools/search/index.ts +3 -0
  525. package/src/tools/search/jina-reranker.test.ts +130 -0
  526. package/src/tools/search/output.md +2775 -0
  527. package/src/tools/search/rerankers.ts +242 -0
  528. package/src/tools/search/schema.ts +113 -0
  529. package/src/tools/search/search.ts +768 -0
  530. package/src/tools/search/serper-scraper.ts +155 -0
  531. package/src/tools/search/test.html +884 -0
  532. package/src/tools/search/test.md +643 -0
  533. package/src/tools/search/test.ts +159 -0
  534. package/src/tools/search/tool.ts +657 -0
  535. package/src/tools/search/types.ts +665 -0
  536. package/src/tools/search/utils.ts +79 -0
  537. package/src/types/graph.test.ts +218 -0
  538. package/src/types/graph.ts +533 -0
  539. package/src/types/index.ts +6 -0
  540. package/src/types/llm.ts +140 -0
  541. package/src/types/messages.ts +4 -0
  542. package/src/types/run.ts +128 -0
  543. package/src/types/stream.ts +417 -0
  544. package/src/types/tools.ts +355 -0
  545. package/src/utils/contextAnalytics.ts +103 -0
  546. package/src/utils/events.ts +32 -0
  547. package/src/utils/graph.ts +11 -0
  548. package/src/utils/handlers.ts +107 -0
  549. package/src/utils/index.ts +9 -0
  550. package/src/utils/llm.ts +26 -0
  551. package/src/utils/llmConfig.ts +208 -0
  552. package/src/utils/logging.ts +48 -0
  553. package/src/utils/misc.ts +57 -0
  554. package/src/utils/run.ts +106 -0
  555. package/src/utils/schema.ts +35 -0
  556. package/src/utils/title.ts +177 -0
  557. package/src/utils/tokens.ts +142 -0
  558. package/src/utils/toonFormat.ts +475 -0
@@ -0,0 +1,616 @@
1
+ import { Providers, StepTypes, ContentTypes, GraphEvents, ToolCallTypes } from './common/enum.mjs';
2
+ import { handleServerToolResult, handleToolCalls, handleToolCallChunks } from './tools/handlers.mjs';
3
+ import './messages/core.mjs';
4
+ import { getMessageId } from './messages/ids.mjs';
5
+ import '@langchain/core/messages';
6
+ import './utils/toonFormat.mjs';
7
+
8
+ /**
9
+ * Parses content to extract thinking sections enclosed in <think> tags using string operations
10
+ * @param content The content to parse
11
+ * @returns An object with separated text and thinking content
12
+ */
13
+ function parseThinkingContent(content) {
14
+ // If no think tags, return the original content as text
15
+ if (!content.includes('<think>')) {
16
+ return { text: content, thinking: '' };
17
+ }
18
+ let textResult = '';
19
+ const thinkingResult = [];
20
+ let position = 0;
21
+ while (position < content.length) {
22
+ const thinkStart = content.indexOf('<think>', position);
23
+ if (thinkStart === -1) {
24
+ // No more think tags, add the rest and break
25
+ textResult += content.slice(position);
26
+ break;
27
+ }
28
+ // Add text before the think tag
29
+ textResult += content.slice(position, thinkStart);
30
+ const thinkEnd = content.indexOf('</think>', thinkStart);
31
+ if (thinkEnd === -1) {
32
+ // Malformed input, no closing tag
33
+ textResult += content.slice(thinkStart);
34
+ break;
35
+ }
36
+ // Add the thinking content
37
+ const thinkContent = content.slice(thinkStart + 7, thinkEnd);
38
+ thinkingResult.push(thinkContent);
39
+ // Move position to after the think tag
40
+ position = thinkEnd + 8; // 8 is the length of '</think>'
41
+ }
42
+ return {
43
+ text: textResult.trim(),
44
+ thinking: thinkingResult.join('\n').trim(),
45
+ };
46
+ }
47
+ function getNonEmptyValue(possibleValues) {
48
+ for (const value of possibleValues) {
49
+ if (value && value.trim() !== '') {
50
+ return value;
51
+ }
52
+ }
53
+ return undefined;
54
+ }
55
+ function getChunkContent({ chunk, provider, reasoningKey, }) {
56
+ if ((provider === Providers.OPENAI || provider === Providers.AZURE) &&
57
+ chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text != null &&
58
+ (chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text?.length ?? 0) > 0) {
59
+ return chunk?.additional_kwargs?.reasoning?.summary?.[0]?.text;
60
+ }
61
+ /**
62
+ * For OpenRouter, reasoning is stored in additional_kwargs.reasoning (not reasoning_content).
63
+ * NOTE: We intentionally do NOT extract text from reasoning_details here.
64
+ * The reasoning_details array contains the FULL accumulated reasoning text (set only on final chunk),
65
+ * but individual reasoning tokens are already streamed via additional_kwargs.reasoning.
66
+ * Extracting from reasoning_details would cause duplication.
67
+ * The reasoning_details is only used for:
68
+ * 1. Detecting reasoning mode in handleReasoning()
69
+ * 2. Final message storage (for thought signatures)
70
+ */
71
+ if (provider === Providers.OPENROUTER) {
72
+ // Content presence signals end of reasoning phase - prefer content over reasoning
73
+ // This handles transitional chunks that may have both reasoning and content
74
+ if (typeof chunk?.content === 'string' && chunk.content !== '') {
75
+ return chunk.content;
76
+ }
77
+ const reasoning = chunk?.additional_kwargs?.reasoning;
78
+ if (reasoning != null && reasoning !== '') {
79
+ return reasoning;
80
+ }
81
+ return chunk?.content;
82
+ }
83
+ return ((chunk?.additional_kwargs?.[reasoningKey] ?? '') ||
84
+ chunk?.content);
85
+ }
86
+ class ChatModelStreamHandler {
87
+ async handle(event, data, metadata, graph) {
88
+ if (!graph) {
89
+ throw new Error('Graph not found');
90
+ }
91
+ if (!graph.config) {
92
+ throw new Error('Config not found in graph');
93
+ }
94
+ if (!data.chunk) {
95
+ console.warn(`No chunk found in ${event} event`);
96
+ return;
97
+ }
98
+ const agentContext = graph.getAgentContext(metadata);
99
+ const chunk = data.chunk;
100
+ const content = getChunkContent({
101
+ chunk,
102
+ reasoningKey: agentContext.reasoningKey,
103
+ provider: agentContext.provider,
104
+ });
105
+ const skipHandling = await handleServerToolResult({
106
+ graph,
107
+ content,
108
+ metadata,
109
+ agentContext,
110
+ });
111
+ if (skipHandling) {
112
+ return;
113
+ }
114
+ this.handleReasoning(chunk, agentContext);
115
+ let hasToolCalls = false;
116
+ if (chunk.tool_calls &&
117
+ chunk.tool_calls.length > 0 &&
118
+ chunk.tool_calls.every((tc) => tc.id != null &&
119
+ tc.id !== '' &&
120
+ tc.name != null &&
121
+ tc.name !== '')) {
122
+ hasToolCalls = true;
123
+ await handleToolCalls(chunk.tool_calls, metadata, graph);
124
+ }
125
+ const hasToolCallChunks = (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) ?? false;
126
+ const isEmptyContent = typeof content === 'undefined' ||
127
+ !content.length ||
128
+ (typeof content === 'string' && !content);
129
+ /** Set a preliminary message ID if found in empty chunk */
130
+ const isEmptyChunk = isEmptyContent && !hasToolCallChunks;
131
+ if (isEmptyChunk &&
132
+ (chunk.id ?? '') !== '' &&
133
+ !graph.prelimMessageIdsByStepKey.has(chunk.id ?? '')) {
134
+ const stepKey = graph.getStepKey(metadata);
135
+ graph.prelimMessageIdsByStepKey.set(stepKey, chunk.id ?? '');
136
+ }
137
+ else if (isEmptyChunk) {
138
+ return;
139
+ }
140
+ const stepKey = graph.getStepKey(metadata);
141
+ if (hasToolCallChunks &&
142
+ chunk.tool_call_chunks &&
143
+ chunk.tool_call_chunks.length &&
144
+ typeof chunk.tool_call_chunks[0]?.index === 'number') {
145
+ await handleToolCallChunks({
146
+ graph,
147
+ stepKey,
148
+ toolCallChunks: chunk.tool_call_chunks,
149
+ metadata,
150
+ });
151
+ }
152
+ if (isEmptyContent) {
153
+ return;
154
+ }
155
+ const message_id = getMessageId(stepKey, graph) ?? '';
156
+ if (message_id) {
157
+ await graph.dispatchRunStep(stepKey, {
158
+ type: StepTypes.MESSAGE_CREATION,
159
+ message_creation: {
160
+ message_id,
161
+ },
162
+ }, metadata);
163
+ }
164
+ const stepId = graph.getStepIdByKey(stepKey);
165
+ const runStep = graph.getRunStep(stepId);
166
+ if (!runStep) {
167
+ console.warn(`\n
168
+ ==============================================================
169
+
170
+
171
+ Run step for ${stepId} does not exist, cannot dispatch delta event.
172
+
173
+ event: ${event}
174
+ stepId: ${stepId}
175
+ stepKey: ${stepKey}
176
+ message_id: ${message_id}
177
+ hasToolCalls: ${hasToolCalls}
178
+ hasToolCallChunks: ${hasToolCallChunks}
179
+
180
+ ==============================================================
181
+ \n`);
182
+ return;
183
+ }
184
+ /* Note: tool call chunks may have non-empty content that matches the current tool chunk generation */
185
+ if (typeof content === 'string' && runStep.type === StepTypes.TOOL_CALLS) {
186
+ return;
187
+ }
188
+ else if (hasToolCallChunks &&
189
+ (chunk.tool_call_chunks?.some((tc) => tc.args === content) ?? false)) {
190
+ return;
191
+ }
192
+ else if (typeof content === 'string') {
193
+ if (agentContext.currentTokenType === ContentTypes.TEXT) {
194
+ await graph.dispatchMessageDelta(stepId, {
195
+ content: [
196
+ {
197
+ type: ContentTypes.TEXT,
198
+ text: content,
199
+ },
200
+ ],
201
+ });
202
+ }
203
+ else if (agentContext.currentTokenType === 'think_and_text') {
204
+ const { text, thinking } = parseThinkingContent(content);
205
+ if (thinking) {
206
+ await graph.dispatchReasoningDelta(stepId, {
207
+ content: [
208
+ {
209
+ type: ContentTypes.THINK,
210
+ think: thinking,
211
+ },
212
+ ],
213
+ });
214
+ }
215
+ if (text) {
216
+ agentContext.currentTokenType = ContentTypes.TEXT;
217
+ agentContext.tokenTypeSwitch = 'content';
218
+ const newStepKey = graph.getStepKey(metadata);
219
+ const message_id = getMessageId(newStepKey, graph) ?? '';
220
+ await graph.dispatchRunStep(newStepKey, {
221
+ type: StepTypes.MESSAGE_CREATION,
222
+ message_creation: {
223
+ message_id,
224
+ },
225
+ }, metadata);
226
+ const newStepId = graph.getStepIdByKey(newStepKey);
227
+ await graph.dispatchMessageDelta(newStepId, {
228
+ content: [
229
+ {
230
+ type: ContentTypes.TEXT,
231
+ text: text,
232
+ },
233
+ ],
234
+ });
235
+ }
236
+ }
237
+ else {
238
+ await graph.dispatchReasoningDelta(stepId, {
239
+ content: [
240
+ {
241
+ type: ContentTypes.THINK,
242
+ think: content,
243
+ },
244
+ ],
245
+ });
246
+ }
247
+ }
248
+ else if (content.every((c) => c.type?.startsWith(ContentTypes.TEXT) ?? false)) {
249
+ await graph.dispatchMessageDelta(stepId, {
250
+ content,
251
+ });
252
+ }
253
+ else if (content.every((c) => (c.type?.startsWith(ContentTypes.THINKING) ?? false) ||
254
+ (c.type?.startsWith(ContentTypes.REASONING) ?? false) ||
255
+ (c.type?.startsWith(ContentTypes.REASONING_CONTENT) ?? false) ||
256
+ c.type === 'redacted_thinking')) {
257
+ await graph.dispatchReasoningDelta(stepId, {
258
+ content: content.map((c) => ({
259
+ type: ContentTypes.THINK,
260
+ think: c.thinking ??
261
+ c.reasoning ??
262
+ c.reasoningText?.text ??
263
+ '',
264
+ })),
265
+ });
266
+ }
267
+ }
268
+ handleReasoning(chunk, agentContext) {
269
+ let reasoning_content = chunk.additional_kwargs?.[agentContext.reasoningKey];
270
+ if (Array.isArray(chunk.content) &&
271
+ (chunk.content[0]?.type === ContentTypes.THINKING ||
272
+ chunk.content[0]?.type === ContentTypes.REASONING ||
273
+ chunk.content[0]?.type === ContentTypes.REASONING_CONTENT ||
274
+ chunk.content[0]?.type === 'redacted_thinking')) {
275
+ reasoning_content = 'valid';
276
+ }
277
+ else if ((agentContext.provider === Providers.OPENAI ||
278
+ agentContext.provider === Providers.AZURE) &&
279
+ reasoning_content != null &&
280
+ typeof reasoning_content !== 'string' &&
281
+ reasoning_content.summary?.[0]?.text != null &&
282
+ reasoning_content.summary[0].text) {
283
+ reasoning_content = 'valid';
284
+ }
285
+ else if (agentContext.provider === Providers.OPENROUTER &&
286
+ // Only set reasoning as valid if content is NOT present (content signals end of reasoning)
287
+ (chunk.content == null || chunk.content === '') &&
288
+ // Check for reasoning_details (final chunk) OR reasoning string (intermediate chunks)
289
+ ((chunk.additional_kwargs?.reasoning_details != null &&
290
+ Array.isArray(chunk.additional_kwargs.reasoning_details) &&
291
+ chunk.additional_kwargs.reasoning_details.length > 0) ||
292
+ (typeof chunk.additional_kwargs?.reasoning === 'string' &&
293
+ chunk.additional_kwargs.reasoning !== ''))) {
294
+ reasoning_content = 'valid';
295
+ }
296
+ if (reasoning_content != null &&
297
+ reasoning_content !== '' &&
298
+ (chunk.content == null ||
299
+ chunk.content === '' ||
300
+ reasoning_content === 'valid')) {
301
+ agentContext.currentTokenType = ContentTypes.THINK;
302
+ agentContext.tokenTypeSwitch = 'reasoning';
303
+ return;
304
+ }
305
+ else if (agentContext.tokenTypeSwitch === 'reasoning' &&
306
+ agentContext.currentTokenType !== ContentTypes.TEXT &&
307
+ ((chunk.content != null && chunk.content !== '') ||
308
+ (chunk.tool_calls?.length ?? 0) > 0 ||
309
+ (chunk.tool_call_chunks?.length ?? 0) > 0)) {
310
+ agentContext.currentTokenType = ContentTypes.TEXT;
311
+ agentContext.tokenTypeSwitch = 'content';
312
+ }
313
+ else if (chunk.content != null &&
314
+ typeof chunk.content === 'string' &&
315
+ chunk.content.includes('<think>') &&
316
+ chunk.content.includes('</think>')) {
317
+ agentContext.currentTokenType = 'think_and_text';
318
+ agentContext.tokenTypeSwitch = 'content';
319
+ }
320
+ else if (chunk.content != null &&
321
+ typeof chunk.content === 'string' &&
322
+ chunk.content.includes('<think>')) {
323
+ agentContext.currentTokenType = ContentTypes.THINK;
324
+ agentContext.tokenTypeSwitch = 'content';
325
+ }
326
+ else if (agentContext.lastToken != null &&
327
+ agentContext.lastToken.includes('</think>')) {
328
+ agentContext.currentTokenType = ContentTypes.TEXT;
329
+ agentContext.tokenTypeSwitch = 'content';
330
+ }
331
+ if (typeof chunk.content !== 'string') {
332
+ return;
333
+ }
334
+ agentContext.lastToken = chunk.content;
335
+ }
336
+ }
337
+ function createContentAggregator() {
338
+ const contentParts = [];
339
+ const stepMap = new Map();
340
+ const toolCallIdMap = new Map();
341
+ // Track step IDs for structured output tool calls that should be skipped
342
+ const skippedStructuredOutputSteps = new Set();
343
+ // Track agentId and groupId for each content index (applied to content parts)
344
+ const contentMetaMap = new Map();
345
+ const updateContent = (index, contentPart, finalUpdate = false) => {
346
+ if (!contentPart) {
347
+ console.warn('No content part found in \'updateContent\'');
348
+ return;
349
+ }
350
+ const partType = contentPart.type ?? '';
351
+ if (!partType) {
352
+ console.warn('No content type found in content part');
353
+ return;
354
+ }
355
+ if (!contentParts[index]) {
356
+ contentParts[index] = { type: partType };
357
+ }
358
+ if (!partType.startsWith(contentParts[index]?.type ?? '')) {
359
+ console.warn('Content type mismatch');
360
+ return;
361
+ }
362
+ if (partType.startsWith(ContentTypes.TEXT) &&
363
+ ContentTypes.TEXT in contentPart &&
364
+ typeof contentPart.text === 'string') {
365
+ // TODO: update this!!
366
+ const currentContent = contentParts[index];
367
+ const update = {
368
+ type: ContentTypes.TEXT,
369
+ text: (currentContent.text || '') + contentPart.text,
370
+ };
371
+ if (contentPart.tool_call_ids) {
372
+ update.tool_call_ids = contentPart.tool_call_ids;
373
+ }
374
+ contentParts[index] = update;
375
+ }
376
+ else if (partType.startsWith(ContentTypes.THINK) &&
377
+ ContentTypes.THINK in contentPart &&
378
+ typeof contentPart.think === 'string') {
379
+ const currentContent = contentParts[index];
380
+ const update = {
381
+ type: ContentTypes.THINK,
382
+ think: (currentContent.think || '') + contentPart.think,
383
+ };
384
+ contentParts[index] = update;
385
+ }
386
+ else if (partType.startsWith(ContentTypes.AGENT_UPDATE) &&
387
+ ContentTypes.AGENT_UPDATE in contentPart &&
388
+ contentPart.agent_update != null) {
389
+ const update = {
390
+ type: ContentTypes.AGENT_UPDATE,
391
+ agent_update: contentPart.agent_update,
392
+ };
393
+ contentParts[index] = update;
394
+ }
395
+ else if (partType === ContentTypes.IMAGE_URL &&
396
+ 'image_url' in contentPart) {
397
+ const currentContent = contentParts[index];
398
+ contentParts[index] = {
399
+ ...currentContent,
400
+ };
401
+ }
402
+ else if (partType === ContentTypes.TOOL_CALL &&
403
+ 'tool_call' in contentPart) {
404
+ const incomingName = contentPart.tool_call.name;
405
+ const incomingId = contentPart.tool_call.id;
406
+ const toolCallArgs = contentPart.tool_call.args;
407
+ // When we receive a tool call with a name, it's the complete tool call
408
+ // Consolidate with any previously accumulated args from chunks
409
+ const hasValidName = incomingName != null && incomingName !== '';
410
+ // Only process if incoming has a valid name (complete tool call)
411
+ // or if we're doing a final update with complete data
412
+ if (!hasValidName && !finalUpdate) {
413
+ return;
414
+ }
415
+ const existingContent = contentParts[index];
416
+ /** When args are a valid object, they are likely already invoked */
417
+ let args = finalUpdate ||
418
+ typeof existingContent?.tool_call?.args === 'object' ||
419
+ typeof toolCallArgs === 'object'
420
+ ? contentPart.tool_call.args
421
+ : (existingContent?.tool_call?.args ?? '') + (toolCallArgs ?? '');
422
+ if (finalUpdate &&
423
+ args == null &&
424
+ existingContent?.tool_call?.args != null) {
425
+ args = existingContent.tool_call.args;
426
+ }
427
+ const id = getNonEmptyValue([incomingId, existingContent?.tool_call?.id]) ?? '';
428
+ const name = getNonEmptyValue([incomingName, existingContent?.tool_call?.name]) ??
429
+ '';
430
+ const newToolCall = {
431
+ id,
432
+ name,
433
+ args,
434
+ type: ToolCallTypes.TOOL_CALL,
435
+ };
436
+ if (finalUpdate) {
437
+ newToolCall.progress = 1;
438
+ newToolCall.output = contentPart.tool_call.output;
439
+ }
440
+ contentParts[index] = {
441
+ type: ContentTypes.TOOL_CALL,
442
+ tool_call: newToolCall,
443
+ };
444
+ }
445
+ // Apply agentId (for MultiAgentGraph) and groupId (for parallel execution) to content parts
446
+ // - agentId present → MultiAgentGraph (show agent labels)
447
+ // - groupId present → parallel execution (render columns)
448
+ const meta = contentMetaMap.get(index);
449
+ if (meta?.agentId != null) {
450
+ contentParts[index].agentId = meta.agentId;
451
+ }
452
+ if (meta?.groupId != null) {
453
+ contentParts[index].groupId = meta.groupId;
454
+ }
455
+ };
456
+ const aggregateContent = ({ event, data, }) => {
457
+ // Handle structured output - add the JSON response as a text content part
458
+ if (event === GraphEvents.ON_STRUCTURED_OUTPUT) {
459
+ const structuredData = data;
460
+ if (structuredData.structuredResponse) {
461
+ const contentPart = {
462
+ type: ContentTypes.TEXT,
463
+ text: JSON.stringify(structuredData.structuredResponse, null, 2),
464
+ };
465
+ // Use the next available index
466
+ const nextIndex = contentParts.length;
467
+ updateContent(nextIndex, contentPart);
468
+ }
469
+ return;
470
+ }
471
+ if (event === GraphEvents.ON_RUN_STEP) {
472
+ const runStep = data;
473
+ stepMap.set(runStep.id, runStep);
474
+ // Track agentId (MultiAgentGraph) and groupId (parallel execution) separately
475
+ // - agentId: present for all MultiAgentGraph runs (enables agent labels in UI)
476
+ // - groupId: present only for parallel execution (enables column rendering)
477
+ const hasAgentId = runStep.agentId != null && runStep.agentId !== '';
478
+ const hasGroupId = runStep.groupId != null;
479
+ if (hasAgentId || hasGroupId) {
480
+ const existingMeta = contentMetaMap.get(runStep.index) ?? {};
481
+ if (hasAgentId) {
482
+ existingMeta.agentId = runStep.agentId;
483
+ }
484
+ if (hasGroupId) {
485
+ existingMeta.groupId = runStep.groupId;
486
+ }
487
+ contentMetaMap.set(runStep.index, existingMeta);
488
+ }
489
+ // Store tool call IDs if present
490
+ if (runStep.stepDetails.type === StepTypes.TOOL_CALLS &&
491
+ runStep.stepDetails.tool_calls) {
492
+ // Check if ALL tool calls are structured output tool calls
493
+ const toolCalls = runStep.stepDetails.tool_calls;
494
+ const allAreStructuredOutput = toolCalls.every((toolCall) => {
495
+ const toolName = toolCall.name?.toLowerCase() ?? '';
496
+ return (toolName === 'response' ||
497
+ toolName === 'structuredresponse' ||
498
+ toolName === 'structured_response');
499
+ });
500
+ // If all tool calls are structured output, skip this entire step
501
+ if (allAreStructuredOutput) {
502
+ skippedStructuredOutputSteps.add(runStep.id);
503
+ return;
504
+ }
505
+ toolCalls.forEach((toolCall) => {
506
+ // Skip structured output tool calls - these are synthetic tool calls
507
+ // used by withStructuredOutput() to extract JSON, not real tools
508
+ const toolName = toolCall.name?.toLowerCase() ?? '';
509
+ if (toolName === 'response' ||
510
+ toolName === 'structuredresponse' ||
511
+ toolName === 'structured_response') {
512
+ return;
513
+ }
514
+ const toolCallId = toolCall.id ?? '';
515
+ if ('id' in toolCall && toolCallId) {
516
+ toolCallIdMap.set(runStep.id, toolCallId);
517
+ }
518
+ const contentPart = {
519
+ type: ContentTypes.TOOL_CALL,
520
+ tool_call: {
521
+ args: toolCall.args,
522
+ name: toolCall.name,
523
+ id: toolCallId,
524
+ },
525
+ };
526
+ updateContent(runStep.index, contentPart);
527
+ });
528
+ }
529
+ }
530
+ else if (event === GraphEvents.ON_MESSAGE_DELTA) {
531
+ const messageDelta = data;
532
+ const runStep = stepMap.get(messageDelta.id);
533
+ if (!runStep) {
534
+ console.warn('No run step or runId found for message delta event');
535
+ return;
536
+ }
537
+ if (messageDelta.delta.content) {
538
+ const contentPart = Array.isArray(messageDelta.delta.content)
539
+ ? messageDelta.delta.content[0]
540
+ : messageDelta.delta.content;
541
+ updateContent(runStep.index, contentPart);
542
+ }
543
+ }
544
+ else if (event === GraphEvents.ON_AGENT_UPDATE &&
545
+ data?.agent_update) {
546
+ const contentPart = data;
547
+ if (!contentPart) {
548
+ return;
549
+ }
550
+ updateContent(contentPart.agent_update.index, contentPart);
551
+ }
552
+ else if (event === GraphEvents.ON_REASONING_DELTA) {
553
+ const reasoningDelta = data;
554
+ const runStep = stepMap.get(reasoningDelta.id);
555
+ if (!runStep) {
556
+ console.warn('No run step or runId found for reasoning delta event');
557
+ return;
558
+ }
559
+ if (reasoningDelta.delta.content) {
560
+ const contentPart = Array.isArray(reasoningDelta.delta.content)
561
+ ? reasoningDelta.delta.content[0]
562
+ : reasoningDelta.delta.content;
563
+ updateContent(runStep.index, contentPart);
564
+ }
565
+ }
566
+ else if (event === GraphEvents.ON_RUN_STEP_DELTA) {
567
+ const runStepDelta = data;
568
+ // Skip deltas for structured output tool calls
569
+ if (skippedStructuredOutputSteps.has(runStepDelta.id)) {
570
+ return;
571
+ }
572
+ const runStep = stepMap.get(runStepDelta.id);
573
+ if (!runStep) {
574
+ console.warn('No run step or runId found for run step delta event');
575
+ return;
576
+ }
577
+ if (runStepDelta.delta.type === StepTypes.TOOL_CALLS &&
578
+ runStepDelta.delta.tool_calls) {
579
+ runStepDelta.delta.tool_calls.forEach((toolCallDelta) => {
580
+ const toolCallId = toolCallIdMap.get(runStepDelta.id);
581
+ const contentPart = {
582
+ type: ContentTypes.TOOL_CALL,
583
+ tool_call: {
584
+ args: toolCallDelta.args ?? '',
585
+ name: toolCallDelta.name,
586
+ id: toolCallId,
587
+ },
588
+ };
589
+ updateContent(runStep.index, contentPart);
590
+ });
591
+ }
592
+ }
593
+ else if (event === GraphEvents.ON_RUN_STEP_COMPLETED) {
594
+ const { result } = data;
595
+ const { id: stepId } = result;
596
+ // Skip completion events for structured output tool calls
597
+ if (skippedStructuredOutputSteps.has(stepId)) {
598
+ return;
599
+ }
600
+ const runStep = stepMap.get(stepId);
601
+ if (!runStep) {
602
+ console.warn('No run step or runId found for completed tool call event');
603
+ return;
604
+ }
605
+ const contentPart = {
606
+ type: ContentTypes.TOOL_CALL,
607
+ tool_call: result.tool_call,
608
+ };
609
+ updateContent(runStep.index, contentPart, true);
610
+ }
611
+ };
612
+ return { contentParts, aggregateContent, stepMap };
613
+ }
614
+
615
+ export { ChatModelStreamHandler, createContentAggregator, getChunkContent };
616
+ //# sourceMappingURL=stream.mjs.map