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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/README.md +62 -0
  2. package/dist/cjs/agents/AgentContext.cjs +274 -67
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/enum.cjs +44 -13
  5. package/dist/cjs/common/enum.cjs.map +1 -1
  6. package/dist/cjs/graphs/Graph.cjs +182 -5
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  8. package/dist/cjs/graphs/MultiAgentGraph.cjs +152 -1167
  9. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  10. package/dist/cjs/graphs/phases/memoryFlushPhase.cjs +1 -1
  11. package/dist/cjs/graphs/phases/memoryFlushPhase.cjs.map +1 -1
  12. package/dist/cjs/hooks/HookRegistry.cjs +162 -0
  13. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
  14. package/dist/cjs/hooks/executeHooks.cjs +276 -0
  15. package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
  16. package/dist/cjs/hooks/matchers.cjs +256 -0
  17. package/dist/cjs/hooks/matchers.cjs.map +1 -0
  18. package/dist/cjs/hooks/types.cjs +27 -0
  19. package/dist/cjs/hooks/types.cjs.map +1 -0
  20. package/dist/cjs/langchain/google-common.cjs +3 -0
  21. package/dist/cjs/langchain/google-common.cjs.map +1 -0
  22. package/dist/cjs/langchain/index.cjs +86 -0
  23. package/dist/cjs/langchain/index.cjs.map +1 -0
  24. package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
  25. package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
  26. package/dist/cjs/langchain/messages/tool.cjs +3 -0
  27. package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
  28. package/dist/cjs/langchain/messages.cjs +51 -0
  29. package/dist/cjs/langchain/messages.cjs.map +1 -0
  30. package/dist/cjs/langchain/openai.cjs +3 -0
  31. package/dist/cjs/langchain/openai.cjs.map +1 -0
  32. package/dist/cjs/langchain/prompts.cjs +11 -0
  33. package/dist/cjs/langchain/prompts.cjs.map +1 -0
  34. package/dist/cjs/langchain/runnables.cjs +19 -0
  35. package/dist/cjs/langchain/runnables.cjs.map +1 -0
  36. package/dist/cjs/langchain/tools.cjs +23 -0
  37. package/dist/cjs/langchain/tools.cjs.map +1 -0
  38. package/dist/cjs/langchain/utils/env.cjs +11 -0
  39. package/dist/cjs/langchain/utils/env.cjs.map +1 -0
  40. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
  41. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  42. package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
  43. package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
  44. package/dist/cjs/llm/bedrock/index.cjs +61 -33
  45. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  46. package/dist/cjs/llm/openai/index.cjs +1 -4
  47. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  48. package/dist/cjs/llm/openai/utils/index.cjs +27 -10
  49. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  50. package/dist/cjs/main.cjs +178 -127
  51. package/dist/cjs/main.cjs.map +1 -1
  52. package/dist/cjs/memory/citations.cjs +4 -4
  53. package/dist/cjs/memory/citations.cjs.map +1 -1
  54. package/dist/cjs/memory/constants.cjs +17 -17
  55. package/dist/cjs/memory/constants.cjs.map +1 -1
  56. package/dist/cjs/memory/mmr.cjs +1 -1
  57. package/dist/cjs/memory/mmr.cjs.map +1 -1
  58. package/dist/cjs/memory/paths.cjs +1 -1
  59. package/dist/cjs/memory/paths.cjs.map +1 -1
  60. package/dist/cjs/memory/recallTracking.cjs +3 -3
  61. package/dist/cjs/memory/recallTracking.cjs.map +1 -1
  62. package/dist/cjs/memory/temporalDecay.cjs +2 -2
  63. package/dist/cjs/memory/temporalDecay.cjs.map +1 -1
  64. package/dist/cjs/messages/cache.cjs +89 -0
  65. package/dist/cjs/messages/cache.cjs.map +1 -1
  66. package/dist/cjs/messages/contextPruning.cjs +156 -0
  67. package/dist/cjs/messages/contextPruning.cjs.map +1 -0
  68. package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
  69. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
  70. package/dist/cjs/messages/format.cjs +144 -20
  71. package/dist/cjs/messages/format.cjs.map +1 -1
  72. package/dist/cjs/messages/prune.cjs +505 -4
  73. package/dist/cjs/messages/prune.cjs.map +1 -1
  74. package/dist/cjs/run.cjs +141 -1
  75. package/dist/cjs/run.cjs.map +1 -1
  76. package/dist/cjs/tools/BashExecutor.cjs +235 -0
  77. package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
  78. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
  79. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
  80. package/dist/cjs/tools/CodeExecutor.cjs +45 -47
  81. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  82. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
  83. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  84. package/dist/cjs/tools/ReadFile.cjs +44 -0
  85. package/dist/cjs/tools/ReadFile.cjs.map +1 -0
  86. package/dist/cjs/tools/SkillTool.cjs +51 -0
  87. package/dist/cjs/tools/SkillTool.cjs.map +1 -0
  88. package/dist/cjs/tools/SubagentTool.cjs +93 -0
  89. package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
  90. package/dist/cjs/tools/ToolNode.cjs +450 -24
  91. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  92. package/dist/cjs/tools/memory/memoryAppendTool.cjs +1 -1
  93. package/dist/cjs/tools/memory/memoryAppendTool.cjs.map +1 -1
  94. package/dist/cjs/tools/memory/memoryGetTool.cjs +2 -2
  95. package/dist/cjs/tools/memory/memoryGetTool.cjs.map +1 -1
  96. package/dist/cjs/tools/memory/memorySearchTool.cjs +3 -3
  97. package/dist/cjs/tools/memory/memorySearchTool.cjs.map +1 -1
  98. package/dist/cjs/tools/memory/shared.cjs +1 -1
  99. package/dist/cjs/tools/memory/shared.cjs.map +1 -1
  100. package/dist/cjs/tools/search/search.cjs +11 -3
  101. package/dist/cjs/tools/search/search.cjs.map +1 -1
  102. package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
  103. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
  104. package/dist/cjs/tools/search/tavily-search.cjs +372 -0
  105. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
  106. package/dist/cjs/tools/search/tool.cjs +28 -4
  107. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  108. package/dist/cjs/tools/search/utils.cjs +10 -3
  109. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  110. package/dist/cjs/tools/skillCatalog.cjs +84 -0
  111. package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
  112. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
  113. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
  114. package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
  115. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
  116. package/dist/cjs/types/agent-cache.cjs +54 -0
  117. package/dist/cjs/types/agent-cache.cjs.map +1 -0
  118. package/dist/cjs/types/graph.cjs.map +1 -1
  119. package/dist/cjs/utils/truncation.cjs +135 -0
  120. package/dist/cjs/utils/truncation.cjs.map +1 -0
  121. package/dist/esm/agents/AgentContext.mjs +274 -67
  122. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  123. package/dist/esm/common/enum.mjs +44 -12
  124. package/dist/esm/common/enum.mjs.map +1 -1
  125. package/dist/esm/graphs/Graph.mjs +182 -5
  126. package/dist/esm/graphs/Graph.mjs.map +1 -1
  127. package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
  128. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  129. package/dist/esm/graphs/phases/memoryFlushPhase.mjs +1 -1
  130. package/dist/esm/graphs/phases/memoryFlushPhase.mjs.map +1 -1
  131. package/dist/esm/hooks/HookRegistry.mjs +160 -0
  132. package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
  133. package/dist/esm/hooks/executeHooks.mjs +273 -0
  134. package/dist/esm/hooks/executeHooks.mjs.map +1 -0
  135. package/dist/esm/hooks/matchers.mjs +251 -0
  136. package/dist/esm/hooks/matchers.mjs.map +1 -0
  137. package/dist/esm/hooks/types.mjs +25 -0
  138. package/dist/esm/hooks/types.mjs.map +1 -0
  139. package/dist/esm/langchain/google-common.mjs +2 -0
  140. package/dist/esm/langchain/google-common.mjs.map +1 -0
  141. package/dist/esm/langchain/index.mjs +5 -0
  142. package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
  143. package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
  144. package/dist/esm/langchain/messages/tool.mjs +2 -0
  145. package/dist/esm/langchain/messages/tool.mjs.map +1 -0
  146. package/dist/esm/langchain/messages.mjs +2 -0
  147. package/dist/esm/langchain/messages.mjs.map +1 -0
  148. package/dist/esm/langchain/openai.mjs +2 -0
  149. package/dist/esm/langchain/openai.mjs.map +1 -0
  150. package/dist/esm/langchain/prompts.mjs +2 -0
  151. package/dist/esm/langchain/prompts.mjs.map +1 -0
  152. package/dist/esm/langchain/runnables.mjs +2 -0
  153. package/dist/esm/langchain/runnables.mjs.map +1 -0
  154. package/dist/esm/langchain/tools.mjs +2 -0
  155. package/dist/esm/langchain/tools.mjs.map +1 -0
  156. package/dist/esm/langchain/utils/env.mjs +2 -0
  157. package/dist/esm/langchain/utils/env.mjs.map +1 -0
  158. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
  159. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  160. package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
  161. package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
  162. package/dist/esm/llm/bedrock/index.mjs +61 -34
  163. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  164. package/dist/esm/llm/openai/index.mjs +1 -4
  165. package/dist/esm/llm/openai/index.mjs.map +1 -1
  166. package/dist/esm/llm/openai/utils/index.mjs +27 -10
  167. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  168. package/dist/esm/main.mjs +21 -27
  169. package/dist/esm/main.mjs.map +1 -1
  170. package/dist/esm/memory/citations.mjs +4 -4
  171. package/dist/esm/memory/citations.mjs.map +1 -1
  172. package/dist/esm/memory/constants.mjs +17 -17
  173. package/dist/esm/memory/constants.mjs.map +1 -1
  174. package/dist/esm/memory/mmr.mjs +1 -1
  175. package/dist/esm/memory/mmr.mjs.map +1 -1
  176. package/dist/esm/memory/paths.mjs +1 -1
  177. package/dist/esm/memory/paths.mjs.map +1 -1
  178. package/dist/esm/memory/recallTracking.mjs +3 -3
  179. package/dist/esm/memory/recallTracking.mjs.map +1 -1
  180. package/dist/esm/memory/temporalDecay.mjs +2 -2
  181. package/dist/esm/memory/temporalDecay.mjs.map +1 -1
  182. package/dist/esm/messages/cache.mjs +89 -0
  183. package/dist/esm/messages/cache.mjs.map +1 -1
  184. package/dist/esm/messages/contextPruning.mjs +154 -0
  185. package/dist/esm/messages/contextPruning.mjs.map +1 -0
  186. package/dist/esm/messages/contextPruningSettings.mjs +50 -0
  187. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
  188. package/dist/esm/messages/format.mjs +136 -12
  189. package/dist/esm/messages/format.mjs.map +1 -1
  190. package/dist/esm/messages/prune.mjs +504 -7
  191. package/dist/esm/messages/prune.mjs.map +1 -1
  192. package/dist/esm/run.mjs +141 -1
  193. package/dist/esm/run.mjs.map +1 -1
  194. package/dist/esm/tools/BashExecutor.mjs +227 -0
  195. package/dist/esm/tools/BashExecutor.mjs.map +1 -0
  196. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
  197. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
  198. package/dist/esm/tools/CodeExecutor.mjs +45 -48
  199. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  200. package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
  201. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  202. package/dist/esm/tools/ReadFile.mjs +39 -0
  203. package/dist/esm/tools/ReadFile.mjs.map +1 -0
  204. package/dist/esm/tools/SkillTool.mjs +46 -0
  205. package/dist/esm/tools/SkillTool.mjs.map +1 -0
  206. package/dist/esm/tools/SubagentTool.mjs +86 -0
  207. package/dist/esm/tools/SubagentTool.mjs.map +1 -0
  208. package/dist/esm/tools/ToolNode.mjs +452 -26
  209. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  210. package/dist/esm/tools/memory/memoryAppendTool.mjs +1 -1
  211. package/dist/esm/tools/memory/memoryAppendTool.mjs.map +1 -1
  212. package/dist/esm/tools/memory/memoryGetTool.mjs +2 -2
  213. package/dist/esm/tools/memory/memoryGetTool.mjs.map +1 -1
  214. package/dist/esm/tools/memory/memorySearchTool.mjs +3 -3
  215. package/dist/esm/tools/memory/memorySearchTool.mjs.map +1 -1
  216. package/dist/esm/tools/memory/shared.mjs +1 -1
  217. package/dist/esm/tools/memory/shared.mjs.map +1 -1
  218. package/dist/esm/tools/search/search.mjs +11 -3
  219. package/dist/esm/tools/search/search.mjs.map +1 -1
  220. package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
  221. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
  222. package/dist/esm/tools/search/tavily-search.mjs +370 -0
  223. package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
  224. package/dist/esm/tools/search/tool.mjs +28 -4
  225. package/dist/esm/tools/search/tool.mjs.map +1 -1
  226. package/dist/esm/tools/search/utils.mjs +10 -3
  227. package/dist/esm/tools/search/utils.mjs.map +1 -1
  228. package/dist/esm/tools/skillCatalog.mjs +82 -0
  229. package/dist/esm/tools/skillCatalog.mjs.map +1 -0
  230. package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
  231. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
  232. package/dist/esm/tools/toolOutputReferences.mjs +662 -0
  233. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
  234. package/dist/esm/types/agent-cache.mjs +52 -0
  235. package/dist/esm/types/agent-cache.mjs.map +1 -0
  236. package/dist/esm/types/graph.mjs.map +1 -1
  237. package/dist/esm/utils/truncation.mjs +128 -0
  238. package/dist/esm/utils/truncation.mjs.map +1 -0
  239. package/dist/types/agents/AgentContext.d.ts +101 -8
  240. package/dist/types/common/enum.d.ts +39 -12
  241. package/dist/types/common/index.d.ts +0 -1
  242. package/dist/types/graphs/Graph.d.ts +43 -0
  243. package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
  244. package/dist/types/graphs/index.d.ts +0 -1
  245. package/dist/types/graphs/phases/memoryFlushPhase.d.ts +2 -2
  246. package/dist/types/hooks/HookRegistry.d.ts +56 -0
  247. package/dist/types/hooks/executeHooks.d.ts +79 -0
  248. package/dist/types/hooks/index.d.ts +6 -0
  249. package/dist/types/hooks/matchers.d.ts +95 -0
  250. package/dist/types/hooks/types.d.ts +320 -0
  251. package/dist/types/index.d.ts +9 -9
  252. package/dist/types/langchain/google-common.d.ts +1 -0
  253. package/dist/types/langchain/index.d.ts +8 -0
  254. package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
  255. package/dist/types/langchain/messages/tool.d.ts +1 -0
  256. package/dist/types/langchain/messages.d.ts +2 -0
  257. package/dist/types/langchain/openai.d.ts +1 -0
  258. package/dist/types/langchain/prompts.d.ts +1 -0
  259. package/dist/types/langchain/runnables.d.ts +2 -0
  260. package/dist/types/langchain/tools.d.ts +2 -0
  261. package/dist/types/langchain/utils/env.d.ts +1 -0
  262. package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
  263. package/dist/types/llm/bedrock/index.d.ts +54 -1
  264. package/dist/types/llm/openai/index.d.ts +1 -1
  265. package/dist/types/memory/citations.d.ts +4 -4
  266. package/dist/types/memory/constants.d.ts +17 -17
  267. package/dist/types/memory/mmr.d.ts +3 -3
  268. package/dist/types/memory/paths.d.ts +1 -1
  269. package/dist/types/memory/temporalDecay.d.ts +2 -2
  270. package/dist/types/memory/types.d.ts +3 -3
  271. package/dist/types/messages/contextPruning.d.ts +42 -0
  272. package/dist/types/messages/contextPruningSettings.d.ts +44 -0
  273. package/dist/types/messages/format.d.ts +9 -1
  274. package/dist/types/messages/index.d.ts +2 -0
  275. package/dist/types/messages/prune.d.ts +91 -1
  276. package/dist/types/run.d.ts +2 -0
  277. package/dist/types/tools/BashExecutor.d.ts +76 -0
  278. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
  279. package/dist/types/tools/CodeExecutor.d.ts +8 -26
  280. package/dist/types/tools/ReadFile.d.ts +28 -0
  281. package/dist/types/tools/SkillTool.d.ts +40 -0
  282. package/dist/types/tools/SubagentTool.d.ts +36 -0
  283. package/dist/types/tools/ToolNode.d.ts +77 -5
  284. package/dist/types/tools/memory/shared.d.ts +1 -1
  285. package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
  286. package/dist/types/tools/search/tavily-search.d.ts +4 -0
  287. package/dist/types/tools/search/types.d.ts +99 -5
  288. package/dist/types/tools/search/utils.d.ts +2 -2
  289. package/dist/types/tools/skillCatalog.d.ts +19 -0
  290. package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
  291. package/dist/types/tools/subagent/index.d.ts +2 -0
  292. package/dist/types/tools/subagent/types.d.ts +84 -0
  293. package/dist/types/tools/toolOutputReferences.d.ts +236 -0
  294. package/dist/types/types/agent-cache.d.ts +71 -0
  295. package/dist/types/types/graph.d.ts +163 -22
  296. package/dist/types/types/index.d.ts +3 -0
  297. package/dist/types/types/messages.d.ts +26 -0
  298. package/dist/types/types/run.d.ts +22 -0
  299. package/dist/types/types/skill.d.ts +9 -0
  300. package/dist/types/types/tools.d.ts +111 -0
  301. package/dist/types/utils/index.d.ts +1 -3
  302. package/dist/types/utils/truncation.d.ts +70 -0
  303. package/package.json +57 -17
  304. package/src/agents/AgentContext.ts +321 -78
  305. package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
  306. package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +266 -0
  307. package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
  308. package/src/agents/__tests__/AgentContext.test.ts +632 -0
  309. package/src/common/__tests__/enum.test.ts +7 -17
  310. package/src/common/enum.ts +43 -12
  311. package/src/common/index.ts +0 -1
  312. package/src/graphs/Graph.ts +222 -2
  313. package/src/graphs/MultiAgentGraph.ts +154 -1466
  314. package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
  315. package/src/graphs/gapFeatures.test.ts +1 -1
  316. package/src/graphs/index.ts +0 -1
  317. package/src/graphs/phases/__tests__/memoryFlushPhase.test.ts +1 -1
  318. package/src/graphs/phases/memoryFlushPhase.ts +2 -2
  319. package/src/hooks/HookRegistry.ts +208 -0
  320. package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
  321. package/src/hooks/__tests__/compactHooks.test.ts +214 -0
  322. package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
  323. package/src/hooks/__tests__/integration.test.ts +337 -0
  324. package/src/hooks/__tests__/matchers.test.ts +238 -0
  325. package/src/hooks/__tests__/toolHooks.test.ts +665 -0
  326. package/src/hooks/executeHooks.ts +375 -0
  327. package/src/hooks/index.ts +57 -0
  328. package/src/hooks/matchers.ts +280 -0
  329. package/src/hooks/types.ts +404 -0
  330. package/src/index.ts +15 -24
  331. package/src/langchain/google-common.ts +1 -0
  332. package/src/langchain/index.ts +8 -0
  333. package/src/langchain/language_models/chat_models.ts +1 -0
  334. package/src/langchain/messages/tool.ts +5 -0
  335. package/src/langchain/messages.ts +21 -0
  336. package/src/langchain/openai.ts +1 -0
  337. package/src/langchain/prompts.ts +1 -0
  338. package/src/langchain/runnables.ts +7 -0
  339. package/src/langchain/tools.ts +8 -0
  340. package/src/langchain/utils/env.ts +1 -0
  341. package/src/llm/anthropic/utils/message_inputs.ts +10 -1
  342. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
  343. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
  344. package/src/llm/bedrock/cacheSupport.test.ts +99 -0
  345. package/src/llm/bedrock/cacheSupport.ts +53 -0
  346. package/src/llm/bedrock/index.ts +116 -41
  347. package/src/llm/openai/index.ts +2 -2
  348. package/src/llm/openai/utils/index.ts +31 -14
  349. package/src/memory/citations.ts +4 -4
  350. package/src/memory/constants.ts +17 -17
  351. package/src/memory/mmr.ts +3 -3
  352. package/src/memory/paths.ts +1 -1
  353. package/src/memory/recallTracking.ts +3 -3
  354. package/src/memory/temporalDecay.ts +2 -2
  355. package/src/memory/types.ts +3 -3
  356. package/src/messages/__tests__/contextPruning.test.ts +228 -0
  357. package/src/messages/cache.test.ts +62 -24
  358. package/src/messages/cache.ts +112 -0
  359. package/src/messages/contextPruning.ts +191 -0
  360. package/src/messages/contextPruningSettings.ts +90 -0
  361. package/src/messages/ensureThinkingBlock.test.ts +1 -1
  362. package/src/messages/format.ts +164 -12
  363. package/src/messages/formatAgentMessages.skills.test.ts +413 -0
  364. package/src/messages/formatAgentMessages.test.ts +1 -1
  365. package/src/messages/index.ts +2 -0
  366. package/src/messages/prune.ts +661 -4
  367. package/src/run.ts +155 -1
  368. package/src/scripts/multi-agent-chain.ts +2 -2
  369. package/src/scripts/multi-agent-document-review-chain.ts +2 -2
  370. package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
  371. package/src/scripts/multi-agent-parallel.ts +3 -3
  372. package/src/scripts/multi-agent-sequence.ts +3 -3
  373. package/src/scripts/multi-agent-subagent.ts +246 -0
  374. package/src/scripts/multi-agent-supervisor.ts +5 -5
  375. package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
  376. package/src/scripts/sequential-full-metadata-test.ts +2 -2
  377. package/src/scripts/subagent-event-driven-debug.ts +190 -0
  378. package/src/scripts/subagent-tools-debug.ts +160 -0
  379. package/src/scripts/test-custom-prompt-key.ts +3 -3
  380. package/src/scripts/test-handoff-input.ts +1 -1
  381. package/src/scripts/test-handoff-steering.ts +3 -3
  382. package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
  383. package/src/scripts/test-parallel-agent-labeling.ts +3 -3
  384. package/src/scripts/test-parallel-handoffs.ts +2 -2
  385. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
  386. package/src/scripts/test-thinking-handoff.ts +1 -1
  387. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
  388. package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
  389. package/src/scripts/test-tools-before-handoff.ts +1 -1
  390. package/src/specs/agent-handoffs.test.ts +26 -483
  391. package/src/specs/anthropic.simple.test.ts +61 -0
  392. package/src/specs/multi-agent-summarization.test.ts +396 -0
  393. package/src/specs/prune.orphans.test.ts +248 -0
  394. package/src/specs/prune.test.ts +104 -16
  395. package/src/specs/thinking-handoff.test.ts +19 -19
  396. package/src/tools/BashExecutor.ts +281 -0
  397. package/src/tools/BashProgrammaticToolCalling.ts +397 -0
  398. package/src/tools/CodeExecutor.ts +63 -54
  399. package/src/tools/ProgrammaticToolCalling.ts +29 -14
  400. package/src/tools/ReadFile.ts +39 -0
  401. package/src/tools/SkillTool.ts +46 -0
  402. package/src/tools/SubagentTool.ts +100 -0
  403. package/src/tools/ToolNode.ts +548 -26
  404. package/src/tools/__tests__/BashExecutor.test.ts +49 -0
  405. package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
  406. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
  407. package/src/tools/__tests__/ReadFile.test.ts +44 -0
  408. package/src/tools/__tests__/SkillTool.test.ts +442 -0
  409. package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
  410. package/src/tools/__tests__/SubagentTool.test.ts +149 -0
  411. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
  412. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
  413. package/src/tools/__tests__/skillCatalog.test.ts +161 -0
  414. package/src/tools/__tests__/subagentHooks.test.ts +210 -0
  415. package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
  416. package/src/tools/memory/memoryAppendTool.ts +1 -1
  417. package/src/tools/memory/memoryGetTool.ts +2 -2
  418. package/src/tools/memory/memorySearchTool.ts +3 -3
  419. package/src/tools/memory/shared.ts +1 -1
  420. package/src/tools/search/search.ts +12 -2
  421. package/src/tools/search/tavily-scraper.ts +235 -0
  422. package/src/tools/search/tavily-search.ts +424 -0
  423. package/src/tools/search/tavily.test.ts +965 -0
  424. package/src/tools/search/tool.ts +36 -2
  425. package/src/tools/search/types.ts +133 -8
  426. package/src/tools/search/utils.ts +13 -5
  427. package/src/tools/skillCatalog.ts +126 -0
  428. package/src/tools/subagent/SubagentExecutor.ts +676 -0
  429. package/src/tools/subagent/index.ts +13 -0
  430. package/src/tools/subagent/types.test.ts +70 -0
  431. package/src/tools/subagent/types.ts +115 -0
  432. package/src/tools/toolOutputReferences.ts +825 -0
  433. package/src/types/agent-cache.ts +74 -0
  434. package/src/types/graph.ts +172 -20
  435. package/src/types/index.ts +3 -0
  436. package/src/types/messages.ts +27 -0
  437. package/src/types/run.ts +22 -0
  438. package/src/types/skill.ts +11 -0
  439. package/src/types/tools.ts +118 -0
  440. package/src/utils/__tests__/truncation.test.ts +66 -0
  441. package/src/utils/index.ts +1 -3
  442. package/src/utils/truncation.ts +154 -0
  443. package/dist/cjs/common/spawnPath.cjs +0 -104
  444. package/dist/cjs/common/spawnPath.cjs.map +0 -1
  445. package/dist/cjs/content/ArtifactStore.cjs +0 -579
  446. package/dist/cjs/content/ArtifactStore.cjs.map +0 -1
  447. package/dist/cjs/content/ContentStore.cjs +0 -638
  448. package/dist/cjs/content/ContentStore.cjs.map +0 -1
  449. package/dist/cjs/content/contentAnalyzer.cjs +0 -91
  450. package/dist/cjs/content/contentAnalyzer.cjs.map +0 -1
  451. package/dist/cjs/content/index.cjs +0 -20
  452. package/dist/cjs/content/index.cjs.map +0 -1
  453. package/dist/cjs/content/mcpAutoCache.cjs +0 -115
  454. package/dist/cjs/content/mcpAutoCache.cjs.map +0 -1
  455. package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
  456. package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
  457. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
  458. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
  459. package/dist/cjs/providers/a2a/client.cjs +0 -92
  460. package/dist/cjs/providers/a2a/client.cjs.map +0 -1
  461. package/dist/cjs/providers/a2a/config.cjs +0 -38
  462. package/dist/cjs/providers/a2a/config.cjs.map +0 -1
  463. package/dist/cjs/providers/capabilityNaming.cjs +0 -43
  464. package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
  465. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
  466. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
  467. package/dist/cjs/providers/mcp/config.cjs +0 -42
  468. package/dist/cjs/providers/mcp/config.cjs.map +0 -1
  469. package/dist/cjs/providers/mcp/transport.cjs +0 -65
  470. package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
  471. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
  472. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
  473. package/dist/cjs/providers/types.cjs +0 -51
  474. package/dist/cjs/providers/types.cjs.map +0 -1
  475. package/dist/cjs/tools/artifacts/schema.cjs +0 -86
  476. package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
  477. package/dist/cjs/tools/artifacts/tool.cjs +0 -219
  478. package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
  479. package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
  480. package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
  481. package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
  482. package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
  483. package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
  484. package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
  485. package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
  486. package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
  487. package/dist/cjs/tools/proxyTool.cjs +0 -102
  488. package/dist/cjs/tools/proxyTool.cjs.map +0 -1
  489. package/dist/cjs/utils/childAgentContext.cjs +0 -242
  490. package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
  491. package/dist/cjs/utils/credentials.cjs +0 -142
  492. package/dist/cjs/utils/credentials.cjs.map +0 -1
  493. package/dist/cjs/utils/httpClient.cjs +0 -74
  494. package/dist/cjs/utils/httpClient.cjs.map +0 -1
  495. package/dist/cjs/utils/toolManifest.cjs +0 -100
  496. package/dist/cjs/utils/toolManifest.cjs.map +0 -1
  497. package/dist/esm/common/spawnPath.mjs +0 -95
  498. package/dist/esm/common/spawnPath.mjs.map +0 -1
  499. package/dist/esm/content/ArtifactStore.mjs +0 -576
  500. package/dist/esm/content/ArtifactStore.mjs.map +0 -1
  501. package/dist/esm/content/ContentStore.mjs +0 -635
  502. package/dist/esm/content/ContentStore.mjs.map +0 -1
  503. package/dist/esm/content/contentAnalyzer.mjs +0 -87
  504. package/dist/esm/content/contentAnalyzer.mjs.map +0 -1
  505. package/dist/esm/content/index.mjs +0 -5
  506. package/dist/esm/content/mcpAutoCache.mjs +0 -111
  507. package/dist/esm/content/mcpAutoCache.mjs.map +0 -1
  508. package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
  509. package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
  510. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
  511. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
  512. package/dist/esm/providers/a2a/client.mjs +0 -88
  513. package/dist/esm/providers/a2a/client.mjs.map +0 -1
  514. package/dist/esm/providers/a2a/config.mjs +0 -35
  515. package/dist/esm/providers/a2a/config.mjs.map +0 -1
  516. package/dist/esm/providers/capabilityNaming.mjs +0 -39
  517. package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
  518. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
  519. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
  520. package/dist/esm/providers/mcp/config.mjs +0 -39
  521. package/dist/esm/providers/mcp/config.mjs.map +0 -1
  522. package/dist/esm/providers/mcp/transport.mjs +0 -63
  523. package/dist/esm/providers/mcp/transport.mjs.map +0 -1
  524. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
  525. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
  526. package/dist/esm/providers/types.mjs +0 -51
  527. package/dist/esm/providers/types.mjs.map +0 -1
  528. package/dist/esm/tools/artifacts/schema.mjs +0 -79
  529. package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
  530. package/dist/esm/tools/artifacts/tool.mjs +0 -213
  531. package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
  532. package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
  533. package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
  534. package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
  535. package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
  536. package/dist/esm/tools/fileSearch/schema.mjs +0 -15
  537. package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
  538. package/dist/esm/tools/fileSearch/tool.mjs +0 -152
  539. package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
  540. package/dist/esm/tools/proxyTool.mjs +0 -100
  541. package/dist/esm/tools/proxyTool.mjs.map +0 -1
  542. package/dist/esm/utils/childAgentContext.mjs +0 -237
  543. package/dist/esm/utils/childAgentContext.mjs.map +0 -1
  544. package/dist/esm/utils/credentials.mjs +0 -135
  545. package/dist/esm/utils/credentials.mjs.map +0 -1
  546. package/dist/esm/utils/httpClient.mjs +0 -70
  547. package/dist/esm/utils/httpClient.mjs.map +0 -1
  548. package/dist/esm/utils/toolManifest.mjs +0 -96
  549. package/dist/esm/utils/toolManifest.mjs.map +0 -1
  550. package/dist/types/common/spawnPath.d.ts +0 -59
  551. package/dist/types/content/ArtifactStore.d.ts +0 -223
  552. package/dist/types/content/ContentStore.d.ts +0 -140
  553. package/dist/types/content/contentAnalyzer.d.ts +0 -38
  554. package/dist/types/content/index.d.ts +0 -24
  555. package/dist/types/content/mcpAutoCache.d.ts +0 -89
  556. package/dist/types/content/types.d.ts +0 -75
  557. package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
  558. package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
  559. package/dist/types/providers/a2a/client.d.ts +0 -47
  560. package/dist/types/providers/a2a/config.d.ts +0 -18
  561. package/dist/types/providers/a2a/index.d.ts +0 -6
  562. package/dist/types/providers/a2a/types.d.ts +0 -173
  563. package/dist/types/providers/capabilityNaming.d.ts +0 -25
  564. package/dist/types/providers/index.d.ts +0 -12
  565. package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
  566. package/dist/types/providers/mcp/config.d.ts +0 -20
  567. package/dist/types/providers/mcp/index.d.ts +0 -5
  568. package/dist/types/providers/mcp/transport.d.ts +0 -18
  569. package/dist/types/providers/mcp/types.d.ts +0 -112
  570. package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
  571. package/dist/types/providers/tools-server/index.d.ts +0 -1
  572. package/dist/types/providers/types.d.ts +0 -184
  573. package/dist/types/tools/artifacts/index.d.ts +0 -3
  574. package/dist/types/tools/artifacts/schema.d.ts +0 -63
  575. package/dist/types/tools/artifacts/tool.d.ts +0 -16
  576. package/dist/types/tools/artifacts/types.d.ts +0 -127
  577. package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
  578. package/dist/types/tools/fileSearch/index.d.ts +0 -5
  579. package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
  580. package/dist/types/tools/fileSearch/schema.d.ts +0 -13
  581. package/dist/types/tools/fileSearch/tool.d.ts +0 -18
  582. package/dist/types/tools/fileSearch/types.d.ts +0 -139
  583. package/dist/types/tools/proxyTool.d.ts +0 -62
  584. package/dist/types/tools/search/test.d.ts +0 -1
  585. package/dist/types/utils/childAgentContext.d.ts +0 -99
  586. package/dist/types/utils/credentials.d.ts +0 -77
  587. package/dist/types/utils/httpClient.d.ts +0 -46
  588. package/dist/types/utils/toolManifest.d.ts +0 -49
  589. package/src/common/__tests__/spawnPath.test.ts +0 -110
  590. package/src/common/spawnPath.ts +0 -101
  591. package/src/content/ArtifactStore.ts +0 -782
  592. package/src/content/ContentStore.ts +0 -753
  593. package/src/content/contentAnalyzer.ts +0 -105
  594. package/src/content/index.ts +0 -51
  595. package/src/content/mcpAutoCache.ts +0 -185
  596. package/src/content/types.ts +0 -82
  597. package/src/graphs/HandoffRegistry.ts +0 -199
  598. package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
  599. package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
  600. package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
  601. package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
  602. package/src/graphs/handoffValidation.test.ts +0 -353
  603. package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
  604. package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -271
  605. package/src/providers/__tests__/types.test.ts +0 -64
  606. package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
  607. package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
  608. package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
  609. package/src/providers/a2a/client.ts +0 -115
  610. package/src/providers/a2a/config.ts +0 -40
  611. package/src/providers/a2a/index.ts +0 -29
  612. package/src/providers/a2a/types.ts +0 -191
  613. package/src/providers/capabilityNaming.ts +0 -42
  614. package/src/providers/index.ts +0 -68
  615. package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
  616. package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
  617. package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
  618. package/src/providers/mcp/config.ts +0 -45
  619. package/src/providers/mcp/index.ts +0 -21
  620. package/src/providers/mcp/transport.ts +0 -76
  621. package/src/providers/mcp/types.ts +0 -139
  622. package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -249
  623. package/src/providers/tools-server/index.ts +0 -1
  624. package/src/providers/types.ts +0 -204
  625. package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
  626. package/src/scripts/test-handoff-preamble.ts +0 -278
  627. package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
  628. package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
  629. package/src/tools/artifacts/index.ts +0 -33
  630. package/src/tools/artifacts/schema.ts +0 -99
  631. package/src/tools/artifacts/tool.ts +0 -289
  632. package/src/tools/artifacts/types.ts +0 -162
  633. package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
  634. package/src/tools/fileSearch/formatter.ts +0 -129
  635. package/src/tools/fileSearch/index.ts +0 -23
  636. package/src/tools/fileSearch/ragClient.ts +0 -137
  637. package/src/tools/fileSearch/schema.ts +0 -19
  638. package/src/tools/fileSearch/tool.ts +0 -207
  639. package/src/tools/fileSearch/types.ts +0 -149
  640. package/src/tools/proxyTool.ts +0 -166
  641. package/src/tools/search/output.md +0 -2775
  642. package/src/tools/search/test.html +0 -884
  643. package/src/tools/search/test.md +0 -643
  644. package/src/tools/search/test.ts +0 -159
  645. package/src/utils/__tests__/childAgentContext.test.ts +0 -217
  646. package/src/utils/__tests__/credentials.test.ts +0 -130
  647. package/src/utils/__tests__/httpClient.test.ts +0 -75
  648. package/src/utils/__tests__/toolManifest.test.ts +0 -116
  649. package/src/utils/childAgentContext.ts +0 -259
  650. package/src/utils/credentials.ts +0 -157
  651. package/src/utils/httpClient.ts +0 -92
  652. package/src/utils/toolManifest.ts +0 -109
  653. /package/dist/esm/{content → langchain}/index.mjs.map +0 -0
@@ -3,6 +3,8 @@ import { RunnableLambda } from '@langchain/core/runnables';
3
3
  import { createSchemaOnlyTools } from '../tools/schema.mjs';
4
4
  import { ContentTypes, Providers } from '../common/enum.mjs';
5
5
  import '../tools/approval/constants.mjs';
6
+ import { MAX_SYSTEM_CACHE_BLOCKS } from '../types/agent-cache.mjs';
7
+ import { isBedrockCacheSupported } from '../llm/bedrock/cacheSupport.mjs';
6
8
  import { toJsonSchema } from '../utils/schema.mjs';
7
9
 
8
10
  /* eslint-disable no-console */
@@ -15,7 +17,7 @@ class AgentContext {
15
17
  * Create an AgentContext from configuration with token accounting initialization
16
18
  */
17
19
  static fromConfig(agentConfig, tokenCounter, indexTokenCountMap) {
18
- const { agentId, name, description, provider, clientOptions, tools, toolMap, toolEnd, toolRegistry, toolDefinitions, instructions, additional_instructions, streamBuffer, maxContextTokens, reasoningKey, useLegacyContent, dynamicContext, structuredOutput: structuredOutputCamel, structured_output: structuredOutputSnake, discoveredTools, summarizeCallback, persistedSummary, summarizationConfig, fileManifest, } = agentConfig;
20
+ const { agentId, name, description, provider, clientOptions, tools, toolMap, toolEnd, toolRegistry, toolDefinitions, system_cache_blocks, instructions, instructions_cache_ttl, additional_instructions, streamBuffer, maxContextTokens, reasoningKey, useLegacyContent, dynamicContext, structuredOutput: structuredOutputCamel, structured_output: structuredOutputSnake, discoveredTools, summarizeCallback, persistedSummary, summarizationConfig, fileManifest, } = agentConfig;
19
21
  // Normalize structured output: support both camelCase and snake_case inputs
20
22
  // Priority: structuredOutput (camelCase) > structured_output (snake_case with enabled check)
21
23
  let structuredOutput;
@@ -45,7 +47,9 @@ class AgentContext {
45
47
  toolMap,
46
48
  toolRegistry,
47
49
  toolDefinitions,
50
+ systemCacheBlocks: system_cache_blocks,
48
51
  instructions,
52
+ instructionsCacheTtl: instructions_cache_ttl,
49
53
  additionalInstructions: additional_instructions,
50
54
  reasoningKey,
51
55
  toolEnd,
@@ -60,6 +64,15 @@ class AgentContext {
60
64
  summarizationConfig,
61
65
  fileManifest,
62
66
  });
67
+ /**
68
+ * Track subagent inputs on the context. `_sourceInputs`
69
+ * preserves the original AgentInputs so SubagentExecutor can self-spawn
70
+ * (`SubagentConfig.self === true`) without separate config; the other
71
+ * two flow straight from agentConfig.
72
+ */
73
+ agentContext._sourceInputs = agentConfig;
74
+ agentContext.subagentConfigs = agentConfig.subagentConfigs;
75
+ agentContext.maxSubagentDepth = agentConfig.maxSubagentDepth;
63
76
  if (tokenCounter) {
64
77
  // Initialize system runnable BEFORE async tool token calculation
65
78
  // This ensures system message tokens are in instructionTokens before
@@ -130,9 +143,18 @@ class AgentContext {
130
143
  toolDefinitions;
131
144
  /** Set of tool names discovered via tool search (to be loaded) */
132
145
  discoveredToolNames = new Set();
133
- /** Instructions for this agent */
146
+ /**
147
+ * Cacheable system content blocks emitted before `instructions`. Each
148
+ * gets its own cache marker (cachePoint on Bedrock, cache_control on
149
+ * Anthropic). Earlier entries = wider cache key (best for cross-tenant
150
+ * sharing). See `src/types/agent-cache.ts`.
151
+ */
152
+ systemCacheBlocks;
153
+ /** Stable/cacheable instructions for this agent (gets trailing marker). */
134
154
  instructions;
135
- /** Additional instructions for this agent */
155
+ /** TTL for the trailing instructions cache marker. Defaults to '5m'. */
156
+ instructionsCacheTtl;
157
+ /** Dynamic system tail (per-user / per-message — never cached). */
136
158
  additionalInstructions;
137
159
  /**
138
160
  * Dynamic context that changes per-request (e.g., current time, user info).
@@ -194,7 +216,13 @@ class AgentContext {
194
216
  summarizationConfig;
195
217
  /** Lightweight file manifest for file-aware compaction (IDs and names only, no content) */
196
218
  fileManifest;
197
- constructor({ agentId, name, description, provider, clientOptions, maxContextTokens, streamBuffer, tokenCounter, tools, toolMap, toolRegistry, toolDefinitions, instructions, additionalInstructions, dynamicContext, reasoningKey, toolEnd, instructionTokens, useLegacyContent, structuredOutput, discoveredTools, summarizeCallback, persistedSummary, summarizationConfig, fileManifest, }) {
219
+ /** Original AgentInputs used to create this context used for self-spawn subagent resolution. */
220
+ _sourceInputs;
221
+ /** Subagent configurations for hierarchical delegation. */
222
+ subagentConfigs;
223
+ /** Maximum subagent nesting depth. */
224
+ maxSubagentDepth;
225
+ constructor({ agentId, name, description, provider, clientOptions, maxContextTokens, streamBuffer, tokenCounter, tools, toolMap, toolRegistry, toolDefinitions, systemCacheBlocks, instructions, instructionsCacheTtl, additionalInstructions, dynamicContext, reasoningKey, toolEnd, instructionTokens, useLegacyContent, structuredOutput, discoveredTools, summarizeCallback, persistedSummary, summarizationConfig, fileManifest, }) {
198
226
  this.agentId = agentId;
199
227
  this.name = name;
200
228
  this.description = description;
@@ -207,7 +235,16 @@ class AgentContext {
207
235
  this.toolMap = toolMap;
208
236
  this.toolRegistry = toolRegistry;
209
237
  this.toolDefinitions = toolDefinitions;
238
+ if (systemCacheBlocks &&
239
+ systemCacheBlocks.length > MAX_SYSTEM_CACHE_BLOCKS) {
240
+ throw new Error(`system_cache_blocks supports at most ${MAX_SYSTEM_CACHE_BLOCKS} entries ` +
241
+ `(received ${systemCacheBlocks.length}); excess entries would exceed ` +
242
+ `Bedrock's 4-cachePoint per-request budget once the tools array and ` +
243
+ `trailing 'instructions' marker are counted. See src/types/agent-cache.ts.`);
244
+ }
245
+ this.systemCacheBlocks = systemCacheBlocks;
210
246
  this.instructions = instructions;
247
+ this.instructionsCacheTtl = instructionsCacheTtl;
211
248
  this.additionalInstructions = additionalInstructions;
212
249
  this.dynamicContext = dynamicContext;
213
250
  this.structuredOutput = structuredOutput;
@@ -398,8 +435,11 @@ class AgentContext {
398
435
  return this.cachedSystemRunnable;
399
436
  }
400
437
  // Stale or first access - rebuild
401
- const instructionsString = this.buildInstructionsString();
402
- this.cachedSystemRunnable = this.buildSystemRunnable(instructionsString);
438
+ this.cachedSystemRunnable = this.buildSystemRunnable({
439
+ systemCacheBlocks: this.systemCacheBlocks ?? [],
440
+ stableInstructions: this.buildStableInstructionsString(),
441
+ dynamicInstructions: this.buildDynamicInstructionsString(),
442
+ });
403
443
  this.systemRunnableStale = false;
404
444
  return this.cachedSystemRunnable;
405
445
  }
@@ -409,16 +449,26 @@ class AgentContext {
409
449
  */
410
450
  initializeSystemRunnable() {
411
451
  if (this.systemRunnableStale || this.cachedSystemRunnable === undefined) {
412
- const instructionsString = this.buildInstructionsString();
413
- this.cachedSystemRunnable = this.buildSystemRunnable(instructionsString);
452
+ this.cachedSystemRunnable = this.buildSystemRunnable({
453
+ systemCacheBlocks: this.systemCacheBlocks ?? [],
454
+ stableInstructions: this.buildStableInstructionsString(),
455
+ dynamicInstructions: this.buildDynamicInstructionsString(),
456
+ });
414
457
  this.systemRunnableStale = false;
415
458
  }
416
459
  }
417
460
  /**
418
- * Builds the raw instructions string (without creating SystemMessage).
419
- * Includes agent identity preamble and handoff context when available.
461
+ * Builds the cacheable instructions string (without creating SystemMessage).
462
+ * Includes agent identity preamble, the agent's static instructions, and
463
+ * programmatic-only tool documentation. This is the part of the system
464
+ * message that stays byte-stable across turns and across users for the
465
+ * same agent — the prompt cache prefix.
466
+ *
467
+ * Per-user/per-message dynamic context belongs in
468
+ * `buildDynamicInstructionsString()` so it does not invalidate the cache
469
+ * marker. (See `feedback_cache_stability_invariant` for the rule.)
420
470
  */
421
- buildInstructionsString() {
471
+ buildStableInstructionsString() {
422
472
  const parts = [];
423
473
  /** Build agent identity and handoff context preamble */
424
474
  const identityPreamble = this.buildIdentityPreamble();
@@ -429,11 +479,6 @@ class AgentContext {
429
479
  if (this.instructions != null && this.instructions !== '') {
430
480
  parts.push(this.instructions);
431
481
  }
432
- /** Add additional instructions */
433
- if (this.additionalInstructions != null &&
434
- this.additionalInstructions !== '') {
435
- parts.push(this.additionalInstructions);
436
- }
437
482
  /** Add programmatic tools documentation */
438
483
  const programmaticToolsDoc = this.buildProgrammaticOnlyToolsInstructions();
439
484
  if (programmaticToolsDoc) {
@@ -441,6 +486,23 @@ class AgentContext {
441
486
  }
442
487
  return parts.join('\n\n');
443
488
  }
489
+ /**
490
+ * Builds the dynamic system-tail string (without creating SystemMessage).
491
+ * Keep this out of prompt-cache-marked content so volatile per-call
492
+ * context does not invalidate the stable prefix.
493
+ *
494
+ * `additional_instructions` is treated as dynamic (per-user/per-message
495
+ * memory, runtime context, etc.) and intentionally excluded from the
496
+ * cacheable prefix.
497
+ */
498
+ buildDynamicInstructionsString() {
499
+ const parts = [];
500
+ if (this.additionalInstructions != null &&
501
+ this.additionalInstructions !== '') {
502
+ parts.push(this.additionalInstructions);
503
+ }
504
+ return parts.join('\n\n');
505
+ }
444
506
  /**
445
507
  * Builds the agent identity preamble including handoff context if present.
446
508
  * This helps the agent understand its role in the multi-agent workflow.
@@ -478,31 +540,136 @@ class AgentContext {
478
540
  return lines.join('\n');
479
541
  }
480
542
  /**
481
- * Build system runnable from pre-built instructions string.
482
- * Only called when content has actually changed.
543
+ * True when Anthropic prompt caching is enabled for this agent.
544
+ * Used by `buildSystemRunnable` to decide whether to emit a cache_control
545
+ * marker on the stable instructions prefix.
483
546
  */
484
- buildSystemRunnable(instructionsString) {
485
- if (!instructionsString) {
547
+ hasAnthropicPromptCache() {
548
+ if (this.provider !== Providers.ANTHROPIC) {
549
+ return false;
550
+ }
551
+ const anthropicOptions = this.clientOptions;
552
+ return anthropicOptions?.promptCache === true;
553
+ }
554
+ /**
555
+ * True when Bedrock prompt caching is enabled for this agent AND the
556
+ * configured model supports `cachePoint` blocks. Only Claude (and Nova)
557
+ * models on Bedrock honour cachePoint — Llama / Titan reject it.
558
+ *
559
+ * Used by `buildSystemRunnable` to inline a `cachePoint` block right
560
+ * after the stable system text so the system prefix is cached at the
561
+ * AWS account level (cross-user, cross-conversation).
562
+ */
563
+ hasBedrockPromptCache() {
564
+ if (this.provider !== Providers.BEDROCK) {
565
+ return false;
566
+ }
567
+ const bedrockOptions = this.clientOptions;
568
+ if (bedrockOptions?.promptCache !== true) {
569
+ return false;
570
+ }
571
+ /* Allowlist-based check (see src/llm/bedrock/cacheSupport.ts). The
572
+ * `bedrockCacheModelPatterns` clientOption lets consumers add new
573
+ * model patterns without forking the library — useful when AWS adds
574
+ * a new family before the next library release. */
575
+ return isBedrockCacheSupported(bedrockOptions.model, bedrockOptions.bedrockCacheModelPatterns);
576
+ }
577
+ /**
578
+ * Build system runnable from cacheable blocks + the trailing
579
+ * `instructions` block + optional dynamic tail.
580
+ *
581
+ * ┌──────────────────────────────────────────┐
582
+ * │ system_cache_blocks[0].text │ ← consumer-defined block 0
583
+ * ├──── cache marker (TTL = blocks[0].ttl) ──┤
584
+ * │ system_cache_blocks[1].text │ ← consumer-defined block 1
585
+ * ├──── cache marker (TTL = blocks[1].ttl) ──┤
586
+ * │ instructions │ ← per-agent stable
587
+ * ├──── cache marker (TTL = instructionsCacheTtl) ┤
588
+ * │ additional_instructions │ ← dynamic (uncached)
589
+ * └──────────────────────────────────────────┘
590
+ *
591
+ * If `system_cache_blocks` is empty, behavior reduces to the 2-tier
592
+ * (instructions + dynamic) path used by simpler consumers.
593
+ *
594
+ * Provider-specific cache marker:
595
+ * - Anthropic: `cache_control: { type: 'ephemeral', ttl?: '1h'|'5m' }` on
596
+ * each cacheable text block. Up to 4 cache breakpoints per workspace.
597
+ * - Bedrock (Claude/Nova): a `{ cachePoint: { type: 'default', ttl?: '1h'|'5m' } }`
598
+ * block inserted after each cacheable section. Up to 4 cachePoints per
599
+ * request, of which the tools array can consume up to 2.
600
+ *
601
+ * Cache key composition: every byte from message start to a given cache
602
+ * marker forms that marker's cache key. Earlier blocks = wider cache key
603
+ * = more cross-tenant share. Place the most stable content first.
604
+ */
605
+ buildSystemRunnable({ systemCacheBlocks, stableInstructions, dynamicInstructions, }) {
606
+ const hasAnyCacheBlocks = systemCacheBlocks.length > 0;
607
+ if (!hasAnyCacheBlocks && !stableInstructions && !dynamicInstructions) {
486
608
  // Remove previous tokens if we had a system message before
487
609
  this.instructionTokens -= this.systemMessageTokens;
488
610
  this.systemMessageTokens = 0;
489
611
  return undefined;
490
612
  }
491
- let finalInstructions = instructionsString;
492
- // Handle Anthropic prompt caching (Direct API)
493
- if (this.provider === Providers.ANTHROPIC) {
494
- const anthropicOptions = this.clientOptions;
495
- if (anthropicOptions?.promptCache === true) {
496
- finalInstructions = {
497
- content: [
498
- {
499
- type: 'text',
500
- text: instructionsString,
501
- cache_control: { type: 'ephemeral' },
502
- },
503
- ],
504
- };
613
+ const useAnthropicCache = this.hasAnthropicPromptCache();
614
+ const useBedrockCache = this.hasBedrockPromptCache();
615
+ const instructionsTtl = this.instructionsCacheTtl ?? '5m';
616
+ let finalInstructions;
617
+ if (useAnthropicCache) {
618
+ const content = [];
619
+ // Emit each system_cache_blocks entry with its own cache_control.
620
+ for (const block of systemCacheBlocks) {
621
+ if (!block.text)
622
+ continue;
623
+ content.push({
624
+ type: 'text',
625
+ text: block.text,
626
+ cache_control: { type: 'ephemeral', ttl: block.ttl ?? '5m' },
627
+ });
628
+ }
629
+ // Trailing stable instructions block (also cacheable).
630
+ if (stableInstructions) {
631
+ content.push({
632
+ type: 'text',
633
+ text: stableInstructions,
634
+ cache_control: { type: 'ephemeral', ttl: instructionsTtl },
635
+ });
636
+ }
637
+ if (dynamicInstructions) {
638
+ // Dynamic tail: NO cache_control so it doesn't shift the cache prefix.
639
+ content.push({ type: 'text', text: dynamicInstructions });
505
640
  }
641
+ finalInstructions = { content };
642
+ }
643
+ else if (useBedrockCache && (hasAnyCacheBlocks || stableInstructions)) {
644
+ const content = [];
645
+ // Emit each system_cache_blocks entry as text + cachePoint pair.
646
+ for (const block of systemCacheBlocks) {
647
+ if (!block.text)
648
+ continue;
649
+ content.push({ type: 'text', text: block.text });
650
+ content.push({
651
+ cachePoint: { type: 'default', ttl: block.ttl ?? '5m' },
652
+ });
653
+ }
654
+ if (stableInstructions) {
655
+ content.push({ type: 'text', text: stableInstructions });
656
+ content.push({
657
+ cachePoint: { type: 'default', ttl: instructionsTtl },
658
+ });
659
+ }
660
+ if (dynamicInstructions) {
661
+ content.push({ type: 'text', text: dynamicInstructions });
662
+ }
663
+ finalInstructions = { content };
664
+ }
665
+ else {
666
+ finalInstructions = [
667
+ ...systemCacheBlocks.map((b) => b.text),
668
+ stableInstructions,
669
+ dynamicInstructions,
670
+ ]
671
+ .filter((part) => part !== '')
672
+ .join('\n\n');
506
673
  }
507
674
  const systemMessage = new SystemMessage(finalInstructions);
508
675
  // Update token counts (subtract old, add new)
@@ -571,6 +738,45 @@ class AgentContext {
571
738
  this.indexTokenCountMap = { ...baseTokenMap };
572
739
  }
573
740
  }
741
+ /** Active tool definitions for token accounting (excludes deferred-and-undiscovered entries
742
+ * and definitions whose `allowed_callers` exclude `'direct'`). Mirrors the gate
743
+ * `getEventDrivenToolsForBinding` applies so accounting and binding stay aligned. */
744
+ getActiveToolDefinitions() {
745
+ if (!this.toolDefinitions) {
746
+ return [];
747
+ }
748
+ return this.toolDefinitions.filter((def) => {
749
+ const allowedCallers = def.allowed_callers ?? ['direct'];
750
+ if (!allowedCallers.includes('direct')) {
751
+ return false;
752
+ }
753
+ return (def.defer_loading !== true || this.discoveredToolNames.has(def.name));
754
+ });
755
+ }
756
+ /**
757
+ * Single source of truth for "which entries of `this.tools` should be
758
+ * treated as actually bound". Callers:
759
+ * - `getToolsForBinding` (non-event-driven branch)
760
+ * - `getEventDrivenToolsForBinding` (appends instance tools alongside
761
+ * schema-only definitions)
762
+ * - `calculateInstructionTokens` (counts schema bytes for accounting)
763
+ *
764
+ * In event-driven mode (`toolDefinitions` present) instance tools are
765
+ * appended unfiltered; outside event-driven mode they pass through
766
+ * `filterToolsForBinding`. Centralizing the decision here prevents the
767
+ * accounting/binding paths from drifting apart, which was the root
768
+ * cause of the original miscount (Fixes #121).
769
+ */
770
+ getEffectiveInstanceTools() {
771
+ if (!this.tools) {
772
+ return undefined;
773
+ }
774
+ const isEventDriven = (this.toolDefinitions?.length ?? 0) > 0;
775
+ if (isEventDriven || !this.toolRegistry) {
776
+ return this.tools;
777
+ }
778
+ return this.filterToolsForBinding(this.tools);
779
+ }
574
780
  /**
575
781
  * Calculate tool tokens and add to instruction tokens
576
782
  * Note: System message tokens are calculated during systemRunnable creation
@@ -584,9 +790,16 @@ class AgentContext {
584
790
  const countedToolNames = new Set();
585
791
  // Reset per-tool breakdown
586
792
  this.toolsDetail = [];
793
+ /* Use `getEffectiveInstanceTools()` so accounting reflects exactly the
794
+ * subset that `getToolsForBinding` would emit — preventing the
795
+ * worst-case-ceiling miscount that triggered spurious `empty_messages`
796
+ * preflight rejections at low `maxContextTokens`. Deferred and
797
+ * non-`'direct'` `toolDefinitions` are excluded by
798
+ * `getActiveToolDefinitions()` below. */
799
+ const effectiveInstanceTools = this.getEffectiveInstanceTools();
587
800
  // Count tokens for bound tools (StructuredTool instances with .schema)
588
- if (this.tools && this.tools.length > 0) {
589
- for (const tool of this.tools) {
801
+ if (effectiveInstanceTools && effectiveInstanceTools.length > 0) {
802
+ for (const tool of effectiveInstanceTools) {
590
803
  const genericTool = tool;
591
804
  if (genericTool.schema != null &&
592
805
  typeof genericTool.schema === 'object') {
@@ -605,23 +818,25 @@ class AgentContext {
605
818
  // Count tokens for tool definitions (MCP / event-driven tools).
606
819
  // These are sent to the provider API as tool schemas alongside bound tools.
607
820
  // Both can be populated simultaneously (graph tools + MCP tools).
608
- if (this.toolDefinitions && this.toolDefinitions.length > 0) {
609
- for (const def of this.toolDefinitions) {
610
- if (countedToolNames.has(def.name)) {
611
- continue; // Already counted via this.tools
612
- }
613
- const schema = {
614
- name: def.name,
615
- description: def.description ?? '',
616
- parameters: def.parameters ?? {},
617
- };
618
- const defTokens = tokenCounter(new SystemMessage(JSON.stringify(schema)));
619
- this.toolsDetail.push({
620
- name: def.name || 'unknown',
621
- tokens: defTokens,
622
- });
623
- toolTokens += defTokens;
821
+ // Use `getActiveToolDefinitions()` so programmatic-only definitions
822
+ // (e.g. `allowed_callers: ['code_execution']`) and deferred-and-
823
+ // -undiscovered ones don't inflate `toolSchemaTokens` while never
824
+ // being bound to the model.
825
+ for (const def of this.getActiveToolDefinitions()) {
826
+ if (countedToolNames.has(def.name)) {
827
+ continue; // Already counted via this.tools
624
828
  }
829
+ const schema = {
830
+ name: def.name,
831
+ description: def.description ?? '',
832
+ parameters: def.parameters ?? {},
833
+ };
834
+ const defTokens = tokenCounter(new SystemMessage(JSON.stringify(schema)));
835
+ this.toolsDetail.push({
836
+ name: def.name || 'unknown',
837
+ tokens: defTokens,
838
+ });
839
+ toolTokens += defTokens;
625
840
  }
626
841
  // Store total tool tokens for breakdown reporting
627
842
  this.toolTokensTotal = toolTokens;
@@ -753,9 +968,7 @@ class AgentContext {
753
968
  return this.getEventDrivenToolsForBinding();
754
969
  }
755
970
  /** Traditional mode: filter actual tool instances */
756
- const filtered = !this.tools || !this.toolRegistry
757
- ? this.tools
758
- : this.filterToolsForBinding(this.tools);
971
+ const filtered = this.getEffectiveInstanceTools();
759
972
  if (this.graphTools && this.graphTools.length > 0) {
760
973
  return [...(filtered ?? []), ...this.graphTools];
761
974
  }
@@ -766,22 +979,16 @@ class AgentContext {
766
979
  if (!this.toolDefinitions) {
767
980
  return this.graphTools ?? [];
768
981
  }
769
- const defsToInclude = this.toolDefinitions.filter((def) => {
770
- const allowedCallers = def.allowed_callers ?? ['direct'];
771
- if (!allowedCallers.includes('direct')) {
772
- return false;
773
- }
774
- if (def.defer_loading === true &&
775
- !this.discoveredToolNames.has(def.name)) {
776
- return false;
777
- }
778
- return true;
779
- });
780
- const schemaTools = createSchemaOnlyTools(defsToInclude);
982
+ /* Reuse `getActiveToolDefinitions()` so the binding gate matches the
983
+ * accounting filter exactly (single source of truth). */
984
+ const schemaTools = createSchemaOnlyTools(this.getActiveToolDefinitions());
781
985
  const allTools = [...schemaTools];
782
986
  if (this.graphTools && this.graphTools.length > 0) {
783
987
  allTools.push(...this.graphTools);
784
988
  }
989
+ /* In event-driven mode, instance tools are appended UNFILTERED (matching
990
+ * `getEffectiveInstanceTools()`'s event-driven branch). Deferred /
991
+ * non-direct logic is represented in `toolDefinitions`, not here. */
785
992
  if (this.tools && this.tools.length > 0) {
786
993
  allTools.push(...this.tools);
787
994
  }