@illuma-ai/agents 1.5.0 → 2.1.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 (424) hide show
  1. package/README.md +0 -62
  2. package/dist/cjs/agents/AgentContext.cjs +159 -258
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/graphs/Graph.cjs +25 -8
  5. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  6. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +1 -5
  7. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  8. package/dist/cjs/llm/bedrock/index.cjs +33 -61
  9. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  10. package/dist/cjs/llm/openai/utils/index.cjs +10 -27
  11. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  12. package/dist/cjs/main.cjs +3 -84
  13. package/dist/cjs/main.cjs.map +1 -1
  14. package/dist/cjs/messages/cache.cjs +0 -89
  15. package/dist/cjs/messages/cache.cjs.map +1 -1
  16. package/dist/cjs/messages/format.cjs +10 -68
  17. package/dist/cjs/messages/format.cjs.map +1 -1
  18. package/dist/cjs/tools/BashExecutor.cjs +11 -21
  19. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  20. package/dist/cjs/tools/CodeExecutor.cjs +10 -37
  21. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  22. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +11 -16
  23. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  24. package/dist/cjs/tools/ToolNode.cjs +73 -8
  25. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  26. package/dist/cjs/tools/search/search.cjs +3 -11
  27. package/dist/cjs/tools/search/search.cjs.map +1 -1
  28. package/dist/cjs/tools/search/tool.cjs +4 -28
  29. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  30. package/dist/cjs/tools/search/utils.cjs +3 -10
  31. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  32. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +48 -0
  33. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  34. package/dist/cjs/types/graph.cjs.map +1 -1
  35. package/dist/esm/agents/AgentContext.mjs +159 -258
  36. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  37. package/dist/esm/graphs/Graph.mjs +25 -8
  38. package/dist/esm/graphs/Graph.mjs.map +1 -1
  39. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +1 -5
  40. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  41. package/dist/esm/llm/bedrock/index.mjs +34 -61
  42. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  43. package/dist/esm/llm/openai/utils/index.mjs +10 -27
  44. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  45. package/dist/esm/main.mjs +1 -5
  46. package/dist/esm/main.mjs.map +1 -1
  47. package/dist/esm/messages/cache.mjs +0 -89
  48. package/dist/esm/messages/cache.mjs.map +1 -1
  49. package/dist/esm/messages/format.mjs +10 -68
  50. package/dist/esm/messages/format.mjs.map +1 -1
  51. package/dist/esm/tools/BashExecutor.mjs +12 -22
  52. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  53. package/dist/esm/tools/CodeExecutor.mjs +11 -37
  54. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  55. package/dist/esm/tools/ProgrammaticToolCalling.mjs +12 -17
  56. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  57. package/dist/esm/tools/ToolNode.mjs +73 -8
  58. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  59. package/dist/esm/tools/search/search.mjs +3 -11
  60. package/dist/esm/tools/search/search.mjs.map +1 -1
  61. package/dist/esm/tools/search/tool.mjs +4 -28
  62. package/dist/esm/tools/search/tool.mjs.map +1 -1
  63. package/dist/esm/tools/search/utils.mjs +3 -10
  64. package/dist/esm/tools/search/utils.mjs.map +1 -1
  65. package/dist/esm/tools/subagent/SubagentExecutor.mjs +48 -0
  66. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  67. package/dist/esm/types/graph.mjs.map +1 -1
  68. package/dist/types/agents/AgentContext.d.ts +25 -95
  69. package/dist/types/index.d.ts +0 -1
  70. package/dist/types/llm/bedrock/index.d.ts +1 -54
  71. package/dist/types/messages/format.d.ts +1 -4
  72. package/dist/types/tools/CodeExecutor.d.ts +0 -6
  73. package/dist/types/tools/search/types.d.ts +5 -99
  74. package/dist/types/tools/search/utils.d.ts +2 -2
  75. package/dist/types/tools/subagent/SubagentExecutor.d.ts +29 -0
  76. package/dist/types/types/graph.d.ts +24 -27
  77. package/dist/types/types/index.d.ts +0 -1
  78. package/dist/types/types/run.d.ts +0 -2
  79. package/dist/types/types/tools.d.ts +0 -9
  80. package/package.json +1 -61
  81. package/src/agents/AgentContext.test.ts +176 -0
  82. package/src/agents/AgentContext.ts +178 -304
  83. package/src/agents/__tests__/AgentContext.test.ts +0 -632
  84. package/src/graphs/Graph.ts +27 -8
  85. package/src/index.ts +0 -6
  86. package/src/llm/anthropic/utils/message_inputs.ts +1 -10
  87. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +18 -166
  88. package/src/llm/bedrock/index.ts +41 -116
  89. package/src/llm/openai/utils/index.ts +14 -31
  90. package/src/messages/cache.test.ts +24 -62
  91. package/src/messages/cache.ts +0 -112
  92. package/src/messages/format.ts +10 -89
  93. package/src/scripts/subagent-configurable-inheritance.ts +263 -0
  94. package/src/specs/anthropic.simple.test.ts +0 -61
  95. package/src/tools/BashExecutor.ts +13 -37
  96. package/src/tools/CodeExecutor.ts +11 -55
  97. package/src/tools/ProgrammaticToolCalling.ts +14 -29
  98. package/src/tools/ToolNode.ts +69 -8
  99. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +0 -60
  100. package/src/tools/__tests__/SubagentExecutor.test.ts +157 -0
  101. package/src/tools/search/search.ts +2 -12
  102. package/src/tools/search/tool.ts +2 -36
  103. package/src/tools/search/types.ts +8 -133
  104. package/src/tools/search/utils.ts +5 -13
  105. package/src/tools/subagent/SubagentExecutor.ts +78 -0
  106. package/src/types/graph.ts +21 -27
  107. package/src/types/index.ts +0 -1
  108. package/src/types/run.ts +0 -2
  109. package/src/types/tools.ts +0 -9
  110. package/dist/cjs/langchain/google-common.cjs +0 -3
  111. package/dist/cjs/langchain/google-common.cjs.map +0 -1
  112. package/dist/cjs/langchain/index.cjs +0 -86
  113. package/dist/cjs/langchain/index.cjs.map +0 -1
  114. package/dist/cjs/langchain/language_models/chat_models.cjs +0 -3
  115. package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
  116. package/dist/cjs/langchain/messages/tool.cjs +0 -3
  117. package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
  118. package/dist/cjs/langchain/messages.cjs +0 -51
  119. package/dist/cjs/langchain/messages.cjs.map +0 -1
  120. package/dist/cjs/langchain/openai.cjs +0 -3
  121. package/dist/cjs/langchain/openai.cjs.map +0 -1
  122. package/dist/cjs/langchain/prompts.cjs +0 -11
  123. package/dist/cjs/langchain/prompts.cjs.map +0 -1
  124. package/dist/cjs/langchain/runnables.cjs +0 -19
  125. package/dist/cjs/langchain/runnables.cjs.map +0 -1
  126. package/dist/cjs/langchain/tools.cjs +0 -23
  127. package/dist/cjs/langchain/tools.cjs.map +0 -1
  128. package/dist/cjs/langchain/utils/env.cjs +0 -11
  129. package/dist/cjs/langchain/utils/env.cjs.map +0 -1
  130. package/dist/cjs/llm/bedrock/cacheSupport.cjs +0 -55
  131. package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +0 -1
  132. package/dist/cjs/tools/search/tavily-scraper.cjs +0 -189
  133. package/dist/cjs/tools/search/tavily-scraper.cjs.map +0 -1
  134. package/dist/cjs/tools/search/tavily-search.cjs +0 -372
  135. package/dist/cjs/tools/search/tavily-search.cjs.map +0 -1
  136. package/dist/cjs/types/agent-cache.cjs +0 -53
  137. package/dist/cjs/types/agent-cache.cjs.map +0 -1
  138. package/dist/esm/langchain/google-common.mjs +0 -2
  139. package/dist/esm/langchain/google-common.mjs.map +0 -1
  140. package/dist/esm/langchain/index.mjs +0 -5
  141. package/dist/esm/langchain/index.mjs.map +0 -1
  142. package/dist/esm/langchain/language_models/chat_models.mjs +0 -2
  143. package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
  144. package/dist/esm/langchain/messages/tool.mjs +0 -2
  145. package/dist/esm/langchain/messages/tool.mjs.map +0 -1
  146. package/dist/esm/langchain/messages.mjs +0 -2
  147. package/dist/esm/langchain/messages.mjs.map +0 -1
  148. package/dist/esm/langchain/openai.mjs +0 -2
  149. package/dist/esm/langchain/openai.mjs.map +0 -1
  150. package/dist/esm/langchain/prompts.mjs +0 -2
  151. package/dist/esm/langchain/prompts.mjs.map +0 -1
  152. package/dist/esm/langchain/runnables.mjs +0 -2
  153. package/dist/esm/langchain/runnables.mjs.map +0 -1
  154. package/dist/esm/langchain/tools.mjs +0 -2
  155. package/dist/esm/langchain/tools.mjs.map +0 -1
  156. package/dist/esm/langchain/utils/env.mjs +0 -2
  157. package/dist/esm/langchain/utils/env.mjs.map +0 -1
  158. package/dist/esm/llm/bedrock/cacheSupport.mjs +0 -52
  159. package/dist/esm/llm/bedrock/cacheSupport.mjs.map +0 -1
  160. package/dist/esm/tools/search/tavily-scraper.mjs +0 -186
  161. package/dist/esm/tools/search/tavily-scraper.mjs.map +0 -1
  162. package/dist/esm/tools/search/tavily-search.mjs +0 -370
  163. package/dist/esm/tools/search/tavily-search.mjs.map +0 -1
  164. package/dist/esm/types/agent-cache.mjs +0 -51
  165. package/dist/esm/types/agent-cache.mjs.map +0 -1
  166. package/dist/types/langchain/google-common.d.ts +0 -1
  167. package/dist/types/langchain/index.d.ts +0 -8
  168. package/dist/types/langchain/language_models/chat_models.d.ts +0 -1
  169. package/dist/types/langchain/messages/tool.d.ts +0 -1
  170. package/dist/types/langchain/messages.d.ts +0 -2
  171. package/dist/types/langchain/openai.d.ts +0 -1
  172. package/dist/types/langchain/prompts.d.ts +0 -1
  173. package/dist/types/langchain/runnables.d.ts +0 -2
  174. package/dist/types/langchain/tools.d.ts +0 -2
  175. package/dist/types/langchain/utils/env.d.ts +0 -1
  176. package/dist/types/llm/bedrock/cacheSupport.d.ts +0 -35
  177. package/dist/types/tools/search/tavily-scraper.d.ts +0 -19
  178. package/dist/types/tools/search/tavily-search.d.ts +0 -4
  179. package/dist/types/tools/subagent/types.d.ts +0 -84
  180. package/dist/types/types/agent-cache.d.ts +0 -70
  181. package/src/agents/AgentContext.js.map +0 -1
  182. package/src/agents/AgentContext.test.js.map +0 -1
  183. package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +0 -259
  184. package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +0 -264
  185. package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +0 -342
  186. package/src/agents/__tests__/AgentContext.test.js.map +0 -1
  187. package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +0 -1
  188. package/src/common/enum.js.map +0 -1
  189. package/src/common/index.js.map +0 -1
  190. package/src/events.js.map +0 -1
  191. package/src/graphs/Graph.js.map +0 -1
  192. package/src/graphs/MultiAgentGraph.js.map +0 -1
  193. package/src/graphs/__tests__/structured-output.integration.test.js.map +0 -1
  194. package/src/graphs/__tests__/structured-output.test.js.map +0 -1
  195. package/src/graphs/contextManagement.e2e.test.js.map +0 -1
  196. package/src/graphs/contextManagement.test.js.map +0 -1
  197. package/src/graphs/handoffValidation.test.js.map +0 -1
  198. package/src/graphs/index.js.map +0 -1
  199. package/src/index.js.map +0 -1
  200. package/src/instrumentation.js.map +0 -1
  201. package/src/langchain/google-common.ts +0 -1
  202. package/src/langchain/index.ts +0 -8
  203. package/src/langchain/language_models/chat_models.ts +0 -1
  204. package/src/langchain/messages/tool.ts +0 -5
  205. package/src/langchain/messages.ts +0 -21
  206. package/src/langchain/openai.ts +0 -1
  207. package/src/langchain/prompts.ts +0 -1
  208. package/src/langchain/runnables.ts +0 -7
  209. package/src/langchain/tools.ts +0 -8
  210. package/src/langchain/utils/env.ts +0 -1
  211. package/src/llm/anthropic/index.js.map +0 -1
  212. package/src/llm/anthropic/types.js.map +0 -1
  213. package/src/llm/anthropic/utils/message_inputs.js.map +0 -1
  214. package/src/llm/anthropic/utils/message_outputs.js.map +0 -1
  215. package/src/llm/anthropic/utils/output_parsers.js.map +0 -1
  216. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +0 -436
  217. package/src/llm/anthropic/utils/tools.js.map +0 -1
  218. package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +0 -1
  219. package/src/llm/bedrock/cacheSupport.test.ts +0 -99
  220. package/src/llm/bedrock/cacheSupport.ts +0 -53
  221. package/src/llm/bedrock/index.js.map +0 -1
  222. package/src/llm/bedrock/types.js.map +0 -1
  223. package/src/llm/bedrock/utils/index.js.map +0 -1
  224. package/src/llm/bedrock/utils/message_inputs.js.map +0 -1
  225. package/src/llm/bedrock/utils/message_outputs.js.map +0 -1
  226. package/src/llm/fake.js.map +0 -1
  227. package/src/llm/google/index.js.map +0 -1
  228. package/src/llm/google/types.js.map +0 -1
  229. package/src/llm/google/utils/common.js.map +0 -1
  230. package/src/llm/google/utils/tools.js.map +0 -1
  231. package/src/llm/google/utils/zod_to_genai_parameters.js.map +0 -1
  232. package/src/llm/openai/index.js.map +0 -1
  233. package/src/llm/openai/types.js.map +0 -1
  234. package/src/llm/openai/utils/index.js.map +0 -1
  235. package/src/llm/openai/utils/isReasoningModel.test.js.map +0 -1
  236. package/src/llm/openrouter/index.js.map +0 -1
  237. package/src/llm/openrouter/reasoning.test.js.map +0 -1
  238. package/src/llm/providers.js.map +0 -1
  239. package/src/llm/text.js.map +0 -1
  240. package/src/llm/vertexai/index.js.map +0 -1
  241. package/src/messages/__tests__/tools.test.js.map +0 -1
  242. package/src/messages/cache.js.map +0 -1
  243. package/src/messages/cache.test.js.map +0 -1
  244. package/src/messages/content.js.map +0 -1
  245. package/src/messages/content.test.js.map +0 -1
  246. package/src/messages/core.js.map +0 -1
  247. package/src/messages/ensureThinkingBlock.test.js.map +0 -1
  248. package/src/messages/format.js.map +0 -1
  249. package/src/messages/formatAgentMessages.test.js.map +0 -1
  250. package/src/messages/formatAgentMessages.tools.test.js.map +0 -1
  251. package/src/messages/formatMessage.test.js.map +0 -1
  252. package/src/messages/ids.js.map +0 -1
  253. package/src/messages/index.js.map +0 -1
  254. package/src/messages/labelContentByAgent.test.js.map +0 -1
  255. package/src/messages/prune.js.map +0 -1
  256. package/src/messages/reducer.js.map +0 -1
  257. package/src/messages/shiftIndexTokenCountMap.test.js.map +0 -1
  258. package/src/messages/summarize.js.map +0 -1
  259. package/src/messages/summarize.test.js.map +0 -1
  260. package/src/messages/tools.js.map +0 -1
  261. package/src/mockStream.js.map +0 -1
  262. package/src/prompts/collab.js.map +0 -1
  263. package/src/prompts/index.js.map +0 -1
  264. package/src/prompts/taskmanager.js.map +0 -1
  265. package/src/run.js.map +0 -1
  266. package/src/schemas/index.js.map +0 -1
  267. package/src/schemas/schema-preparation.test.js.map +0 -1
  268. package/src/schemas/validate.js.map +0 -1
  269. package/src/schemas/validate.test.js.map +0 -1
  270. package/src/scripts/abort.js.map +0 -1
  271. package/src/scripts/ant_web_search.js.map +0 -1
  272. package/src/scripts/ant_web_search_edge_case.js.map +0 -1
  273. package/src/scripts/ant_web_search_error_edge_case.js.map +0 -1
  274. package/src/scripts/args.js.map +0 -1
  275. package/src/scripts/bedrock-cache-debug.js.map +0 -1
  276. package/src/scripts/bedrock-content-aggregation-test.js.map +0 -1
  277. package/src/scripts/bedrock-merge-test.js.map +0 -1
  278. package/src/scripts/bedrock-parallel-tools-test.js.map +0 -1
  279. package/src/scripts/caching.js.map +0 -1
  280. package/src/scripts/cli.js.map +0 -1
  281. package/src/scripts/cli2.js.map +0 -1
  282. package/src/scripts/cli3.js.map +0 -1
  283. package/src/scripts/cli4.js.map +0 -1
  284. package/src/scripts/cli5.js.map +0 -1
  285. package/src/scripts/code_exec.js.map +0 -1
  286. package/src/scripts/code_exec_files.js.map +0 -1
  287. package/src/scripts/code_exec_multi_session.js.map +0 -1
  288. package/src/scripts/code_exec_ptc.js.map +0 -1
  289. package/src/scripts/code_exec_session.js.map +0 -1
  290. package/src/scripts/code_exec_simple.js.map +0 -1
  291. package/src/scripts/content.js.map +0 -1
  292. package/src/scripts/empty_input.js.map +0 -1
  293. package/src/scripts/handoff-test.js.map +0 -1
  294. package/src/scripts/image.js.map +0 -1
  295. package/src/scripts/memory.js.map +0 -1
  296. package/src/scripts/multi-agent-chain.js.map +0 -1
  297. package/src/scripts/multi-agent-conditional.js.map +0 -1
  298. package/src/scripts/multi-agent-document-review-chain.js.map +0 -1
  299. package/src/scripts/multi-agent-hybrid-flow.js.map +0 -1
  300. package/src/scripts/multi-agent-parallel-start.js.map +0 -1
  301. package/src/scripts/multi-agent-parallel.js.map +0 -1
  302. package/src/scripts/multi-agent-sequence.js.map +0 -1
  303. package/src/scripts/multi-agent-supervisor.js.map +0 -1
  304. package/src/scripts/multi-agent-test.js.map +0 -1
  305. package/src/scripts/parallel-asymmetric-tools-test.js.map +0 -1
  306. package/src/scripts/parallel-full-metadata-test.js.map +0 -1
  307. package/src/scripts/parallel-tools-test.js.map +0 -1
  308. package/src/scripts/programmatic_exec.js.map +0 -1
  309. package/src/scripts/programmatic_exec_agent.js.map +0 -1
  310. package/src/scripts/search.js.map +0 -1
  311. package/src/scripts/sequential-full-metadata-test.js.map +0 -1
  312. package/src/scripts/simple.js.map +0 -1
  313. package/src/scripts/single-agent-metadata-test.js.map +0 -1
  314. package/src/scripts/stream.js.map +0 -1
  315. package/src/scripts/test-custom-prompt-key.js.map +0 -1
  316. package/src/scripts/test-handoff-input.js.map +0 -1
  317. package/src/scripts/test-handoff-preamble.js.map +0 -1
  318. package/src/scripts/test-handoff-steering.js.map +0 -1
  319. package/src/scripts/test-multi-agent-list-handoff.js.map +0 -1
  320. package/src/scripts/test-parallel-agent-labeling.js.map +0 -1
  321. package/src/scripts/test-parallel-handoffs.js.map +0 -1
  322. package/src/scripts/test-thinking-handoff-bedrock.js.map +0 -1
  323. package/src/scripts/test-thinking-handoff.js.map +0 -1
  324. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +0 -1
  325. package/src/scripts/test-tool-before-handoff-role-order.js.map +0 -1
  326. package/src/scripts/test-tools-before-handoff.js.map +0 -1
  327. package/src/scripts/test_code_api.js.map +0 -1
  328. package/src/scripts/thinking-bedrock.js.map +0 -1
  329. package/src/scripts/thinking-vertexai.js.map +0 -1
  330. package/src/scripts/thinking.js.map +0 -1
  331. package/src/scripts/tool_search.js.map +0 -1
  332. package/src/scripts/tools.js.map +0 -1
  333. package/src/specs/agent-handoffs-bedrock.integration.test.js.map +0 -1
  334. package/src/specs/agent-handoffs.test.js.map +0 -1
  335. package/src/specs/anthropic.simple.test.js.map +0 -1
  336. package/src/specs/azure.simple.test.js.map +0 -1
  337. package/src/specs/cache.simple.test.js.map +0 -1
  338. package/src/specs/custom-event-await.test.js.map +0 -1
  339. package/src/specs/deepseek.simple.test.js.map +0 -1
  340. package/src/specs/emergency-prune.test.js.map +0 -1
  341. package/src/specs/moonshot.simple.test.js.map +0 -1
  342. package/src/specs/observability.integration.test.js.map +0 -1
  343. package/src/specs/openai.simple.test.js.map +0 -1
  344. package/src/specs/openrouter.simple.test.js.map +0 -1
  345. package/src/specs/prune.test.js.map +0 -1
  346. package/src/specs/reasoning.test.js.map +0 -1
  347. package/src/specs/spec.utils.js.map +0 -1
  348. package/src/specs/thinking-handoff.test.js.map +0 -1
  349. package/src/specs/thinking-prune.test.js.map +0 -1
  350. package/src/specs/token-distribution-edge-case.test.js.map +0 -1
  351. package/src/specs/token-memoization.test.js.map +0 -1
  352. package/src/specs/tokens.test.js.map +0 -1
  353. package/src/specs/tool-error.test.js.map +0 -1
  354. package/src/splitStream.js.map +0 -1
  355. package/src/splitStream.test.js.map +0 -1
  356. package/src/stream.js.map +0 -1
  357. package/src/stream.test.js.map +0 -1
  358. package/src/test/mockTools.js.map +0 -1
  359. package/src/tools/BrowserTools.js.map +0 -1
  360. package/src/tools/Calculator.js.map +0 -1
  361. package/src/tools/Calculator.test.js.map +0 -1
  362. package/src/tools/CodeExecutor.js.map +0 -1
  363. package/src/tools/ProgrammaticToolCalling.js.map +0 -1
  364. package/src/tools/StreamingToolCallBuffer.js.map +0 -1
  365. package/src/tools/ToolNode.js.map +0 -1
  366. package/src/tools/ToolSearch.js.map +0 -1
  367. package/src/tools/__tests__/BrowserTools.test.js.map +0 -1
  368. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +0 -1
  369. package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +0 -1
  370. package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +0 -1
  371. package/src/tools/__tests__/ToolApproval.test.js.map +0 -1
  372. package/src/tools/__tests__/ToolNode.recovery.test.js.map +0 -1
  373. package/src/tools/__tests__/ToolNode.session.test.js.map +0 -1
  374. package/src/tools/__tests__/ToolSearch.integration.test.js.map +0 -1
  375. package/src/tools/__tests__/ToolSearch.test.js.map +0 -1
  376. package/src/tools/__tests__/handlers.test.js.map +0 -1
  377. package/src/tools/__tests__/truncation-recovery.integration.test.js.map +0 -1
  378. package/src/tools/handlers.js.map +0 -1
  379. package/src/tools/schema.js.map +0 -1
  380. package/src/tools/search/anthropic.js.map +0 -1
  381. package/src/tools/search/content.js.map +0 -1
  382. package/src/tools/search/content.test.js.map +0 -1
  383. package/src/tools/search/firecrawl.js.map +0 -1
  384. package/src/tools/search/format.js.map +0 -1
  385. package/src/tools/search/highlights.js.map +0 -1
  386. package/src/tools/search/index.js.map +0 -1
  387. package/src/tools/search/jina-reranker.test.js.map +0 -1
  388. package/src/tools/search/rerankers.js.map +0 -1
  389. package/src/tools/search/schema.js.map +0 -1
  390. package/src/tools/search/search.js.map +0 -1
  391. package/src/tools/search/serper-scraper.js.map +0 -1
  392. package/src/tools/search/tavily-scraper.ts +0 -235
  393. package/src/tools/search/tavily-search.ts +0 -424
  394. package/src/tools/search/tavily.test.ts +0 -965
  395. package/src/tools/search/test.js.map +0 -1
  396. package/src/tools/search/tool.js.map +0 -1
  397. package/src/tools/search/types.js.map +0 -1
  398. package/src/tools/search/utils.js.map +0 -1
  399. package/src/tools/subagent/types.test.ts +0 -70
  400. package/src/tools/subagent/types.ts +0 -115
  401. package/src/types/agent-cache.ts +0 -73
  402. package/src/types/graph.js.map +0 -1
  403. package/src/types/graph.test.js.map +0 -1
  404. package/src/types/index.js.map +0 -1
  405. package/src/types/llm.js.map +0 -1
  406. package/src/types/messages.js.map +0 -1
  407. package/src/types/run.js.map +0 -1
  408. package/src/types/stream.js.map +0 -1
  409. package/src/types/tools.js.map +0 -1
  410. package/src/utils/contextAnalytics.js.map +0 -1
  411. package/src/utils/contextAnalytics.test.js.map +0 -1
  412. package/src/utils/events.js.map +0 -1
  413. package/src/utils/graph.js.map +0 -1
  414. package/src/utils/handlers.js.map +0 -1
  415. package/src/utils/index.js.map +0 -1
  416. package/src/utils/llm.js.map +0 -1
  417. package/src/utils/llmConfig.js.map +0 -1
  418. package/src/utils/logging.js.map +0 -1
  419. package/src/utils/misc.js.map +0 -1
  420. package/src/utils/run.js.map +0 -1
  421. package/src/utils/schema.js.map +0 -1
  422. package/src/utils/title.js.map +0 -1
  423. package/src/utils/tokens.js.map +0 -1
  424. package/src/utils/toonFormat.js.map +0 -1
@@ -83,9 +83,6 @@ interface LangChainMessage {
83
83
  * @returns - The formatted LangChain message.
84
84
  */
85
85
  export declare const formatFromLangChain: (message: LangChainMessage) => Record<string, any>;
86
- interface FormatAgentMessagesOptions {
87
- provider?: Providers;
88
- }
89
86
  /**
90
87
  * Groups content parts by agent and formats them with agent labels
91
88
  * This preprocesses multi-agent content to prevent identity confusion
@@ -113,7 +110,7 @@ export declare const labelContentByAgent: (contentParts: MessageContentComplex[]
113
110
  * ToolMessage. Upstream PRs #96 / #97.
114
111
  * @returns - Object containing formatted messages and updated indexTokenCountMap if provided.
115
112
  */
116
- export declare const formatAgentMessages: (payload: TPayload, indexTokenCountMap?: Record<number, number | undefined>, tools?: Set<string>, skills?: Map<string, string>, options?: FormatAgentMessagesOptions) => {
113
+ export declare const formatAgentMessages: (payload: TPayload, indexTokenCountMap?: Record<number, number | undefined>, tools?: Set<string>, skills?: Map<string, string>) => {
117
114
  messages: Array<HumanMessage | AIMessage | SystemMessage | ToolMessage>;
118
115
  indexTokenCountMap?: Record<number, number>;
119
116
  };
@@ -3,12 +3,6 @@ import type * as t from '@/types';
3
3
  import { Constants } from '@/common';
4
4
  export declare const imageExtRegex: RegExp;
5
5
  export declare const getCodeBaseURL: () => string;
6
- /**
7
- * Renders one section of the post-execution file listing. Used by the
8
- * code/bash tool formatters to keep generated outputs and inherited
9
- * inputs visually separated. See BashExecutor for full docs.
10
- */
11
- export declare function renderFileSection(header: string, files: t.FileRefs, defaultMessage: string): string;
12
6
  export declare const CodeExecutionToolSchema: {
13
7
  readonly type: "object";
14
8
  readonly properties: {
@@ -2,8 +2,8 @@ import type { Logger as WinstonLogger } from 'winston';
2
2
  import type { RunnableConfig } from '@langchain/core/runnables';
3
3
  import type { BaseReranker } from './rerankers';
4
4
  import { DATE_RANGE } from './schema';
5
- export type SearchProvider = 'serper' | 'searxng' | 'tavily';
6
- export type ScraperProvider = 'firecrawl' | 'serper' | 'tavily';
5
+ export type SearchProvider = 'serper' | 'searxng';
6
+ export type ScraperProvider = 'firecrawl' | 'serper';
7
7
  export type RerankerType = 'infinity' | 'jina' | 'cohere' | 'none';
8
8
  export interface Highlight {
9
9
  score: number;
@@ -56,50 +56,11 @@ export interface Source {
56
56
  snippet?: string;
57
57
  date?: string;
58
58
  }
59
- export type TavilyTimeRange = 'day' | 'week' | 'month' | 'year';
60
- export type TavilyTimeRangeInput = TavilyTimeRange | 'h' | 'd' | 'w' | 'm' | 'y';
61
- export interface TavilySearchOptions {
62
- searchDepth?: 'basic' | 'advanced' | 'fast' | 'ultra-fast';
63
- maxResults?: number;
64
- includeImages?: boolean;
65
- includeAnswer?: boolean | 'basic' | 'advanced';
66
- includeRawContent?: boolean | 'markdown' | 'text';
67
- includeDomains?: string[];
68
- excludeDomains?: string[];
69
- topic?: 'general' | 'news' | 'finance';
70
- timeRange?: TavilyTimeRangeInput;
71
- includeImageDescriptions?: boolean;
72
- includeFavicon?: boolean;
73
- chunksPerSource?: number;
74
- safeSearch?: boolean;
75
- timeout?: number;
76
- }
77
- export interface TavilySearchPayload {
78
- query: string;
79
- search_depth: NonNullable<TavilySearchOptions['searchDepth']>;
80
- topic: NonNullable<TavilySearchOptions['topic']>;
81
- max_results: number;
82
- safe_search?: boolean;
83
- time_range?: TavilyTimeRange;
84
- country?: string;
85
- include_images?: boolean;
86
- include_answer?: NonNullable<TavilySearchOptions['includeAnswer']>;
87
- include_raw_content?: NonNullable<TavilySearchOptions['includeRawContent']>;
88
- include_domains?: string[];
89
- exclude_domains?: string[];
90
- include_image_descriptions?: boolean;
91
- include_favicon?: boolean;
92
- chunks_per_source?: number;
93
- }
94
59
  export interface SearchConfig {
95
60
  searchProvider?: SearchProvider;
96
61
  serperApiKey?: string;
97
62
  searxngInstanceUrl?: string;
98
63
  searxngApiKey?: string;
99
- tavilyApiKey?: string;
100
- tavilySearchUrl?: string;
101
- tavilyExtractUrl?: string;
102
- tavilySearchOptions?: TavilySearchOptions;
103
64
  /** Domains to exclude from search results (e.g., 'reddit.com', 'twitter.com').
104
65
  * Appended as -site: operators to the search query. */
105
66
  domainBlocklist?: string[];
@@ -140,16 +101,6 @@ export interface SerperScraperConfig {
140
101
  logger?: Logger;
141
102
  includeMarkdown?: boolean;
142
103
  }
143
- export interface TavilyScraperConfig {
144
- apiKey?: string;
145
- apiUrl?: string;
146
- timeout?: number;
147
- logger?: Logger;
148
- extractDepth?: 'basic' | 'advanced';
149
- includeImages?: boolean;
150
- includeFavicon?: boolean;
151
- format?: 'markdown' | 'text';
152
- }
153
104
  export interface ScraperContentResult {
154
105
  content: string;
155
106
  }
@@ -190,7 +141,6 @@ export interface CohereRerankerResponse {
190
141
  export type SafeSearchLevel = 0 | 1 | 2;
191
142
  export type Logger = WinstonLogger;
192
143
  export interface SearchToolConfig extends SearchConfig, ProcessSourcesConfig, FirecrawlConfig {
193
- tavilyScraperOptions?: TavilyScraperConfig;
194
144
  logger?: Logger;
195
145
  safeSearch?: SafeSearchLevel;
196
146
  jinaApiKey?: string;
@@ -213,27 +163,15 @@ export type UsedReferences = {
213
163
  originalIndex: number;
214
164
  reference: MediaReference;
215
165
  }[];
216
- export type AnyScraperResponse = FirecrawlScrapeResponse | SerperScrapeResponse | TavilyScrapeResponse;
217
166
  /** Base Scraper Interface */
218
167
  export interface BaseScraper {
219
- scrapeUrl(url: string, options?: unknown): Promise<[string, AnyScraperResponse]>;
220
- scrapeUrls?(urls: string[], options?: unknown): Promise<Array<[string, AnyScraperResponse]>>;
221
- extractContent(response: AnyScraperResponse): [string, undefined | References];
222
- extractMetadata(response: AnyScraperResponse): ScrapeMetadata | GenericScrapeMetadata;
168
+ scrapeUrl(url: string, options?: unknown): Promise<[string, FirecrawlScrapeResponse | SerperScrapeResponse]>;
169
+ extractContent(response: FirecrawlScrapeResponse | SerperScrapeResponse): [string, undefined | References];
170
+ extractMetadata(response: FirecrawlScrapeResponse | SerperScrapeResponse): ScrapeMetadata | Record<string, string | number | boolean | null | undefined>;
223
171
  }
224
172
  /** Firecrawl */
225
173
  export type FirecrawlScrapeOptions = Omit<FirecrawlScraperConfig, 'apiKey' | 'apiUrl' | 'version' | 'logger'>;
226
174
  export type SerperScrapeOptions = Omit<SerperScraperConfig, 'apiKey' | 'apiUrl' | 'logger'>;
227
- export type TavilyScrapeOptions = Omit<TavilyScraperConfig, 'apiKey' | 'apiUrl' | 'logger'>;
228
- export interface TavilyExtractPayload {
229
- urls: string[];
230
- extract_depth: NonNullable<TavilyScraperConfig['extractDepth']>;
231
- include_images: boolean;
232
- include_favicon?: boolean;
233
- format?: NonNullable<TavilyScraperConfig['format']>;
234
- timeout?: number;
235
- }
236
- export type GenericScrapeMetadata = Record<string, string | number | boolean | null | undefined>;
237
175
  export interface ScrapeMetadata {
238
176
  sourceURL?: string;
239
177
  url?: string;
@@ -309,38 +247,6 @@ export interface SerperScrapeResponse {
309
247
  };
310
248
  error?: string;
311
249
  }
312
- export interface TavilyScrapeResponse {
313
- success: boolean;
314
- data?: {
315
- rawContent?: string;
316
- images?: string[];
317
- favicon?: string;
318
- };
319
- error?: string;
320
- }
321
- export interface TavilySearchResult {
322
- title?: string;
323
- url?: string;
324
- content?: string;
325
- score?: number;
326
- published_date?: string;
327
- }
328
- export type TavilyImageResult = string | {
329
- url?: string;
330
- description?: string;
331
- };
332
- export interface TavilySearchResponse {
333
- answer?: string;
334
- images?: TavilyImageResult[];
335
- results?: TavilySearchResult[];
336
- }
337
- export interface TavilyExtractResult {
338
- url: string;
339
- raw_content?: string;
340
- images?: string[];
341
- favicon?: string;
342
- error?: string;
343
- }
344
250
  export interface FirecrawlScraperConfig {
345
251
  apiKey?: string;
346
252
  apiUrl?: string;
@@ -6,5 +6,5 @@ import type * as t from './types';
6
6
  */
7
7
  export declare const createDefaultLogger: () => t.Logger;
8
8
  export declare const fileExtRegex: RegExp;
9
- export declare const getDomainName: (link: string, metadata?: t.ScrapeMetadata | t.GenericScrapeMetadata, logger?: t.Logger) => string | undefined;
10
- export declare function getAttribution(link: string, metadata?: t.ScrapeMetadata | t.GenericScrapeMetadata, logger?: t.Logger): string | undefined;
9
+ export declare const getDomainName: (link: string, metadata?: t.ScrapeMetadata, logger?: t.Logger) => string | undefined;
10
+ export declare function getAttribution(link: string, metadata?: t.ScrapeMetadata, logger?: t.Logger): string | undefined;
@@ -15,6 +15,35 @@ export type SubagentExecuteParams = {
15
15
  * without relying on event ordering heuristics.
16
16
  */
17
17
  parentToolCallId?: string;
18
+ /**
19
+ * Snapshot of the parent invocation's `config.configurable` at the
20
+ * spawn-tool call site. Inherited verbatim into the child workflow's
21
+ * `configurable` so host-set fields (`requestBody`, `user`,
22
+ * `userMCPAuthMap`, etc.) propagate — fixing MCP body-placeholder
23
+ * substitution and per-user lookups for subagent tool calls.
24
+ *
25
+ * Inheritance details (verified empirically against LangGraph):
26
+ * - host-set keys propagate as-is into the child's tool dispatches;
27
+ * - `thread_id` propagates (with `childRunId` as a fallback when
28
+ * parent did not supply one) — matches the "subagent is part of
29
+ * the same conversation" mental model and aligns with the
30
+ * `sessionId: this.parentRunId` convention this executor already
31
+ * uses for `SubagentStart` / `SubagentStop` hooks;
32
+ * - `parent_run_id` propagates when the host put it on parent's
33
+ * configurable;
34
+ * - `run_id` is *overwritten by the LangGraph runtime* at child
35
+ * invoke time regardless of what we forward — child's tool
36
+ * dispatches see the child graph's runtime runId in
37
+ * `configurable.run_id`, not the parent's. Hosts that need
38
+ * parent-scoped run identity for downstream consumers should
39
+ * plumb it via a host-defined key (e.g. `requestBody.messageId`),
40
+ * not `run_id`.
41
+ *
42
+ * A future revision will likely make this inheritance configurable
43
+ * per spawn type — background / async subagents may want isolation
44
+ * rather than sharing parent's host context.
45
+ */
46
+ parentConfigurable?: Record<string, unknown>;
18
47
  };
19
48
  export type SubagentExecuteResult = {
20
49
  content: string;
@@ -10,7 +10,6 @@ import type { StandardGraph, MultiAgentGraph } from '@/graphs';
10
10
  import type { ClientOptions } from '@/types/llm';
11
11
  import type { RunStep, RunStepDeltaEvent, MessageDeltaEvent, ReasoningDeltaEvent } from '@/types/stream';
12
12
  import type { TokenCounter } from '@/types/run';
13
- import type { SystemCacheBlock, AgentCacheTTL } from '@/types/agent-cache';
14
13
  /** Interface for bound model with stream and invoke methods */
15
14
  export interface ChatModel {
16
15
  stream?: (messages: BaseMessage[], config?: RunnableConfig) => Promise<AsyncIterable<AIMessageChunk>>;
@@ -568,36 +567,10 @@ export interface AgentInputs {
568
567
  toolMap?: ToolMap;
569
568
  tools?: GraphTools;
570
569
  provider: Providers;
571
- /**
572
- * Ordered list of cacheable system content blocks emitted BEFORE
573
- * `instructions` in the system message. Each block gets its own cache
574
- * marker (cachePoint on Bedrock, cache_control on Anthropic) so the
575
- * cache key for each block includes only the bytes up to and including
576
- * its own marker. Entries are emitted in array order — earlier =
577
- * stabler = wider cache key (best for cross-tenant sharing).
578
- *
579
- * See `src/types/agent-cache.ts` for full semantics. Capped at
580
- * `MAX_SYSTEM_CACHE_BLOCKS` (2) entries to stay within Bedrock's
581
- * 4-cachePoint budget after the tools array consumes 2.
582
- */
583
- system_cache_blocks?: SystemCacheBlock[];
584
- /**
585
- * Stable/cacheable system instructions for this agent. Always emitted
586
- * with its own trailing cache marker (when caching is supported by
587
- * the provider/model). Use `instructions_cache_ttl` to override the
588
- * default '5m' TTL.
589
- */
590
570
  instructions?: string;
591
- /** TTL for the trailing `instructions` cache marker. Defaults to '5m'. */
592
- instructions_cache_ttl?: AgentCacheTTL;
593
571
  streamBuffer?: number;
594
572
  maxContextTokens?: number;
595
573
  clientOptions?: ClientOptions;
596
- /**
597
- * Dynamic system tail appended after the cacheable instructions
598
- * without any cache marker. Per-user / per-message context belongs
599
- * here so it does not invalidate the cacheable prefix.
600
- */
601
574
  additional_instructions?: string;
602
575
  reasoningKey?: 'reasoning_content' | 'reasoning';
603
576
  /**
@@ -688,6 +661,30 @@ export interface AgentInputs {
688
661
  * @see SummarizationConfig
689
662
  */
690
663
  summarizationConfig?: SummarizationConfig;
664
+ /**
665
+ * Workspace-shared system-message tiers. Each entry becomes a separate
666
+ * text block in the SystemMessage with its own cachePoint / cache_control
667
+ * marker, allowing the platform-tier bytes (e.g. shared branding, tool
668
+ * routing rules, code-executor instructions) to be hashed independently
669
+ * from the per-agent `instructions` block. Hosts that don't use tiered
670
+ * caching can leave this undefined; behavior falls back to the legacy
671
+ * single SystemMessage.
672
+ *
673
+ * Anthropic / Bedrock prompt-cache lookups are forward-prefix-hash, so
674
+ * blocks are emitted in array order BEFORE `instructions`. Up to 4 blocks
675
+ * are supported (the LLM cap on cache breakpoints).
676
+ */
677
+ system_cache_blocks?: Array<{
678
+ text: string;
679
+ ttl?: '5m' | '1h';
680
+ }>;
681
+ /**
682
+ * TTL hint for the per-agent `instructions` block's cache marker.
683
+ * Defaults to '5m' (matching addCacheControl message-level behavior).
684
+ * Only consulted when `system_cache_blocks` is set; otherwise the
685
+ * legacy SystemMessage path is unchanged.
686
+ */
687
+ instructions_cache_ttl?: '5m' | '1h';
691
688
  /**
692
689
  * Lightweight file manifest for the conversation.
693
690
  * Contains file IDs, names, and metadata — NOT full content.
@@ -1,4 +1,3 @@
1
- export * from './agent-cache';
2
1
  export * from './graph';
3
2
  export * from './llm';
4
3
  export * from './messages';
@@ -62,9 +62,7 @@ export interface AgentStateChannels {
62
62
  messages: BaseMessage[];
63
63
  next: string;
64
64
  [key: string]: unknown;
65
- /** Stable/cacheable system instructions for this agent. */
66
65
  instructions?: string;
67
- /** Dynamic system tail appended after stable instructions. */
68
66
  additional_instructions?: string;
69
67
  }
70
68
  export interface Member {
@@ -123,15 +123,6 @@ export type FileRef = {
123
123
  path?: string;
124
124
  /** Session ID this file belongs to (for multi-session file tracking) */
125
125
  session_id?: string;
126
- /**
127
- * `true` when the codeapi sandbox echoed this entry as an unchanged
128
- * passthrough of an input the caller already owns (skill files,
129
- * downloaded inputs whose hash matched the baseline, inherited
130
- * `.dirkeep` markers). The tool-result formatter renders these as
131
- * "Available files" rather than "Generated files" so the LLM doesn't
132
- * conflate infrastructure inputs with newly-produced outputs.
133
- */
134
- inherited?: true;
135
126
  };
136
127
  export type FileRefs = FileRef[];
137
128
  export type ExecuteResult = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@illuma-ai/agents",
3
- "version": "1.5.0",
3
+ "version": "2.1.1",
4
4
  "main": "./dist/cjs/main.cjs",
5
5
  "module": "./dist/esm/main.mjs",
6
6
  "types": "./dist/types/index.d.ts",
@@ -9,66 +9,6 @@
9
9
  "import": "./dist/esm/main.mjs",
10
10
  "require": "./dist/cjs/main.cjs",
11
11
  "types": "./dist/types/index.d.ts"
12
- },
13
- "./langchain": {
14
- "import": "./dist/esm/langchain/index.mjs",
15
- "require": "./dist/cjs/langchain/index.cjs",
16
- "types": "./dist/types/langchain/index.d.ts"
17
- },
18
- "./langchain/language_models/chat_models": {
19
- "import": "./dist/esm/langchain/language_models/chat_models.mjs",
20
- "require": "./dist/cjs/langchain/language_models/chat_models.cjs",
21
- "types": "./dist/types/langchain/language_models/chat_models.d.ts"
22
- },
23
- "./langchain/messages": {
24
- "import": "./dist/esm/langchain/messages.mjs",
25
- "require": "./dist/cjs/langchain/messages.cjs",
26
- "types": "./dist/types/langchain/messages.d.ts"
27
- },
28
- "./langchain/messages/tool": {
29
- "import": "./dist/esm/langchain/messages/tool.mjs",
30
- "require": "./dist/cjs/langchain/messages/tool.cjs",
31
- "types": "./dist/types/langchain/messages/tool.d.ts"
32
- },
33
- "./langchain/google-common": {
34
- "import": "./dist/esm/langchain/google-common.mjs",
35
- "require": "./dist/cjs/langchain/google-common.cjs",
36
- "types": "./dist/types/langchain/google-common.d.ts"
37
- },
38
- "./langchain/openai": {
39
- "import": "./dist/esm/langchain/openai.mjs",
40
- "require": "./dist/cjs/langchain/openai.cjs",
41
- "types": "./dist/types/langchain/openai.d.ts"
42
- },
43
- "./langchain/prompts": {
44
- "import": "./dist/esm/langchain/prompts.mjs",
45
- "require": "./dist/cjs/langchain/prompts.cjs",
46
- "types": "./dist/types/langchain/prompts.d.ts"
47
- },
48
- "./langchain/runnables": {
49
- "import": "./dist/esm/langchain/runnables.mjs",
50
- "require": "./dist/cjs/langchain/runnables.cjs",
51
- "types": "./dist/types/langchain/runnables.d.ts"
52
- },
53
- "./langchain/tools": {
54
- "import": "./dist/esm/langchain/tools.mjs",
55
- "require": "./dist/cjs/langchain/tools.cjs",
56
- "types": "./dist/types/langchain/tools.d.ts"
57
- },
58
- "./langchain/utils/env": {
59
- "import": "./dist/esm/langchain/utils/env.mjs",
60
- "require": "./dist/cjs/langchain/utils/env.cjs",
61
- "types": "./dist/types/langchain/utils/env.d.ts"
62
- }
63
- },
64
- "typesVersions": {
65
- "*": {
66
- "langchain": [
67
- "dist/types/langchain/index.d.ts"
68
- ],
69
- "langchain/*": [
70
- "dist/types/langchain/*"
71
- ]
72
12
  }
73
13
  },
74
14
  "type": "module",
@@ -455,4 +455,180 @@ describe('AgentContext', () => {
455
455
  expect(mockCallback).toHaveBeenCalledTimes(1);
456
456
  });
457
457
  });
458
+
459
+ describe('system_cache_blocks (tiered prompt cache)', () => {
460
+ /**
461
+ * `buildSystemRunnable` is private, so we exercise it via the public
462
+ * `initializeSystemRunnable` method and inspect the SystemMessage that
463
+ * gets prepended by the resulting runnable.
464
+ */
465
+ const extractSystemMessage = async (context: AgentContext) => {
466
+ context.initializeSystemRunnable();
467
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
468
+ const runnable = (context as unknown as { cachedSystemRunnable: any })
469
+ .cachedSystemRunnable;
470
+ if (!runnable) return undefined;
471
+ const result = await runnable.invoke([]);
472
+ return result[0];
473
+ };
474
+
475
+ it('stores systemCacheBlocks and instructionsCacheTtl on context', () => {
476
+ const config: t.AgentInputs = {
477
+ agentId: 'tier-test',
478
+ provider: Providers.BEDROCK,
479
+ clientOptions: { model: 'anthropic.claude-3-5-sonnet-20241022-v2:0' },
480
+ instructions: 'agent specific',
481
+ system_cache_blocks: [
482
+ { text: 'platform tier text', ttl: '5m' },
483
+ ],
484
+ instructions_cache_ttl: '1h',
485
+ };
486
+ const context = AgentContext.fromConfig(config);
487
+ expect(context.systemCacheBlocks).toEqual([
488
+ { text: 'platform tier text', ttl: '5m' },
489
+ ]);
490
+ expect(context.instructionsCacheTtl).toBe('1h');
491
+ });
492
+
493
+ it('emits multi-block SystemMessage with single cachePoint after Tier 1 for Bedrock Claude', async () => {
494
+ const config: t.AgentInputs = {
495
+ agentId: 'bedrock-claude',
496
+ provider: Providers.BEDROCK,
497
+ clientOptions: {
498
+ model: 'anthropic.claude-3-5-sonnet-20241022-v2:0',
499
+ promptCache: true,
500
+ } as t.BedrockAnthropicClientOptions,
501
+ instructions: 'AGENT_TIER_2',
502
+ system_cache_blocks: [{ text: 'PLATFORM_TIER_1' }],
503
+ };
504
+ const context = AgentContext.fromConfig(config);
505
+ const systemMessage = await extractSystemMessage(context);
506
+ expect(systemMessage).toBeDefined();
507
+ const content = systemMessage?.content as Array<Record<string, unknown>>;
508
+ expect(Array.isArray(content)).toBe(true);
509
+ // Only the platform tier gets an explicit cachePoint; the trailing
510
+ // per-agent block is uncached at the system layer (tools breakpoint
511
+ // covers it via forward-prefix-hash).
512
+ expect(content).toEqual([
513
+ { type: 'text', text: 'PLATFORM_TIER_1' },
514
+ { cachePoint: { type: 'default' } },
515
+ { type: 'text', text: expect.stringContaining('AGENT_TIER_2') },
516
+ ]);
517
+ });
518
+
519
+ it('emits cache_control on Tier 1 text block only for Anthropic with promptCache=true', async () => {
520
+ const config: t.AgentInputs = {
521
+ agentId: 'anthropic-direct',
522
+ provider: Providers.ANTHROPIC,
523
+ clientOptions: {
524
+ model: 'claude-3-5-sonnet-20241022',
525
+ promptCache: true,
526
+ } as t.AnthropicClientOptions,
527
+ instructions: 'AGENT_TIER_2',
528
+ system_cache_blocks: [{ text: 'PLATFORM_TIER_1' }],
529
+ };
530
+ const context = AgentContext.fromConfig(config);
531
+ const systemMessage = await extractSystemMessage(context);
532
+ const content = systemMessage?.content as Array<Record<string, unknown>>;
533
+ expect(content).toEqual([
534
+ {
535
+ type: 'text',
536
+ text: 'PLATFORM_TIER_1',
537
+ cache_control: { type: 'ephemeral' },
538
+ },
539
+ {
540
+ type: 'text',
541
+ text: expect.stringContaining('AGENT_TIER_2'),
542
+ },
543
+ ]);
544
+ });
545
+
546
+ it('falls back to single string SystemMessage for Bedrock Nova (no cachePoint support)', async () => {
547
+ const config: t.AgentInputs = {
548
+ agentId: 'bedrock-nova',
549
+ provider: Providers.BEDROCK,
550
+ clientOptions: {
551
+ model: 'amazon.nova-pro-v1:0',
552
+ promptCache: true,
553
+ } as unknown as t.BedrockAnthropicClientOptions,
554
+ instructions: 'AGENT_TIER_2',
555
+ system_cache_blocks: [{ text: 'PLATFORM_TIER_1' }],
556
+ };
557
+ const context = AgentContext.fromConfig(config);
558
+ const systemMessage = await extractSystemMessage(context);
559
+ // Non-Claude Bedrock: tiered emission disabled, content stays string
560
+ expect(typeof systemMessage?.content).toBe('string');
561
+ expect(systemMessage?.content).toContain('AGENT_TIER_2');
562
+ // platform tier is NOT in the system message because the lib can't
563
+ // emit a cachePoint for it on Nova; ranger's quick-patch puts the
564
+ // bytes into `instructions` for Nova-style providers.
565
+ expect(systemMessage?.content).not.toContain('PLATFORM_TIER_1');
566
+ });
567
+
568
+ it('falls back to single string for Bedrock Claude when promptCache is false', async () => {
569
+ const config: t.AgentInputs = {
570
+ agentId: 'bedrock-claude-nopc',
571
+ provider: Providers.BEDROCK,
572
+ clientOptions: {
573
+ model: 'anthropic.claude-3-5-sonnet-20241022-v2:0',
574
+ promptCache: false,
575
+ } as t.BedrockAnthropicClientOptions,
576
+ instructions: 'AGENT_TIER_2',
577
+ system_cache_blocks: [{ text: 'PLATFORM_TIER_1' }],
578
+ };
579
+ const context = AgentContext.fromConfig(config);
580
+ const systemMessage = await extractSystemMessage(context);
581
+ expect(typeof systemMessage?.content).toBe('string');
582
+ });
583
+
584
+ it('preserves legacy single-block Anthropic caching when no system_cache_blocks set', async () => {
585
+ const config: t.AgentInputs = {
586
+ agentId: 'anthropic-legacy',
587
+ provider: Providers.ANTHROPIC,
588
+ clientOptions: {
589
+ model: 'claude-3-5-sonnet-20241022',
590
+ promptCache: true,
591
+ } as t.AnthropicClientOptions,
592
+ instructions: 'AGENT_INSTR',
593
+ };
594
+ const context = AgentContext.fromConfig(config);
595
+ const systemMessage = await extractSystemMessage(context);
596
+ const content = systemMessage?.content as Array<Record<string, unknown>>;
597
+ expect(content).toEqual([
598
+ {
599
+ type: 'text',
600
+ text: expect.stringContaining('AGENT_INSTR'),
601
+ cache_control: { type: 'ephemeral' },
602
+ },
603
+ ]);
604
+ });
605
+
606
+ it('emits multiple Tier 1 text blocks but only ONE cachePoint at the boundary', async () => {
607
+ const config: t.AgentInputs = {
608
+ agentId: 'multi-tier',
609
+ provider: Providers.BEDROCK,
610
+ clientOptions: {
611
+ model: 'anthropic.claude-3-5-sonnet-20241022-v2:0',
612
+ promptCache: true,
613
+ } as t.BedrockAnthropicClientOptions,
614
+ instructions: 'PER_AGENT',
615
+ system_cache_blocks: [
616
+ { text: 'TIER1_PLATFORM' },
617
+ { text: 'TIER1_CAPABILITIES' },
618
+ ],
619
+ };
620
+ const context = AgentContext.fromConfig(config);
621
+ const systemMessage = await extractSystemMessage(context);
622
+ const content = systemMessage?.content as Array<Record<string, unknown>>;
623
+ // Multiple Tier 1 entries collapse into the same cached prefix —
624
+ // only one cachePoint is emitted (at the Tier1→Tier2 boundary) so
625
+ // we don't blow the 4-breakpoint cap from Anthropic/Bedrock.
626
+ expect(content).toEqual([
627
+ { type: 'text', text: 'TIER1_PLATFORM' },
628
+ { type: 'text', text: 'TIER1_CAPABILITIES' },
629
+ { cachePoint: { type: 'default' } },
630
+ { type: 'text', text: expect.stringContaining('PER_AGENT') },
631
+ ]);
632
+ });
633
+ });
458
634
  });