@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
@@ -1,6 +1,7 @@
1
1
  import { ToolCall } from '@langchain/core/messages/tool';
2
2
  import {
3
3
  ToolMessage,
4
+ HumanMessage,
4
5
  isAIMessage,
5
6
  isBaseMessage,
6
7
  } from '@langchain/core/messages';
@@ -24,7 +25,30 @@ import { ExecutionContext } from './approval/constants';
24
25
  import { RunnableCallable } from '@/utils';
25
26
  import { processToolOutput } from '@/utils/toonFormat';
26
27
  import { safeDispatchCustomEvent } from '@/utils/events';
27
- import { Constants, GraphEvents } from '@/common';
28
+ import { Constants, GraphEvents, CODE_EXECUTION_TOOLS } from '@/common';
29
+ import { executeHooks } from '@/hooks';
30
+ import type { HookRegistry, AggregatedHookResult } from '@/hooks';
31
+ import {
32
+ ToolOutputReferenceRegistry,
33
+ buildReferenceKey,
34
+ } from '@/tools/toolOutputReferences';
35
+ import type { ResolvedArgsByCallId } from '@/tools/toolOutputReferences';
36
+
37
+ /**
38
+ * Per-call batch context for `runTool`. Bundles every optional batch-scoped
39
+ * value the method needs so the signature stays at three positional params
40
+ * even as new context fields are added. Upstream-aligned (PR #117).
41
+ */
42
+ type RunToolBatchContext = {
43
+ /** Position of this call within the parent ToolNode batch. */
44
+ batchIndex?: number;
45
+ /** Batch turn shared across every call in the batch. */
46
+ turn?: number;
47
+ /** Registry partition scope (run id or anonymous batch id). */
48
+ batchScopeId?: string;
49
+ /** Batch-local sink for post-substitution args. */
50
+ resolvedArgsByCallId?: ResolvedArgsByCallId;
51
+ };
28
52
 
29
53
  /**
30
54
  * Helper to check if a value is a Send object
@@ -97,6 +121,29 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
97
121
  private toolApprovalConfig?: t.ToolApprovalConfig;
98
122
  /** Buffer for recovering truncated tool call arguments from streaming data */
99
123
  private streamingToolCallBuffer?: import('@/tools/StreamingToolCallBuffer').StreamingToolCallBuffer;
124
+ /** Hook registry threaded down from Run for tool-lifecycle events. */
125
+ private hookRegistry?: HookRegistry;
126
+ /**
127
+ * Tool output reference registry threaded down from Run / Graph
128
+ * (upstream PR #114). When set, dispatchToolEvents resolves
129
+ * `{{tool<i>turn<n>}}` placeholders in args before invoking each tool
130
+ * and stores successful outputs under their stable reference keys for
131
+ * subsequent calls in the same run to pipe through.
132
+ */
133
+ private toolOutputRegistry?: ToolOutputReferenceRegistry;
134
+ /**
135
+ * Per-batch turn counter for the registry. Increments once per
136
+ * `dispatchToolEvents` invocation so `tool<i>turn<n>` keys remain
137
+ * unique across overlapping batches in a single run.
138
+ */
139
+ private toolOutputTurn: number = 0;
140
+ /**
141
+ * Counter for synthesising scope ids when `run()` is called without a
142
+ * `run_id` in config. Each anonymous batch gets a unique
143
+ * `\0anon-<n>` scope so concurrent invocations don't collide on the
144
+ * shared `toolOutputRegistry`.
145
+ */
146
+ private anonBatchCounter: number = 0;
100
147
 
101
148
  constructor({
102
149
  tools,
@@ -114,6 +161,10 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
114
161
  directToolNames,
115
162
  streamingToolCallBuffer,
116
163
  toolApprovalConfig,
164
+ hookRegistry,
165
+ toolOutputRegistry,
166
+ toolOutputReferences,
167
+ maxToolResultChars: _maxToolResultChars,
117
168
  }: t.ToolNodeConstructorParams) {
118
169
  super({ name, tags, func: (input, config) => this.run(input, config) });
119
170
  this.toolMap = toolMap ?? new Map(tools.map((tool) => [tool.name, tool]));
@@ -129,6 +180,33 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
129
180
  this.directToolNames = directToolNames;
130
181
  this.streamingToolCallBuffer = streamingToolCallBuffer;
131
182
  this.toolApprovalConfig = toolApprovalConfig;
183
+ this.hookRegistry = hookRegistry;
184
+ /**
185
+ * Precedence: an explicitly passed `toolOutputRegistry` instance
186
+ * wins (the multi-agent case where every ToolNode shares one registry
187
+ * for the run); otherwise the per-ToolNode `toolOutputReferences`
188
+ * config builds an instance scoped to this ToolNode.
189
+ */
190
+ if (toolOutputRegistry != null) {
191
+ this.toolOutputRegistry = toolOutputRegistry;
192
+ } else if (toolOutputReferences?.enabled === true) {
193
+ this.toolOutputRegistry = new ToolOutputReferenceRegistry({
194
+ maxOutputSize: toolOutputReferences.maxOutputSize,
195
+ maxTotalSize: toolOutputReferences.maxTotalSize,
196
+ });
197
+ }
198
+ }
199
+
200
+ /**
201
+ * Test-observation accessor for the tool-output reference registry.
202
+ * @internal Exposed for test observation only. Host code should rely on
203
+ * `{{tool<i>turn<n>}}` substitution at tool-invocation time and not
204
+ * mutate the registry directly.
205
+ */
206
+ public _unsafeGetToolOutputRegistry():
207
+ | ToolOutputReferenceRegistry
208
+ | undefined {
209
+ return this.toolOutputRegistry;
132
210
  }
133
211
 
134
212
  /**
@@ -217,8 +295,7 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
217
295
  // Instead, gate the bypass on the actual routing-tool name prefix.
218
296
  if (
219
297
  this.directToolNames?.has(toolName) &&
220
- (toolName.startsWith(Constants.LC_TRANSFER_TO_) ||
221
- toolName.startsWith(Constants.LC_HANDOFF_TO_))
298
+ toolName.startsWith(Constants.LC_TRANSFER_TO_)
222
299
  ) {
223
300
  return false;
224
301
  }
@@ -284,13 +361,52 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
284
361
  }
285
362
 
286
363
  /**
287
- * Runs a single tool call with error handling
364
+ * Runs a single tool call with error handling.
365
+ *
366
+ * @param batchContext Optional per-batch context (upstream PR #117).
367
+ * Threaded from `run()` for tool output reference annotation. The
368
+ * `batchScopeId` field carries an anonymous synthetic scope when the
369
+ * caller has no `run_id`, so concurrent batches don't collide on the
370
+ * shared registry.
288
371
  */
289
372
  protected async runTool(
290
373
  call: ToolCall,
291
- config: RunnableConfig
374
+ config: RunnableConfig,
375
+ batchContext: RunToolBatchContext = {}
292
376
  ): Promise<BaseMessage | Command> {
377
+ const {
378
+ batchIndex,
379
+ turn: batchTurn,
380
+ batchScopeId,
381
+ resolvedArgsByCallId,
382
+ } = batchContext;
293
383
  const tool = this.toolMap.get(call.name);
384
+ const registry = this.toolOutputRegistry;
385
+ /**
386
+ * Precompute the reference key once per call — captured locally so
387
+ * concurrent `invoke()` calls on the same ToolNode cannot race on a
388
+ * shared turn field.
389
+ */
390
+ const refKey =
391
+ registry != null && batchIndex != null && batchTurn != null
392
+ ? buildReferenceKey(batchIndex, batchTurn)
393
+ : undefined;
394
+ /**
395
+ * Hoisted outside the try so the catch branch can stamp
396
+ * `_unresolvedRefs` into error ToolMessage metadata. This lets the
397
+ * lazy annotation transform surface a `[unresolved refs: …]` hint to
398
+ * the LLM, helping the model self-correct when its reference key
399
+ * caused the failure.
400
+ */
401
+ let unresolvedRefs: string[] = [];
402
+ /**
403
+ * Use the caller-provided `batchScopeId` when threaded from `run()`.
404
+ * Fall back to the config's `run_id` when runTool is invoked from a
405
+ * context that doesn't thread the batch context — that still
406
+ * preserves the runId-based partitioning for named runs.
407
+ */
408
+ const runId =
409
+ batchScopeId ?? (config.configurable?.run_id as string | undefined);
294
410
  try {
295
411
  if (tool === undefined) {
296
412
  throw new Error(`Tool "${call.name}" not found.`);
@@ -312,6 +428,29 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
312
428
  this.streamingToolCallBuffer.clear(call.id);
313
429
  }
314
430
 
431
+ /**
432
+ * Resolve `{{tool<i>turn<n>}}` placeholders in args against the
433
+ * registry. Captures `unresolvedRefs` so error/success branches can
434
+ * surface them to the LLM via `additional_kwargs._unresolvedRefs`.
435
+ */
436
+ if (registry != null) {
437
+ const { resolved, unresolved } = registry.resolve(runId, args);
438
+ args = resolved as typeof call.args;
439
+ unresolvedRefs = unresolved;
440
+ if (
441
+ resolvedArgsByCallId != null &&
442
+ call.id != null &&
443
+ call.id !== '' &&
444
+ resolved !== call.args &&
445
+ typeof resolved === 'object'
446
+ ) {
447
+ resolvedArgsByCallId.set(
448
+ call.id,
449
+ resolved as Record<string, unknown>
450
+ );
451
+ }
452
+ }
453
+
315
454
  // Build invoke params - LangChain extracts non-schema fields to config.toolCall
316
455
  let invokeParams: Record<string, unknown> = {
317
456
  ...call,
@@ -345,10 +484,7 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
345
484
  * session_id is always injected when available (even without tracked files)
346
485
  * so the CodeExecutor can fall back to the /files endpoint for session continuity.
347
486
  */
348
- if (
349
- call.name === Constants.EXECUTE_CODE ||
350
- call.name === Constants.PROGRAMMATIC_TOOL_CALLING
351
- ) {
487
+ if (CODE_EXECUTION_TOOLS.has(call.name)) {
352
488
  const codeSession = this.sessions?.get(Constants.EXECUTE_CODE) as
353
489
  | t.CodeSessionContext
354
490
  | undefined;
@@ -444,21 +580,58 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
444
580
  minReductionPercent: 10, // Only apply TOON when clearly beneficial
445
581
  });
446
582
 
447
- // Step 4: Return ToolMessage with processed string content
583
+ /**
584
+ * Tool output reference metadata (upstream PR #117). Register the
585
+ * raw, untruncated content so future `{{...}}` substitutions deliver
586
+ * the full payload, and stamp `_refKey` / `_refScope` /
587
+ * `_unresolvedRefs` into `additional_kwargs` for the lazy
588
+ * annotation transform to apply at LLM request time. Persisted
589
+ * `content` stays clean.
590
+ *
591
+ * For error ToolMessages from the underlying tool: bypass
592
+ * registration but still stamp `_unresolvedRefs` so the model can
593
+ * self-correct.
594
+ */
448
595
  if (isBaseMessage(output) && output._getType() === 'tool') {
449
596
  const toolMsg = output as ToolMessage;
597
+ const isError = toolMsg.status === 'error';
598
+ const refMeta = isError
599
+ ? unresolvedRefs.length > 0
600
+ ? { _unresolvedRefs: unresolvedRefs }
601
+ : undefined
602
+ : this.recordOutputReference(
603
+ runId,
604
+ rawContent,
605
+ refKey,
606
+ unresolvedRefs
607
+ );
450
608
  return new ToolMessage({
451
609
  status: toolMsg.status,
452
610
  name: toolMsg.name,
453
611
  content: processed.content,
454
612
  tool_call_id: toolMsg.tool_call_id,
613
+ ...(refMeta != null && {
614
+ additional_kwargs: {
615
+ ...toolMsg.additional_kwargs,
616
+ ...refMeta,
617
+ },
618
+ }),
455
619
  });
456
620
  } else {
621
+ const refMeta = this.recordOutputReference(
622
+ runId,
623
+ rawContent,
624
+ refKey,
625
+ unresolvedRefs
626
+ );
457
627
  return new ToolMessage({
458
628
  status: 'success',
459
629
  name: tool.name,
460
630
  content: processed.content,
461
631
  tool_call_id: call.id!,
632
+ ...(refMeta != null && {
633
+ additional_kwargs: refMeta as Record<string, unknown>,
634
+ }),
462
635
  });
463
636
  }
464
637
  } catch (_e: unknown) {
@@ -510,6 +683,9 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
510
683
  content: `Error: ${e.message}\n Please fix your mistakes.`,
511
684
  name: call.name,
512
685
  tool_call_id: call.id ?? '',
686
+ ...(unresolvedRefs.length > 0 && {
687
+ additional_kwargs: { _unresolvedRefs: unresolvedRefs },
688
+ }),
513
689
  });
514
690
  }
515
691
  }
@@ -618,6 +794,34 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
618
794
  return parsedArgs;
619
795
  }
620
796
 
797
+ /**
798
+ * Stores the raw, untruncated tool output in the registry under `refKey`
799
+ * (when registry + refKey are both present) and returns the metadata
800
+ * envelope to stamp on `ToolMessage.additional_kwargs`. The lazy
801
+ * annotation transform reads `_refKey` / `_refScope` / `_unresolvedRefs`
802
+ * at LLM request time to produce the transient annotated copy.
803
+ */
804
+ private recordOutputReference(
805
+ runId: string | undefined,
806
+ registryContent: string,
807
+ refKey: string | undefined,
808
+ unresolved: string[]
809
+ ): t.ToolMessageRefMetadata | undefined {
810
+ if (this.toolOutputRegistry != null && refKey != null) {
811
+ this.toolOutputRegistry.set(runId, refKey, registryContent);
812
+ }
813
+ if (refKey == null && unresolved.length === 0) return undefined;
814
+ const meta: t.ToolMessageRefMetadata = {};
815
+ if (refKey != null) {
816
+ meta._refKey = refKey;
817
+ // Anonymous invocations use a synthetic scope minted in run() — stamp
818
+ // it onto the message so annotateMessagesForLLM can recover it later.
819
+ if (runId != null) meta._refScope = runId;
820
+ }
821
+ if (unresolved.length > 0) meta._unresolvedRefs = unresolved;
822
+ return meta;
823
+ }
824
+
621
825
  /**
622
826
  * Builds code session context for injection into event-driven tool calls.
623
827
  * Mirrors the session injection logic in runTool() for direct execution.
@@ -822,13 +1026,41 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
822
1026
  }
823
1027
 
824
1028
  /**
825
- * Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns raw ToolMessages.
826
- * Core logic for event-driven execution, separated from output shaping.
1029
+ * Converts InjectedMessage entries into LangChain HumanMessages.
1030
+ * 'user' and 'system' both become HumanMessage to avoid provider rejections
1031
+ * (Anthropic/Google reject non-leading SystemMessages); the original role
1032
+ * and metadata are preserved in additional_kwargs for downstream consumers.
1033
+ */
1034
+ private convertInjectedMessages(
1035
+ messages: t.InjectedMessage[]
1036
+ ): BaseMessage[] {
1037
+ const converted: BaseMessage[] = [];
1038
+ for (const msg of messages) {
1039
+ const additional_kwargs: Record<string, unknown> = {
1040
+ role: msg.role,
1041
+ };
1042
+ if (msg.isMeta != null) additional_kwargs.isMeta = msg.isMeta;
1043
+ if (msg.source != null) additional_kwargs.source = msg.source;
1044
+ if (msg.skillName != null) additional_kwargs.skillName = msg.skillName;
1045
+
1046
+ converted.push(
1047
+ new HumanMessage({ content: msg.content, additional_kwargs })
1048
+ );
1049
+ }
1050
+ return converted;
1051
+ }
1052
+
1053
+ /**
1054
+ * Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns
1055
+ * the resulting ToolMessages along with any injected messages emitted by
1056
+ * the host (e.g. SkillTool body injection). Injected messages must be
1057
+ * placed AFTER the ToolMessages so the AIMessage tool_calls -> ToolMessage
1058
+ * adjacency required by some providers is preserved.
827
1059
  */
828
1060
  private async dispatchToolEvents(
829
1061
  toolCalls: ToolCall[],
830
1062
  config: RunnableConfig
831
- ): Promise<ToolMessage[]> {
1063
+ ): Promise<{ toolMessages: ToolMessage[]; injected: BaseMessage[] }> {
832
1064
  // ========================================================================
833
1065
  // HITL: Check approval for event-dispatched tools (browser, MCP, etc.)
834
1066
  // before dispatching. Uses LangGraph interrupt() for each tool needing
@@ -863,10 +1095,132 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
863
1095
 
864
1096
  // If all tools were denied, return denial messages without dispatching
865
1097
  if (approvedCalls.length === 0) {
866
- return denialMessages;
1098
+ return { toolMessages: denialMessages, injected: [] };
1099
+ }
1100
+
1101
+ const runId = config.configurable?.run_id as string | undefined;
1102
+ const threadId = config.configurable?.thread_id as string | undefined;
1103
+
1104
+ /**
1105
+ * PreToolUse hooks may deny / ask / allow each call, and may rewrite
1106
+ * `toolInput` via `updatedInput`. A denied/asked call short-circuits
1107
+ * with a synthetic error ToolMessage and fires PermissionDenied so
1108
+ * the host can audit. Survivors continue to dispatch.
1109
+ */
1110
+ const hookDenialMessages: ToolMessage[] = [];
1111
+ let postHookCalls = approvedCalls;
1112
+ if (
1113
+ runId != null &&
1114
+ this.hookRegistry?.hasHookFor('PreToolUse', runId) === true
1115
+ ) {
1116
+ const HOOK_FALLBACK: AggregatedHookResult = {
1117
+ additionalContexts: [],
1118
+ errors: [],
1119
+ };
1120
+ const surviving: ToolCall[] = [];
1121
+ const preResults = await Promise.all(
1122
+ approvedCalls.map((call) =>
1123
+ executeHooks({
1124
+ registry: this.hookRegistry!,
1125
+ input: {
1126
+ hook_event_name: 'PreToolUse',
1127
+ runId,
1128
+ threadId,
1129
+ agentId: this.agentId,
1130
+ toolName: call.name,
1131
+ toolInput: call.args as Record<string, unknown>,
1132
+ toolUseId: call.id ?? '',
1133
+ stepId: this.toolCallStepIds?.get(call.id ?? ''),
1134
+ turn: this.toolUsageCount.get(call.name) ?? 0,
1135
+ },
1136
+ sessionId: runId,
1137
+ matchQuery: call.name,
1138
+ }).catch((): AggregatedHookResult => HOOK_FALLBACK)
1139
+ )
1140
+ );
1141
+
1142
+ for (let i = 0; i < approvedCalls.length; i++) {
1143
+ const call = approvedCalls[i];
1144
+ const hookResult = preResults[i];
1145
+ const denied =
1146
+ hookResult.decision === 'deny' || hookResult.decision === 'ask';
1147
+ if (denied) {
1148
+ const reason = hookResult.reason ?? 'Blocked by hook';
1149
+ hookDenialMessages.push(
1150
+ new ToolMessage({
1151
+ status: 'error',
1152
+ content: `Blocked: ${reason}`,
1153
+ name: call.name,
1154
+ tool_call_id: call.id ?? '',
1155
+ })
1156
+ );
1157
+ if (this.hookRegistry.hasHookFor('PermissionDenied', runId)) {
1158
+ // Fire-and-forget — denial accounting must not block dispatch.
1159
+ void executeHooks({
1160
+ registry: this.hookRegistry,
1161
+ input: {
1162
+ hook_event_name: 'PermissionDenied',
1163
+ runId,
1164
+ threadId,
1165
+ agentId: this.agentId,
1166
+ toolName: call.name,
1167
+ toolInput: call.args as Record<string, unknown>,
1168
+ toolUseId: call.id ?? '',
1169
+ reason,
1170
+ },
1171
+ sessionId: runId,
1172
+ matchQuery: call.name,
1173
+ }).catch(() => {
1174
+ /* swallow — denial is informational */
1175
+ });
1176
+ }
1177
+ continue;
1178
+ }
1179
+ if (
1180
+ hookResult.updatedInput != null &&
1181
+ typeof hookResult.updatedInput === 'object'
1182
+ ) {
1183
+ call.args = hookResult.updatedInput as Record<string, unknown>;
1184
+ }
1185
+ surviving.push(call);
1186
+ }
1187
+ postHookCalls = surviving;
1188
+
1189
+ if (postHookCalls.length === 0) {
1190
+ return {
1191
+ toolMessages: [...denialMessages, ...hookDenialMessages],
1192
+ injected: [],
1193
+ };
1194
+ }
867
1195
  }
868
1196
 
869
- const requests: t.ToolCallRequest[] = approvedCalls.map((call) => {
1197
+ /**
1198
+ * Tool output reference resolution (upstream PR #114): walk each call's
1199
+ * args and substitute `{{tool<i>turn<n>}}` placeholders with the stored
1200
+ * raw output. Captured here BEFORE request shaping so the substituted
1201
+ * args flow through the rest of the dispatch unchanged.
1202
+ *
1203
+ * Failures are non-fatal: the registry resolver returns the original
1204
+ * string unchanged for unknown keys, and surfaces them via `unresolved`
1205
+ * which we currently log-only. Future work can route unresolved-key
1206
+ * complaints into a hint message for the LLM.
1207
+ */
1208
+ const batchTurn = this.toolOutputTurn++;
1209
+ if (this.toolOutputRegistry != null && runId != null) {
1210
+ const registry = this.toolOutputRegistry;
1211
+ for (const call of postHookCalls) {
1212
+ const args = call.args as Record<string, unknown> | undefined;
1213
+ if (args == null) continue;
1214
+ try {
1215
+ const { resolved } = registry.resolve(runId, args);
1216
+ call.args = resolved;
1217
+ } catch {
1218
+ /* leave args untouched on resolver failure */
1219
+ }
1220
+ }
1221
+ }
1222
+
1223
+ const requests: t.ToolCallRequest[] = postHookCalls.map((call) => {
870
1224
  const turn = this.toolUsageCount.get(call.name) ?? 0;
871
1225
  this.toolUsageCount.set(call.name, turn + 1);
872
1226
 
@@ -918,7 +1272,85 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
918
1272
 
919
1273
  this.storeCodeSessionFromResults(results, requests);
920
1274
 
921
- const eventMessages = results.map((result) => {
1275
+ const injected: BaseMessage[] = [];
1276
+ for (const result of results) {
1277
+ if (result.injectedMessages && result.injectedMessages.length > 0) {
1278
+ try {
1279
+ injected.push(
1280
+ ...this.convertInjectedMessages(result.injectedMessages)
1281
+ );
1282
+ } catch (e) {
1283
+ // eslint-disable-next-line no-console
1284
+ console.warn(
1285
+ `[ToolNode] Failed to convert injectedMessages for toolCallId=${result.toolCallId}:`,
1286
+ e instanceof Error ? e.message : e
1287
+ );
1288
+ }
1289
+ }
1290
+ }
1291
+
1292
+ /**
1293
+ * Fire PostToolUse / PostToolUseFailure hooks after results are in.
1294
+ * These run in parallel and never block the return — failures are
1295
+ * swallowed so a hook bug can't masquerade as a tool failure.
1296
+ */
1297
+ if (runId != null && this.hookRegistry != null) {
1298
+ const hasPost = this.hookRegistry.hasHookFor('PostToolUse', runId);
1299
+ const hasFail = this.hookRegistry.hasHookFor('PostToolUseFailure', runId);
1300
+ if (hasPost || hasFail) {
1301
+ const postPromises: Promise<unknown>[] = [];
1302
+ for (const result of results) {
1303
+ const request = requests.find((r) => r.id === result.toolCallId);
1304
+ if (!request) continue;
1305
+ if (result.status === 'success' && hasPost) {
1306
+ postPromises.push(
1307
+ executeHooks({
1308
+ registry: this.hookRegistry,
1309
+ input: {
1310
+ hook_event_name: 'PostToolUse',
1311
+ runId,
1312
+ threadId,
1313
+ agentId: this.agentId,
1314
+ toolName: request.name,
1315
+ toolInput: request.args as Record<string, unknown>,
1316
+ toolOutput: result.content,
1317
+ toolUseId: result.toolCallId,
1318
+ stepId: this.toolCallStepIds?.get(result.toolCallId),
1319
+ turn: request.turn,
1320
+ },
1321
+ sessionId: runId,
1322
+ matchQuery: request.name,
1323
+ }).catch(() => undefined)
1324
+ );
1325
+ } else if (result.status === 'error' && hasFail) {
1326
+ postPromises.push(
1327
+ executeHooks({
1328
+ registry: this.hookRegistry,
1329
+ input: {
1330
+ hook_event_name: 'PostToolUseFailure',
1331
+ runId,
1332
+ threadId,
1333
+ agentId: this.agentId,
1334
+ toolName: request.name,
1335
+ toolInput: request.args as Record<string, unknown>,
1336
+ toolUseId: result.toolCallId,
1337
+ error: result.errorMessage ?? 'Unknown error',
1338
+ stepId: this.toolCallStepIds?.get(result.toolCallId),
1339
+ turn: request.turn,
1340
+ },
1341
+ sessionId: runId,
1342
+ matchQuery: request.name,
1343
+ }).catch(() => undefined)
1344
+ );
1345
+ }
1346
+ }
1347
+ if (postPromises.length > 0) {
1348
+ await Promise.all(postPromises);
1349
+ }
1350
+ }
1351
+ }
1352
+
1353
+ const eventMessages = results.map((result, idx) => {
922
1354
  const request = requests.find((r) => r.id === result.toolCallId);
923
1355
  const toolName = request?.name ?? 'unknown';
924
1356
  const stepId = this.toolCallStepIds?.get(result.toolCallId) ?? '';
@@ -947,12 +1379,40 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
947
1379
  typeof result.content === 'string'
948
1380
  ? result.content
949
1381
  : JSON.stringify(result.content);
1382
+ /**
1383
+ * Tool output reference — lazy annotation (upstream PRs #114 + #117).
1384
+ * Register the raw output under `tool<idx>turn<turn>` in the
1385
+ * registry but leave `ToolMessage.content` clean. Stamp the ref
1386
+ * metadata into `additional_kwargs` instead. The lazy
1387
+ * `annotateMessagesForLLM` transform applies the visible
1388
+ * `[ref: …]` / `_ref` annotation only on the transient copy sent
1389
+ * to the model. Persisted message stays unannotated so
1390
+ * conversation exports / pruning / token accounting stay clean.
1391
+ */
1392
+ const additionalKwargs: Record<string, unknown> = {};
1393
+ if (this.toolOutputRegistry != null && runId != null) {
1394
+ try {
1395
+ const refKey = buildReferenceKey(idx, batchTurn);
1396
+ this.toolOutputRegistry.set(runId, refKey, contentString);
1397
+ const meta: t.ToolMessageRefMetadata = {
1398
+ _refKey: refKey,
1399
+ _refScope: runId,
1400
+ };
1401
+ Object.assign(additionalKwargs, meta);
1402
+ } catch {
1403
+ /* registry store failure is non-fatal — message stays clean, no annotation */
1404
+ }
1405
+ }
950
1406
  toolMessage = new ToolMessage({
951
1407
  status: 'success',
952
1408
  name: toolName,
953
1409
  content: contentString,
954
1410
  artifact: result.artifact,
955
1411
  tool_call_id: result.toolCallId,
1412
+ additional_kwargs:
1413
+ Object.keys(additionalKwargs).length > 0
1414
+ ? additionalKwargs
1415
+ : undefined,
956
1416
  });
957
1417
  }
958
1418
 
@@ -985,7 +1445,14 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
985
1445
  return toolMessage;
986
1446
  });
987
1447
 
988
- return [...denialMessages, ...eventMessages];
1448
+ return {
1449
+ toolMessages: [
1450
+ ...denialMessages,
1451
+ ...hookDenialMessages,
1452
+ ...eventMessages,
1453
+ ],
1454
+ injected,
1455
+ };
989
1456
  }
990
1457
 
991
1458
  /**
@@ -998,13 +1465,32 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
998
1465
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
999
1466
  input: any
1000
1467
  ): Promise<T> {
1001
- const outputs = await this.dispatchToolEvents(toolCalls, config);
1468
+ const { toolMessages, injected } = await this.dispatchToolEvents(
1469
+ toolCalls,
1470
+ config
1471
+ );
1472
+ const outputs: BaseMessage[] = [...toolMessages, ...injected];
1002
1473
  return (Array.isArray(input) ? outputs : { messages: outputs }) as T;
1003
1474
  }
1004
1475
 
1005
1476
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1006
1477
  protected async run(input: any, config: RunnableConfig): Promise<T> {
1007
1478
  this.toolCallTurns.clear();
1479
+ /**
1480
+ * Per-batch local map for resolved (post-substitution) args. Lives
1481
+ * on the stack so concurrent `run()` calls on the same ToolNode
1482
+ * cannot read or wipe each other's entries.
1483
+ */
1484
+ const resolvedArgsByCallId: ResolvedArgsByCallId = new Map();
1485
+ /**
1486
+ * Claim this batch's turn synchronously from the registry (or fall
1487
+ * back to 0 when the feature is disabled). For anonymous callers
1488
+ * (no `run_id` in config), mint a unique per-batch scope id so two
1489
+ * concurrent anonymous invocations don't target the same bucket.
1490
+ */
1491
+ const incomingRunId = config.configurable?.run_id as string | undefined;
1492
+ const batchScopeId = incomingRunId ?? `\0anon-${this.anonBatchCounter++}`;
1493
+ const batchTurn = this.toolOutputRegistry?.nextTurn(batchScopeId) ?? 0;
1008
1494
  let outputs: (BaseMessage | Command)[];
1009
1495
 
1010
1496
  if (this.isSendInput(input)) {
@@ -1012,7 +1498,14 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
1012
1498
  if (this.eventDrivenMode && isDirectTool !== true) {
1013
1499
  return this.executeViaEvent([input.lg_tool_call], config, input);
1014
1500
  }
1015
- outputs = [await this.runTool(input.lg_tool_call, config)];
1501
+ outputs = [
1502
+ await this.runTool(input.lg_tool_call, config, {
1503
+ batchIndex: 0,
1504
+ turn: batchTurn,
1505
+ batchScopeId,
1506
+ resolvedArgsByCallId,
1507
+ }),
1508
+ ];
1016
1509
  this.handleRunToolCompletions([input.lg_tool_call], outputs, config);
1017
1510
  } else {
1018
1511
  let messages: BaseMessage[];
@@ -1081,23 +1574,52 @@ export class ToolNode<T = any> extends RunnableCallable<T, T> {
1081
1574
  );
1082
1575
 
1083
1576
  // Run direct tools and event tools in parallel — they are independent
1084
- const [directOutputs, eventOutputs] = (await Promise.all([
1577
+ const [directOutputs, eventDispatch] = (await Promise.all([
1085
1578
  directCalls.length > 0
1086
- ? Promise.all(directCalls.map((call) => this.runTool(call, config)))
1087
- : [],
1579
+ ? Promise.all(
1580
+ directCalls.map((call, idx) =>
1581
+ this.runTool(call, config, {
1582
+ batchIndex: idx,
1583
+ turn: batchTurn,
1584
+ batchScopeId,
1585
+ resolvedArgsByCallId,
1586
+ })
1587
+ )
1588
+ )
1589
+ : ([] as (BaseMessage | Command)[]),
1088
1590
  eventCalls.length > 0
1089
1591
  ? this.dispatchToolEvents(eventCalls, config)
1090
- : [],
1091
- ])) as [(BaseMessage | Command)[], ToolMessage[]];
1592
+ : ({ toolMessages: [], injected: [] } as {
1593
+ toolMessages: ToolMessage[];
1594
+ injected: BaseMessage[];
1595
+ }),
1596
+ ])) as [
1597
+ (BaseMessage | Command)[],
1598
+ { toolMessages: ToolMessage[]; injected: BaseMessage[] },
1599
+ ];
1092
1600
 
1093
1601
  if (directCalls.length > 0 && directOutputs.length > 0) {
1094
1602
  this.handleRunToolCompletions(directCalls, directOutputs, config);
1095
1603
  }
1096
1604
 
1097
- outputs = [...directOutputs, ...eventOutputs];
1605
+ // Injected messages MUST follow ToolMessages so the AIMessage
1606
+ // tool_calls -> ToolMessage adjacency required by some providers
1607
+ // is preserved.
1608
+ outputs = [
1609
+ ...directOutputs,
1610
+ ...eventDispatch.toolMessages,
1611
+ ...eventDispatch.injected,
1612
+ ];
1098
1613
  } else {
1099
1614
  outputs = await Promise.all(
1100
- filteredCalls.map((call) => this.runTool(call, config))
1615
+ filteredCalls.map((call, idx) =>
1616
+ this.runTool(call, config, {
1617
+ batchIndex: idx,
1618
+ turn: batchTurn,
1619
+ batchScopeId,
1620
+ resolvedArgsByCallId,
1621
+ })
1622
+ )
1101
1623
  );
1102
1624
  this.handleRunToolCompletions(filteredCalls, outputs, config);
1103
1625
  }