@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,761 @@
1
+ 'use strict';
2
+
3
+ var messages = require('@langchain/core/messages');
4
+ var _enum = require('../common/enum.cjs');
5
+ var toonFormat = require('../utils/toonFormat.cjs');
6
+
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ /**
9
+ * Formats a message with media content (images, documents, videos, audios) to API payload format.
10
+ *
11
+ * @param params - The parameters for formatting.
12
+ * @returns - The formatted message.
13
+ */
14
+ const formatMediaMessage = ({ message, endpoint, mediaParts, }) => {
15
+ // Create a new object to avoid mutating the input
16
+ const result = {
17
+ ...message,
18
+ content: [],
19
+ };
20
+ if (endpoint === _enum.Providers.ANTHROPIC) {
21
+ result.content = [
22
+ ...mediaParts,
23
+ { type: _enum.ContentTypes.TEXT, text: message.content },
24
+ ];
25
+ return result;
26
+ }
27
+ result.content = [
28
+ { type: _enum.ContentTypes.TEXT, text: message.content },
29
+ ...mediaParts,
30
+ ];
31
+ return result;
32
+ };
33
+ /**
34
+ * Formats a message to OpenAI payload format based on the provided options.
35
+ *
36
+ * @param params - The parameters for formatting.
37
+ * @returns - The formatted message.
38
+ */
39
+ const formatMessage = ({ message, userName, endpoint, assistantName, langChain = false, }) => {
40
+ // eslint-disable-next-line prefer-const
41
+ let { role: _role, _name, sender, text, content: _content, lc_id } = message;
42
+ if (lc_id && lc_id[2] && !langChain) {
43
+ const roleMapping = {
44
+ SystemMessage: 'system',
45
+ HumanMessage: 'user',
46
+ AIMessage: 'assistant',
47
+ };
48
+ _role = roleMapping[lc_id[2]] || _role;
49
+ }
50
+ const role = _role ??
51
+ (sender != null && sender && sender.toLowerCase() === 'user'
52
+ ? 'user'
53
+ : 'assistant');
54
+ const content = _content ?? text ?? '';
55
+ const formattedMessage = {
56
+ role,
57
+ content,
58
+ };
59
+ // Set name fields first
60
+ if (_name != null && _name) {
61
+ formattedMessage.name = _name;
62
+ }
63
+ if (userName != null && userName && formattedMessage.role === 'user') {
64
+ formattedMessage.name = userName;
65
+ }
66
+ if (assistantName != null &&
67
+ assistantName &&
68
+ formattedMessage.role === 'assistant') {
69
+ formattedMessage.name = assistantName;
70
+ }
71
+ if (formattedMessage.name != null && formattedMessage.name) {
72
+ // Conform to API regex: ^[a-zA-Z0-9_-]{1,64}$
73
+ // https://community.openai.com/t/the-format-of-the-name-field-in-the-documentation-is-incorrect/175684/2
74
+ formattedMessage.name = formattedMessage.name.replace(/[^a-zA-Z0-9_-]/g, '_');
75
+ if (formattedMessage.name.length > 64) {
76
+ formattedMessage.name = formattedMessage.name.substring(0, 64);
77
+ }
78
+ }
79
+ const { image_urls, documents, videos, audios } = message;
80
+ const mediaParts = [];
81
+ if (Array.isArray(documents) && documents.length > 0) {
82
+ mediaParts.push(...documents);
83
+ }
84
+ if (Array.isArray(videos) && videos.length > 0) {
85
+ mediaParts.push(...videos);
86
+ }
87
+ if (Array.isArray(audios) && audios.length > 0) {
88
+ mediaParts.push(...audios);
89
+ }
90
+ if (Array.isArray(image_urls) && image_urls.length > 0) {
91
+ mediaParts.push(...image_urls);
92
+ }
93
+ if (mediaParts.length > 0 && role === 'user') {
94
+ const mediaMessage = formatMediaMessage({
95
+ message: {
96
+ ...formattedMessage,
97
+ content: typeof formattedMessage.content === 'string'
98
+ ? formattedMessage.content
99
+ : '',
100
+ },
101
+ mediaParts,
102
+ endpoint,
103
+ });
104
+ if (!langChain) {
105
+ return mediaMessage;
106
+ }
107
+ return new messages.HumanMessage(mediaMessage);
108
+ }
109
+ if (!langChain) {
110
+ return formattedMessage;
111
+ }
112
+ if (role === 'user') {
113
+ return new messages.HumanMessage(formattedMessage);
114
+ }
115
+ else if (role === 'assistant') {
116
+ return new messages.AIMessage(formattedMessage);
117
+ }
118
+ else {
119
+ return new messages.SystemMessage(formattedMessage);
120
+ }
121
+ };
122
+ /**
123
+ * Formats an array of messages for LangChain.
124
+ *
125
+ * @param messages - The array of messages to format.
126
+ * @param formatOptions - The options for formatting each message.
127
+ * @returns - The array of formatted LangChain messages.
128
+ */
129
+ const formatLangChainMessages = (messages, formatOptions) => {
130
+ return messages.map((msg) => {
131
+ const formatted = formatMessage({
132
+ ...formatOptions,
133
+ message: msg,
134
+ langChain: true,
135
+ });
136
+ return formatted;
137
+ });
138
+ };
139
+ /**
140
+ * Formats a LangChain message object by merging properties from `lc_kwargs` or `kwargs` and `additional_kwargs`.
141
+ *
142
+ * @param message - The message object to format.
143
+ * @returns - The formatted LangChain message.
144
+ */
145
+ const formatFromLangChain = (message) => {
146
+ const kwargs = message.lc_kwargs ?? message.kwargs ?? {};
147
+ const { additional_kwargs = {}, ...message_kwargs } = kwargs;
148
+ return {
149
+ ...message_kwargs,
150
+ ...additional_kwargs,
151
+ };
152
+ };
153
+ /**
154
+ * Helper function to format an assistant message
155
+ * @param message The message to format
156
+ * @returns Array of formatted messages
157
+ */
158
+ function formatAssistantMessage(message) {
159
+ const formattedMessages = [];
160
+ let currentContent = [];
161
+ let lastAIMessage = null;
162
+ let hasReasoning = false;
163
+ if (Array.isArray(message.content)) {
164
+ for (const part of message.content) {
165
+ if (part.type === _enum.ContentTypes.TEXT && part.tool_call_ids) {
166
+ /*
167
+ If there's pending content, it needs to be aggregated as a single string to prepare for tool calls.
168
+ For Anthropic models, the "tool_calls" field on a message is only respected if content is a string.
169
+ */
170
+ if (currentContent.length > 0) {
171
+ let content = currentContent.reduce((acc, curr) => {
172
+ if (curr.type === _enum.ContentTypes.TEXT) {
173
+ return `${acc}${String(curr[_enum.ContentTypes.TEXT] ?? '')}\n`;
174
+ }
175
+ return acc;
176
+ }, '');
177
+ content =
178
+ `${content}\n${part[_enum.ContentTypes.TEXT] ?? part.text ?? ''}`.trim();
179
+ lastAIMessage = new messages.AIMessage({ content });
180
+ formattedMessages.push(lastAIMessage);
181
+ currentContent = [];
182
+ continue;
183
+ }
184
+ // Create a new AIMessage with this text and prepare for tool calls
185
+ lastAIMessage = new messages.AIMessage({
186
+ content: part.text != null ? part.text : '',
187
+ });
188
+ formattedMessages.push(lastAIMessage);
189
+ }
190
+ else if (part.type === _enum.ContentTypes.TOOL_CALL) {
191
+ // Skip malformed tool call entries without tool_call property
192
+ if (part.tool_call == null) {
193
+ continue;
194
+ }
195
+ // Note: `tool_calls` list is defined when constructed by `AIMessage` class, and outputs should be excluded from it
196
+ const { output, args: _args, ..._tool_call } = part.tool_call;
197
+ // Skip invalid tool calls that have no name AND no output
198
+ if (_tool_call.name == null ||
199
+ (_tool_call.name === '' && (output == null || output === ''))) {
200
+ continue;
201
+ }
202
+ if (!lastAIMessage) {
203
+ // "Heal" the payload by creating an AIMessage to precede the tool call
204
+ lastAIMessage = new messages.AIMessage({ content: '' });
205
+ formattedMessages.push(lastAIMessage);
206
+ }
207
+ const tool_call = _tool_call;
208
+ // TODO: investigate; args as dictionary may need to be providers-or-tool-specific
209
+ let args = _args;
210
+ try {
211
+ if (typeof _args === 'string') {
212
+ args = JSON.parse(_args);
213
+ }
214
+ }
215
+ catch {
216
+ if (typeof _args === 'string') {
217
+ args = { input: _args };
218
+ }
219
+ }
220
+ tool_call.args = args;
221
+ if (!lastAIMessage.tool_calls) {
222
+ lastAIMessage.tool_calls = [];
223
+ }
224
+ lastAIMessage.tool_calls.push(tool_call);
225
+ // Apply TOON compression to historical tool outputs for context efficiency
226
+ // processToolOutput handles: JSON→TOON conversion, already-TOON detection (skip), truncation
227
+ const processedOutput = output != null ? toonFormat.processToolOutput(output).content : '';
228
+ formattedMessages.push(new messages.ToolMessage({
229
+ tool_call_id: tool_call.id ?? '',
230
+ name: tool_call.name,
231
+ content: processedOutput,
232
+ }));
233
+ }
234
+ else if (part.type === _enum.ContentTypes.THINK) {
235
+ hasReasoning = true;
236
+ continue;
237
+ }
238
+ else if (part.type === _enum.ContentTypes.ERROR ||
239
+ part.type === _enum.ContentTypes.AGENT_UPDATE) {
240
+ continue;
241
+ }
242
+ else {
243
+ currentContent.push(part);
244
+ }
245
+ }
246
+ }
247
+ if (hasReasoning && currentContent.length > 0) {
248
+ const content = currentContent
249
+ .reduce((acc, curr) => {
250
+ if (curr.type === _enum.ContentTypes.TEXT) {
251
+ return `${acc}${String(curr[_enum.ContentTypes.TEXT] ?? '')}\n`;
252
+ }
253
+ return acc;
254
+ }, '')
255
+ .trim();
256
+ if (content) {
257
+ formattedMessages.push(new messages.AIMessage({ content }));
258
+ }
259
+ }
260
+ else if (currentContent.length > 0) {
261
+ formattedMessages.push(new messages.AIMessage({ content: currentContent }));
262
+ }
263
+ return formattedMessages;
264
+ }
265
+ /**
266
+ * Labels all agent content for parallel patterns (fan-out/fan-in)
267
+ * Groups consecutive content by agent and wraps with clear labels
268
+ */
269
+ function labelAllAgentContent(contentParts, agentIdMap, agentNames) {
270
+ const result = [];
271
+ let currentAgentId;
272
+ let agentContentBuffer = [];
273
+ const flushAgentBuffer = () => {
274
+ if (agentContentBuffer.length === 0) {
275
+ return;
276
+ }
277
+ if (currentAgentId != null && currentAgentId !== '') {
278
+ const agentName = (agentNames?.[currentAgentId] ?? '') || currentAgentId;
279
+ const formattedParts = [];
280
+ formattedParts.push(`--- ${agentName} ---`);
281
+ for (const part of agentContentBuffer) {
282
+ if (part.type === _enum.ContentTypes.THINK) {
283
+ const thinkContent = part.think || '';
284
+ if (thinkContent) {
285
+ formattedParts.push(`${agentName}: ${JSON.stringify({
286
+ type: 'think',
287
+ think: thinkContent,
288
+ })}`);
289
+ }
290
+ }
291
+ else if (part.type === _enum.ContentTypes.TEXT) {
292
+ const textContent = part.text ?? '';
293
+ if (textContent) {
294
+ formattedParts.push(`${agentName}: ${textContent}`);
295
+ }
296
+ }
297
+ else if (part.type === _enum.ContentTypes.TOOL_CALL) {
298
+ formattedParts.push(`${agentName}: ${JSON.stringify({
299
+ type: 'tool_call',
300
+ tool_call: part.tool_call,
301
+ })}`);
302
+ }
303
+ }
304
+ formattedParts.push(`--- End of ${agentName} ---`);
305
+ // Create a single text content part with all agent content
306
+ result.push({
307
+ type: _enum.ContentTypes.TEXT,
308
+ text: formattedParts.join('\n\n'),
309
+ });
310
+ }
311
+ else {
312
+ // No agent ID, pass through as-is
313
+ result.push(...agentContentBuffer);
314
+ }
315
+ agentContentBuffer = [];
316
+ };
317
+ for (let i = 0; i < contentParts.length; i++) {
318
+ const part = contentParts[i];
319
+ const agentId = agentIdMap[i];
320
+ // If agent changed, flush previous buffer
321
+ if (agentId !== currentAgentId && currentAgentId !== undefined) {
322
+ flushAgentBuffer();
323
+ }
324
+ currentAgentId = agentId;
325
+ agentContentBuffer.push(part);
326
+ }
327
+ // Flush any remaining content
328
+ flushAgentBuffer();
329
+ return result;
330
+ }
331
+ /**
332
+ * Groups content parts by agent and formats them with agent labels
333
+ * This preprocesses multi-agent content to prevent identity confusion
334
+ *
335
+ * @param contentParts - The content parts from a run
336
+ * @param agentIdMap - Map of content part index to agent ID
337
+ * @param agentNames - Optional map of agent ID to display name
338
+ * @param options - Configuration options
339
+ * @param options.labelNonTransferContent - If true, labels all agent transitions (for parallel patterns)
340
+ * @returns Modified content parts with agent labels where appropriate
341
+ */
342
+ const labelContentByAgent = (contentParts, agentIdMap, agentNames, options) => {
343
+ if (!agentIdMap || Object.keys(agentIdMap).length === 0) {
344
+ return contentParts;
345
+ }
346
+ // If labelNonTransferContent is true, use a different strategy for parallel patterns
347
+ if (options?.labelNonTransferContent === true) {
348
+ return labelAllAgentContent(contentParts, agentIdMap, agentNames);
349
+ }
350
+ const result = [];
351
+ let currentAgentId;
352
+ let agentContentBuffer = [];
353
+ let transferToolCallIndex;
354
+ let transferToolCallId;
355
+ const flushAgentBuffer = () => {
356
+ if (agentContentBuffer.length === 0) {
357
+ return;
358
+ }
359
+ // If this is content from a transferred agent, format it specially
360
+ if (currentAgentId != null &&
361
+ currentAgentId !== '' &&
362
+ transferToolCallIndex !== undefined) {
363
+ const agentName = (agentNames?.[currentAgentId] ?? '') || currentAgentId;
364
+ const formattedParts = [];
365
+ formattedParts.push(`--- Transfer to ${agentName} ---`);
366
+ for (const part of agentContentBuffer) {
367
+ if (part.type === _enum.ContentTypes.THINK) {
368
+ formattedParts.push(`${agentName}: ${JSON.stringify({
369
+ type: 'think',
370
+ think: part.think,
371
+ })}`);
372
+ }
373
+ else if ('text' in part && part.type === _enum.ContentTypes.TEXT) {
374
+ const textContent = part.text ?? '';
375
+ if (textContent) {
376
+ formattedParts.push(`${agentName}: ${JSON.stringify({
377
+ type: 'text',
378
+ text: textContent,
379
+ })}`);
380
+ }
381
+ }
382
+ else if (part.type === _enum.ContentTypes.TOOL_CALL) {
383
+ formattedParts.push(`${agentName}: ${JSON.stringify({
384
+ type: 'tool_call',
385
+ tool_call: part.tool_call,
386
+ })}`);
387
+ }
388
+ }
389
+ formattedParts.push(`--- End of ${agentName} response ---`);
390
+ // Find the tool call that triggered this transfer and update its output
391
+ if (transferToolCallIndex < result.length) {
392
+ const transferToolCall = result[transferToolCallIndex];
393
+ if (transferToolCall.type === _enum.ContentTypes.TOOL_CALL &&
394
+ transferToolCall.tool_call?.id === transferToolCallId) {
395
+ transferToolCall.tool_call.output = formattedParts.join('\n\n');
396
+ }
397
+ }
398
+ }
399
+ else {
400
+ // Not from a transfer, add as-is
401
+ result.push(...agentContentBuffer);
402
+ }
403
+ agentContentBuffer = [];
404
+ transferToolCallIndex = undefined;
405
+ transferToolCallId = undefined;
406
+ };
407
+ for (let i = 0; i < contentParts.length; i++) {
408
+ const part = contentParts[i];
409
+ const agentId = agentIdMap[i];
410
+ // Check if this is a transfer tool call
411
+ const isTransferTool = (part.type === _enum.ContentTypes.TOOL_CALL &&
412
+ part.tool_call?.name?.startsWith('lc_transfer_to_')) ??
413
+ false;
414
+ // If agent changed, flush previous buffer
415
+ if (agentId !== currentAgentId && currentAgentId !== undefined) {
416
+ flushAgentBuffer();
417
+ }
418
+ currentAgentId = agentId;
419
+ if (isTransferTool) {
420
+ // Flush any existing buffer first
421
+ flushAgentBuffer();
422
+ // Add the transfer tool call to result
423
+ result.push(part);
424
+ // Mark that the next agent's content should be captured
425
+ transferToolCallIndex = result.length - 1;
426
+ transferToolCallId = part.tool_call?.id;
427
+ currentAgentId = undefined; // Reset to capture the next agent
428
+ }
429
+ else {
430
+ agentContentBuffer.push(part);
431
+ }
432
+ }
433
+ flushAgentBuffer();
434
+ return result;
435
+ };
436
+ /** Extracts tool names from a tool_search output JSON string. */
437
+ function extractToolNamesFromSearchOutput(output) {
438
+ try {
439
+ const parsed = JSON.parse(output);
440
+ if (typeof parsed === 'object' &&
441
+ parsed !== null &&
442
+ Array.isArray(parsed.tools)) {
443
+ return parsed.tools
444
+ .map((t) => t.name)
445
+ .filter((name) => typeof name === 'string');
446
+ }
447
+ }
448
+ catch {
449
+ /** Output may have warnings prepended, try to find JSON within it */
450
+ const jsonMatch = output.match(/\{[\s\S]*\}/);
451
+ if (jsonMatch) {
452
+ try {
453
+ const parsed = JSON.parse(jsonMatch[0]);
454
+ if (typeof parsed === 'object' &&
455
+ parsed !== null &&
456
+ Array.isArray(parsed.tools)) {
457
+ return parsed.tools
458
+ .map((t) => t.name)
459
+ .filter((name) => typeof name === 'string');
460
+ }
461
+ }
462
+ catch {
463
+ /* ignore */
464
+ }
465
+ }
466
+ }
467
+ return [];
468
+ }
469
+ /**
470
+ * Formats an array of messages for LangChain, handling tool calls and creating ToolMessage instances.
471
+ *
472
+ * @param payload - The array of messages to format.
473
+ * @param indexTokenCountMap - Optional map of message indices to token counts.
474
+ * @param tools - Optional set of tool names that are allowed in the request.
475
+ * @returns - Object containing formatted messages and updated indexTokenCountMap if provided.
476
+ */
477
+ const formatAgentMessages = (payload, indexTokenCountMap, tools) => {
478
+ const messages = [];
479
+ // If indexTokenCountMap is provided, create a new map to track the updated indices
480
+ const updatedIndexTokenCountMap = {};
481
+ // Keep track of the mapping from original payload indices to result indices
482
+ const indexMapping = {};
483
+ /**
484
+ * Create a mutable copy of the tools set that can be expanded dynamically.
485
+ * When we encounter tool_search results, we add discovered tools to this set,
486
+ * making their subsequent tool calls valid.
487
+ */
488
+ const discoveredTools = tools ? new Set(tools) : undefined;
489
+ // Process messages with tool conversion if tools set is provided
490
+ for (let i = 0; i < payload.length; i++) {
491
+ const message = payload[i];
492
+ // Q: Store the current length of messages to track where this payload message starts in the result?
493
+ // const startIndex = messages.length;
494
+ if (typeof message.content === 'string') {
495
+ message.content = [
496
+ { type: _enum.ContentTypes.TEXT, [_enum.ContentTypes.TEXT]: message.content },
497
+ ];
498
+ }
499
+ if (message.role !== 'assistant') {
500
+ messages.push(formatMessage({
501
+ message: message,
502
+ langChain: true,
503
+ }));
504
+ // Update the index mapping for this message
505
+ indexMapping[i] = [messages.length - 1];
506
+ continue;
507
+ }
508
+ // For assistant messages, track the starting index before processing
509
+ const startMessageIndex = messages.length;
510
+ /**
511
+ * If tools set is provided, process tool_calls:
512
+ * - Keep valid tool_calls (tools in the set or dynamically discovered)
513
+ * - Convert invalid tool_calls to string representation for context preservation
514
+ * - Dynamically expand the set when tool_search results are encountered
515
+ */
516
+ let processedMessage = message;
517
+ if (discoveredTools) {
518
+ const content = message.content;
519
+ if (content && Array.isArray(content)) {
520
+ const filteredContent = [];
521
+ const invalidToolCallIds = new Set();
522
+ const invalidToolStrings = [];
523
+ for (const part of content) {
524
+ if (part.type !== _enum.ContentTypes.TOOL_CALL) {
525
+ filteredContent.push(part);
526
+ continue;
527
+ }
528
+ /** Skip malformed tool_call entries */
529
+ if (part.tool_call == null ||
530
+ part.tool_call.name == null ||
531
+ part.tool_call.name === '') {
532
+ if (typeof part.tool_call?.id === 'string' &&
533
+ part.tool_call.id !== '') {
534
+ invalidToolCallIds.add(part.tool_call.id);
535
+ }
536
+ continue;
537
+ }
538
+ const toolName = part.tool_call.name;
539
+ /**
540
+ * If this is a tool_search result with output, extract discovered tool names
541
+ * and add them to the discoveredTools set for subsequent validation.
542
+ */
543
+ if (toolName === _enum.Constants.TOOL_SEARCH &&
544
+ typeof part.tool_call.output === 'string' &&
545
+ part.tool_call.output !== '') {
546
+ const extracted = extractToolNamesFromSearchOutput(part.tool_call.output);
547
+ for (const name of extracted) {
548
+ discoveredTools.add(name);
549
+ }
550
+ }
551
+ if (discoveredTools.has(toolName)) {
552
+ /** Valid tool - keep it */
553
+ filteredContent.push(part);
554
+ }
555
+ else {
556
+ /** Invalid tool - convert to string for context preservation */
557
+ if (typeof part.tool_call.id === 'string' &&
558
+ part.tool_call.id !== '') {
559
+ invalidToolCallIds.add(part.tool_call.id);
560
+ }
561
+ const output = part.tool_call.output ?? '';
562
+ invalidToolStrings.push(`Tool: ${toolName}, ${output}`);
563
+ }
564
+ }
565
+ /** Remove tool_call_ids references to invalid tools from text parts */
566
+ if (invalidToolCallIds.size > 0) {
567
+ for (const part of filteredContent) {
568
+ if (part.type === _enum.ContentTypes.TEXT &&
569
+ Array.isArray(part.tool_call_ids)) {
570
+ part.tool_call_ids = part.tool_call_ids.filter((id) => !invalidToolCallIds.has(id));
571
+ if (part.tool_call_ids.length === 0) {
572
+ delete part.tool_call_ids;
573
+ }
574
+ }
575
+ }
576
+ }
577
+ /** Append invalid tool strings to the content for context preservation */
578
+ if (invalidToolStrings.length > 0) {
579
+ /** Find the last text part or create one */
580
+ let lastTextPartIndex = -1;
581
+ for (let j = filteredContent.length - 1; j >= 0; j--) {
582
+ if (filteredContent[j].type === _enum.ContentTypes.TEXT) {
583
+ lastTextPartIndex = j;
584
+ break;
585
+ }
586
+ }
587
+ const invalidToolText = invalidToolStrings.join('\n');
588
+ if (lastTextPartIndex >= 0) {
589
+ const lastTextPart = filteredContent[lastTextPartIndex];
590
+ const existingText = lastTextPart[_enum.ContentTypes.TEXT] ?? lastTextPart.text ?? '';
591
+ filteredContent[lastTextPartIndex] = {
592
+ ...lastTextPart,
593
+ [_enum.ContentTypes.TEXT]: existingText
594
+ ? `${existingText}\n${invalidToolText}`
595
+ : invalidToolText,
596
+ };
597
+ }
598
+ else {
599
+ /** No text part exists, create one */
600
+ filteredContent.push({
601
+ type: _enum.ContentTypes.TEXT,
602
+ [_enum.ContentTypes.TEXT]: invalidToolText,
603
+ });
604
+ }
605
+ }
606
+ /** Use filtered content if we made any changes */
607
+ if (filteredContent.length !== content.length ||
608
+ invalidToolStrings.length > 0) {
609
+ processedMessage = { ...message, content: filteredContent };
610
+ }
611
+ }
612
+ }
613
+ // Process the assistant message using the helper function
614
+ const formattedMessages = formatAssistantMessage(processedMessage);
615
+ messages.push(...formattedMessages);
616
+ // Update the index mapping for this assistant message
617
+ // Store all indices that were created from this original message
618
+ const endMessageIndex = messages.length;
619
+ const resultIndices = [];
620
+ for (let j = startMessageIndex; j < endMessageIndex; j++) {
621
+ resultIndices.push(j);
622
+ }
623
+ indexMapping[i] = resultIndices;
624
+ }
625
+ // Update the token count map if it was provided
626
+ if (indexTokenCountMap) {
627
+ for (let originalIndex = 0; originalIndex < payload.length; originalIndex++) {
628
+ const resultIndices = indexMapping[originalIndex] || [];
629
+ const tokenCount = indexTokenCountMap[originalIndex];
630
+ if (tokenCount !== undefined) {
631
+ if (resultIndices.length === 1) {
632
+ // Simple 1:1 mapping
633
+ updatedIndexTokenCountMap[resultIndices[0]] = tokenCount;
634
+ }
635
+ else if (resultIndices.length > 1) {
636
+ // If one message was split into multiple, distribute the token count
637
+ // This is a simplification - in reality, you might want a more sophisticated distribution
638
+ const countPerMessage = Math.floor(tokenCount / resultIndices.length);
639
+ resultIndices.forEach((resultIndex, idx) => {
640
+ if (idx === resultIndices.length - 1) {
641
+ // Give any remainder to the last message
642
+ updatedIndexTokenCountMap[resultIndex] =
643
+ tokenCount - countPerMessage * (resultIndices.length - 1);
644
+ }
645
+ else {
646
+ updatedIndexTokenCountMap[resultIndex] = countPerMessage;
647
+ }
648
+ });
649
+ }
650
+ }
651
+ }
652
+ }
653
+ return {
654
+ messages,
655
+ indexTokenCountMap: indexTokenCountMap
656
+ ? updatedIndexTokenCountMap
657
+ : undefined,
658
+ };
659
+ };
660
+ /**
661
+ * Adds a value at key 0 for system messages and shifts all key indices by one in an indexTokenCountMap.
662
+ * This is useful when adding a system message at the beginning of a conversation.
663
+ *
664
+ * @param indexTokenCountMap - The original map of message indices to token counts
665
+ * @param instructionsTokenCount - The token count for the system message to add at index 0
666
+ * @returns A new map with the system message at index 0 and all other indices shifted by 1
667
+ */
668
+ function shiftIndexTokenCountMap(indexTokenCountMap, instructionsTokenCount) {
669
+ // Create a new map to avoid modifying the original
670
+ const shiftedMap = {};
671
+ shiftedMap[0] = instructionsTokenCount;
672
+ // Shift all existing indices by 1
673
+ for (const [indexStr, tokenCount] of Object.entries(indexTokenCountMap)) {
674
+ const index = Number(indexStr);
675
+ shiftedMap[index + 1] = tokenCount;
676
+ }
677
+ return shiftedMap;
678
+ }
679
+ /**
680
+ * Ensures compatibility when switching from a non-thinking agent to a thinking-enabled agent.
681
+ * Converts AI messages with tool calls (that lack thinking/reasoning blocks) into buffer strings,
682
+ * avoiding the thinking block signature requirement.
683
+ *
684
+ * Recognizes the following as valid thinking/reasoning blocks:
685
+ * - ContentTypes.THINKING (Anthropic)
686
+ * - ContentTypes.REASONING_CONTENT (Bedrock)
687
+ * - ContentTypes.REASONING (VertexAI / Google)
688
+ * - 'redacted_thinking'
689
+ *
690
+ * @param messages - Array of messages to process
691
+ * @param provider - The provider being used (unused but kept for future compatibility)
692
+ * @returns The messages array with tool sequences converted to buffer strings if necessary
693
+ */
694
+ function ensureThinkingBlockInMessages(messages$1, _provider) {
695
+ const result = [];
696
+ let i = 0;
697
+ while (i < messages$1.length) {
698
+ const msg = messages$1[i];
699
+ const isAI = msg instanceof messages.AIMessage || msg instanceof messages.AIMessageChunk;
700
+ if (!isAI) {
701
+ result.push(msg);
702
+ i++;
703
+ continue;
704
+ }
705
+ const aiMsg = msg;
706
+ const hasToolCalls = aiMsg.tool_calls && aiMsg.tool_calls.length > 0;
707
+ const contentIsArray = Array.isArray(aiMsg.content);
708
+ // Check if the message has tool calls or tool_use content
709
+ let hasToolUse = hasToolCalls ?? false;
710
+ let firstContentType;
711
+ if (contentIsArray && aiMsg.content.length > 0) {
712
+ const content = aiMsg.content;
713
+ firstContentType = content[0]?.type;
714
+ hasToolUse =
715
+ hasToolUse ||
716
+ content.some((c) => typeof c === 'object' && c.type === 'tool_use');
717
+ }
718
+ // If message has tool use but no thinking block, convert to buffer string
719
+ if (hasToolUse &&
720
+ firstContentType !== _enum.ContentTypes.THINKING &&
721
+ firstContentType !== _enum.ContentTypes.REASONING_CONTENT &&
722
+ firstContentType !== _enum.ContentTypes.REASONING &&
723
+ firstContentType !== 'redacted_thinking') {
724
+ // Collect the AI message and any following tool messages
725
+ const toolSequence = [msg];
726
+ let j = i + 1;
727
+ // Look ahead for tool messages that belong to this AI message
728
+ // Use getType() instead of instanceof to avoid module mismatch issues
729
+ // where different copies of ToolMessage class might be loaded
730
+ while (j < messages$1.length &&
731
+ messages$1[j].getType() === _enum.MessageTypes.TOOL) {
732
+ toolSequence.push(messages$1[j]);
733
+ j++;
734
+ }
735
+ // Convert the sequence to a buffer string and wrap in a HumanMessage
736
+ // This avoids the thinking block requirement which only applies to AI messages
737
+ const bufferString = messages.getBufferString(toolSequence);
738
+ result.push(new messages.HumanMessage({
739
+ content: `[Previous agent context]\n${bufferString}`,
740
+ }));
741
+ // Skip the messages we've processed
742
+ i = j;
743
+ }
744
+ else {
745
+ // Keep the message as is
746
+ result.push(msg);
747
+ i++;
748
+ }
749
+ }
750
+ return result;
751
+ }
752
+
753
+ exports.ensureThinkingBlockInMessages = ensureThinkingBlockInMessages;
754
+ exports.formatAgentMessages = formatAgentMessages;
755
+ exports.formatFromLangChain = formatFromLangChain;
756
+ exports.formatLangChainMessages = formatLangChainMessages;
757
+ exports.formatMediaMessage = formatMediaMessage;
758
+ exports.formatMessage = formatMessage;
759
+ exports.labelContentByAgent = labelContentByAgent;
760
+ exports.shiftIndexTokenCountMap = shiftIndexTokenCountMap;
761
+ //# sourceMappingURL=format.cjs.map