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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (800) hide show
  1. package/README.md +62 -0
  2. package/dist/cjs/agents/AgentContext.cjs +274 -67
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/enum.cjs +44 -13
  5. package/dist/cjs/common/enum.cjs.map +1 -1
  6. package/dist/cjs/graphs/Graph.cjs +182 -5
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  8. package/dist/cjs/graphs/MultiAgentGraph.cjs +152 -1167
  9. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  10. package/dist/cjs/hooks/HookRegistry.cjs +162 -0
  11. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
  12. package/dist/cjs/hooks/executeHooks.cjs +276 -0
  13. package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
  14. package/dist/cjs/hooks/matchers.cjs +256 -0
  15. package/dist/cjs/hooks/matchers.cjs.map +1 -0
  16. package/dist/cjs/hooks/types.cjs +27 -0
  17. package/dist/cjs/hooks/types.cjs.map +1 -0
  18. package/dist/cjs/langchain/google-common.cjs +3 -0
  19. package/dist/cjs/langchain/google-common.cjs.map +1 -0
  20. package/dist/cjs/langchain/index.cjs +86 -0
  21. package/dist/cjs/langchain/index.cjs.map +1 -0
  22. package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
  23. package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
  24. package/dist/cjs/langchain/messages/tool.cjs +3 -0
  25. package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
  26. package/dist/cjs/langchain/messages.cjs +51 -0
  27. package/dist/cjs/langchain/messages.cjs.map +1 -0
  28. package/dist/cjs/langchain/openai.cjs +3 -0
  29. package/dist/cjs/langchain/openai.cjs.map +1 -0
  30. package/dist/cjs/langchain/prompts.cjs +11 -0
  31. package/dist/cjs/langchain/prompts.cjs.map +1 -0
  32. package/dist/cjs/langchain/runnables.cjs +19 -0
  33. package/dist/cjs/langchain/runnables.cjs.map +1 -0
  34. package/dist/cjs/langchain/tools.cjs +23 -0
  35. package/dist/cjs/langchain/tools.cjs.map +1 -0
  36. package/dist/cjs/langchain/utils/env.cjs +11 -0
  37. package/dist/cjs/langchain/utils/env.cjs.map +1 -0
  38. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
  39. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  40. package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
  41. package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
  42. package/dist/cjs/llm/bedrock/index.cjs +61 -33
  43. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  44. package/dist/cjs/llm/openai/index.cjs +0 -3
  45. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  46. package/dist/cjs/llm/openai/utils/index.cjs +27 -10
  47. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  48. package/dist/cjs/main.cjs +178 -127
  49. package/dist/cjs/main.cjs.map +1 -1
  50. package/dist/cjs/messages/cache.cjs +89 -0
  51. package/dist/cjs/messages/cache.cjs.map +1 -1
  52. package/dist/cjs/messages/contextPruning.cjs +156 -0
  53. package/dist/cjs/messages/contextPruning.cjs.map +1 -0
  54. package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
  55. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
  56. package/dist/cjs/messages/format.cjs +144 -20
  57. package/dist/cjs/messages/format.cjs.map +1 -1
  58. package/dist/cjs/messages/prune.cjs +505 -4
  59. package/dist/cjs/messages/prune.cjs.map +1 -1
  60. package/dist/cjs/run.cjs +141 -1
  61. package/dist/cjs/run.cjs.map +1 -1
  62. package/dist/cjs/tools/BashExecutor.cjs +235 -0
  63. package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
  64. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
  65. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
  66. package/dist/cjs/tools/CodeExecutor.cjs +44 -47
  67. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  68. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
  69. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  70. package/dist/cjs/tools/ReadFile.cjs +44 -0
  71. package/dist/cjs/tools/ReadFile.cjs.map +1 -0
  72. package/dist/cjs/tools/SkillTool.cjs +51 -0
  73. package/dist/cjs/tools/SkillTool.cjs.map +1 -0
  74. package/dist/cjs/tools/SubagentTool.cjs +93 -0
  75. package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
  76. package/dist/cjs/tools/ToolNode.cjs +450 -24
  77. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  78. package/dist/cjs/tools/search/search.cjs +11 -3
  79. package/dist/cjs/tools/search/search.cjs.map +1 -1
  80. package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
  81. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
  82. package/dist/cjs/tools/search/tavily-search.cjs +372 -0
  83. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
  84. package/dist/cjs/tools/search/tool.cjs +28 -4
  85. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  86. package/dist/cjs/tools/search/utils.cjs +10 -3
  87. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  88. package/dist/cjs/tools/skillCatalog.cjs +84 -0
  89. package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
  90. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
  91. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
  92. package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
  93. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
  94. package/dist/cjs/types/agent-cache.cjs +53 -0
  95. package/dist/cjs/types/agent-cache.cjs.map +1 -0
  96. package/dist/cjs/types/graph.cjs.map +1 -1
  97. package/dist/cjs/utils/truncation.cjs +135 -0
  98. package/dist/cjs/utils/truncation.cjs.map +1 -0
  99. package/dist/esm/agents/AgentContext.mjs +274 -67
  100. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  101. package/dist/esm/common/enum.mjs +44 -12
  102. package/dist/esm/common/enum.mjs.map +1 -1
  103. package/dist/esm/graphs/Graph.mjs +182 -5
  104. package/dist/esm/graphs/Graph.mjs.map +1 -1
  105. package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
  106. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  107. package/dist/esm/hooks/HookRegistry.mjs +160 -0
  108. package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
  109. package/dist/esm/hooks/executeHooks.mjs +273 -0
  110. package/dist/esm/hooks/executeHooks.mjs.map +1 -0
  111. package/dist/esm/hooks/matchers.mjs +251 -0
  112. package/dist/esm/hooks/matchers.mjs.map +1 -0
  113. package/dist/esm/hooks/types.mjs +25 -0
  114. package/dist/esm/hooks/types.mjs.map +1 -0
  115. package/dist/esm/langchain/google-common.mjs +2 -0
  116. package/dist/esm/langchain/google-common.mjs.map +1 -0
  117. package/dist/esm/langchain/index.mjs +5 -0
  118. package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
  119. package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
  120. package/dist/esm/langchain/messages/tool.mjs +2 -0
  121. package/dist/esm/langchain/messages/tool.mjs.map +1 -0
  122. package/dist/esm/langchain/messages.mjs +2 -0
  123. package/dist/esm/langchain/messages.mjs.map +1 -0
  124. package/dist/esm/langchain/openai.mjs +2 -0
  125. package/dist/esm/langchain/openai.mjs.map +1 -0
  126. package/dist/esm/langchain/prompts.mjs +2 -0
  127. package/dist/esm/langchain/prompts.mjs.map +1 -0
  128. package/dist/esm/langchain/runnables.mjs +2 -0
  129. package/dist/esm/langchain/runnables.mjs.map +1 -0
  130. package/dist/esm/langchain/tools.mjs +2 -0
  131. package/dist/esm/langchain/tools.mjs.map +1 -0
  132. package/dist/esm/langchain/utils/env.mjs +2 -0
  133. package/dist/esm/langchain/utils/env.mjs.map +1 -0
  134. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
  135. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  136. package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
  137. package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
  138. package/dist/esm/llm/bedrock/index.mjs +61 -34
  139. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  140. package/dist/esm/llm/openai/index.mjs +0 -3
  141. package/dist/esm/llm/openai/index.mjs.map +1 -1
  142. package/dist/esm/llm/openai/utils/index.mjs +27 -10
  143. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  144. package/dist/esm/main.mjs +21 -27
  145. package/dist/esm/main.mjs.map +1 -1
  146. package/dist/esm/messages/cache.mjs +89 -0
  147. package/dist/esm/messages/cache.mjs.map +1 -1
  148. package/dist/esm/messages/contextPruning.mjs +154 -0
  149. package/dist/esm/messages/contextPruning.mjs.map +1 -0
  150. package/dist/esm/messages/contextPruningSettings.mjs +50 -0
  151. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
  152. package/dist/esm/messages/format.mjs +136 -12
  153. package/dist/esm/messages/format.mjs.map +1 -1
  154. package/dist/esm/messages/prune.mjs +504 -7
  155. package/dist/esm/messages/prune.mjs.map +1 -1
  156. package/dist/esm/run.mjs +141 -1
  157. package/dist/esm/run.mjs.map +1 -1
  158. package/dist/esm/tools/BashExecutor.mjs +227 -0
  159. package/dist/esm/tools/BashExecutor.mjs.map +1 -0
  160. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
  161. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
  162. package/dist/esm/tools/CodeExecutor.mjs +44 -48
  163. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  164. package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
  165. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  166. package/dist/esm/tools/ReadFile.mjs +39 -0
  167. package/dist/esm/tools/ReadFile.mjs.map +1 -0
  168. package/dist/esm/tools/SkillTool.mjs +46 -0
  169. package/dist/esm/tools/SkillTool.mjs.map +1 -0
  170. package/dist/esm/tools/SubagentTool.mjs +86 -0
  171. package/dist/esm/tools/SubagentTool.mjs.map +1 -0
  172. package/dist/esm/tools/ToolNode.mjs +452 -26
  173. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  174. package/dist/esm/tools/search/search.mjs +11 -3
  175. package/dist/esm/tools/search/search.mjs.map +1 -1
  176. package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
  177. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
  178. package/dist/esm/tools/search/tavily-search.mjs +370 -0
  179. package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
  180. package/dist/esm/tools/search/tool.mjs +28 -4
  181. package/dist/esm/tools/search/tool.mjs.map +1 -1
  182. package/dist/esm/tools/search/utils.mjs +10 -3
  183. package/dist/esm/tools/search/utils.mjs.map +1 -1
  184. package/dist/esm/tools/skillCatalog.mjs +82 -0
  185. package/dist/esm/tools/skillCatalog.mjs.map +1 -0
  186. package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
  187. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
  188. package/dist/esm/tools/toolOutputReferences.mjs +662 -0
  189. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
  190. package/dist/esm/types/agent-cache.mjs +51 -0
  191. package/dist/esm/types/agent-cache.mjs.map +1 -0
  192. package/dist/esm/types/graph.mjs.map +1 -1
  193. package/dist/esm/utils/truncation.mjs +128 -0
  194. package/dist/esm/utils/truncation.mjs.map +1 -0
  195. package/dist/types/agents/AgentContext.d.ts +101 -8
  196. package/dist/types/common/enum.d.ts +39 -12
  197. package/dist/types/common/index.d.ts +0 -1
  198. package/dist/types/graphs/Graph.d.ts +43 -0
  199. package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
  200. package/dist/types/graphs/index.d.ts +0 -1
  201. package/dist/types/hooks/HookRegistry.d.ts +56 -0
  202. package/dist/types/hooks/executeHooks.d.ts +79 -0
  203. package/dist/types/hooks/index.d.ts +6 -0
  204. package/dist/types/hooks/matchers.d.ts +95 -0
  205. package/dist/types/hooks/types.d.ts +320 -0
  206. package/dist/types/index.d.ts +9 -9
  207. package/dist/types/langchain/google-common.d.ts +1 -0
  208. package/dist/types/langchain/index.d.ts +8 -0
  209. package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
  210. package/dist/types/langchain/messages/tool.d.ts +1 -0
  211. package/dist/types/langchain/messages.d.ts +2 -0
  212. package/dist/types/langchain/openai.d.ts +1 -0
  213. package/dist/types/langchain/prompts.d.ts +1 -0
  214. package/dist/types/langchain/runnables.d.ts +2 -0
  215. package/dist/types/langchain/tools.d.ts +2 -0
  216. package/dist/types/langchain/utils/env.d.ts +1 -0
  217. package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
  218. package/dist/types/llm/bedrock/index.d.ts +54 -1
  219. package/dist/types/messages/contextPruning.d.ts +42 -0
  220. package/dist/types/messages/contextPruningSettings.d.ts +44 -0
  221. package/dist/types/messages/format.d.ts +9 -1
  222. package/dist/types/messages/index.d.ts +2 -0
  223. package/dist/types/messages/prune.d.ts +91 -1
  224. package/dist/types/run.d.ts +2 -0
  225. package/dist/types/tools/BashExecutor.d.ts +76 -0
  226. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
  227. package/dist/types/tools/CodeExecutor.d.ts +8 -26
  228. package/dist/types/tools/ReadFile.d.ts +28 -0
  229. package/dist/types/tools/SkillTool.d.ts +40 -0
  230. package/dist/types/tools/SubagentTool.d.ts +36 -0
  231. package/dist/types/tools/ToolNode.d.ts +77 -5
  232. package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
  233. package/dist/types/tools/search/tavily-search.d.ts +4 -0
  234. package/dist/types/tools/search/types.d.ts +99 -5
  235. package/dist/types/tools/search/utils.d.ts +2 -2
  236. package/dist/types/tools/skillCatalog.d.ts +19 -0
  237. package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
  238. package/dist/types/tools/subagent/index.d.ts +2 -0
  239. package/dist/types/tools/subagent/types.d.ts +84 -0
  240. package/dist/types/tools/toolOutputReferences.d.ts +236 -0
  241. package/dist/types/types/agent-cache.d.ts +70 -0
  242. package/dist/types/types/graph.d.ts +162 -22
  243. package/dist/types/types/index.d.ts +3 -0
  244. package/dist/types/types/messages.d.ts +26 -0
  245. package/dist/types/types/run.d.ts +22 -0
  246. package/dist/types/types/skill.d.ts +9 -0
  247. package/dist/types/types/tools.d.ts +111 -0
  248. package/dist/types/utils/index.d.ts +1 -3
  249. package/dist/types/utils/truncation.d.ts +70 -0
  250. package/package.json +57 -17
  251. package/src/agents/AgentContext.js.map +1 -0
  252. package/src/agents/AgentContext.test.js.map +1 -0
  253. package/src/agents/AgentContext.ts +321 -78
  254. package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
  255. package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +264 -0
  256. package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
  257. package/src/agents/__tests__/AgentContext.test.js.map +1 -0
  258. package/src/agents/__tests__/AgentContext.test.ts +632 -0
  259. package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
  260. package/src/common/__tests__/enum.test.ts +7 -17
  261. package/src/common/enum.js.map +1 -0
  262. package/src/common/enum.ts +43 -12
  263. package/src/common/index.js.map +1 -0
  264. package/src/common/index.ts +0 -1
  265. package/src/events.js.map +1 -0
  266. package/src/graphs/Graph.js.map +1 -0
  267. package/src/graphs/Graph.ts +222 -2
  268. package/src/graphs/MultiAgentGraph.js.map +1 -0
  269. package/src/graphs/MultiAgentGraph.ts +154 -1466
  270. package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
  271. package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
  272. package/src/graphs/__tests__/structured-output.test.js.map +1 -0
  273. package/src/graphs/contextManagement.e2e.test.js.map +1 -0
  274. package/src/graphs/contextManagement.test.js.map +1 -0
  275. package/src/graphs/handoffValidation.test.js.map +1 -0
  276. package/src/graphs/index.js.map +1 -0
  277. package/src/graphs/index.ts +0 -1
  278. package/src/hooks/HookRegistry.ts +208 -0
  279. package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
  280. package/src/hooks/__tests__/compactHooks.test.ts +214 -0
  281. package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
  282. package/src/hooks/__tests__/integration.test.ts +337 -0
  283. package/src/hooks/__tests__/matchers.test.ts +238 -0
  284. package/src/hooks/__tests__/toolHooks.test.ts +665 -0
  285. package/src/hooks/executeHooks.ts +375 -0
  286. package/src/hooks/index.ts +57 -0
  287. package/src/hooks/matchers.ts +280 -0
  288. package/src/hooks/types.ts +404 -0
  289. package/src/index.js.map +1 -0
  290. package/src/index.ts +15 -24
  291. package/src/instrumentation.js.map +1 -0
  292. package/src/langchain/google-common.ts +1 -0
  293. package/src/langchain/index.ts +8 -0
  294. package/src/langchain/language_models/chat_models.ts +1 -0
  295. package/src/langchain/messages/tool.ts +5 -0
  296. package/src/langchain/messages.ts +21 -0
  297. package/src/langchain/openai.ts +1 -0
  298. package/src/langchain/prompts.ts +1 -0
  299. package/src/langchain/runnables.ts +7 -0
  300. package/src/langchain/tools.ts +8 -0
  301. package/src/langchain/utils/env.ts +1 -0
  302. package/src/llm/anthropic/index.js.map +1 -0
  303. package/src/llm/anthropic/types.js.map +1 -0
  304. package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
  305. package/src/llm/anthropic/utils/message_inputs.ts +10 -1
  306. package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
  307. package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
  308. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
  309. package/src/llm/anthropic/utils/tools.js.map +1 -0
  310. package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -0
  311. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
  312. package/src/llm/bedrock/cacheSupport.test.ts +99 -0
  313. package/src/llm/bedrock/cacheSupport.ts +53 -0
  314. package/src/llm/bedrock/index.js.map +1 -0
  315. package/src/llm/bedrock/index.ts +116 -41
  316. package/src/llm/bedrock/types.js.map +1 -0
  317. package/src/llm/bedrock/utils/index.js.map +1 -0
  318. package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
  319. package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
  320. package/src/llm/fake.js.map +1 -0
  321. package/src/llm/google/index.js.map +1 -0
  322. package/src/llm/google/types.js.map +1 -0
  323. package/src/llm/google/utils/common.js.map +1 -0
  324. package/src/llm/google/utils/tools.js.map +1 -0
  325. package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
  326. package/src/llm/openai/index.js.map +1 -0
  327. package/src/llm/openai/types.js.map +1 -0
  328. package/src/llm/openai/utils/index.js.map +1 -0
  329. package/src/llm/openai/utils/index.ts +31 -14
  330. package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
  331. package/src/llm/openrouter/index.js.map +1 -0
  332. package/src/llm/openrouter/reasoning.test.js.map +1 -0
  333. package/src/llm/providers.js.map +1 -0
  334. package/src/llm/text.js.map +1 -0
  335. package/src/llm/vertexai/index.js.map +1 -0
  336. package/src/messages/__tests__/contextPruning.test.ts +228 -0
  337. package/src/messages/__tests__/tools.test.js.map +1 -0
  338. package/src/messages/cache.js.map +1 -0
  339. package/src/messages/cache.test.js.map +1 -0
  340. package/src/messages/cache.test.ts +62 -24
  341. package/src/messages/cache.ts +112 -0
  342. package/src/messages/content.js.map +1 -0
  343. package/src/messages/content.test.js.map +1 -0
  344. package/src/messages/contextPruning.ts +191 -0
  345. package/src/messages/contextPruningSettings.ts +90 -0
  346. package/src/messages/core.js.map +1 -0
  347. package/src/messages/ensureThinkingBlock.test.js.map +1 -0
  348. package/src/messages/format.js.map +1 -0
  349. package/src/messages/format.ts +164 -12
  350. package/src/messages/formatAgentMessages.skills.test.ts +413 -0
  351. package/src/messages/formatAgentMessages.test.js.map +1 -0
  352. package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
  353. package/src/messages/formatMessage.test.js.map +1 -0
  354. package/src/messages/ids.js.map +1 -0
  355. package/src/messages/index.js.map +1 -0
  356. package/src/messages/index.ts +2 -0
  357. package/src/messages/labelContentByAgent.test.js.map +1 -0
  358. package/src/messages/prune.js.map +1 -0
  359. package/src/messages/prune.ts +661 -4
  360. package/src/messages/reducer.js.map +1 -0
  361. package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
  362. package/src/messages/summarize.js.map +1 -0
  363. package/src/messages/summarize.test.js.map +1 -0
  364. package/src/messages/tools.js.map +1 -0
  365. package/src/mockStream.js.map +1 -0
  366. package/src/prompts/collab.js.map +1 -0
  367. package/src/prompts/index.js.map +1 -0
  368. package/src/prompts/taskmanager.js.map +1 -0
  369. package/src/run.js.map +1 -0
  370. package/src/run.ts +155 -1
  371. package/src/schemas/index.js.map +1 -0
  372. package/src/schemas/schema-preparation.test.js.map +1 -0
  373. package/src/schemas/validate.js.map +1 -0
  374. package/src/schemas/validate.test.js.map +1 -0
  375. package/src/scripts/abort.js.map +1 -0
  376. package/src/scripts/ant_web_search.js.map +1 -0
  377. package/src/scripts/ant_web_search_edge_case.js.map +1 -0
  378. package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
  379. package/src/scripts/args.js.map +1 -0
  380. package/src/scripts/bedrock-cache-debug.js.map +1 -0
  381. package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
  382. package/src/scripts/bedrock-merge-test.js.map +1 -0
  383. package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
  384. package/src/scripts/caching.js.map +1 -0
  385. package/src/scripts/cli.js.map +1 -0
  386. package/src/scripts/cli2.js.map +1 -0
  387. package/src/scripts/cli3.js.map +1 -0
  388. package/src/scripts/cli4.js.map +1 -0
  389. package/src/scripts/cli5.js.map +1 -0
  390. package/src/scripts/code_exec.js.map +1 -0
  391. package/src/scripts/code_exec_files.js.map +1 -0
  392. package/src/scripts/code_exec_multi_session.js.map +1 -0
  393. package/src/scripts/code_exec_ptc.js.map +1 -0
  394. package/src/scripts/code_exec_session.js.map +1 -0
  395. package/src/scripts/code_exec_simple.js.map +1 -0
  396. package/src/scripts/content.js.map +1 -0
  397. package/src/scripts/empty_input.js.map +1 -0
  398. package/src/scripts/handoff-test.js.map +1 -0
  399. package/src/scripts/image.js.map +1 -0
  400. package/src/scripts/memory.js.map +1 -0
  401. package/src/scripts/multi-agent-chain.js.map +1 -0
  402. package/src/scripts/multi-agent-chain.ts +2 -2
  403. package/src/scripts/multi-agent-conditional.js.map +1 -0
  404. package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
  405. package/src/scripts/multi-agent-document-review-chain.ts +2 -2
  406. package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
  407. package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
  408. package/src/scripts/multi-agent-parallel-start.js.map +1 -0
  409. package/src/scripts/multi-agent-parallel.js.map +1 -0
  410. package/src/scripts/multi-agent-parallel.ts +3 -3
  411. package/src/scripts/multi-agent-sequence.js.map +1 -0
  412. package/src/scripts/multi-agent-sequence.ts +3 -3
  413. package/src/scripts/multi-agent-subagent.ts +246 -0
  414. package/src/scripts/multi-agent-supervisor.js.map +1 -0
  415. package/src/scripts/multi-agent-supervisor.ts +5 -5
  416. package/src/scripts/multi-agent-test.js.map +1 -0
  417. package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
  418. package/src/scripts/parallel-full-metadata-test.js.map +1 -0
  419. package/src/scripts/parallel-tools-test.js.map +1 -0
  420. package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
  421. package/src/scripts/programmatic_exec.js.map +1 -0
  422. package/src/scripts/programmatic_exec_agent.js.map +1 -0
  423. package/src/scripts/search.js.map +1 -0
  424. package/src/scripts/sequential-full-metadata-test.js.map +1 -0
  425. package/src/scripts/sequential-full-metadata-test.ts +2 -2
  426. package/src/scripts/simple.js.map +1 -0
  427. package/src/scripts/single-agent-metadata-test.js.map +1 -0
  428. package/src/scripts/stream.js.map +1 -0
  429. package/src/scripts/subagent-event-driven-debug.ts +190 -0
  430. package/src/scripts/subagent-tools-debug.ts +160 -0
  431. package/src/scripts/test-custom-prompt-key.js.map +1 -0
  432. package/src/scripts/test-custom-prompt-key.ts +3 -3
  433. package/src/scripts/test-handoff-input.js.map +1 -0
  434. package/src/scripts/test-handoff-input.ts +1 -1
  435. package/src/scripts/test-handoff-preamble.js.map +1 -0
  436. package/src/scripts/test-handoff-steering.js.map +1 -0
  437. package/src/scripts/test-handoff-steering.ts +3 -3
  438. package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
  439. package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
  440. package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
  441. package/src/scripts/test-parallel-agent-labeling.ts +3 -3
  442. package/src/scripts/test-parallel-handoffs.js.map +1 -0
  443. package/src/scripts/test-parallel-handoffs.ts +2 -2
  444. package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
  445. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
  446. package/src/scripts/test-thinking-handoff.js.map +1 -0
  447. package/src/scripts/test-thinking-handoff.ts +1 -1
  448. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
  449. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
  450. package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
  451. package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
  452. package/src/scripts/test-tools-before-handoff.js.map +1 -0
  453. package/src/scripts/test-tools-before-handoff.ts +1 -1
  454. package/src/scripts/test_code_api.js.map +1 -0
  455. package/src/scripts/thinking-bedrock.js.map +1 -0
  456. package/src/scripts/thinking-vertexai.js.map +1 -0
  457. package/src/scripts/thinking.js.map +1 -0
  458. package/src/scripts/tool_search.js.map +1 -0
  459. package/src/scripts/tools.js.map +1 -0
  460. package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
  461. package/src/specs/agent-handoffs.test.js.map +1 -0
  462. package/src/specs/agent-handoffs.test.ts +26 -483
  463. package/src/specs/anthropic.simple.test.js.map +1 -0
  464. package/src/specs/anthropic.simple.test.ts +61 -0
  465. package/src/specs/azure.simple.test.js.map +1 -0
  466. package/src/specs/cache.simple.test.js.map +1 -0
  467. package/src/specs/custom-event-await.test.js.map +1 -0
  468. package/src/specs/deepseek.simple.test.js.map +1 -0
  469. package/src/specs/emergency-prune.test.js.map +1 -0
  470. package/src/specs/moonshot.simple.test.js.map +1 -0
  471. package/src/specs/multi-agent-summarization.test.ts +396 -0
  472. package/src/specs/observability.integration.test.js.map +1 -0
  473. package/src/specs/openai.simple.test.js.map +1 -0
  474. package/src/specs/openrouter.simple.test.js.map +1 -0
  475. package/src/specs/prune.orphans.test.ts +248 -0
  476. package/src/specs/prune.test.js.map +1 -0
  477. package/src/specs/prune.test.ts +104 -16
  478. package/src/specs/reasoning.test.js.map +1 -0
  479. package/src/specs/spec.utils.js.map +1 -0
  480. package/src/specs/thinking-handoff.test.js.map +1 -0
  481. package/src/specs/thinking-handoff.test.ts +19 -19
  482. package/src/specs/thinking-prune.test.js.map +1 -0
  483. package/src/specs/token-distribution-edge-case.test.js.map +1 -0
  484. package/src/specs/token-memoization.test.js.map +1 -0
  485. package/src/specs/tokens.test.js.map +1 -0
  486. package/src/specs/tool-error.test.js.map +1 -0
  487. package/src/splitStream.js.map +1 -0
  488. package/src/splitStream.test.js.map +1 -0
  489. package/src/stream.js.map +1 -0
  490. package/src/stream.test.js.map +1 -0
  491. package/src/test/mockTools.js.map +1 -0
  492. package/src/tools/BashExecutor.ts +281 -0
  493. package/src/tools/BashProgrammaticToolCalling.ts +397 -0
  494. package/src/tools/BrowserTools.js.map +1 -0
  495. package/src/tools/Calculator.js.map +1 -0
  496. package/src/tools/Calculator.test.js.map +1 -0
  497. package/src/tools/CodeExecutor.js.map +1 -0
  498. package/src/tools/CodeExecutor.ts +62 -54
  499. package/src/tools/ProgrammaticToolCalling.js.map +1 -0
  500. package/src/tools/ProgrammaticToolCalling.ts +29 -14
  501. package/src/tools/ReadFile.ts +39 -0
  502. package/src/tools/SkillTool.ts +46 -0
  503. package/src/tools/StreamingToolCallBuffer.js.map +1 -0
  504. package/src/tools/SubagentTool.ts +100 -0
  505. package/src/tools/ToolNode.js.map +1 -0
  506. package/src/tools/ToolNode.ts +548 -26
  507. package/src/tools/ToolSearch.js.map +1 -0
  508. package/src/tools/__tests__/BashExecutor.test.ts +49 -0
  509. package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
  510. package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
  511. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
  512. package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
  513. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
  514. package/src/tools/__tests__/ReadFile.test.ts +44 -0
  515. package/src/tools/__tests__/SkillTool.test.ts +442 -0
  516. package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +1 -0
  517. package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
  518. package/src/tools/__tests__/SubagentTool.test.ts +149 -0
  519. package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
  520. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
  521. package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
  522. package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
  523. package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
  524. package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
  525. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
  526. package/src/tools/__tests__/handlers.test.js.map +1 -0
  527. package/src/tools/__tests__/skillCatalog.test.ts +161 -0
  528. package/src/tools/__tests__/subagentHooks.test.ts +210 -0
  529. package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
  530. package/src/tools/__tests__/truncation-recovery.integration.test.js.map +1 -0
  531. package/src/tools/handlers.js.map +1 -0
  532. package/src/tools/schema.js.map +1 -0
  533. package/src/tools/search/anthropic.js.map +1 -0
  534. package/src/tools/search/content.js.map +1 -0
  535. package/src/tools/search/content.test.js.map +1 -0
  536. package/src/tools/search/firecrawl.js.map +1 -0
  537. package/src/tools/search/format.js.map +1 -0
  538. package/src/tools/search/highlights.js.map +1 -0
  539. package/src/tools/search/index.js.map +1 -0
  540. package/src/tools/search/jina-reranker.test.js.map +1 -0
  541. package/src/tools/search/rerankers.js.map +1 -0
  542. package/src/tools/search/schema.js.map +1 -0
  543. package/src/tools/search/search.js.map +1 -0
  544. package/src/tools/search/search.ts +12 -2
  545. package/src/tools/search/serper-scraper.js.map +1 -0
  546. package/src/tools/search/tavily-scraper.ts +235 -0
  547. package/src/tools/search/tavily-search.ts +424 -0
  548. package/src/tools/search/tavily.test.ts +965 -0
  549. package/src/tools/search/test.js.map +1 -0
  550. package/src/tools/search/tool.js.map +1 -0
  551. package/src/tools/search/tool.ts +36 -2
  552. package/src/tools/search/types.js.map +1 -0
  553. package/src/tools/search/types.ts +133 -8
  554. package/src/tools/search/utils.js.map +1 -0
  555. package/src/tools/search/utils.ts +13 -5
  556. package/src/tools/skillCatalog.ts +126 -0
  557. package/src/tools/subagent/SubagentExecutor.ts +676 -0
  558. package/src/tools/subagent/index.ts +13 -0
  559. package/src/tools/subagent/types.test.ts +70 -0
  560. package/src/tools/subagent/types.ts +115 -0
  561. package/src/tools/toolOutputReferences.ts +825 -0
  562. package/src/types/agent-cache.ts +73 -0
  563. package/src/types/graph.js.map +1 -0
  564. package/src/types/graph.test.js.map +1 -0
  565. package/src/types/graph.ts +171 -20
  566. package/src/types/index.js.map +1 -0
  567. package/src/types/index.ts +3 -0
  568. package/src/types/llm.js.map +1 -0
  569. package/src/types/messages.js.map +1 -0
  570. package/src/types/messages.ts +27 -0
  571. package/src/types/run.js.map +1 -0
  572. package/src/types/run.ts +22 -0
  573. package/src/types/skill.ts +11 -0
  574. package/src/types/stream.js.map +1 -0
  575. package/src/types/tools.js.map +1 -0
  576. package/src/types/tools.ts +118 -0
  577. package/src/utils/__tests__/truncation.test.ts +66 -0
  578. package/src/utils/contextAnalytics.js.map +1 -0
  579. package/src/utils/contextAnalytics.test.js.map +1 -0
  580. package/src/utils/events.js.map +1 -0
  581. package/src/utils/graph.js.map +1 -0
  582. package/src/utils/handlers.js.map +1 -0
  583. package/src/utils/index.js.map +1 -0
  584. package/src/utils/index.ts +1 -3
  585. package/src/utils/llm.js.map +1 -0
  586. package/src/utils/llmConfig.js.map +1 -0
  587. package/src/utils/logging.js.map +1 -0
  588. package/src/utils/misc.js.map +1 -0
  589. package/src/utils/run.js.map +1 -0
  590. package/src/utils/schema.js.map +1 -0
  591. package/src/utils/title.js.map +1 -0
  592. package/src/utils/tokens.js.map +1 -0
  593. package/src/utils/toonFormat.js.map +1 -0
  594. package/src/utils/truncation.ts +154 -0
  595. package/dist/cjs/common/spawnPath.cjs +0 -104
  596. package/dist/cjs/common/spawnPath.cjs.map +0 -1
  597. package/dist/cjs/content/ArtifactStore.cjs +0 -579
  598. package/dist/cjs/content/ArtifactStore.cjs.map +0 -1
  599. package/dist/cjs/content/ContentStore.cjs +0 -638
  600. package/dist/cjs/content/ContentStore.cjs.map +0 -1
  601. package/dist/cjs/content/contentAnalyzer.cjs +0 -91
  602. package/dist/cjs/content/contentAnalyzer.cjs.map +0 -1
  603. package/dist/cjs/content/index.cjs +0 -20
  604. package/dist/cjs/content/index.cjs.map +0 -1
  605. package/dist/cjs/content/mcpAutoCache.cjs +0 -115
  606. package/dist/cjs/content/mcpAutoCache.cjs.map +0 -1
  607. package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
  608. package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
  609. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
  610. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
  611. package/dist/cjs/providers/a2a/client.cjs +0 -92
  612. package/dist/cjs/providers/a2a/client.cjs.map +0 -1
  613. package/dist/cjs/providers/a2a/config.cjs +0 -38
  614. package/dist/cjs/providers/a2a/config.cjs.map +0 -1
  615. package/dist/cjs/providers/capabilityNaming.cjs +0 -43
  616. package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
  617. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
  618. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
  619. package/dist/cjs/providers/mcp/config.cjs +0 -42
  620. package/dist/cjs/providers/mcp/config.cjs.map +0 -1
  621. package/dist/cjs/providers/mcp/transport.cjs +0 -65
  622. package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
  623. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
  624. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
  625. package/dist/cjs/providers/types.cjs +0 -51
  626. package/dist/cjs/providers/types.cjs.map +0 -1
  627. package/dist/cjs/tools/artifacts/schema.cjs +0 -86
  628. package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
  629. package/dist/cjs/tools/artifacts/tool.cjs +0 -219
  630. package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
  631. package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
  632. package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
  633. package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
  634. package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
  635. package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
  636. package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
  637. package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
  638. package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
  639. package/dist/cjs/tools/proxyTool.cjs +0 -102
  640. package/dist/cjs/tools/proxyTool.cjs.map +0 -1
  641. package/dist/cjs/utils/childAgentContext.cjs +0 -242
  642. package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
  643. package/dist/cjs/utils/credentials.cjs +0 -142
  644. package/dist/cjs/utils/credentials.cjs.map +0 -1
  645. package/dist/cjs/utils/httpClient.cjs +0 -74
  646. package/dist/cjs/utils/httpClient.cjs.map +0 -1
  647. package/dist/cjs/utils/toolManifest.cjs +0 -100
  648. package/dist/cjs/utils/toolManifest.cjs.map +0 -1
  649. package/dist/esm/common/spawnPath.mjs +0 -95
  650. package/dist/esm/common/spawnPath.mjs.map +0 -1
  651. package/dist/esm/content/ArtifactStore.mjs +0 -576
  652. package/dist/esm/content/ArtifactStore.mjs.map +0 -1
  653. package/dist/esm/content/ContentStore.mjs +0 -635
  654. package/dist/esm/content/ContentStore.mjs.map +0 -1
  655. package/dist/esm/content/contentAnalyzer.mjs +0 -87
  656. package/dist/esm/content/contentAnalyzer.mjs.map +0 -1
  657. package/dist/esm/content/index.mjs +0 -5
  658. package/dist/esm/content/mcpAutoCache.mjs +0 -111
  659. package/dist/esm/content/mcpAutoCache.mjs.map +0 -1
  660. package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
  661. package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
  662. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
  663. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
  664. package/dist/esm/providers/a2a/client.mjs +0 -88
  665. package/dist/esm/providers/a2a/client.mjs.map +0 -1
  666. package/dist/esm/providers/a2a/config.mjs +0 -35
  667. package/dist/esm/providers/a2a/config.mjs.map +0 -1
  668. package/dist/esm/providers/capabilityNaming.mjs +0 -39
  669. package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
  670. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
  671. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
  672. package/dist/esm/providers/mcp/config.mjs +0 -39
  673. package/dist/esm/providers/mcp/config.mjs.map +0 -1
  674. package/dist/esm/providers/mcp/transport.mjs +0 -63
  675. package/dist/esm/providers/mcp/transport.mjs.map +0 -1
  676. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
  677. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
  678. package/dist/esm/providers/types.mjs +0 -51
  679. package/dist/esm/providers/types.mjs.map +0 -1
  680. package/dist/esm/tools/artifacts/schema.mjs +0 -79
  681. package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
  682. package/dist/esm/tools/artifacts/tool.mjs +0 -213
  683. package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
  684. package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
  685. package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
  686. package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
  687. package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
  688. package/dist/esm/tools/fileSearch/schema.mjs +0 -15
  689. package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
  690. package/dist/esm/tools/fileSearch/tool.mjs +0 -152
  691. package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
  692. package/dist/esm/tools/proxyTool.mjs +0 -100
  693. package/dist/esm/tools/proxyTool.mjs.map +0 -1
  694. package/dist/esm/utils/childAgentContext.mjs +0 -237
  695. package/dist/esm/utils/childAgentContext.mjs.map +0 -1
  696. package/dist/esm/utils/credentials.mjs +0 -135
  697. package/dist/esm/utils/credentials.mjs.map +0 -1
  698. package/dist/esm/utils/httpClient.mjs +0 -70
  699. package/dist/esm/utils/httpClient.mjs.map +0 -1
  700. package/dist/esm/utils/toolManifest.mjs +0 -96
  701. package/dist/esm/utils/toolManifest.mjs.map +0 -1
  702. package/dist/types/common/spawnPath.d.ts +0 -59
  703. package/dist/types/content/ArtifactStore.d.ts +0 -223
  704. package/dist/types/content/ContentStore.d.ts +0 -140
  705. package/dist/types/content/contentAnalyzer.d.ts +0 -38
  706. package/dist/types/content/index.d.ts +0 -24
  707. package/dist/types/content/mcpAutoCache.d.ts +0 -89
  708. package/dist/types/content/types.d.ts +0 -75
  709. package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
  710. package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
  711. package/dist/types/providers/a2a/client.d.ts +0 -47
  712. package/dist/types/providers/a2a/config.d.ts +0 -18
  713. package/dist/types/providers/a2a/index.d.ts +0 -6
  714. package/dist/types/providers/a2a/types.d.ts +0 -173
  715. package/dist/types/providers/capabilityNaming.d.ts +0 -25
  716. package/dist/types/providers/index.d.ts +0 -12
  717. package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
  718. package/dist/types/providers/mcp/config.d.ts +0 -20
  719. package/dist/types/providers/mcp/index.d.ts +0 -5
  720. package/dist/types/providers/mcp/transport.d.ts +0 -18
  721. package/dist/types/providers/mcp/types.d.ts +0 -112
  722. package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
  723. package/dist/types/providers/tools-server/index.d.ts +0 -1
  724. package/dist/types/providers/types.d.ts +0 -184
  725. package/dist/types/tools/artifacts/index.d.ts +0 -3
  726. package/dist/types/tools/artifacts/schema.d.ts +0 -63
  727. package/dist/types/tools/artifacts/tool.d.ts +0 -16
  728. package/dist/types/tools/artifacts/types.d.ts +0 -127
  729. package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
  730. package/dist/types/tools/fileSearch/index.d.ts +0 -5
  731. package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
  732. package/dist/types/tools/fileSearch/schema.d.ts +0 -13
  733. package/dist/types/tools/fileSearch/tool.d.ts +0 -18
  734. package/dist/types/tools/fileSearch/types.d.ts +0 -139
  735. package/dist/types/tools/proxyTool.d.ts +0 -62
  736. package/dist/types/utils/childAgentContext.d.ts +0 -99
  737. package/dist/types/utils/credentials.d.ts +0 -77
  738. package/dist/types/utils/httpClient.d.ts +0 -46
  739. package/dist/types/utils/toolManifest.d.ts +0 -49
  740. package/src/common/__tests__/spawnPath.test.ts +0 -110
  741. package/src/common/spawnPath.ts +0 -101
  742. package/src/content/ArtifactStore.ts +0 -782
  743. package/src/content/ContentStore.ts +0 -753
  744. package/src/content/contentAnalyzer.ts +0 -105
  745. package/src/content/index.ts +0 -51
  746. package/src/content/mcpAutoCache.ts +0 -185
  747. package/src/content/types.ts +0 -82
  748. package/src/graphs/HandoffRegistry.ts +0 -199
  749. package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
  750. package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
  751. package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
  752. package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
  753. package/src/graphs/handoffValidation.test.ts +0 -353
  754. package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
  755. package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -271
  756. package/src/providers/__tests__/types.test.ts +0 -64
  757. package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
  758. package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
  759. package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
  760. package/src/providers/a2a/client.ts +0 -115
  761. package/src/providers/a2a/config.ts +0 -40
  762. package/src/providers/a2a/index.ts +0 -29
  763. package/src/providers/a2a/types.ts +0 -191
  764. package/src/providers/capabilityNaming.ts +0 -42
  765. package/src/providers/index.ts +0 -68
  766. package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
  767. package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
  768. package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
  769. package/src/providers/mcp/config.ts +0 -45
  770. package/src/providers/mcp/index.ts +0 -21
  771. package/src/providers/mcp/transport.ts +0 -76
  772. package/src/providers/mcp/types.ts +0 -139
  773. package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -249
  774. package/src/providers/tools-server/index.ts +0 -1
  775. package/src/providers/types.ts +0 -204
  776. package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
  777. package/src/scripts/test-handoff-preamble.ts +0 -278
  778. package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
  779. package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
  780. package/src/tools/artifacts/index.ts +0 -33
  781. package/src/tools/artifacts/schema.ts +0 -99
  782. package/src/tools/artifacts/tool.ts +0 -289
  783. package/src/tools/artifacts/types.ts +0 -162
  784. package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
  785. package/src/tools/fileSearch/formatter.ts +0 -129
  786. package/src/tools/fileSearch/index.ts +0 -23
  787. package/src/tools/fileSearch/ragClient.ts +0 -137
  788. package/src/tools/fileSearch/schema.ts +0 -19
  789. package/src/tools/fileSearch/tool.ts +0 -207
  790. package/src/tools/fileSearch/types.ts +0 -149
  791. package/src/tools/proxyTool.ts +0 -166
  792. package/src/utils/__tests__/childAgentContext.test.ts +0 -217
  793. package/src/utils/__tests__/credentials.test.ts +0 -130
  794. package/src/utils/__tests__/httpClient.test.ts +0 -75
  795. package/src/utils/__tests__/toolManifest.test.ts +0 -116
  796. package/src/utils/childAgentContext.ts +0 -259
  797. package/src/utils/credentials.ts +0 -157
  798. package/src/utils/httpClient.ts +0 -92
  799. package/src/utils/toolManifest.ts +0 -109
  800. /package/dist/esm/{content → langchain}/index.mjs.map +0 -0
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  AIMessage,
3
3
  BaseMessage,
4
+ ToolMessage,
4
5
  UsageMetadata,
5
6
  } from '@langchain/core/messages';
6
7
  import type {
@@ -9,7 +10,14 @@ import type {
9
10
  ReasoningContentText,
10
11
  } from '@/types/stream';
11
12
  import type { TokenCounter } from '@/types/run';
12
- import { ContentTypes, Providers } from '@/common';
13
+ import { ContentTypes, Constants, Providers } from '@/common';
14
+ import type { ContextPruningConfig } from '@/types/graph';
15
+ import {
16
+ calculateMaxToolResultChars,
17
+ truncateToolResultContent,
18
+ truncateToolInput,
19
+ } from '@/utils/truncation';
20
+ import { applyContextPruning } from './contextPruning';
13
21
 
14
22
  export type PruneMessagesFactoryParams = {
15
23
  provider?: Providers;
@@ -18,6 +26,15 @@ export type PruneMessagesFactoryParams = {
18
26
  tokenCounter: TokenCounter;
19
27
  indexTokenCountMap: Record<string, number | undefined>;
20
28
  thinkingEnabled?: boolean;
29
+ /**
30
+ * Optional position-based content degradation config. When `enabled: true`,
31
+ * tool result messages outside the protected zone (system + last N assistant
32
+ * turns + image content) are soft-trimmed (head + tail) once their
33
+ * position-age exceeds `softTrimRatio`, then hard-cleared with a placeholder
34
+ * once age exceeds `hardClearRatio`. Defaults disabled to preserve existing
35
+ * behavior — opt in per deployment.
36
+ */
37
+ contextPruningConfig?: ContextPruningConfig;
21
38
  };
22
39
  export type PruneMessagesParams = {
23
40
  messages: BaseMessage[];
@@ -142,6 +159,7 @@ export function getMessagesWithinTokenLimit({
142
159
  tokenCounter,
143
160
  thinkingStartIndex: _thinkingStartIndex = -1,
144
161
  reasoningType = ContentTypes.THINKING,
162
+ instructionTokens: _instructionTokens = 0,
145
163
  }: {
146
164
  messages: BaseMessage[];
147
165
  maxContextTokens: number;
@@ -151,6 +169,13 @@ export function getMessagesWithinTokenLimit({
151
169
  tokenCounter: TokenCounter;
152
170
  thinkingStartIndex?: number;
153
171
  reasoningType?: ContentTypes.THINKING | ContentTypes.REASONING_CONTENT;
172
+ /**
173
+ * Token overhead for instructions (system message + tool schemas + summary)
174
+ * that are NOT included in `messages`. When messages[0] is already a
175
+ * SystemMessage the budget is deducted from its indexTokenCountMap entry
176
+ * as before; otherwise this value is subtracted from the available budget.
177
+ */
178
+ instructionTokens?: number;
154
179
  }): PruningResult {
155
180
  // Every reply is primed with <|start|>assistant<|message|>, so we
156
181
  // start with 3 tokens for the label after all messages have been counted.
@@ -158,7 +183,7 @@ export function getMessagesWithinTokenLimit({
158
183
  const instructions =
159
184
  _messages[0]?.getType() === 'system' ? _messages[0] : undefined;
160
185
  const instructionsTokenCount =
161
- instructions != null ? (indexTokenCountMap[0] ?? 0) : 0;
186
+ instructions != null ? (indexTokenCountMap[0] ?? 0) : _instructionTokens;
162
187
  const initialContextTokens = maxContextTokens - instructionsTokenCount;
163
188
  let remainingContextTokens = initialContextTokens;
164
189
  let startType = _startType;
@@ -432,6 +457,559 @@ export function checkValidNumber(value: unknown): value is number {
432
457
  return typeof value === 'number' && !isNaN(value) && value > 0;
433
458
  }
434
459
 
460
+ /**
461
+ * Returns the set of tool_call ids referenced by an AIMessage — both via the
462
+ * canonical `tool_calls` array and via inline `tool_use` / `tool_call` content
463
+ * blocks (Anthropic-style content arrays).
464
+ */
465
+ function getToolCallIds(message: BaseMessage): Set<string> {
466
+ if (message.getType() !== 'ai') {
467
+ return new Set<string>();
468
+ }
469
+
470
+ const ids = new Set<string>();
471
+ const aiMessage = message as AIMessage;
472
+ for (const toolCall of aiMessage.tool_calls ?? []) {
473
+ if (typeof toolCall.id === 'string' && toolCall.id.length > 0) {
474
+ ids.add(toolCall.id);
475
+ }
476
+ }
477
+
478
+ if (Array.isArray(aiMessage.content)) {
479
+ for (const part of aiMessage.content) {
480
+ if (typeof part !== 'object') {
481
+ continue;
482
+ }
483
+ const record = part as { type?: unknown; id?: unknown };
484
+ if (
485
+ (record.type === 'tool_use' || record.type === 'tool_call') &&
486
+ typeof record.id === 'string' &&
487
+ record.id.length > 0
488
+ ) {
489
+ ids.add(record.id);
490
+ }
491
+ }
492
+ }
493
+
494
+ return ids;
495
+ }
496
+
497
+ function getToolResultId(message: BaseMessage): string | null {
498
+ if (message.getType() !== 'tool') {
499
+ return null;
500
+ }
501
+ const toolMessage = message as ToolMessage & {
502
+ tool_call_id?: unknown;
503
+ toolCallId?: unknown;
504
+ };
505
+ if (
506
+ typeof toolMessage.tool_call_id === 'string' &&
507
+ toolMessage.tool_call_id.length > 0
508
+ ) {
509
+ return toolMessage.tool_call_id;
510
+ }
511
+ if (
512
+ typeof toolMessage.toolCallId === 'string' &&
513
+ toolMessage.toolCallId.length > 0
514
+ ) {
515
+ return toolMessage.toolCallId;
516
+ }
517
+ return null;
518
+ }
519
+
520
+ function resolveTokenCountForMessage({
521
+ message,
522
+ messageIndexMap,
523
+ tokenCounter,
524
+ indexTokenCountMap,
525
+ }: {
526
+ message: BaseMessage;
527
+ messageIndexMap: Map<BaseMessage, number>;
528
+ tokenCounter: TokenCounter;
529
+ indexTokenCountMap: Record<string, number | undefined>;
530
+ }): number {
531
+ const originalIndex = messageIndexMap.get(message) ?? -1;
532
+ if (originalIndex > -1 && indexTokenCountMap[originalIndex] != null) {
533
+ return indexTokenCountMap[originalIndex] as number;
534
+ }
535
+ return tokenCounter(message);
536
+ }
537
+
538
+ /**
539
+ * Repairs orphan tool messages in a pruned context. Drops `ToolMessage`s whose
540
+ * matching `AIMessage` was pruned, and strips orphan `tool_use` content blocks
541
+ * (and `tool_calls` entries) from `AIMessage`s whose corresponding tool results
542
+ * are missing. Without this, Anthropic / Bedrock / OpenAI reject the request
543
+ * with a structural validation 400.
544
+ *
545
+ * Intended to run on the post-prune `context` array (not the pre-prune
546
+ * `allMessages`). The dropped messages are returned so the caller can append
547
+ * them to `messagesToRefine` for summarization fidelity.
548
+ */
549
+ export function repairOrphanedToolMessages({
550
+ context,
551
+ allMessages,
552
+ tokenCounter,
553
+ indexTokenCountMap,
554
+ }: {
555
+ context: BaseMessage[];
556
+ allMessages: BaseMessage[];
557
+ tokenCounter: TokenCounter;
558
+ indexTokenCountMap: Record<string, number | undefined>;
559
+ }): {
560
+ context: BaseMessage[];
561
+ reclaimedTokens: number;
562
+ droppedOrphanCount: number;
563
+ /** Messages removed from context during orphan repair. These should be
564
+ * appended to `messagesToRefine` so that summarization can still see them
565
+ * (e.g. a ToolMessage whose parent AI was pruned). */
566
+ droppedMessages: BaseMessage[];
567
+ } {
568
+ const messageIndexMap = new Map<BaseMessage, number>();
569
+ for (let i = 0; i < allMessages.length; i++) {
570
+ messageIndexMap.set(allMessages[i], i);
571
+ }
572
+
573
+ const validToolCallIds = new Set<string>();
574
+ const presentToolResultIds = new Set<string>();
575
+ for (const message of context) {
576
+ for (const id of getToolCallIds(message)) {
577
+ validToolCallIds.add(id);
578
+ }
579
+ const resultId = getToolResultId(message);
580
+ if (resultId != null) {
581
+ presentToolResultIds.add(resultId);
582
+ }
583
+ }
584
+
585
+ let reclaimedTokens = 0;
586
+ let droppedOrphanCount = 0;
587
+ const repairedContext: BaseMessage[] = [];
588
+ const droppedMessages: BaseMessage[] = [];
589
+
590
+ for (const message of context) {
591
+ if (message.getType() === 'tool') {
592
+ const toolResultId = getToolResultId(message);
593
+ if (toolResultId == null || !validToolCallIds.has(toolResultId)) {
594
+ droppedOrphanCount += 1;
595
+ reclaimedTokens += resolveTokenCountForMessage({
596
+ message,
597
+ tokenCounter,
598
+ messageIndexMap,
599
+ indexTokenCountMap,
600
+ });
601
+ droppedMessages.push(message);
602
+ continue;
603
+ }
604
+ repairedContext.push(message);
605
+ continue;
606
+ }
607
+
608
+ if (message.getType() === 'ai' && message instanceof AIMessage) {
609
+ const toolCallIds = getToolCallIds(message);
610
+ if (toolCallIds.size > 0) {
611
+ let hasOrphanToolCalls = false;
612
+ for (const id of toolCallIds) {
613
+ if (!presentToolResultIds.has(id)) {
614
+ hasOrphanToolCalls = true;
615
+ break;
616
+ }
617
+ }
618
+ if (hasOrphanToolCalls) {
619
+ const originalTokens = resolveTokenCountForMessage({
620
+ message,
621
+ messageIndexMap,
622
+ tokenCounter,
623
+ indexTokenCountMap,
624
+ });
625
+ const stripped = stripOrphanToolUseBlocks(
626
+ message,
627
+ presentToolResultIds
628
+ );
629
+ if (stripped != null) {
630
+ const strippedTokens = tokenCounter(stripped);
631
+ reclaimedTokens += originalTokens - strippedTokens;
632
+ repairedContext.push(stripped);
633
+ } else {
634
+ droppedOrphanCount += 1;
635
+ reclaimedTokens += originalTokens;
636
+ droppedMessages.push(message);
637
+ }
638
+ continue;
639
+ }
640
+ }
641
+ }
642
+
643
+ repairedContext.push(message);
644
+ }
645
+
646
+ return {
647
+ context: repairedContext,
648
+ reclaimedTokens,
649
+ droppedOrphanCount,
650
+ droppedMessages,
651
+ };
652
+ }
653
+
654
+ /**
655
+ * Strips tool_use content blocks and tool_calls entries from an AI message
656
+ * when their corresponding ToolMessages are not in the context.
657
+ * Returns null if the message has no content left after stripping.
658
+ */
659
+ function stripOrphanToolUseBlocks(
660
+ message: AIMessage,
661
+ presentToolResultIds: Set<string>
662
+ ): AIMessage | null {
663
+ const keptToolCalls = (message.tool_calls ?? []).filter(
664
+ (tc) => typeof tc.id === 'string' && presentToolResultIds.has(tc.id)
665
+ );
666
+
667
+ let keptContent: MessageContentComplex[] | string;
668
+ if (Array.isArray(message.content)) {
669
+ const filtered = (message.content as MessageContentComplex[]).filter(
670
+ (block) => {
671
+ if (typeof block !== 'object') {
672
+ return true;
673
+ }
674
+ const record = block as { type?: unknown; id?: unknown };
675
+ if (
676
+ (record.type === 'tool_use' || record.type === 'tool_call') &&
677
+ typeof record.id === 'string'
678
+ ) {
679
+ return presentToolResultIds.has(record.id);
680
+ }
681
+ return true;
682
+ }
683
+ );
684
+
685
+ if (filtered.length === 0) {
686
+ return null;
687
+ }
688
+ keptContent = filtered;
689
+ } else {
690
+ keptContent = message.content;
691
+ }
692
+
693
+ return new AIMessage({
694
+ ...message,
695
+ content: keptContent,
696
+ tool_calls: keptToolCalls.length > 0 ? keptToolCalls : undefined,
697
+ });
698
+ }
699
+
700
+ /**
701
+ * Lightweight structural cleanup: strips orphan tool_use blocks from AI messages
702
+ * and drops orphan ToolMessages whose AI counterpart is missing.
703
+ *
704
+ * Unlike `repairOrphanedToolMessages`, this does NOT track tokens — it is
705
+ * intended as a final safety net right before model invocation to prevent
706
+ * Anthropic / Bedrock structural validation errors.
707
+ *
708
+ * Uses duck-typing instead of `getType()` because messages at this stage
709
+ * may be plain objects (from LangGraph state serialization) rather than
710
+ * proper BaseMessage class instances.
711
+ *
712
+ * Includes a fast-path: if every tool_call has a matching tool_result and
713
+ * vice-versa, the original array is returned immediately with zero allocation.
714
+ */
715
+ export function sanitizeOrphanToolBlocks(
716
+ messages: BaseMessage[]
717
+ ): BaseMessage[] {
718
+ const allToolCallIds = new Set<string>();
719
+ const allToolResultIds = new Set<string>();
720
+
721
+ for (const msg of messages) {
722
+ const msgAny = msg as unknown as Record<string, unknown>;
723
+ const toolCalls = msgAny.tool_calls as Array<{ id?: string }> | undefined;
724
+ if (Array.isArray(toolCalls)) {
725
+ for (const tc of toolCalls) {
726
+ if (
727
+ typeof tc.id === 'string' &&
728
+ tc.id.length > 0 &&
729
+ !tc.id.startsWith(Constants.ANTHROPIC_SERVER_TOOL_PREFIX)
730
+ ) {
731
+ allToolCallIds.add(tc.id);
732
+ }
733
+ }
734
+ }
735
+ if (Array.isArray(msgAny.content)) {
736
+ for (const block of msgAny.content as Array<Record<string, unknown>>) {
737
+ if (
738
+ typeof block === 'object' &&
739
+ (block.type === 'tool_use' || block.type === 'tool_call') &&
740
+ typeof block.id === 'string' &&
741
+ !block.id.startsWith(Constants.ANTHROPIC_SERVER_TOOL_PREFIX)
742
+ ) {
743
+ allToolCallIds.add(block.id);
744
+ }
745
+ }
746
+ }
747
+ const toolCallId = msgAny.tool_call_id as string | undefined;
748
+ if (typeof toolCallId === 'string' && toolCallId.length > 0) {
749
+ allToolResultIds.add(toolCallId);
750
+ }
751
+ }
752
+
753
+ let hasOrphans = false;
754
+ for (const id of allToolCallIds) {
755
+ if (!allToolResultIds.has(id)) {
756
+ hasOrphans = true;
757
+ break;
758
+ }
759
+ }
760
+ if (!hasOrphans) {
761
+ for (const id of allToolResultIds) {
762
+ if (!allToolCallIds.has(id)) {
763
+ hasOrphans = true;
764
+ break;
765
+ }
766
+ }
767
+ }
768
+ if (!hasOrphans) {
769
+ return messages;
770
+ }
771
+
772
+ const result: BaseMessage[] = [];
773
+ const strippedAiIndices = new Set<number>();
774
+
775
+ for (const msg of messages) {
776
+ const msgAny = msg as unknown as Record<string, unknown>;
777
+ const msgType =
778
+ typeof (msg as { getType?: unknown }).getType === 'function'
779
+ ? msg.getType()
780
+ : ((msgAny.role as string | undefined) ??
781
+ (msgAny._type as string | undefined));
782
+
783
+ const toolCallId = msgAny.tool_call_id as string | undefined;
784
+ if (
785
+ (msgType === 'tool' || msg instanceof ToolMessage) &&
786
+ typeof toolCallId === 'string' &&
787
+ !allToolCallIds.has(toolCallId)
788
+ ) {
789
+ continue;
790
+ }
791
+
792
+ const toolCalls = msgAny.tool_calls as Array<{ id?: string }> | undefined;
793
+ if (
794
+ (msgType === 'ai' ||
795
+ msgType === 'assistant' ||
796
+ msg instanceof AIMessage) &&
797
+ Array.isArray(toolCalls) &&
798
+ toolCalls.length > 0
799
+ ) {
800
+ const hasOrphanCalls = toolCalls.some(
801
+ (tc) => typeof tc.id === 'string' && !allToolResultIds.has(tc.id)
802
+ );
803
+ if (hasOrphanCalls) {
804
+ if (msg instanceof AIMessage) {
805
+ const stripped = stripOrphanToolUseBlocks(msg, allToolResultIds);
806
+ if (stripped != null) {
807
+ strippedAiIndices.add(result.length);
808
+ result.push(stripped);
809
+ }
810
+ continue;
811
+ }
812
+ const keptToolCalls = toolCalls.filter(
813
+ (tc) => typeof tc.id === 'string' && allToolResultIds.has(tc.id)
814
+ );
815
+ const keptContent = Array.isArray(msgAny.content)
816
+ ? (msgAny.content as Array<Record<string, unknown>>).filter(
817
+ (block) => {
818
+ if (typeof block !== 'object') return true;
819
+ if (
820
+ (block.type === 'tool_use' || block.type === 'tool_call') &&
821
+ typeof block.id === 'string'
822
+ ) {
823
+ return allToolResultIds.has(block.id);
824
+ }
825
+ return true;
826
+ }
827
+ )
828
+ : msgAny.content;
829
+ if (
830
+ keptToolCalls.length === 0 &&
831
+ Array.isArray(keptContent) &&
832
+ keptContent.length === 0
833
+ ) {
834
+ continue;
835
+ }
836
+ strippedAiIndices.add(result.length);
837
+ const patched = Object.create(
838
+ Object.getPrototypeOf(msg),
839
+ Object.getOwnPropertyDescriptors(msg)
840
+ );
841
+ patched.tool_calls = keptToolCalls.length > 0 ? keptToolCalls : [];
842
+ patched.content = keptContent;
843
+ result.push(patched as BaseMessage);
844
+ continue;
845
+ }
846
+ }
847
+
848
+ result.push(msg);
849
+ }
850
+
851
+ // Bedrock/Anthropic require the conversation to end with a user message;
852
+ // a stripped AI message (tool_use removed) represents a dead-end exchange.
853
+ while (result.length > 0 && strippedAiIndices.has(result.length - 1)) {
854
+ result.pop();
855
+ }
856
+
857
+ return result;
858
+ }
859
+
860
+ /**
861
+ * Pre-flight truncation: truncates oversized tool result string content before
862
+ * the budget walker runs. Older results get smaller budgets (recency factor),
863
+ * with a 200-char floor so even ancient entries keep diagnostic signal. Returns
864
+ * the number of ToolMessages truncated.
865
+ */
866
+ export function preFlightTruncateToolResults(params: {
867
+ messages: BaseMessage[];
868
+ maxContextTokens: number;
869
+ indexTokenCountMap: Record<string, number | undefined>;
870
+ tokenCounter: TokenCounter;
871
+ }): number {
872
+ const { messages, maxContextTokens, indexTokenCountMap, tokenCounter } =
873
+ params;
874
+ const baseMaxChars = calculateMaxToolResultChars(maxContextTokens);
875
+ let truncatedCount = 0;
876
+
877
+ const toolIndices: number[] = [];
878
+ for (let i = 0; i < messages.length; i++) {
879
+ if (messages[i].getType() === 'tool') {
880
+ toolIndices.push(i);
881
+ }
882
+ }
883
+
884
+ for (let t = 0; t < toolIndices.length; t++) {
885
+ const i = toolIndices[t];
886
+ const message = messages[i];
887
+ const content = message.content;
888
+ if (typeof content !== 'string') {
889
+ continue;
890
+ }
891
+
892
+ const position = toolIndices.length > 1 ? t / (toolIndices.length - 1) : 1;
893
+ const recencyFactor = 0.2 + 0.8 * position;
894
+ const maxChars = Math.max(200, Math.floor(baseMaxChars * recencyFactor));
895
+
896
+ if (content.length <= maxChars) {
897
+ continue;
898
+ }
899
+
900
+ const truncated = truncateToolResultContent(content, maxChars);
901
+ const cloned = new ToolMessage({
902
+ content: truncated,
903
+ tool_call_id: (message as ToolMessage).tool_call_id,
904
+ name: message.name,
905
+ id: message.id,
906
+ additional_kwargs: message.additional_kwargs,
907
+ response_metadata: message.response_metadata,
908
+ });
909
+ messages[i] = cloned;
910
+ indexTokenCountMap[i] = tokenCounter(cloned);
911
+ truncatedCount++;
912
+ }
913
+
914
+ return truncatedCount;
915
+ }
916
+
917
+ /**
918
+ * Pre-flight truncation: truncates oversized `tool_use` input fields in AI messages.
919
+ *
920
+ * Tool call inputs (arguments) can be very large — e.g., code evaluation payloads from
921
+ * MCP tools like chrome-devtools. Since these tool calls have already been executed,
922
+ * the model only needs a summary of what was called, not the full arguments. Truncating
923
+ * them before pruning can prevent entire messages from being dropped.
924
+ *
925
+ * Uses 15% of the context window (in estimated characters, ~4 chars/token) as the
926
+ * per-input cap, capped at 200K chars.
927
+ *
928
+ * @returns The number of AI messages that had tool_use inputs truncated.
929
+ */
930
+ export function preFlightTruncateToolCallInputs(params: {
931
+ messages: BaseMessage[];
932
+ maxContextTokens: number;
933
+ indexTokenCountMap: Record<string, number | undefined>;
934
+ tokenCounter: TokenCounter;
935
+ }): number {
936
+ const { messages, maxContextTokens, indexTokenCountMap, tokenCounter } =
937
+ params;
938
+ const maxInputChars = Math.min(
939
+ Math.floor(maxContextTokens * 0.15) * 4,
940
+ 200_000
941
+ );
942
+ let truncatedCount = 0;
943
+
944
+ for (let i = 0; i < messages.length; i++) {
945
+ const message = messages[i];
946
+ if (message.getType() !== 'ai') {
947
+ continue;
948
+ }
949
+ if (!Array.isArray(message.content)) {
950
+ continue;
951
+ }
952
+
953
+ const originalContent = message.content as MessageContentComplex[];
954
+ const state = { changed: false };
955
+ const newContent = originalContent.map((block) => {
956
+ if (typeof block !== 'object') {
957
+ return block;
958
+ }
959
+ const record = block as Record<string, unknown>;
960
+ if (record.type !== 'tool_use' && record.type !== 'tool_call') {
961
+ return block;
962
+ }
963
+
964
+ const input = record.input;
965
+ if (input == null) {
966
+ return block;
967
+ }
968
+ const serialized =
969
+ typeof input === 'string' ? input : JSON.stringify(input);
970
+ if (serialized.length <= maxInputChars) {
971
+ return block;
972
+ }
973
+
974
+ state.changed = true;
975
+ // Replaces original input with { _truncated, _originalChars } —
976
+ // safe because the tool call already executed in a prior turn.
977
+ return {
978
+ ...record,
979
+ input: truncateToolInput(serialized, maxInputChars),
980
+ };
981
+ });
982
+
983
+ if (!state.changed) {
984
+ continue;
985
+ }
986
+
987
+ const aiMsg = message as AIMessage;
988
+ const newToolCalls = (aiMsg.tool_calls ?? []).map((tc) => {
989
+ const serializedArgs = JSON.stringify(tc.args);
990
+ if (serializedArgs.length <= maxInputChars) {
991
+ return tc;
992
+ }
993
+ // Replaces original args with { _truncated, _originalChars } —
994
+ // safe because the tool call already executed in a prior turn.
995
+ return {
996
+ ...tc,
997
+ args: truncateToolInput(serializedArgs, maxInputChars),
998
+ };
999
+ });
1000
+
1001
+ messages[i] = new AIMessage({
1002
+ ...aiMsg,
1003
+ content: newContent,
1004
+ tool_calls: newToolCalls.length > 0 ? newToolCalls : undefined,
1005
+ });
1006
+ indexTokenCountMap[i] = tokenCounter(messages[i]);
1007
+ truncatedCount++;
1008
+ }
1009
+
1010
+ return truncatedCount;
1011
+ }
1012
+
435
1013
  type ThinkingBlocks = {
436
1014
  thinking_blocks?: Array<{
437
1015
  type: 'thinking';
@@ -449,10 +1027,18 @@ export function createPruneMessages(factoryParams: PruneMessagesFactoryParams) {
449
1027
  0
450
1028
  ) as number;
451
1029
  let runThinkingStartIndex = -1;
1030
+ /**
1031
+ * Original (pre-truncation) tool result content keyed by message index.
1032
+ * Lets the summarizer see full tool outputs even after pre-flight truncation
1033
+ * has shortened them in the live messages array. Cleared whenever the
1034
+ * factory is recreated (e.g. after a summarization checkpoint).
1035
+ */
1036
+ const originalToolContent = new Map<number, string>();
452
1037
  return function pruneMessages(params: PruneMessagesParams): {
453
1038
  context: BaseMessage[];
454
1039
  indexTokenCountMap: Record<string, number | undefined>;
455
1040
  messagesToRefine: BaseMessage[];
1041
+ originalToolContent?: Map<number, string>;
456
1042
  } {
457
1043
  if (
458
1044
  factoryParams.provider === Providers.OPENAI &&
@@ -586,6 +1172,51 @@ export function createPruneMessages(factoryParams: PruneMessagesFactoryParams) {
586
1172
  };
587
1173
  }
588
1174
 
1175
+ /*
1176
+ * Pre-flight truncation: chop oversized tool result content and oversized
1177
+ * tool_use input args BEFORE the budget walker runs. Older results get
1178
+ * smaller per-message budgets (recencyFactor) so they degrade first while
1179
+ * recent turns stay intact. Saves the originals in `originalToolContent`
1180
+ * keyed by message index so the summarizer can later reconstruct full
1181
+ * fidelity even after the live array was shortened.
1182
+ */
1183
+ for (let i = 0; i < params.messages.length; i++) {
1184
+ const m = params.messages[i];
1185
+ if (
1186
+ m.getType() === 'tool' &&
1187
+ typeof m.content === 'string' &&
1188
+ !originalToolContent.has(i)
1189
+ ) {
1190
+ originalToolContent.set(i, m.content);
1191
+ }
1192
+ }
1193
+ preFlightTruncateToolResults({
1194
+ messages: params.messages,
1195
+ maxContextTokens: factoryParams.maxTokens,
1196
+ indexTokenCountMap,
1197
+ tokenCounter: factoryParams.tokenCounter,
1198
+ });
1199
+ preFlightTruncateToolCallInputs({
1200
+ messages: params.messages,
1201
+ maxContextTokens: factoryParams.maxTokens,
1202
+ indexTokenCountMap,
1203
+ tokenCounter: factoryParams.tokenCounter,
1204
+ });
1205
+
1206
+ /*
1207
+ * Position-based content degradation: soft-trim then hard-clear older tool
1208
+ * results before the budget walker runs. Off by default — caller opts in
1209
+ * via `contextPruningConfig.enabled`.
1210
+ */
1211
+ if (factoryParams.contextPruningConfig?.enabled) {
1212
+ applyContextPruning({
1213
+ messages: params.messages,
1214
+ indexTokenCountMap,
1215
+ tokenCounter: factoryParams.tokenCounter,
1216
+ config: factoryParams.contextPruningConfig,
1217
+ });
1218
+ }
1219
+
589
1220
  const { context, thinkingStartIndex, messagesToRefine } =
590
1221
  getMessagesWithinTokenLimit({
591
1222
  maxContextTokens: factoryParams.maxTokens,
@@ -604,14 +1235,40 @@ export function createPruneMessages(factoryParams: PruneMessagesFactoryParams) {
604
1235
  : undefined,
605
1236
  });
606
1237
  runThinkingStartIndex = thinkingStartIndex ?? -1;
1238
+
1239
+ /*
1240
+ * Orphan repair pass — drops tool messages whose AIMessage was pruned and
1241
+ * strips orphan tool_use blocks from AIMessages whose tool results are
1242
+ * missing. Without this, the budget walker can split tool_use ↔ tool_result
1243
+ * pairs and the provider rejects the request with a structural 400.
1244
+ * Dropped messages flow into messagesToRefine for summarization.
1245
+ */
1246
+ const repaired = repairOrphanedToolMessages({
1247
+ context,
1248
+ allMessages: params.messages,
1249
+ tokenCounter: factoryParams.tokenCounter,
1250
+ indexTokenCountMap,
1251
+ });
1252
+ const finalContext = repaired.context;
1253
+ const finalMessagesToRefine =
1254
+ repaired.droppedMessages.length > 0
1255
+ ? [...messagesToRefine, ...repaired.droppedMessages]
1256
+ : messagesToRefine;
1257
+
607
1258
  /** The index is the first value of `context`, index relative to `params.messages` */
608
1259
  lastCutOffIndex = Math.max(
609
1260
  params.messages.length -
610
- (context.length - (context[0]?.getType() === 'system' ? 1 : 0)),
1261
+ (finalContext.length -
1262
+ (finalContext[0]?.getType() === 'system' ? 1 : 0)),
611
1263
  0
612
1264
  );
613
1265
 
614
- return { context, indexTokenCountMap, messagesToRefine };
1266
+ return {
1267
+ context: finalContext,
1268
+ indexTokenCountMap,
1269
+ messagesToRefine: finalMessagesToRefine,
1270
+ originalToolContent,
1271
+ };
615
1272
  };
616
1273
  }
617
1274