@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
@@ -94,7 +94,7 @@ describe('Agent Handoffs Tests', () => {
94
94
  {
95
95
  from: 'agent_a',
96
96
  to: 'agent_b',
97
- edgeType: EdgeType.TRANSFER,
97
+ edgeType: EdgeType.HANDOFF,
98
98
  description: 'Transfer to agent B',
99
99
  },
100
100
  ];
@@ -128,7 +128,7 @@ describe('Agent Handoffs Tests', () => {
128
128
  {
129
129
  from: 'agent_a',
130
130
  to: 'agent_b',
131
- edgeType: EdgeType.TRANSFER,
131
+ edgeType: EdgeType.HANDOFF,
132
132
  description: 'Transfer to agent B when needed',
133
133
  },
134
134
  ];
@@ -192,7 +192,7 @@ describe('Agent Handoffs Tests', () => {
192
192
  {
193
193
  from: 'agent_a',
194
194
  to: 'agent_b',
195
- edgeType: EdgeType.TRANSFER,
195
+ edgeType: EdgeType.HANDOFF,
196
196
  },
197
197
  ];
198
198
 
@@ -223,13 +223,13 @@ describe('Agent Handoffs Tests', () => {
223
223
  {
224
224
  from: 'agent_a',
225
225
  to: 'agent_b',
226
- edgeType: EdgeType.TRANSFER,
226
+ edgeType: EdgeType.HANDOFF,
227
227
  description: 'Transfer to agent B',
228
228
  },
229
229
  {
230
230
  from: 'agent_b',
231
231
  to: 'agent_a',
232
- edgeType: EdgeType.TRANSFER,
232
+ edgeType: EdgeType.HANDOFF,
233
233
  description: 'Transfer to agent A',
234
234
  },
235
235
  ];
@@ -268,12 +268,12 @@ describe('Agent Handoffs Tests', () => {
268
268
  {
269
269
  from: 'agent_a',
270
270
  to: 'agent_b',
271
- edgeType: EdgeType.TRANSFER,
271
+ edgeType: EdgeType.HANDOFF,
272
272
  },
273
273
  {
274
274
  from: 'agent_b',
275
275
  to: 'agent_a',
276
- edgeType: EdgeType.TRANSFER,
276
+ edgeType: EdgeType.HANDOFF,
277
277
  },
278
278
  ];
279
279
 
@@ -334,13 +334,13 @@ describe('Agent Handoffs Tests', () => {
334
334
  {
335
335
  from: 'agent_a',
336
336
  to: 'agent_b',
337
- edgeType: EdgeType.TRANSFER,
337
+ edgeType: EdgeType.HANDOFF,
338
338
  description: 'Transfer to agent B',
339
339
  },
340
340
  {
341
341
  from: 'agent_b',
342
342
  to: 'agent_c',
343
- edgeType: EdgeType.TRANSFER,
343
+ edgeType: EdgeType.HANDOFF,
344
344
  description: 'Transfer to agent C',
345
345
  },
346
346
  ];
@@ -395,19 +395,19 @@ describe('Agent Handoffs Tests', () => {
395
395
  {
396
396
  from: 'router',
397
397
  to: 'agent_a',
398
- edgeType: EdgeType.TRANSFER,
398
+ edgeType: EdgeType.HANDOFF,
399
399
  description: 'Transfer to agent A for task A',
400
400
  },
401
401
  {
402
402
  from: 'router',
403
403
  to: 'agent_b',
404
- edgeType: EdgeType.TRANSFER,
404
+ edgeType: EdgeType.HANDOFF,
405
405
  description: 'Transfer to agent B for task B',
406
406
  },
407
407
  {
408
408
  from: 'router',
409
409
  to: 'agent_c',
410
- edgeType: EdgeType.TRANSFER,
410
+ edgeType: EdgeType.HANDOFF,
411
411
  description: 'Transfer to agent C for task C',
412
412
  },
413
413
  ];
@@ -449,13 +449,13 @@ describe('Agent Handoffs Tests', () => {
449
449
  {
450
450
  from: 'router',
451
451
  to: 'agent_a',
452
- edgeType: EdgeType.TRANSFER,
452
+ edgeType: EdgeType.HANDOFF,
453
453
  description: 'Transfer to agent A',
454
454
  },
455
455
  {
456
456
  from: 'router',
457
457
  to: 'agent_b',
458
- edgeType: EdgeType.TRANSFER,
458
+ edgeType: EdgeType.HANDOFF,
459
459
  description: 'Transfer to agent B',
460
460
  },
461
461
  ];
@@ -519,7 +519,7 @@ describe('Agent Handoffs Tests', () => {
519
519
  {
520
520
  from: 'agent_a',
521
521
  to: 'agent_b',
522
- edgeType: EdgeType.TRANSFER,
522
+ edgeType: EdgeType.HANDOFF,
523
523
  description: 'Transfer to agent B with instructions',
524
524
  prompt: 'Provide specific instructions for agent B',
525
525
  promptKey: 'instructions',
@@ -551,7 +551,7 @@ describe('Agent Handoffs Tests', () => {
551
551
  {
552
552
  from: 'agent_a',
553
553
  to: 'agent_b',
554
- edgeType: EdgeType.TRANSFER,
554
+ edgeType: EdgeType.HANDOFF,
555
555
  prompt: 'Instructions for handoff',
556
556
  // promptKey not specified, should default to 'instructions'
557
557
  },
@@ -581,7 +581,7 @@ describe('Agent Handoffs Tests', () => {
581
581
  {
582
582
  from: 'agent_a',
583
583
  to: 'agent_b',
584
- edgeType: EdgeType.TRANSFER,
584
+ edgeType: EdgeType.HANDOFF,
585
585
  description: 'Transfer to agent B',
586
586
  prompt: 'Additional context for agent B',
587
587
  promptKey: 'context',
@@ -638,7 +638,7 @@ describe('Agent Handoffs Tests', () => {
638
638
  {
639
639
  from: 'agent_a',
640
640
  to: 'agent_a',
641
- edgeType: EdgeType.TRANSFER,
641
+ edgeType: EdgeType.HANDOFF,
642
642
  description: 'Self-handoff (should be allowed but unusual)',
643
643
  },
644
644
  ];
@@ -724,7 +724,7 @@ describe('Agent Handoffs Tests', () => {
724
724
  {
725
725
  from: 'agent_a',
726
726
  to: 'agent_b',
727
- edgeType: EdgeType.TRANSFER,
727
+ edgeType: EdgeType.HANDOFF,
728
728
  description: 'Transfer to agent B',
729
729
  },
730
730
  ];
@@ -759,12 +759,12 @@ describe('Agent Handoffs Tests', () => {
759
759
  {
760
760
  from: 'agent_a',
761
761
  to: 'agent_b',
762
- edgeType: EdgeType.TRANSFER,
762
+ edgeType: EdgeType.HANDOFF,
763
763
  },
764
764
  {
765
765
  from: 'agent_b',
766
766
  to: 'agent_c',
767
- edgeType: EdgeType.TRANSFER,
767
+ edgeType: EdgeType.HANDOFF,
768
768
  },
769
769
  ];
770
770
 
@@ -806,12 +806,12 @@ describe('Agent Handoffs Tests', () => {
806
806
  {
807
807
  from: 'agent_a',
808
808
  to: 'agent_c',
809
- edgeType: EdgeType.TRANSFER,
809
+ edgeType: EdgeType.HANDOFF,
810
810
  },
811
811
  {
812
812
  from: 'agent_b',
813
813
  to: 'agent_c',
814
- edgeType: EdgeType.TRANSFER,
814
+ edgeType: EdgeType.HANDOFF,
815
815
  },
816
816
  ];
817
817
 
@@ -853,7 +853,7 @@ describe('Agent Handoffs Tests', () => {
853
853
  {
854
854
  from: 'router',
855
855
  to: 'data_analyst',
856
- edgeType: EdgeType.TRANSFER,
856
+ edgeType: EdgeType.HANDOFF,
857
857
  description: 'Transfer to data analyst',
858
858
  prompt: 'Instructions for the analyst about what to analyze',
859
859
  promptKey: 'instructions',
@@ -939,7 +939,7 @@ describe('Agent Handoffs Tests', () => {
939
939
  {
940
940
  from: 'flight_assistant',
941
941
  to: 'hotel_assistant',
942
- edgeType: EdgeType.TRANSFER,
942
+ edgeType: EdgeType.HANDOFF,
943
943
  description: 'Transfer to hotel booking',
944
944
  },
945
945
  ];
@@ -970,7 +970,7 @@ describe('Agent Handoffs Tests', () => {
970
970
  {
971
971
  from: 'agent_with_underscores',
972
972
  to: 'AgentWithCamelCase',
973
- edgeType: EdgeType.TRANSFER,
973
+ edgeType: EdgeType.HANDOFF,
974
974
  },
975
975
  ];
976
976
 
@@ -990,461 +990,4 @@ describe('Agent Handoffs Tests', () => {
990
990
  );
991
991
  });
992
992
  });
993
-
994
- describe('Handoff Tool Description Enrichment', () => {
995
- it('should use agent name and description when edge.description is not provided', async () => {
996
- const agents: t.AgentInputs[] = [
997
- createBasicAgent('supervisor', 'You are a supervisor'),
998
- {
999
- ...createBasicAgent('data_analyst', 'You analyze data'),
1000
- name: 'Data Analyst',
1001
- description:
1002
- 'Analyzes datasets, creates charts, and provides statistical insights',
1003
- },
1004
- ];
1005
-
1006
- const edges: t.GraphEdge[] = [
1007
- {
1008
- from: 'supervisor',
1009
- to: 'data_analyst',
1010
- edgeType: EdgeType.TRANSFER,
1011
- // No description provided - should auto-generate from agent name + description
1012
- },
1013
- ];
1014
-
1015
- const run = await Run.create(createTestConfig(agents, edges));
1016
-
1017
- const supervisorContext = (run.Graph as StandardGraph).agentContexts.get(
1018
- 'supervisor'
1019
- );
1020
- const handoffTool = findToolByName(
1021
- supervisorContext?.graphTools,
1022
- `${Constants.LC_TRANSFER_TO_}data_analyst`
1023
- );
1024
-
1025
- expect(handoffTool).toBeDefined();
1026
- const description = getToolDescription(handoffTool!);
1027
- expect(description).toContain('Data Analyst');
1028
- expect(description).toContain('Analyzes datasets');
1029
- });
1030
-
1031
- it('should use agent name without description when only name is available', async () => {
1032
- const agents: t.AgentInputs[] = [
1033
- createBasicAgent('supervisor', 'You are a supervisor'),
1034
- {
1035
- ...createBasicAgent('writer', 'You write things'),
1036
- name: 'Content Writer',
1037
- // No description field
1038
- },
1039
- ];
1040
-
1041
- const edges: t.GraphEdge[] = [
1042
- {
1043
- from: 'supervisor',
1044
- to: 'writer',
1045
- edgeType: EdgeType.TRANSFER,
1046
- },
1047
- ];
1048
-
1049
- const run = await Run.create(createTestConfig(agents, edges));
1050
-
1051
- const supervisorContext = (run.Graph as StandardGraph).agentContexts.get(
1052
- 'supervisor'
1053
- );
1054
- const handoffTool = findToolByName(
1055
- supervisorContext?.graphTools,
1056
- `${Constants.LC_TRANSFER_TO_}writer`
1057
- );
1058
-
1059
- expect(handoffTool).toBeDefined();
1060
- const description = getToolDescription(handoffTool!);
1061
- expect(description).toContain('Content Writer');
1062
- });
1063
-
1064
- it('should prefer explicit edge.description over auto-generated description', async () => {
1065
- const agents: t.AgentInputs[] = [
1066
- createBasicAgent('supervisor', 'You are a supervisor'),
1067
- {
1068
- ...createBasicAgent('agent_b', 'You do things'),
1069
- name: 'Agent B',
1070
- description: 'This is agent B description',
1071
- },
1072
- ];
1073
-
1074
- const edges: t.GraphEdge[] = [
1075
- {
1076
- from: 'supervisor',
1077
- to: 'agent_b',
1078
- edgeType: EdgeType.TRANSFER,
1079
- description: 'Custom handoff description that takes priority',
1080
- },
1081
- ];
1082
-
1083
- const run = await Run.create(createTestConfig(agents, edges));
1084
-
1085
- const supervisorContext = (run.Graph as StandardGraph).agentContexts.get(
1086
- 'supervisor'
1087
- );
1088
- const handoffTool = findToolByName(
1089
- supervisorContext?.graphTools,
1090
- `${Constants.LC_TRANSFER_TO_}agent_b`
1091
- );
1092
-
1093
- expect(handoffTool).toBeDefined();
1094
- const description = getToolDescription(handoffTool!);
1095
- expect(description).toBe(
1096
- 'Custom handoff description that takes priority'
1097
- );
1098
- });
1099
-
1100
- it('should generate meaningful descriptions for multiple handoff targets', async () => {
1101
- const agents: t.AgentInputs[] = [
1102
- createBasicAgent('router', 'You route requests'),
1103
- {
1104
- ...createBasicAgent('sales', 'Handle sales'),
1105
- name: 'Sales Agent',
1106
- description: 'Handles product pricing, quotes, and purchase orders',
1107
- },
1108
- {
1109
- ...createBasicAgent('support', 'Handle support'),
1110
- name: 'Support Agent',
1111
- description: 'Troubleshoots technical issues and handles bug reports',
1112
- },
1113
- {
1114
- ...createBasicAgent('billing', 'Handle billing'),
1115
- name: 'Billing Agent',
1116
- description: 'Manages invoices, payments, and subscription changes',
1117
- },
1118
- ];
1119
-
1120
- const edges: t.GraphEdge[] = [
1121
- { from: 'router', to: 'sales', edgeType: EdgeType.TRANSFER },
1122
- { from: 'router', to: 'support', edgeType: EdgeType.TRANSFER },
1123
- { from: 'router', to: 'billing', edgeType: EdgeType.TRANSFER },
1124
- ];
1125
-
1126
- const run = await Run.create(createTestConfig(agents, edges));
1127
-
1128
- const routerContext = (run.Graph as StandardGraph).agentContexts.get(
1129
- 'router'
1130
- );
1131
-
1132
- const salesTool = findToolByName(
1133
- routerContext?.graphTools,
1134
- `${Constants.LC_TRANSFER_TO_}sales`
1135
- );
1136
- const supportTool = findToolByName(
1137
- routerContext?.graphTools,
1138
- `${Constants.LC_TRANSFER_TO_}support`
1139
- );
1140
- const billingTool = findToolByName(
1141
- routerContext?.graphTools,
1142
- `${Constants.LC_TRANSFER_TO_}billing`
1143
- );
1144
-
1145
- // Each tool should have a meaningful description from the target agent
1146
- expect(getToolDescription(salesTool!)).toContain('pricing');
1147
- expect(getToolDescription(supportTool!)).toContain('Troubleshoots');
1148
- expect(getToolDescription(billingTool!)).toContain('invoices');
1149
- });
1150
-
1151
- it('should store description in AgentContext', async () => {
1152
- const agents: t.AgentInputs[] = [
1153
- {
1154
- ...createBasicAgent('agent_a', 'Instructions for A'),
1155
- name: 'Agent Alpha',
1156
- description: 'Handles alpha tasks',
1157
- },
1158
- ];
1159
-
1160
- const edges: t.GraphEdge[] = [];
1161
-
1162
- const run = await Run.create(createTestConfig(agents, edges));
1163
-
1164
- const context = (run.Graph as StandardGraph).agentContexts.get('agent_a');
1165
- expect(context).toBeDefined();
1166
- expect(context?.name).toBe('Agent Alpha');
1167
- expect(context?.description).toBe('Handles alpha tasks');
1168
- });
1169
- });
1170
-
1171
- describe('Last Active Agent Tracking', () => {
1172
- it('should return undefined for getLastActiveAgentId before any agent runs', async () => {
1173
- const agents: t.AgentInputs[] = [
1174
- createBasicAgent('agent_a', 'You are agent A'),
1175
- createBasicAgent('agent_b', 'You are agent B'),
1176
- ];
1177
-
1178
- const edges: t.GraphEdge[] = [
1179
- { from: 'agent_a', to: 'agent_b', edgeType: EdgeType.TRANSFER },
1180
- ];
1181
-
1182
- const run = await Run.create(createTestConfig(agents, edges));
1183
-
1184
- // Before running, lastActiveAgentId should be undefined
1185
- expect(run.getLastActiveAgentId()).toBeUndefined();
1186
- });
1187
-
1188
- it('should return undefined for single-agent graph', async () => {
1189
- const agents: t.AgentInputs[] = [
1190
- createBasicAgent('agent_a', 'You are agent A'),
1191
- ];
1192
-
1193
- const config: t.RunConfig = {
1194
- runId: `single-agent-test-${Date.now()}`,
1195
- graphConfig: {
1196
- type: 'standard',
1197
- agents,
1198
- },
1199
- returnContent: true,
1200
- };
1201
-
1202
- const run = await Run.create(config);
1203
-
1204
- // Single-agent graph does not have getLastActiveAgentId
1205
- expect(run.getLastActiveAgentId()).toBeUndefined();
1206
- });
1207
-
1208
- it('should track last active agent after handoff execution', async () => {
1209
- const agents: t.AgentInputs[] = [
1210
- createBasicAgent('agent_a', 'You are agent A. Transfer to B.'),
1211
- createBasicAgent('agent_b', 'You are agent B.'),
1212
- ];
1213
-
1214
- const edges: t.GraphEdge[] = [
1215
- {
1216
- from: 'agent_a',
1217
- to: 'agent_b',
1218
- edgeType: EdgeType.TRANSFER,
1219
- description: 'Transfer to B',
1220
- },
1221
- ];
1222
-
1223
- const run = await Run.create(createTestConfig(agents, edges));
1224
-
1225
- run.Graph?.overrideTestModel(['Transferring to B', 'Hello from B'], 10, [
1226
- {
1227
- id: 'tool_call_handoff',
1228
- name: `${Constants.LC_TRANSFER_TO_}agent_b`,
1229
- args: {},
1230
- } as ToolCall,
1231
- ]);
1232
-
1233
- const messages = [new HumanMessage('Hello')];
1234
- const config: Partial<RunnableConfig> & {
1235
- version: 'v1' | 'v2';
1236
- streamMode: string;
1237
- } = {
1238
- configurable: { thread_id: 'last-active-test' },
1239
- streamMode: 'values',
1240
- version: 'v2' as const,
1241
- };
1242
-
1243
- await run.processStream({ messages }, config);
1244
-
1245
- // After handoff A -> B, last active agent should be B
1246
- expect(run.getLastActiveAgentId()).toBe('agent_b');
1247
- });
1248
- });
1249
-
1250
- describe('Content Tool Compaction in Handoff', () => {
1251
- it('should compact verbose content_tool ToolMessages during handoff', async () => {
1252
- const agents: t.AgentInputs[] = [
1253
- createBasicAgent('agent_a', 'You are agent A'),
1254
- createBasicAgent('agent_b', 'You are agent B'),
1255
- ];
1256
-
1257
- const edges: t.GraphEdge[] = [
1258
- { from: 'agent_a', to: 'agent_b', edgeType: EdgeType.TRANSFER },
1259
- ];
1260
-
1261
- const run = await Run.create(createTestConfig(agents, edges));
1262
- const { MultiAgentGraph } = await import('@/graphs/MultiAgentGraph');
1263
-
1264
- if (run.Graph instanceof MultiAgentGraph) {
1265
- // Build a mock message chain with a verbose content_tool ToolMessage
1266
- const _verboseReadOutput =
1267
- '"Dashboard.tsx" (content_id: abc123)\nShowing lines 1-200 of 200 total.\n---\n' +
1268
- Array.from(
1269
- { length: 200 },
1270
- (_, i) => ` ${i + 1} | const x${i} = ${i};`
1271
- ).join('\n') +
1272
- '\n---';
1273
-
1274
- const _messages = [
1275
- new HumanMessage('Read the file'),
1276
- // Simulate AI calling content_tool then transfer
1277
- // The processHandoffReception is private, so we test indirectly via the graph execution
1278
- ];
1279
-
1280
- // Verify that a ToolMessage with content_tool name and > 500 chars would be compacted
1281
- const longContent = 'x'.repeat(600);
1282
- const toolMsg = new ToolMessage({
1283
- content: `First line summary\n${longContent}`,
1284
- name: 'content_tool',
1285
- tool_call_id: 'test-tc-1',
1286
- status: 'success',
1287
- });
1288
-
1289
- // The compaction logic truncates to first line + suffix
1290
- const firstLine = `First line summary\n${longContent}`.split('\n')[0];
1291
- expect(firstLine).toBe('First line summary');
1292
- // ToolMessage content is > 500 chars so it should be compacted
1293
- expect(toolMsg.content.length).toBeGreaterThan(500);
1294
- }
1295
- });
1296
- });
1297
-
1298
- describe('Multi-Turn Agent Resumption', () => {
1299
- it('should route START to resumeFromAgentId when valid', async () => {
1300
- const agents: t.AgentInputs[] = [
1301
- createBasicAgent('router', 'You are the router agent'),
1302
- createBasicAgent('writer', 'You are the writer agent'),
1303
- createBasicAgent('researcher', 'You are the researcher agent'),
1304
- ];
1305
-
1306
- const edges: t.GraphEdge[] = [
1307
- { from: 'router', to: 'writer', edgeType: EdgeType.TRANSFER },
1308
- { from: 'router', to: 'researcher', edgeType: EdgeType.TRANSFER },
1309
- ];
1310
-
1311
- // Create run WITH resumeFromAgentId set to 'writer'
1312
- const run = await Run.create({
1313
- runId: `resume-test-${Date.now()}`,
1314
- graphConfig: {
1315
- type: 'multi-agent',
1316
- agents,
1317
- edges,
1318
- resumeFromAgentId: 'writer',
1319
- },
1320
- returnContent: true,
1321
- skipCleanup: true,
1322
- });
1323
-
1324
- // Graph should compile without error
1325
- expect(run.graphRunnable).toBeDefined();
1326
-
1327
- // The writer agent should be reachable from START
1328
- // (We verify by checking that the graph compiled successfully with conditional routing)
1329
- expect(run.Graph).toBeDefined();
1330
- });
1331
-
1332
- it('should fall back to default starting nodes when resumeFromAgentId is invalid', async () => {
1333
- const agents: t.AgentInputs[] = [
1334
- createBasicAgent('router', 'You are the router agent'),
1335
- createBasicAgent('writer', 'You are the writer agent'),
1336
- ];
1337
-
1338
- const edges: t.GraphEdge[] = [
1339
- { from: 'router', to: 'writer', edgeType: EdgeType.TRANSFER },
1340
- ];
1341
-
1342
- // Create run with an invalid resumeFromAgentId
1343
- const run = await Run.create({
1344
- runId: `resume-invalid-test-${Date.now()}`,
1345
- graphConfig: {
1346
- type: 'multi-agent',
1347
- agents,
1348
- edges,
1349
- resumeFromAgentId: 'nonexistent_agent',
1350
- },
1351
- returnContent: true,
1352
- skipCleanup: true,
1353
- });
1354
-
1355
- // Should still compile (falls back to default starting nodes)
1356
- expect(run.graphRunnable).toBeDefined();
1357
- expect(run.Graph).toBeDefined();
1358
- });
1359
-
1360
- it('should compile normally without resumeFromAgentId (backward compat)', async () => {
1361
- const agents: t.AgentInputs[] = [
1362
- createBasicAgent('router', 'You are the router agent'),
1363
- createBasicAgent('writer', 'You are the writer agent'),
1364
- ];
1365
-
1366
- const edges: t.GraphEdge[] = [
1367
- { from: 'router', to: 'writer', edgeType: EdgeType.TRANSFER },
1368
- ];
1369
-
1370
- // Create run WITHOUT resumeFromAgentId — existing behavior
1371
- const run = await Run.create(createTestConfig(agents, edges));
1372
-
1373
- expect(run.graphRunnable).toBeDefined();
1374
- expect(run.Graph).toBeDefined();
1375
- });
1376
-
1377
- it('should route to resume agent and track lastActiveAgentId correctly', async () => {
1378
- const agents: t.AgentInputs[] = [
1379
- createBasicAgent('router', 'You are the router agent'),
1380
- createBasicAgent('writer', 'You are the writer agent'),
1381
- ];
1382
-
1383
- const edges: t.GraphEdge[] = [
1384
- { from: 'router', to: 'writer', edgeType: EdgeType.TRANSFER },
1385
- ];
1386
-
1387
- const run = await Run.create({
1388
- runId: `resume-execution-test-${Date.now()}`,
1389
- graphConfig: {
1390
- type: 'multi-agent',
1391
- agents,
1392
- edges,
1393
- resumeFromAgentId: 'writer',
1394
- },
1395
- returnContent: true,
1396
- skipCleanup: true,
1397
- });
1398
-
1399
- // Override test model to respond directly (no transfer)
1400
- run.Graph?.overrideTestModel(
1401
- ['I am the writer, continuing your work.'],
1402
- 10
1403
- );
1404
-
1405
- const messages = [new HumanMessage('Make the intro shorter')];
1406
- const config: Partial<RunnableConfig> & {
1407
- version: 'v1' | 'v2';
1408
- streamMode: string;
1409
- } = {
1410
- configurable: { thread_id: 'resume-exec-test' },
1411
- streamMode: 'values',
1412
- version: 'v2' as const,
1413
- };
1414
-
1415
- await run.processStream({ messages }, config);
1416
-
1417
- // After execution, lastActiveAgentId should be 'writer' (not 'router')
1418
- expect(run.getLastActiveAgentId()).toBe('writer');
1419
- });
1420
-
1421
- it('should handle resumeFromAgentId with parallel starting nodes', async () => {
1422
- const agents: t.AgentInputs[] = [
1423
- createBasicAgent('agent_a', 'You are agent A'),
1424
- createBasicAgent('agent_b', 'You are agent B'),
1425
- createBasicAgent('agent_c', 'You are agent C'),
1426
- ];
1427
-
1428
- // Both A and B are starting nodes (no incoming edges), C has incoming
1429
- const edges: t.GraphEdge[] = [
1430
- { from: 'agent_a', to: 'agent_c', edgeType: EdgeType.TRANSFER },
1431
- { from: 'agent_b', to: 'agent_c', edgeType: EdgeType.TRANSFER },
1432
- ];
1433
-
1434
- // Resume from agent_c — should override the parallel start (A + B)
1435
- const run = await Run.create({
1436
- runId: `resume-parallel-test-${Date.now()}`,
1437
- graphConfig: {
1438
- type: 'multi-agent',
1439
- agents,
1440
- edges,
1441
- resumeFromAgentId: 'agent_c',
1442
- },
1443
- returnContent: true,
1444
- skipCleanup: true,
1445
- });
1446
-
1447
- expect(run.graphRunnable).toBeDefined();
1448
- });
1449
- });
1450
993
  });