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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (769) hide show
  1. package/README.md +62 -0
  2. package/dist/cjs/agents/AgentContext.cjs +274 -67
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/enum.cjs +44 -13
  5. package/dist/cjs/common/enum.cjs.map +1 -1
  6. package/dist/cjs/graphs/Graph.cjs +182 -5
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  8. package/dist/cjs/graphs/MultiAgentGraph.cjs +152 -1167
  9. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  10. package/dist/cjs/hooks/HookRegistry.cjs +162 -0
  11. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
  12. package/dist/cjs/hooks/executeHooks.cjs +276 -0
  13. package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
  14. package/dist/cjs/hooks/matchers.cjs +256 -0
  15. package/dist/cjs/hooks/matchers.cjs.map +1 -0
  16. package/dist/cjs/hooks/types.cjs +27 -0
  17. package/dist/cjs/hooks/types.cjs.map +1 -0
  18. package/dist/cjs/langchain/google-common.cjs +3 -0
  19. package/dist/cjs/langchain/google-common.cjs.map +1 -0
  20. package/dist/cjs/langchain/index.cjs +86 -0
  21. package/dist/cjs/langchain/index.cjs.map +1 -0
  22. package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
  23. package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
  24. package/dist/cjs/langchain/messages/tool.cjs +3 -0
  25. package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
  26. package/dist/cjs/langchain/messages.cjs +51 -0
  27. package/dist/cjs/langchain/messages.cjs.map +1 -0
  28. package/dist/cjs/langchain/openai.cjs +3 -0
  29. package/dist/cjs/langchain/openai.cjs.map +1 -0
  30. package/dist/cjs/langchain/prompts.cjs +11 -0
  31. package/dist/cjs/langchain/prompts.cjs.map +1 -0
  32. package/dist/cjs/langchain/runnables.cjs +19 -0
  33. package/dist/cjs/langchain/runnables.cjs.map +1 -0
  34. package/dist/cjs/langchain/tools.cjs +23 -0
  35. package/dist/cjs/langchain/tools.cjs.map +1 -0
  36. package/dist/cjs/langchain/utils/env.cjs +11 -0
  37. package/dist/cjs/langchain/utils/env.cjs.map +1 -0
  38. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
  39. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  40. package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
  41. package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
  42. package/dist/cjs/llm/bedrock/index.cjs +61 -33
  43. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  44. package/dist/cjs/llm/openai/index.cjs +0 -3
  45. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  46. package/dist/cjs/llm/openai/utils/index.cjs +27 -10
  47. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  48. package/dist/cjs/main.cjs +178 -117
  49. package/dist/cjs/main.cjs.map +1 -1
  50. package/dist/cjs/messages/cache.cjs +89 -0
  51. package/dist/cjs/messages/cache.cjs.map +1 -1
  52. package/dist/cjs/messages/contextPruning.cjs +156 -0
  53. package/dist/cjs/messages/contextPruning.cjs.map +1 -0
  54. package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
  55. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
  56. package/dist/cjs/messages/format.cjs +144 -20
  57. package/dist/cjs/messages/format.cjs.map +1 -1
  58. package/dist/cjs/messages/prune.cjs +505 -4
  59. package/dist/cjs/messages/prune.cjs.map +1 -1
  60. package/dist/cjs/run.cjs +141 -1
  61. package/dist/cjs/run.cjs.map +1 -1
  62. package/dist/cjs/tools/BashExecutor.cjs +235 -0
  63. package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
  64. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
  65. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
  66. package/dist/cjs/tools/CodeExecutor.cjs +44 -47
  67. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  68. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
  69. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  70. package/dist/cjs/tools/ReadFile.cjs +44 -0
  71. package/dist/cjs/tools/ReadFile.cjs.map +1 -0
  72. package/dist/cjs/tools/SkillTool.cjs +51 -0
  73. package/dist/cjs/tools/SkillTool.cjs.map +1 -0
  74. package/dist/cjs/tools/SubagentTool.cjs +93 -0
  75. package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
  76. package/dist/cjs/tools/ToolNode.cjs +450 -24
  77. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  78. package/dist/cjs/tools/search/search.cjs +11 -3
  79. package/dist/cjs/tools/search/search.cjs.map +1 -1
  80. package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
  81. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
  82. package/dist/cjs/tools/search/tavily-search.cjs +372 -0
  83. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
  84. package/dist/cjs/tools/search/tool.cjs +28 -4
  85. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  86. package/dist/cjs/tools/search/utils.cjs +10 -3
  87. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  88. package/dist/cjs/tools/skillCatalog.cjs +84 -0
  89. package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
  90. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
  91. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
  92. package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
  93. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
  94. package/dist/cjs/types/agent-cache.cjs +53 -0
  95. package/dist/cjs/types/agent-cache.cjs.map +1 -0
  96. package/dist/cjs/types/graph.cjs.map +1 -1
  97. package/dist/cjs/utils/truncation.cjs +135 -0
  98. package/dist/cjs/utils/truncation.cjs.map +1 -0
  99. package/dist/esm/agents/AgentContext.mjs +274 -67
  100. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  101. package/dist/esm/common/enum.mjs +44 -12
  102. package/dist/esm/common/enum.mjs.map +1 -1
  103. package/dist/esm/graphs/Graph.mjs +182 -5
  104. package/dist/esm/graphs/Graph.mjs.map +1 -1
  105. package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
  106. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  107. package/dist/esm/hooks/HookRegistry.mjs +160 -0
  108. package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
  109. package/dist/esm/hooks/executeHooks.mjs +273 -0
  110. package/dist/esm/hooks/executeHooks.mjs.map +1 -0
  111. package/dist/esm/hooks/matchers.mjs +251 -0
  112. package/dist/esm/hooks/matchers.mjs.map +1 -0
  113. package/dist/esm/hooks/types.mjs +25 -0
  114. package/dist/esm/hooks/types.mjs.map +1 -0
  115. package/dist/esm/langchain/google-common.mjs +2 -0
  116. package/dist/esm/langchain/google-common.mjs.map +1 -0
  117. package/dist/esm/langchain/index.mjs +5 -0
  118. package/dist/esm/langchain/index.mjs.map +1 -0
  119. package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
  120. package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
  121. package/dist/esm/langchain/messages/tool.mjs +2 -0
  122. package/dist/esm/langchain/messages/tool.mjs.map +1 -0
  123. package/dist/esm/langchain/messages.mjs +2 -0
  124. package/dist/esm/langchain/messages.mjs.map +1 -0
  125. package/dist/esm/langchain/openai.mjs +2 -0
  126. package/dist/esm/langchain/openai.mjs.map +1 -0
  127. package/dist/esm/langchain/prompts.mjs +2 -0
  128. package/dist/esm/langchain/prompts.mjs.map +1 -0
  129. package/dist/esm/langchain/runnables.mjs +2 -0
  130. package/dist/esm/langchain/runnables.mjs.map +1 -0
  131. package/dist/esm/langchain/tools.mjs +2 -0
  132. package/dist/esm/langchain/tools.mjs.map +1 -0
  133. package/dist/esm/langchain/utils/env.mjs +2 -0
  134. package/dist/esm/langchain/utils/env.mjs.map +1 -0
  135. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
  136. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  137. package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
  138. package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
  139. package/dist/esm/llm/bedrock/index.mjs +61 -34
  140. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  141. package/dist/esm/llm/openai/index.mjs +0 -3
  142. package/dist/esm/llm/openai/index.mjs.map +1 -1
  143. package/dist/esm/llm/openai/utils/index.mjs +27 -10
  144. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  145. package/dist/esm/main.mjs +21 -24
  146. package/dist/esm/main.mjs.map +1 -1
  147. package/dist/esm/messages/cache.mjs +89 -0
  148. package/dist/esm/messages/cache.mjs.map +1 -1
  149. package/dist/esm/messages/contextPruning.mjs +154 -0
  150. package/dist/esm/messages/contextPruning.mjs.map +1 -0
  151. package/dist/esm/messages/contextPruningSettings.mjs +50 -0
  152. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
  153. package/dist/esm/messages/format.mjs +136 -12
  154. package/dist/esm/messages/format.mjs.map +1 -1
  155. package/dist/esm/messages/prune.mjs +504 -7
  156. package/dist/esm/messages/prune.mjs.map +1 -1
  157. package/dist/esm/run.mjs +141 -1
  158. package/dist/esm/run.mjs.map +1 -1
  159. package/dist/esm/tools/BashExecutor.mjs +227 -0
  160. package/dist/esm/tools/BashExecutor.mjs.map +1 -0
  161. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
  162. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
  163. package/dist/esm/tools/CodeExecutor.mjs +44 -48
  164. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  165. package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
  166. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  167. package/dist/esm/tools/ReadFile.mjs +39 -0
  168. package/dist/esm/tools/ReadFile.mjs.map +1 -0
  169. package/dist/esm/tools/SkillTool.mjs +46 -0
  170. package/dist/esm/tools/SkillTool.mjs.map +1 -0
  171. package/dist/esm/tools/SubagentTool.mjs +86 -0
  172. package/dist/esm/tools/SubagentTool.mjs.map +1 -0
  173. package/dist/esm/tools/ToolNode.mjs +452 -26
  174. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  175. package/dist/esm/tools/search/search.mjs +11 -3
  176. package/dist/esm/tools/search/search.mjs.map +1 -1
  177. package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
  178. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
  179. package/dist/esm/tools/search/tavily-search.mjs +370 -0
  180. package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
  181. package/dist/esm/tools/search/tool.mjs +28 -4
  182. package/dist/esm/tools/search/tool.mjs.map +1 -1
  183. package/dist/esm/tools/search/utils.mjs +10 -3
  184. package/dist/esm/tools/search/utils.mjs.map +1 -1
  185. package/dist/esm/tools/skillCatalog.mjs +82 -0
  186. package/dist/esm/tools/skillCatalog.mjs.map +1 -0
  187. package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
  188. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
  189. package/dist/esm/tools/toolOutputReferences.mjs +662 -0
  190. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
  191. package/dist/esm/types/agent-cache.mjs +51 -0
  192. package/dist/esm/types/agent-cache.mjs.map +1 -0
  193. package/dist/esm/types/graph.mjs.map +1 -1
  194. package/dist/esm/utils/truncation.mjs +128 -0
  195. package/dist/esm/utils/truncation.mjs.map +1 -0
  196. package/dist/types/agents/AgentContext.d.ts +101 -8
  197. package/dist/types/common/enum.d.ts +39 -12
  198. package/dist/types/common/index.d.ts +0 -1
  199. package/dist/types/graphs/Graph.d.ts +43 -0
  200. package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
  201. package/dist/types/graphs/index.d.ts +0 -1
  202. package/dist/types/hooks/HookRegistry.d.ts +56 -0
  203. package/dist/types/hooks/executeHooks.d.ts +79 -0
  204. package/dist/types/hooks/index.d.ts +6 -0
  205. package/dist/types/hooks/matchers.d.ts +95 -0
  206. package/dist/types/hooks/types.d.ts +320 -0
  207. package/dist/types/index.d.ts +9 -4
  208. package/dist/types/langchain/google-common.d.ts +1 -0
  209. package/dist/types/langchain/index.d.ts +8 -0
  210. package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
  211. package/dist/types/langchain/messages/tool.d.ts +1 -0
  212. package/dist/types/langchain/messages.d.ts +2 -0
  213. package/dist/types/langchain/openai.d.ts +1 -0
  214. package/dist/types/langchain/prompts.d.ts +1 -0
  215. package/dist/types/langchain/runnables.d.ts +2 -0
  216. package/dist/types/langchain/tools.d.ts +2 -0
  217. package/dist/types/langchain/utils/env.d.ts +1 -0
  218. package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
  219. package/dist/types/llm/bedrock/index.d.ts +54 -1
  220. package/dist/types/messages/contextPruning.d.ts +42 -0
  221. package/dist/types/messages/contextPruningSettings.d.ts +44 -0
  222. package/dist/types/messages/format.d.ts +9 -1
  223. package/dist/types/messages/index.d.ts +2 -0
  224. package/dist/types/messages/prune.d.ts +91 -1
  225. package/dist/types/run.d.ts +2 -0
  226. package/dist/types/tools/BashExecutor.d.ts +76 -0
  227. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
  228. package/dist/types/tools/CodeExecutor.d.ts +8 -26
  229. package/dist/types/tools/ReadFile.d.ts +28 -0
  230. package/dist/types/tools/SkillTool.d.ts +40 -0
  231. package/dist/types/tools/SubagentTool.d.ts +36 -0
  232. package/dist/types/tools/ToolNode.d.ts +77 -5
  233. package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
  234. package/dist/types/tools/search/tavily-search.d.ts +4 -0
  235. package/dist/types/tools/search/types.d.ts +99 -5
  236. package/dist/types/tools/search/utils.d.ts +2 -2
  237. package/dist/types/tools/skillCatalog.d.ts +19 -0
  238. package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
  239. package/dist/types/tools/subagent/index.d.ts +2 -0
  240. package/dist/types/tools/subagent/types.d.ts +84 -0
  241. package/dist/types/tools/toolOutputReferences.d.ts +236 -0
  242. package/dist/types/types/agent-cache.d.ts +70 -0
  243. package/dist/types/types/graph.d.ts +162 -22
  244. package/dist/types/types/index.d.ts +3 -0
  245. package/dist/types/types/messages.d.ts +26 -0
  246. package/dist/types/types/run.d.ts +22 -0
  247. package/dist/types/types/skill.d.ts +9 -0
  248. package/dist/types/types/tools.d.ts +111 -0
  249. package/dist/types/utils/index.d.ts +1 -3
  250. package/dist/types/utils/truncation.d.ts +70 -0
  251. package/package.json +58 -13
  252. package/src/agents/AgentContext.js.map +1 -0
  253. package/src/agents/AgentContext.test.js.map +1 -0
  254. package/src/agents/AgentContext.ts +321 -78
  255. package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
  256. package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +264 -0
  257. package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
  258. package/src/agents/__tests__/AgentContext.test.js.map +1 -0
  259. package/src/agents/__tests__/AgentContext.test.ts +632 -0
  260. package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
  261. package/src/common/__tests__/enum.test.ts +7 -17
  262. package/src/common/enum.js.map +1 -0
  263. package/src/common/enum.ts +43 -12
  264. package/src/common/index.js.map +1 -0
  265. package/src/common/index.ts +0 -1
  266. package/src/events.js.map +1 -0
  267. package/src/graphs/Graph.js.map +1 -0
  268. package/src/graphs/Graph.ts +222 -2
  269. package/src/graphs/MultiAgentGraph.js.map +1 -0
  270. package/src/graphs/MultiAgentGraph.ts +154 -1466
  271. package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
  272. package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
  273. package/src/graphs/__tests__/structured-output.test.js.map +1 -0
  274. package/src/graphs/contextManagement.e2e.test.js.map +1 -0
  275. package/src/graphs/contextManagement.test.js.map +1 -0
  276. package/src/graphs/handoffValidation.test.js.map +1 -0
  277. package/src/graphs/index.js.map +1 -0
  278. package/src/graphs/index.ts +0 -1
  279. package/src/hooks/HookRegistry.ts +208 -0
  280. package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
  281. package/src/hooks/__tests__/compactHooks.test.ts +214 -0
  282. package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
  283. package/src/hooks/__tests__/integration.test.ts +337 -0
  284. package/src/hooks/__tests__/matchers.test.ts +238 -0
  285. package/src/hooks/__tests__/toolHooks.test.ts +665 -0
  286. package/src/hooks/executeHooks.ts +375 -0
  287. package/src/hooks/index.ts +57 -0
  288. package/src/hooks/matchers.ts +280 -0
  289. package/src/hooks/types.ts +404 -0
  290. package/src/index.js.map +1 -0
  291. package/src/index.ts +15 -5
  292. package/src/instrumentation.js.map +1 -0
  293. package/src/langchain/google-common.ts +1 -0
  294. package/src/langchain/index.ts +8 -0
  295. package/src/langchain/language_models/chat_models.ts +1 -0
  296. package/src/langchain/messages/tool.ts +5 -0
  297. package/src/langchain/messages.ts +21 -0
  298. package/src/langchain/openai.ts +1 -0
  299. package/src/langchain/prompts.ts +1 -0
  300. package/src/langchain/runnables.ts +7 -0
  301. package/src/langchain/tools.ts +8 -0
  302. package/src/langchain/utils/env.ts +1 -0
  303. package/src/llm/anthropic/index.js.map +1 -0
  304. package/src/llm/anthropic/types.js.map +1 -0
  305. package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
  306. package/src/llm/anthropic/utils/message_inputs.ts +10 -1
  307. package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
  308. package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
  309. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
  310. package/src/llm/anthropic/utils/tools.js.map +1 -0
  311. package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -0
  312. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
  313. package/src/llm/bedrock/cacheSupport.test.ts +99 -0
  314. package/src/llm/bedrock/cacheSupport.ts +53 -0
  315. package/src/llm/bedrock/index.js.map +1 -0
  316. package/src/llm/bedrock/index.ts +116 -41
  317. package/src/llm/bedrock/types.js.map +1 -0
  318. package/src/llm/bedrock/utils/index.js.map +1 -0
  319. package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
  320. package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
  321. package/src/llm/fake.js.map +1 -0
  322. package/src/llm/google/index.js.map +1 -0
  323. package/src/llm/google/types.js.map +1 -0
  324. package/src/llm/google/utils/common.js.map +1 -0
  325. package/src/llm/google/utils/tools.js.map +1 -0
  326. package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
  327. package/src/llm/openai/index.js.map +1 -0
  328. package/src/llm/openai/types.js.map +1 -0
  329. package/src/llm/openai/utils/index.js.map +1 -0
  330. package/src/llm/openai/utils/index.ts +31 -14
  331. package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
  332. package/src/llm/openrouter/index.js.map +1 -0
  333. package/src/llm/openrouter/reasoning.test.js.map +1 -0
  334. package/src/llm/providers.js.map +1 -0
  335. package/src/llm/text.js.map +1 -0
  336. package/src/llm/vertexai/index.js.map +1 -0
  337. package/src/messages/__tests__/contextPruning.test.ts +228 -0
  338. package/src/messages/__tests__/tools.test.js.map +1 -0
  339. package/src/messages/cache.js.map +1 -0
  340. package/src/messages/cache.test.js.map +1 -0
  341. package/src/messages/cache.test.ts +62 -24
  342. package/src/messages/cache.ts +112 -0
  343. package/src/messages/content.js.map +1 -0
  344. package/src/messages/content.test.js.map +1 -0
  345. package/src/messages/contextPruning.ts +191 -0
  346. package/src/messages/contextPruningSettings.ts +90 -0
  347. package/src/messages/core.js.map +1 -0
  348. package/src/messages/ensureThinkingBlock.test.js.map +1 -0
  349. package/src/messages/format.js.map +1 -0
  350. package/src/messages/format.ts +164 -12
  351. package/src/messages/formatAgentMessages.skills.test.ts +413 -0
  352. package/src/messages/formatAgentMessages.test.js.map +1 -0
  353. package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
  354. package/src/messages/formatMessage.test.js.map +1 -0
  355. package/src/messages/ids.js.map +1 -0
  356. package/src/messages/index.js.map +1 -0
  357. package/src/messages/index.ts +2 -0
  358. package/src/messages/labelContentByAgent.test.js.map +1 -0
  359. package/src/messages/prune.js.map +1 -0
  360. package/src/messages/prune.ts +661 -4
  361. package/src/messages/reducer.js.map +1 -0
  362. package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
  363. package/src/messages/summarize.js.map +1 -0
  364. package/src/messages/summarize.test.js.map +1 -0
  365. package/src/messages/tools.js.map +1 -0
  366. package/src/mockStream.js.map +1 -0
  367. package/src/prompts/collab.js.map +1 -0
  368. package/src/prompts/index.js.map +1 -0
  369. package/src/prompts/taskmanager.js.map +1 -0
  370. package/src/run.js.map +1 -0
  371. package/src/run.ts +155 -1
  372. package/src/schemas/index.js.map +1 -0
  373. package/src/schemas/schema-preparation.test.js.map +1 -0
  374. package/src/schemas/validate.js.map +1 -0
  375. package/src/schemas/validate.test.js.map +1 -0
  376. package/src/scripts/abort.js.map +1 -0
  377. package/src/scripts/ant_web_search.js.map +1 -0
  378. package/src/scripts/ant_web_search_edge_case.js.map +1 -0
  379. package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
  380. package/src/scripts/args.js.map +1 -0
  381. package/src/scripts/bedrock-cache-debug.js.map +1 -0
  382. package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
  383. package/src/scripts/bedrock-merge-test.js.map +1 -0
  384. package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
  385. package/src/scripts/caching.js.map +1 -0
  386. package/src/scripts/cli.js.map +1 -0
  387. package/src/scripts/cli2.js.map +1 -0
  388. package/src/scripts/cli3.js.map +1 -0
  389. package/src/scripts/cli4.js.map +1 -0
  390. package/src/scripts/cli5.js.map +1 -0
  391. package/src/scripts/code_exec.js.map +1 -0
  392. package/src/scripts/code_exec_files.js.map +1 -0
  393. package/src/scripts/code_exec_multi_session.js.map +1 -0
  394. package/src/scripts/code_exec_ptc.js.map +1 -0
  395. package/src/scripts/code_exec_session.js.map +1 -0
  396. package/src/scripts/code_exec_simple.js.map +1 -0
  397. package/src/scripts/content.js.map +1 -0
  398. package/src/scripts/empty_input.js.map +1 -0
  399. package/src/scripts/handoff-test.js.map +1 -0
  400. package/src/scripts/image.js.map +1 -0
  401. package/src/scripts/memory.js.map +1 -0
  402. package/src/scripts/multi-agent-chain.js.map +1 -0
  403. package/src/scripts/multi-agent-chain.ts +2 -2
  404. package/src/scripts/multi-agent-conditional.js.map +1 -0
  405. package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
  406. package/src/scripts/multi-agent-document-review-chain.ts +2 -2
  407. package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
  408. package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
  409. package/src/scripts/multi-agent-parallel-start.js.map +1 -0
  410. package/src/scripts/multi-agent-parallel.js.map +1 -0
  411. package/src/scripts/multi-agent-parallel.ts +3 -3
  412. package/src/scripts/multi-agent-sequence.js.map +1 -0
  413. package/src/scripts/multi-agent-sequence.ts +3 -3
  414. package/src/scripts/multi-agent-subagent.ts +246 -0
  415. package/src/scripts/multi-agent-supervisor.js.map +1 -0
  416. package/src/scripts/multi-agent-supervisor.ts +5 -5
  417. package/src/scripts/multi-agent-test.js.map +1 -0
  418. package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
  419. package/src/scripts/parallel-full-metadata-test.js.map +1 -0
  420. package/src/scripts/parallel-tools-test.js.map +1 -0
  421. package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
  422. package/src/scripts/programmatic_exec.js.map +1 -0
  423. package/src/scripts/programmatic_exec_agent.js.map +1 -0
  424. package/src/scripts/search.js.map +1 -0
  425. package/src/scripts/sequential-full-metadata-test.js.map +1 -0
  426. package/src/scripts/sequential-full-metadata-test.ts +2 -2
  427. package/src/scripts/simple.js.map +1 -0
  428. package/src/scripts/single-agent-metadata-test.js.map +1 -0
  429. package/src/scripts/stream.js.map +1 -0
  430. package/src/scripts/subagent-event-driven-debug.ts +190 -0
  431. package/src/scripts/subagent-tools-debug.ts +160 -0
  432. package/src/scripts/test-custom-prompt-key.js.map +1 -0
  433. package/src/scripts/test-custom-prompt-key.ts +3 -3
  434. package/src/scripts/test-handoff-input.js.map +1 -0
  435. package/src/scripts/test-handoff-input.ts +1 -1
  436. package/src/scripts/test-handoff-preamble.js.map +1 -0
  437. package/src/scripts/test-handoff-steering.js.map +1 -0
  438. package/src/scripts/test-handoff-steering.ts +3 -3
  439. package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
  440. package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
  441. package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
  442. package/src/scripts/test-parallel-agent-labeling.ts +3 -3
  443. package/src/scripts/test-parallel-handoffs.js.map +1 -0
  444. package/src/scripts/test-parallel-handoffs.ts +2 -2
  445. package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
  446. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
  447. package/src/scripts/test-thinking-handoff.js.map +1 -0
  448. package/src/scripts/test-thinking-handoff.ts +1 -1
  449. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
  450. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
  451. package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
  452. package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
  453. package/src/scripts/test-tools-before-handoff.js.map +1 -0
  454. package/src/scripts/test-tools-before-handoff.ts +1 -1
  455. package/src/scripts/test_code_api.js.map +1 -0
  456. package/src/scripts/thinking-bedrock.js.map +1 -0
  457. package/src/scripts/thinking-vertexai.js.map +1 -0
  458. package/src/scripts/thinking.js.map +1 -0
  459. package/src/scripts/tool_search.js.map +1 -0
  460. package/src/scripts/tools.js.map +1 -0
  461. package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
  462. package/src/specs/agent-handoffs.test.js.map +1 -0
  463. package/src/specs/agent-handoffs.test.ts +26 -483
  464. package/src/specs/anthropic.simple.test.js.map +1 -0
  465. package/src/specs/anthropic.simple.test.ts +61 -0
  466. package/src/specs/azure.simple.test.js.map +1 -0
  467. package/src/specs/cache.simple.test.js.map +1 -0
  468. package/src/specs/custom-event-await.test.js.map +1 -0
  469. package/src/specs/deepseek.simple.test.js.map +1 -0
  470. package/src/specs/emergency-prune.test.js.map +1 -0
  471. package/src/specs/moonshot.simple.test.js.map +1 -0
  472. package/src/specs/multi-agent-summarization.test.ts +396 -0
  473. package/src/specs/observability.integration.test.js.map +1 -0
  474. package/src/specs/openai.simple.test.js.map +1 -0
  475. package/src/specs/openrouter.simple.test.js.map +1 -0
  476. package/src/specs/prune.orphans.test.ts +248 -0
  477. package/src/specs/prune.test.js.map +1 -0
  478. package/src/specs/prune.test.ts +104 -16
  479. package/src/specs/reasoning.test.js.map +1 -0
  480. package/src/specs/spec.utils.js.map +1 -0
  481. package/src/specs/thinking-handoff.test.js.map +1 -0
  482. package/src/specs/thinking-handoff.test.ts +19 -19
  483. package/src/specs/thinking-prune.test.js.map +1 -0
  484. package/src/specs/token-distribution-edge-case.test.js.map +1 -0
  485. package/src/specs/token-memoization.test.js.map +1 -0
  486. package/src/specs/tokens.test.js.map +1 -0
  487. package/src/specs/tool-error.test.js.map +1 -0
  488. package/src/splitStream.js.map +1 -0
  489. package/src/splitStream.test.js.map +1 -0
  490. package/src/stream.js.map +1 -0
  491. package/src/stream.test.js.map +1 -0
  492. package/src/test/mockTools.js.map +1 -0
  493. package/src/tools/BashExecutor.ts +281 -0
  494. package/src/tools/BashProgrammaticToolCalling.ts +397 -0
  495. package/src/tools/BrowserTools.js.map +1 -0
  496. package/src/tools/Calculator.js.map +1 -0
  497. package/src/tools/Calculator.test.js.map +1 -0
  498. package/src/tools/CodeExecutor.js.map +1 -0
  499. package/src/tools/CodeExecutor.ts +62 -54
  500. package/src/tools/ProgrammaticToolCalling.js.map +1 -0
  501. package/src/tools/ProgrammaticToolCalling.ts +29 -14
  502. package/src/tools/ReadFile.ts +39 -0
  503. package/src/tools/SkillTool.ts +46 -0
  504. package/src/tools/StreamingToolCallBuffer.js.map +1 -0
  505. package/src/tools/SubagentTool.ts +100 -0
  506. package/src/tools/ToolNode.js.map +1 -0
  507. package/src/tools/ToolNode.ts +548 -26
  508. package/src/tools/ToolSearch.js.map +1 -0
  509. package/src/tools/__tests__/BashExecutor.test.ts +49 -0
  510. package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
  511. package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
  512. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
  513. package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
  514. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
  515. package/src/tools/__tests__/ReadFile.test.ts +44 -0
  516. package/src/tools/__tests__/SkillTool.test.ts +442 -0
  517. package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +1 -0
  518. package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
  519. package/src/tools/__tests__/SubagentTool.test.ts +149 -0
  520. package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
  521. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
  522. package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
  523. package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
  524. package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
  525. package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
  526. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
  527. package/src/tools/__tests__/handlers.test.js.map +1 -0
  528. package/src/tools/__tests__/skillCatalog.test.ts +161 -0
  529. package/src/tools/__tests__/subagentHooks.test.ts +210 -0
  530. package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
  531. package/src/tools/__tests__/truncation-recovery.integration.test.js.map +1 -0
  532. package/src/tools/handlers.js.map +1 -0
  533. package/src/tools/schema.js.map +1 -0
  534. package/src/tools/search/anthropic.js.map +1 -0
  535. package/src/tools/search/content.js.map +1 -0
  536. package/src/tools/search/content.test.js.map +1 -0
  537. package/src/tools/search/firecrawl.js.map +1 -0
  538. package/src/tools/search/format.js.map +1 -0
  539. package/src/tools/search/highlights.js.map +1 -0
  540. package/src/tools/search/index.js.map +1 -0
  541. package/src/tools/search/jina-reranker.test.js.map +1 -0
  542. package/src/tools/search/rerankers.js.map +1 -0
  543. package/src/tools/search/schema.js.map +1 -0
  544. package/src/tools/search/search.js.map +1 -0
  545. package/src/tools/search/search.ts +12 -2
  546. package/src/tools/search/serper-scraper.js.map +1 -0
  547. package/src/tools/search/tavily-scraper.ts +235 -0
  548. package/src/tools/search/tavily-search.ts +424 -0
  549. package/src/tools/search/tavily.test.ts +965 -0
  550. package/src/tools/search/test.js.map +1 -0
  551. package/src/tools/search/tool.js.map +1 -0
  552. package/src/tools/search/tool.ts +36 -2
  553. package/src/tools/search/types.js.map +1 -0
  554. package/src/tools/search/types.ts +133 -8
  555. package/src/tools/search/utils.js.map +1 -0
  556. package/src/tools/search/utils.ts +13 -5
  557. package/src/tools/skillCatalog.ts +126 -0
  558. package/src/tools/subagent/SubagentExecutor.ts +676 -0
  559. package/src/tools/subagent/index.ts +13 -0
  560. package/src/tools/subagent/types.test.ts +70 -0
  561. package/src/tools/subagent/types.ts +115 -0
  562. package/src/tools/toolOutputReferences.ts +825 -0
  563. package/src/types/agent-cache.ts +73 -0
  564. package/src/types/graph.js.map +1 -0
  565. package/src/types/graph.test.js.map +1 -0
  566. package/src/types/graph.ts +171 -20
  567. package/src/types/index.js.map +1 -0
  568. package/src/types/index.ts +3 -0
  569. package/src/types/llm.js.map +1 -0
  570. package/src/types/messages.js.map +1 -0
  571. package/src/types/messages.ts +27 -0
  572. package/src/types/run.js.map +1 -0
  573. package/src/types/run.ts +22 -0
  574. package/src/types/skill.ts +11 -0
  575. package/src/types/stream.js.map +1 -0
  576. package/src/types/tools.js.map +1 -0
  577. package/src/types/tools.ts +118 -0
  578. package/src/utils/__tests__/truncation.test.ts +66 -0
  579. package/src/utils/contextAnalytics.js.map +1 -0
  580. package/src/utils/contextAnalytics.test.js.map +1 -0
  581. package/src/utils/events.js.map +1 -0
  582. package/src/utils/graph.js.map +1 -0
  583. package/src/utils/handlers.js.map +1 -0
  584. package/src/utils/index.js.map +1 -0
  585. package/src/utils/index.ts +1 -3
  586. package/src/utils/llm.js.map +1 -0
  587. package/src/utils/llmConfig.js.map +1 -0
  588. package/src/utils/logging.js.map +1 -0
  589. package/src/utils/misc.js.map +1 -0
  590. package/src/utils/run.js.map +1 -0
  591. package/src/utils/schema.js.map +1 -0
  592. package/src/utils/title.js.map +1 -0
  593. package/src/utils/tokens.js.map +1 -0
  594. package/src/utils/toonFormat.js.map +1 -0
  595. package/src/utils/truncation.ts +154 -0
  596. package/dist/cjs/common/spawnPath.cjs +0 -104
  597. package/dist/cjs/common/spawnPath.cjs.map +0 -1
  598. package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
  599. package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
  600. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
  601. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
  602. package/dist/cjs/providers/a2a/client.cjs +0 -92
  603. package/dist/cjs/providers/a2a/client.cjs.map +0 -1
  604. package/dist/cjs/providers/a2a/config.cjs +0 -38
  605. package/dist/cjs/providers/a2a/config.cjs.map +0 -1
  606. package/dist/cjs/providers/capabilityNaming.cjs +0 -43
  607. package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
  608. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
  609. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
  610. package/dist/cjs/providers/mcp/config.cjs +0 -42
  611. package/dist/cjs/providers/mcp/config.cjs.map +0 -1
  612. package/dist/cjs/providers/mcp/transport.cjs +0 -65
  613. package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
  614. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
  615. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
  616. package/dist/cjs/providers/types.cjs +0 -51
  617. package/dist/cjs/providers/types.cjs.map +0 -1
  618. package/dist/cjs/tools/artifacts/schema.cjs +0 -86
  619. package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
  620. package/dist/cjs/tools/artifacts/tool.cjs +0 -219
  621. package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
  622. package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
  623. package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
  624. package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
  625. package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
  626. package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
  627. package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
  628. package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
  629. package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
  630. package/dist/cjs/tools/proxyTool.cjs +0 -102
  631. package/dist/cjs/tools/proxyTool.cjs.map +0 -1
  632. package/dist/cjs/utils/childAgentContext.cjs +0 -242
  633. package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
  634. package/dist/cjs/utils/credentials.cjs +0 -142
  635. package/dist/cjs/utils/credentials.cjs.map +0 -1
  636. package/dist/cjs/utils/httpClient.cjs +0 -74
  637. package/dist/cjs/utils/httpClient.cjs.map +0 -1
  638. package/dist/cjs/utils/toolManifest.cjs +0 -100
  639. package/dist/cjs/utils/toolManifest.cjs.map +0 -1
  640. package/dist/esm/common/spawnPath.mjs +0 -95
  641. package/dist/esm/common/spawnPath.mjs.map +0 -1
  642. package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
  643. package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
  644. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
  645. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
  646. package/dist/esm/providers/a2a/client.mjs +0 -88
  647. package/dist/esm/providers/a2a/client.mjs.map +0 -1
  648. package/dist/esm/providers/a2a/config.mjs +0 -35
  649. package/dist/esm/providers/a2a/config.mjs.map +0 -1
  650. package/dist/esm/providers/capabilityNaming.mjs +0 -39
  651. package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
  652. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
  653. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
  654. package/dist/esm/providers/mcp/config.mjs +0 -39
  655. package/dist/esm/providers/mcp/config.mjs.map +0 -1
  656. package/dist/esm/providers/mcp/transport.mjs +0 -63
  657. package/dist/esm/providers/mcp/transport.mjs.map +0 -1
  658. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
  659. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
  660. package/dist/esm/providers/types.mjs +0 -51
  661. package/dist/esm/providers/types.mjs.map +0 -1
  662. package/dist/esm/tools/artifacts/schema.mjs +0 -79
  663. package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
  664. package/dist/esm/tools/artifacts/tool.mjs +0 -213
  665. package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
  666. package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
  667. package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
  668. package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
  669. package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
  670. package/dist/esm/tools/fileSearch/schema.mjs +0 -15
  671. package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
  672. package/dist/esm/tools/fileSearch/tool.mjs +0 -152
  673. package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
  674. package/dist/esm/tools/proxyTool.mjs +0 -100
  675. package/dist/esm/tools/proxyTool.mjs.map +0 -1
  676. package/dist/esm/utils/childAgentContext.mjs +0 -237
  677. package/dist/esm/utils/childAgentContext.mjs.map +0 -1
  678. package/dist/esm/utils/credentials.mjs +0 -135
  679. package/dist/esm/utils/credentials.mjs.map +0 -1
  680. package/dist/esm/utils/httpClient.mjs +0 -70
  681. package/dist/esm/utils/httpClient.mjs.map +0 -1
  682. package/dist/esm/utils/toolManifest.mjs +0 -96
  683. package/dist/esm/utils/toolManifest.mjs.map +0 -1
  684. package/dist/types/common/spawnPath.d.ts +0 -59
  685. package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
  686. package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
  687. package/dist/types/providers/a2a/client.d.ts +0 -47
  688. package/dist/types/providers/a2a/config.d.ts +0 -18
  689. package/dist/types/providers/a2a/index.d.ts +0 -6
  690. package/dist/types/providers/a2a/types.d.ts +0 -173
  691. package/dist/types/providers/capabilityNaming.d.ts +0 -25
  692. package/dist/types/providers/index.d.ts +0 -12
  693. package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
  694. package/dist/types/providers/mcp/config.d.ts +0 -20
  695. package/dist/types/providers/mcp/index.d.ts +0 -5
  696. package/dist/types/providers/mcp/transport.d.ts +0 -18
  697. package/dist/types/providers/mcp/types.d.ts +0 -112
  698. package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
  699. package/dist/types/providers/tools-server/index.d.ts +0 -1
  700. package/dist/types/providers/types.d.ts +0 -184
  701. package/dist/types/tools/artifacts/index.d.ts +0 -3
  702. package/dist/types/tools/artifacts/schema.d.ts +0 -63
  703. package/dist/types/tools/artifacts/tool.d.ts +0 -16
  704. package/dist/types/tools/artifacts/types.d.ts +0 -127
  705. package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
  706. package/dist/types/tools/fileSearch/index.d.ts +0 -5
  707. package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
  708. package/dist/types/tools/fileSearch/schema.d.ts +0 -13
  709. package/dist/types/tools/fileSearch/tool.d.ts +0 -18
  710. package/dist/types/tools/fileSearch/types.d.ts +0 -139
  711. package/dist/types/tools/proxyTool.d.ts +0 -62
  712. package/dist/types/utils/childAgentContext.d.ts +0 -99
  713. package/dist/types/utils/credentials.d.ts +0 -77
  714. package/dist/types/utils/httpClient.d.ts +0 -46
  715. package/dist/types/utils/toolManifest.d.ts +0 -49
  716. package/src/common/__tests__/spawnPath.test.ts +0 -110
  717. package/src/common/spawnPath.ts +0 -101
  718. package/src/graphs/HandoffRegistry.ts +0 -199
  719. package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
  720. package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
  721. package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
  722. package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
  723. package/src/graphs/handoffValidation.test.ts +0 -353
  724. package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
  725. package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -269
  726. package/src/providers/__tests__/types.test.ts +0 -64
  727. package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
  728. package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
  729. package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
  730. package/src/providers/a2a/client.ts +0 -115
  731. package/src/providers/a2a/config.ts +0 -40
  732. package/src/providers/a2a/index.ts +0 -29
  733. package/src/providers/a2a/types.ts +0 -191
  734. package/src/providers/capabilityNaming.ts +0 -42
  735. package/src/providers/index.ts +0 -68
  736. package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
  737. package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
  738. package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
  739. package/src/providers/mcp/config.ts +0 -45
  740. package/src/providers/mcp/index.ts +0 -21
  741. package/src/providers/mcp/transport.ts +0 -76
  742. package/src/providers/mcp/types.ts +0 -139
  743. package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -248
  744. package/src/providers/tools-server/index.ts +0 -1
  745. package/src/providers/types.ts +0 -204
  746. package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
  747. package/src/scripts/test-handoff-preamble.ts +0 -278
  748. package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
  749. package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
  750. package/src/tools/artifacts/index.ts +0 -33
  751. package/src/tools/artifacts/schema.ts +0 -99
  752. package/src/tools/artifacts/tool.ts +0 -289
  753. package/src/tools/artifacts/types.ts +0 -162
  754. package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
  755. package/src/tools/fileSearch/formatter.ts +0 -129
  756. package/src/tools/fileSearch/index.ts +0 -23
  757. package/src/tools/fileSearch/ragClient.ts +0 -137
  758. package/src/tools/fileSearch/schema.ts +0 -19
  759. package/src/tools/fileSearch/tool.ts +0 -207
  760. package/src/tools/fileSearch/types.ts +0 -149
  761. package/src/tools/proxyTool.ts +0 -166
  762. package/src/utils/__tests__/childAgentContext.test.ts +0 -217
  763. package/src/utils/__tests__/credentials.test.ts +0 -130
  764. package/src/utils/__tests__/httpClient.test.ts +0 -75
  765. package/src/utils/__tests__/toolManifest.test.ts +0 -116
  766. package/src/utils/childAgentContext.ts +0 -259
  767. package/src/utils/credentials.ts +0 -157
  768. package/src/utils/httpClient.ts +0 -92
  769. package/src/utils/toolManifest.ts +0 -109
@@ -24,7 +24,13 @@ const createDefaultLogger = () => {
24
24
  const fileExtRegex = /\.(pdf|jpe?g|png|gif|svg|webp|bmp|ico|tiff?|avif|heic|doc[xm]?|xls[xm]?|ppt[xm]?|zip|rar|mp[34]|mov|avi|wav)(?:\?.*)?$/i;
25
25
  const getDomainName = (link, metadata, logger) => {
26
26
  try {
27
- const url = metadata?.sourceURL ?? metadata?.url ?? (link || '');
27
+ const sourceUrl = metadata?.sourceURL;
28
+ const metadataUrl = metadata?.url;
29
+ const url = typeof sourceUrl === 'string'
30
+ ? sourceUrl
31
+ : typeof metadataUrl === 'string'
32
+ ? metadataUrl
33
+ : link || '';
28
34
  const domain = new URL(url).hostname.replace(/^www\./, '');
29
35
  if (domain) {
30
36
  return domain;
@@ -46,13 +52,14 @@ function getAttribution(link, metadata, logger) {
46
52
  return getDomainName(link, metadata, logger);
47
53
  const twitterSite = metadata['twitter:site'];
48
54
  const twitterSiteFormatted = typeof twitterSite === 'string' ? twitterSite.replace(/^@/, '') : undefined;
55
+ const title = metadata.title;
49
56
  const possibleAttributions = [
50
57
  metadata.ogSiteName,
51
58
  metadata['og:site_name'],
52
- metadata.title?.split('|').pop()?.trim(),
59
+ typeof title === 'string' ? title.split('|').pop()?.trim() : undefined,
53
60
  twitterSiteFormatted,
54
61
  ];
55
- const attribution = possibleAttributions.find((attr) => attr != null && typeof attr === 'string' && attr.trim() !== '');
62
+ const attribution = possibleAttributions.find((attr) => typeof attr === 'string' && attr.trim() !== '');
56
63
  if (attribution != null) {
57
64
  return attribution;
58
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sources":["../../../../src/tools/search/utils.ts"],"sourcesContent":["/* eslint-disable no-console */\n\nimport type * as t from './types';\n\n/**\n * Singleton instance of the default logger\n */\nlet defaultLoggerInstance: t.Logger | null = null;\n\n/**\n * Creates a default logger that maps to console methods\n * Uses a singleton pattern to avoid creating multiple instances\n * @returns A default logger that implements the Logger interface\n */\nexport const createDefaultLogger = (): t.Logger => {\n if (!defaultLoggerInstance) {\n defaultLoggerInstance = {\n error: console.error,\n warn: console.warn,\n info: console.info,\n debug: console.debug,\n } as t.Logger;\n }\n return defaultLoggerInstance;\n};\n\nexport const fileExtRegex =\n /\\.(pdf|jpe?g|png|gif|svg|webp|bmp|ico|tiff?|avif|heic|doc[xm]?|xls[xm]?|ppt[xm]?|zip|rar|mp[34]|mov|avi|wav)(?:\\?.*)?$/i;\n\nexport const getDomainName = (\n link: string,\n metadata?: t.ScrapeMetadata,\n logger?: t.Logger\n): string | undefined => {\n try {\n const url = metadata?.sourceURL ?? metadata?.url ?? (link || '');\n const domain = new URL(url).hostname.replace(/^www\\./, '');\n if (domain) {\n return domain;\n }\n } catch (e) {\n // URL parsing failed\n if (logger) {\n logger.error('Error parsing URL:', e);\n } else {\n console.error('Error parsing URL:', e);\n }\n }\n\n return;\n};\n\nexport function getAttribution(\n link: string,\n metadata?: t.ScrapeMetadata,\n logger?: t.Logger\n): string | undefined {\n if (!metadata) return getDomainName(link, metadata, logger);\n\n const twitterSite = metadata['twitter:site'];\n const twitterSiteFormatted =\n typeof twitterSite === 'string' ? twitterSite.replace(/^@/, '') : undefined;\n\n const possibleAttributions = [\n metadata.ogSiteName,\n metadata['og:site_name'],\n metadata.title?.split('|').pop()?.trim(),\n twitterSiteFormatted,\n ];\n\n const attribution = possibleAttributions.find(\n (attr) => attr != null && typeof attr === 'string' && attr.trim() !== ''\n );\n if (attribution != null) {\n return attribution;\n }\n\n return getDomainName(link, metadata, logger);\n}\n"],"names":[],"mappings":";;AAAA;AAIA;;AAEG;AACH,IAAI,qBAAqB,GAAoB,IAAI;AAEjD;;;;AAIG;AACI,MAAM,mBAAmB,GAAG,MAAe;IAChD,IAAI,CAAC,qBAAqB,EAAE;AAC1B,QAAA,qBAAqB,GAAG;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;SACT;IACf;AACA,IAAA,OAAO,qBAAqB;AAC9B;AAEO,MAAM,YAAY,GACvB;AAEK,MAAM,aAAa,GAAG,CAC3B,IAAY,EACZ,QAA2B,EAC3B,MAAiB,KACK;AACtB,IAAA,IAAI;AACF,QAAA,MAAM,GAAG,GAAG,QAAQ,EAAE,SAAS,IAAI,QAAQ,EAAE,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC;AAChE,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1D,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;IACF;IAAE,OAAO,CAAC,EAAE;;QAEV,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACvC;aAAO;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACxC;IACF;IAEA;AACF;SAEgB,cAAc,CAC5B,IAAY,EACZ,QAA2B,EAC3B,MAAiB,EAAA;AAEjB,IAAA,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;AAE3D,IAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC;IAC5C,MAAM,oBAAoB,GACxB,OAAO,WAAW,KAAK,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS;AAE7E,IAAA,MAAM,oBAAoB,GAAG;AAC3B,QAAA,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,cAAc,CAAC;AACxB,QAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE;QACxC,oBAAoB;KACrB;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAC3C,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CACzE;AACD,IAAA,IAAI,WAAW,IAAI,IAAI,EAAE;AACvB,QAAA,OAAO,WAAW;IACpB;IAEA,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;AAC9C;;;;;;;"}
1
+ {"version":3,"file":"utils.cjs","sources":["../../../../src/tools/search/utils.ts"],"sourcesContent":["/* eslint-disable no-console */\n\nimport type * as t from './types';\n\n/**\n * Singleton instance of the default logger\n */\nlet defaultLoggerInstance: t.Logger | null = null;\n\n/**\n * Creates a default logger that maps to console methods\n * Uses a singleton pattern to avoid creating multiple instances\n * @returns A default logger that implements the Logger interface\n */\nexport const createDefaultLogger = (): t.Logger => {\n if (!defaultLoggerInstance) {\n defaultLoggerInstance = {\n error: console.error,\n warn: console.warn,\n info: console.info,\n debug: console.debug,\n } as t.Logger;\n }\n return defaultLoggerInstance;\n};\n\nexport const fileExtRegex =\n /\\.(pdf|jpe?g|png|gif|svg|webp|bmp|ico|tiff?|avif|heic|doc[xm]?|xls[xm]?|ppt[xm]?|zip|rar|mp[34]|mov|avi|wav)(?:\\?.*)?$/i;\n\nexport const getDomainName = (\n link: string,\n metadata?: t.ScrapeMetadata | t.GenericScrapeMetadata,\n logger?: t.Logger\n): string | undefined => {\n try {\n const sourceUrl = metadata?.sourceURL;\n const metadataUrl = metadata?.url;\n const url =\n typeof sourceUrl === 'string'\n ? sourceUrl\n : typeof metadataUrl === 'string'\n ? metadataUrl\n : link || '';\n const domain = new URL(url).hostname.replace(/^www\\./, '');\n if (domain) {\n return domain;\n }\n } catch (e) {\n // URL parsing failed\n if (logger) {\n logger.error('Error parsing URL:', e);\n } else {\n console.error('Error parsing URL:', e);\n }\n }\n\n return;\n};\n\nexport function getAttribution(\n link: string,\n metadata?: t.ScrapeMetadata | t.GenericScrapeMetadata,\n logger?: t.Logger\n): string | undefined {\n if (!metadata) return getDomainName(link, metadata, logger);\n\n const twitterSite = metadata['twitter:site'];\n const twitterSiteFormatted =\n typeof twitterSite === 'string' ? twitterSite.replace(/^@/, '') : undefined;\n const title = metadata.title;\n\n const possibleAttributions = [\n metadata.ogSiteName,\n metadata['og:site_name'],\n typeof title === 'string' ? title.split('|').pop()?.trim() : undefined,\n twitterSiteFormatted,\n ];\n\n const attribution = possibleAttributions.find(\n (attr): attr is string => typeof attr === 'string' && attr.trim() !== ''\n );\n if (attribution != null) {\n return attribution;\n }\n\n return getDomainName(link, metadata, logger);\n}\n"],"names":[],"mappings":";;AAAA;AAIA;;AAEG;AACH,IAAI,qBAAqB,GAAoB,IAAI;AAEjD;;;;AAIG;AACI,MAAM,mBAAmB,GAAG,MAAe;IAChD,IAAI,CAAC,qBAAqB,EAAE;AAC1B,QAAA,qBAAqB,GAAG;YACtB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;SACT;IACf;AACA,IAAA,OAAO,qBAAqB;AAC9B;AAEO,MAAM,YAAY,GACvB;AAEK,MAAM,aAAa,GAAG,CAC3B,IAAY,EACZ,QAAqD,EACrD,MAAiB,KACK;AACtB,IAAA,IAAI;AACF,QAAA,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS;AACrC,QAAA,MAAM,WAAW,GAAG,QAAQ,EAAE,GAAG;AACjC,QAAA,MAAM,GAAG,GACP,OAAO,SAAS,KAAK;AACnB,cAAE;AACF,cAAE,OAAO,WAAW,KAAK;AACvB,kBAAE;AACF,kBAAE,IAAI,IAAI,EAAE;AAClB,QAAA,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1D,IAAI,MAAM,EAAE;AACV,YAAA,OAAO,MAAM;QACf;IACF;IAAE,OAAO,CAAC,EAAE;;QAEV,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACvC;aAAO;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACxC;IACF;IAEA;AACF;SAEgB,cAAc,CAC5B,IAAY,EACZ,QAAqD,EACrD,MAAiB,EAAA;AAEjB,IAAA,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;AAE3D,IAAA,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC;IAC5C,MAAM,oBAAoB,GACxB,OAAO,WAAW,KAAK,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS;AAC7E,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;AAE5B,IAAA,MAAM,oBAAoB,GAAG;AAC3B,QAAA,QAAQ,CAAC,UAAU;QACnB,QAAQ,CAAC,cAAc,CAAC;QACxB,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,SAAS;QACtE,oBAAoB;KACrB;IAED,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAC3C,CAAC,IAAI,KAAqB,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CACzE;AACD,IAAA,IAAI,WAAW,IAAI,IAAI,EAAE;AACvB,QAAA,OAAO,WAAW;IACpB;IAEA,OAAO,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC;AAC9C;;;;;;;"}
@@ -0,0 +1,84 @@
1
+ 'use strict';
2
+
3
+ const HEADER = '## Available Skills';
4
+ const DEFAULT_CONTEXT_WINDOW_TOKENS = 200_000;
5
+ const DEFAULT_BUDGET_PERCENT = 0.01;
6
+ const DEFAULT_MAX_ENTRY_CHARS = 250;
7
+ const DEFAULT_MIN_DESC_LENGTH = 20;
8
+ const DEFAULT_CHARS_PER_TOKEN = 4;
9
+ /**
10
+ * Formats a skill catalog for injection into agent context.
11
+ * Uses a truncation ladder: full descriptions, proportional truncation, names-only.
12
+ * Returns empty string for empty input.
13
+ */
14
+ function formatSkillCatalog(skills, opts) {
15
+ if (skills.length === 0)
16
+ return '';
17
+ const contextWindowTokens = opts?.contextWindowTokens ?? DEFAULT_CONTEXT_WINDOW_TOKENS;
18
+ const budgetPercent = opts?.budgetPercent ?? DEFAULT_BUDGET_PERCENT;
19
+ const maxEntryChars = Math.max(1, opts?.maxEntryChars ?? DEFAULT_MAX_ENTRY_CHARS);
20
+ const minDescLength = opts?.minDescLength ?? DEFAULT_MIN_DESC_LENGTH;
21
+ const charsPerToken = opts?.charsPerToken ?? DEFAULT_CHARS_PER_TOKEN;
22
+ const budgetChars = Math.floor(contextWindowTokens * budgetPercent * charsPerToken);
23
+ const capped = skills.map((s) => ({
24
+ name: s.name,
25
+ description: s.description.length > maxEntryChars
26
+ ? s.description.slice(0, maxEntryChars - 1) + '\u2026'
27
+ : s.description,
28
+ }));
29
+ const fullOutput = formatEntries(capped);
30
+ if (fullOutput.length <= budgetChars)
31
+ return fullOutput;
32
+ const headerLen = HEADER.length + 2;
33
+ const newlineChars = capped.length > 1 ? capped.length - 1 : 0;
34
+ const availableChars = budgetChars - headerLen - newlineChars;
35
+ const perEntryOverhead = 4;
36
+ const nameCharsTotal = capped.reduce((sum, s) => sum + s.name.length + perEntryOverhead, 0);
37
+ const availableForDescs = availableChars - nameCharsTotal;
38
+ if (availableForDescs <= 0) {
39
+ return fitNamesOnly(capped, budgetChars);
40
+ }
41
+ const maxDescPerEntry = Math.floor(availableForDescs / capped.length);
42
+ if (maxDescPerEntry < minDescLength) {
43
+ return fitNamesOnly(capped, budgetChars);
44
+ }
45
+ const truncated = capped.map((s) => ({
46
+ name: s.name,
47
+ description: s.description.length > maxDescPerEntry
48
+ ? s.description.slice(0, maxDescPerEntry - 1) + '\u2026'
49
+ : s.description,
50
+ }));
51
+ const result = formatEntries(truncated);
52
+ if (result.length <= budgetChars)
53
+ return result;
54
+ return fitNamesOnly(capped, budgetChars);
55
+ }
56
+ function formatEntries(entries) {
57
+ const lines = entries.map((e) => e.description ? `- ${e.name}: ${e.description}` : `- ${e.name}`);
58
+ return `${HEADER}\n\n${lines.join('\n')}`;
59
+ }
60
+ /** Names-only fallback that drops trailing entries if the list still exceeds budget. */
61
+ function fitNamesOnly(entries, budgetChars) {
62
+ // Format: "HEADER\n\n- name1\n- name2\n..."
63
+ // Running sum avoids O(n²) repeated string construction.
64
+ const prefix = HEADER.length + 2; // "HEADER\n\n"
65
+ const entryOverhead = 2; // "- "
66
+ let total = prefix;
67
+ let fitCount = 0;
68
+ for (let i = 0; i < entries.length; i++) {
69
+ const added = (i > 0 ? 1 : 0) + entryOverhead + entries[i].name.length;
70
+ if (total + added > budgetChars)
71
+ break;
72
+ total += added;
73
+ fitCount = i + 1;
74
+ }
75
+ if (fitCount === 0)
76
+ return '';
77
+ const namesOnly = entries
78
+ .slice(0, fitCount)
79
+ .map((s) => ({ name: s.name, description: '' }));
80
+ return formatEntries(namesOnly);
81
+ }
82
+
83
+ exports.formatSkillCatalog = formatSkillCatalog;
84
+ //# sourceMappingURL=skillCatalog.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skillCatalog.cjs","sources":["../../../src/tools/skillCatalog.ts"],"sourcesContent":["// src/tools/skillCatalog.ts\nimport type { SkillCatalogEntry } from '@/types';\n\nconst HEADER = '## Available Skills';\nconst DEFAULT_CONTEXT_WINDOW_TOKENS = 200_000;\nconst DEFAULT_BUDGET_PERCENT = 0.01;\nconst DEFAULT_MAX_ENTRY_CHARS = 250;\nconst DEFAULT_MIN_DESC_LENGTH = 20;\nconst DEFAULT_CHARS_PER_TOKEN = 4;\n\nexport type SkillCatalogOptions = {\n /** Total context window in tokens. Default: 200_000 */\n contextWindowTokens?: number;\n /** Fraction of context budget for catalog. Default: 0.01 (1%) */\n budgetPercent?: number;\n /** Max chars per entry description. Default: 250 */\n maxEntryChars?: number;\n /** Descriptions below this length trigger names-only fallback. Default: 20 */\n minDescLength?: number;\n /** Approximate chars per token for budget calculation. Default: 4 */\n charsPerToken?: number;\n};\n\n/**\n * Formats a skill catalog for injection into agent context.\n * Uses a truncation ladder: full descriptions, proportional truncation, names-only.\n * Returns empty string for empty input.\n */\nexport function formatSkillCatalog(\n skills: SkillCatalogEntry[],\n opts?: SkillCatalogOptions\n): string {\n if (skills.length === 0) return '';\n\n const contextWindowTokens =\n opts?.contextWindowTokens ?? DEFAULT_CONTEXT_WINDOW_TOKENS;\n const budgetPercent = opts?.budgetPercent ?? DEFAULT_BUDGET_PERCENT;\n const maxEntryChars = Math.max(\n 1,\n opts?.maxEntryChars ?? DEFAULT_MAX_ENTRY_CHARS\n );\n const minDescLength = opts?.minDescLength ?? DEFAULT_MIN_DESC_LENGTH;\n const charsPerToken = opts?.charsPerToken ?? DEFAULT_CHARS_PER_TOKEN;\n\n const budgetChars = Math.floor(\n contextWindowTokens * budgetPercent * charsPerToken\n );\n\n const capped = skills.map((s) => ({\n name: s.name,\n description:\n s.description.length > maxEntryChars\n ? s.description.slice(0, maxEntryChars - 1) + '\\u2026'\n : s.description,\n }));\n\n const fullOutput = formatEntries(capped);\n if (fullOutput.length <= budgetChars) return fullOutput;\n\n const headerLen = HEADER.length + 2;\n const newlineChars = capped.length > 1 ? capped.length - 1 : 0;\n const availableChars = budgetChars - headerLen - newlineChars;\n const perEntryOverhead = 4;\n const nameCharsTotal = capped.reduce(\n (sum, s) => sum + s.name.length + perEntryOverhead,\n 0\n );\n const availableForDescs = availableChars - nameCharsTotal;\n\n if (availableForDescs <= 0) {\n return fitNamesOnly(capped, budgetChars);\n }\n\n const maxDescPerEntry = Math.floor(availableForDescs / capped.length);\n\n if (maxDescPerEntry < minDescLength) {\n return fitNamesOnly(capped, budgetChars);\n }\n\n const truncated = capped.map((s) => ({\n name: s.name,\n description:\n s.description.length > maxDescPerEntry\n ? s.description.slice(0, maxDescPerEntry - 1) + '\\u2026'\n : s.description,\n }));\n\n const result = formatEntries(truncated);\n if (result.length <= budgetChars) return result;\n return fitNamesOnly(capped, budgetChars);\n}\n\nfunction formatEntries(\n entries: { name: string; description: string }[]\n): string {\n const lines = entries.map((e) =>\n e.description ? `- ${e.name}: ${e.description}` : `- ${e.name}`\n );\n return `${HEADER}\\n\\n${lines.join('\\n')}`;\n}\n\n/** Names-only fallback that drops trailing entries if the list still exceeds budget. */\nfunction fitNamesOnly(\n entries: { name: string }[],\n budgetChars: number\n): string {\n // Format: \"HEADER\\n\\n- name1\\n- name2\\n...\"\n // Running sum avoids O(n²) repeated string construction.\n const prefix = HEADER.length + 2; // \"HEADER\\n\\n\"\n const entryOverhead = 2; // \"- \"\n let total = prefix;\n let fitCount = 0;\n\n for (let i = 0; i < entries.length; i++) {\n const added = (i > 0 ? 1 : 0) + entryOverhead + entries[i].name.length;\n if (total + added > budgetChars) break;\n total += added;\n fitCount = i + 1;\n }\n\n if (fitCount === 0) return '';\n const namesOnly = entries\n .slice(0, fitCount)\n .map((s) => ({ name: s.name, description: '' }));\n return formatEntries(namesOnly);\n}\n"],"names":[],"mappings":";;AAGA,MAAM,MAAM,GAAG,qBAAqB;AACpC,MAAM,6BAA6B,GAAG,OAAO;AAC7C,MAAM,sBAAsB,GAAG,IAAI;AACnC,MAAM,uBAAuB,GAAG,GAAG;AACnC,MAAM,uBAAuB,GAAG,EAAE;AAClC,MAAM,uBAAuB,GAAG,CAAC;AAejC;;;;AAIG;AACG,SAAU,kBAAkB,CAChC,MAA2B,EAC3B,IAA0B,EAAA;AAE1B,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;AAElC,IAAA,MAAM,mBAAmB,GACvB,IAAI,EAAE,mBAAmB,IAAI,6BAA6B;AAC5D,IAAA,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,sBAAsB;AACnE,IAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,CAAC,EACD,IAAI,EAAE,aAAa,IAAI,uBAAuB,CAC/C;AACD,IAAA,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,uBAAuB;AACpE,IAAA,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,uBAAuB;AAEpE,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,mBAAmB,GAAG,aAAa,GAAG,aAAa,CACpD;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;QAChC,IAAI,EAAE,CAAC,CAAC,IAAI;AACZ,QAAA,WAAW,EACT,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG;AACrB,cAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC,GAAG;cAC5C,CAAC,CAAC,WAAW;AACpB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC;AACxC,IAAA,IAAI,UAAU,CAAC,MAAM,IAAI,WAAW;AAAE,QAAA,OAAO,UAAU;AAEvD,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;AACnC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;AAC9D,IAAA,MAAM,cAAc,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY;IAC7D,MAAM,gBAAgB,GAAG,CAAC;IAC1B,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,gBAAgB,EAClD,CAAC,CACF;AACD,IAAA,MAAM,iBAAiB,GAAG,cAAc,GAAG,cAAc;AAEzD,IAAA,IAAI,iBAAiB,IAAI,CAAC,EAAE;AAC1B,QAAA,OAAO,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC;IAC1C;AAEA,IAAA,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;AAErE,IAAA,IAAI,eAAe,GAAG,aAAa,EAAE;AACnC,QAAA,OAAO,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC;IAC1C;IAEA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;QACnC,IAAI,EAAE,CAAC,CAAC,IAAI;AACZ,QAAA,WAAW,EACT,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG;AACrB,cAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,GAAG;cAC9C,CAAC,CAAC,WAAW;AACpB,KAAA,CAAC,CAAC;AAEH,IAAA,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC;AACvC,IAAA,IAAI,MAAM,CAAC,MAAM,IAAI,WAAW;AAAE,QAAA,OAAO,MAAM;AAC/C,IAAA,OAAO,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC;AAC1C;AAEA,SAAS,aAAa,CACpB,OAAgD,EAAA;AAEhD,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAC1B,CAAC,CAAC,WAAW,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,CAAA,EAAA,EAAK,CAAC,CAAC,WAAW,CAAA,CAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAA,CAAE,CAChE;IACD,OAAO,CAAA,EAAG,MAAM,CAAA,IAAA,EAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAE;AAC3C;AAEA;AACA,SAAS,YAAY,CACnB,OAA2B,EAC3B,WAAmB,EAAA;;;IAInB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACjC,IAAA,MAAM,aAAa,GAAG,CAAC,CAAC;IACxB,IAAI,KAAK,GAAG,MAAM;IAClB,IAAI,QAAQ,GAAG,CAAC;AAEhB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;AACtE,QAAA,IAAI,KAAK,GAAG,KAAK,GAAG,WAAW;YAAE;QACjC,KAAK,IAAI,KAAK;AACd,QAAA,QAAQ,GAAG,CAAC,GAAG,CAAC;IAClB;IAEA,IAAI,QAAQ,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;IAC7B,MAAM,SAAS,GAAG;AACf,SAAA,KAAK,CAAC,CAAC,EAAE,QAAQ;SACjB,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;AAClD,IAAA,OAAO,aAAa,CAAC,SAAS,CAAC;AACjC;;;;"}
@@ -0,0 +1,512 @@
1
+ 'use strict';
2
+
3
+ var nanoid = require('nanoid');
4
+ var base = require('@langchain/core/callbacks/base');
5
+ var messages = require('@langchain/core/messages');
6
+ var _enum = require('../../common/enum.cjs');
7
+ require('../approval/constants.cjs');
8
+ var executeHooks = require('../../hooks/executeHooks.cjs');
9
+
10
+ const DEFAULT_MAX_TURNS = 25;
11
+ const RECURSION_MULTIPLIER = 3;
12
+ const ERROR_MESSAGE_MAX_CHARS = 200;
13
+ const HOOK_FALLBACK = Object.freeze({
14
+ additionalContexts: [],
15
+ errors: [],
16
+ });
17
+ class SubagentExecutor {
18
+ configs;
19
+ parentSignal;
20
+ hookRegistry;
21
+ parentRunId;
22
+ parentAgentId;
23
+ tokenCounter;
24
+ maxDepth;
25
+ createChildGraph;
26
+ resolveParentHandlerRegistry;
27
+ constructor(options) {
28
+ this.configs = options.configs;
29
+ this.parentSignal = options.parentSignal;
30
+ this.hookRegistry = options.hookRegistry;
31
+ this.parentRunId = options.parentRunId;
32
+ this.parentAgentId = options.parentAgentId;
33
+ this.tokenCounter = options.tokenCounter;
34
+ this.maxDepth = options.maxDepth ?? 1;
35
+ this.createChildGraph = options.createChildGraph;
36
+ const rawRegistry = options.parentHandlerRegistry;
37
+ if (typeof rawRegistry === 'function') {
38
+ this.resolveParentHandlerRegistry = rawRegistry;
39
+ }
40
+ else if (rawRegistry != null) {
41
+ this.resolveParentHandlerRegistry = () => rawRegistry;
42
+ }
43
+ }
44
+ /** Snapshot of the parent's registry at the moment a subagent is dispatched. */
45
+ getParentHandlerRegistry() {
46
+ return this.resolveParentHandlerRegistry?.();
47
+ }
48
+ async execute(params) {
49
+ const { description, subagentType, threadId, parentToolCallId } = params;
50
+ const config = this.configs.get(subagentType);
51
+ if (!config) {
52
+ const available = [...this.configs.keys()].join(', ');
53
+ return {
54
+ content: `Error: Unknown subagent type "${subagentType}". Available types: ${available}`,
55
+ messages: [],
56
+ };
57
+ }
58
+ if (this.maxDepth <= 0) {
59
+ return {
60
+ content: 'Error: Maximum subagent nesting depth exceeded.',
61
+ messages: [],
62
+ };
63
+ }
64
+ const childAgentId = config.agentInputs.agentId ||
65
+ `${this.parentAgentId ?? 'agent'}_sub_${nanoid.nanoid(8)}`;
66
+ if (this.hookRegistry?.hasHookFor('SubagentStart', this.parentRunId) === true) {
67
+ const hookResult = await executeHooks.executeHooks({
68
+ registry: this.hookRegistry,
69
+ input: {
70
+ hook_event_name: 'SubagentStart',
71
+ runId: this.parentRunId,
72
+ threadId,
73
+ parentAgentId: this.parentAgentId,
74
+ agentId: childAgentId,
75
+ agentType: subagentType,
76
+ inputs: [new messages.HumanMessage(description)],
77
+ },
78
+ sessionId: this.parentRunId,
79
+ matchQuery: subagentType,
80
+ }).catch(() => HOOK_FALLBACK);
81
+ /**
82
+ * `ask` is treated identically to `deny` in the subagent context:
83
+ * subagents are non-interactive, so there is no prompt path for `ask`.
84
+ * Both decisions block execution and return a "Blocked" tool result.
85
+ */
86
+ if (hookResult.decision === 'deny' || hookResult.decision === 'ask') {
87
+ return {
88
+ content: `Blocked: ${hookResult.reason ?? 'Blocked by hook'}`,
89
+ messages: [],
90
+ };
91
+ }
92
+ }
93
+ const parentRegistry = this.getParentHandlerRegistry();
94
+ const forwardingEnabled = parentRegistry != null;
95
+ /**
96
+ * Keep `toolDefinitions` only when the host has actually wired an
97
+ * `ON_TOOL_EXECUTE` handler. `Run` always constructs a `HandlerRegistry`,
98
+ * so treating any registry as "forwarding enabled" would leak
99
+ * `toolDefinitions` into children whose hosts cannot execute them — the
100
+ * child's `ToolNode` batch promise would hang forever with no handler to
101
+ * resolve/reject. Gating on the tool-execute handler preserves the
102
+ * recoverable "no tools" path for registry-but-no-handler configs.
103
+ */
104
+ const hasToolExecuteHandler = parentRegistry?.getHandler(_enum.GraphEvents.ON_TOOL_EXECUTE) != null;
105
+ const childInputs = buildChildInputs(config, childAgentId, this.maxDepth,
106
+ /* keepToolDefinitions */ hasToolExecuteHandler);
107
+ const childRunId = `${this.parentRunId}_sub_${nanoid.nanoid(8)}`;
108
+ const maxTurns = config.maxTurns ?? DEFAULT_MAX_TURNS;
109
+ const childGraph = this.createChildGraph({
110
+ runId: childRunId,
111
+ signal: this.parentSignal,
112
+ agents: [childInputs],
113
+ tokenCounter: this.tokenCounter,
114
+ });
115
+ const forwarder = forwardingEnabled
116
+ ? this.createForwarderCallback({
117
+ parentRegistry: parentRegistry,
118
+ subagentType,
119
+ subagentAgentId: childAgentId,
120
+ childRunId,
121
+ parentToolCallId,
122
+ })
123
+ : undefined;
124
+ if (forwarder) {
125
+ await this.emitSubagentUpdate(parentRegistry, {
126
+ childRunId,
127
+ subagentType,
128
+ subagentAgentId: childAgentId,
129
+ parentToolCallId,
130
+ phase: 'start',
131
+ label: `Subagent "${subagentType}" started`,
132
+ });
133
+ }
134
+ let result;
135
+ try {
136
+ const workflow = childGraph.createWorkflow();
137
+ /**
138
+ * When `parentHandlerRegistry` is provided (forwarding mode), attach a
139
+ * lightweight callback that intercepts the child's `on_custom_event`
140
+ * dispatches and routes them to the parent's registry — either as
141
+ * operational events (ON_TOOL_EXECUTE) or wrapped ON_SUBAGENT_UPDATE
142
+ * envelopes. Native LangChain streaming events (on_chat_model_stream,
143
+ * etc.) still do NOT propagate to the parent's outer streamEvents
144
+ * iterator — the `callbacks` array REPLACES the inherited chain, so
145
+ * parent handlers won't receive child stream chunks and raise "No
146
+ * agent context found" lookups on the parent's agentContexts map.
147
+ *
148
+ * When no registry is provided (legacy isolation), `callbacks: []`
149
+ * fully detaches the child.
150
+ *
151
+ * `runName` gives the child a distinct LangSmith trace root (avoids
152
+ * nested trace pollution).
153
+ */
154
+ const callbacks = forwarder ? [forwarder] : [];
155
+ result = await workflow.invoke({ messages: [new messages.HumanMessage(description)] }, {
156
+ recursionLimit: maxTurns * RECURSION_MULTIPLIER,
157
+ signal: this.parentSignal,
158
+ callbacks,
159
+ runName: `subagent:${subagentType}`,
160
+ configurable: {
161
+ thread_id: childRunId,
162
+ },
163
+ });
164
+ }
165
+ catch (error) {
166
+ const errorMessage = truncateErrorMessage(error);
167
+ if (forwarder) {
168
+ await this.emitSubagentUpdate(parentRegistry, {
169
+ childRunId,
170
+ subagentType,
171
+ subagentAgentId: childAgentId,
172
+ parentToolCallId,
173
+ phase: 'error',
174
+ label: `Subagent "${subagentType}" errored: ${errorMessage}`,
175
+ data: { message: errorMessage },
176
+ });
177
+ }
178
+ childGraph.clearHeavyState();
179
+ return {
180
+ content: `Subagent error: ${errorMessage}`,
181
+ messages: [],
182
+ };
183
+ }
184
+ const filteredContent = filterSubagentResult(result.messages);
185
+ if (this.hookRegistry?.hasHookFor('SubagentStop', this.parentRunId) === true) {
186
+ /**
187
+ * Awaited (not fire-and-forget) for deterministic test synchronization
188
+ * and consistency with PostCompact. The parent is already waiting on the
189
+ * tool result, so the small extra latency is acceptable. Errors are
190
+ * swallowed — SubagentStop is observational.
191
+ */
192
+ await executeHooks.executeHooks({
193
+ registry: this.hookRegistry,
194
+ input: {
195
+ hook_event_name: 'SubagentStop',
196
+ runId: this.parentRunId,
197
+ threadId,
198
+ agentId: childAgentId,
199
+ agentType: subagentType,
200
+ messages: result.messages,
201
+ },
202
+ sessionId: this.parentRunId,
203
+ matchQuery: subagentType,
204
+ }).catch(() => {
205
+ /* SubagentStop is observational — swallow errors */
206
+ });
207
+ }
208
+ if (forwarder) {
209
+ await this.emitSubagentUpdate(parentRegistry, {
210
+ childRunId,
211
+ subagentType,
212
+ subagentAgentId: childAgentId,
213
+ parentToolCallId,
214
+ phase: 'stop',
215
+ label: `Subagent "${subagentType}" finished`,
216
+ });
217
+ }
218
+ childGraph.clearHeavyState();
219
+ return { content: filteredContent, messages: result.messages };
220
+ }
221
+ /**
222
+ * Emits a single {@link GraphEvents.ON_SUBAGENT_UPDATE} envelope through the
223
+ * parent's handler registry. Silent no-op when no parent registry is set.
224
+ * Errors are swallowed — update events are observational.
225
+ */
226
+ async emitSubagentUpdate(parentRegistry, args) {
227
+ const handler = parentRegistry.getHandler(_enum.GraphEvents.ON_SUBAGENT_UPDATE);
228
+ if (!handler) {
229
+ return;
230
+ }
231
+ const event = {
232
+ runId: this.parentRunId,
233
+ subagentRunId: args.childRunId,
234
+ subagentType: args.subagentType,
235
+ subagentAgentId: args.subagentAgentId,
236
+ parentAgentId: this.parentAgentId,
237
+ parentToolCallId: args.parentToolCallId,
238
+ phase: args.phase,
239
+ data: args.data,
240
+ label: args.label,
241
+ timestamp: new Date().toISOString(),
242
+ };
243
+ try {
244
+ await handler.handle(_enum.GraphEvents.ON_SUBAGENT_UPDATE, event);
245
+ }
246
+ catch {
247
+ /* observational — swallow */
248
+ }
249
+ }
250
+ /**
251
+ * Builds a BaseCallbackHandler that intercepts the child graph's custom
252
+ * events. Routing rules:
253
+ * - `ON_TOOL_EXECUTE` → forwarded as-is to the parent's ON_TOOL_EXECUTE
254
+ * handler (so event-driven tools work identically for child and parent).
255
+ * - `ON_RUN_STEP` / `ON_RUN_STEP_DELTA` / `ON_RUN_STEP_COMPLETED` /
256
+ * `ON_MESSAGE_DELTA` / `ON_REASONING_DELTA` → wrapped in a
257
+ * {@link GraphEvents.ON_SUBAGENT_UPDATE} envelope with a human-readable
258
+ * label, delivered to the parent's subagent-update handler.
259
+ * - Everything else → ignored (keeps parent's UI scoped to the events it
260
+ * cares about; host apps can extend by registering more phases).
261
+ */
262
+ createForwarderCallback(args) {
263
+ const { parentRegistry, subagentType, subagentAgentId, childRunId, parentToolCallId, } = args;
264
+ const parentRunId = this.parentRunId;
265
+ const parentAgentId = this.parentAgentId;
266
+ const wrap = async (eventName, phase, data) => {
267
+ const handler = parentRegistry.getHandler(_enum.GraphEvents.ON_SUBAGENT_UPDATE);
268
+ if (!handler) {
269
+ return;
270
+ }
271
+ const event = {
272
+ runId: parentRunId,
273
+ subagentRunId: childRunId,
274
+ subagentType,
275
+ subagentAgentId,
276
+ parentAgentId,
277
+ parentToolCallId,
278
+ phase,
279
+ data,
280
+ label: summarizeEvent(eventName, data),
281
+ timestamp: new Date().toISOString(),
282
+ };
283
+ try {
284
+ await handler.handle(_enum.GraphEvents.ON_SUBAGENT_UPDATE, event);
285
+ }
286
+ catch {
287
+ /* observational — swallow */
288
+ }
289
+ };
290
+ const handler = base.BaseCallbackHandler.fromMethods({
291
+ [_enum.Callback.CUSTOM_EVENT]: async (eventName, data) => {
292
+ if (eventName === _enum.GraphEvents.ON_TOOL_EXECUTE) {
293
+ const toolHandler = parentRegistry.getHandler(_enum.GraphEvents.ON_TOOL_EXECUTE);
294
+ if (toolHandler) {
295
+ await toolHandler.handle(_enum.GraphEvents.ON_TOOL_EXECUTE, data);
296
+ }
297
+ /**
298
+ * We also surface a short notice in the subagent-update stream so
299
+ * the UI can show "calling <tool>" for each tool the child spawns.
300
+ */
301
+ await wrap(eventName, 'run_step', data);
302
+ return;
303
+ }
304
+ if (eventName === _enum.GraphEvents.ON_RUN_STEP) {
305
+ await wrap(eventName, 'run_step', data);
306
+ return;
307
+ }
308
+ if (eventName === _enum.GraphEvents.ON_RUN_STEP_DELTA) {
309
+ await wrap(eventName, 'run_step_delta', data);
310
+ return;
311
+ }
312
+ if (eventName === _enum.GraphEvents.ON_RUN_STEP_COMPLETED) {
313
+ await wrap(eventName, 'run_step_completed', data);
314
+ return;
315
+ }
316
+ if (eventName === _enum.GraphEvents.ON_MESSAGE_DELTA) {
317
+ await wrap(eventName, 'message_delta', data);
318
+ return;
319
+ }
320
+ if (eventName === _enum.GraphEvents.ON_REASONING_DELTA) {
321
+ await wrap(eventName, 'reasoning_delta', data);
322
+ return;
323
+ }
324
+ },
325
+ });
326
+ /**
327
+ * `awaitHandlers = true` is required so the child's `ToolNode` actually
328
+ * blocks on the parent's `ON_TOOL_EXECUTE` handler until it resolves
329
+ * the batch request. The same flag applies to observational events
330
+ * (message_delta, run_step, …), which means a slow
331
+ * `ON_SUBAGENT_UPDATE` handler on the host serializes the child
332
+ * stream. If host-side latency becomes a concern, a future
333
+ * refinement could split operational and observational events into
334
+ * separate callback handlers with distinct await semantics.
335
+ */
336
+ handler.awaitHandlers = true;
337
+ return handler;
338
+ }
339
+ }
340
+ /**
341
+ * Produces a short single-line label for an arbitrary forwarded child event.
342
+ * Used to populate {@link SubagentUpdateEvent.label} so the host UI can show
343
+ * a compact status ticker without parsing the raw payload.
344
+ */
345
+ function summarizeEvent(eventName, data) {
346
+ if (eventName === _enum.GraphEvents.ON_TOOL_EXECUTE) {
347
+ const req = data;
348
+ const names = (req.toolCalls ?? [])
349
+ .map((c) => c.name)
350
+ .filter((n) => typeof n === 'string');
351
+ return names.length > 0 ? `Calling ${names.join(', ')}` : 'Calling tool';
352
+ }
353
+ if (eventName === _enum.GraphEvents.ON_RUN_STEP) {
354
+ const step = data;
355
+ const detailType = step.stepDetails?.type ?? step.type ?? 'step';
356
+ if (detailType === 'tool_calls') {
357
+ const names = (step.stepDetails?.tool_calls ?? [])
358
+ .map((c) => c.name)
359
+ .filter((n) => typeof n === 'string');
360
+ return names.length > 0
361
+ ? `Using tool: ${names.join(', ')}`
362
+ : 'Planning tool call';
363
+ }
364
+ if (detailType === 'message_creation') {
365
+ return 'Thinking…';
366
+ }
367
+ return `Step: ${detailType}`;
368
+ }
369
+ if (eventName === _enum.GraphEvents.ON_RUN_STEP_COMPLETED) {
370
+ const step = data;
371
+ const tool = step.result?.tool_call;
372
+ if (tool?.name != null && tool.name !== '') {
373
+ return `Tool ${tool.name} complete`;
374
+ }
375
+ return 'Step complete';
376
+ }
377
+ if (eventName === _enum.GraphEvents.ON_MESSAGE_DELTA) {
378
+ return 'Streaming…';
379
+ }
380
+ return eventName;
381
+ }
382
+ /**
383
+ * Walk messages from last to first, returning the text content of the most
384
+ * recent AIMessage that has any. Non-text blocks (tool_use, thinking,
385
+ * redacted_thinking, tool_result) are stripped. If the last AIMessage is
386
+ * pure tool_use (e.g. the subagent hit `maxTurns` mid-tool-call), the walk
387
+ * continues to earlier AIMessages so partial progress is salvaged — this
388
+ * matches Claude Code's behavior in `agentToolUtils.finalizeAgentTool`.
389
+ * Returns "Task completed" only when no AIMessage in the history contains
390
+ * any text.
391
+ */
392
+ function filterSubagentResult(messages) {
393
+ for (let i = messages.length - 1; i >= 0; i--) {
394
+ if (messages[i]._getType() !== 'ai') {
395
+ continue;
396
+ }
397
+ const content = messages[i].content;
398
+ if (typeof content === 'string') {
399
+ if (content)
400
+ return content;
401
+ continue;
402
+ }
403
+ if (!Array.isArray(content)) {
404
+ continue;
405
+ }
406
+ const textParts = [];
407
+ for (const block of content) {
408
+ if (typeof block === 'string') {
409
+ textParts.push(block);
410
+ }
411
+ else if ('type' in block && block.type === 'text' && 'text' in block) {
412
+ textParts.push(block.text);
413
+ }
414
+ }
415
+ if (textParts.length > 0) {
416
+ return textParts.join('\n');
417
+ }
418
+ }
419
+ return 'Task completed';
420
+ }
421
+ /**
422
+ * Resolve self-spawn configs by filling in agentInputs from the parent context.
423
+ * Returns configs with agentInputs guaranteed present. Throws on duplicate
424
+ * `type` values to prevent silent config shadowing.
425
+ */
426
+ function resolveSubagentConfigs(configs, parentContext) {
427
+ const resolved = configs
428
+ .map((config) => {
429
+ if (config.agentInputs != null) {
430
+ return config;
431
+ }
432
+ if (config.self !== true || parentContext._sourceInputs == null) {
433
+ return null;
434
+ }
435
+ return {
436
+ ...config,
437
+ agentInputs: { ...parentContext._sourceInputs },
438
+ };
439
+ })
440
+ .filter((c) => c != null);
441
+ const seenTypes = new Set();
442
+ for (const config of resolved) {
443
+ if (seenTypes.has(config.type)) {
444
+ throw new Error(`Duplicate subagent type "${config.type}". Each SubagentConfig must have a unique "type" field.`);
445
+ }
446
+ seenTypes.add(config.type);
447
+ }
448
+ return resolved;
449
+ }
450
+ /**
451
+ * Build child AgentInputs from a resolved config, stripping nesting and
452
+ * (optionally) event-driven fields. When `allowNested: true`, the child's
453
+ * `maxSubagentDepth` is decremented so that depth is consumed as the call
454
+ * chain deepens across graph boundaries — the parent's executor-level check
455
+ * alone cannot see into the child graph's separate executor.
456
+ *
457
+ * When `keepToolDefinitions` is `true`, the child retains the parent's
458
+ * `toolDefinitions` so event-driven tools remain usable. This is only safe
459
+ * when the caller has wired a forwarder for `ON_TOOL_EXECUTE` to a
460
+ * registered handler — otherwise the child will hang on tool dispatch.
461
+ *
462
+ * @remarks Advanced utility: exported primarily for testing and by
463
+ * {@link SubagentExecutor}. Host applications configuring subagents should
464
+ * not need to call this directly — it is invoked internally when a subagent
465
+ * tool is dispatched. The depth-countdown contract (parent's `maxDepth` in,
466
+ * child's decremented `maxSubagentDepth` on the returned inputs) is the
467
+ * mechanism that bounds nesting across graph boundaries; callers must
468
+ * respect it.
469
+ */
470
+ function buildChildInputs(config, childAgentId, parentMaxDepth, keepToolDefinitions = false) {
471
+ const { agentInputs } = config;
472
+ const childInputs = {
473
+ ...agentInputs,
474
+ agentId: childAgentId,
475
+ toolDefinitions: keepToolDefinitions
476
+ ? agentInputs.toolDefinitions
477
+ : undefined,
478
+ /**
479
+ * Subagents run in an isolated context by contract. Parent-run-scoped
480
+ * fields that would otherwise survive the shallow-spread clone — the
481
+ * cross-run conversation summary and the prior-turn tool-discovery
482
+ * set — are cleared here so the child starts fresh. Host applications
483
+ * that want a subagent to see parent context must thread it in
484
+ * explicitly (e.g. via the `description` argument to the subagent
485
+ * tool), not via inherited state.
486
+ */
487
+ initialSummary: undefined,
488
+ discoveredTools: undefined,
489
+ };
490
+ if (config.allowNested === true) {
491
+ childInputs.maxSubagentDepth = Math.max(0, parentMaxDepth - 1);
492
+ }
493
+ else {
494
+ childInputs.subagentConfigs = undefined;
495
+ childInputs.maxSubagentDepth = undefined;
496
+ }
497
+ return childInputs;
498
+ }
499
+ function truncateErrorMessage(error) {
500
+ const message = error instanceof Error ? error.message : String(error);
501
+ if (message.length <= ERROR_MESSAGE_MAX_CHARS) {
502
+ return message;
503
+ }
504
+ return `${message.slice(0, ERROR_MESSAGE_MAX_CHARS)}...`;
505
+ }
506
+
507
+ exports.SubagentExecutor = SubagentExecutor;
508
+ exports.buildChildInputs = buildChildInputs;
509
+ exports.filterSubagentResult = filterSubagentResult;
510
+ exports.resolveSubagentConfigs = resolveSubagentConfigs;
511
+ exports.summarizeEvent = summarizeEvent;
512
+ //# sourceMappingURL=SubagentExecutor.cjs.map