@illuma-ai/agents 1.0.90 → 1.0.94

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (839) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +98 -49
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/common/constants.cjs +25 -0
  4. package/dist/cjs/common/constants.cjs.map +1 -0
  5. package/dist/cjs/common/enum.cjs +30 -0
  6. package/dist/cjs/common/enum.cjs.map +1 -1
  7. package/dist/cjs/events.cjs +9 -4
  8. package/dist/cjs/events.cjs.map +1 -1
  9. package/dist/cjs/graphs/Graph.cjs +397 -92
  10. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  11. package/dist/cjs/graphs/MultiAgentGraph.cjs +223 -92
  12. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  13. package/dist/cjs/instrumentation.cjs +30 -14
  14. package/dist/cjs/instrumentation.cjs.map +1 -1
  15. package/dist/cjs/llm/anthropic/index.cjs +43 -11
  16. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  17. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  18. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +10 -7
  19. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  20. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +32 -0
  21. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  22. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  23. package/dist/cjs/llm/bedrock/index.cjs +129 -101
  24. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  25. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +489 -0
  26. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -0
  27. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +176 -0
  28. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -0
  29. package/dist/cjs/llm/fake.cjs.map +1 -1
  30. package/dist/cjs/llm/google/index.cjs.map +1 -1
  31. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  32. package/dist/cjs/llm/openai/index.cjs +1 -1
  33. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  34. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  35. package/dist/cjs/llm/openrouter/index.cjs +59 -5
  36. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  37. package/dist/cjs/llm/providers.cjs.map +1 -1
  38. package/dist/cjs/llm/text.cjs.map +1 -1
  39. package/dist/cjs/llm/vertexai/index.cjs +80 -2
  40. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  41. package/dist/cjs/main.cjs +60 -27
  42. package/dist/cjs/main.cjs.map +1 -1
  43. package/dist/cjs/messages/cache.cjs +131 -108
  44. package/dist/cjs/messages/cache.cjs.map +1 -1
  45. package/dist/cjs/messages/content.cjs.map +1 -1
  46. package/dist/cjs/messages/core.cjs +3 -0
  47. package/dist/cjs/messages/core.cjs.map +1 -1
  48. package/dist/cjs/messages/format.cjs +265 -47
  49. package/dist/cjs/messages/format.cjs.map +1 -1
  50. package/dist/cjs/messages/ids.cjs.map +1 -1
  51. package/dist/cjs/messages/prune.cjs +55 -2
  52. package/dist/cjs/messages/prune.cjs.map +1 -1
  53. package/dist/cjs/messages/summarize.cjs +170 -0
  54. package/dist/cjs/messages/summarize.cjs.map +1 -0
  55. package/dist/cjs/messages/tools.cjs.map +1 -1
  56. package/dist/cjs/run.cjs +87 -30
  57. package/dist/cjs/run.cjs.map +1 -1
  58. package/dist/cjs/schemas/validate.cjs.map +1 -1
  59. package/dist/cjs/splitStream.cjs.map +1 -1
  60. package/dist/cjs/stream.cjs +59 -25
  61. package/dist/cjs/stream.cjs.map +1 -1
  62. package/dist/cjs/tools/AskUser.cjs +131 -0
  63. package/dist/cjs/tools/AskUser.cjs.map +1 -0
  64. package/dist/cjs/tools/BrowserTools.cjs +11 -7
  65. package/dist/cjs/tools/BrowserTools.cjs.map +1 -1
  66. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  67. package/dist/cjs/tools/CodeExecutor.cjs +60 -5
  68. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  69. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +36 -53
  70. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  71. package/dist/cjs/tools/StreamingToolCallBuffer.cjs +208 -0
  72. package/dist/cjs/tools/StreamingToolCallBuffer.cjs.map +1 -0
  73. package/dist/cjs/tools/ToolNode.cjs +333 -30
  74. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  75. package/dist/cjs/tools/ToolSearch.cjs +66 -30
  76. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  77. package/dist/cjs/tools/handlers.cjs +94 -8
  78. package/dist/cjs/tools/handlers.cjs.map +1 -1
  79. package/dist/cjs/tools/schema.cjs.map +1 -1
  80. package/dist/cjs/tools/search/content.cjs.map +1 -1
  81. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  82. package/dist/cjs/tools/search/format.cjs.map +1 -1
  83. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  84. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  85. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  86. package/dist/cjs/tools/search/search.cjs +1 -0
  87. package/dist/cjs/tools/search/search.cjs.map +1 -1
  88. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  89. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  90. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  91. package/dist/cjs/types/graph.cjs +1 -1
  92. package/dist/cjs/types/graph.cjs.map +1 -1
  93. package/dist/cjs/utils/contextAnalytics.cjs +23 -6
  94. package/dist/cjs/utils/contextAnalytics.cjs.map +1 -1
  95. package/dist/cjs/utils/events.cjs.map +1 -1
  96. package/dist/cjs/utils/graph.cjs.map +1 -1
  97. package/dist/cjs/utils/handlers.cjs.map +1 -1
  98. package/dist/cjs/utils/llm.cjs.map +1 -1
  99. package/dist/cjs/utils/misc.cjs.map +1 -1
  100. package/dist/cjs/utils/run.cjs +3 -1
  101. package/dist/cjs/utils/run.cjs.map +1 -1
  102. package/dist/cjs/utils/schema.cjs.map +1 -1
  103. package/dist/cjs/utils/title.cjs.map +1 -1
  104. package/dist/cjs/utils/tokens.cjs +33 -58
  105. package/dist/cjs/utils/tokens.cjs.map +1 -1
  106. package/dist/cjs/utils/toolCallContinuation.cjs +55 -0
  107. package/dist/cjs/utils/toolCallContinuation.cjs.map +1 -0
  108. package/dist/cjs/utils/toonFormat.cjs.map +1 -1
  109. package/dist/esm/agents/AgentContext.mjs +98 -49
  110. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  111. package/dist/esm/common/constants.mjs +22 -0
  112. package/dist/esm/common/constants.mjs.map +1 -0
  113. package/dist/esm/common/enum.mjs +31 -1
  114. package/dist/esm/common/enum.mjs.map +1 -1
  115. package/dist/esm/events.mjs +9 -4
  116. package/dist/esm/events.mjs.map +1 -1
  117. package/dist/esm/graphs/Graph.mjs +393 -88
  118. package/dist/esm/graphs/Graph.mjs.map +1 -1
  119. package/dist/esm/graphs/MultiAgentGraph.mjs +224 -93
  120. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  121. package/dist/esm/instrumentation.mjs +30 -14
  122. package/dist/esm/instrumentation.mjs.map +1 -1
  123. package/dist/esm/llm/anthropic/index.mjs +43 -11
  124. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  125. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  126. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +10 -7
  127. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  128. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +32 -0
  129. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  130. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  131. package/dist/esm/llm/bedrock/index.mjs +128 -101
  132. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  133. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +484 -0
  134. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -0
  135. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +171 -0
  136. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -0
  137. package/dist/esm/llm/fake.mjs.map +1 -1
  138. package/dist/esm/llm/google/index.mjs.map +1 -1
  139. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  140. package/dist/esm/llm/openai/index.mjs +1 -1
  141. package/dist/esm/llm/openai/index.mjs.map +1 -1
  142. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  143. package/dist/esm/llm/openrouter/index.mjs +59 -5
  144. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  145. package/dist/esm/llm/providers.mjs.map +1 -1
  146. package/dist/esm/llm/text.mjs.map +1 -1
  147. package/dist/esm/llm/vertexai/index.mjs +80 -2
  148. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  149. package/dist/esm/main.mjs +8 -3
  150. package/dist/esm/main.mjs.map +1 -1
  151. package/dist/esm/messages/cache.mjs +131 -108
  152. package/dist/esm/messages/cache.mjs.map +1 -1
  153. package/dist/esm/messages/content.mjs.map +1 -1
  154. package/dist/esm/messages/core.mjs +4 -1
  155. package/dist/esm/messages/core.mjs.map +1 -1
  156. package/dist/esm/messages/format.mjs +267 -49
  157. package/dist/esm/messages/format.mjs.map +1 -1
  158. package/dist/esm/messages/ids.mjs.map +1 -1
  159. package/dist/esm/messages/prune.mjs +56 -4
  160. package/dist/esm/messages/prune.mjs.map +1 -1
  161. package/dist/esm/messages/summarize.mjs +161 -0
  162. package/dist/esm/messages/summarize.mjs.map +1 -0
  163. package/dist/esm/messages/tools.mjs.map +1 -1
  164. package/dist/esm/run.mjs +88 -31
  165. package/dist/esm/run.mjs.map +1 -1
  166. package/dist/esm/schemas/validate.mjs.map +1 -1
  167. package/dist/esm/splitStream.mjs.map +1 -1
  168. package/dist/esm/stream.mjs +60 -26
  169. package/dist/esm/stream.mjs.map +1 -1
  170. package/dist/esm/tools/AskUser.mjs +125 -0
  171. package/dist/esm/tools/AskUser.mjs.map +1 -0
  172. package/dist/esm/tools/BrowserTools.mjs +11 -7
  173. package/dist/esm/tools/BrowserTools.mjs.map +1 -1
  174. package/dist/esm/tools/Calculator.mjs.map +1 -1
  175. package/dist/esm/tools/CodeExecutor.mjs +60 -5
  176. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  177. package/dist/esm/tools/ProgrammaticToolCalling.mjs +37 -54
  178. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  179. package/dist/esm/tools/StreamingToolCallBuffer.mjs +206 -0
  180. package/dist/esm/tools/StreamingToolCallBuffer.mjs.map +1 -0
  181. package/dist/esm/tools/ToolNode.mjs +333 -30
  182. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  183. package/dist/esm/tools/ToolSearch.mjs +66 -30
  184. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  185. package/dist/esm/tools/handlers.mjs +95 -9
  186. package/dist/esm/tools/handlers.mjs.map +1 -1
  187. package/dist/esm/tools/schema.mjs.map +1 -1
  188. package/dist/esm/tools/search/content.mjs.map +1 -1
  189. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  190. package/dist/esm/tools/search/format.mjs.map +1 -1
  191. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  192. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  193. package/dist/esm/tools/search/schema.mjs.map +1 -1
  194. package/dist/esm/tools/search/search.mjs +1 -0
  195. package/dist/esm/tools/search/search.mjs.map +1 -1
  196. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  197. package/dist/esm/tools/search/tool.mjs.map +1 -1
  198. package/dist/esm/tools/search/utils.mjs.map +1 -1
  199. package/dist/esm/types/graph.mjs +1 -1
  200. package/dist/esm/types/graph.mjs.map +1 -1
  201. package/dist/esm/utils/contextAnalytics.mjs +23 -6
  202. package/dist/esm/utils/contextAnalytics.mjs.map +1 -1
  203. package/dist/esm/utils/events.mjs.map +1 -1
  204. package/dist/esm/utils/graph.mjs.map +1 -1
  205. package/dist/esm/utils/handlers.mjs.map +1 -1
  206. package/dist/esm/utils/llm.mjs.map +1 -1
  207. package/dist/esm/utils/misc.mjs.map +1 -1
  208. package/dist/esm/utils/run.mjs +3 -1
  209. package/dist/esm/utils/run.mjs.map +1 -1
  210. package/dist/esm/utils/schema.mjs.map +1 -1
  211. package/dist/esm/utils/title.mjs.map +1 -1
  212. package/dist/esm/utils/tokens.mjs +33 -59
  213. package/dist/esm/utils/tokens.mjs.map +1 -1
  214. package/dist/esm/utils/toolCallContinuation.mjs +52 -0
  215. package/dist/esm/utils/toolCallContinuation.mjs.map +1 -0
  216. package/dist/esm/utils/toonFormat.mjs.map +1 -1
  217. package/dist/types/agents/AgentContext.d.ts +14 -7
  218. package/dist/types/common/constants.d.ts +18 -0
  219. package/dist/types/common/enum.d.ts +28 -0
  220. package/dist/types/common/index.d.ts +1 -0
  221. package/dist/types/events.d.ts +10 -3
  222. package/dist/types/graphs/Graph.d.ts +37 -0
  223. package/dist/types/index.d.ts +4 -0
  224. package/dist/types/llm/anthropic/index.d.ts +7 -1
  225. package/dist/types/llm/anthropic/types.d.ts +5 -2
  226. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
  227. package/dist/types/llm/bedrock/index.d.ts +40 -33
  228. package/dist/types/llm/bedrock/utils/message_outputs.d.ts +1 -1
  229. package/dist/types/llm/google/index.d.ts +2 -3
  230. package/dist/types/llm/openrouter/index.d.ts +21 -1
  231. package/dist/types/llm/vertexai/index.d.ts +3 -2
  232. package/dist/types/messages/cache.d.ts +1 -1
  233. package/dist/types/messages/index.d.ts +1 -0
  234. package/dist/types/messages/prune.d.ts +2 -7
  235. package/dist/types/messages/summarize.d.ts +33 -0
  236. package/dist/types/run.d.ts +6 -0
  237. package/dist/types/tools/AskUser.d.ts +408 -0
  238. package/dist/types/tools/BrowserTools.d.ts +2 -2
  239. package/dist/types/tools/CodeExecutor.d.ts +28 -4
  240. package/dist/types/tools/StreamingToolCallBuffer.d.ts +106 -0
  241. package/dist/types/tools/ToolNode.d.ts +55 -3
  242. package/dist/types/tools/ToolSearch.d.ts +9 -5
  243. package/dist/types/tools/handlers.d.ts +2 -2
  244. package/dist/types/types/graph.d.ts +9 -2
  245. package/dist/types/types/llm.d.ts +8 -3
  246. package/dist/types/types/run.d.ts +2 -0
  247. package/dist/types/types/tools.d.ts +20 -2
  248. package/dist/types/utils/contextAnalytics.d.ts +5 -4
  249. package/dist/types/utils/index.d.ts +1 -0
  250. package/dist/types/utils/tokens.d.ts +6 -19
  251. package/dist/types/utils/toolCallContinuation.d.ts +30 -0
  252. package/package.json +15 -8
  253. package/src/agents/AgentContext.js +782 -0
  254. package/src/agents/AgentContext.js.map +1 -0
  255. package/src/agents/AgentContext.test.js +421 -0
  256. package/src/agents/AgentContext.test.js.map +1 -0
  257. package/src/agents/AgentContext.ts +132 -64
  258. package/src/agents/__tests__/AgentContext.test.js +678 -0
  259. package/src/agents/__tests__/AgentContext.test.js.map +1 -0
  260. package/src/agents/__tests__/AgentContext.test.ts +25 -4
  261. package/src/agents/__tests__/resolveStructuredOutputMode.test.js +117 -0
  262. package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
  263. package/src/common/__tests__/enum.test.ts +135 -0
  264. package/src/common/constants.ts +21 -0
  265. package/src/common/enum.js +192 -0
  266. package/src/common/enum.js.map +1 -0
  267. package/src/common/enum.ts +30 -0
  268. package/src/common/index.js +3 -0
  269. package/src/common/index.js.map +1 -0
  270. package/src/common/index.ts +2 -1
  271. package/src/events.js +166 -0
  272. package/src/events.js.map +1 -0
  273. package/src/events.ts +11 -14
  274. package/src/graphs/Graph.js +1857 -0
  275. package/src/graphs/Graph.js.map +1 -0
  276. package/src/graphs/Graph.ts +580 -162
  277. package/src/graphs/MultiAgentGraph.js +1092 -0
  278. package/src/graphs/MultiAgentGraph.js.map +1 -0
  279. package/src/graphs/MultiAgentGraph.ts +331 -112
  280. package/src/graphs/__tests__/adaptive-thinking.test.ts +369 -0
  281. package/src/graphs/__tests__/graph-direct-tool-names.test.ts +210 -0
  282. package/src/graphs/__tests__/multi-agent-edges.test.ts +237 -0
  283. package/src/graphs/__tests__/structured-output.integration.test.js +624 -0
  284. package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
  285. package/src/graphs/__tests__/structured-output.test.js +144 -0
  286. package/src/graphs/__tests__/structured-output.test.js.map +1 -0
  287. package/src/graphs/contextManagement.e2e.test.js +718 -0
  288. package/src/graphs/contextManagement.e2e.test.js.map +1 -0
  289. package/src/graphs/contextManagement.e2e.test.ts +990 -0
  290. package/src/graphs/contextManagement.test.js +485 -0
  291. package/src/graphs/contextManagement.test.js.map +1 -0
  292. package/src/graphs/contextManagement.test.ts +625 -0
  293. package/src/graphs/handoffValidation.test.js +276 -0
  294. package/src/graphs/handoffValidation.test.js.map +1 -0
  295. package/src/graphs/handoffValidation.test.ts +353 -0
  296. package/src/graphs/index.js +3 -0
  297. package/src/graphs/index.js.map +1 -0
  298. package/src/index.js +28 -0
  299. package/src/index.js.map +1 -0
  300. package/src/index.ts +13 -0
  301. package/src/instrumentation.js +21 -0
  302. package/src/instrumentation.js.map +1 -0
  303. package/src/instrumentation.ts +38 -17
  304. package/src/llm/anthropic/index.js +319 -0
  305. package/src/llm/anthropic/index.js.map +1 -0
  306. package/src/llm/anthropic/index.ts +68 -15
  307. package/src/llm/anthropic/llm.spec.ts +402 -0
  308. package/src/llm/anthropic/types.js +46 -0
  309. package/src/llm/anthropic/types.js.map +1 -0
  310. package/src/llm/anthropic/types.ts +8 -2
  311. package/src/llm/anthropic/utils/message_inputs.js +627 -0
  312. package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
  313. package/src/llm/anthropic/utils/message_inputs.ts +16 -33
  314. package/src/llm/anthropic/utils/message_outputs.js +290 -0
  315. package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
  316. package/src/llm/anthropic/utils/message_outputs.ts +40 -1
  317. package/src/llm/anthropic/utils/output_parsers.js +89 -0
  318. package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
  319. package/src/llm/anthropic/utils/tools.js +25 -0
  320. package/src/llm/anthropic/utils/tools.js.map +1 -0
  321. package/src/llm/bedrock/__tests__/bedrock-caching.test.js +392 -0
  322. package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -0
  323. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +24 -40
  324. package/src/llm/bedrock/index.js +303 -0
  325. package/src/llm/bedrock/index.js.map +1 -0
  326. package/src/llm/bedrock/index.ts +171 -134
  327. package/src/llm/bedrock/llm.spec.ts +395 -52
  328. package/src/llm/bedrock/types.js +2 -0
  329. package/src/llm/bedrock/types.js.map +1 -0
  330. package/src/llm/bedrock/utils/index.js +6 -0
  331. package/src/llm/bedrock/utils/index.js.map +1 -0
  332. package/src/llm/bedrock/utils/message_inputs.js +463 -0
  333. package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
  334. package/src/llm/bedrock/utils/message_inputs.ts +30 -5
  335. package/src/llm/bedrock/utils/message_outputs.js +269 -0
  336. package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
  337. package/src/llm/bedrock/utils/message_outputs.ts +70 -22
  338. package/src/llm/fake.js +92 -0
  339. package/src/llm/fake.js.map +1 -0
  340. package/src/llm/google/index.js +215 -0
  341. package/src/llm/google/index.js.map +1 -0
  342. package/src/llm/google/index.ts +2 -3
  343. package/src/llm/google/types.js +12 -0
  344. package/src/llm/google/types.js.map +1 -0
  345. package/src/llm/google/utils/common.js +670 -0
  346. package/src/llm/google/utils/common.js.map +1 -0
  347. package/src/llm/google/utils/tools.js +111 -0
  348. package/src/llm/google/utils/tools.js.map +1 -0
  349. package/src/llm/google/utils/zod_to_genai_parameters.js +47 -0
  350. package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
  351. package/src/llm/openai/index.js +1033 -0
  352. package/src/llm/openai/index.js.map +1 -0
  353. package/src/llm/openai/types.js +2 -0
  354. package/src/llm/openai/types.js.map +1 -0
  355. package/src/llm/openai/utils/index.js +756 -0
  356. package/src/llm/openai/utils/index.js.map +1 -0
  357. package/src/llm/openai/utils/isReasoningModel.test.js +79 -0
  358. package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
  359. package/src/llm/openrouter/index.js +261 -0
  360. package/src/llm/openrouter/index.js.map +1 -0
  361. package/src/llm/openrouter/index.ts +117 -6
  362. package/src/llm/openrouter/reasoning.test.js +181 -0
  363. package/src/llm/openrouter/reasoning.test.js.map +1 -0
  364. package/src/llm/openrouter/reasoning.test.ts +207 -0
  365. package/src/llm/providers.js +36 -0
  366. package/src/llm/providers.js.map +1 -0
  367. package/src/llm/text.js +65 -0
  368. package/src/llm/text.js.map +1 -0
  369. package/src/llm/vertexai/index.js +402 -0
  370. package/src/llm/vertexai/index.js.map +1 -0
  371. package/src/llm/vertexai/index.ts +115 -5
  372. package/src/llm/vertexai/llm.spec.ts +114 -0
  373. package/src/messages/__tests__/tools.test.js +392 -0
  374. package/src/messages/__tests__/tools.test.js.map +1 -0
  375. package/src/messages/cache.js +404 -0
  376. package/src/messages/cache.js.map +1 -0
  377. package/src/messages/cache.test.js +1167 -0
  378. package/src/messages/cache.test.js.map +1 -0
  379. package/src/messages/cache.test.ts +178 -16
  380. package/src/messages/cache.ts +152 -147
  381. package/src/messages/content.js +48 -0
  382. package/src/messages/content.js.map +1 -0
  383. package/src/messages/content.test.js +314 -0
  384. package/src/messages/content.test.js.map +1 -0
  385. package/src/messages/core.js +359 -0
  386. package/src/messages/core.js.map +1 -0
  387. package/src/messages/core.ts +5 -0
  388. package/src/messages/ensureThinkingBlock.test.js +997 -0
  389. package/src/messages/ensureThinkingBlock.test.js.map +1 -0
  390. package/src/messages/ensureThinkingBlock.test.ts +751 -10
  391. package/src/messages/format.js +973 -0
  392. package/src/messages/format.js.map +1 -0
  393. package/src/messages/format.ts +334 -57
  394. package/src/messages/formatAgentMessages.test.js +2278 -0
  395. package/src/messages/formatAgentMessages.test.js.map +1 -0
  396. package/src/messages/formatAgentMessages.test.ts +1175 -1
  397. package/src/messages/formatAgentMessages.tools.test.js +362 -0
  398. package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
  399. package/src/messages/formatMessage.test.js +608 -0
  400. package/src/messages/formatMessage.test.js.map +1 -0
  401. package/src/messages/ids.js +18 -0
  402. package/src/messages/ids.js.map +1 -0
  403. package/src/messages/index.js +9 -0
  404. package/src/messages/index.js.map +1 -0
  405. package/src/messages/index.ts +1 -0
  406. package/src/messages/labelContentByAgent.test.js +725 -0
  407. package/src/messages/labelContentByAgent.test.js.map +1 -0
  408. package/src/messages/prune.js +438 -0
  409. package/src/messages/prune.js.map +1 -0
  410. package/src/messages/prune.ts +87 -25
  411. package/src/messages/reducer.js +60 -0
  412. package/src/messages/reducer.js.map +1 -0
  413. package/src/messages/shiftIndexTokenCountMap.test.js +63 -0
  414. package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
  415. package/src/messages/summarize.js +146 -0
  416. package/src/messages/summarize.js.map +1 -0
  417. package/src/messages/summarize.test.js +332 -0
  418. package/src/messages/summarize.test.js.map +1 -0
  419. package/src/messages/summarize.test.ts +466 -0
  420. package/src/messages/summarize.ts +222 -0
  421. package/src/messages/tools.js +90 -0
  422. package/src/messages/tools.js.map +1 -0
  423. package/src/mockStream.js +81 -0
  424. package/src/mockStream.js.map +1 -0
  425. package/src/prompts/collab.js +7 -0
  426. package/src/prompts/collab.js.map +1 -0
  427. package/src/prompts/index.js +3 -0
  428. package/src/prompts/index.js.map +1 -0
  429. package/src/prompts/taskmanager.js +58 -0
  430. package/src/prompts/taskmanager.js.map +1 -0
  431. package/src/run.js +427 -0
  432. package/src/run.js.map +1 -0
  433. package/src/run.ts +101 -33
  434. package/src/schemas/index.js +3 -0
  435. package/src/schemas/index.js.map +1 -0
  436. package/src/schemas/schema-preparation.test.js +370 -0
  437. package/src/schemas/schema-preparation.test.js.map +1 -0
  438. package/src/schemas/validate.js +314 -0
  439. package/src/schemas/validate.js.map +1 -0
  440. package/src/schemas/validate.test.js +264 -0
  441. package/src/schemas/validate.test.js.map +1 -0
  442. package/src/scripts/abort.js +127 -0
  443. package/src/scripts/abort.js.map +1 -0
  444. package/src/scripts/ant_web_search.js +130 -0
  445. package/src/scripts/ant_web_search.js.map +1 -0
  446. package/src/scripts/ant_web_search.ts +1 -0
  447. package/src/scripts/ant_web_search_edge_case.js +133 -0
  448. package/src/scripts/ant_web_search_edge_case.js.map +1 -0
  449. package/src/scripts/ant_web_search_edge_case.ts +1 -0
  450. package/src/scripts/ant_web_search_error_edge_case.js +119 -0
  451. package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
  452. package/src/scripts/ant_web_search_error_edge_case.ts +1 -0
  453. package/src/scripts/args.js +41 -0
  454. package/src/scripts/args.js.map +1 -0
  455. package/src/scripts/bedrock-cache-debug.js +186 -0
  456. package/src/scripts/bedrock-cache-debug.js.map +1 -0
  457. package/src/scripts/bedrock-cache-debug.ts +250 -0
  458. package/src/scripts/bedrock-content-aggregation-test.js +195 -0
  459. package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
  460. package/src/scripts/bedrock-content-aggregation-test.ts +266 -0
  461. package/src/scripts/bedrock-merge-test.js +80 -0
  462. package/src/scripts/bedrock-merge-test.js.map +1 -0
  463. package/src/scripts/bedrock-merge-test.ts +107 -0
  464. package/src/scripts/bedrock-parallel-tools-test.js +150 -0
  465. package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
  466. package/src/scripts/bedrock-parallel-tools-test.ts +204 -0
  467. package/src/scripts/caching.js +106 -0
  468. package/src/scripts/caching.js.map +1 -0
  469. package/src/scripts/caching.ts +1 -0
  470. package/src/scripts/cli.js +152 -0
  471. package/src/scripts/cli.js.map +1 -0
  472. package/src/scripts/cli2.js +119 -0
  473. package/src/scripts/cli2.js.map +1 -0
  474. package/src/scripts/cli3.js +163 -0
  475. package/src/scripts/cli3.js.map +1 -0
  476. package/src/scripts/cli4.js +165 -0
  477. package/src/scripts/cli4.js.map +1 -0
  478. package/src/scripts/cli5.js +165 -0
  479. package/src/scripts/cli5.js.map +1 -0
  480. package/src/scripts/code_exec.js +171 -0
  481. package/src/scripts/code_exec.js.map +1 -0
  482. package/src/scripts/code_exec.ts +1 -0
  483. package/src/scripts/code_exec_files.js +180 -0
  484. package/src/scripts/code_exec_files.js.map +1 -0
  485. package/src/scripts/code_exec_files.ts +1 -0
  486. package/src/scripts/code_exec_multi_session.js +185 -0
  487. package/src/scripts/code_exec_multi_session.js.map +1 -0
  488. package/src/scripts/code_exec_multi_session.ts +9 -13
  489. package/src/scripts/code_exec_ptc.js +265 -0
  490. package/src/scripts/code_exec_ptc.js.map +1 -0
  491. package/src/scripts/code_exec_ptc.ts +1 -0
  492. package/src/scripts/code_exec_session.js +217 -0
  493. package/src/scripts/code_exec_session.js.map +1 -0
  494. package/src/scripts/code_exec_session.ts +1 -0
  495. package/src/scripts/code_exec_simple.js +120 -0
  496. package/src/scripts/code_exec_simple.js.map +1 -0
  497. package/src/scripts/code_exec_simple.ts +1 -0
  498. package/src/scripts/content.js +111 -0
  499. package/src/scripts/content.js.map +1 -0
  500. package/src/scripts/content.ts +1 -0
  501. package/src/scripts/empty_input.js +125 -0
  502. package/src/scripts/empty_input.js.map +1 -0
  503. package/src/scripts/handoff-test.js +96 -0
  504. package/src/scripts/handoff-test.js.map +1 -0
  505. package/src/scripts/image.js +138 -0
  506. package/src/scripts/image.js.map +1 -0
  507. package/src/scripts/image.ts +3 -1
  508. package/src/scripts/memory.js +83 -0
  509. package/src/scripts/memory.js.map +1 -0
  510. package/src/scripts/memory.ts +16 -6
  511. package/src/scripts/multi-agent-chain.js +271 -0
  512. package/src/scripts/multi-agent-chain.js.map +1 -0
  513. package/src/scripts/multi-agent-chain.ts +1 -0
  514. package/src/scripts/multi-agent-conditional.js +185 -0
  515. package/src/scripts/multi-agent-conditional.js.map +1 -0
  516. package/src/scripts/multi-agent-conditional.ts +1 -0
  517. package/src/scripts/multi-agent-document-review-chain.js +171 -0
  518. package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
  519. package/src/scripts/multi-agent-document-review-chain.ts +1 -0
  520. package/src/scripts/multi-agent-hybrid-flow.js +264 -0
  521. package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
  522. package/src/scripts/multi-agent-hybrid-flow.ts +1 -0
  523. package/src/scripts/multi-agent-parallel-start.js +214 -0
  524. package/src/scripts/multi-agent-parallel-start.js.map +1 -0
  525. package/src/scripts/multi-agent-parallel-start.ts +4 -4
  526. package/src/scripts/multi-agent-parallel.js +346 -0
  527. package/src/scripts/multi-agent-parallel.js.map +1 -0
  528. package/src/scripts/multi-agent-parallel.ts +1 -0
  529. package/src/scripts/multi-agent-sequence.js +184 -0
  530. package/src/scripts/multi-agent-sequence.js.map +1 -0
  531. package/src/scripts/multi-agent-sequence.ts +4 -4
  532. package/src/scripts/multi-agent-supervisor.js +324 -0
  533. package/src/scripts/multi-agent-supervisor.js.map +1 -0
  534. package/src/scripts/multi-agent-supervisor.ts +1 -0
  535. package/src/scripts/multi-agent-test.js +147 -0
  536. package/src/scripts/multi-agent-test.js.map +1 -0
  537. package/src/scripts/multi-agent-test.ts +1 -0
  538. package/src/scripts/parallel-asymmetric-tools-test.js +202 -0
  539. package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
  540. package/src/scripts/parallel-asymmetric-tools-test.ts +1 -0
  541. package/src/scripts/parallel-full-metadata-test.js +176 -0
  542. package/src/scripts/parallel-full-metadata-test.js.map +1 -0
  543. package/src/scripts/parallel-full-metadata-test.ts +1 -0
  544. package/src/scripts/parallel-tools-test.js +256 -0
  545. package/src/scripts/parallel-tools-test.js.map +1 -0
  546. package/src/scripts/parallel-tools-test.ts +1 -0
  547. package/src/scripts/poc-multi-agent-comprehensive.ts +1222 -0
  548. package/src/scripts/programmatic_exec.js +277 -0
  549. package/src/scripts/programmatic_exec.js.map +1 -0
  550. package/src/scripts/programmatic_exec_agent.js +168 -0
  551. package/src/scripts/programmatic_exec_agent.js.map +1 -0
  552. package/src/scripts/programmatic_exec_agent.ts +1 -0
  553. package/src/scripts/search.js +118 -0
  554. package/src/scripts/search.js.map +1 -0
  555. package/src/scripts/search.ts +1 -0
  556. package/src/scripts/sequential-full-metadata-test.js +143 -0
  557. package/src/scripts/sequential-full-metadata-test.js.map +1 -0
  558. package/src/scripts/sequential-full-metadata-test.ts +1 -0
  559. package/src/scripts/simple.js +174 -0
  560. package/src/scripts/simple.js.map +1 -0
  561. package/src/scripts/simple.ts +2 -1
  562. package/src/scripts/single-agent-metadata-test.js +152 -0
  563. package/src/scripts/single-agent-metadata-test.js.map +1 -0
  564. package/src/scripts/single-agent-metadata-test.ts +4 -6
  565. package/src/scripts/stream.js +113 -0
  566. package/src/scripts/stream.js.map +1 -0
  567. package/src/scripts/stream.ts +1 -0
  568. package/src/scripts/test-custom-prompt-key.js +132 -0
  569. package/src/scripts/test-custom-prompt-key.js.map +1 -0
  570. package/src/scripts/test-handoff-input.js +143 -0
  571. package/src/scripts/test-handoff-input.js.map +1 -0
  572. package/src/scripts/test-handoff-preamble.js +227 -0
  573. package/src/scripts/test-handoff-preamble.js.map +1 -0
  574. package/src/scripts/test-handoff-preamble.ts +1 -0
  575. package/src/scripts/test-handoff-steering.js +353 -0
  576. package/src/scripts/test-handoff-steering.js.map +1 -0
  577. package/src/scripts/test-handoff-steering.ts +430 -0
  578. package/src/scripts/test-multi-agent-list-handoff.js +318 -0
  579. package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
  580. package/src/scripts/test-multi-agent-list-handoff.ts +1 -0
  581. package/src/scripts/test-parallel-agent-labeling.js +253 -0
  582. package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
  583. package/src/scripts/test-parallel-agent-labeling.ts +2 -0
  584. package/src/scripts/test-parallel-handoffs.js +229 -0
  585. package/src/scripts/test-parallel-handoffs.js.map +1 -0
  586. package/src/scripts/test-parallel-handoffs.ts +1 -0
  587. package/src/scripts/test-thinking-handoff-bedrock.js +132 -0
  588. package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
  589. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -0
  590. package/src/scripts/test-thinking-handoff.js +132 -0
  591. package/src/scripts/test-thinking-handoff.js.map +1 -0
  592. package/src/scripts/test-thinking-handoff.ts +1 -0
  593. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js +140 -0
  594. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
  595. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +166 -0
  596. package/src/scripts/test-tool-before-handoff-role-order.js +223 -0
  597. package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
  598. package/src/scripts/test-tool-before-handoff-role-order.ts +276 -0
  599. package/src/scripts/test-tools-before-handoff.js +187 -0
  600. package/src/scripts/test-tools-before-handoff.js.map +1 -0
  601. package/src/scripts/test-tools-before-handoff.ts +4 -8
  602. package/src/scripts/test_code_api.js +263 -0
  603. package/src/scripts/test_code_api.js.map +1 -0
  604. package/src/scripts/thinking-bedrock.js +128 -0
  605. package/src/scripts/thinking-bedrock.js.map +1 -0
  606. package/src/scripts/thinking-bedrock.ts +1 -0
  607. package/src/scripts/thinking-vertexai.js +130 -0
  608. package/src/scripts/thinking-vertexai.js.map +1 -0
  609. package/src/scripts/thinking-vertexai.ts +168 -0
  610. package/src/scripts/thinking.js +134 -0
  611. package/src/scripts/thinking.js.map +1 -0
  612. package/src/scripts/thinking.ts +1 -0
  613. package/src/scripts/tool_search.js +114 -0
  614. package/src/scripts/tool_search.js.map +1 -0
  615. package/src/scripts/tools.js +125 -0
  616. package/src/scripts/tools.js.map +1 -0
  617. package/src/scripts/tools.ts +5 -19
  618. package/src/specs/agent-handoffs-bedrock.integration.test.js +280 -0
  619. package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
  620. package/src/specs/agent-handoffs-bedrock.integration.test.ts +412 -375
  621. package/src/specs/agent-handoffs.test.js +924 -0
  622. package/src/specs/agent-handoffs.test.js.map +1 -0
  623. package/src/specs/agent-handoffs.test.ts +152 -39
  624. package/src/specs/anthropic.simple.test.js +287 -0
  625. package/src/specs/anthropic.simple.test.js.map +1 -0
  626. package/src/specs/anthropic.simple.test.ts +7 -4
  627. package/src/specs/azure.simple.test.js +381 -0
  628. package/src/specs/azure.simple.test.js.map +1 -0
  629. package/src/specs/azure.simple.test.ts +143 -5
  630. package/src/specs/cache.simple.test.js +282 -0
  631. package/src/specs/cache.simple.test.js.map +1 -0
  632. package/src/specs/cache.simple.test.ts +9 -2
  633. package/src/specs/custom-event-await.test.js +148 -0
  634. package/src/specs/custom-event-await.test.js.map +1 -0
  635. package/src/specs/custom-event-await.test.ts +215 -0
  636. package/src/specs/deepseek.simple.test.js +189 -0
  637. package/src/specs/deepseek.simple.test.js.map +1 -0
  638. package/src/specs/deepseek.simple.test.ts +4 -2
  639. package/src/specs/emergency-prune.test.js +308 -0
  640. package/src/specs/emergency-prune.test.js.map +1 -0
  641. package/src/specs/moonshot.simple.test.js +237 -0
  642. package/src/specs/moonshot.simple.test.js.map +1 -0
  643. package/src/specs/moonshot.simple.test.ts +6 -2
  644. package/src/specs/observability.integration.test.js +1337 -0
  645. package/src/specs/observability.integration.test.js.map +1 -0
  646. package/src/specs/observability.integration.test.ts +2223 -0
  647. package/src/specs/openai.simple.test.js +233 -0
  648. package/src/specs/openai.simple.test.js.map +1 -0
  649. package/src/specs/openai.simple.test.ts +4 -2
  650. package/src/specs/openrouter.simple.test.js +202 -0
  651. package/src/specs/openrouter.simple.test.js.map +1 -0
  652. package/src/specs/openrouter.simple.test.ts +165 -4
  653. package/src/specs/prune.test.js +733 -0
  654. package/src/specs/prune.test.js.map +1 -0
  655. package/src/specs/prune.test.ts +1 -0
  656. package/src/specs/reasoning.test.js +144 -0
  657. package/src/specs/reasoning.test.js.map +1 -0
  658. package/src/specs/reasoning.test.ts +2 -2
  659. package/src/specs/spec.utils.js +4 -0
  660. package/src/specs/spec.utils.js.map +1 -0
  661. package/src/specs/thinking-handoff.test.js +486 -0
  662. package/src/specs/thinking-handoff.test.js.map +1 -0
  663. package/src/specs/thinking-handoff.test.ts +3 -2
  664. package/src/specs/thinking-prune.test.js +600 -0
  665. package/src/specs/thinking-prune.test.js.map +1 -0
  666. package/src/specs/token-distribution-edge-case.test.js +246 -0
  667. package/src/specs/token-distribution-edge-case.test.js.map +1 -0
  668. package/src/specs/token-memoization.test.js +32 -0
  669. package/src/specs/token-memoization.test.js.map +1 -0
  670. package/src/specs/token-memoization.test.ts +14 -5
  671. package/src/specs/tokens.test.js +49 -0
  672. package/src/specs/tokens.test.js.map +1 -0
  673. package/src/specs/tokens.test.ts +64 -0
  674. package/src/specs/tool-error.test.js +139 -0
  675. package/src/specs/tool-error.test.js.map +1 -0
  676. package/src/specs/tool-error.test.ts +2 -2
  677. package/src/splitStream.js +204 -0
  678. package/src/splitStream.js.map +1 -0
  679. package/src/splitStream.test.js +504 -0
  680. package/src/splitStream.test.js.map +1 -0
  681. package/src/stream.js +650 -0
  682. package/src/stream.js.map +1 -0
  683. package/src/stream.test.js +225 -0
  684. package/src/stream.test.js.map +1 -0
  685. package/src/stream.test.ts +25 -15
  686. package/src/stream.ts +82 -32
  687. package/src/test/mockTools.js +340 -0
  688. package/src/test/mockTools.js.map +1 -0
  689. package/src/tools/AskUser.ts +159 -0
  690. package/src/tools/BrowserTools.js +245 -0
  691. package/src/tools/BrowserTools.js.map +1 -0
  692. package/src/tools/BrowserTools.ts +12 -8
  693. package/src/tools/Calculator.js +38 -0
  694. package/src/tools/Calculator.js.map +1 -0
  695. package/src/tools/Calculator.test.js +225 -0
  696. package/src/tools/Calculator.test.js.map +1 -0
  697. package/src/tools/CodeExecutor.js +233 -0
  698. package/src/tools/CodeExecutor.js.map +1 -0
  699. package/src/tools/CodeExecutor.selfhealing.test.ts +435 -0
  700. package/src/tools/CodeExecutor.ts +82 -5
  701. package/src/tools/ProgrammaticToolCalling.js +602 -0
  702. package/src/tools/ProgrammaticToolCalling.js.map +1 -0
  703. package/src/tools/ProgrammaticToolCalling.ts +40 -52
  704. package/src/tools/StreamingToolCallBuffer.js +179 -0
  705. package/src/tools/StreamingToolCallBuffer.js.map +1 -0
  706. package/src/tools/StreamingToolCallBuffer.ts +218 -0
  707. package/src/tools/ToolNode.js +930 -0
  708. package/src/tools/ToolNode.js.map +1 -0
  709. package/src/tools/ToolNode.ts +454 -41
  710. package/src/tools/ToolSearch.js +904 -0
  711. package/src/tools/ToolSearch.js.map +1 -0
  712. package/src/tools/ToolSearch.ts +84 -33
  713. package/src/tools/__tests__/AskUser.test.ts +537 -0
  714. package/src/tools/__tests__/BrowserTools.test.js +306 -0
  715. package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
  716. package/src/tools/__tests__/BrowserTools.test.ts +131 -6
  717. package/src/tools/__tests__/CodeExecutor.test.ts +76 -0
  718. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js +276 -0
  719. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
  720. package/src/tools/__tests__/ProgrammaticToolCalling.test.js +807 -0
  721. package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
  722. package/src/tools/__tests__/StreamingToolCallBuffer.test.js +175 -0
  723. package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +1 -0
  724. package/src/tools/__tests__/StreamingToolCallBuffer.test.ts +263 -0
  725. package/src/tools/__tests__/ToolApproval.test.js +675 -0
  726. package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
  727. package/src/tools/__tests__/ToolApproval.test.ts +194 -20
  728. package/src/tools/__tests__/ToolNode.hitl.test.ts +267 -0
  729. package/src/tools/__tests__/ToolNode.recovery.test.js +200 -0
  730. package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
  731. package/src/tools/__tests__/ToolNode.recovery.test.ts +276 -0
  732. package/src/tools/__tests__/ToolNode.session.test.js +319 -0
  733. package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
  734. package/src/tools/__tests__/ToolNode.session.test.ts +465 -0
  735. package/src/tools/__tests__/ToolSearch.integration.test.js +125 -0
  736. package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
  737. package/src/tools/__tests__/ToolSearch.test.js +812 -0
  738. package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
  739. package/src/tools/__tests__/ToolSearch.test.ts +78 -5
  740. package/src/tools/__tests__/handlers.test.js +799 -0
  741. package/src/tools/__tests__/handlers.test.js.map +1 -0
  742. package/src/tools/__tests__/handlers.test.ts +1100 -0
  743. package/src/tools/__tests__/truncation-recovery.integration.test.js +362 -0
  744. package/src/tools/__tests__/truncation-recovery.integration.test.js.map +1 -0
  745. package/src/tools/__tests__/truncation-recovery.integration.test.ts +560 -0
  746. package/src/tools/handlers.js +306 -0
  747. package/src/tools/handlers.js.map +1 -0
  748. package/src/tools/handlers.ts +119 -16
  749. package/src/tools/schema.js +25 -0
  750. package/src/tools/schema.js.map +1 -0
  751. package/src/tools/search/anthropic.js +34 -0
  752. package/src/tools/search/anthropic.js.map +1 -0
  753. package/src/tools/search/content.js +116 -0
  754. package/src/tools/search/content.js.map +1 -0
  755. package/src/tools/search/content.test.js +133 -0
  756. package/src/tools/search/content.test.js.map +1 -0
  757. package/src/tools/search/firecrawl.js +173 -0
  758. package/src/tools/search/firecrawl.js.map +1 -0
  759. package/src/tools/search/format.js +198 -0
  760. package/src/tools/search/format.js.map +1 -0
  761. package/src/tools/search/highlights.js +241 -0
  762. package/src/tools/search/highlights.js.map +1 -0
  763. package/src/tools/search/index.js +3 -0
  764. package/src/tools/search/index.js.map +1 -0
  765. package/src/tools/search/jina-reranker.test.js +106 -0
  766. package/src/tools/search/jina-reranker.test.js.map +1 -0
  767. package/src/tools/search/rerankers.js +165 -0
  768. package/src/tools/search/rerankers.js.map +1 -0
  769. package/src/tools/search/schema.js +102 -0
  770. package/src/tools/search/schema.js.map +1 -0
  771. package/src/tools/search/search.js +561 -0
  772. package/src/tools/search/search.js.map +1 -0
  773. package/src/tools/search/serper-scraper.js +126 -0
  774. package/src/tools/search/serper-scraper.js.map +1 -0
  775. package/src/tools/search/test.js +129 -0
  776. package/src/tools/search/test.js.map +1 -0
  777. package/src/tools/search/tool.js +453 -0
  778. package/src/tools/search/tool.js.map +1 -0
  779. package/src/tools/search/types.js +2 -0
  780. package/src/tools/search/types.js.map +1 -0
  781. package/src/tools/search/utils.js +59 -0
  782. package/src/tools/search/utils.js.map +1 -0
  783. package/src/types/graph.js +24 -0
  784. package/src/types/graph.js.map +1 -0
  785. package/src/types/graph.test.js +192 -0
  786. package/src/types/graph.test.js.map +1 -0
  787. package/src/types/graph.ts +26 -6
  788. package/src/types/index.js +7 -0
  789. package/src/types/index.js.map +1 -0
  790. package/src/types/llm.js +2 -0
  791. package/src/types/llm.js.map +1 -0
  792. package/src/types/llm.ts +8 -3
  793. package/src/types/messages.js +2 -0
  794. package/src/types/messages.js.map +1 -0
  795. package/src/types/run.js +2 -0
  796. package/src/types/run.js.map +1 -0
  797. package/src/types/run.ts +2 -0
  798. package/src/types/stream.js +2 -0
  799. package/src/types/stream.js.map +1 -0
  800. package/src/types/tools.js +2 -0
  801. package/src/types/tools.js.map +1 -0
  802. package/src/types/tools.ts +21 -2
  803. package/src/utils/contextAnalytics.js +79 -0
  804. package/src/utils/contextAnalytics.js.map +1 -0
  805. package/src/utils/contextAnalytics.test.js +166 -0
  806. package/src/utils/contextAnalytics.test.js.map +1 -0
  807. package/src/utils/contextAnalytics.test.ts +222 -0
  808. package/src/utils/contextAnalytics.ts +27 -9
  809. package/src/utils/events.js +26 -0
  810. package/src/utils/events.js.map +1 -0
  811. package/src/utils/graph.js +11 -0
  812. package/src/utils/graph.js.map +1 -0
  813. package/src/utils/handlers.js +65 -0
  814. package/src/utils/handlers.js.map +1 -0
  815. package/src/utils/index.js +10 -0
  816. package/src/utils/index.js.map +1 -0
  817. package/src/utils/index.ts +1 -0
  818. package/src/utils/llm.js +21 -0
  819. package/src/utils/llm.js.map +1 -0
  820. package/src/utils/llmConfig.js +205 -0
  821. package/src/utils/llmConfig.js.map +1 -0
  822. package/src/utils/llmConfig.ts +5 -5
  823. package/src/utils/logging.js +37 -0
  824. package/src/utils/logging.js.map +1 -0
  825. package/src/utils/misc.js +51 -0
  826. package/src/utils/misc.js.map +1 -0
  827. package/src/utils/run.js +69 -0
  828. package/src/utils/run.js.map +1 -0
  829. package/src/utils/run.ts +108 -106
  830. package/src/utils/schema.js +21 -0
  831. package/src/utils/schema.js.map +1 -0
  832. package/src/utils/title.js +119 -0
  833. package/src/utils/title.js.map +1 -0
  834. package/src/utils/tokens.js +92 -0
  835. package/src/utils/tokens.js.map +1 -0
  836. package/src/utils/tokens.ts +118 -142
  837. package/src/utils/toolCallContinuation.ts +55 -0
  838. package/src/utils/toonFormat.js +379 -0
  839. package/src/utils/toonFormat.js.map +1 -0
@@ -0,0 +1,602 @@
1
+ // src/tools/ProgrammaticToolCalling.ts
2
+ import { config } from 'dotenv';
3
+ import fetch from 'node-fetch';
4
+ import { HttpsProxyAgent } from 'https-proxy-agent';
5
+ import { getEnvironmentVariable } from '@langchain/core/utils/env';
6
+ import { tool } from '@langchain/core/tools';
7
+ import { imageExtRegex, getCodeBaseURL } from './CodeExecutor';
8
+ import { EnvVar, Constants } from '@/common';
9
+ config();
10
+ // ============================================================================
11
+ // Constants
12
+ // ============================================================================
13
+ const imageMessage = 'Image is already displayed to the user';
14
+ const otherMessage = 'File is already downloaded by the user';
15
+ const accessMessage = 'Note: Files from previous executions are automatically available and can be modified.';
16
+ const emptyOutputMessage = 'stdout: Empty. Ensure you\'re writing output explicitly.\n';
17
+ /** Default max round-trips to prevent infinite loops */
18
+ const DEFAULT_MAX_ROUND_TRIPS = 20;
19
+ /** Default execution timeout in milliseconds */
20
+ const DEFAULT_TIMEOUT = 60000;
21
+ // ============================================================================
22
+ // Description Components (Single Source of Truth)
23
+ // ============================================================================
24
+ const STATELESS_WARNING = `CRITICAL - STATELESS EXECUTION:
25
+ Each call is a fresh Python interpreter. Variables, imports, and data do NOT persist between calls.
26
+ You MUST complete your entire workflow in ONE code block: query → process → output.
27
+ DO NOT split work across multiple calls expecting to reuse variables.`;
28
+ const CORE_RULES = `Rules:
29
+ - EVERYTHING in one call—no state persists between executions
30
+ - Just write code with await—auto-wrapped in async context
31
+ - DO NOT define async def main() or call asyncio.run()
32
+ - Tools are pre-defined—DO NOT write function definitions
33
+ - Only print() output returns to the model`;
34
+ const ADDITIONAL_RULES = `- Generated files are automatically available in /mnt/data/ for subsequent executions
35
+ - Tool names normalized: hyphens→underscores, keywords get \`_tool\` suffix`;
36
+ const EXAMPLES = `Example (Complete workflow in one call):
37
+ # Query data
38
+ data = await query_database(sql="SELECT * FROM users")
39
+ # Process it
40
+ df = pd.DataFrame(data)
41
+ summary = df.groupby('region').sum()
42
+ # Output results
43
+ await write_to_sheet(spreadsheet_id=sid, data=summary.to_dict())
44
+ print(f"Wrote {len(summary)} rows")
45
+
46
+ Example (Parallel calls):
47
+ sf, ny = await asyncio.gather(get_weather(city="SF"), get_weather(city="NY"))
48
+ print(f"SF: {sf}, NY: {ny}")`;
49
+ // ============================================================================
50
+ // Schema
51
+ // ============================================================================
52
+ const CODE_PARAM_DESCRIPTION = `Python code that calls tools programmatically. Tools are available as async functions.
53
+
54
+ ${STATELESS_WARNING}
55
+
56
+ Your code is auto-wrapped in async context. Just write logic with await—no boilerplate needed.
57
+
58
+ ${EXAMPLES}
59
+
60
+ ${CORE_RULES}`;
61
+ export const ProgrammaticToolCallingSchema = {
62
+ type: 'object',
63
+ properties: {
64
+ code: {
65
+ type: 'string',
66
+ minLength: 1,
67
+ description: CODE_PARAM_DESCRIPTION,
68
+ },
69
+ timeout: {
70
+ type: 'integer',
71
+ minimum: 1000,
72
+ maximum: 300000,
73
+ default: DEFAULT_TIMEOUT,
74
+ description: 'Maximum execution time in milliseconds. Default: 60 seconds. Max: 5 minutes.',
75
+ },
76
+ },
77
+ required: ['code'],
78
+ };
79
+ export const ProgrammaticToolCallingName = Constants.PROGRAMMATIC_TOOL_CALLING;
80
+ export const ProgrammaticToolCallingDescription = `
81
+ Run tools via Python code. Auto-wrapped in async context—just use \`await\` directly.
82
+
83
+ ${STATELESS_WARNING}
84
+
85
+ ${CORE_RULES}
86
+ ${ADDITIONAL_RULES}
87
+
88
+ When to use: loops, conditionals, parallel (\`asyncio.gather\`), multi-step pipelines.
89
+
90
+ ${EXAMPLES}
91
+ `.trim();
92
+ export const ProgrammaticToolCallingDefinition = {
93
+ name: ProgrammaticToolCallingName,
94
+ description: ProgrammaticToolCallingDescription,
95
+ schema: ProgrammaticToolCallingSchema,
96
+ };
97
+ // ============================================================================
98
+ // Helper Functions
99
+ // ============================================================================
100
+ /** Python reserved keywords that get `_tool` suffix in Code API */
101
+ const PYTHON_KEYWORDS = new Set([
102
+ 'False',
103
+ 'None',
104
+ 'True',
105
+ 'and',
106
+ 'as',
107
+ 'assert',
108
+ 'async',
109
+ 'await',
110
+ 'break',
111
+ 'class',
112
+ 'continue',
113
+ 'def',
114
+ 'del',
115
+ 'elif',
116
+ 'else',
117
+ 'except',
118
+ 'finally',
119
+ 'for',
120
+ 'from',
121
+ 'global',
122
+ 'if',
123
+ 'import',
124
+ 'in',
125
+ 'is',
126
+ 'lambda',
127
+ 'nonlocal',
128
+ 'not',
129
+ 'or',
130
+ 'pass',
131
+ 'raise',
132
+ 'return',
133
+ 'try',
134
+ 'while',
135
+ 'with',
136
+ 'yield',
137
+ ]);
138
+ /**
139
+ * Normalizes a tool name to Python identifier format.
140
+ * Must match the Code API's `normalizePythonFunctionName` exactly:
141
+ * 1. Replace hyphens and spaces with underscores
142
+ * 2. Remove any other invalid characters
143
+ * 3. Prefix with underscore if starts with number
144
+ * 4. Append `_tool` if it's a Python keyword
145
+ * @param name - The tool name to normalize
146
+ * @returns Normalized Python-safe identifier
147
+ */
148
+ export function normalizeToPythonIdentifier(name) {
149
+ let normalized = name.replace(/[-\s]/g, '_');
150
+ normalized = normalized.replace(/[^a-zA-Z0-9_]/g, '');
151
+ if (/^[0-9]/.test(normalized)) {
152
+ normalized = '_' + normalized;
153
+ }
154
+ if (PYTHON_KEYWORDS.has(normalized)) {
155
+ normalized = normalized + '_tool';
156
+ }
157
+ return normalized;
158
+ }
159
+ /**
160
+ * Extracts tool names that are actually called in the Python code.
161
+ * Handles hyphen/underscore conversion since Python identifiers use underscores.
162
+ * @param code - The Python code to analyze
163
+ * @param toolNameMap - Map from normalized Python name to original tool name
164
+ * @returns Set of original tool names found in the code
165
+ */
166
+ export function extractUsedToolNames(code, toolNameMap) {
167
+ const usedTools = new Set();
168
+ for (const [pythonName, originalName] of toolNameMap) {
169
+ const escapedName = pythonName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
170
+ const pattern = new RegExp(`\\b${escapedName}\\s*\\(`, 'g');
171
+ if (pattern.test(code)) {
172
+ usedTools.add(originalName);
173
+ }
174
+ }
175
+ return usedTools;
176
+ }
177
+ /**
178
+ * Filters tool definitions to only include tools actually used in the code.
179
+ * Handles the hyphen-to-underscore conversion for Python compatibility.
180
+ * @param toolDefs - All available tool definitions
181
+ * @param code - The Python code to analyze
182
+ * @param debug - Enable debug logging
183
+ * @returns Filtered array of tool definitions
184
+ */
185
+ export function filterToolsByUsage(toolDefs, code, debug = false) {
186
+ const toolNameMap = new Map();
187
+ for (const tool of toolDefs) {
188
+ const pythonName = normalizeToPythonIdentifier(tool.name);
189
+ toolNameMap.set(pythonName, tool.name);
190
+ }
191
+ const usedToolNames = extractUsedToolNames(code, toolNameMap);
192
+ if (debug) {
193
+ // eslint-disable-next-line no-console
194
+ console.log(`[PTC Debug] Tool filtering: found ${usedToolNames.size}/${toolDefs.length} tools in code`);
195
+ if (usedToolNames.size > 0) {
196
+ // eslint-disable-next-line no-console
197
+ console.log(`[PTC Debug] Matched tools: ${Array.from(usedToolNames).join(', ')}`);
198
+ }
199
+ }
200
+ if (usedToolNames.size === 0) {
201
+ if (debug) {
202
+ // eslint-disable-next-line no-console
203
+ console.log('[PTC Debug] No tools detected in code - sending all tools as fallback');
204
+ }
205
+ return toolDefs;
206
+ }
207
+ return toolDefs.filter((tool) => usedToolNames.has(tool.name));
208
+ }
209
+ /**
210
+ * Fetches files from a previous session to make them available for the current execution.
211
+ * Files are returned as CodeEnvFile references to be included in the request.
212
+ * @param baseUrl - The base URL for the Code API
213
+ * @param apiKey - The API key for authentication
214
+ * @param sessionId - The session ID to fetch files from
215
+ * @param proxy - Optional HTTP proxy URL
216
+ * @returns Array of CodeEnvFile references, or empty array if fetch fails
217
+ */
218
+ export async function fetchSessionFiles(baseUrl, apiKey, sessionId, proxy) {
219
+ try {
220
+ const filesEndpoint = `${baseUrl}/files/${sessionId}?detail=full`;
221
+ const fetchOptions = {
222
+ method: 'GET',
223
+ headers: {
224
+ 'User-Agent': 'Illuma/1.0',
225
+ 'X-API-Key': apiKey,
226
+ },
227
+ };
228
+ if (proxy != null && proxy !== '') {
229
+ fetchOptions.agent = new HttpsProxyAgent(proxy);
230
+ }
231
+ const response = await fetch(filesEndpoint, fetchOptions);
232
+ if (!response.ok) {
233
+ throw new Error(`Failed to fetch files for session: ${response.status}`);
234
+ }
235
+ const files = await response.json();
236
+ if (!Array.isArray(files) || files.length === 0) {
237
+ return [];
238
+ }
239
+ return files.map((file) => {
240
+ // Extract the ID from the file name (part after session ID prefix and before extension)
241
+ const nameParts = file.name.split('/');
242
+ const id = nameParts.length > 1 ? nameParts[1].split('.')[0] : '';
243
+ return {
244
+ session_id: sessionId,
245
+ id,
246
+ name: file.metadata['original-filename'],
247
+ };
248
+ });
249
+ }
250
+ catch (error) {
251
+ // eslint-disable-next-line no-console
252
+ console.warn(`Failed to fetch files for session: ${sessionId}, ${error.message}`);
253
+ return [];
254
+ }
255
+ }
256
+ /**
257
+ * Makes an HTTP request to the Code API.
258
+ * @param endpoint - The API endpoint URL
259
+ * @param apiKey - The API key for authentication
260
+ * @param body - The request body
261
+ * @param proxy - Optional HTTP proxy URL
262
+ * @returns The parsed API response
263
+ */
264
+ export async function makeRequest(endpoint, apiKey, body, proxy) {
265
+ const fetchOptions = {
266
+ method: 'POST',
267
+ headers: {
268
+ 'Content-Type': 'application/json',
269
+ 'User-Agent': 'Illuma/1.0',
270
+ 'X-API-Key': apiKey,
271
+ },
272
+ body: JSON.stringify(body),
273
+ };
274
+ if (proxy != null && proxy !== '') {
275
+ fetchOptions.agent = new HttpsProxyAgent(proxy);
276
+ }
277
+ const response = await fetch(endpoint, fetchOptions);
278
+ if (!response.ok) {
279
+ const errorText = await response.text();
280
+ throw new Error(`HTTP error! status: ${response.status}, body: ${errorText}`);
281
+ }
282
+ return (await response.json());
283
+ }
284
+ /**
285
+ * Unwraps tool responses that may be formatted as tuples or content blocks.
286
+ * MCP tools return [content, artifacts], we need to extract the raw data.
287
+ * @param result - The raw result from tool.invoke()
288
+ * @param isMCPTool - Whether this is an MCP tool (has mcp property)
289
+ * @returns Unwrapped raw data (string, object, or parsed JSON)
290
+ */
291
+ export function unwrapToolResponse(result, isMCPTool) {
292
+ // Only unwrap if this is an MCP tool and result is a tuple
293
+ if (!isMCPTool) {
294
+ return result;
295
+ }
296
+ /**
297
+ * Checks if a value is a content block object (has type and text).
298
+ */
299
+ const isContentBlock = (value) => {
300
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
301
+ return false;
302
+ }
303
+ const obj = value;
304
+ return typeof obj.type === 'string';
305
+ };
306
+ /**
307
+ * Checks if an array is an array of content blocks.
308
+ */
309
+ const isContentBlockArray = (arr) => {
310
+ return arr.length > 0 && arr.every(isContentBlock);
311
+ };
312
+ /**
313
+ * Extracts text from a single content block object.
314
+ * Returns the text if it's a text block, otherwise returns null.
315
+ */
316
+ const extractTextFromBlock = (block) => {
317
+ if (typeof block !== 'object' || block === null)
318
+ return null;
319
+ const b = block;
320
+ if (b.type === 'text' && typeof b.text === 'string') {
321
+ return b.text;
322
+ }
323
+ return null;
324
+ };
325
+ /**
326
+ * Extracts text from content blocks (array or single object).
327
+ * Returns combined text or null if no text blocks found.
328
+ */
329
+ const extractTextFromContent = (content) => {
330
+ // Single content block object: { type: 'text', text: '...' }
331
+ if (typeof content === 'object' &&
332
+ content !== null &&
333
+ !Array.isArray(content)) {
334
+ const text = extractTextFromBlock(content);
335
+ if (text !== null)
336
+ return text;
337
+ }
338
+ // Array of content blocks: [{ type: 'text', text: '...' }, ...]
339
+ if (Array.isArray(content) && content.length > 0) {
340
+ const texts = content
341
+ .map(extractTextFromBlock)
342
+ .filter((t) => t !== null);
343
+ if (texts.length > 0) {
344
+ return texts.join('\n');
345
+ }
346
+ }
347
+ return null;
348
+ };
349
+ /**
350
+ * Tries to parse a string as JSON if it looks like JSON.
351
+ */
352
+ const maybeParseJSON = (str) => {
353
+ const trimmed = str.trim();
354
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
355
+ try {
356
+ return JSON.parse(trimmed);
357
+ }
358
+ catch {
359
+ return str;
360
+ }
361
+ }
362
+ return str;
363
+ };
364
+ // Handle array of content blocks at top level FIRST
365
+ // (before checking for tuple, since both are arrays)
366
+ if (Array.isArray(result) && isContentBlockArray(result)) {
367
+ const extractedText = extractTextFromContent(result);
368
+ if (extractedText !== null) {
369
+ return maybeParseJSON(extractedText);
370
+ }
371
+ }
372
+ // Check if result is a tuple/array with [content, artifacts]
373
+ if (Array.isArray(result) && result.length >= 1) {
374
+ const [content] = result;
375
+ // If first element is a string, return it (possibly parsed as JSON)
376
+ if (typeof content === 'string') {
377
+ return maybeParseJSON(content);
378
+ }
379
+ // Try to extract text from content blocks
380
+ const extractedText = extractTextFromContent(content);
381
+ if (extractedText !== null) {
382
+ return maybeParseJSON(extractedText);
383
+ }
384
+ // If first element is an object (but not a text block), return it
385
+ if (typeof content === 'object' && content !== null) {
386
+ return content;
387
+ }
388
+ }
389
+ // Handle single content block object at top level (not in tuple)
390
+ const extractedText = extractTextFromContent(result);
391
+ if (extractedText !== null) {
392
+ return maybeParseJSON(extractedText);
393
+ }
394
+ // Not a formatted response, return as-is
395
+ return result;
396
+ }
397
+ /**
398
+ * Executes tools in parallel when requested by the API.
399
+ * Uses Promise.all for parallel execution, catching individual errors.
400
+ * Unwraps formatted responses (e.g., MCP tool tuples) to raw data.
401
+ * @param toolCalls - Array of tool calls from the API
402
+ * @param toolMap - Map of tool names to executable tools
403
+ * @returns Array of tool results
404
+ */
405
+ export async function executeTools(toolCalls, toolMap) {
406
+ const executions = toolCalls.map(async (call) => {
407
+ const tool = toolMap.get(call.name);
408
+ if (!tool) {
409
+ return {
410
+ call_id: call.id,
411
+ result: null,
412
+ is_error: true,
413
+ error_message: `Tool '${call.name}' not found. Available tools: ${Array.from(toolMap.keys()).join(', ')}`,
414
+ };
415
+ }
416
+ try {
417
+ const result = await tool.invoke(call.input, {
418
+ metadata: { [Constants.PROGRAMMATIC_TOOL_CALLING]: true },
419
+ });
420
+ const isMCPTool = tool.mcp === true;
421
+ const unwrappedResult = unwrapToolResponse(result, isMCPTool);
422
+ return {
423
+ call_id: call.id,
424
+ result: unwrappedResult,
425
+ is_error: false,
426
+ };
427
+ }
428
+ catch (error) {
429
+ return {
430
+ call_id: call.id,
431
+ result: null,
432
+ is_error: true,
433
+ error_message: error.message || 'Tool execution failed',
434
+ };
435
+ }
436
+ });
437
+ return await Promise.all(executions);
438
+ }
439
+ /**
440
+ * Formats the completed response for the agent.
441
+ * @param response - The completed API response
442
+ * @returns Tuple of [formatted string, artifact]
443
+ */
444
+ export function formatCompletedResponse(response) {
445
+ let formatted = '';
446
+ if (response.stdout != null && response.stdout !== '') {
447
+ formatted += `stdout:\n${response.stdout}\n`;
448
+ }
449
+ else {
450
+ formatted += emptyOutputMessage;
451
+ }
452
+ if (response.stderr != null && response.stderr !== '') {
453
+ formatted += `stderr:\n${response.stderr}\n`;
454
+ }
455
+ if (response.files && response.files.length > 0) {
456
+ formatted += 'Generated files:\n';
457
+ const fileCount = response.files.length;
458
+ for (let i = 0; i < fileCount; i++) {
459
+ const file = response.files[i];
460
+ const isImage = imageExtRegex.test(file.name);
461
+ formatted += `- /mnt/data/${file.name} | ${isImage ? imageMessage : otherMessage}`;
462
+ if (i < fileCount - 1) {
463
+ formatted += fileCount <= 3 ? ', ' : ',\n';
464
+ }
465
+ }
466
+ formatted += `\n\n${accessMessage}`;
467
+ }
468
+ return [
469
+ formatted.trim(),
470
+ {
471
+ session_id: response.session_id,
472
+ files: response.files,
473
+ },
474
+ ];
475
+ }
476
+ // ============================================================================
477
+ // Tool Factory
478
+ // ============================================================================
479
+ /**
480
+ * Creates a Programmatic Tool Calling tool for complex multi-tool workflows.
481
+ *
482
+ * This tool enables AI agents to write Python code that orchestrates multiple
483
+ * tool calls programmatically, reducing LLM round-trips and token usage.
484
+ *
485
+ * The tool map must be provided at runtime via config.configurable.toolMap.
486
+ *
487
+ * @param params - Configuration parameters (apiKey, baseUrl, maxRoundTrips, proxy)
488
+ * @returns A LangChain DynamicStructuredTool for programmatic tool calling
489
+ *
490
+ * @example
491
+ * const ptcTool = createProgrammaticToolCallingTool({
492
+ * apiKey: process.env.CODE_API_KEY,
493
+ * maxRoundTrips: 20
494
+ * });
495
+ *
496
+ * const [output, artifact] = await ptcTool.invoke(
497
+ * { code, tools },
498
+ * { configurable: { toolMap } }
499
+ * );
500
+ */
501
+ export function createProgrammaticToolCallingTool(initParams = {}) {
502
+ const apiKey = initParams[EnvVar.CODE_API_KEY] ??
503
+ initParams.apiKey ??
504
+ getEnvironmentVariable(EnvVar.CODE_API_KEY) ??
505
+ '';
506
+ if (!apiKey) {
507
+ throw new Error('No API key provided for programmatic tool calling. ' +
508
+ 'Set CODE_API_KEY environment variable or pass apiKey in initParams.');
509
+ }
510
+ const baseUrl = initParams.baseUrl ?? getCodeBaseURL();
511
+ const maxRoundTrips = initParams.maxRoundTrips ?? DEFAULT_MAX_ROUND_TRIPS;
512
+ const proxy = initParams.proxy ?? process.env.PROXY;
513
+ const debug = initParams.debug ?? process.env.PTC_DEBUG === 'true';
514
+ const EXEC_ENDPOINT = `${baseUrl}/exec/programmatic`;
515
+ return tool(async (rawParams, config) => {
516
+ const params = rawParams;
517
+ const { code, timeout = DEFAULT_TIMEOUT } = params;
518
+ // Extra params injected by ToolNode (follows web_search pattern)
519
+ const { toolMap, toolDefs, session_id, _injected_files } = (config.toolCall ?? {});
520
+ if (toolMap == null || toolMap.size === 0) {
521
+ throw new Error('No toolMap provided. ' +
522
+ 'ToolNode should inject this from AgentContext when invoked through the graph.');
523
+ }
524
+ if (toolDefs == null || toolDefs.length === 0) {
525
+ throw new Error('No tool definitions provided. ' +
526
+ 'Either pass tools in the input or ensure ToolNode injects toolDefs.');
527
+ }
528
+ let roundTrip = 0;
529
+ try {
530
+ // ====================================================================
531
+ // Phase 1: Filter tools and make initial request
532
+ // ====================================================================
533
+ const effectiveTools = filterToolsByUsage(toolDefs, code, debug);
534
+ if (debug) {
535
+ // eslint-disable-next-line no-console
536
+ console.log(`[PTC Debug] Sending ${effectiveTools.length} tools to API ` +
537
+ `(filtered from ${toolDefs.length})`);
538
+ }
539
+ /**
540
+ * File injection priority:
541
+ * 1. Use _injected_files from ToolNode (avoids /files endpoint race condition)
542
+ * 2. Fall back to fetching from /files endpoint if session_id provided but no injected files
543
+ */
544
+ let files;
545
+ if (_injected_files && _injected_files.length > 0) {
546
+ files = _injected_files;
547
+ }
548
+ else if (session_id != null && session_id.length > 0) {
549
+ files = await fetchSessionFiles(baseUrl, apiKey, session_id, proxy);
550
+ }
551
+ let response = await makeRequest(EXEC_ENDPOINT, apiKey, {
552
+ code,
553
+ tools: effectiveTools,
554
+ session_id,
555
+ timeout,
556
+ ...(files && files.length > 0 ? { files } : {}),
557
+ }, proxy);
558
+ // ====================================================================
559
+ // Phase 2: Handle response loop
560
+ // ====================================================================
561
+ while (response.status === 'tool_call_required') {
562
+ roundTrip++;
563
+ if (roundTrip > maxRoundTrips) {
564
+ throw new Error(`Exceeded maximum round trips (${maxRoundTrips}). ` +
565
+ 'This may indicate an infinite loop, excessive tool calls, ' +
566
+ 'or a logic error in your code.');
567
+ }
568
+ if (debug) {
569
+ // eslint-disable-next-line no-console
570
+ console.log(`[PTC Debug] Round trip ${roundTrip}: ${response.tool_calls?.length ?? 0} tool(s) to execute`);
571
+ }
572
+ const toolResults = await executeTools(response.tool_calls ?? [], toolMap);
573
+ response = await makeRequest(EXEC_ENDPOINT, apiKey, {
574
+ continuation_token: response.continuation_token,
575
+ tool_results: toolResults,
576
+ }, proxy);
577
+ }
578
+ // ====================================================================
579
+ // Phase 3: Handle final state
580
+ // ====================================================================
581
+ if (response.status === 'completed') {
582
+ return formatCompletedResponse(response);
583
+ }
584
+ if (response.status === 'error') {
585
+ throw new Error(`Execution error: ${response.error}` +
586
+ (response.stderr != null && response.stderr !== ''
587
+ ? `\n\nStderr:\n${response.stderr}`
588
+ : ''));
589
+ }
590
+ throw new Error(`Unexpected response status: ${response.status}`);
591
+ }
592
+ catch (error) {
593
+ throw new Error(`Programmatic execution failed: ${error.message}`);
594
+ }
595
+ }, {
596
+ name: Constants.PROGRAMMATIC_TOOL_CALLING,
597
+ description: ProgrammaticToolCallingDescription,
598
+ schema: ProgrammaticToolCallingSchema,
599
+ responseFormat: Constants.CONTENT_AND_ARTIFACT,
600
+ });
601
+ }
602
+ //# sourceMappingURL=ProgrammaticToolCalling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgrammaticToolCalling.js","sourceRoot":"","sources":["ProgrammaticToolCalling.ts"],"names":[],"mappings":"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"}