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

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 (653) 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/graphs/phases/memoryFlushPhase.cjs +1 -1
  11. package/dist/cjs/graphs/phases/memoryFlushPhase.cjs.map +1 -1
  12. package/dist/cjs/hooks/HookRegistry.cjs +162 -0
  13. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
  14. package/dist/cjs/hooks/executeHooks.cjs +276 -0
  15. package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
  16. package/dist/cjs/hooks/matchers.cjs +256 -0
  17. package/dist/cjs/hooks/matchers.cjs.map +1 -0
  18. package/dist/cjs/hooks/types.cjs +27 -0
  19. package/dist/cjs/hooks/types.cjs.map +1 -0
  20. package/dist/cjs/langchain/google-common.cjs +3 -0
  21. package/dist/cjs/langchain/google-common.cjs.map +1 -0
  22. package/dist/cjs/langchain/index.cjs +86 -0
  23. package/dist/cjs/langchain/index.cjs.map +1 -0
  24. package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
  25. package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
  26. package/dist/cjs/langchain/messages/tool.cjs +3 -0
  27. package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
  28. package/dist/cjs/langchain/messages.cjs +51 -0
  29. package/dist/cjs/langchain/messages.cjs.map +1 -0
  30. package/dist/cjs/langchain/openai.cjs +3 -0
  31. package/dist/cjs/langchain/openai.cjs.map +1 -0
  32. package/dist/cjs/langchain/prompts.cjs +11 -0
  33. package/dist/cjs/langchain/prompts.cjs.map +1 -0
  34. package/dist/cjs/langchain/runnables.cjs +19 -0
  35. package/dist/cjs/langchain/runnables.cjs.map +1 -0
  36. package/dist/cjs/langchain/tools.cjs +23 -0
  37. package/dist/cjs/langchain/tools.cjs.map +1 -0
  38. package/dist/cjs/langchain/utils/env.cjs +11 -0
  39. package/dist/cjs/langchain/utils/env.cjs.map +1 -0
  40. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
  41. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  42. package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
  43. package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
  44. package/dist/cjs/llm/bedrock/index.cjs +61 -33
  45. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  46. package/dist/cjs/llm/openai/index.cjs +1 -4
  47. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  48. package/dist/cjs/llm/openai/utils/index.cjs +27 -10
  49. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  50. package/dist/cjs/main.cjs +178 -127
  51. package/dist/cjs/main.cjs.map +1 -1
  52. package/dist/cjs/memory/citations.cjs +4 -4
  53. package/dist/cjs/memory/citations.cjs.map +1 -1
  54. package/dist/cjs/memory/constants.cjs +17 -17
  55. package/dist/cjs/memory/constants.cjs.map +1 -1
  56. package/dist/cjs/memory/mmr.cjs +1 -1
  57. package/dist/cjs/memory/mmr.cjs.map +1 -1
  58. package/dist/cjs/memory/paths.cjs +1 -1
  59. package/dist/cjs/memory/paths.cjs.map +1 -1
  60. package/dist/cjs/memory/recallTracking.cjs +3 -3
  61. package/dist/cjs/memory/recallTracking.cjs.map +1 -1
  62. package/dist/cjs/memory/temporalDecay.cjs +2 -2
  63. package/dist/cjs/memory/temporalDecay.cjs.map +1 -1
  64. package/dist/cjs/messages/cache.cjs +89 -0
  65. package/dist/cjs/messages/cache.cjs.map +1 -1
  66. package/dist/cjs/messages/contextPruning.cjs +156 -0
  67. package/dist/cjs/messages/contextPruning.cjs.map +1 -0
  68. package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
  69. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
  70. package/dist/cjs/messages/format.cjs +144 -20
  71. package/dist/cjs/messages/format.cjs.map +1 -1
  72. package/dist/cjs/messages/prune.cjs +505 -4
  73. package/dist/cjs/messages/prune.cjs.map +1 -1
  74. package/dist/cjs/run.cjs +141 -1
  75. package/dist/cjs/run.cjs.map +1 -1
  76. package/dist/cjs/tools/BashExecutor.cjs +235 -0
  77. package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
  78. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
  79. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
  80. package/dist/cjs/tools/CodeExecutor.cjs +45 -47
  81. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  82. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
  83. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  84. package/dist/cjs/tools/ReadFile.cjs +44 -0
  85. package/dist/cjs/tools/ReadFile.cjs.map +1 -0
  86. package/dist/cjs/tools/SkillTool.cjs +51 -0
  87. package/dist/cjs/tools/SkillTool.cjs.map +1 -0
  88. package/dist/cjs/tools/SubagentTool.cjs +93 -0
  89. package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
  90. package/dist/cjs/tools/ToolNode.cjs +450 -24
  91. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  92. package/dist/cjs/tools/memory/memoryAppendTool.cjs +1 -1
  93. package/dist/cjs/tools/memory/memoryAppendTool.cjs.map +1 -1
  94. package/dist/cjs/tools/memory/memoryGetTool.cjs +2 -2
  95. package/dist/cjs/tools/memory/memoryGetTool.cjs.map +1 -1
  96. package/dist/cjs/tools/memory/memorySearchTool.cjs +3 -3
  97. package/dist/cjs/tools/memory/memorySearchTool.cjs.map +1 -1
  98. package/dist/cjs/tools/memory/shared.cjs +1 -1
  99. package/dist/cjs/tools/memory/shared.cjs.map +1 -1
  100. package/dist/cjs/tools/search/search.cjs +11 -3
  101. package/dist/cjs/tools/search/search.cjs.map +1 -1
  102. package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
  103. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
  104. package/dist/cjs/tools/search/tavily-search.cjs +372 -0
  105. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
  106. package/dist/cjs/tools/search/tool.cjs +28 -4
  107. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  108. package/dist/cjs/tools/search/utils.cjs +10 -3
  109. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  110. package/dist/cjs/tools/skillCatalog.cjs +84 -0
  111. package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
  112. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
  113. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
  114. package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
  115. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
  116. package/dist/cjs/types/agent-cache.cjs +54 -0
  117. package/dist/cjs/types/agent-cache.cjs.map +1 -0
  118. package/dist/cjs/types/graph.cjs.map +1 -1
  119. package/dist/cjs/utils/truncation.cjs +135 -0
  120. package/dist/cjs/utils/truncation.cjs.map +1 -0
  121. package/dist/esm/agents/AgentContext.mjs +274 -67
  122. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  123. package/dist/esm/common/enum.mjs +44 -12
  124. package/dist/esm/common/enum.mjs.map +1 -1
  125. package/dist/esm/graphs/Graph.mjs +182 -5
  126. package/dist/esm/graphs/Graph.mjs.map +1 -1
  127. package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
  128. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  129. package/dist/esm/graphs/phases/memoryFlushPhase.mjs +1 -1
  130. package/dist/esm/graphs/phases/memoryFlushPhase.mjs.map +1 -1
  131. package/dist/esm/hooks/HookRegistry.mjs +160 -0
  132. package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
  133. package/dist/esm/hooks/executeHooks.mjs +273 -0
  134. package/dist/esm/hooks/executeHooks.mjs.map +1 -0
  135. package/dist/esm/hooks/matchers.mjs +251 -0
  136. package/dist/esm/hooks/matchers.mjs.map +1 -0
  137. package/dist/esm/hooks/types.mjs +25 -0
  138. package/dist/esm/hooks/types.mjs.map +1 -0
  139. package/dist/esm/langchain/google-common.mjs +2 -0
  140. package/dist/esm/langchain/google-common.mjs.map +1 -0
  141. package/dist/esm/langchain/index.mjs +5 -0
  142. package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
  143. package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
  144. package/dist/esm/langchain/messages/tool.mjs +2 -0
  145. package/dist/esm/langchain/messages/tool.mjs.map +1 -0
  146. package/dist/esm/langchain/messages.mjs +2 -0
  147. package/dist/esm/langchain/messages.mjs.map +1 -0
  148. package/dist/esm/langchain/openai.mjs +2 -0
  149. package/dist/esm/langchain/openai.mjs.map +1 -0
  150. package/dist/esm/langchain/prompts.mjs +2 -0
  151. package/dist/esm/langchain/prompts.mjs.map +1 -0
  152. package/dist/esm/langchain/runnables.mjs +2 -0
  153. package/dist/esm/langchain/runnables.mjs.map +1 -0
  154. package/dist/esm/langchain/tools.mjs +2 -0
  155. package/dist/esm/langchain/tools.mjs.map +1 -0
  156. package/dist/esm/langchain/utils/env.mjs +2 -0
  157. package/dist/esm/langchain/utils/env.mjs.map +1 -0
  158. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
  159. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  160. package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
  161. package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
  162. package/dist/esm/llm/bedrock/index.mjs +61 -34
  163. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  164. package/dist/esm/llm/openai/index.mjs +1 -4
  165. package/dist/esm/llm/openai/index.mjs.map +1 -1
  166. package/dist/esm/llm/openai/utils/index.mjs +27 -10
  167. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  168. package/dist/esm/main.mjs +21 -27
  169. package/dist/esm/main.mjs.map +1 -1
  170. package/dist/esm/memory/citations.mjs +4 -4
  171. package/dist/esm/memory/citations.mjs.map +1 -1
  172. package/dist/esm/memory/constants.mjs +17 -17
  173. package/dist/esm/memory/constants.mjs.map +1 -1
  174. package/dist/esm/memory/mmr.mjs +1 -1
  175. package/dist/esm/memory/mmr.mjs.map +1 -1
  176. package/dist/esm/memory/paths.mjs +1 -1
  177. package/dist/esm/memory/paths.mjs.map +1 -1
  178. package/dist/esm/memory/recallTracking.mjs +3 -3
  179. package/dist/esm/memory/recallTracking.mjs.map +1 -1
  180. package/dist/esm/memory/temporalDecay.mjs +2 -2
  181. package/dist/esm/memory/temporalDecay.mjs.map +1 -1
  182. package/dist/esm/messages/cache.mjs +89 -0
  183. package/dist/esm/messages/cache.mjs.map +1 -1
  184. package/dist/esm/messages/contextPruning.mjs +154 -0
  185. package/dist/esm/messages/contextPruning.mjs.map +1 -0
  186. package/dist/esm/messages/contextPruningSettings.mjs +50 -0
  187. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
  188. package/dist/esm/messages/format.mjs +136 -12
  189. package/dist/esm/messages/format.mjs.map +1 -1
  190. package/dist/esm/messages/prune.mjs +504 -7
  191. package/dist/esm/messages/prune.mjs.map +1 -1
  192. package/dist/esm/run.mjs +141 -1
  193. package/dist/esm/run.mjs.map +1 -1
  194. package/dist/esm/tools/BashExecutor.mjs +227 -0
  195. package/dist/esm/tools/BashExecutor.mjs.map +1 -0
  196. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
  197. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
  198. package/dist/esm/tools/CodeExecutor.mjs +45 -48
  199. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  200. package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
  201. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  202. package/dist/esm/tools/ReadFile.mjs +39 -0
  203. package/dist/esm/tools/ReadFile.mjs.map +1 -0
  204. package/dist/esm/tools/SkillTool.mjs +46 -0
  205. package/dist/esm/tools/SkillTool.mjs.map +1 -0
  206. package/dist/esm/tools/SubagentTool.mjs +86 -0
  207. package/dist/esm/tools/SubagentTool.mjs.map +1 -0
  208. package/dist/esm/tools/ToolNode.mjs +452 -26
  209. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  210. package/dist/esm/tools/memory/memoryAppendTool.mjs +1 -1
  211. package/dist/esm/tools/memory/memoryAppendTool.mjs.map +1 -1
  212. package/dist/esm/tools/memory/memoryGetTool.mjs +2 -2
  213. package/dist/esm/tools/memory/memoryGetTool.mjs.map +1 -1
  214. package/dist/esm/tools/memory/memorySearchTool.mjs +3 -3
  215. package/dist/esm/tools/memory/memorySearchTool.mjs.map +1 -1
  216. package/dist/esm/tools/memory/shared.mjs +1 -1
  217. package/dist/esm/tools/memory/shared.mjs.map +1 -1
  218. package/dist/esm/tools/search/search.mjs +11 -3
  219. package/dist/esm/tools/search/search.mjs.map +1 -1
  220. package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
  221. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
  222. package/dist/esm/tools/search/tavily-search.mjs +370 -0
  223. package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
  224. package/dist/esm/tools/search/tool.mjs +28 -4
  225. package/dist/esm/tools/search/tool.mjs.map +1 -1
  226. package/dist/esm/tools/search/utils.mjs +10 -3
  227. package/dist/esm/tools/search/utils.mjs.map +1 -1
  228. package/dist/esm/tools/skillCatalog.mjs +82 -0
  229. package/dist/esm/tools/skillCatalog.mjs.map +1 -0
  230. package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
  231. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
  232. package/dist/esm/tools/toolOutputReferences.mjs +662 -0
  233. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
  234. package/dist/esm/types/agent-cache.mjs +52 -0
  235. package/dist/esm/types/agent-cache.mjs.map +1 -0
  236. package/dist/esm/types/graph.mjs.map +1 -1
  237. package/dist/esm/utils/truncation.mjs +128 -0
  238. package/dist/esm/utils/truncation.mjs.map +1 -0
  239. package/dist/types/agents/AgentContext.d.ts +101 -8
  240. package/dist/types/common/enum.d.ts +39 -12
  241. package/dist/types/common/index.d.ts +0 -1
  242. package/dist/types/graphs/Graph.d.ts +43 -0
  243. package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
  244. package/dist/types/graphs/index.d.ts +0 -1
  245. package/dist/types/graphs/phases/memoryFlushPhase.d.ts +2 -2
  246. package/dist/types/hooks/HookRegistry.d.ts +56 -0
  247. package/dist/types/hooks/executeHooks.d.ts +79 -0
  248. package/dist/types/hooks/index.d.ts +6 -0
  249. package/dist/types/hooks/matchers.d.ts +95 -0
  250. package/dist/types/hooks/types.d.ts +320 -0
  251. package/dist/types/index.d.ts +9 -9
  252. package/dist/types/langchain/google-common.d.ts +1 -0
  253. package/dist/types/langchain/index.d.ts +8 -0
  254. package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
  255. package/dist/types/langchain/messages/tool.d.ts +1 -0
  256. package/dist/types/langchain/messages.d.ts +2 -0
  257. package/dist/types/langchain/openai.d.ts +1 -0
  258. package/dist/types/langchain/prompts.d.ts +1 -0
  259. package/dist/types/langchain/runnables.d.ts +2 -0
  260. package/dist/types/langchain/tools.d.ts +2 -0
  261. package/dist/types/langchain/utils/env.d.ts +1 -0
  262. package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
  263. package/dist/types/llm/bedrock/index.d.ts +54 -1
  264. package/dist/types/llm/openai/index.d.ts +1 -1
  265. package/dist/types/memory/citations.d.ts +4 -4
  266. package/dist/types/memory/constants.d.ts +17 -17
  267. package/dist/types/memory/mmr.d.ts +3 -3
  268. package/dist/types/memory/paths.d.ts +1 -1
  269. package/dist/types/memory/temporalDecay.d.ts +2 -2
  270. package/dist/types/memory/types.d.ts +3 -3
  271. package/dist/types/messages/contextPruning.d.ts +42 -0
  272. package/dist/types/messages/contextPruningSettings.d.ts +44 -0
  273. package/dist/types/messages/format.d.ts +9 -1
  274. package/dist/types/messages/index.d.ts +2 -0
  275. package/dist/types/messages/prune.d.ts +91 -1
  276. package/dist/types/run.d.ts +2 -0
  277. package/dist/types/tools/BashExecutor.d.ts +76 -0
  278. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
  279. package/dist/types/tools/CodeExecutor.d.ts +8 -26
  280. package/dist/types/tools/ReadFile.d.ts +28 -0
  281. package/dist/types/tools/SkillTool.d.ts +40 -0
  282. package/dist/types/tools/SubagentTool.d.ts +36 -0
  283. package/dist/types/tools/ToolNode.d.ts +77 -5
  284. package/dist/types/tools/memory/shared.d.ts +1 -1
  285. package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
  286. package/dist/types/tools/search/tavily-search.d.ts +4 -0
  287. package/dist/types/tools/search/types.d.ts +99 -5
  288. package/dist/types/tools/search/utils.d.ts +2 -2
  289. package/dist/types/tools/skillCatalog.d.ts +19 -0
  290. package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
  291. package/dist/types/tools/subagent/index.d.ts +2 -0
  292. package/dist/types/tools/subagent/types.d.ts +84 -0
  293. package/dist/types/tools/toolOutputReferences.d.ts +236 -0
  294. package/dist/types/types/agent-cache.d.ts +71 -0
  295. package/dist/types/types/graph.d.ts +163 -22
  296. package/dist/types/types/index.d.ts +3 -0
  297. package/dist/types/types/messages.d.ts +26 -0
  298. package/dist/types/types/run.d.ts +22 -0
  299. package/dist/types/types/skill.d.ts +9 -0
  300. package/dist/types/types/tools.d.ts +111 -0
  301. package/dist/types/utils/index.d.ts +1 -3
  302. package/dist/types/utils/truncation.d.ts +70 -0
  303. package/package.json +57 -17
  304. package/src/agents/AgentContext.ts +321 -78
  305. package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
  306. package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +266 -0
  307. package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
  308. package/src/agents/__tests__/AgentContext.test.ts +632 -0
  309. package/src/common/__tests__/enum.test.ts +7 -17
  310. package/src/common/enum.ts +43 -12
  311. package/src/common/index.ts +0 -1
  312. package/src/graphs/Graph.ts +222 -2
  313. package/src/graphs/MultiAgentGraph.ts +154 -1466
  314. package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
  315. package/src/graphs/gapFeatures.test.ts +1 -1
  316. package/src/graphs/index.ts +0 -1
  317. package/src/graphs/phases/__tests__/memoryFlushPhase.test.ts +1 -1
  318. package/src/graphs/phases/memoryFlushPhase.ts +2 -2
  319. package/src/hooks/HookRegistry.ts +208 -0
  320. package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
  321. package/src/hooks/__tests__/compactHooks.test.ts +214 -0
  322. package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
  323. package/src/hooks/__tests__/integration.test.ts +337 -0
  324. package/src/hooks/__tests__/matchers.test.ts +238 -0
  325. package/src/hooks/__tests__/toolHooks.test.ts +665 -0
  326. package/src/hooks/executeHooks.ts +375 -0
  327. package/src/hooks/index.ts +57 -0
  328. package/src/hooks/matchers.ts +280 -0
  329. package/src/hooks/types.ts +404 -0
  330. package/src/index.ts +15 -24
  331. package/src/langchain/google-common.ts +1 -0
  332. package/src/langchain/index.ts +8 -0
  333. package/src/langchain/language_models/chat_models.ts +1 -0
  334. package/src/langchain/messages/tool.ts +5 -0
  335. package/src/langchain/messages.ts +21 -0
  336. package/src/langchain/openai.ts +1 -0
  337. package/src/langchain/prompts.ts +1 -0
  338. package/src/langchain/runnables.ts +7 -0
  339. package/src/langchain/tools.ts +8 -0
  340. package/src/langchain/utils/env.ts +1 -0
  341. package/src/llm/anthropic/utils/message_inputs.ts +10 -1
  342. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
  343. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
  344. package/src/llm/bedrock/cacheSupport.test.ts +99 -0
  345. package/src/llm/bedrock/cacheSupport.ts +53 -0
  346. package/src/llm/bedrock/index.ts +116 -41
  347. package/src/llm/openai/index.ts +2 -2
  348. package/src/llm/openai/utils/index.ts +31 -14
  349. package/src/memory/citations.ts +4 -4
  350. package/src/memory/constants.ts +17 -17
  351. package/src/memory/mmr.ts +3 -3
  352. package/src/memory/paths.ts +1 -1
  353. package/src/memory/recallTracking.ts +3 -3
  354. package/src/memory/temporalDecay.ts +2 -2
  355. package/src/memory/types.ts +3 -3
  356. package/src/messages/__tests__/contextPruning.test.ts +228 -0
  357. package/src/messages/cache.test.ts +62 -24
  358. package/src/messages/cache.ts +112 -0
  359. package/src/messages/contextPruning.ts +191 -0
  360. package/src/messages/contextPruningSettings.ts +90 -0
  361. package/src/messages/ensureThinkingBlock.test.ts +1 -1
  362. package/src/messages/format.ts +164 -12
  363. package/src/messages/formatAgentMessages.skills.test.ts +413 -0
  364. package/src/messages/formatAgentMessages.test.ts +1 -1
  365. package/src/messages/index.ts +2 -0
  366. package/src/messages/prune.ts +661 -4
  367. package/src/run.ts +155 -1
  368. package/src/scripts/multi-agent-chain.ts +2 -2
  369. package/src/scripts/multi-agent-document-review-chain.ts +2 -2
  370. package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
  371. package/src/scripts/multi-agent-parallel.ts +3 -3
  372. package/src/scripts/multi-agent-sequence.ts +3 -3
  373. package/src/scripts/multi-agent-subagent.ts +246 -0
  374. package/src/scripts/multi-agent-supervisor.ts +5 -5
  375. package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
  376. package/src/scripts/sequential-full-metadata-test.ts +2 -2
  377. package/src/scripts/subagent-event-driven-debug.ts +190 -0
  378. package/src/scripts/subagent-tools-debug.ts +160 -0
  379. package/src/scripts/test-custom-prompt-key.ts +3 -3
  380. package/src/scripts/test-handoff-input.ts +1 -1
  381. package/src/scripts/test-handoff-steering.ts +3 -3
  382. package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
  383. package/src/scripts/test-parallel-agent-labeling.ts +3 -3
  384. package/src/scripts/test-parallel-handoffs.ts +2 -2
  385. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
  386. package/src/scripts/test-thinking-handoff.ts +1 -1
  387. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
  388. package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
  389. package/src/scripts/test-tools-before-handoff.ts +1 -1
  390. package/src/specs/agent-handoffs.test.ts +26 -483
  391. package/src/specs/anthropic.simple.test.ts +61 -0
  392. package/src/specs/multi-agent-summarization.test.ts +396 -0
  393. package/src/specs/prune.orphans.test.ts +248 -0
  394. package/src/specs/prune.test.ts +104 -16
  395. package/src/specs/thinking-handoff.test.ts +19 -19
  396. package/src/tools/BashExecutor.ts +281 -0
  397. package/src/tools/BashProgrammaticToolCalling.ts +397 -0
  398. package/src/tools/CodeExecutor.ts +63 -54
  399. package/src/tools/ProgrammaticToolCalling.ts +29 -14
  400. package/src/tools/ReadFile.ts +39 -0
  401. package/src/tools/SkillTool.ts +46 -0
  402. package/src/tools/SubagentTool.ts +100 -0
  403. package/src/tools/ToolNode.ts +548 -26
  404. package/src/tools/__tests__/BashExecutor.test.ts +49 -0
  405. package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
  406. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
  407. package/src/tools/__tests__/ReadFile.test.ts +44 -0
  408. package/src/tools/__tests__/SkillTool.test.ts +442 -0
  409. package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
  410. package/src/tools/__tests__/SubagentTool.test.ts +149 -0
  411. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
  412. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
  413. package/src/tools/__tests__/skillCatalog.test.ts +161 -0
  414. package/src/tools/__tests__/subagentHooks.test.ts +210 -0
  415. package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
  416. package/src/tools/memory/memoryAppendTool.ts +1 -1
  417. package/src/tools/memory/memoryGetTool.ts +2 -2
  418. package/src/tools/memory/memorySearchTool.ts +3 -3
  419. package/src/tools/memory/shared.ts +1 -1
  420. package/src/tools/search/search.ts +12 -2
  421. package/src/tools/search/tavily-scraper.ts +235 -0
  422. package/src/tools/search/tavily-search.ts +424 -0
  423. package/src/tools/search/tavily.test.ts +965 -0
  424. package/src/tools/search/tool.ts +36 -2
  425. package/src/tools/search/types.ts +133 -8
  426. package/src/tools/search/utils.ts +13 -5
  427. package/src/tools/skillCatalog.ts +126 -0
  428. package/src/tools/subagent/SubagentExecutor.ts +676 -0
  429. package/src/tools/subagent/index.ts +13 -0
  430. package/src/tools/subagent/types.test.ts +70 -0
  431. package/src/tools/subagent/types.ts +115 -0
  432. package/src/tools/toolOutputReferences.ts +825 -0
  433. package/src/types/agent-cache.ts +74 -0
  434. package/src/types/graph.ts +172 -20
  435. package/src/types/index.ts +3 -0
  436. package/src/types/messages.ts +27 -0
  437. package/src/types/run.ts +22 -0
  438. package/src/types/skill.ts +11 -0
  439. package/src/types/tools.ts +118 -0
  440. package/src/utils/__tests__/truncation.test.ts +66 -0
  441. package/src/utils/index.ts +1 -3
  442. package/src/utils/truncation.ts +154 -0
  443. package/dist/cjs/common/spawnPath.cjs +0 -104
  444. package/dist/cjs/common/spawnPath.cjs.map +0 -1
  445. package/dist/cjs/content/ArtifactStore.cjs +0 -579
  446. package/dist/cjs/content/ArtifactStore.cjs.map +0 -1
  447. package/dist/cjs/content/ContentStore.cjs +0 -638
  448. package/dist/cjs/content/ContentStore.cjs.map +0 -1
  449. package/dist/cjs/content/contentAnalyzer.cjs +0 -91
  450. package/dist/cjs/content/contentAnalyzer.cjs.map +0 -1
  451. package/dist/cjs/content/index.cjs +0 -20
  452. package/dist/cjs/content/index.cjs.map +0 -1
  453. package/dist/cjs/content/mcpAutoCache.cjs +0 -115
  454. package/dist/cjs/content/mcpAutoCache.cjs.map +0 -1
  455. package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
  456. package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
  457. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
  458. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
  459. package/dist/cjs/providers/a2a/client.cjs +0 -92
  460. package/dist/cjs/providers/a2a/client.cjs.map +0 -1
  461. package/dist/cjs/providers/a2a/config.cjs +0 -38
  462. package/dist/cjs/providers/a2a/config.cjs.map +0 -1
  463. package/dist/cjs/providers/capabilityNaming.cjs +0 -43
  464. package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
  465. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
  466. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
  467. package/dist/cjs/providers/mcp/config.cjs +0 -42
  468. package/dist/cjs/providers/mcp/config.cjs.map +0 -1
  469. package/dist/cjs/providers/mcp/transport.cjs +0 -65
  470. package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
  471. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
  472. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
  473. package/dist/cjs/providers/types.cjs +0 -51
  474. package/dist/cjs/providers/types.cjs.map +0 -1
  475. package/dist/cjs/tools/artifacts/schema.cjs +0 -86
  476. package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
  477. package/dist/cjs/tools/artifacts/tool.cjs +0 -219
  478. package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
  479. package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
  480. package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
  481. package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
  482. package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
  483. package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
  484. package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
  485. package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
  486. package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
  487. package/dist/cjs/tools/proxyTool.cjs +0 -102
  488. package/dist/cjs/tools/proxyTool.cjs.map +0 -1
  489. package/dist/cjs/utils/childAgentContext.cjs +0 -242
  490. package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
  491. package/dist/cjs/utils/credentials.cjs +0 -142
  492. package/dist/cjs/utils/credentials.cjs.map +0 -1
  493. package/dist/cjs/utils/httpClient.cjs +0 -74
  494. package/dist/cjs/utils/httpClient.cjs.map +0 -1
  495. package/dist/cjs/utils/toolManifest.cjs +0 -100
  496. package/dist/cjs/utils/toolManifest.cjs.map +0 -1
  497. package/dist/esm/common/spawnPath.mjs +0 -95
  498. package/dist/esm/common/spawnPath.mjs.map +0 -1
  499. package/dist/esm/content/ArtifactStore.mjs +0 -576
  500. package/dist/esm/content/ArtifactStore.mjs.map +0 -1
  501. package/dist/esm/content/ContentStore.mjs +0 -635
  502. package/dist/esm/content/ContentStore.mjs.map +0 -1
  503. package/dist/esm/content/contentAnalyzer.mjs +0 -87
  504. package/dist/esm/content/contentAnalyzer.mjs.map +0 -1
  505. package/dist/esm/content/index.mjs +0 -5
  506. package/dist/esm/content/mcpAutoCache.mjs +0 -111
  507. package/dist/esm/content/mcpAutoCache.mjs.map +0 -1
  508. package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
  509. package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
  510. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
  511. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
  512. package/dist/esm/providers/a2a/client.mjs +0 -88
  513. package/dist/esm/providers/a2a/client.mjs.map +0 -1
  514. package/dist/esm/providers/a2a/config.mjs +0 -35
  515. package/dist/esm/providers/a2a/config.mjs.map +0 -1
  516. package/dist/esm/providers/capabilityNaming.mjs +0 -39
  517. package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
  518. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
  519. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
  520. package/dist/esm/providers/mcp/config.mjs +0 -39
  521. package/dist/esm/providers/mcp/config.mjs.map +0 -1
  522. package/dist/esm/providers/mcp/transport.mjs +0 -63
  523. package/dist/esm/providers/mcp/transport.mjs.map +0 -1
  524. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
  525. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
  526. package/dist/esm/providers/types.mjs +0 -51
  527. package/dist/esm/providers/types.mjs.map +0 -1
  528. package/dist/esm/tools/artifacts/schema.mjs +0 -79
  529. package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
  530. package/dist/esm/tools/artifacts/tool.mjs +0 -213
  531. package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
  532. package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
  533. package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
  534. package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
  535. package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
  536. package/dist/esm/tools/fileSearch/schema.mjs +0 -15
  537. package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
  538. package/dist/esm/tools/fileSearch/tool.mjs +0 -152
  539. package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
  540. package/dist/esm/tools/proxyTool.mjs +0 -100
  541. package/dist/esm/tools/proxyTool.mjs.map +0 -1
  542. package/dist/esm/utils/childAgentContext.mjs +0 -237
  543. package/dist/esm/utils/childAgentContext.mjs.map +0 -1
  544. package/dist/esm/utils/credentials.mjs +0 -135
  545. package/dist/esm/utils/credentials.mjs.map +0 -1
  546. package/dist/esm/utils/httpClient.mjs +0 -70
  547. package/dist/esm/utils/httpClient.mjs.map +0 -1
  548. package/dist/esm/utils/toolManifest.mjs +0 -96
  549. package/dist/esm/utils/toolManifest.mjs.map +0 -1
  550. package/dist/types/common/spawnPath.d.ts +0 -59
  551. package/dist/types/content/ArtifactStore.d.ts +0 -223
  552. package/dist/types/content/ContentStore.d.ts +0 -140
  553. package/dist/types/content/contentAnalyzer.d.ts +0 -38
  554. package/dist/types/content/index.d.ts +0 -24
  555. package/dist/types/content/mcpAutoCache.d.ts +0 -89
  556. package/dist/types/content/types.d.ts +0 -75
  557. package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
  558. package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
  559. package/dist/types/providers/a2a/client.d.ts +0 -47
  560. package/dist/types/providers/a2a/config.d.ts +0 -18
  561. package/dist/types/providers/a2a/index.d.ts +0 -6
  562. package/dist/types/providers/a2a/types.d.ts +0 -173
  563. package/dist/types/providers/capabilityNaming.d.ts +0 -25
  564. package/dist/types/providers/index.d.ts +0 -12
  565. package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
  566. package/dist/types/providers/mcp/config.d.ts +0 -20
  567. package/dist/types/providers/mcp/index.d.ts +0 -5
  568. package/dist/types/providers/mcp/transport.d.ts +0 -18
  569. package/dist/types/providers/mcp/types.d.ts +0 -112
  570. package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
  571. package/dist/types/providers/tools-server/index.d.ts +0 -1
  572. package/dist/types/providers/types.d.ts +0 -184
  573. package/dist/types/tools/artifacts/index.d.ts +0 -3
  574. package/dist/types/tools/artifacts/schema.d.ts +0 -63
  575. package/dist/types/tools/artifacts/tool.d.ts +0 -16
  576. package/dist/types/tools/artifacts/types.d.ts +0 -127
  577. package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
  578. package/dist/types/tools/fileSearch/index.d.ts +0 -5
  579. package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
  580. package/dist/types/tools/fileSearch/schema.d.ts +0 -13
  581. package/dist/types/tools/fileSearch/tool.d.ts +0 -18
  582. package/dist/types/tools/fileSearch/types.d.ts +0 -139
  583. package/dist/types/tools/proxyTool.d.ts +0 -62
  584. package/dist/types/tools/search/test.d.ts +0 -1
  585. package/dist/types/utils/childAgentContext.d.ts +0 -99
  586. package/dist/types/utils/credentials.d.ts +0 -77
  587. package/dist/types/utils/httpClient.d.ts +0 -46
  588. package/dist/types/utils/toolManifest.d.ts +0 -49
  589. package/src/common/__tests__/spawnPath.test.ts +0 -110
  590. package/src/common/spawnPath.ts +0 -101
  591. package/src/content/ArtifactStore.ts +0 -782
  592. package/src/content/ContentStore.ts +0 -753
  593. package/src/content/contentAnalyzer.ts +0 -105
  594. package/src/content/index.ts +0 -51
  595. package/src/content/mcpAutoCache.ts +0 -185
  596. package/src/content/types.ts +0 -82
  597. package/src/graphs/HandoffRegistry.ts +0 -199
  598. package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
  599. package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
  600. package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
  601. package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
  602. package/src/graphs/handoffValidation.test.ts +0 -353
  603. package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
  604. package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -271
  605. package/src/providers/__tests__/types.test.ts +0 -64
  606. package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
  607. package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
  608. package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
  609. package/src/providers/a2a/client.ts +0 -115
  610. package/src/providers/a2a/config.ts +0 -40
  611. package/src/providers/a2a/index.ts +0 -29
  612. package/src/providers/a2a/types.ts +0 -191
  613. package/src/providers/capabilityNaming.ts +0 -42
  614. package/src/providers/index.ts +0 -68
  615. package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
  616. package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
  617. package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
  618. package/src/providers/mcp/config.ts +0 -45
  619. package/src/providers/mcp/index.ts +0 -21
  620. package/src/providers/mcp/transport.ts +0 -76
  621. package/src/providers/mcp/types.ts +0 -139
  622. package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -249
  623. package/src/providers/tools-server/index.ts +0 -1
  624. package/src/providers/types.ts +0 -204
  625. package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
  626. package/src/scripts/test-handoff-preamble.ts +0 -278
  627. package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
  628. package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
  629. package/src/tools/artifacts/index.ts +0 -33
  630. package/src/tools/artifacts/schema.ts +0 -99
  631. package/src/tools/artifacts/tool.ts +0 -289
  632. package/src/tools/artifacts/types.ts +0 -162
  633. package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
  634. package/src/tools/fileSearch/formatter.ts +0 -129
  635. package/src/tools/fileSearch/index.ts +0 -23
  636. package/src/tools/fileSearch/ragClient.ts +0 -137
  637. package/src/tools/fileSearch/schema.ts +0 -19
  638. package/src/tools/fileSearch/tool.ts +0 -207
  639. package/src/tools/fileSearch/types.ts +0 -149
  640. package/src/tools/proxyTool.ts +0 -166
  641. package/src/tools/search/output.md +0 -2775
  642. package/src/tools/search/test.html +0 -884
  643. package/src/tools/search/test.md +0 -643
  644. package/src/tools/search/test.ts +0 -159
  645. package/src/utils/__tests__/childAgentContext.test.ts +0 -217
  646. package/src/utils/__tests__/credentials.test.ts +0 -130
  647. package/src/utils/__tests__/httpClient.test.ts +0 -75
  648. package/src/utils/__tests__/toolManifest.test.ts +0 -116
  649. package/src/utils/childAgentContext.ts +0 -259
  650. package/src/utils/credentials.ts +0 -157
  651. package/src/utils/httpClient.ts +0 -92
  652. package/src/utils/toolManifest.ts +0 -109
  653. /package/dist/esm/{content → langchain}/index.mjs.map +0 -0
@@ -26,7 +26,7 @@ import {
26
26
  import { DynamicStructuredTool } from '@langchain/core/tools';
27
27
  import { z } from 'zod';
28
28
  import { Run } from '@/run';
29
- import { Providers, GraphEvents } from '@/common';
29
+ import { Providers, GraphEvents, EdgeType } from '@/common';
30
30
  import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
31
31
  import { ToolEndHandler, ModelEndHandler } from '@/events';
32
32
  import type * as t from '@/types';
@@ -690,7 +690,7 @@ Start with "SUMMARY:" and end with "RECOMMENDATION:"`
690
690
  {
691
691
  from: 'researcher',
692
692
  to: 'analyst',
693
- edgeType: 'sequence',
693
+ edgeType: EdgeType.DIRECT,
694
694
  prompt: (messages: BaseMessage[], startIndex: number) => {
695
695
  const buffer = getBufferString(messages.slice(startIndex));
696
696
  return `Here are the research findings. Analyze them and provide insights:\n\n${buffer}`;
@@ -700,7 +700,7 @@ Start with "SUMMARY:" and end with "RECOMMENDATION:"`
700
700
  {
701
701
  from: 'analyst',
702
702
  to: 'summarizer',
703
- edgeType: 'sequence',
703
+ edgeType: EdgeType.DIRECT,
704
704
  prompt: (messages: BaseMessage[], startIndex: number) => {
705
705
  const buffer = getBufferString(messages.slice(startIndex));
706
706
  return `Here are the combined research and analysis. Synthesize into a final summary:\n\n${buffer}`;
@@ -813,7 +813,7 @@ Start with "REVIEW:" and keep it to 3-4 lines.`
813
813
  {
814
814
  from: 'data_collector',
815
815
  to: 'translator',
816
- edgeType: 'sequence',
816
+ edgeType: EdgeType.DIRECT,
817
817
  prompt: (messages: BaseMessage[], startIndex: number) => {
818
818
  const buffer = getBufferString(messages.slice(startIndex));
819
819
  return `Here is the collected data. Translate the key findings to Spanish:\n\n${buffer}`;
@@ -823,7 +823,7 @@ Start with "REVIEW:" and keep it to 3-4 lines.`
823
823
  {
824
824
  from: 'translator',
825
825
  to: 'reviewer',
826
- edgeType: 'sequence',
826
+ edgeType: EdgeType.DIRECT,
827
827
  prompt: (messages: BaseMessage[], startIndex: number) => {
828
828
  const buffer = getBufferString(messages.slice(startIndex));
829
829
  return `Here is the collected and translated data. Review it for quality:\n\n${buffer}`;
@@ -934,7 +934,7 @@ Format as a brief executive memo (4-5 sentences). Start with "EXECUTIVE SUMMARY:
934
934
  {
935
935
  from: 'intel_gatherer',
936
936
  to: 'market_analyst',
937
- edgeType: 'sequence',
937
+ edgeType: EdgeType.DIRECT,
938
938
  prompt: (messages: BaseMessage[], startIndex: number) => {
939
939
  const buffer = getBufferString(messages.slice(startIndex));
940
940
  return `Here is the gathered intelligence. Analyze the market sentiment and cross-reference with our database:\n\n${buffer}`;
@@ -944,7 +944,7 @@ Format as a brief executive memo (4-5 sentences). Start with "EXECUTIVE SUMMARY:
944
944
  {
945
945
  from: 'market_analyst',
946
946
  to: 'presenter',
947
- edgeType: 'sequence',
947
+ edgeType: EdgeType.DIRECT,
948
948
  prompt: (messages: BaseMessage[], startIndex: number) => {
949
949
  const buffer = getBufferString(messages.slice(startIndex));
950
950
  return `Here is the intelligence and market analysis. Create a polished executive summary:\n\n${buffer}`;
@@ -1070,7 +1070,7 @@ Start with "SENTIMENT ANALYSIS:"`,
1070
1070
  {
1071
1071
  from: 'planner',
1072
1072
  to: 'researcher',
1073
- edgeType: 'sequence',
1073
+ edgeType: EdgeType.DIRECT,
1074
1074
  prompt: (messages: BaseMessage[], startIndex: number) => {
1075
1075
  const buffer = getBufferString(messages.slice(startIndex));
1076
1076
  return `Here is the content plan. Gather the required data:\n\n${buffer}`;
@@ -4,7 +4,7 @@ config();
4
4
  import { HumanMessage, BaseMessage } from '@langchain/core/messages';
5
5
  import type * as t from '@/types';
6
6
  import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
7
- import { Providers, GraphEvents } from '@/common';
7
+ import { Providers, GraphEvents, EdgeType } from '@/common';
8
8
  import { sleep } from '@/utils/run';
9
9
  import { Run } from '@/run';
10
10
 
@@ -49,7 +49,7 @@ async function testSequentialMetadata() {
49
49
 
50
50
  // Sequential edge: A -> B (using edgeType not type)
51
51
  const edges: t.GraphEdge[] = [
52
- { from: 'agent_a', to: 'agent_b', edgeType: 'sequence' },
52
+ { from: 'agent_a', to: 'agent_b', edgeType: EdgeType.DIRECT },
53
53
  ];
54
54
 
55
55
  const captureMetadata = (
@@ -0,0 +1,190 @@
1
+ import { config } from 'dotenv';
2
+ config();
3
+
4
+ import { HumanMessage } from '@langchain/core/messages';
5
+ import type { BaseMessage } from '@langchain/core/messages';
6
+ import type * as t from '@/types';
7
+ import { ChatModelStreamHandler } from '@/stream';
8
+ import { ToolEndHandler, ModelEndHandler } from '@/events';
9
+ import { Providers, GraphEvents, Constants } from '@/common';
10
+ import { Run } from '@/run';
11
+
12
+ /**
13
+ * Repro for the reference consumer setup: event-driven tools via `toolDefinitions`
14
+ * + an ON_TOOL_EXECUTE handler that runs the tool. Self-spawn subagent must
15
+ * be able to drive the SAME tool pipeline.
16
+ */
17
+ const apiKey = process.env.OPENAI_API_KEY!;
18
+ if (!apiKey) {
19
+ console.error('Missing OPENAI_API_KEY');
20
+ process.exit(1);
21
+ }
22
+
23
+ // Simulate consumer: tool definitions only, execution routed via event.
24
+ const calculatorDef: t.LCTool = {
25
+ name: 'calculator',
26
+ description: 'Evaluate a math expression. Use for any arithmetic.',
27
+ parameters: {
28
+ type: 'object',
29
+ properties: {
30
+ expression: {
31
+ type: 'string',
32
+ description: "A JS math expression, e.g. '42 * 58'",
33
+ },
34
+ },
35
+ required: ['expression'],
36
+ },
37
+ };
38
+
39
+ async function main() {
40
+ console.log('=== Subagent Event-Driven Tool Diagnostic ===\n');
41
+
42
+ const parentAgent: t.AgentInputs = {
43
+ agentId: 'supervisor',
44
+ provider: Providers.OPENAI,
45
+ clientOptions: { modelName: 'gpt-4o-mini', apiKey },
46
+ instructions: `You have calculator AND can spawn a "self" subagent in an isolated context.
47
+ For any arithmetic question, spawn the "self" subagent with the math task.
48
+ The subagent MUST use the calculator tool — never estimate.`,
49
+ maxContextTokens: 8000,
50
+ toolDefinitions: [calculatorDef],
51
+ subagentConfigs: [
52
+ {
53
+ type: 'self',
54
+ self: true,
55
+ name: 'supervisor',
56
+ description:
57
+ 'Spawn a copy of this agent in an isolated context for a focused math subtask.',
58
+ },
59
+ ],
60
+ };
61
+
62
+ let toolCallCount = 0;
63
+ const customHandlers: Record<string, t.EventHandler> = {
64
+ [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
65
+ [GraphEvents.TOOL_END]: new ToolEndHandler(),
66
+ [GraphEvents.CHAT_MODEL_END]: new ModelEndHandler(),
67
+ [GraphEvents.ON_TOOL_EXECUTE]: {
68
+ handle: (_event, rawData): void => {
69
+ const data = rawData as t.ToolExecuteBatchRequest;
70
+ console.log(
71
+ `[PARENT ON_TOOL_EXECUTE] agentId=${data.agentId} calls=${data.toolCalls
72
+ .map((c) => c.name)
73
+ .join(',')}`
74
+ );
75
+ const results: t.ToolExecuteResult[] = data.toolCalls.map((call) => {
76
+ toolCallCount += 1;
77
+ const args = call.args as { expression?: string };
78
+ const expression = args.expression ?? '';
79
+ let content: string;
80
+ try {
81
+ // eslint-disable-next-line no-eval
82
+ const result = eval(expression);
83
+ content = `${expression} = ${result}`;
84
+ } catch (err) {
85
+ content = `Error: ${String(err)}`;
86
+ }
87
+ return {
88
+ toolCallId: call.id!,
89
+ status: 'success',
90
+ content,
91
+ };
92
+ });
93
+ data.resolve(results);
94
+ },
95
+ },
96
+ [GraphEvents.ON_RUN_STEP]: {
97
+ handle: (event, data): void => {
98
+ const d = data as { type?: string; runId?: string; agentId?: string };
99
+ console.log(
100
+ `[PARENT ${event}] type=${d.type} agentId=${d.agentId ?? '-'} runId=${d.runId ?? '-'}`
101
+ );
102
+ },
103
+ },
104
+ [GraphEvents.ON_RUN_STEP_COMPLETED]: {
105
+ handle: (event, data): void => {
106
+ const r = (
107
+ data as { result: { type: string; tool_call?: { name?: string } } }
108
+ ).result;
109
+ console.log(
110
+ `[PARENT ${event}] type=${r.type} tool=${r.tool_call?.name ?? '-'}`
111
+ );
112
+ },
113
+ },
114
+ [GraphEvents.ON_SUBAGENT_UPDATE]: {
115
+ handle: (_event, rawData): void => {
116
+ const d = rawData as t.SubagentUpdateEvent;
117
+ console.log(
118
+ `[SUBAGENT ${d.phase}] [${d.subagentType}] tool_call_id=${d.parentToolCallId ?? '-'} ${d.label ?? ''}`
119
+ );
120
+ },
121
+ },
122
+ };
123
+
124
+ const run = await Run.create<t.IState>({
125
+ runId: `sub-evt-${Date.now()}`,
126
+ graphConfig: { type: 'standard', agents: [parentAgent] },
127
+ customHandlers,
128
+ });
129
+
130
+ const question = new HumanMessage(
131
+ 'Compute (42 * 58) + (13 ** 3). Use the self subagent, and have it use the calculator.'
132
+ );
133
+
134
+ console.log('User:', question.content, '\n');
135
+
136
+ await run.processStream(
137
+ { messages: [question] },
138
+ {
139
+ configurable: { thread_id: `sub-evt` },
140
+ version: 'v2' as const,
141
+ }
142
+ );
143
+
144
+ const msgs = (run.getRunMessages() ?? []) as BaseMessage[];
145
+ console.log('\n--- Run messages ---\n');
146
+ for (const msg of msgs) {
147
+ const type = msg._getType();
148
+ const name = 'name' in msg ? (msg as { name?: string }).name : undefined;
149
+ const content =
150
+ typeof msg.content === 'string'
151
+ ? msg.content.slice(0, 400)
152
+ : JSON.stringify(msg.content).slice(0, 400);
153
+ const toolCalls =
154
+ 'tool_calls' in msg
155
+ ? (msg as { tool_calls?: Array<{ name: string; args: unknown }> })
156
+ .tool_calls
157
+ : undefined;
158
+ console.log(`[${type}]${name ? ` name=${name}` : ''}`);
159
+ if (toolCalls?.length) {
160
+ for (const tc of toolCalls) {
161
+ console.log(
162
+ ` tool_call: ${tc.name}(${JSON.stringify(tc.args).slice(0, 150)})`
163
+ );
164
+ }
165
+ }
166
+ console.log(` content: ${content}\n`);
167
+ }
168
+
169
+ const subagentMsgs = msgs.filter(
170
+ (m) =>
171
+ m._getType() === 'tool' &&
172
+ (m as { name?: string }).name === Constants.SUBAGENT
173
+ );
174
+
175
+ console.log('--- Verification ---');
176
+ console.log(`subagent tool calls seen (parent): ${subagentMsgs.length}`);
177
+ console.log(
178
+ `ON_TOOL_EXECUTE dispatched (parent saw): ${toolCallCount} (expected >= 1 if subagent used calculator)`
179
+ );
180
+ if (subagentMsgs[0]) {
181
+ console.log(
182
+ `\nsubagent result:\n${(subagentMsgs[0].content as string).slice(0, 600)}`
183
+ );
184
+ }
185
+ }
186
+
187
+ main().catch((err) => {
188
+ console.error('Script error:', err);
189
+ process.exit(1);
190
+ });
@@ -0,0 +1,160 @@
1
+ import { config } from 'dotenv';
2
+ config();
3
+
4
+ import { HumanMessage } from '@langchain/core/messages';
5
+ import type { BaseMessage } from '@langchain/core/messages';
6
+ import { tool } from '@langchain/core/tools';
7
+ import { z } from 'zod';
8
+ import type * as t from '@/types';
9
+ import { ChatModelStreamHandler } from '@/stream';
10
+ import { ToolEndHandler, ModelEndHandler } from '@/events';
11
+ import { Providers, GraphEvents, Constants } from '@/common';
12
+ import { Run } from '@/run';
13
+
14
+ /**
15
+ * Diagnostic: verify a self-spawned subagent can call parent's real tools.
16
+ * Expected before-fix: parent delegates to self; child cannot invoke calculator.
17
+ */
18
+ const apiKey = process.env.OPENAI_API_KEY!;
19
+ if (!apiKey) {
20
+ console.error('Missing OPENAI_API_KEY');
21
+ process.exit(1);
22
+ }
23
+
24
+ const calculator = tool(
25
+ async ({ expression }) => {
26
+ const result = eval(expression); // don't do this in prod
27
+ return `${expression} = ${result}`;
28
+ },
29
+ {
30
+ name: 'calculator',
31
+ description: 'Evaluate a math expression. Use for any arithmetic.',
32
+ schema: z.object({
33
+ expression: z.string().describe("A JS math expression, e.g. '42 * 58'"),
34
+ }),
35
+ }
36
+ );
37
+
38
+ async function main() {
39
+ console.log('=== Subagent Tool-Access Diagnostic ===\n');
40
+
41
+ const parentAgent: t.AgentInputs = {
42
+ agentId: 'supervisor',
43
+ provider: Providers.OPENAI,
44
+ clientOptions: { modelName: 'gpt-4o-mini', apiKey },
45
+ instructions: `You have calculator AND can spawn a "self" subagent in an isolated context.
46
+ For any arithmetic question that would bloat your context, spawn the "self" subagent with the math task.
47
+ The subagent must use the calculator tool — never estimate.`,
48
+ maxContextTokens: 8000,
49
+ tools: [calculator],
50
+ subagentConfigs: [
51
+ {
52
+ type: 'self',
53
+ self: true,
54
+ name: 'supervisor',
55
+ description:
56
+ 'Spawn a copy of this agent in an isolated context for a focused math subtask.',
57
+ },
58
+ ],
59
+ };
60
+
61
+ const customHandlers: Record<string, t.EventHandler> = {
62
+ [GraphEvents.CHAT_MODEL_STREAM]: new ChatModelStreamHandler(),
63
+ [GraphEvents.TOOL_END]: new ToolEndHandler(),
64
+ [GraphEvents.CHAT_MODEL_END]: new ModelEndHandler(),
65
+ [GraphEvents.ON_RUN_STEP]: {
66
+ handle: (event, data): void => {
67
+ console.log(
68
+ `[PARENT EVENT] ${event}`,
69
+ JSON.stringify(data).slice(0, 200)
70
+ );
71
+ },
72
+ },
73
+ [GraphEvents.ON_RUN_STEP_COMPLETED]: {
74
+ handle: (event, data): void => {
75
+ console.log(
76
+ `[PARENT EVENT] ${event}`,
77
+ JSON.stringify(data).slice(0, 200)
78
+ );
79
+ },
80
+ },
81
+ };
82
+
83
+ const run = await Run.create<t.IState>({
84
+ runId: `subagent-debug-${Date.now()}`,
85
+ graphConfig: { type: 'standard', agents: [parentAgent] },
86
+ customHandlers,
87
+ });
88
+
89
+ const question = new HumanMessage(
90
+ 'Compute (42 * 58) + (13 ^ 3). Spawn the self subagent to do this, and have IT use calculator.'
91
+ );
92
+
93
+ console.log('User:', question.content, '\n');
94
+
95
+ await run.processStream(
96
+ { messages: [question] },
97
+ {
98
+ configurable: { thread_id: `subagent-debug` },
99
+ version: 'v2' as const,
100
+ }
101
+ );
102
+
103
+ const msgs = (run.getRunMessages() ?? []) as BaseMessage[];
104
+ console.log('\n--- Run messages ---\n');
105
+ for (const msg of msgs) {
106
+ const type = msg._getType();
107
+ const name = 'name' in msg ? (msg as { name?: string }).name : undefined;
108
+ const content =
109
+ typeof msg.content === 'string'
110
+ ? msg.content.slice(0, 400)
111
+ : JSON.stringify(msg.content).slice(0, 400);
112
+ const toolCalls =
113
+ 'tool_calls' in msg
114
+ ? (msg as { tool_calls?: Array<{ name: string; args: unknown }> })
115
+ .tool_calls
116
+ : undefined;
117
+ console.log(`[${type}]${name ? ` name=${name}` : ''}`);
118
+ if (toolCalls?.length) {
119
+ for (const tc of toolCalls) {
120
+ console.log(
121
+ ` tool_call: ${tc.name}(${JSON.stringify(tc.args).slice(0, 150)})`
122
+ );
123
+ }
124
+ }
125
+ console.log(` content: ${content}\n`);
126
+ }
127
+
128
+ const subagentCalls = msgs.filter(
129
+ (m) =>
130
+ m._getType() === 'tool' &&
131
+ 'name' in m &&
132
+ (m as { name?: string }).name === Constants.SUBAGENT
133
+ );
134
+ const calculatorCalls = msgs.filter(
135
+ (m) =>
136
+ m._getType() === 'tool' &&
137
+ 'name' in m &&
138
+ (m as { name?: string }).name === 'calculator'
139
+ );
140
+
141
+ console.log('--- Verification ---');
142
+ console.log(`subagent tool calls seen (parent): ${subagentCalls.length}`);
143
+ console.log(
144
+ `calculator tool calls seen (parent): ${calculatorCalls.length} (expected: 0 if subagent did the math)`
145
+ );
146
+ if (subagentCalls.length > 0) {
147
+ const subResult = subagentCalls[0].content as string;
148
+ console.log(`\nsubagent result snippet:\n${subResult.slice(0, 600)}\n`);
149
+ if (/\berror\b/i.test(subResult) && /tool/i.test(subResult)) {
150
+ console.log('⚠️ BUG CONFIRMED: subagent result mentions tool error');
151
+ } else if (!/\d/.test(subResult)) {
152
+ console.log('⚠️ POSSIBLY BUGGY: subagent result has no numbers');
153
+ }
154
+ }
155
+ }
156
+
157
+ main().catch((err) => {
158
+ console.error('Script error:', err);
159
+ process.exit(1);
160
+ });
@@ -75,7 +75,7 @@ async function testCustomPromptKey() {
75
75
  {
76
76
  from: 'supervisor',
77
77
  to: 'researcher',
78
- edgeType: 'transfer',
78
+ edgeType: EdgeType.HANDOFF,
79
79
  // Custom parameter name: "query"
80
80
  prompt: 'The research question or topic to investigate',
81
81
  promptKey: 'query',
@@ -83,7 +83,7 @@ async function testCustomPromptKey() {
83
83
  {
84
84
  from: 'supervisor',
85
85
  to: 'designer',
86
- edgeType: 'transfer',
86
+ edgeType: EdgeType.HANDOFF,
87
87
  // Custom parameter name: "requirements"
88
88
  prompt: 'The design requirements and constraints',
89
89
  promptKey: 'requirements',
@@ -91,7 +91,7 @@ async function testCustomPromptKey() {
91
91
  {
92
92
  from: 'supervisor',
93
93
  to: 'coder',
94
- edgeType: 'transfer',
94
+ edgeType: EdgeType.HANDOFF,
95
95
  // Custom parameter name: "specification"
96
96
  prompt: 'The technical specification for the code to implement',
97
97
  promptKey: 'specification',
@@ -123,7 +123,7 @@ async function testHandoffInput() {
123
123
  {
124
124
  from: 'supervisor',
125
125
  to: ['analyst', 'writer'],
126
- edgeType: 'transfer',
126
+ edgeType: EdgeType.HANDOFF,
127
127
  // This prompt field now serves as the description for the input parameter
128
128
  prompt:
129
129
  'Specific instructions for the specialist to follow. Be detailed about what analysis to perform, what data to focus on, or what content to create.',
@@ -121,7 +121,7 @@ When you receive a task, execute it thoroughly. Always identify yourself as the
121
121
  {
122
122
  from: 'coordinator',
123
123
  to: 'specialist',
124
- edgeType: 'transfer',
124
+ edgeType: EdgeType.HANDOFF,
125
125
  description: 'Transfer to specialist for detailed work',
126
126
  prompt:
127
127
  'Provide specific instructions for the specialist about what to analyze or create',
@@ -226,7 +226,7 @@ You must follow the exact format requested.`,
226
226
  {
227
227
  from: 'manager',
228
228
  to: 'writer',
229
- edgeType: 'transfer',
229
+ edgeType: EdgeType.HANDOFF,
230
230
  description: 'Transfer to writer for report creation',
231
231
  prompt:
232
232
  'Provide specific formatting and content instructions for the writer',
@@ -322,7 +322,7 @@ If asked about non-Italian food, politely redirect to Italian alternatives.`,
322
322
  {
323
323
  from: 'router',
324
324
  to: 'chef',
325
- edgeType: 'transfer',
325
+ edgeType: EdgeType.HANDOFF,
326
326
  description: 'Transfer to chef',
327
327
  prompt: 'Instructions for the chef about how to respond',
328
328
  promptKey: 'instructions',
@@ -170,7 +170,7 @@ async function testSupervisorListHandoff() {
170
170
  ],
171
171
  description:
172
172
  'Transfer to appropriate specialist based on task requirements',
173
- edgeType: 'transfer',
173
+ edgeType: EdgeType.HANDOFF,
174
174
  },
175
175
  ];
176
176
 
@@ -7,7 +7,7 @@ import { HumanMessage, BaseMessage } from '@langchain/core/messages';
7
7
  import type * as t from '@/types';
8
8
  import { labelContentByAgent, formatAgentMessages } from '@/messages/format';
9
9
  import { ChatModelStreamHandler, createContentAggregator } from '@/stream';
10
- import { Providers, GraphEvents, StepTypes } from '@/common';
10
+ import { Providers, GraphEvents, EdgeType, StepTypes } from '@/common';
11
11
  import { ToolEndHandler, ModelEndHandler } from '@/events';
12
12
  import { Run } from '@/run';
13
13
 
@@ -83,13 +83,13 @@ async function testParallelWithAgentLabeling() {
83
83
  from: 'researcher',
84
84
  to: ['analyst1', 'analyst2', 'analyst3'],
85
85
  description: 'Distribute research to specialist analysts',
86
- edgeType: 'sequence',
86
+ edgeType: EdgeType.DIRECT,
87
87
  },
88
88
  {
89
89
  from: ['analyst1', 'analyst2', 'analyst3'],
90
90
  to: 'summarizer',
91
91
  description: 'Aggregate analysis results',
92
- edgeType: 'sequence',
92
+ edgeType: EdgeType.DIRECT,
93
93
  prompt:
94
94
  'Based on the analyses below, provide an integrated summary:\n\n{results}',
95
95
  },
@@ -82,14 +82,14 @@ When delegating, provide clear instructions to each agent about what they should
82
82
  {
83
83
  from: 'coordinator',
84
84
  to: 'researcher',
85
- edgeType: 'transfer',
85
+ edgeType: EdgeType.HANDOFF,
86
86
  description: 'Transfer to researcher for research and fact-finding tasks',
87
87
  prompt: 'Research task instructions',
88
88
  },
89
89
  {
90
90
  from: 'coordinator',
91
91
  to: 'writer',
92
- edgeType: 'transfer',
92
+ edgeType: EdgeType.HANDOFF,
93
93
  description: 'Transfer to writer for content creation and writing tasks',
94
94
  prompt: 'Writing task instructions',
95
95
  },
@@ -78,7 +78,7 @@ async function testBedrockThinkingHandoff() {
78
78
  from: 'supervisor',
79
79
  to: ['code_reviewer'],
80
80
  description: 'Transfer to code review specialist',
81
- edgeType: 'transfer',
81
+ edgeType: EdgeType.HANDOFF,
82
82
  },
83
83
  ];
84
84
 
@@ -80,7 +80,7 @@ async function testThinkingHandoff() {
80
80
  from: 'supervisor',
81
81
  to: ['code_reviewer'],
82
82
  description: 'Transfer to code review specialist',
83
- edgeType: 'transfer',
83
+ edgeType: EdgeType.HANDOFF,
84
84
  },
85
85
  ];
86
86
 
@@ -97,7 +97,7 @@ async function testThinkingToThinkingHandoffBedrock() {
97
97
  from: 'supervisor',
98
98
  to: ['code_reviewer'],
99
99
  description: 'Transfer to code review specialist',
100
- edgeType: 'transfer',
100
+ edgeType: EdgeType.HANDOFF,
101
101
  },
102
102
  ];
103
103
 
@@ -156,7 +156,7 @@ Do NOT write a long response. Just call the tool and hand off.`,
156
156
  from: 'router',
157
157
  to: 'data_analyst',
158
158
  description: 'Transfer to data analyst after checking sessions',
159
- edgeType: 'transfer',
159
+ edgeType: EdgeType.HANDOFF,
160
160
  prompt:
161
161
  'Provide specific instructions for the data analyst about what to analyze',
162
162
  promptKey: 'instructions',
@@ -133,7 +133,7 @@ async function testToolsBeforeHandoff() {
133
133
  from: 'research_coordinator',
134
134
  to: 'report_writer',
135
135
  description: 'Transfer to report writer after completing research',
136
- edgeType: 'transfer',
136
+ edgeType: EdgeType.HANDOFF,
137
137
  },
138
138
  ];
139
139