@illuma-ai/agents 1.4.0-alpha.6 → 1.5.0

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 (800) hide show
  1. package/README.md +62 -0
  2. package/dist/cjs/agents/AgentContext.cjs +274 -67
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/enum.cjs +44 -13
  5. package/dist/cjs/common/enum.cjs.map +1 -1
  6. package/dist/cjs/graphs/Graph.cjs +182 -5
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  8. package/dist/cjs/graphs/MultiAgentGraph.cjs +152 -1167
  9. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  10. package/dist/cjs/hooks/HookRegistry.cjs +162 -0
  11. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
  12. package/dist/cjs/hooks/executeHooks.cjs +276 -0
  13. package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
  14. package/dist/cjs/hooks/matchers.cjs +256 -0
  15. package/dist/cjs/hooks/matchers.cjs.map +1 -0
  16. package/dist/cjs/hooks/types.cjs +27 -0
  17. package/dist/cjs/hooks/types.cjs.map +1 -0
  18. package/dist/cjs/langchain/google-common.cjs +3 -0
  19. package/dist/cjs/langchain/google-common.cjs.map +1 -0
  20. package/dist/cjs/langchain/index.cjs +86 -0
  21. package/dist/cjs/langchain/index.cjs.map +1 -0
  22. package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
  23. package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
  24. package/dist/cjs/langchain/messages/tool.cjs +3 -0
  25. package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
  26. package/dist/cjs/langchain/messages.cjs +51 -0
  27. package/dist/cjs/langchain/messages.cjs.map +1 -0
  28. package/dist/cjs/langchain/openai.cjs +3 -0
  29. package/dist/cjs/langchain/openai.cjs.map +1 -0
  30. package/dist/cjs/langchain/prompts.cjs +11 -0
  31. package/dist/cjs/langchain/prompts.cjs.map +1 -0
  32. package/dist/cjs/langchain/runnables.cjs +19 -0
  33. package/dist/cjs/langchain/runnables.cjs.map +1 -0
  34. package/dist/cjs/langchain/tools.cjs +23 -0
  35. package/dist/cjs/langchain/tools.cjs.map +1 -0
  36. package/dist/cjs/langchain/utils/env.cjs +11 -0
  37. package/dist/cjs/langchain/utils/env.cjs.map +1 -0
  38. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
  39. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  40. package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
  41. package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
  42. package/dist/cjs/llm/bedrock/index.cjs +61 -33
  43. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  44. package/dist/cjs/llm/openai/index.cjs +0 -3
  45. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  46. package/dist/cjs/llm/openai/utils/index.cjs +27 -10
  47. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  48. package/dist/cjs/main.cjs +178 -127
  49. package/dist/cjs/main.cjs.map +1 -1
  50. package/dist/cjs/messages/cache.cjs +89 -0
  51. package/dist/cjs/messages/cache.cjs.map +1 -1
  52. package/dist/cjs/messages/contextPruning.cjs +156 -0
  53. package/dist/cjs/messages/contextPruning.cjs.map +1 -0
  54. package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
  55. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
  56. package/dist/cjs/messages/format.cjs +144 -20
  57. package/dist/cjs/messages/format.cjs.map +1 -1
  58. package/dist/cjs/messages/prune.cjs +505 -4
  59. package/dist/cjs/messages/prune.cjs.map +1 -1
  60. package/dist/cjs/run.cjs +141 -1
  61. package/dist/cjs/run.cjs.map +1 -1
  62. package/dist/cjs/tools/BashExecutor.cjs +235 -0
  63. package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
  64. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
  65. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
  66. package/dist/cjs/tools/CodeExecutor.cjs +44 -47
  67. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  68. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
  69. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  70. package/dist/cjs/tools/ReadFile.cjs +44 -0
  71. package/dist/cjs/tools/ReadFile.cjs.map +1 -0
  72. package/dist/cjs/tools/SkillTool.cjs +51 -0
  73. package/dist/cjs/tools/SkillTool.cjs.map +1 -0
  74. package/dist/cjs/tools/SubagentTool.cjs +93 -0
  75. package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
  76. package/dist/cjs/tools/ToolNode.cjs +450 -24
  77. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  78. package/dist/cjs/tools/search/search.cjs +11 -3
  79. package/dist/cjs/tools/search/search.cjs.map +1 -1
  80. package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
  81. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
  82. package/dist/cjs/tools/search/tavily-search.cjs +372 -0
  83. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
  84. package/dist/cjs/tools/search/tool.cjs +28 -4
  85. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  86. package/dist/cjs/tools/search/utils.cjs +10 -3
  87. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  88. package/dist/cjs/tools/skillCatalog.cjs +84 -0
  89. package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
  90. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
  91. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
  92. package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
  93. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
  94. package/dist/cjs/types/agent-cache.cjs +53 -0
  95. package/dist/cjs/types/agent-cache.cjs.map +1 -0
  96. package/dist/cjs/types/graph.cjs.map +1 -1
  97. package/dist/cjs/utils/truncation.cjs +135 -0
  98. package/dist/cjs/utils/truncation.cjs.map +1 -0
  99. package/dist/esm/agents/AgentContext.mjs +274 -67
  100. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  101. package/dist/esm/common/enum.mjs +44 -12
  102. package/dist/esm/common/enum.mjs.map +1 -1
  103. package/dist/esm/graphs/Graph.mjs +182 -5
  104. package/dist/esm/graphs/Graph.mjs.map +1 -1
  105. package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
  106. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  107. package/dist/esm/hooks/HookRegistry.mjs +160 -0
  108. package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
  109. package/dist/esm/hooks/executeHooks.mjs +273 -0
  110. package/dist/esm/hooks/executeHooks.mjs.map +1 -0
  111. package/dist/esm/hooks/matchers.mjs +251 -0
  112. package/dist/esm/hooks/matchers.mjs.map +1 -0
  113. package/dist/esm/hooks/types.mjs +25 -0
  114. package/dist/esm/hooks/types.mjs.map +1 -0
  115. package/dist/esm/langchain/google-common.mjs +2 -0
  116. package/dist/esm/langchain/google-common.mjs.map +1 -0
  117. package/dist/esm/langchain/index.mjs +5 -0
  118. package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
  119. package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
  120. package/dist/esm/langchain/messages/tool.mjs +2 -0
  121. package/dist/esm/langchain/messages/tool.mjs.map +1 -0
  122. package/dist/esm/langchain/messages.mjs +2 -0
  123. package/dist/esm/langchain/messages.mjs.map +1 -0
  124. package/dist/esm/langchain/openai.mjs +2 -0
  125. package/dist/esm/langchain/openai.mjs.map +1 -0
  126. package/dist/esm/langchain/prompts.mjs +2 -0
  127. package/dist/esm/langchain/prompts.mjs.map +1 -0
  128. package/dist/esm/langchain/runnables.mjs +2 -0
  129. package/dist/esm/langchain/runnables.mjs.map +1 -0
  130. package/dist/esm/langchain/tools.mjs +2 -0
  131. package/dist/esm/langchain/tools.mjs.map +1 -0
  132. package/dist/esm/langchain/utils/env.mjs +2 -0
  133. package/dist/esm/langchain/utils/env.mjs.map +1 -0
  134. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
  135. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  136. package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
  137. package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
  138. package/dist/esm/llm/bedrock/index.mjs +61 -34
  139. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  140. package/dist/esm/llm/openai/index.mjs +0 -3
  141. package/dist/esm/llm/openai/index.mjs.map +1 -1
  142. package/dist/esm/llm/openai/utils/index.mjs +27 -10
  143. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  144. package/dist/esm/main.mjs +21 -27
  145. package/dist/esm/main.mjs.map +1 -1
  146. package/dist/esm/messages/cache.mjs +89 -0
  147. package/dist/esm/messages/cache.mjs.map +1 -1
  148. package/dist/esm/messages/contextPruning.mjs +154 -0
  149. package/dist/esm/messages/contextPruning.mjs.map +1 -0
  150. package/dist/esm/messages/contextPruningSettings.mjs +50 -0
  151. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
  152. package/dist/esm/messages/format.mjs +136 -12
  153. package/dist/esm/messages/format.mjs.map +1 -1
  154. package/dist/esm/messages/prune.mjs +504 -7
  155. package/dist/esm/messages/prune.mjs.map +1 -1
  156. package/dist/esm/run.mjs +141 -1
  157. package/dist/esm/run.mjs.map +1 -1
  158. package/dist/esm/tools/BashExecutor.mjs +227 -0
  159. package/dist/esm/tools/BashExecutor.mjs.map +1 -0
  160. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
  161. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
  162. package/dist/esm/tools/CodeExecutor.mjs +44 -48
  163. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  164. package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
  165. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  166. package/dist/esm/tools/ReadFile.mjs +39 -0
  167. package/dist/esm/tools/ReadFile.mjs.map +1 -0
  168. package/dist/esm/tools/SkillTool.mjs +46 -0
  169. package/dist/esm/tools/SkillTool.mjs.map +1 -0
  170. package/dist/esm/tools/SubagentTool.mjs +86 -0
  171. package/dist/esm/tools/SubagentTool.mjs.map +1 -0
  172. package/dist/esm/tools/ToolNode.mjs +452 -26
  173. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  174. package/dist/esm/tools/search/search.mjs +11 -3
  175. package/dist/esm/tools/search/search.mjs.map +1 -1
  176. package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
  177. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
  178. package/dist/esm/tools/search/tavily-search.mjs +370 -0
  179. package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
  180. package/dist/esm/tools/search/tool.mjs +28 -4
  181. package/dist/esm/tools/search/tool.mjs.map +1 -1
  182. package/dist/esm/tools/search/utils.mjs +10 -3
  183. package/dist/esm/tools/search/utils.mjs.map +1 -1
  184. package/dist/esm/tools/skillCatalog.mjs +82 -0
  185. package/dist/esm/tools/skillCatalog.mjs.map +1 -0
  186. package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
  187. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
  188. package/dist/esm/tools/toolOutputReferences.mjs +662 -0
  189. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
  190. package/dist/esm/types/agent-cache.mjs +51 -0
  191. package/dist/esm/types/agent-cache.mjs.map +1 -0
  192. package/dist/esm/types/graph.mjs.map +1 -1
  193. package/dist/esm/utils/truncation.mjs +128 -0
  194. package/dist/esm/utils/truncation.mjs.map +1 -0
  195. package/dist/types/agents/AgentContext.d.ts +101 -8
  196. package/dist/types/common/enum.d.ts +39 -12
  197. package/dist/types/common/index.d.ts +0 -1
  198. package/dist/types/graphs/Graph.d.ts +43 -0
  199. package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
  200. package/dist/types/graphs/index.d.ts +0 -1
  201. package/dist/types/hooks/HookRegistry.d.ts +56 -0
  202. package/dist/types/hooks/executeHooks.d.ts +79 -0
  203. package/dist/types/hooks/index.d.ts +6 -0
  204. package/dist/types/hooks/matchers.d.ts +95 -0
  205. package/dist/types/hooks/types.d.ts +320 -0
  206. package/dist/types/index.d.ts +9 -9
  207. package/dist/types/langchain/google-common.d.ts +1 -0
  208. package/dist/types/langchain/index.d.ts +8 -0
  209. package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
  210. package/dist/types/langchain/messages/tool.d.ts +1 -0
  211. package/dist/types/langchain/messages.d.ts +2 -0
  212. package/dist/types/langchain/openai.d.ts +1 -0
  213. package/dist/types/langchain/prompts.d.ts +1 -0
  214. package/dist/types/langchain/runnables.d.ts +2 -0
  215. package/dist/types/langchain/tools.d.ts +2 -0
  216. package/dist/types/langchain/utils/env.d.ts +1 -0
  217. package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
  218. package/dist/types/llm/bedrock/index.d.ts +54 -1
  219. package/dist/types/messages/contextPruning.d.ts +42 -0
  220. package/dist/types/messages/contextPruningSettings.d.ts +44 -0
  221. package/dist/types/messages/format.d.ts +9 -1
  222. package/dist/types/messages/index.d.ts +2 -0
  223. package/dist/types/messages/prune.d.ts +91 -1
  224. package/dist/types/run.d.ts +2 -0
  225. package/dist/types/tools/BashExecutor.d.ts +76 -0
  226. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
  227. package/dist/types/tools/CodeExecutor.d.ts +8 -26
  228. package/dist/types/tools/ReadFile.d.ts +28 -0
  229. package/dist/types/tools/SkillTool.d.ts +40 -0
  230. package/dist/types/tools/SubagentTool.d.ts +36 -0
  231. package/dist/types/tools/ToolNode.d.ts +77 -5
  232. package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
  233. package/dist/types/tools/search/tavily-search.d.ts +4 -0
  234. package/dist/types/tools/search/types.d.ts +99 -5
  235. package/dist/types/tools/search/utils.d.ts +2 -2
  236. package/dist/types/tools/skillCatalog.d.ts +19 -0
  237. package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
  238. package/dist/types/tools/subagent/index.d.ts +2 -0
  239. package/dist/types/tools/subagent/types.d.ts +84 -0
  240. package/dist/types/tools/toolOutputReferences.d.ts +236 -0
  241. package/dist/types/types/agent-cache.d.ts +70 -0
  242. package/dist/types/types/graph.d.ts +162 -22
  243. package/dist/types/types/index.d.ts +3 -0
  244. package/dist/types/types/messages.d.ts +26 -0
  245. package/dist/types/types/run.d.ts +22 -0
  246. package/dist/types/types/skill.d.ts +9 -0
  247. package/dist/types/types/tools.d.ts +111 -0
  248. package/dist/types/utils/index.d.ts +1 -3
  249. package/dist/types/utils/truncation.d.ts +70 -0
  250. package/package.json +57 -17
  251. package/src/agents/AgentContext.js.map +1 -0
  252. package/src/agents/AgentContext.test.js.map +1 -0
  253. package/src/agents/AgentContext.ts +321 -78
  254. package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
  255. package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +264 -0
  256. package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
  257. package/src/agents/__tests__/AgentContext.test.js.map +1 -0
  258. package/src/agents/__tests__/AgentContext.test.ts +632 -0
  259. package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
  260. package/src/common/__tests__/enum.test.ts +7 -17
  261. package/src/common/enum.js.map +1 -0
  262. package/src/common/enum.ts +43 -12
  263. package/src/common/index.js.map +1 -0
  264. package/src/common/index.ts +0 -1
  265. package/src/events.js.map +1 -0
  266. package/src/graphs/Graph.js.map +1 -0
  267. package/src/graphs/Graph.ts +222 -2
  268. package/src/graphs/MultiAgentGraph.js.map +1 -0
  269. package/src/graphs/MultiAgentGraph.ts +154 -1466
  270. package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
  271. package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
  272. package/src/graphs/__tests__/structured-output.test.js.map +1 -0
  273. package/src/graphs/contextManagement.e2e.test.js.map +1 -0
  274. package/src/graphs/contextManagement.test.js.map +1 -0
  275. package/src/graphs/handoffValidation.test.js.map +1 -0
  276. package/src/graphs/index.js.map +1 -0
  277. package/src/graphs/index.ts +0 -1
  278. package/src/hooks/HookRegistry.ts +208 -0
  279. package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
  280. package/src/hooks/__tests__/compactHooks.test.ts +214 -0
  281. package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
  282. package/src/hooks/__tests__/integration.test.ts +337 -0
  283. package/src/hooks/__tests__/matchers.test.ts +238 -0
  284. package/src/hooks/__tests__/toolHooks.test.ts +665 -0
  285. package/src/hooks/executeHooks.ts +375 -0
  286. package/src/hooks/index.ts +57 -0
  287. package/src/hooks/matchers.ts +280 -0
  288. package/src/hooks/types.ts +404 -0
  289. package/src/index.js.map +1 -0
  290. package/src/index.ts +15 -24
  291. package/src/instrumentation.js.map +1 -0
  292. package/src/langchain/google-common.ts +1 -0
  293. package/src/langchain/index.ts +8 -0
  294. package/src/langchain/language_models/chat_models.ts +1 -0
  295. package/src/langchain/messages/tool.ts +5 -0
  296. package/src/langchain/messages.ts +21 -0
  297. package/src/langchain/openai.ts +1 -0
  298. package/src/langchain/prompts.ts +1 -0
  299. package/src/langchain/runnables.ts +7 -0
  300. package/src/langchain/tools.ts +8 -0
  301. package/src/langchain/utils/env.ts +1 -0
  302. package/src/llm/anthropic/index.js.map +1 -0
  303. package/src/llm/anthropic/types.js.map +1 -0
  304. package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
  305. package/src/llm/anthropic/utils/message_inputs.ts +10 -1
  306. package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
  307. package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
  308. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
  309. package/src/llm/anthropic/utils/tools.js.map +1 -0
  310. package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -0
  311. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
  312. package/src/llm/bedrock/cacheSupport.test.ts +99 -0
  313. package/src/llm/bedrock/cacheSupport.ts +53 -0
  314. package/src/llm/bedrock/index.js.map +1 -0
  315. package/src/llm/bedrock/index.ts +116 -41
  316. package/src/llm/bedrock/types.js.map +1 -0
  317. package/src/llm/bedrock/utils/index.js.map +1 -0
  318. package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
  319. package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
  320. package/src/llm/fake.js.map +1 -0
  321. package/src/llm/google/index.js.map +1 -0
  322. package/src/llm/google/types.js.map +1 -0
  323. package/src/llm/google/utils/common.js.map +1 -0
  324. package/src/llm/google/utils/tools.js.map +1 -0
  325. package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
  326. package/src/llm/openai/index.js.map +1 -0
  327. package/src/llm/openai/types.js.map +1 -0
  328. package/src/llm/openai/utils/index.js.map +1 -0
  329. package/src/llm/openai/utils/index.ts +31 -14
  330. package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
  331. package/src/llm/openrouter/index.js.map +1 -0
  332. package/src/llm/openrouter/reasoning.test.js.map +1 -0
  333. package/src/llm/providers.js.map +1 -0
  334. package/src/llm/text.js.map +1 -0
  335. package/src/llm/vertexai/index.js.map +1 -0
  336. package/src/messages/__tests__/contextPruning.test.ts +228 -0
  337. package/src/messages/__tests__/tools.test.js.map +1 -0
  338. package/src/messages/cache.js.map +1 -0
  339. package/src/messages/cache.test.js.map +1 -0
  340. package/src/messages/cache.test.ts +62 -24
  341. package/src/messages/cache.ts +112 -0
  342. package/src/messages/content.js.map +1 -0
  343. package/src/messages/content.test.js.map +1 -0
  344. package/src/messages/contextPruning.ts +191 -0
  345. package/src/messages/contextPruningSettings.ts +90 -0
  346. package/src/messages/core.js.map +1 -0
  347. package/src/messages/ensureThinkingBlock.test.js.map +1 -0
  348. package/src/messages/format.js.map +1 -0
  349. package/src/messages/format.ts +164 -12
  350. package/src/messages/formatAgentMessages.skills.test.ts +413 -0
  351. package/src/messages/formatAgentMessages.test.js.map +1 -0
  352. package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
  353. package/src/messages/formatMessage.test.js.map +1 -0
  354. package/src/messages/ids.js.map +1 -0
  355. package/src/messages/index.js.map +1 -0
  356. package/src/messages/index.ts +2 -0
  357. package/src/messages/labelContentByAgent.test.js.map +1 -0
  358. package/src/messages/prune.js.map +1 -0
  359. package/src/messages/prune.ts +661 -4
  360. package/src/messages/reducer.js.map +1 -0
  361. package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
  362. package/src/messages/summarize.js.map +1 -0
  363. package/src/messages/summarize.test.js.map +1 -0
  364. package/src/messages/tools.js.map +1 -0
  365. package/src/mockStream.js.map +1 -0
  366. package/src/prompts/collab.js.map +1 -0
  367. package/src/prompts/index.js.map +1 -0
  368. package/src/prompts/taskmanager.js.map +1 -0
  369. package/src/run.js.map +1 -0
  370. package/src/run.ts +155 -1
  371. package/src/schemas/index.js.map +1 -0
  372. package/src/schemas/schema-preparation.test.js.map +1 -0
  373. package/src/schemas/validate.js.map +1 -0
  374. package/src/schemas/validate.test.js.map +1 -0
  375. package/src/scripts/abort.js.map +1 -0
  376. package/src/scripts/ant_web_search.js.map +1 -0
  377. package/src/scripts/ant_web_search_edge_case.js.map +1 -0
  378. package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
  379. package/src/scripts/args.js.map +1 -0
  380. package/src/scripts/bedrock-cache-debug.js.map +1 -0
  381. package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
  382. package/src/scripts/bedrock-merge-test.js.map +1 -0
  383. package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
  384. package/src/scripts/caching.js.map +1 -0
  385. package/src/scripts/cli.js.map +1 -0
  386. package/src/scripts/cli2.js.map +1 -0
  387. package/src/scripts/cli3.js.map +1 -0
  388. package/src/scripts/cli4.js.map +1 -0
  389. package/src/scripts/cli5.js.map +1 -0
  390. package/src/scripts/code_exec.js.map +1 -0
  391. package/src/scripts/code_exec_files.js.map +1 -0
  392. package/src/scripts/code_exec_multi_session.js.map +1 -0
  393. package/src/scripts/code_exec_ptc.js.map +1 -0
  394. package/src/scripts/code_exec_session.js.map +1 -0
  395. package/src/scripts/code_exec_simple.js.map +1 -0
  396. package/src/scripts/content.js.map +1 -0
  397. package/src/scripts/empty_input.js.map +1 -0
  398. package/src/scripts/handoff-test.js.map +1 -0
  399. package/src/scripts/image.js.map +1 -0
  400. package/src/scripts/memory.js.map +1 -0
  401. package/src/scripts/multi-agent-chain.js.map +1 -0
  402. package/src/scripts/multi-agent-chain.ts +2 -2
  403. package/src/scripts/multi-agent-conditional.js.map +1 -0
  404. package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
  405. package/src/scripts/multi-agent-document-review-chain.ts +2 -2
  406. package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
  407. package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
  408. package/src/scripts/multi-agent-parallel-start.js.map +1 -0
  409. package/src/scripts/multi-agent-parallel.js.map +1 -0
  410. package/src/scripts/multi-agent-parallel.ts +3 -3
  411. package/src/scripts/multi-agent-sequence.js.map +1 -0
  412. package/src/scripts/multi-agent-sequence.ts +3 -3
  413. package/src/scripts/multi-agent-subagent.ts +246 -0
  414. package/src/scripts/multi-agent-supervisor.js.map +1 -0
  415. package/src/scripts/multi-agent-supervisor.ts +5 -5
  416. package/src/scripts/multi-agent-test.js.map +1 -0
  417. package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
  418. package/src/scripts/parallel-full-metadata-test.js.map +1 -0
  419. package/src/scripts/parallel-tools-test.js.map +1 -0
  420. package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
  421. package/src/scripts/programmatic_exec.js.map +1 -0
  422. package/src/scripts/programmatic_exec_agent.js.map +1 -0
  423. package/src/scripts/search.js.map +1 -0
  424. package/src/scripts/sequential-full-metadata-test.js.map +1 -0
  425. package/src/scripts/sequential-full-metadata-test.ts +2 -2
  426. package/src/scripts/simple.js.map +1 -0
  427. package/src/scripts/single-agent-metadata-test.js.map +1 -0
  428. package/src/scripts/stream.js.map +1 -0
  429. package/src/scripts/subagent-event-driven-debug.ts +190 -0
  430. package/src/scripts/subagent-tools-debug.ts +160 -0
  431. package/src/scripts/test-custom-prompt-key.js.map +1 -0
  432. package/src/scripts/test-custom-prompt-key.ts +3 -3
  433. package/src/scripts/test-handoff-input.js.map +1 -0
  434. package/src/scripts/test-handoff-input.ts +1 -1
  435. package/src/scripts/test-handoff-preamble.js.map +1 -0
  436. package/src/scripts/test-handoff-steering.js.map +1 -0
  437. package/src/scripts/test-handoff-steering.ts +3 -3
  438. package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
  439. package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
  440. package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
  441. package/src/scripts/test-parallel-agent-labeling.ts +3 -3
  442. package/src/scripts/test-parallel-handoffs.js.map +1 -0
  443. package/src/scripts/test-parallel-handoffs.ts +2 -2
  444. package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
  445. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
  446. package/src/scripts/test-thinking-handoff.js.map +1 -0
  447. package/src/scripts/test-thinking-handoff.ts +1 -1
  448. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
  449. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
  450. package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
  451. package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
  452. package/src/scripts/test-tools-before-handoff.js.map +1 -0
  453. package/src/scripts/test-tools-before-handoff.ts +1 -1
  454. package/src/scripts/test_code_api.js.map +1 -0
  455. package/src/scripts/thinking-bedrock.js.map +1 -0
  456. package/src/scripts/thinking-vertexai.js.map +1 -0
  457. package/src/scripts/thinking.js.map +1 -0
  458. package/src/scripts/tool_search.js.map +1 -0
  459. package/src/scripts/tools.js.map +1 -0
  460. package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
  461. package/src/specs/agent-handoffs.test.js.map +1 -0
  462. package/src/specs/agent-handoffs.test.ts +26 -483
  463. package/src/specs/anthropic.simple.test.js.map +1 -0
  464. package/src/specs/anthropic.simple.test.ts +61 -0
  465. package/src/specs/azure.simple.test.js.map +1 -0
  466. package/src/specs/cache.simple.test.js.map +1 -0
  467. package/src/specs/custom-event-await.test.js.map +1 -0
  468. package/src/specs/deepseek.simple.test.js.map +1 -0
  469. package/src/specs/emergency-prune.test.js.map +1 -0
  470. package/src/specs/moonshot.simple.test.js.map +1 -0
  471. package/src/specs/multi-agent-summarization.test.ts +396 -0
  472. package/src/specs/observability.integration.test.js.map +1 -0
  473. package/src/specs/openai.simple.test.js.map +1 -0
  474. package/src/specs/openrouter.simple.test.js.map +1 -0
  475. package/src/specs/prune.orphans.test.ts +248 -0
  476. package/src/specs/prune.test.js.map +1 -0
  477. package/src/specs/prune.test.ts +104 -16
  478. package/src/specs/reasoning.test.js.map +1 -0
  479. package/src/specs/spec.utils.js.map +1 -0
  480. package/src/specs/thinking-handoff.test.js.map +1 -0
  481. package/src/specs/thinking-handoff.test.ts +19 -19
  482. package/src/specs/thinking-prune.test.js.map +1 -0
  483. package/src/specs/token-distribution-edge-case.test.js.map +1 -0
  484. package/src/specs/token-memoization.test.js.map +1 -0
  485. package/src/specs/tokens.test.js.map +1 -0
  486. package/src/specs/tool-error.test.js.map +1 -0
  487. package/src/splitStream.js.map +1 -0
  488. package/src/splitStream.test.js.map +1 -0
  489. package/src/stream.js.map +1 -0
  490. package/src/stream.test.js.map +1 -0
  491. package/src/test/mockTools.js.map +1 -0
  492. package/src/tools/BashExecutor.ts +281 -0
  493. package/src/tools/BashProgrammaticToolCalling.ts +397 -0
  494. package/src/tools/BrowserTools.js.map +1 -0
  495. package/src/tools/Calculator.js.map +1 -0
  496. package/src/tools/Calculator.test.js.map +1 -0
  497. package/src/tools/CodeExecutor.js.map +1 -0
  498. package/src/tools/CodeExecutor.ts +62 -54
  499. package/src/tools/ProgrammaticToolCalling.js.map +1 -0
  500. package/src/tools/ProgrammaticToolCalling.ts +29 -14
  501. package/src/tools/ReadFile.ts +39 -0
  502. package/src/tools/SkillTool.ts +46 -0
  503. package/src/tools/StreamingToolCallBuffer.js.map +1 -0
  504. package/src/tools/SubagentTool.ts +100 -0
  505. package/src/tools/ToolNode.js.map +1 -0
  506. package/src/tools/ToolNode.ts +548 -26
  507. package/src/tools/ToolSearch.js.map +1 -0
  508. package/src/tools/__tests__/BashExecutor.test.ts +49 -0
  509. package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
  510. package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
  511. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
  512. package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
  513. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
  514. package/src/tools/__tests__/ReadFile.test.ts +44 -0
  515. package/src/tools/__tests__/SkillTool.test.ts +442 -0
  516. package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +1 -0
  517. package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
  518. package/src/tools/__tests__/SubagentTool.test.ts +149 -0
  519. package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
  520. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
  521. package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
  522. package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
  523. package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
  524. package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
  525. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
  526. package/src/tools/__tests__/handlers.test.js.map +1 -0
  527. package/src/tools/__tests__/skillCatalog.test.ts +161 -0
  528. package/src/tools/__tests__/subagentHooks.test.ts +210 -0
  529. package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
  530. package/src/tools/__tests__/truncation-recovery.integration.test.js.map +1 -0
  531. package/src/tools/handlers.js.map +1 -0
  532. package/src/tools/schema.js.map +1 -0
  533. package/src/tools/search/anthropic.js.map +1 -0
  534. package/src/tools/search/content.js.map +1 -0
  535. package/src/tools/search/content.test.js.map +1 -0
  536. package/src/tools/search/firecrawl.js.map +1 -0
  537. package/src/tools/search/format.js.map +1 -0
  538. package/src/tools/search/highlights.js.map +1 -0
  539. package/src/tools/search/index.js.map +1 -0
  540. package/src/tools/search/jina-reranker.test.js.map +1 -0
  541. package/src/tools/search/rerankers.js.map +1 -0
  542. package/src/tools/search/schema.js.map +1 -0
  543. package/src/tools/search/search.js.map +1 -0
  544. package/src/tools/search/search.ts +12 -2
  545. package/src/tools/search/serper-scraper.js.map +1 -0
  546. package/src/tools/search/tavily-scraper.ts +235 -0
  547. package/src/tools/search/tavily-search.ts +424 -0
  548. package/src/tools/search/tavily.test.ts +965 -0
  549. package/src/tools/search/test.js.map +1 -0
  550. package/src/tools/search/tool.js.map +1 -0
  551. package/src/tools/search/tool.ts +36 -2
  552. package/src/tools/search/types.js.map +1 -0
  553. package/src/tools/search/types.ts +133 -8
  554. package/src/tools/search/utils.js.map +1 -0
  555. package/src/tools/search/utils.ts +13 -5
  556. package/src/tools/skillCatalog.ts +126 -0
  557. package/src/tools/subagent/SubagentExecutor.ts +676 -0
  558. package/src/tools/subagent/index.ts +13 -0
  559. package/src/tools/subagent/types.test.ts +70 -0
  560. package/src/tools/subagent/types.ts +115 -0
  561. package/src/tools/toolOutputReferences.ts +825 -0
  562. package/src/types/agent-cache.ts +73 -0
  563. package/src/types/graph.js.map +1 -0
  564. package/src/types/graph.test.js.map +1 -0
  565. package/src/types/graph.ts +171 -20
  566. package/src/types/index.js.map +1 -0
  567. package/src/types/index.ts +3 -0
  568. package/src/types/llm.js.map +1 -0
  569. package/src/types/messages.js.map +1 -0
  570. package/src/types/messages.ts +27 -0
  571. package/src/types/run.js.map +1 -0
  572. package/src/types/run.ts +22 -0
  573. package/src/types/skill.ts +11 -0
  574. package/src/types/stream.js.map +1 -0
  575. package/src/types/tools.js.map +1 -0
  576. package/src/types/tools.ts +118 -0
  577. package/src/utils/__tests__/truncation.test.ts +66 -0
  578. package/src/utils/contextAnalytics.js.map +1 -0
  579. package/src/utils/contextAnalytics.test.js.map +1 -0
  580. package/src/utils/events.js.map +1 -0
  581. package/src/utils/graph.js.map +1 -0
  582. package/src/utils/handlers.js.map +1 -0
  583. package/src/utils/index.js.map +1 -0
  584. package/src/utils/index.ts +1 -3
  585. package/src/utils/llm.js.map +1 -0
  586. package/src/utils/llmConfig.js.map +1 -0
  587. package/src/utils/logging.js.map +1 -0
  588. package/src/utils/misc.js.map +1 -0
  589. package/src/utils/run.js.map +1 -0
  590. package/src/utils/schema.js.map +1 -0
  591. package/src/utils/title.js.map +1 -0
  592. package/src/utils/tokens.js.map +1 -0
  593. package/src/utils/toonFormat.js.map +1 -0
  594. package/src/utils/truncation.ts +154 -0
  595. package/dist/cjs/common/spawnPath.cjs +0 -104
  596. package/dist/cjs/common/spawnPath.cjs.map +0 -1
  597. package/dist/cjs/content/ArtifactStore.cjs +0 -579
  598. package/dist/cjs/content/ArtifactStore.cjs.map +0 -1
  599. package/dist/cjs/content/ContentStore.cjs +0 -638
  600. package/dist/cjs/content/ContentStore.cjs.map +0 -1
  601. package/dist/cjs/content/contentAnalyzer.cjs +0 -91
  602. package/dist/cjs/content/contentAnalyzer.cjs.map +0 -1
  603. package/dist/cjs/content/index.cjs +0 -20
  604. package/dist/cjs/content/index.cjs.map +0 -1
  605. package/dist/cjs/content/mcpAutoCache.cjs +0 -115
  606. package/dist/cjs/content/mcpAutoCache.cjs.map +0 -1
  607. package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
  608. package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
  609. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
  610. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
  611. package/dist/cjs/providers/a2a/client.cjs +0 -92
  612. package/dist/cjs/providers/a2a/client.cjs.map +0 -1
  613. package/dist/cjs/providers/a2a/config.cjs +0 -38
  614. package/dist/cjs/providers/a2a/config.cjs.map +0 -1
  615. package/dist/cjs/providers/capabilityNaming.cjs +0 -43
  616. package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
  617. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
  618. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
  619. package/dist/cjs/providers/mcp/config.cjs +0 -42
  620. package/dist/cjs/providers/mcp/config.cjs.map +0 -1
  621. package/dist/cjs/providers/mcp/transport.cjs +0 -65
  622. package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
  623. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
  624. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
  625. package/dist/cjs/providers/types.cjs +0 -51
  626. package/dist/cjs/providers/types.cjs.map +0 -1
  627. package/dist/cjs/tools/artifacts/schema.cjs +0 -86
  628. package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
  629. package/dist/cjs/tools/artifacts/tool.cjs +0 -219
  630. package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
  631. package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
  632. package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
  633. package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
  634. package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
  635. package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
  636. package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
  637. package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
  638. package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
  639. package/dist/cjs/tools/proxyTool.cjs +0 -102
  640. package/dist/cjs/tools/proxyTool.cjs.map +0 -1
  641. package/dist/cjs/utils/childAgentContext.cjs +0 -242
  642. package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
  643. package/dist/cjs/utils/credentials.cjs +0 -142
  644. package/dist/cjs/utils/credentials.cjs.map +0 -1
  645. package/dist/cjs/utils/httpClient.cjs +0 -74
  646. package/dist/cjs/utils/httpClient.cjs.map +0 -1
  647. package/dist/cjs/utils/toolManifest.cjs +0 -100
  648. package/dist/cjs/utils/toolManifest.cjs.map +0 -1
  649. package/dist/esm/common/spawnPath.mjs +0 -95
  650. package/dist/esm/common/spawnPath.mjs.map +0 -1
  651. package/dist/esm/content/ArtifactStore.mjs +0 -576
  652. package/dist/esm/content/ArtifactStore.mjs.map +0 -1
  653. package/dist/esm/content/ContentStore.mjs +0 -635
  654. package/dist/esm/content/ContentStore.mjs.map +0 -1
  655. package/dist/esm/content/contentAnalyzer.mjs +0 -87
  656. package/dist/esm/content/contentAnalyzer.mjs.map +0 -1
  657. package/dist/esm/content/index.mjs +0 -5
  658. package/dist/esm/content/mcpAutoCache.mjs +0 -111
  659. package/dist/esm/content/mcpAutoCache.mjs.map +0 -1
  660. package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
  661. package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
  662. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
  663. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
  664. package/dist/esm/providers/a2a/client.mjs +0 -88
  665. package/dist/esm/providers/a2a/client.mjs.map +0 -1
  666. package/dist/esm/providers/a2a/config.mjs +0 -35
  667. package/dist/esm/providers/a2a/config.mjs.map +0 -1
  668. package/dist/esm/providers/capabilityNaming.mjs +0 -39
  669. package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
  670. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
  671. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
  672. package/dist/esm/providers/mcp/config.mjs +0 -39
  673. package/dist/esm/providers/mcp/config.mjs.map +0 -1
  674. package/dist/esm/providers/mcp/transport.mjs +0 -63
  675. package/dist/esm/providers/mcp/transport.mjs.map +0 -1
  676. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
  677. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
  678. package/dist/esm/providers/types.mjs +0 -51
  679. package/dist/esm/providers/types.mjs.map +0 -1
  680. package/dist/esm/tools/artifacts/schema.mjs +0 -79
  681. package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
  682. package/dist/esm/tools/artifacts/tool.mjs +0 -213
  683. package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
  684. package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
  685. package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
  686. package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
  687. package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
  688. package/dist/esm/tools/fileSearch/schema.mjs +0 -15
  689. package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
  690. package/dist/esm/tools/fileSearch/tool.mjs +0 -152
  691. package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
  692. package/dist/esm/tools/proxyTool.mjs +0 -100
  693. package/dist/esm/tools/proxyTool.mjs.map +0 -1
  694. package/dist/esm/utils/childAgentContext.mjs +0 -237
  695. package/dist/esm/utils/childAgentContext.mjs.map +0 -1
  696. package/dist/esm/utils/credentials.mjs +0 -135
  697. package/dist/esm/utils/credentials.mjs.map +0 -1
  698. package/dist/esm/utils/httpClient.mjs +0 -70
  699. package/dist/esm/utils/httpClient.mjs.map +0 -1
  700. package/dist/esm/utils/toolManifest.mjs +0 -96
  701. package/dist/esm/utils/toolManifest.mjs.map +0 -1
  702. package/dist/types/common/spawnPath.d.ts +0 -59
  703. package/dist/types/content/ArtifactStore.d.ts +0 -223
  704. package/dist/types/content/ContentStore.d.ts +0 -140
  705. package/dist/types/content/contentAnalyzer.d.ts +0 -38
  706. package/dist/types/content/index.d.ts +0 -24
  707. package/dist/types/content/mcpAutoCache.d.ts +0 -89
  708. package/dist/types/content/types.d.ts +0 -75
  709. package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
  710. package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
  711. package/dist/types/providers/a2a/client.d.ts +0 -47
  712. package/dist/types/providers/a2a/config.d.ts +0 -18
  713. package/dist/types/providers/a2a/index.d.ts +0 -6
  714. package/dist/types/providers/a2a/types.d.ts +0 -173
  715. package/dist/types/providers/capabilityNaming.d.ts +0 -25
  716. package/dist/types/providers/index.d.ts +0 -12
  717. package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
  718. package/dist/types/providers/mcp/config.d.ts +0 -20
  719. package/dist/types/providers/mcp/index.d.ts +0 -5
  720. package/dist/types/providers/mcp/transport.d.ts +0 -18
  721. package/dist/types/providers/mcp/types.d.ts +0 -112
  722. package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
  723. package/dist/types/providers/tools-server/index.d.ts +0 -1
  724. package/dist/types/providers/types.d.ts +0 -184
  725. package/dist/types/tools/artifacts/index.d.ts +0 -3
  726. package/dist/types/tools/artifacts/schema.d.ts +0 -63
  727. package/dist/types/tools/artifacts/tool.d.ts +0 -16
  728. package/dist/types/tools/artifacts/types.d.ts +0 -127
  729. package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
  730. package/dist/types/tools/fileSearch/index.d.ts +0 -5
  731. package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
  732. package/dist/types/tools/fileSearch/schema.d.ts +0 -13
  733. package/dist/types/tools/fileSearch/tool.d.ts +0 -18
  734. package/dist/types/tools/fileSearch/types.d.ts +0 -139
  735. package/dist/types/tools/proxyTool.d.ts +0 -62
  736. package/dist/types/utils/childAgentContext.d.ts +0 -99
  737. package/dist/types/utils/credentials.d.ts +0 -77
  738. package/dist/types/utils/httpClient.d.ts +0 -46
  739. package/dist/types/utils/toolManifest.d.ts +0 -49
  740. package/src/common/__tests__/spawnPath.test.ts +0 -110
  741. package/src/common/spawnPath.ts +0 -101
  742. package/src/content/ArtifactStore.ts +0 -782
  743. package/src/content/ContentStore.ts +0 -753
  744. package/src/content/contentAnalyzer.ts +0 -105
  745. package/src/content/index.ts +0 -51
  746. package/src/content/mcpAutoCache.ts +0 -185
  747. package/src/content/types.ts +0 -82
  748. package/src/graphs/HandoffRegistry.ts +0 -199
  749. package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
  750. package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
  751. package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
  752. package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
  753. package/src/graphs/handoffValidation.test.ts +0 -353
  754. package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
  755. package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -271
  756. package/src/providers/__tests__/types.test.ts +0 -64
  757. package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
  758. package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
  759. package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
  760. package/src/providers/a2a/client.ts +0 -115
  761. package/src/providers/a2a/config.ts +0 -40
  762. package/src/providers/a2a/index.ts +0 -29
  763. package/src/providers/a2a/types.ts +0 -191
  764. package/src/providers/capabilityNaming.ts +0 -42
  765. package/src/providers/index.ts +0 -68
  766. package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
  767. package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
  768. package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
  769. package/src/providers/mcp/config.ts +0 -45
  770. package/src/providers/mcp/index.ts +0 -21
  771. package/src/providers/mcp/transport.ts +0 -76
  772. package/src/providers/mcp/types.ts +0 -139
  773. package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -249
  774. package/src/providers/tools-server/index.ts +0 -1
  775. package/src/providers/types.ts +0 -204
  776. package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
  777. package/src/scripts/test-handoff-preamble.ts +0 -278
  778. package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
  779. package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
  780. package/src/tools/artifacts/index.ts +0 -33
  781. package/src/tools/artifacts/schema.ts +0 -99
  782. package/src/tools/artifacts/tool.ts +0 -289
  783. package/src/tools/artifacts/types.ts +0 -162
  784. package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
  785. package/src/tools/fileSearch/formatter.ts +0 -129
  786. package/src/tools/fileSearch/index.ts +0 -23
  787. package/src/tools/fileSearch/ragClient.ts +0 -137
  788. package/src/tools/fileSearch/schema.ts +0 -19
  789. package/src/tools/fileSearch/tool.ts +0 -207
  790. package/src/tools/fileSearch/types.ts +0 -149
  791. package/src/tools/proxyTool.ts +0 -166
  792. package/src/utils/__tests__/childAgentContext.test.ts +0 -217
  793. package/src/utils/__tests__/credentials.test.ts +0 -130
  794. package/src/utils/__tests__/httpClient.test.ts +0 -75
  795. package/src/utils/__tests__/toolManifest.test.ts +0 -116
  796. package/src/utils/childAgentContext.ts +0 -259
  797. package/src/utils/credentials.ts +0 -157
  798. package/src/utils/httpClient.ts +0 -92
  799. package/src/utils/toolManifest.ts +0 -109
  800. /package/dist/esm/{content → langchain}/index.mjs.map +0 -0
@@ -10,10 +10,9 @@ var toonFormat = require('../utils/toonFormat.cjs');
10
10
  var run = require('../utils/run.cjs');
11
11
  require('ai-tokenizer');
12
12
  require('zod-to-json-schema');
13
- require('axios');
14
- require('https-proxy-agent');
15
- require('../utils/credentials.cjs');
16
13
  var events = require('../utils/events.cjs');
14
+ var executeHooks = require('../hooks/executeHooks.cjs');
15
+ var toolOutputReferences = require('./toolOutputReferences.cjs');
17
16
 
18
17
  /**
19
18
  * Helper to check if a value is a Send object
@@ -84,7 +83,30 @@ class ToolNode extends run.RunnableCallable {
84
83
  toolApprovalConfig;
85
84
  /** Buffer for recovering truncated tool call arguments from streaming data */
86
85
  streamingToolCallBuffer;
87
- constructor({ tools, toolMap, name, tags, errorHandler, toolCallStepIds, handleToolErrors, loadRuntimeTools, toolRegistry, sessions, eventDrivenMode, agentId, directToolNames, streamingToolCallBuffer, toolApprovalConfig, }) {
86
+ /** Hook registry threaded down from Run for tool-lifecycle events. */
87
+ hookRegistry;
88
+ /**
89
+ * Tool output reference registry threaded down from Run / Graph
90
+ * (upstream PR #114). When set, dispatchToolEvents resolves
91
+ * `{{tool<i>turn<n>}}` placeholders in args before invoking each tool
92
+ * and stores successful outputs under their stable reference keys for
93
+ * subsequent calls in the same run to pipe through.
94
+ */
95
+ toolOutputRegistry;
96
+ /**
97
+ * Per-batch turn counter for the registry. Increments once per
98
+ * `dispatchToolEvents` invocation so `tool<i>turn<n>` keys remain
99
+ * unique across overlapping batches in a single run.
100
+ */
101
+ toolOutputTurn = 0;
102
+ /**
103
+ * Counter for synthesising scope ids when `run()` is called without a
104
+ * `run_id` in config. Each anonymous batch gets a unique
105
+ * `\0anon-<n>` scope so concurrent invocations don't collide on the
106
+ * shared `toolOutputRegistry`.
107
+ */
108
+ anonBatchCounter = 0;
109
+ constructor({ tools, toolMap, name, tags, errorHandler, toolCallStepIds, handleToolErrors, loadRuntimeTools, toolRegistry, sessions, eventDrivenMode, agentId, directToolNames, streamingToolCallBuffer, toolApprovalConfig, hookRegistry, toolOutputRegistry, toolOutputReferences: toolOutputReferences$1, maxToolResultChars: _maxToolResultChars, }) {
88
110
  super({ name, tags, func: (input, config) => this.run(input, config) });
89
111
  this.toolMap = toolMap ?? new Map(tools.map((tool) => [tool.name, tool]));
90
112
  this.toolCallStepIds = toolCallStepIds;
@@ -99,6 +121,31 @@ class ToolNode extends run.RunnableCallable {
99
121
  this.directToolNames = directToolNames;
100
122
  this.streamingToolCallBuffer = streamingToolCallBuffer;
101
123
  this.toolApprovalConfig = toolApprovalConfig;
124
+ this.hookRegistry = hookRegistry;
125
+ /**
126
+ * Precedence: an explicitly passed `toolOutputRegistry` instance
127
+ * wins (the multi-agent case where every ToolNode shares one registry
128
+ * for the run); otherwise the per-ToolNode `toolOutputReferences`
129
+ * config builds an instance scoped to this ToolNode.
130
+ */
131
+ if (toolOutputRegistry != null) {
132
+ this.toolOutputRegistry = toolOutputRegistry;
133
+ }
134
+ else if (toolOutputReferences$1?.enabled === true) {
135
+ this.toolOutputRegistry = new toolOutputReferences.ToolOutputReferenceRegistry({
136
+ maxOutputSize: toolOutputReferences$1.maxOutputSize,
137
+ maxTotalSize: toolOutputReferences$1.maxTotalSize,
138
+ });
139
+ }
140
+ }
141
+ /**
142
+ * Test-observation accessor for the tool-output reference registry.
143
+ * @internal Exposed for test observation only. Host code should rely on
144
+ * `{{tool<i>turn<n>}}` substitution at tool-invocation time and not
145
+ * mutate the registry directly.
146
+ */
147
+ _unsafeGetToolOutputRegistry() {
148
+ return this.toolOutputRegistry;
102
149
  }
103
150
  /**
104
151
  * Returns cached programmatic tools, computing once on first access.
@@ -166,8 +213,7 @@ class ToolNode extends run.RunnableCallable {
166
213
  // `ask_user` execute without ever firing interrupt(), defeating the whole tool.
167
214
  // Instead, gate the bypass on the actual routing-tool name prefix.
168
215
  if (this.directToolNames?.has(toolName) &&
169
- (toolName.startsWith(_enum.Constants.LC_TRANSFER_TO_) ||
170
- toolName.startsWith(_enum.Constants.LC_HANDOFF_TO_))) {
216
+ toolName.startsWith(_enum.Constants.LC_TRANSFER_TO_)) {
171
217
  return false;
172
218
  }
173
219
  // Determine the effective policy for this tool
@@ -221,10 +267,41 @@ class ToolNode extends run.RunnableCallable {
221
267
  return response;
222
268
  }
223
269
  /**
224
- * Runs a single tool call with error handling
270
+ * Runs a single tool call with error handling.
271
+ *
272
+ * @param batchContext Optional per-batch context (upstream PR #117).
273
+ * Threaded from `run()` for tool output reference annotation. The
274
+ * `batchScopeId` field carries an anonymous synthetic scope when the
275
+ * caller has no `run_id`, so concurrent batches don't collide on the
276
+ * shared registry.
225
277
  */
226
- async runTool(call, config) {
278
+ async runTool(call, config, batchContext = {}) {
279
+ const { batchIndex, turn: batchTurn, batchScopeId, resolvedArgsByCallId, } = batchContext;
227
280
  const tool = this.toolMap.get(call.name);
281
+ const registry = this.toolOutputRegistry;
282
+ /**
283
+ * Precompute the reference key once per call — captured locally so
284
+ * concurrent `invoke()` calls on the same ToolNode cannot race on a
285
+ * shared turn field.
286
+ */
287
+ const refKey = registry != null && batchIndex != null && batchTurn != null
288
+ ? toolOutputReferences.buildReferenceKey(batchIndex, batchTurn)
289
+ : undefined;
290
+ /**
291
+ * Hoisted outside the try so the catch branch can stamp
292
+ * `_unresolvedRefs` into error ToolMessage metadata. This lets the
293
+ * lazy annotation transform surface a `[unresolved refs: …]` hint to
294
+ * the LLM, helping the model self-correct when its reference key
295
+ * caused the failure.
296
+ */
297
+ let unresolvedRefs = [];
298
+ /**
299
+ * Use the caller-provided `batchScopeId` when threaded from `run()`.
300
+ * Fall back to the config's `run_id` when runTool is invoked from a
301
+ * context that doesn't thread the batch context — that still
302
+ * preserves the runId-based partitioning for named runs.
303
+ */
304
+ const runId = batchScopeId ?? config.configurable?.run_id;
228
305
  try {
229
306
  if (tool === undefined) {
230
307
  throw new Error(`Tool "${call.name}" not found.`);
@@ -244,6 +321,23 @@ class ToolNode extends run.RunnableCallable {
244
321
  args = this.recoverTruncatedArgs(call.name, call.id, args);
245
322
  this.streamingToolCallBuffer.clear(call.id);
246
323
  }
324
+ /**
325
+ * Resolve `{{tool<i>turn<n>}}` placeholders in args against the
326
+ * registry. Captures `unresolvedRefs` so error/success branches can
327
+ * surface them to the LLM via `additional_kwargs._unresolvedRefs`.
328
+ */
329
+ if (registry != null) {
330
+ const { resolved, unresolved } = registry.resolve(runId, args);
331
+ args = resolved;
332
+ unresolvedRefs = unresolved;
333
+ if (resolvedArgsByCallId != null &&
334
+ call.id != null &&
335
+ call.id !== '' &&
336
+ resolved !== call.args &&
337
+ typeof resolved === 'object') {
338
+ resolvedArgsByCallId.set(call.id, resolved);
339
+ }
340
+ }
247
341
  // Build invoke params - LangChain extracts non-schema fields to config.toolCall
248
342
  let invokeParams = {
249
343
  ...call,
@@ -276,8 +370,7 @@ class ToolNode extends run.RunnableCallable {
276
370
  * session_id is always injected when available (even without tracked files)
277
371
  * so the CodeExecutor can fall back to the /files endpoint for session continuity.
278
372
  */
279
- if (call.name === _enum.Constants.EXECUTE_CODE ||
280
- call.name === _enum.Constants.PROGRAMMATIC_TOOL_CALLING) {
373
+ if (_enum.CODE_EXECUTION_TOOLS.has(call.name)) {
281
374
  const codeSession = this.sessions?.get(_enum.Constants.EXECUTE_CODE);
282
375
  if (codeSession != null && codeSession.session_id !== '') {
283
376
  /**
@@ -362,22 +455,49 @@ class ToolNode extends run.RunnableCallable {
362
455
  minSizeForToon: 1000,
363
456
  minReductionPercent: 10, // Only apply TOON when clearly beneficial
364
457
  });
365
- // Step 4: Return ToolMessage with processed string content
458
+ /**
459
+ * Tool output reference metadata (upstream PR #117). Register the
460
+ * raw, untruncated content so future `{{...}}` substitutions deliver
461
+ * the full payload, and stamp `_refKey` / `_refScope` /
462
+ * `_unresolvedRefs` into `additional_kwargs` for the lazy
463
+ * annotation transform to apply at LLM request time. Persisted
464
+ * `content` stays clean.
465
+ *
466
+ * For error ToolMessages from the underlying tool: bypass
467
+ * registration but still stamp `_unresolvedRefs` so the model can
468
+ * self-correct.
469
+ */
366
470
  if (messages.isBaseMessage(output) && output._getType() === 'tool') {
367
471
  const toolMsg = output;
472
+ const isError = toolMsg.status === 'error';
473
+ const refMeta = isError
474
+ ? unresolvedRefs.length > 0
475
+ ? { _unresolvedRefs: unresolvedRefs }
476
+ : undefined
477
+ : this.recordOutputReference(runId, rawContent, refKey, unresolvedRefs);
368
478
  return new messages.ToolMessage({
369
479
  status: toolMsg.status,
370
480
  name: toolMsg.name,
371
481
  content: processed.content,
372
482
  tool_call_id: toolMsg.tool_call_id,
483
+ ...(refMeta != null && {
484
+ additional_kwargs: {
485
+ ...toolMsg.additional_kwargs,
486
+ ...refMeta,
487
+ },
488
+ }),
373
489
  });
374
490
  }
375
491
  else {
492
+ const refMeta = this.recordOutputReference(runId, rawContent, refKey, unresolvedRefs);
376
493
  return new messages.ToolMessage({
377
494
  status: 'success',
378
495
  name: tool.name,
379
496
  content: processed.content,
380
497
  tool_call_id: call.id,
498
+ ...(refMeta != null && {
499
+ additional_kwargs: refMeta,
500
+ }),
381
501
  });
382
502
  }
383
503
  }
@@ -427,6 +547,9 @@ class ToolNode extends run.RunnableCallable {
427
547
  content: `Error: ${e.message}\n Please fix your mistakes.`,
428
548
  name: call.name,
429
549
  tool_call_id: call.id ?? '',
550
+ ...(unresolvedRefs.length > 0 && {
551
+ additional_kwargs: { _unresolvedRefs: unresolvedRefs },
552
+ }),
430
553
  });
431
554
  }
432
555
  }
@@ -510,6 +633,31 @@ class ToolNode extends run.RunnableCallable {
510
633
  }
511
634
  return parsedArgs;
512
635
  }
636
+ /**
637
+ * Stores the raw, untruncated tool output in the registry under `refKey`
638
+ * (when registry + refKey are both present) and returns the metadata
639
+ * envelope to stamp on `ToolMessage.additional_kwargs`. The lazy
640
+ * annotation transform reads `_refKey` / `_refScope` / `_unresolvedRefs`
641
+ * at LLM request time to produce the transient annotated copy.
642
+ */
643
+ recordOutputReference(runId, registryContent, refKey, unresolved) {
644
+ if (this.toolOutputRegistry != null && refKey != null) {
645
+ this.toolOutputRegistry.set(runId, refKey, registryContent);
646
+ }
647
+ if (refKey == null && unresolved.length === 0)
648
+ return undefined;
649
+ const meta = {};
650
+ if (refKey != null) {
651
+ meta._refKey = refKey;
652
+ // Anonymous invocations use a synthetic scope minted in run() — stamp
653
+ // it onto the message so annotateMessagesForLLM can recover it later.
654
+ if (runId != null)
655
+ meta._refScope = runId;
656
+ }
657
+ if (unresolved.length > 0)
658
+ meta._unresolvedRefs = unresolved;
659
+ return meta;
660
+ }
513
661
  /**
514
662
  * Builds code session context for injection into event-driven tool calls.
515
663
  * Mirrors the session injection logic in runTool() for direct execution.
@@ -664,8 +812,33 @@ class ToolNode extends run.RunnableCallable {
664
812
  }
665
813
  }
666
814
  /**
667
- * Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns raw ToolMessages.
668
- * Core logic for event-driven execution, separated from output shaping.
815
+ * Converts InjectedMessage entries into LangChain HumanMessages.
816
+ * 'user' and 'system' both become HumanMessage to avoid provider rejections
817
+ * (Anthropic/Google reject non-leading SystemMessages); the original role
818
+ * and metadata are preserved in additional_kwargs for downstream consumers.
819
+ */
820
+ convertInjectedMessages(messages$1) {
821
+ const converted = [];
822
+ for (const msg of messages$1) {
823
+ const additional_kwargs = {
824
+ role: msg.role,
825
+ };
826
+ if (msg.isMeta != null)
827
+ additional_kwargs.isMeta = msg.isMeta;
828
+ if (msg.source != null)
829
+ additional_kwargs.source = msg.source;
830
+ if (msg.skillName != null)
831
+ additional_kwargs.skillName = msg.skillName;
832
+ converted.push(new messages.HumanMessage({ content: msg.content, additional_kwargs }));
833
+ }
834
+ return converted;
835
+ }
836
+ /**
837
+ * Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns
838
+ * the resulting ToolMessages along with any injected messages emitted by
839
+ * the host (e.g. SkillTool body injection). Injected messages must be
840
+ * placed AFTER the ToolMessages so the AIMessage tool_calls -> ToolMessage
841
+ * adjacency required by some providers is preserved.
669
842
  */
670
843
  async dispatchToolEvents(toolCalls, config) {
671
844
  // ========================================================================
@@ -696,9 +869,117 @@ class ToolNode extends run.RunnableCallable {
696
869
  }
697
870
  // If all tools were denied, return denial messages without dispatching
698
871
  if (approvedCalls.length === 0) {
699
- return denialMessages;
872
+ return { toolMessages: denialMessages, injected: [] };
873
+ }
874
+ const runId = config.configurable?.run_id;
875
+ const threadId = config.configurable?.thread_id;
876
+ /**
877
+ * PreToolUse hooks may deny / ask / allow each call, and may rewrite
878
+ * `toolInput` via `updatedInput`. A denied/asked call short-circuits
879
+ * with a synthetic error ToolMessage and fires PermissionDenied so
880
+ * the host can audit. Survivors continue to dispatch.
881
+ */
882
+ const hookDenialMessages = [];
883
+ let postHookCalls = approvedCalls;
884
+ if (runId != null &&
885
+ this.hookRegistry?.hasHookFor('PreToolUse', runId) === true) {
886
+ const HOOK_FALLBACK = {
887
+ additionalContexts: [],
888
+ errors: [],
889
+ };
890
+ const surviving = [];
891
+ const preResults = await Promise.all(approvedCalls.map((call) => executeHooks.executeHooks({
892
+ registry: this.hookRegistry,
893
+ input: {
894
+ hook_event_name: 'PreToolUse',
895
+ runId,
896
+ threadId,
897
+ agentId: this.agentId,
898
+ toolName: call.name,
899
+ toolInput: call.args,
900
+ toolUseId: call.id ?? '',
901
+ stepId: this.toolCallStepIds?.get(call.id ?? ''),
902
+ turn: this.toolUsageCount.get(call.name) ?? 0,
903
+ },
904
+ sessionId: runId,
905
+ matchQuery: call.name,
906
+ }).catch(() => HOOK_FALLBACK)));
907
+ for (let i = 0; i < approvedCalls.length; i++) {
908
+ const call = approvedCalls[i];
909
+ const hookResult = preResults[i];
910
+ const denied = hookResult.decision === 'deny' || hookResult.decision === 'ask';
911
+ if (denied) {
912
+ const reason = hookResult.reason ?? 'Blocked by hook';
913
+ hookDenialMessages.push(new messages.ToolMessage({
914
+ status: 'error',
915
+ content: `Blocked: ${reason}`,
916
+ name: call.name,
917
+ tool_call_id: call.id ?? '',
918
+ }));
919
+ if (this.hookRegistry.hasHookFor('PermissionDenied', runId)) {
920
+ // Fire-and-forget — denial accounting must not block dispatch.
921
+ void executeHooks.executeHooks({
922
+ registry: this.hookRegistry,
923
+ input: {
924
+ hook_event_name: 'PermissionDenied',
925
+ runId,
926
+ threadId,
927
+ agentId: this.agentId,
928
+ toolName: call.name,
929
+ toolInput: call.args,
930
+ toolUseId: call.id ?? '',
931
+ reason,
932
+ },
933
+ sessionId: runId,
934
+ matchQuery: call.name,
935
+ }).catch(() => {
936
+ /* swallow — denial is informational */
937
+ });
938
+ }
939
+ continue;
940
+ }
941
+ if (hookResult.updatedInput != null &&
942
+ typeof hookResult.updatedInput === 'object') {
943
+ call.args = hookResult.updatedInput;
944
+ }
945
+ surviving.push(call);
946
+ }
947
+ postHookCalls = surviving;
948
+ if (postHookCalls.length === 0) {
949
+ return {
950
+ toolMessages: [...denialMessages, ...hookDenialMessages],
951
+ injected: [],
952
+ };
953
+ }
700
954
  }
701
- const requests = approvedCalls.map((call) => {
955
+ /**
956
+ * Tool output reference resolution (upstream PR #114): walk each call's
957
+ * args and substitute `{{tool<i>turn<n>}}` placeholders with the stored
958
+ * raw output. Captured here BEFORE request shaping so the substituted
959
+ * args flow through the rest of the dispatch unchanged.
960
+ *
961
+ * Failures are non-fatal: the registry resolver returns the original
962
+ * string unchanged for unknown keys, and surfaces them via `unresolved`
963
+ * which we currently log-only. Future work can route unresolved-key
964
+ * complaints into a hint message for the LLM.
965
+ */
966
+ const batchTurn = this.toolOutputTurn++;
967
+ if (this.toolOutputRegistry != null && runId != null) {
968
+ const registry = this.toolOutputRegistry;
969
+ for (const call of postHookCalls) {
970
+ const args = call.args;
971
+ if (args == null)
972
+ continue;
973
+ try {
974
+ const { resolved } = registry.resolve(runId, args);
975
+ call.args = resolved;
976
+ }
977
+ catch {
978
+ /* leave args untouched on resolver failure */
979
+ }
980
+ }
981
+ }
982
+ const requests = postHookCalls.map((call) => {
702
983
  const turn = this.toolUsageCount.get(call.name) ?? 0;
703
984
  this.toolUsageCount.set(call.name, turn + 1);
704
985
  // Recover truncated args from streaming buffer (same as runTool path)
@@ -733,7 +1014,77 @@ class ToolNode extends run.RunnableCallable {
733
1014
  events.safeDispatchCustomEvent(_enum.GraphEvents.ON_TOOL_EXECUTE, request, config);
734
1015
  });
735
1016
  this.storeCodeSessionFromResults(results, requests);
736
- const eventMessages = results.map((result) => {
1017
+ const injected = [];
1018
+ for (const result of results) {
1019
+ if (result.injectedMessages && result.injectedMessages.length > 0) {
1020
+ try {
1021
+ injected.push(...this.convertInjectedMessages(result.injectedMessages));
1022
+ }
1023
+ catch (e) {
1024
+ // eslint-disable-next-line no-console
1025
+ console.warn(`[ToolNode] Failed to convert injectedMessages for toolCallId=${result.toolCallId}:`, e instanceof Error ? e.message : e);
1026
+ }
1027
+ }
1028
+ }
1029
+ /**
1030
+ * Fire PostToolUse / PostToolUseFailure hooks after results are in.
1031
+ * These run in parallel and never block the return — failures are
1032
+ * swallowed so a hook bug can't masquerade as a tool failure.
1033
+ */
1034
+ if (runId != null && this.hookRegistry != null) {
1035
+ const hasPost = this.hookRegistry.hasHookFor('PostToolUse', runId);
1036
+ const hasFail = this.hookRegistry.hasHookFor('PostToolUseFailure', runId);
1037
+ if (hasPost || hasFail) {
1038
+ const postPromises = [];
1039
+ for (const result of results) {
1040
+ const request = requests.find((r) => r.id === result.toolCallId);
1041
+ if (!request)
1042
+ continue;
1043
+ if (result.status === 'success' && hasPost) {
1044
+ postPromises.push(executeHooks.executeHooks({
1045
+ registry: this.hookRegistry,
1046
+ input: {
1047
+ hook_event_name: 'PostToolUse',
1048
+ runId,
1049
+ threadId,
1050
+ agentId: this.agentId,
1051
+ toolName: request.name,
1052
+ toolInput: request.args,
1053
+ toolOutput: result.content,
1054
+ toolUseId: result.toolCallId,
1055
+ stepId: this.toolCallStepIds?.get(result.toolCallId),
1056
+ turn: request.turn,
1057
+ },
1058
+ sessionId: runId,
1059
+ matchQuery: request.name,
1060
+ }).catch(() => undefined));
1061
+ }
1062
+ else if (result.status === 'error' && hasFail) {
1063
+ postPromises.push(executeHooks.executeHooks({
1064
+ registry: this.hookRegistry,
1065
+ input: {
1066
+ hook_event_name: 'PostToolUseFailure',
1067
+ runId,
1068
+ threadId,
1069
+ agentId: this.agentId,
1070
+ toolName: request.name,
1071
+ toolInput: request.args,
1072
+ toolUseId: result.toolCallId,
1073
+ error: result.errorMessage ?? 'Unknown error',
1074
+ stepId: this.toolCallStepIds?.get(result.toolCallId),
1075
+ turn: request.turn,
1076
+ },
1077
+ sessionId: runId,
1078
+ matchQuery: request.name,
1079
+ }).catch(() => undefined));
1080
+ }
1081
+ }
1082
+ if (postPromises.length > 0) {
1083
+ await Promise.all(postPromises);
1084
+ }
1085
+ }
1086
+ }
1087
+ const eventMessages = results.map((result, idx) => {
737
1088
  const request = requests.find((r) => r.id === result.toolCallId);
738
1089
  const toolName = request?.name ?? 'unknown';
739
1090
  const stepId = this.toolCallStepIds?.get(result.toolCallId) ?? '';
@@ -759,12 +1110,40 @@ class ToolNode extends run.RunnableCallable {
759
1110
  typeof result.content === 'string'
760
1111
  ? result.content
761
1112
  : JSON.stringify(result.content);
1113
+ /**
1114
+ * Tool output reference — lazy annotation (upstream PRs #114 + #117).
1115
+ * Register the raw output under `tool<idx>turn<turn>` in the
1116
+ * registry but leave `ToolMessage.content` clean. Stamp the ref
1117
+ * metadata into `additional_kwargs` instead. The lazy
1118
+ * `annotateMessagesForLLM` transform applies the visible
1119
+ * `[ref: …]` / `_ref` annotation only on the transient copy sent
1120
+ * to the model. Persisted message stays unannotated so
1121
+ * conversation exports / pruning / token accounting stay clean.
1122
+ */
1123
+ const additionalKwargs = {};
1124
+ if (this.toolOutputRegistry != null && runId != null) {
1125
+ try {
1126
+ const refKey = toolOutputReferences.buildReferenceKey(idx, batchTurn);
1127
+ this.toolOutputRegistry.set(runId, refKey, contentString);
1128
+ const meta = {
1129
+ _refKey: refKey,
1130
+ _refScope: runId,
1131
+ };
1132
+ Object.assign(additionalKwargs, meta);
1133
+ }
1134
+ catch {
1135
+ /* registry store failure is non-fatal — message stays clean, no annotation */
1136
+ }
1137
+ }
762
1138
  toolMessage = new messages.ToolMessage({
763
1139
  status: 'success',
764
1140
  name: toolName,
765
1141
  content: contentString,
766
1142
  artifact: result.artifact,
767
1143
  tool_call_id: result.toolCallId,
1144
+ additional_kwargs: Object.keys(additionalKwargs).length > 0
1145
+ ? additionalKwargs
1146
+ : undefined,
768
1147
  });
769
1148
  }
770
1149
  const tool_call = {
@@ -787,7 +1166,14 @@ class ToolNode extends run.RunnableCallable {
787
1166
  events.safeDispatchCustomEvent(_enum.GraphEvents.ON_RUN_STEP_COMPLETED, runStepCompletedData, config);
788
1167
  return toolMessage;
789
1168
  });
790
- return [...denialMessages, ...eventMessages];
1169
+ return {
1170
+ toolMessages: [
1171
+ ...denialMessages,
1172
+ ...hookDenialMessages,
1173
+ ...eventMessages,
1174
+ ],
1175
+ injected,
1176
+ };
791
1177
  }
792
1178
  /**
793
1179
  * Execute all tool calls via ON_TOOL_EXECUTE event dispatch.
@@ -796,19 +1182,42 @@ class ToolNode extends run.RunnableCallable {
796
1182
  async executeViaEvent(toolCalls, config,
797
1183
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
798
1184
  input) {
799
- const outputs = await this.dispatchToolEvents(toolCalls, config);
1185
+ const { toolMessages, injected } = await this.dispatchToolEvents(toolCalls, config);
1186
+ const outputs = [...toolMessages, ...injected];
800
1187
  return (Array.isArray(input) ? outputs : { messages: outputs });
801
1188
  }
802
1189
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
803
1190
  async run(input, config) {
804
1191
  this.toolCallTurns.clear();
1192
+ /**
1193
+ * Per-batch local map for resolved (post-substitution) args. Lives
1194
+ * on the stack so concurrent `run()` calls on the same ToolNode
1195
+ * cannot read or wipe each other's entries.
1196
+ */
1197
+ const resolvedArgsByCallId = new Map();
1198
+ /**
1199
+ * Claim this batch's turn synchronously from the registry (or fall
1200
+ * back to 0 when the feature is disabled). For anonymous callers
1201
+ * (no `run_id` in config), mint a unique per-batch scope id so two
1202
+ * concurrent anonymous invocations don't target the same bucket.
1203
+ */
1204
+ const incomingRunId = config.configurable?.run_id;
1205
+ const batchScopeId = incomingRunId ?? `\0anon-${this.anonBatchCounter++}`;
1206
+ const batchTurn = this.toolOutputRegistry?.nextTurn(batchScopeId) ?? 0;
805
1207
  let outputs;
806
1208
  if (this.isSendInput(input)) {
807
1209
  const isDirectTool = this.directToolNames?.has(input.lg_tool_call.name);
808
1210
  if (this.eventDrivenMode && isDirectTool !== true) {
809
1211
  return this.executeViaEvent([input.lg_tool_call], config, input);
810
1212
  }
811
- outputs = [await this.runTool(input.lg_tool_call, config)];
1213
+ outputs = [
1214
+ await this.runTool(input.lg_tool_call, config, {
1215
+ batchIndex: 0,
1216
+ turn: batchTurn,
1217
+ batchScopeId,
1218
+ resolvedArgsByCallId,
1219
+ }),
1220
+ ];
812
1221
  this.handleRunToolCompletions([input.lg_tool_call], outputs, config);
813
1222
  }
814
1223
  else {
@@ -859,21 +1268,38 @@ class ToolNode extends run.RunnableCallable {
859
1268
  const directCalls = filteredCalls.filter((c) => this.directToolNames.has(c.name));
860
1269
  const eventCalls = filteredCalls.filter((c) => !this.directToolNames.has(c.name));
861
1270
  // Run direct tools and event tools in parallel — they are independent
862
- const [directOutputs, eventOutputs] = (await Promise.all([
1271
+ const [directOutputs, eventDispatch] = (await Promise.all([
863
1272
  directCalls.length > 0
864
- ? Promise.all(directCalls.map((call) => this.runTool(call, config)))
1273
+ ? Promise.all(directCalls.map((call, idx) => this.runTool(call, config, {
1274
+ batchIndex: idx,
1275
+ turn: batchTurn,
1276
+ batchScopeId,
1277
+ resolvedArgsByCallId,
1278
+ })))
865
1279
  : [],
866
1280
  eventCalls.length > 0
867
1281
  ? this.dispatchToolEvents(eventCalls, config)
868
- : [],
1282
+ : { toolMessages: [], injected: [] },
869
1283
  ]));
870
1284
  if (directCalls.length > 0 && directOutputs.length > 0) {
871
1285
  this.handleRunToolCompletions(directCalls, directOutputs, config);
872
1286
  }
873
- outputs = [...directOutputs, ...eventOutputs];
1287
+ // Injected messages MUST follow ToolMessages so the AIMessage
1288
+ // tool_calls -> ToolMessage adjacency required by some providers
1289
+ // is preserved.
1290
+ outputs = [
1291
+ ...directOutputs,
1292
+ ...eventDispatch.toolMessages,
1293
+ ...eventDispatch.injected,
1294
+ ];
874
1295
  }
875
1296
  else {
876
- outputs = await Promise.all(filteredCalls.map((call) => this.runTool(call, config)));
1297
+ outputs = await Promise.all(filteredCalls.map((call, idx) => this.runTool(call, config, {
1298
+ batchIndex: idx,
1299
+ turn: batchTurn,
1300
+ batchScopeId,
1301
+ resolvedArgsByCallId,
1302
+ })));
877
1303
  this.handleRunToolCompletions(filteredCalls, outputs, config);
878
1304
  }
879
1305
  }