@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,17 +1,16 @@
1
- import { ToolMessage, isBaseMessage, isAIMessage } from '@langchain/core/messages';
1
+ import { ToolMessage, isBaseMessage, HumanMessage, isAIMessage } from '@langchain/core/messages';
2
2
  import { interrupt, isCommand, isGraphInterrupt, Command, Send, END } from '@langchain/langgraph';
3
3
  import { ExecutionContext } from './approval/constants.mjs';
4
- import { Constants, GraphEvents } from '../common/enum.mjs';
4
+ import { Constants, GraphEvents, CODE_EXECUTION_TOOLS } from '../common/enum.mjs';
5
5
  import 'nanoid';
6
6
  import '../messages/core.mjs';
7
7
  import { processToolOutput } from '../utils/toonFormat.mjs';
8
8
  import { RunnableCallable } from '../utils/run.mjs';
9
9
  import 'ai-tokenizer';
10
10
  import 'zod-to-json-schema';
11
- import 'axios';
12
- import 'https-proxy-agent';
13
- import '../utils/credentials.mjs';
14
11
  import { safeDispatchCustomEvent } from '../utils/events.mjs';
12
+ import { executeHooks } from '../hooks/executeHooks.mjs';
13
+ import { ToolOutputReferenceRegistry, buildReferenceKey } from './toolOutputReferences.mjs';
15
14
 
16
15
  /**
17
16
  * Helper to check if a value is a Send object
@@ -82,7 +81,30 @@ class ToolNode extends RunnableCallable {
82
81
  toolApprovalConfig;
83
82
  /** Buffer for recovering truncated tool call arguments from streaming data */
84
83
  streamingToolCallBuffer;
85
- constructor({ tools, toolMap, name, tags, errorHandler, toolCallStepIds, handleToolErrors, loadRuntimeTools, toolRegistry, sessions, eventDrivenMode, agentId, directToolNames, streamingToolCallBuffer, toolApprovalConfig, }) {
84
+ /** Hook registry threaded down from Run for tool-lifecycle events. */
85
+ hookRegistry;
86
+ /**
87
+ * Tool output reference registry threaded down from Run / Graph
88
+ * (upstream PR #114). When set, dispatchToolEvents resolves
89
+ * `{{tool<i>turn<n>}}` placeholders in args before invoking each tool
90
+ * and stores successful outputs under their stable reference keys for
91
+ * subsequent calls in the same run to pipe through.
92
+ */
93
+ toolOutputRegistry;
94
+ /**
95
+ * Per-batch turn counter for the registry. Increments once per
96
+ * `dispatchToolEvents` invocation so `tool<i>turn<n>` keys remain
97
+ * unique across overlapping batches in a single run.
98
+ */
99
+ toolOutputTurn = 0;
100
+ /**
101
+ * Counter for synthesising scope ids when `run()` is called without a
102
+ * `run_id` in config. Each anonymous batch gets a unique
103
+ * `\0anon-<n>` scope so concurrent invocations don't collide on the
104
+ * shared `toolOutputRegistry`.
105
+ */
106
+ anonBatchCounter = 0;
107
+ constructor({ tools, toolMap, name, tags, errorHandler, toolCallStepIds, handleToolErrors, loadRuntimeTools, toolRegistry, sessions, eventDrivenMode, agentId, directToolNames, streamingToolCallBuffer, toolApprovalConfig, hookRegistry, toolOutputRegistry, toolOutputReferences, maxToolResultChars: _maxToolResultChars, }) {
86
108
  super({ name, tags, func: (input, config) => this.run(input, config) });
87
109
  this.toolMap = toolMap ?? new Map(tools.map((tool) => [tool.name, tool]));
88
110
  this.toolCallStepIds = toolCallStepIds;
@@ -97,6 +119,31 @@ class ToolNode extends RunnableCallable {
97
119
  this.directToolNames = directToolNames;
98
120
  this.streamingToolCallBuffer = streamingToolCallBuffer;
99
121
  this.toolApprovalConfig = toolApprovalConfig;
122
+ this.hookRegistry = hookRegistry;
123
+ /**
124
+ * Precedence: an explicitly passed `toolOutputRegistry` instance
125
+ * wins (the multi-agent case where every ToolNode shares one registry
126
+ * for the run); otherwise the per-ToolNode `toolOutputReferences`
127
+ * config builds an instance scoped to this ToolNode.
128
+ */
129
+ if (toolOutputRegistry != null) {
130
+ this.toolOutputRegistry = toolOutputRegistry;
131
+ }
132
+ else if (toolOutputReferences?.enabled === true) {
133
+ this.toolOutputRegistry = new ToolOutputReferenceRegistry({
134
+ maxOutputSize: toolOutputReferences.maxOutputSize,
135
+ maxTotalSize: toolOutputReferences.maxTotalSize,
136
+ });
137
+ }
138
+ }
139
+ /**
140
+ * Test-observation accessor for the tool-output reference registry.
141
+ * @internal Exposed for test observation only. Host code should rely on
142
+ * `{{tool<i>turn<n>}}` substitution at tool-invocation time and not
143
+ * mutate the registry directly.
144
+ */
145
+ _unsafeGetToolOutputRegistry() {
146
+ return this.toolOutputRegistry;
100
147
  }
101
148
  /**
102
149
  * Returns cached programmatic tools, computing once on first access.
@@ -164,8 +211,7 @@ class ToolNode extends RunnableCallable {
164
211
  // `ask_user` execute without ever firing interrupt(), defeating the whole tool.
165
212
  // Instead, gate the bypass on the actual routing-tool name prefix.
166
213
  if (this.directToolNames?.has(toolName) &&
167
- (toolName.startsWith(Constants.LC_TRANSFER_TO_) ||
168
- toolName.startsWith(Constants.LC_HANDOFF_TO_))) {
214
+ toolName.startsWith(Constants.LC_TRANSFER_TO_)) {
169
215
  return false;
170
216
  }
171
217
  // Determine the effective policy for this tool
@@ -219,10 +265,41 @@ class ToolNode extends RunnableCallable {
219
265
  return response;
220
266
  }
221
267
  /**
222
- * Runs a single tool call with error handling
268
+ * Runs a single tool call with error handling.
269
+ *
270
+ * @param batchContext Optional per-batch context (upstream PR #117).
271
+ * Threaded from `run()` for tool output reference annotation. The
272
+ * `batchScopeId` field carries an anonymous synthetic scope when the
273
+ * caller has no `run_id`, so concurrent batches don't collide on the
274
+ * shared registry.
223
275
  */
224
- async runTool(call, config) {
276
+ async runTool(call, config, batchContext = {}) {
277
+ const { batchIndex, turn: batchTurn, batchScopeId, resolvedArgsByCallId, } = batchContext;
225
278
  const tool = this.toolMap.get(call.name);
279
+ const registry = this.toolOutputRegistry;
280
+ /**
281
+ * Precompute the reference key once per call — captured locally so
282
+ * concurrent `invoke()` calls on the same ToolNode cannot race on a
283
+ * shared turn field.
284
+ */
285
+ const refKey = registry != null && batchIndex != null && batchTurn != null
286
+ ? buildReferenceKey(batchIndex, batchTurn)
287
+ : undefined;
288
+ /**
289
+ * Hoisted outside the try so the catch branch can stamp
290
+ * `_unresolvedRefs` into error ToolMessage metadata. This lets the
291
+ * lazy annotation transform surface a `[unresolved refs: …]` hint to
292
+ * the LLM, helping the model self-correct when its reference key
293
+ * caused the failure.
294
+ */
295
+ let unresolvedRefs = [];
296
+ /**
297
+ * Use the caller-provided `batchScopeId` when threaded from `run()`.
298
+ * Fall back to the config's `run_id` when runTool is invoked from a
299
+ * context that doesn't thread the batch context — that still
300
+ * preserves the runId-based partitioning for named runs.
301
+ */
302
+ const runId = batchScopeId ?? config.configurable?.run_id;
226
303
  try {
227
304
  if (tool === undefined) {
228
305
  throw new Error(`Tool "${call.name}" not found.`);
@@ -242,6 +319,23 @@ class ToolNode extends RunnableCallable {
242
319
  args = this.recoverTruncatedArgs(call.name, call.id, args);
243
320
  this.streamingToolCallBuffer.clear(call.id);
244
321
  }
322
+ /**
323
+ * Resolve `{{tool<i>turn<n>}}` placeholders in args against the
324
+ * registry. Captures `unresolvedRefs` so error/success branches can
325
+ * surface them to the LLM via `additional_kwargs._unresolvedRefs`.
326
+ */
327
+ if (registry != null) {
328
+ const { resolved, unresolved } = registry.resolve(runId, args);
329
+ args = resolved;
330
+ unresolvedRefs = unresolved;
331
+ if (resolvedArgsByCallId != null &&
332
+ call.id != null &&
333
+ call.id !== '' &&
334
+ resolved !== call.args &&
335
+ typeof resolved === 'object') {
336
+ resolvedArgsByCallId.set(call.id, resolved);
337
+ }
338
+ }
245
339
  // Build invoke params - LangChain extracts non-schema fields to config.toolCall
246
340
  let invokeParams = {
247
341
  ...call,
@@ -274,8 +368,7 @@ class ToolNode extends RunnableCallable {
274
368
  * session_id is always injected when available (even without tracked files)
275
369
  * so the CodeExecutor can fall back to the /files endpoint for session continuity.
276
370
  */
277
- if (call.name === Constants.EXECUTE_CODE ||
278
- call.name === Constants.PROGRAMMATIC_TOOL_CALLING) {
371
+ if (CODE_EXECUTION_TOOLS.has(call.name)) {
279
372
  const codeSession = this.sessions?.get(Constants.EXECUTE_CODE);
280
373
  if (codeSession != null && codeSession.session_id !== '') {
281
374
  /**
@@ -360,22 +453,49 @@ class ToolNode extends RunnableCallable {
360
453
  minSizeForToon: 1000,
361
454
  minReductionPercent: 10, // Only apply TOON when clearly beneficial
362
455
  });
363
- // Step 4: Return ToolMessage with processed string content
456
+ /**
457
+ * Tool output reference metadata (upstream PR #117). Register the
458
+ * raw, untruncated content so future `{{...}}` substitutions deliver
459
+ * the full payload, and stamp `_refKey` / `_refScope` /
460
+ * `_unresolvedRefs` into `additional_kwargs` for the lazy
461
+ * annotation transform to apply at LLM request time. Persisted
462
+ * `content` stays clean.
463
+ *
464
+ * For error ToolMessages from the underlying tool: bypass
465
+ * registration but still stamp `_unresolvedRefs` so the model can
466
+ * self-correct.
467
+ */
364
468
  if (isBaseMessage(output) && output._getType() === 'tool') {
365
469
  const toolMsg = output;
470
+ const isError = toolMsg.status === 'error';
471
+ const refMeta = isError
472
+ ? unresolvedRefs.length > 0
473
+ ? { _unresolvedRefs: unresolvedRefs }
474
+ : undefined
475
+ : this.recordOutputReference(runId, rawContent, refKey, unresolvedRefs);
366
476
  return new ToolMessage({
367
477
  status: toolMsg.status,
368
478
  name: toolMsg.name,
369
479
  content: processed.content,
370
480
  tool_call_id: toolMsg.tool_call_id,
481
+ ...(refMeta != null && {
482
+ additional_kwargs: {
483
+ ...toolMsg.additional_kwargs,
484
+ ...refMeta,
485
+ },
486
+ }),
371
487
  });
372
488
  }
373
489
  else {
490
+ const refMeta = this.recordOutputReference(runId, rawContent, refKey, unresolvedRefs);
374
491
  return new ToolMessage({
375
492
  status: 'success',
376
493
  name: tool.name,
377
494
  content: processed.content,
378
495
  tool_call_id: call.id,
496
+ ...(refMeta != null && {
497
+ additional_kwargs: refMeta,
498
+ }),
379
499
  });
380
500
  }
381
501
  }
@@ -425,6 +545,9 @@ class ToolNode extends RunnableCallable {
425
545
  content: `Error: ${e.message}\n Please fix your mistakes.`,
426
546
  name: call.name,
427
547
  tool_call_id: call.id ?? '',
548
+ ...(unresolvedRefs.length > 0 && {
549
+ additional_kwargs: { _unresolvedRefs: unresolvedRefs },
550
+ }),
428
551
  });
429
552
  }
430
553
  }
@@ -508,6 +631,31 @@ class ToolNode extends RunnableCallable {
508
631
  }
509
632
  return parsedArgs;
510
633
  }
634
+ /**
635
+ * Stores the raw, untruncated tool output in the registry under `refKey`
636
+ * (when registry + refKey are both present) and returns the metadata
637
+ * envelope to stamp on `ToolMessage.additional_kwargs`. The lazy
638
+ * annotation transform reads `_refKey` / `_refScope` / `_unresolvedRefs`
639
+ * at LLM request time to produce the transient annotated copy.
640
+ */
641
+ recordOutputReference(runId, registryContent, refKey, unresolved) {
642
+ if (this.toolOutputRegistry != null && refKey != null) {
643
+ this.toolOutputRegistry.set(runId, refKey, registryContent);
644
+ }
645
+ if (refKey == null && unresolved.length === 0)
646
+ return undefined;
647
+ const meta = {};
648
+ if (refKey != null) {
649
+ meta._refKey = refKey;
650
+ // Anonymous invocations use a synthetic scope minted in run() — stamp
651
+ // it onto the message so annotateMessagesForLLM can recover it later.
652
+ if (runId != null)
653
+ meta._refScope = runId;
654
+ }
655
+ if (unresolved.length > 0)
656
+ meta._unresolvedRefs = unresolved;
657
+ return meta;
658
+ }
511
659
  /**
512
660
  * Builds code session context for injection into event-driven tool calls.
513
661
  * Mirrors the session injection logic in runTool() for direct execution.
@@ -662,8 +810,33 @@ class ToolNode extends RunnableCallable {
662
810
  }
663
811
  }
664
812
  /**
665
- * Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns raw ToolMessages.
666
- * Core logic for event-driven execution, separated from output shaping.
813
+ * Converts InjectedMessage entries into LangChain HumanMessages.
814
+ * 'user' and 'system' both become HumanMessage to avoid provider rejections
815
+ * (Anthropic/Google reject non-leading SystemMessages); the original role
816
+ * and metadata are preserved in additional_kwargs for downstream consumers.
817
+ */
818
+ convertInjectedMessages(messages) {
819
+ const converted = [];
820
+ for (const msg of messages) {
821
+ const additional_kwargs = {
822
+ role: msg.role,
823
+ };
824
+ if (msg.isMeta != null)
825
+ additional_kwargs.isMeta = msg.isMeta;
826
+ if (msg.source != null)
827
+ additional_kwargs.source = msg.source;
828
+ if (msg.skillName != null)
829
+ additional_kwargs.skillName = msg.skillName;
830
+ converted.push(new HumanMessage({ content: msg.content, additional_kwargs }));
831
+ }
832
+ return converted;
833
+ }
834
+ /**
835
+ * Dispatches tool calls to the host via ON_TOOL_EXECUTE event and returns
836
+ * the resulting ToolMessages along with any injected messages emitted by
837
+ * the host (e.g. SkillTool body injection). Injected messages must be
838
+ * placed AFTER the ToolMessages so the AIMessage tool_calls -> ToolMessage
839
+ * adjacency required by some providers is preserved.
667
840
  */
668
841
  async dispatchToolEvents(toolCalls, config) {
669
842
  // ========================================================================
@@ -694,9 +867,117 @@ class ToolNode extends RunnableCallable {
694
867
  }
695
868
  // If all tools were denied, return denial messages without dispatching
696
869
  if (approvedCalls.length === 0) {
697
- return denialMessages;
870
+ return { toolMessages: denialMessages, injected: [] };
871
+ }
872
+ const runId = config.configurable?.run_id;
873
+ const threadId = config.configurable?.thread_id;
874
+ /**
875
+ * PreToolUse hooks may deny / ask / allow each call, and may rewrite
876
+ * `toolInput` via `updatedInput`. A denied/asked call short-circuits
877
+ * with a synthetic error ToolMessage and fires PermissionDenied so
878
+ * the host can audit. Survivors continue to dispatch.
879
+ */
880
+ const hookDenialMessages = [];
881
+ let postHookCalls = approvedCalls;
882
+ if (runId != null &&
883
+ this.hookRegistry?.hasHookFor('PreToolUse', runId) === true) {
884
+ const HOOK_FALLBACK = {
885
+ additionalContexts: [],
886
+ errors: [],
887
+ };
888
+ const surviving = [];
889
+ const preResults = await Promise.all(approvedCalls.map((call) => executeHooks({
890
+ registry: this.hookRegistry,
891
+ input: {
892
+ hook_event_name: 'PreToolUse',
893
+ runId,
894
+ threadId,
895
+ agentId: this.agentId,
896
+ toolName: call.name,
897
+ toolInput: call.args,
898
+ toolUseId: call.id ?? '',
899
+ stepId: this.toolCallStepIds?.get(call.id ?? ''),
900
+ turn: this.toolUsageCount.get(call.name) ?? 0,
901
+ },
902
+ sessionId: runId,
903
+ matchQuery: call.name,
904
+ }).catch(() => HOOK_FALLBACK)));
905
+ for (let i = 0; i < approvedCalls.length; i++) {
906
+ const call = approvedCalls[i];
907
+ const hookResult = preResults[i];
908
+ const denied = hookResult.decision === 'deny' || hookResult.decision === 'ask';
909
+ if (denied) {
910
+ const reason = hookResult.reason ?? 'Blocked by hook';
911
+ hookDenialMessages.push(new ToolMessage({
912
+ status: 'error',
913
+ content: `Blocked: ${reason}`,
914
+ name: call.name,
915
+ tool_call_id: call.id ?? '',
916
+ }));
917
+ if (this.hookRegistry.hasHookFor('PermissionDenied', runId)) {
918
+ // Fire-and-forget — denial accounting must not block dispatch.
919
+ void executeHooks({
920
+ registry: this.hookRegistry,
921
+ input: {
922
+ hook_event_name: 'PermissionDenied',
923
+ runId,
924
+ threadId,
925
+ agentId: this.agentId,
926
+ toolName: call.name,
927
+ toolInput: call.args,
928
+ toolUseId: call.id ?? '',
929
+ reason,
930
+ },
931
+ sessionId: runId,
932
+ matchQuery: call.name,
933
+ }).catch(() => {
934
+ /* swallow — denial is informational */
935
+ });
936
+ }
937
+ continue;
938
+ }
939
+ if (hookResult.updatedInput != null &&
940
+ typeof hookResult.updatedInput === 'object') {
941
+ call.args = hookResult.updatedInput;
942
+ }
943
+ surviving.push(call);
944
+ }
945
+ postHookCalls = surviving;
946
+ if (postHookCalls.length === 0) {
947
+ return {
948
+ toolMessages: [...denialMessages, ...hookDenialMessages],
949
+ injected: [],
950
+ };
951
+ }
698
952
  }
699
- const requests = approvedCalls.map((call) => {
953
+ /**
954
+ * Tool output reference resolution (upstream PR #114): walk each call's
955
+ * args and substitute `{{tool<i>turn<n>}}` placeholders with the stored
956
+ * raw output. Captured here BEFORE request shaping so the substituted
957
+ * args flow through the rest of the dispatch unchanged.
958
+ *
959
+ * Failures are non-fatal: the registry resolver returns the original
960
+ * string unchanged for unknown keys, and surfaces them via `unresolved`
961
+ * which we currently log-only. Future work can route unresolved-key
962
+ * complaints into a hint message for the LLM.
963
+ */
964
+ const batchTurn = this.toolOutputTurn++;
965
+ if (this.toolOutputRegistry != null && runId != null) {
966
+ const registry = this.toolOutputRegistry;
967
+ for (const call of postHookCalls) {
968
+ const args = call.args;
969
+ if (args == null)
970
+ continue;
971
+ try {
972
+ const { resolved } = registry.resolve(runId, args);
973
+ call.args = resolved;
974
+ }
975
+ catch {
976
+ /* leave args untouched on resolver failure */
977
+ }
978
+ }
979
+ }
980
+ const requests = postHookCalls.map((call) => {
700
981
  const turn = this.toolUsageCount.get(call.name) ?? 0;
701
982
  this.toolUsageCount.set(call.name, turn + 1);
702
983
  // Recover truncated args from streaming buffer (same as runTool path)
@@ -731,7 +1012,77 @@ class ToolNode extends RunnableCallable {
731
1012
  safeDispatchCustomEvent(GraphEvents.ON_TOOL_EXECUTE, request, config);
732
1013
  });
733
1014
  this.storeCodeSessionFromResults(results, requests);
734
- const eventMessages = results.map((result) => {
1015
+ const injected = [];
1016
+ for (const result of results) {
1017
+ if (result.injectedMessages && result.injectedMessages.length > 0) {
1018
+ try {
1019
+ injected.push(...this.convertInjectedMessages(result.injectedMessages));
1020
+ }
1021
+ catch (e) {
1022
+ // eslint-disable-next-line no-console
1023
+ console.warn(`[ToolNode] Failed to convert injectedMessages for toolCallId=${result.toolCallId}:`, e instanceof Error ? e.message : e);
1024
+ }
1025
+ }
1026
+ }
1027
+ /**
1028
+ * Fire PostToolUse / PostToolUseFailure hooks after results are in.
1029
+ * These run in parallel and never block the return — failures are
1030
+ * swallowed so a hook bug can't masquerade as a tool failure.
1031
+ */
1032
+ if (runId != null && this.hookRegistry != null) {
1033
+ const hasPost = this.hookRegistry.hasHookFor('PostToolUse', runId);
1034
+ const hasFail = this.hookRegistry.hasHookFor('PostToolUseFailure', runId);
1035
+ if (hasPost || hasFail) {
1036
+ const postPromises = [];
1037
+ for (const result of results) {
1038
+ const request = requests.find((r) => r.id === result.toolCallId);
1039
+ if (!request)
1040
+ continue;
1041
+ if (result.status === 'success' && hasPost) {
1042
+ postPromises.push(executeHooks({
1043
+ registry: this.hookRegistry,
1044
+ input: {
1045
+ hook_event_name: 'PostToolUse',
1046
+ runId,
1047
+ threadId,
1048
+ agentId: this.agentId,
1049
+ toolName: request.name,
1050
+ toolInput: request.args,
1051
+ toolOutput: result.content,
1052
+ toolUseId: result.toolCallId,
1053
+ stepId: this.toolCallStepIds?.get(result.toolCallId),
1054
+ turn: request.turn,
1055
+ },
1056
+ sessionId: runId,
1057
+ matchQuery: request.name,
1058
+ }).catch(() => undefined));
1059
+ }
1060
+ else if (result.status === 'error' && hasFail) {
1061
+ postPromises.push(executeHooks({
1062
+ registry: this.hookRegistry,
1063
+ input: {
1064
+ hook_event_name: 'PostToolUseFailure',
1065
+ runId,
1066
+ threadId,
1067
+ agentId: this.agentId,
1068
+ toolName: request.name,
1069
+ toolInput: request.args,
1070
+ toolUseId: result.toolCallId,
1071
+ error: result.errorMessage ?? 'Unknown error',
1072
+ stepId: this.toolCallStepIds?.get(result.toolCallId),
1073
+ turn: request.turn,
1074
+ },
1075
+ sessionId: runId,
1076
+ matchQuery: request.name,
1077
+ }).catch(() => undefined));
1078
+ }
1079
+ }
1080
+ if (postPromises.length > 0) {
1081
+ await Promise.all(postPromises);
1082
+ }
1083
+ }
1084
+ }
1085
+ const eventMessages = results.map((result, idx) => {
735
1086
  const request = requests.find((r) => r.id === result.toolCallId);
736
1087
  const toolName = request?.name ?? 'unknown';
737
1088
  const stepId = this.toolCallStepIds?.get(result.toolCallId) ?? '';
@@ -757,12 +1108,40 @@ class ToolNode extends RunnableCallable {
757
1108
  typeof result.content === 'string'
758
1109
  ? result.content
759
1110
  : JSON.stringify(result.content);
1111
+ /**
1112
+ * Tool output reference — lazy annotation (upstream PRs #114 + #117).
1113
+ * Register the raw output under `tool<idx>turn<turn>` in the
1114
+ * registry but leave `ToolMessage.content` clean. Stamp the ref
1115
+ * metadata into `additional_kwargs` instead. The lazy
1116
+ * `annotateMessagesForLLM` transform applies the visible
1117
+ * `[ref: …]` / `_ref` annotation only on the transient copy sent
1118
+ * to the model. Persisted message stays unannotated so
1119
+ * conversation exports / pruning / token accounting stay clean.
1120
+ */
1121
+ const additionalKwargs = {};
1122
+ if (this.toolOutputRegistry != null && runId != null) {
1123
+ try {
1124
+ const refKey = buildReferenceKey(idx, batchTurn);
1125
+ this.toolOutputRegistry.set(runId, refKey, contentString);
1126
+ const meta = {
1127
+ _refKey: refKey,
1128
+ _refScope: runId,
1129
+ };
1130
+ Object.assign(additionalKwargs, meta);
1131
+ }
1132
+ catch {
1133
+ /* registry store failure is non-fatal — message stays clean, no annotation */
1134
+ }
1135
+ }
760
1136
  toolMessage = new ToolMessage({
761
1137
  status: 'success',
762
1138
  name: toolName,
763
1139
  content: contentString,
764
1140
  artifact: result.artifact,
765
1141
  tool_call_id: result.toolCallId,
1142
+ additional_kwargs: Object.keys(additionalKwargs).length > 0
1143
+ ? additionalKwargs
1144
+ : undefined,
766
1145
  });
767
1146
  }
768
1147
  const tool_call = {
@@ -785,7 +1164,14 @@ class ToolNode extends RunnableCallable {
785
1164
  safeDispatchCustomEvent(GraphEvents.ON_RUN_STEP_COMPLETED, runStepCompletedData, config);
786
1165
  return toolMessage;
787
1166
  });
788
- return [...denialMessages, ...eventMessages];
1167
+ return {
1168
+ toolMessages: [
1169
+ ...denialMessages,
1170
+ ...hookDenialMessages,
1171
+ ...eventMessages,
1172
+ ],
1173
+ injected,
1174
+ };
789
1175
  }
790
1176
  /**
791
1177
  * Execute all tool calls via ON_TOOL_EXECUTE event dispatch.
@@ -794,19 +1180,42 @@ class ToolNode extends RunnableCallable {
794
1180
  async executeViaEvent(toolCalls, config,
795
1181
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
796
1182
  input) {
797
- const outputs = await this.dispatchToolEvents(toolCalls, config);
1183
+ const { toolMessages, injected } = await this.dispatchToolEvents(toolCalls, config);
1184
+ const outputs = [...toolMessages, ...injected];
798
1185
  return (Array.isArray(input) ? outputs : { messages: outputs });
799
1186
  }
800
1187
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
801
1188
  async run(input, config) {
802
1189
  this.toolCallTurns.clear();
1190
+ /**
1191
+ * Per-batch local map for resolved (post-substitution) args. Lives
1192
+ * on the stack so concurrent `run()` calls on the same ToolNode
1193
+ * cannot read or wipe each other's entries.
1194
+ */
1195
+ const resolvedArgsByCallId = new Map();
1196
+ /**
1197
+ * Claim this batch's turn synchronously from the registry (or fall
1198
+ * back to 0 when the feature is disabled). For anonymous callers
1199
+ * (no `run_id` in config), mint a unique per-batch scope id so two
1200
+ * concurrent anonymous invocations don't target the same bucket.
1201
+ */
1202
+ const incomingRunId = config.configurable?.run_id;
1203
+ const batchScopeId = incomingRunId ?? `\0anon-${this.anonBatchCounter++}`;
1204
+ const batchTurn = this.toolOutputRegistry?.nextTurn(batchScopeId) ?? 0;
803
1205
  let outputs;
804
1206
  if (this.isSendInput(input)) {
805
1207
  const isDirectTool = this.directToolNames?.has(input.lg_tool_call.name);
806
1208
  if (this.eventDrivenMode && isDirectTool !== true) {
807
1209
  return this.executeViaEvent([input.lg_tool_call], config, input);
808
1210
  }
809
- outputs = [await this.runTool(input.lg_tool_call, config)];
1211
+ outputs = [
1212
+ await this.runTool(input.lg_tool_call, config, {
1213
+ batchIndex: 0,
1214
+ turn: batchTurn,
1215
+ batchScopeId,
1216
+ resolvedArgsByCallId,
1217
+ }),
1218
+ ];
810
1219
  this.handleRunToolCompletions([input.lg_tool_call], outputs, config);
811
1220
  }
812
1221
  else {
@@ -857,21 +1266,38 @@ class ToolNode extends RunnableCallable {
857
1266
  const directCalls = filteredCalls.filter((c) => this.directToolNames.has(c.name));
858
1267
  const eventCalls = filteredCalls.filter((c) => !this.directToolNames.has(c.name));
859
1268
  // Run direct tools and event tools in parallel — they are independent
860
- const [directOutputs, eventOutputs] = (await Promise.all([
1269
+ const [directOutputs, eventDispatch] = (await Promise.all([
861
1270
  directCalls.length > 0
862
- ? Promise.all(directCalls.map((call) => this.runTool(call, config)))
1271
+ ? Promise.all(directCalls.map((call, idx) => this.runTool(call, config, {
1272
+ batchIndex: idx,
1273
+ turn: batchTurn,
1274
+ batchScopeId,
1275
+ resolvedArgsByCallId,
1276
+ })))
863
1277
  : [],
864
1278
  eventCalls.length > 0
865
1279
  ? this.dispatchToolEvents(eventCalls, config)
866
- : [],
1280
+ : { toolMessages: [], injected: [] },
867
1281
  ]));
868
1282
  if (directCalls.length > 0 && directOutputs.length > 0) {
869
1283
  this.handleRunToolCompletions(directCalls, directOutputs, config);
870
1284
  }
871
- outputs = [...directOutputs, ...eventOutputs];
1285
+ // Injected messages MUST follow ToolMessages so the AIMessage
1286
+ // tool_calls -> ToolMessage adjacency required by some providers
1287
+ // is preserved.
1288
+ outputs = [
1289
+ ...directOutputs,
1290
+ ...eventDispatch.toolMessages,
1291
+ ...eventDispatch.injected,
1292
+ ];
872
1293
  }
873
1294
  else {
874
- outputs = await Promise.all(filteredCalls.map((call) => this.runTool(call, config)));
1295
+ outputs = await Promise.all(filteredCalls.map((call, idx) => this.runTool(call, config, {
1296
+ batchIndex: idx,
1297
+ turn: batchTurn,
1298
+ batchScopeId,
1299
+ resolvedArgsByCallId,
1300
+ })));
875
1301
  this.handleRunToolCompletions(filteredCalls, outputs, config);
876
1302
  }
877
1303
  }