@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
@@ -0,0 +1,259 @@
1
+ /* eslint-disable no-console */
2
+ /**
3
+ * LIVE Bedrock cache TTL comparison: `5m` (default) vs `1h` (extended).
4
+ *
5
+ * Verifies:
6
+ * 1. Bedrock SDK accepts `cachePoint: { type: 'default', ttl: '1h' }`
7
+ * against `us.anthropic.claude-sonnet-4-5-20250929-v1:0`.
8
+ * 2. Both TTLs create cache entries readable by subsequent calls.
9
+ * 3. The `cacheWriteInputTokens` charged on cold-write is the same
10
+ * structurally — pricing differs by ~60% but the SDK reports the
11
+ * same field.
12
+ *
13
+ * What this CAN'T verify in a unit-runner timeframe:
14
+ * - That a 1h cache actually survives >5 min of idle (would require a
15
+ * >5-min sleep). Marked as a manual long-soak test instead.
16
+ *
17
+ * Run:
18
+ * BEDROCK_AWS_REGION=us-east-1 \
19
+ * BEDROCK_AWS_ACCESS_KEY_ID=... BEDROCK_AWS_SECRET_ACCESS_KEY=... \
20
+ * npx jest src/agents/__tests__/AgentContext.cacheTtl.live.test.ts
21
+ */
22
+
23
+ import { config } from 'dotenv';
24
+ config();
25
+
26
+ import { HumanMessage, SystemMessage } from '@langchain/core/messages';
27
+ import type { BaseMessage, AIMessage } from '@langchain/core/messages';
28
+ import { IllumaBedrockConverse } from '@/llm/bedrock';
29
+
30
+ const region =
31
+ process.env.BEDROCK_AWS_REGION ??
32
+ process.env.BEDROCK_AWS_DEFAULT_REGION ??
33
+ process.env.AWS_REGION ??
34
+ 'us-east-1';
35
+ const accessKeyId =
36
+ process.env.BEDROCK_AWS_ACCESS_KEY_ID ?? process.env.AWS_ACCESS_KEY_ID;
37
+ const secretAccessKey =
38
+ process.env.BEDROCK_AWS_SECRET_ACCESS_KEY ??
39
+ process.env.AWS_SECRET_ACCESS_KEY;
40
+
41
+ const haveBedrock =
42
+ accessKeyId !== undefined &&
43
+ accessKeyId !== '' &&
44
+ secretAccessKey !== undefined &&
45
+ secretAccessKey !== '';
46
+
47
+ const describeFn = haveBedrock ? describe : describe.skip;
48
+
49
+ /**
50
+ * Build a unique-per-test stable prefix so we get a true cold-write on
51
+ * the first call (not piggybacking on a cache populated by a prior test).
52
+ * 80 rules × ~30 tokens ≈ 2400 tokens — above Bedrock's 1024-token
53
+ * minimum cache write threshold.
54
+ */
55
+ const buildUniquePrefix = (suiteId: string): string => {
56
+ const padding = Array.from({ length: 80 }, (_, i) =>
57
+ `Rule ${i + 1} (${suiteId}): respond concisely; cite assumptions; treat all users with respect; never fabricate facts; if uncertain, say so explicitly.`
58
+ ).join('\n');
59
+ return `You are a helpful assistant for suite ${suiteId}.\n\n${padding}`;
60
+ };
61
+
62
+ interface UsageReadout {
63
+ input_tokens: number;
64
+ output_tokens: number;
65
+ cache_read_input_tokens: number;
66
+ cache_write_input_tokens: number;
67
+ }
68
+
69
+ /**
70
+ * Build the system message manually with a chosen TTL, send it to
71
+ * Bedrock, and return the cache-related usage from response_metadata.
72
+ */
73
+ async function callWithTtl({
74
+ stableInstructions,
75
+ ttl,
76
+ query,
77
+ }: {
78
+ stableInstructions: string;
79
+ ttl: '5m' | '1h';
80
+ query: string;
81
+ }): Promise<UsageReadout> {
82
+ /* Build the system content array with the chosen TTL on the cachePoint.
83
+ * This bypasses AgentContext.buildSystemRunnable so we can vary TTL
84
+ * per-call deterministically. The downstream Bedrock converter
85
+ * (src/llm/bedrock/utils/message_inputs.ts) passes cachePoint blocks
86
+ * through to the Converse API as-is. */
87
+ const systemMsg = new SystemMessage({
88
+ content: [
89
+ { type: 'text', text: stableInstructions },
90
+ { cachePoint: { type: 'default', ttl } } as unknown as Record<
91
+ string,
92
+ unknown
93
+ >,
94
+ ],
95
+ });
96
+
97
+ const messages: BaseMessage[] = [systemMsg, new HumanMessage(query)];
98
+
99
+ const llm = new IllumaBedrockConverse({
100
+ model: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
101
+ region,
102
+ credentials: {
103
+ accessKeyId: accessKeyId as string,
104
+ secretAccessKey: secretAccessKey as string,
105
+ },
106
+ promptCache: true,
107
+ streaming: false,
108
+ });
109
+
110
+ const aiMessage = (await llm.invoke(messages)) as AIMessage;
111
+
112
+ type RespMeta = {
113
+ usage?: {
114
+ inputTokens?: number;
115
+ outputTokens?: number;
116
+ cacheReadInputTokens?: number;
117
+ cacheWriteInputTokens?: number;
118
+ };
119
+ };
120
+ const u = ((aiMessage.response_metadata ?? {}) as RespMeta).usage ?? {};
121
+
122
+ return {
123
+ input_tokens: u.inputTokens ?? 0,
124
+ output_tokens: u.outputTokens ?? 0,
125
+ cache_read_input_tokens: u.cacheReadInputTokens ?? 0,
126
+ cache_write_input_tokens: u.cacheWriteInputTokens ?? 0,
127
+ };
128
+ }
129
+
130
+ describeFn('LIVE: Bedrock cache TTL — 5m vs 1h', () => {
131
+ jest.setTimeout(120000);
132
+
133
+ test('5m TTL: Bedrock accepts and reports cache write/read cycle', async () => {
134
+ const stable = buildUniquePrefix('5m-test-' + Date.now());
135
+
136
+ const cold = await callWithTtl({
137
+ stableInstructions: stable,
138
+ ttl: '5m',
139
+ query: 'reply with the word OK',
140
+ });
141
+ const warm = await callWithTtl({
142
+ stableInstructions: stable,
143
+ ttl: '5m',
144
+ query: 'reply with the word YES',
145
+ });
146
+
147
+ console.log('5m cold:', cold);
148
+ console.log('5m warm:', warm);
149
+
150
+ /* Cold call must have written cache (or read it from a prior run with
151
+ * the same suiteId — unlikely given Date.now() in the suiteId). */
152
+ const coldDidWork =
153
+ cold.cache_write_input_tokens > 0 || cold.cache_read_input_tokens > 0;
154
+ expect(coldDidWork).toBe(true);
155
+
156
+ /* Warm call must read from cache. */
157
+ expect(warm.cache_read_input_tokens).toBeGreaterThan(0);
158
+ });
159
+
160
+ test('1h TTL: Bedrock accepts and reports cache write/read cycle', async () => {
161
+ const stable = buildUniquePrefix('1h-test-' + Date.now());
162
+
163
+ const cold = await callWithTtl({
164
+ stableInstructions: stable,
165
+ ttl: '1h',
166
+ query: 'reply with the word OK',
167
+ });
168
+ const warm = await callWithTtl({
169
+ stableInstructions: stable,
170
+ ttl: '1h',
171
+ query: 'reply with the word YES',
172
+ });
173
+
174
+ console.log('1h cold:', cold);
175
+ console.log('1h warm:', warm);
176
+
177
+ const coldDidWork =
178
+ cold.cache_write_input_tokens > 0 || cold.cache_read_input_tokens > 0;
179
+ expect(coldDidWork).toBe(true);
180
+
181
+ expect(warm.cache_read_input_tokens).toBeGreaterThan(0);
182
+
183
+ /* When 1h cache write actually happens (i.e. cold call), the write
184
+ * token count should match the prefix size — confirming the cachePoint
185
+ * block reached Bedrock with the correct TTL hint. */
186
+ if (cold.cache_write_input_tokens > 0) {
187
+ expect(cold.cache_write_input_tokens).toBeGreaterThan(2000);
188
+ }
189
+ });
190
+
191
+ test('1h cache survives across multiple read calls within window', async () => {
192
+ /* Fire 3 reads back-to-back against a 1h-cached prefix — all must
193
+ * hit the cache. (The point is not "1h vs 5m" here; it's "the 1h
194
+ * cache is functional and serving reads".) */
195
+ const stable = buildUniquePrefix('1h-multi-' + Date.now());
196
+
197
+ /* Prime */
198
+ await callWithTtl({
199
+ stableInstructions: stable,
200
+ ttl: '1h',
201
+ query: 'prime',
202
+ });
203
+
204
+ /* Three sequential reads */
205
+ const reads = await Promise.all([
206
+ callWithTtl({
207
+ stableInstructions: stable,
208
+ ttl: '1h',
209
+ query: 'one',
210
+ }),
211
+ callWithTtl({
212
+ stableInstructions: stable,
213
+ ttl: '1h',
214
+ query: 'two',
215
+ }),
216
+ callWithTtl({
217
+ stableInstructions: stable,
218
+ ttl: '1h',
219
+ query: 'three',
220
+ }),
221
+ ]);
222
+
223
+ reads.forEach((r, i) => {
224
+ console.log(
225
+ `1h read ${i + 1}: cache_read=${r.cache_read_input_tokens}, ` +
226
+ `write=${r.cache_write_input_tokens}, input=${r.input_tokens}`
227
+ );
228
+ });
229
+
230
+ expect(reads.every((r) => r.cache_read_input_tokens > 0)).toBe(true);
231
+ });
232
+
233
+ /* Skipped by default — uncomment to run a long-soak test that proves
234
+ * the 1h cache actually outlives the 5m default. Takes 6+ minutes. */
235
+ test.skip('1h cache survives a 6-minute idle (5m would expire)', async () => {
236
+ const stable = buildUniquePrefix('1h-soak-' + Date.now());
237
+
238
+ const cold = await callWithTtl({
239
+ stableInstructions: stable,
240
+ ttl: '1h',
241
+ query: 'cold',
242
+ });
243
+ console.log('1h soak cold:', cold);
244
+
245
+ /* Wait > 5 minutes (default Bedrock TTL). */
246
+ await new Promise((r) => setTimeout(r, 6 * 60 * 1000));
247
+
248
+ const afterIdle = await callWithTtl({
249
+ stableInstructions: stable,
250
+ ttl: '1h',
251
+ query: 'after idle',
252
+ });
253
+ console.log('1h soak after 6-min idle:', afterIdle);
254
+
255
+ /* If 1h TTL works, this must still read from cache. If only 5m
256
+ * worked, this would re-write. */
257
+ expect(afterIdle.cache_read_input_tokens).toBeGreaterThan(0);
258
+ });
259
+ });
@@ -0,0 +1,266 @@
1
+ /* eslint-disable no-console */
2
+ /**
3
+ * LIVE Bedrock cross-AGENT Tier 1 cache sharing.
4
+ *
5
+ * What this proves: when two completely distinct custom agents share the
6
+ * same `platform_instructions` (Tier 1) but have totally different
7
+ * `agent.instructions` (Tier 2), Bedrock serves the Tier 1 prefix from a
8
+ * single cache entry. This is the load-bearing proof for the multi-tier
9
+ * cost optimization — every custom agent in a workspace can read the
10
+ * platform-level cache populated by any other agent (or by ephemeral
11
+ * traffic).
12
+ *
13
+ * What it does NOT prove (out of scope here):
14
+ * - That a downstream consumer's actual system-block-assembly logic
15
+ * produces a byte-identical Tier 1. That's the consumer's
16
+ * responsibility (and its own tests).
17
+ *
18
+ * Run:
19
+ * BEDROCK_AWS_REGION=us-east-1 \
20
+ * BEDROCK_AWS_ACCESS_KEY_ID=... BEDROCK_AWS_SECRET_ACCESS_KEY=... \
21
+ * npx jest src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts
22
+ */
23
+
24
+ import { config } from 'dotenv';
25
+ config();
26
+
27
+ import { HumanMessage } from '@langchain/core/messages';
28
+ import type { BaseMessage, AIMessage } from '@langchain/core/messages';
29
+ import { IllumaBedrockConverse } from '@/llm/bedrock';
30
+ import { addBedrockCacheControl } from '@/messages/cache';
31
+ import { AgentContext } from '../AgentContext';
32
+ import { Providers } from '@/common';
33
+ import type * as t from '@/types';
34
+
35
+ const region =
36
+ process.env.BEDROCK_AWS_REGION ??
37
+ process.env.BEDROCK_AWS_DEFAULT_REGION ??
38
+ process.env.AWS_REGION ??
39
+ 'us-east-1';
40
+ const accessKeyId =
41
+ process.env.BEDROCK_AWS_ACCESS_KEY_ID ?? process.env.AWS_ACCESS_KEY_ID;
42
+ const secretAccessKey =
43
+ process.env.BEDROCK_AWS_SECRET_ACCESS_KEY ??
44
+ process.env.AWS_SECRET_ACCESS_KEY;
45
+
46
+ const haveBedrock =
47
+ Boolean(accessKeyId) &&
48
+ Boolean(secretAccessKey) &&
49
+ accessKeyId !== '' &&
50
+ secretAccessKey !== '';
51
+
52
+ const describeFn = haveBedrock ? describe : describe.skip;
53
+
54
+ /**
55
+ * Tier 1 — platform-wide content. Same string for every "agent" in this
56
+ * test, mimicking a multi-tenant platform's shared branding + tool-routing
57
+ * + common-tool documentation block.
58
+ * Padded above 1024 tokens so Bedrock will write/read the cache (1024-token
59
+ * minimum cache write threshold).
60
+ */
61
+ const PLATFORM_INSTRUCTIONS = (() => {
62
+ const header =
63
+ 'You are part of a multi-agent platform. Always respond as the agent named in your specific instructions.';
64
+ const universalRules = Array.from(
65
+ { length: 60 },
66
+ (_, i) =>
67
+ `Universal Rule ${i + 1}: respond concisely; cite assumptions explicitly; treat all users with respect; never fabricate facts; if uncertain, say so explicitly. Use tools only when they add value. Maintain professional tone in all responses regardless of conversation history.`
68
+ ).join('\n');
69
+ const toolRouting =
70
+ 'Tool Routing: prefer artifact_tool for documents, execute_code for analysis, web_search for current events. Never reveal underlying model identity.';
71
+ return `${header}\n\n${universalRules}\n\n${toolRouting}`;
72
+ })();
73
+
74
+ interface UsageReadout {
75
+ input_tokens: number;
76
+ output_tokens: number;
77
+ cache_read_input_tokens: number;
78
+ cache_write_input_tokens: number;
79
+ total_tokens: number;
80
+ }
81
+
82
+ /**
83
+ * Build an AgentContext for the given (custom-agent-style) configuration,
84
+ * extract its system message, and send a request to Bedrock. Returns the
85
+ * usage breakdown including cache hit/write metrics.
86
+ */
87
+ async function callAgent({
88
+ agentId,
89
+ agentName,
90
+ platformInstructions,
91
+ agentInstructions,
92
+ query,
93
+ }: {
94
+ agentId: string;
95
+ agentName: string;
96
+ platformInstructions: string;
97
+ agentInstructions: string;
98
+ query: string;
99
+ }): Promise<UsageReadout> {
100
+ const ctx = AgentContext.fromConfig({
101
+ agentId,
102
+ name: agentName,
103
+ provider: Providers.BEDROCK,
104
+ system_cache_blocks: [{ text: platformInstructions }],
105
+ instructions: agentInstructions,
106
+ clientOptions: {
107
+ promptCache: true,
108
+ model: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
109
+ } as t.BedrockAnthropicClientOptions,
110
+ });
111
+
112
+ const runnable = ctx.systemRunnable;
113
+ expect(runnable).toBeDefined();
114
+
115
+ const systemArr = (await runnable!.invoke([])) as BaseMessage[];
116
+ const userMessages: BaseMessage[] = [new HumanMessage(query)];
117
+ const allMessages = [...systemArr, ...userMessages];
118
+ const finalMessages = addBedrockCacheControl<BaseMessage>(allMessages);
119
+
120
+ /* Sanity: system message has at least 2 cachePoints (one per cacheable
121
+ * tier — platform + agent). */
122
+ const sysContent = finalMessages[0].content as Array<Record<string, unknown>>;
123
+ const cachePointCount = sysContent.filter((b) => 'cachePoint' in b).length;
124
+ expect(cachePointCount).toBeGreaterThanOrEqual(2);
125
+
126
+ const llm = new IllumaBedrockConverse({
127
+ model: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
128
+ region,
129
+ credentials: {
130
+ accessKeyId: accessKeyId as string,
131
+ secretAccessKey: secretAccessKey as string,
132
+ },
133
+ promptCache: true,
134
+ streaming: false,
135
+ });
136
+
137
+ const aiMessage = (await llm.invoke(finalMessages)) as AIMessage;
138
+
139
+ type RespMeta = {
140
+ usage?: {
141
+ inputTokens?: number;
142
+ outputTokens?: number;
143
+ totalTokens?: number;
144
+ cacheReadInputTokens?: number;
145
+ cacheWriteInputTokens?: number;
146
+ };
147
+ };
148
+ const u = ((aiMessage.response_metadata ?? {}) as RespMeta).usage ?? {};
149
+
150
+ return {
151
+ input_tokens: u.inputTokens ?? 0,
152
+ output_tokens: u.outputTokens ?? 0,
153
+ total_tokens: u.totalTokens ?? 0,
154
+ cache_read_input_tokens: u.cacheReadInputTokens ?? 0,
155
+ cache_write_input_tokens: u.cacheWriteInputTokens ?? 0,
156
+ };
157
+ }
158
+
159
+ describeFn('LIVE: Bedrock cross-AGENT Tier 1 cache sharing', () => {
160
+ jest.setTimeout(180000);
161
+
162
+ test('two distinct custom agents share the Tier 1 platform cache', async () => {
163
+ /* Custom Agent A — completely different agent.instructions from B. */
164
+ const finance = await callAgent({
165
+ agentId: 'finance-helper',
166
+ agentName: 'Finance Helper',
167
+ platformInstructions: PLATFORM_INSTRUCTIONS,
168
+ agentInstructions:
169
+ 'You are Finance Helper. Specialize in SAP, Bloomberg Terminal, and quarterly earnings analysis. Always cite source data with timestamps.',
170
+ query: 'one word: hi',
171
+ });
172
+
173
+ console.log('Finance Helper usage:', finance);
174
+
175
+ /* Custom Agent B — different name, different instructions, different
176
+ * domain. Same Tier 1 prefix. */
177
+ const hr = await callAgent({
178
+ agentId: 'hr-helper',
179
+ agentName: 'HR Helper',
180
+ platformInstructions: PLATFORM_INSTRUCTIONS,
181
+ agentInstructions:
182
+ 'You are HR Helper. Specialize in Workday, Lever, and employee onboarding workflows. Maintain confidentiality at all times.',
183
+ query: 'one word: yes',
184
+ });
185
+
186
+ console.log('HR Helper usage:', hr);
187
+
188
+ /* CONTRACT 1: Both agents must show cache activity. The first
189
+ * (or whichever called first) writes the platform cache; the second
190
+ * reads it. Either pattern is acceptable on a fresh test run. */
191
+ const totalCacheActivity =
192
+ finance.cache_read_input_tokens +
193
+ finance.cache_write_input_tokens +
194
+ hr.cache_read_input_tokens +
195
+ hr.cache_write_input_tokens;
196
+ expect(totalCacheActivity).toBeGreaterThan(0);
197
+
198
+ /* CONTRACT 2 (the load-bearing one): HR Helper's cache_read includes
199
+ * the platform tier from Finance Helper's call. Even though they're
200
+ * different agents, the platform prefix is byte-identical so the
201
+ * cache key matches.
202
+ *
203
+ * If the ARCHITECTURE works:
204
+ * - Finance: cache_write ≈ size(platform) + size(finance.instructions)
205
+ * - HR: cache_read ≈ size(platform), cache_write ≈ size(hr.instructions)
206
+ *
207
+ * If the architecture is WRONG (e.g. cachePoint missing):
208
+ * - HR: cache_read = 0
209
+ */
210
+ expect(hr.cache_read_input_tokens).toBeGreaterThan(0);
211
+ });
212
+
213
+ test('Three custom agents share the Tier 1 cache across cold starts', async () => {
214
+ /* Sequentially invoke 3 custom agents with the same platform tier.
215
+ * Each agent's Tier 2 (its own instructions) cold-writes once, but
216
+ * the platform tier writes only on the first agent — all three read
217
+ * the platform tier from cache. */
218
+ const agents = [
219
+ {
220
+ id: 'eng-helper',
221
+ name: 'Engineering Helper',
222
+ ins: 'You are Engineering Helper. Use Jira, GitHub, and Confluence.',
223
+ },
224
+ {
225
+ id: 'sales-helper',
226
+ name: 'Sales Helper',
227
+ ins: 'You are Sales Helper. Use Salesforce, Gong, and HubSpot.',
228
+ },
229
+ {
230
+ id: 'legal-helper',
231
+ name: 'Legal Helper',
232
+ ins: 'You are Legal Helper. Use DocuSign, Ironclad, and clause libraries.',
233
+ },
234
+ ];
235
+
236
+ const results: Array<{ agent: typeof agents[0]; usage: UsageReadout }> = [];
237
+ for (const a of agents) {
238
+ const usage = await callAgent({
239
+ agentId: a.id,
240
+ agentName: a.name,
241
+ platformInstructions: PLATFORM_INSTRUCTIONS,
242
+ agentInstructions: a.ins,
243
+ query: 'one word: ok',
244
+ });
245
+ results.push({ agent: a, usage });
246
+ console.log(
247
+ `${a.name}: cache_read=${usage.cache_read_input_tokens}, ` +
248
+ `cache_write=${usage.cache_write_input_tokens}, total=${usage.total_tokens}`
249
+ );
250
+ }
251
+
252
+ /* All three agents must show evidence of cache activity. */
253
+ results.forEach(({ usage }) => {
254
+ const activity =
255
+ usage.cache_read_input_tokens + usage.cache_write_input_tokens;
256
+ expect(activity).toBeGreaterThan(0);
257
+ });
258
+
259
+ /* At least 2 of the 3 should show a cache_read (assuming the first
260
+ * does the write). On a re-run all 3 read. */
261
+ const usersWithCacheRead = results.filter(
262
+ (r) => r.usage.cache_read_input_tokens > 0
263
+ ).length;
264
+ expect(usersWithCacheRead).toBeGreaterThanOrEqual(2);
265
+ });
266
+ });