@librechat/agents 3.2.32 → 3.2.34

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 (597) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/dist/cjs/agents/AgentContext.cjs +844 -1046
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/constants.cjs +13 -13
  5. package/dist/cjs/common/constants.cjs.map +1 -1
  6. package/dist/cjs/common/enum.cjs +233 -240
  7. package/dist/cjs/common/enum.cjs.map +1 -1
  8. package/dist/cjs/common/index.cjs +2 -0
  9. package/dist/cjs/events.cjs +121 -169
  10. package/dist/cjs/events.cjs.map +1 -1
  11. package/dist/cjs/graphs/Graph.cjs +1389 -1807
  12. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  13. package/dist/cjs/graphs/MultiAgentGraph.cjs +713 -945
  14. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  15. package/dist/cjs/graphs/index.cjs +2 -0
  16. package/dist/cjs/hitl/askUserQuestion.cjs +60 -62
  17. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  18. package/dist/cjs/hitl/index.cjs +1 -0
  19. package/dist/cjs/hooks/HookRegistry.cjs +176 -202
  20. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  21. package/dist/cjs/hooks/createToolPolicyHook.cjs +71 -101
  22. package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
  23. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +170 -273
  24. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  25. package/dist/cjs/hooks/executeHooks.cjs +227 -282
  26. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  27. package/dist/cjs/hooks/index.cjs +6 -0
  28. package/dist/cjs/hooks/matchers.cjs +196 -230
  29. package/dist/cjs/hooks/matchers.cjs.map +1 -1
  30. package/dist/cjs/hooks/types.cjs +24 -24
  31. package/dist/cjs/hooks/types.cjs.map +1 -1
  32. package/dist/cjs/instrumentation.cjs +110 -137
  33. package/dist/cjs/instrumentation.cjs.map +1 -1
  34. package/dist/cjs/langchain/google-common.cjs +0 -3
  35. package/dist/cjs/langchain/index.cjs +80 -43
  36. package/dist/cjs/langchain/language_models/chat_models.cjs +0 -3
  37. package/dist/cjs/langchain/messages/tool.cjs +0 -3
  38. package/dist/cjs/langchain/messages.cjs +35 -18
  39. package/dist/cjs/langchain/openai.cjs +0 -3
  40. package/dist/cjs/langchain/prompts.cjs +5 -8
  41. package/dist/cjs/langchain/runnables.cjs +11 -10
  42. package/dist/cjs/langchain/tools.cjs +14 -11
  43. package/dist/cjs/langchain/utils/env.cjs +5 -8
  44. package/dist/cjs/langfuse.cjs +60 -79
  45. package/dist/cjs/langfuse.cjs.map +1 -1
  46. package/dist/cjs/langfuseToolOutputTracing.cjs +267 -399
  47. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  48. package/dist/cjs/llm/anthropic/index.cjs +432 -562
  49. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  50. package/dist/cjs/llm/anthropic/types.cjs +23 -47
  51. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  52. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +441 -731
  53. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -256
  55. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  56. package/dist/cjs/llm/anthropic/utils/output_parsers.cjs +2 -0
  57. package/dist/cjs/llm/anthropic/utils/tools.cjs +12 -26
  58. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  59. package/dist/cjs/llm/bedrock/index.cjs +214 -240
  60. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  61. package/dist/cjs/llm/bedrock/toolCache.cjs +84 -106
  62. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  63. package/dist/cjs/llm/bedrock/utils/index.cjs +2 -0
  64. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +357 -620
  65. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  66. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +141 -149
  67. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
  68. package/dist/cjs/llm/fake.cjs +86 -96
  69. package/dist/cjs/llm/fake.cjs.map +1 -1
  70. package/dist/cjs/llm/google/index.cjs +183 -237
  71. package/dist/cjs/llm/google/index.cjs.map +1 -1
  72. package/dist/cjs/llm/google/utils/common.cjs +404 -674
  73. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  74. package/dist/cjs/llm/google/utils/zod_to_genai_parameters.cjs +2 -0
  75. package/dist/cjs/llm/init.cjs +44 -53
  76. package/dist/cjs/llm/init.cjs.map +1 -1
  77. package/dist/cjs/llm/invoke.cjs +142 -182
  78. package/dist/cjs/llm/invoke.cjs.map +1 -1
  79. package/dist/cjs/llm/openai/index.cjs +1035 -1273
  80. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  81. package/dist/cjs/llm/openai/utils/index.cjs +189 -316
  82. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  83. package/dist/cjs/llm/openrouter/index.cjs +102 -153
  84. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  85. package/dist/cjs/llm/openrouter/toolCache.cjs +35 -44
  86. package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
  87. package/dist/cjs/llm/providers.cjs +29 -37
  88. package/dist/cjs/llm/providers.cjs.map +1 -1
  89. package/dist/cjs/llm/request.cjs +20 -33
  90. package/dist/cjs/llm/request.cjs.map +1 -1
  91. package/dist/cjs/llm/vertexai/index.cjs +446 -453
  92. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  93. package/dist/cjs/main.cjs +547 -528
  94. package/dist/cjs/messages/anthropicToolCache.cjs +68 -119
  95. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
  96. package/dist/cjs/messages/cache.cjs +305 -418
  97. package/dist/cjs/messages/cache.cjs.map +1 -1
  98. package/dist/cjs/messages/content.cjs +36 -49
  99. package/dist/cjs/messages/content.cjs.map +1 -1
  100. package/dist/cjs/messages/contextPruning.cjs +112 -145
  101. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  102. package/dist/cjs/messages/contextPruningSettings.cjs +36 -46
  103. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
  104. package/dist/cjs/messages/core.cjs +256 -397
  105. package/dist/cjs/messages/core.cjs.map +1 -1
  106. package/dist/cjs/messages/format.cjs +904 -1387
  107. package/dist/cjs/messages/format.cjs.map +1 -1
  108. package/dist/cjs/messages/ids.cjs +16 -20
  109. package/dist/cjs/messages/ids.cjs.map +1 -1
  110. package/dist/cjs/messages/index.cjs +12 -0
  111. package/dist/cjs/messages/langchain.cjs +18 -18
  112. package/dist/cjs/messages/langchain.cjs.map +1 -1
  113. package/dist/cjs/messages/prune.cjs +1054 -1517
  114. package/dist/cjs/messages/prune.cjs.map +1 -1
  115. package/dist/cjs/messages/recency.cjs +77 -95
  116. package/dist/cjs/messages/recency.cjs.map +1 -1
  117. package/dist/cjs/messages/reducer.cjs +63 -78
  118. package/dist/cjs/messages/reducer.cjs.map +1 -1
  119. package/dist/cjs/messages/tools.cjs +51 -79
  120. package/dist/cjs/messages/tools.cjs.map +1 -1
  121. package/dist/cjs/openai/index.cjs +171 -217
  122. package/dist/cjs/openai/index.cjs.map +1 -1
  123. package/dist/cjs/responses/index.cjs +302 -391
  124. package/dist/cjs/responses/index.cjs.map +1 -1
  125. package/dist/cjs/run.cjs +903 -1113
  126. package/dist/cjs/run.cjs.map +1 -1
  127. package/dist/cjs/session/AgentSession.cjs +805 -986
  128. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  129. package/dist/cjs/session/JsonlSessionStore.cjs +327 -410
  130. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  131. package/dist/cjs/session/handlers.cjs +192 -208
  132. package/dist/cjs/session/handlers.cjs.map +1 -1
  133. package/dist/cjs/session/ids.cjs +9 -10
  134. package/dist/cjs/session/ids.cjs.map +1 -1
  135. package/dist/cjs/session/index.cjs +4 -0
  136. package/dist/cjs/session/messageSerialization.cjs +94 -156
  137. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  138. package/dist/cjs/splitStream.cjs +147 -206
  139. package/dist/cjs/splitStream.cjs.map +1 -1
  140. package/dist/cjs/stream.cjs +874 -1344
  141. package/dist/cjs/stream.cjs.map +1 -1
  142. package/dist/cjs/summarization/index.cjs +57 -101
  143. package/dist/cjs/summarization/index.cjs.map +1 -1
  144. package/dist/cjs/summarization/node.cjs +643 -796
  145. package/dist/cjs/summarization/node.cjs.map +1 -1
  146. package/dist/cjs/tools/BashExecutor.cjs +110 -136
  147. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  148. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +165 -245
  149. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  150. package/dist/cjs/tools/Calculator.cjs +36 -57
  151. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  152. package/dist/cjs/tools/CodeExecutor.cjs +126 -168
  153. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  154. package/dist/cjs/tools/CodeSessionFileSummary.cjs +36 -46
  155. package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
  156. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +459 -649
  157. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  158. package/dist/cjs/tools/ReadFile.cjs +17 -20
  159. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  160. package/dist/cjs/tools/SkillTool.cjs +26 -27
  161. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  162. package/dist/cjs/tools/SubagentTool.cjs +59 -61
  163. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  164. package/dist/cjs/tools/ToolNode.cjs +2146 -2686
  165. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  166. package/dist/cjs/tools/ToolSearch.cjs +663 -825
  167. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  168. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +248 -340
  169. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
  170. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +170 -197
  171. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
  172. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +425 -520
  173. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  174. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +91 -124
  175. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  176. package/dist/cjs/tools/cloudflare/index.cjs +4 -0
  177. package/dist/cjs/tools/eagerEventExecution.cjs +75 -99
  178. package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
  179. package/dist/cjs/tools/handlers.cjs +200 -262
  180. package/dist/cjs/tools/handlers.cjs.map +1 -1
  181. package/dist/cjs/tools/local/CompileCheckTool.cjs +150 -212
  182. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  183. package/dist/cjs/tools/local/FileCheckpointer.cjs +77 -85
  184. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  185. package/dist/cjs/tools/local/LocalCodingTools.cjs +763 -1022
  186. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  187. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +666 -941
  188. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  189. package/dist/cjs/tools/local/LocalExecutionTools.cjs +49 -92
  190. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  191. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +286 -354
  192. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  193. package/dist/cjs/tools/local/attachments.cjs +108 -165
  194. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  195. package/dist/cjs/tools/local/bashAst.cjs +99 -113
  196. package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
  197. package/dist/cjs/tools/local/editStrategies.cjs +126 -169
  198. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
  199. package/dist/cjs/tools/local/index.cjs +12 -0
  200. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +136 -218
  201. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  202. package/dist/cjs/tools/local/syntaxCheck.cjs +142 -161
  203. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
  204. package/dist/cjs/tools/local/textEncoding.cjs +25 -23
  205. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
  206. package/dist/cjs/tools/local/workspaceFS.cjs +38 -46
  207. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
  208. package/dist/cjs/tools/ptcTimeout.cjs +27 -47
  209. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  210. package/dist/cjs/tools/schema.cjs +24 -23
  211. package/dist/cjs/tools/schema.cjs.map +1 -1
  212. package/dist/cjs/tools/search/anthropic.cjs +24 -33
  213. package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
  214. package/dist/cjs/tools/search/content.cjs +95 -137
  215. package/dist/cjs/tools/search/content.cjs.map +1 -1
  216. package/dist/cjs/tools/search/firecrawl.cjs +141 -172
  217. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  218. package/dist/cjs/tools/search/format.cjs +128 -196
  219. package/dist/cjs/tools/search/format.cjs.map +1 -1
  220. package/dist/cjs/tools/search/highlights.cjs +165 -232
  221. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  222. package/dist/cjs/tools/search/index.cjs +2 -0
  223. package/dist/cjs/tools/search/rerankers.cjs +151 -174
  224. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  225. package/dist/cjs/tools/search/schema.cjs +40 -39
  226. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  227. package/dist/cjs/tools/search/search.cjs +428 -530
  228. package/dist/cjs/tools/search/search.cjs.map +1 -1
  229. package/dist/cjs/tools/search/serper-scraper.cjs +106 -127
  230. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  231. package/dist/cjs/tools/search/tavily-scraper.cjs +129 -181
  232. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  233. package/dist/cjs/tools/search/tavily-search.cjs +295 -359
  234. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  235. package/dist/cjs/tools/search/tool.cjs +260 -299
  236. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  237. package/dist/cjs/tools/search/utils.cjs +74 -117
  238. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  239. package/dist/cjs/tools/skillCatalog.cjs +54 -72
  240. package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
  241. package/dist/cjs/tools/streamedToolCallSeals.cjs +46 -34
  242. package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
  243. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +612 -771
  244. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  245. package/dist/cjs/tools/subagent/index.cjs +1 -0
  246. package/dist/cjs/tools/toolOutputReferences.cjs +523 -630
  247. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  248. package/dist/cjs/utils/callbacks.cjs +11 -21
  249. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  250. package/dist/cjs/utils/errors.cjs +70 -95
  251. package/dist/cjs/utils/errors.cjs.map +1 -1
  252. package/dist/cjs/utils/events.cjs +32 -42
  253. package/dist/cjs/utils/events.cjs.map +1 -1
  254. package/dist/cjs/utils/graph.cjs +8 -12
  255. package/dist/cjs/utils/graph.cjs.map +1 -1
  256. package/dist/cjs/utils/handlers.cjs +60 -82
  257. package/dist/cjs/utils/handlers.cjs.map +1 -1
  258. package/dist/cjs/utils/index.cjs +9 -0
  259. package/dist/cjs/utils/llm.cjs +19 -27
  260. package/dist/cjs/utils/llm.cjs.map +1 -1
  261. package/dist/cjs/utils/misc.cjs +30 -46
  262. package/dist/cjs/utils/misc.cjs.map +1 -1
  263. package/dist/cjs/utils/run.cjs +50 -66
  264. package/dist/cjs/utils/run.cjs.map +1 -1
  265. package/dist/cjs/utils/schema.cjs +11 -19
  266. package/dist/cjs/utils/schema.cjs.map +1 -1
  267. package/dist/cjs/utils/title.cjs +71 -106
  268. package/dist/cjs/utils/title.cjs.map +1 -1
  269. package/dist/cjs/utils/tokens.cjs +186 -283
  270. package/dist/cjs/utils/tokens.cjs.map +1 -1
  271. package/dist/cjs/utils/truncation.cjs +95 -114
  272. package/dist/cjs/utils/truncation.cjs.map +1 -1
  273. package/dist/esm/agents/AgentContext.mjs +844 -1044
  274. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  275. package/dist/esm/common/constants.mjs +13 -11
  276. package/dist/esm/common/constants.mjs.map +1 -1
  277. package/dist/esm/common/enum.mjs +221 -238
  278. package/dist/esm/common/enum.mjs.map +1 -1
  279. package/dist/esm/common/index.mjs +3 -0
  280. package/dist/esm/events.mjs +121 -167
  281. package/dist/esm/events.mjs.map +1 -1
  282. package/dist/esm/graphs/Graph.mjs +1388 -1804
  283. package/dist/esm/graphs/Graph.mjs.map +1 -1
  284. package/dist/esm/graphs/MultiAgentGraph.mjs +713 -943
  285. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  286. package/dist/esm/graphs/index.mjs +3 -0
  287. package/dist/esm/hitl/askUserQuestion.mjs +60 -60
  288. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  289. package/dist/esm/hitl/index.mjs +2 -0
  290. package/dist/esm/hooks/HookRegistry.mjs +176 -200
  291. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  292. package/dist/esm/hooks/createToolPolicyHook.mjs +71 -99
  293. package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
  294. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +170 -271
  295. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  296. package/dist/esm/hooks/executeHooks.mjs +227 -280
  297. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  298. package/dist/esm/hooks/index.mjs +7 -0
  299. package/dist/esm/hooks/matchers.mjs +196 -228
  300. package/dist/esm/hooks/matchers.mjs.map +1 -1
  301. package/dist/esm/hooks/types.mjs +24 -22
  302. package/dist/esm/hooks/types.mjs.map +1 -1
  303. package/dist/esm/instrumentation.mjs +109 -132
  304. package/dist/esm/instrumentation.mjs.map +1 -1
  305. package/dist/esm/langchain/google-common.mjs +1 -2
  306. package/dist/esm/langchain/index.mjs +5 -5
  307. package/dist/esm/langchain/language_models/chat_models.mjs +1 -2
  308. package/dist/esm/langchain/messages/tool.mjs +1 -2
  309. package/dist/esm/langchain/messages.mjs +2 -2
  310. package/dist/esm/langchain/openai.mjs +1 -2
  311. package/dist/esm/langchain/prompts.mjs +2 -2
  312. package/dist/esm/langchain/runnables.mjs +2 -2
  313. package/dist/esm/langchain/tools.mjs +2 -2
  314. package/dist/esm/langchain/utils/env.mjs +2 -2
  315. package/dist/esm/langfuse.mjs +60 -76
  316. package/dist/esm/langfuse.mjs.map +1 -1
  317. package/dist/esm/langfuseToolOutputTracing.mjs +267 -395
  318. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  319. package/dist/esm/llm/anthropic/index.mjs +432 -559
  320. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  321. package/dist/esm/llm/anthropic/types.mjs +23 -45
  322. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  323. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +439 -725
  324. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  325. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -253
  326. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  327. package/dist/esm/llm/anthropic/utils/output_parsers.mjs +3 -0
  328. package/dist/esm/llm/anthropic/utils/tools.mjs +12 -24
  329. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  330. package/dist/esm/llm/bedrock/index.mjs +214 -238
  331. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  332. package/dist/esm/llm/bedrock/toolCache.mjs +84 -104
  333. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  334. package/dist/esm/llm/bedrock/utils/index.mjs +3 -0
  335. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +357 -618
  336. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  337. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +140 -147
  338. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
  339. package/dist/esm/llm/fake.mjs +86 -94
  340. package/dist/esm/llm/fake.mjs.map +1 -1
  341. package/dist/esm/llm/google/index.mjs +183 -235
  342. package/dist/esm/llm/google/index.mjs.map +1 -1
  343. package/dist/esm/llm/google/utils/common.mjs +403 -666
  344. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  345. package/dist/esm/llm/google/utils/zod_to_genai_parameters.mjs +3 -0
  346. package/dist/esm/llm/init.mjs +44 -51
  347. package/dist/esm/llm/init.mjs.map +1 -1
  348. package/dist/esm/llm/invoke.mjs +142 -180
  349. package/dist/esm/llm/invoke.mjs.map +1 -1
  350. package/dist/esm/llm/openai/index.mjs +1035 -1268
  351. package/dist/esm/llm/openai/index.mjs.map +1 -1
  352. package/dist/esm/llm/openai/utils/index.mjs +188 -312
  353. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  354. package/dist/esm/llm/openrouter/index.mjs +102 -151
  355. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  356. package/dist/esm/llm/openrouter/toolCache.mjs +35 -42
  357. package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
  358. package/dist/esm/llm/providers.mjs +29 -34
  359. package/dist/esm/llm/providers.mjs.map +1 -1
  360. package/dist/esm/llm/request.mjs +20 -31
  361. package/dist/esm/llm/request.mjs.map +1 -1
  362. package/dist/esm/llm/vertexai/index.mjs +446 -449
  363. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  364. package/dist/esm/main.mjs +99 -87
  365. package/dist/esm/messages/anthropicToolCache.mjs +68 -117
  366. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
  367. package/dist/esm/messages/cache.mjs +305 -416
  368. package/dist/esm/messages/cache.mjs.map +1 -1
  369. package/dist/esm/messages/content.mjs +36 -47
  370. package/dist/esm/messages/content.mjs.map +1 -1
  371. package/dist/esm/messages/contextPruning.mjs +112 -143
  372. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  373. package/dist/esm/messages/contextPruningSettings.mjs +36 -44
  374. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
  375. package/dist/esm/messages/core.mjs +254 -393
  376. package/dist/esm/messages/core.mjs.map +1 -1
  377. package/dist/esm/messages/format.mjs +902 -1383
  378. package/dist/esm/messages/format.mjs.map +1 -1
  379. package/dist/esm/messages/ids.mjs +16 -18
  380. package/dist/esm/messages/ids.mjs.map +1 -1
  381. package/dist/esm/messages/index.mjs +13 -0
  382. package/dist/esm/messages/langchain.mjs +18 -16
  383. package/dist/esm/messages/langchain.mjs.map +1 -1
  384. package/dist/esm/messages/prune.mjs +1053 -1514
  385. package/dist/esm/messages/prune.mjs.map +1 -1
  386. package/dist/esm/messages/recency.mjs +77 -93
  387. package/dist/esm/messages/recency.mjs.map +1 -1
  388. package/dist/esm/messages/reducer.mjs +63 -76
  389. package/dist/esm/messages/reducer.mjs.map +1 -1
  390. package/dist/esm/messages/tools.mjs +49 -75
  391. package/dist/esm/messages/tools.mjs.map +1 -1
  392. package/dist/esm/openai/index.mjs +170 -215
  393. package/dist/esm/openai/index.mjs.map +1 -1
  394. package/dist/esm/responses/index.mjs +301 -389
  395. package/dist/esm/responses/index.mjs.map +1 -1
  396. package/dist/esm/run.mjs +903 -1111
  397. package/dist/esm/run.mjs.map +1 -1
  398. package/dist/esm/session/AgentSession.mjs +806 -985
  399. package/dist/esm/session/AgentSession.mjs.map +1 -1
  400. package/dist/esm/session/JsonlSessionStore.mjs +326 -407
  401. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  402. package/dist/esm/session/handlers.mjs +192 -206
  403. package/dist/esm/session/handlers.mjs.map +1 -1
  404. package/dist/esm/session/ids.mjs +9 -8
  405. package/dist/esm/session/ids.mjs.map +1 -1
  406. package/dist/esm/session/index.mjs +5 -0
  407. package/dist/esm/session/messageSerialization.mjs +94 -154
  408. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  409. package/dist/esm/splitStream.mjs +147 -204
  410. package/dist/esm/splitStream.mjs.map +1 -1
  411. package/dist/esm/stream.mjs +872 -1341
  412. package/dist/esm/stream.mjs.map +1 -1
  413. package/dist/esm/summarization/index.mjs +57 -99
  414. package/dist/esm/summarization/index.mjs.map +1 -1
  415. package/dist/esm/summarization/node.mjs +640 -790
  416. package/dist/esm/summarization/node.mjs.map +1 -1
  417. package/dist/esm/tools/BashExecutor.mjs +103 -129
  418. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  419. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +162 -239
  420. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  421. package/dist/esm/tools/Calculator.mjs +34 -36
  422. package/dist/esm/tools/Calculator.mjs.map +1 -1
  423. package/dist/esm/tools/CodeExecutor.mjs +123 -164
  424. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  425. package/dist/esm/tools/CodeSessionFileSummary.mjs +36 -44
  426. package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
  427. package/dist/esm/tools/ProgrammaticToolCalling.mjs +454 -644
  428. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  429. package/dist/esm/tools/ReadFile.mjs +17 -18
  430. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  431. package/dist/esm/tools/SkillTool.mjs +26 -25
  432. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  433. package/dist/esm/tools/SubagentTool.mjs +59 -59
  434. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  435. package/dist/esm/tools/ToolNode.mjs +2144 -2684
  436. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  437. package/dist/esm/tools/ToolSearch.mjs +659 -804
  438. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  439. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +248 -338
  440. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
  441. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +170 -195
  442. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
  443. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +424 -517
  444. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  445. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +91 -122
  446. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  447. package/dist/esm/tools/cloudflare/index.mjs +5 -0
  448. package/dist/esm/tools/eagerEventExecution.mjs +75 -96
  449. package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
  450. package/dist/esm/tools/handlers.mjs +200 -260
  451. package/dist/esm/tools/handlers.mjs.map +1 -1
  452. package/dist/esm/tools/local/CompileCheckTool.mjs +150 -210
  453. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  454. package/dist/esm/tools/local/FileCheckpointer.mjs +77 -83
  455. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  456. package/dist/esm/tools/local/LocalCodingTools.mjs +760 -1017
  457. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  458. package/dist/esm/tools/local/LocalExecutionEngine.mjs +663 -936
  459. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  460. package/dist/esm/tools/local/LocalExecutionTools.mjs +49 -90
  461. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  462. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +283 -349
  463. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  464. package/dist/esm/tools/local/attachments.mjs +108 -163
  465. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  466. package/dist/esm/tools/local/bashAst.mjs +99 -111
  467. package/dist/esm/tools/local/bashAst.mjs.map +1 -1
  468. package/dist/esm/tools/local/editStrategies.mjs +126 -167
  469. package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
  470. package/dist/esm/tools/local/index.mjs +13 -0
  471. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +136 -216
  472. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  473. package/dist/esm/tools/local/syntaxCheck.mjs +138 -155
  474. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
  475. package/dist/esm/tools/local/textEncoding.mjs +25 -21
  476. package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
  477. package/dist/esm/tools/local/workspaceFS.mjs +38 -44
  478. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
  479. package/dist/esm/tools/ptcTimeout.mjs +27 -42
  480. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  481. package/dist/esm/tools/schema.mjs +24 -21
  482. package/dist/esm/tools/schema.mjs.map +1 -1
  483. package/dist/esm/tools/search/anthropic.mjs +24 -31
  484. package/dist/esm/tools/search/anthropic.mjs.map +1 -1
  485. package/dist/esm/tools/search/content.mjs +93 -116
  486. package/dist/esm/tools/search/content.mjs.map +1 -1
  487. package/dist/esm/tools/search/firecrawl.mjs +139 -169
  488. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  489. package/dist/esm/tools/search/format.mjs +128 -194
  490. package/dist/esm/tools/search/format.mjs.map +1 -1
  491. package/dist/esm/tools/search/highlights.mjs +165 -230
  492. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  493. package/dist/esm/tools/search/index.mjs +3 -0
  494. package/dist/esm/tools/search/rerankers.mjs +149 -168
  495. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  496. package/dist/esm/tools/search/schema.mjs +39 -37
  497. package/dist/esm/tools/search/schema.mjs.map +1 -1
  498. package/dist/esm/tools/search/search.mjs +426 -528
  499. package/dist/esm/tools/search/search.mjs.map +1 -1
  500. package/dist/esm/tools/search/serper-scraper.mjs +104 -124
  501. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  502. package/dist/esm/tools/search/tavily-scraper.mjs +127 -178
  503. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  504. package/dist/esm/tools/search/tavily-search.mjs +293 -357
  505. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  506. package/dist/esm/tools/search/tool.mjs +259 -297
  507. package/dist/esm/tools/search/tool.mjs.map +1 -1
  508. package/dist/esm/tools/search/utils.mjs +74 -115
  509. package/dist/esm/tools/search/utils.mjs.map +1 -1
  510. package/dist/esm/tools/skillCatalog.mjs +54 -70
  511. package/dist/esm/tools/skillCatalog.mjs.map +1 -1
  512. package/dist/esm/tools/streamedToolCallSeals.mjs +42 -31
  513. package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
  514. package/dist/esm/tools/subagent/SubagentExecutor.mjs +612 -768
  515. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  516. package/dist/esm/tools/subagent/index.mjs +2 -0
  517. package/dist/esm/tools/toolOutputReferences.mjs +523 -624
  518. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  519. package/dist/esm/utils/callbacks.mjs +11 -19
  520. package/dist/esm/utils/callbacks.mjs.map +1 -1
  521. package/dist/esm/utils/errors.mjs +70 -93
  522. package/dist/esm/utils/errors.mjs.map +1 -1
  523. package/dist/esm/utils/events.mjs +32 -40
  524. package/dist/esm/utils/events.mjs.map +1 -1
  525. package/dist/esm/utils/graph.mjs +8 -10
  526. package/dist/esm/utils/graph.mjs.map +1 -1
  527. package/dist/esm/utils/handlers.mjs +60 -80
  528. package/dist/esm/utils/handlers.mjs.map +1 -1
  529. package/dist/esm/utils/index.mjs +10 -0
  530. package/dist/esm/utils/llm.mjs +19 -25
  531. package/dist/esm/utils/llm.mjs.map +1 -1
  532. package/dist/esm/utils/misc.mjs +30 -44
  533. package/dist/esm/utils/misc.mjs.map +1 -1
  534. package/dist/esm/utils/run.mjs +50 -64
  535. package/dist/esm/utils/run.mjs.map +1 -1
  536. package/dist/esm/utils/schema.mjs +11 -17
  537. package/dist/esm/utils/schema.mjs.map +1 -1
  538. package/dist/esm/utils/title.mjs +71 -104
  539. package/dist/esm/utils/title.mjs.map +1 -1
  540. package/dist/esm/utils/tokens.mjs +186 -281
  541. package/dist/esm/utils/tokens.mjs.map +1 -1
  542. package/dist/esm/utils/truncation.mjs +95 -112
  543. package/dist/esm/utils/truncation.mjs.map +1 -1
  544. package/dist/types/llm/bedrock/utils/index.d.ts +1 -1
  545. package/dist/types/llm/bedrock/utils/message_outputs.d.ts +9 -0
  546. package/dist/types/llm/vertexai/index.d.ts +10 -0
  547. package/dist/types/tools/ToolNode.d.ts +8 -0
  548. package/dist/types/tools/search/tool.d.ts +17 -0
  549. package/dist/types/tools/search/types.d.ts +4 -0
  550. package/dist/types/tools/streamedToolCallSeals.d.ts +5 -1
  551. package/dist/types/types/tools.d.ts +10 -0
  552. package/package.json +4 -10
  553. package/src/__tests__/stream.eagerEventExecution.test.ts +703 -0
  554. package/src/llm/bedrock/index.ts +40 -0
  555. package/src/llm/bedrock/streamSealDispatch.test.ts +158 -0
  556. package/src/llm/bedrock/utils/index.ts +1 -0
  557. package/src/llm/bedrock/utils/message_outputs.test.ts +85 -0
  558. package/src/llm/bedrock/utils/message_outputs.ts +43 -0
  559. package/src/llm/google/utils/common.test.ts +64 -0
  560. package/src/llm/google/utils/common.ts +18 -0
  561. package/src/llm/openai/index.ts +95 -1
  562. package/src/llm/openai/sequentialToolCallSeals.test.ts +199 -0
  563. package/src/llm/vertexai/index.ts +31 -0
  564. package/src/llm/vertexai/sealStreamedToolCalls.test.ts +88 -0
  565. package/src/llm/vertexai/streamSealDispatch.test.ts +148 -0
  566. package/src/stream.ts +40 -6
  567. package/src/tools/ToolNode.ts +85 -3
  568. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +368 -0
  569. package/src/tools/search/highlights.ts +9 -1
  570. package/src/tools/search/search.ts +41 -3
  571. package/src/tools/search/source-processing.test.ts +373 -0
  572. package/src/tools/search/tool.ts +22 -2
  573. package/src/tools/search/types.ts +4 -0
  574. package/src/tools/streamedToolCallSeals.ts +37 -9
  575. package/src/types/tools.ts +10 -0
  576. package/dist/cjs/langchain/google-common.cjs.map +0 -1
  577. package/dist/cjs/langchain/index.cjs.map +0 -1
  578. package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
  579. package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
  580. package/dist/cjs/langchain/messages.cjs.map +0 -1
  581. package/dist/cjs/langchain/openai.cjs.map +0 -1
  582. package/dist/cjs/langchain/prompts.cjs.map +0 -1
  583. package/dist/cjs/langchain/runnables.cjs.map +0 -1
  584. package/dist/cjs/langchain/tools.cjs.map +0 -1
  585. package/dist/cjs/langchain/utils/env.cjs.map +0 -1
  586. package/dist/cjs/main.cjs.map +0 -1
  587. package/dist/esm/langchain/google-common.mjs.map +0 -1
  588. package/dist/esm/langchain/index.mjs.map +0 -1
  589. package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
  590. package/dist/esm/langchain/messages/tool.mjs.map +0 -1
  591. package/dist/esm/langchain/messages.mjs.map +0 -1
  592. package/dist/esm/langchain/openai.mjs.map +0 -1
  593. package/dist/esm/langchain/prompts.mjs.map +0 -1
  594. package/dist/esm/langchain/runnables.mjs.map +0 -1
  595. package/dist/esm/langchain/tools.mjs.map +0 -1
  596. package/dist/esm/langchain/utils/env.mjs.map +0 -1
  597. package/dist/esm/main.mjs.map +0 -1
@@ -1,469 +1,356 @@
1
- 'use strict';
2
-
3
- var messages = require('@langchain/core/messages');
4
- var langchain = require('./langchain.cjs');
5
- var _enum = require('../common/enum.cjs');
6
- var format = require('./format.cjs');
7
-
1
+ require("../common/enum.cjs");
2
+ const require_langchain = require("./langchain.cjs");
3
+ const require_format = require("./format.cjs");
4
+ let _langchain_core_messages = require("@langchain/core/messages");
5
+ //#region src/messages/cache.ts
8
6
  /**
9
- * Deep clones a message's content to prevent mutation of the original.
10
- */
7
+ * Deep clones a message's content to prevent mutation of the original.
8
+ */
11
9
  function deepCloneContent(content) {
12
- if (typeof content === 'string') {
13
- return content;
14
- }
15
- if (Array.isArray(content)) {
16
- return content.map((block) => ({ ...block }));
17
- }
18
- return content;
10
+ if (typeof content === "string") return content;
11
+ if (Array.isArray(content)) return content.map((block) => ({ ...block }));
12
+ return content;
19
13
  }
20
14
  /**
21
- * Clones a message with new content. For LangChain BaseMessage instances,
22
- * constructs a proper class instance so that `instanceof` checks are preserved
23
- * in downstream code (e.g., ensureThinkingBlockInMessages).
24
- * For plain objects (AnthropicMessage), uses object spread.
25
- */
15
+ * Clones a message with new content. For LangChain BaseMessage instances,
16
+ * constructs a proper class instance so that `instanceof` checks are preserved
17
+ * in downstream code (e.g., ensureThinkingBlockInMessages).
18
+ * For plain objects (AnthropicMessage), uses object spread.
19
+ */
26
20
  function cloneMessage(message, content) {
27
- if (message instanceof messages.BaseMessage) {
28
- const baseParams = {
29
- content: langchain.toLangChainContent(content),
30
- additional_kwargs: { ...message.additional_kwargs },
31
- response_metadata: { ...message.response_metadata },
32
- id: message.id,
33
- name: message.name,
34
- };
35
- const msgType = message.getType();
36
- switch (msgType) {
37
- case 'ai':
38
- return format.withMessageRole(new messages.AIMessage({
39
- ...baseParams,
40
- tool_calls: message.tool_calls,
41
- }), 'assistant');
42
- case 'human':
43
- return format.withMessageRole(new messages.HumanMessage(baseParams), 'user');
44
- case 'system':
45
- return format.withMessageRole(new messages.SystemMessage(baseParams), 'system');
46
- case 'tool':
47
- return format.withMessageRole(new messages.ToolMessage({
48
- ...baseParams,
49
- tool_call_id: message.tool_call_id,
50
- }), 'tool');
51
- }
52
- }
53
- const { lc_kwargs: _lc_kwargs, lc_serializable: _lc_serializable, lc_namespace: _lc_namespace, ...rest } = message;
54
- const cloned = { ...rest, content };
55
- // LangChain messages don't have a direct 'role' property - derive it from getType()
56
- if ('getType' in message &&
57
- typeof message.getType === 'function' &&
58
- !('role' in cloned)) {
59
- const msgType = message.getType();
60
- const roleMap = {
61
- human: 'user',
62
- ai: 'assistant',
63
- system: 'system',
64
- tool: 'tool',
65
- };
66
- cloned.role = roleMap[msgType] || msgType;
67
- }
68
- return cloned;
21
+ if (message instanceof _langchain_core_messages.BaseMessage) {
22
+ const baseParams = {
23
+ content: require_langchain.toLangChainContent(content),
24
+ additional_kwargs: { ...message.additional_kwargs },
25
+ response_metadata: { ...message.response_metadata },
26
+ id: message.id,
27
+ name: message.name
28
+ };
29
+ switch (message.getType()) {
30
+ case "ai": return require_format.withMessageRole(new _langchain_core_messages.AIMessage({
31
+ ...baseParams,
32
+ tool_calls: message.tool_calls
33
+ }), "assistant");
34
+ case "human": return require_format.withMessageRole(new _langchain_core_messages.HumanMessage(baseParams), "user");
35
+ case "system": return require_format.withMessageRole(new _langchain_core_messages.SystemMessage(baseParams), "system");
36
+ case "tool": return require_format.withMessageRole(new _langchain_core_messages.ToolMessage({
37
+ ...baseParams,
38
+ tool_call_id: message.tool_call_id
39
+ }), "tool");
40
+ default: break;
41
+ }
42
+ }
43
+ const { lc_kwargs: _lc_kwargs, lc_serializable: _lc_serializable, lc_namespace: _lc_namespace, ...rest } = message;
44
+ const cloned = {
45
+ ...rest,
46
+ content
47
+ };
48
+ if ("getType" in message && typeof message.getType === "function" && !("role" in cloned)) {
49
+ const msgType = message.getType();
50
+ cloned.role = {
51
+ human: "user",
52
+ ai: "assistant",
53
+ system: "system",
54
+ tool: "tool"
55
+ }[msgType] || msgType;
56
+ }
57
+ return cloned;
69
58
  }
70
59
  function stripAnthropicCacheControlFromBlocks(content) {
71
- let modified = false;
72
- const strippedContent = content.map((block) => {
73
- if (!('cache_control' in block)) {
74
- return block;
75
- }
76
- const cloned = { ...block };
77
- delete cloned.cache_control;
78
- modified = true;
79
- return cloned;
80
- });
81
- return { content: strippedContent, modified };
60
+ let modified = false;
61
+ return {
62
+ content: content.map((block) => {
63
+ if (!("cache_control" in block)) return block;
64
+ const cloned = { ...block };
65
+ delete cloned.cache_control;
66
+ modified = true;
67
+ return cloned;
68
+ }),
69
+ modified
70
+ };
82
71
  }
83
72
  function sanitizeBedrockSystemMessage(message) {
84
- const content = message.content;
85
- if (!Array.isArray(content)) {
86
- return message;
87
- }
88
- const stripped = stripAnthropicCacheControlFromBlocks(content);
89
- if (!stripped.modified) {
90
- return message;
91
- }
92
- return cloneMessage(message, stripped.content);
73
+ const content = message.content;
74
+ if (!Array.isArray(content)) return message;
75
+ const stripped = stripAnthropicCacheControlFromBlocks(content);
76
+ if (!stripped.modified) return message;
77
+ return cloneMessage(message, stripped.content);
93
78
  }
94
79
  /**
95
- * Anthropic API: Adds cache control to the appropriate user messages in the payload.
96
- * Strips ALL existing cache control (both Anthropic and Bedrock formats) from all messages,
97
- * then adds fresh cache control to the last 2 user messages in a single backward pass.
98
- * This ensures we don't accumulate stale cache points across multiple turns.
99
- * Returns a new array - only clones messages that require modification.
100
- * @param messages - The array of message objects.
101
- * @returns - A new array of message objects with cache control added.
102
- */
80
+ * Anthropic API: Adds cache control to the appropriate user messages in the payload.
81
+ * Strips ALL existing cache control (both Anthropic and Bedrock formats) from all messages,
82
+ * then adds fresh cache control to the last 2 user messages in a single backward pass.
83
+ * This ensures we don't accumulate stale cache points across multiple turns.
84
+ * Returns a new array - only clones messages that require modification.
85
+ * @param messages - The array of message objects.
86
+ * @returns - A new array of message objects with cache control added.
87
+ */
103
88
  function addCacheControl(messages) {
104
- if (!Array.isArray(messages) || messages.length < 2) {
105
- return messages;
106
- }
107
- const updatedMessages = [...messages];
108
- let userMessagesModified = 0;
109
- for (let i = updatedMessages.length - 1; i >= 0; i--) {
110
- const originalMessage = updatedMessages[i];
111
- const content = originalMessage.content;
112
- const isUserMessage = ('getType' in originalMessage && originalMessage.getType() === 'human') ||
113
- ('role' in originalMessage && originalMessage.role === 'user');
114
- const hasArrayContent = Array.isArray(content);
115
- const needsCacheAdd = userMessagesModified < 2 &&
116
- isUserMessage &&
117
- !isSyntheticMetaMessage(originalMessage) &&
118
- (typeof content === 'string' || hasArrayContent);
119
- // Skip messages that don't need any work
120
- if (!needsCacheAdd && !hasArrayContent) {
121
- continue;
122
- }
123
- let workingContent;
124
- let modified = false;
125
- if (hasArrayContent) {
126
- // Single pass: clone blocks, strip cache markers and cache points,
127
- // find last text block index for cache insertion — all at once.
128
- const src = content;
129
- workingContent = [];
130
- let lastTextIndex = -1;
131
- for (let j = 0; j < src.length; j++) {
132
- const block = src[j];
133
- if (isCachePoint(block)) {
134
- modified = true;
135
- continue; // skip cache point blocks
136
- }
137
- const cloned = { ...block };
138
- if ('cache_control' in cloned) {
139
- delete cloned.cache_control;
140
- modified = true;
141
- }
142
- if ('type' in cloned && cloned.type === 'text') {
143
- lastTextIndex = workingContent.length;
144
- }
145
- workingContent.push(cloned);
146
- }
147
- if (!modified && !needsCacheAdd) {
148
- continue; // nothing to strip and no cache to add
149
- }
150
- // Add cache control to the last text block for user messages
151
- if (needsCacheAdd && lastTextIndex >= 0) {
152
- workingContent[lastTextIndex].cache_control = {
153
- type: 'ephemeral',
154
- };
155
- userMessagesModified++;
156
- }
157
- }
158
- else if (typeof content === 'string' && needsCacheAdd) {
159
- workingContent = [
160
- { type: 'text', text: content, cache_control: { type: 'ephemeral' } },
161
- ];
162
- userMessagesModified++;
163
- }
164
- else {
165
- continue;
166
- }
167
- updatedMessages[i] = cloneMessage(originalMessage, workingContent);
168
- }
169
- return updatedMessages;
89
+ if (!Array.isArray(messages) || messages.length < 2) return messages;
90
+ const updatedMessages = [...messages];
91
+ let userMessagesModified = 0;
92
+ for (let i = updatedMessages.length - 1; i >= 0; i--) {
93
+ const originalMessage = updatedMessages[i];
94
+ const content = originalMessage.content;
95
+ const isUserMessage = "getType" in originalMessage && originalMessage.getType() === "human" || "role" in originalMessage && originalMessage.role === "user";
96
+ const hasArrayContent = Array.isArray(content);
97
+ const needsCacheAdd = userMessagesModified < 2 && isUserMessage && !isSyntheticMetaMessage(originalMessage) && (typeof content === "string" || hasArrayContent);
98
+ if (!needsCacheAdd && !hasArrayContent) continue;
99
+ let workingContent;
100
+ let modified = false;
101
+ if (hasArrayContent) {
102
+ const src = content;
103
+ workingContent = [];
104
+ let lastTextIndex = -1;
105
+ for (let j = 0; j < src.length; j++) {
106
+ const block = src[j];
107
+ if (isCachePoint(block)) {
108
+ modified = true;
109
+ continue;
110
+ }
111
+ const cloned = { ...block };
112
+ if ("cache_control" in cloned) {
113
+ delete cloned.cache_control;
114
+ modified = true;
115
+ }
116
+ if ("type" in cloned && cloned.type === "text") lastTextIndex = workingContent.length;
117
+ workingContent.push(cloned);
118
+ }
119
+ if (!modified && !needsCacheAdd) continue;
120
+ if (needsCacheAdd && lastTextIndex >= 0) {
121
+ workingContent[lastTextIndex].cache_control = { type: "ephemeral" };
122
+ userMessagesModified++;
123
+ }
124
+ } else if (typeof content === "string" && needsCacheAdd) {
125
+ workingContent = [{
126
+ type: "text",
127
+ text: content,
128
+ cache_control: { type: "ephemeral" }
129
+ }];
130
+ userMessagesModified++;
131
+ } else continue;
132
+ updatedMessages[i] = cloneMessage(originalMessage, workingContent);
133
+ }
134
+ return updatedMessages;
170
135
  }
171
136
  /**
172
- * Checks if a content block is a cache point
173
- */
137
+ * Checks if a content block is a cache point
138
+ */
174
139
  function isCachePoint(block) {
175
- return 'cachePoint' in block && !('type' in block);
140
+ return "cachePoint" in block && !("type" in block);
176
141
  }
177
142
  function getMessageRole(message) {
178
- if (message instanceof messages.BaseMessage) {
179
- return message.getType();
180
- }
181
- if ('role' in message && typeof message.role === 'string') {
182
- return message.role;
183
- }
184
- return undefined;
143
+ if (message instanceof _langchain_core_messages.BaseMessage) return message.getType();
144
+ if ("role" in message && typeof message.role === "string") return message.role;
185
145
  }
186
- const SKILL_MESSAGE_SOURCE = 'skill';
146
+ const SKILL_MESSAGE_SOURCE = "skill";
187
147
  /**
188
- * Synthetic skill/meta messages (reconstructed skill bodies, primed SKILL.md
189
- * instructions) are re-injected every turn and are not stable conversation
190
- * turns. They must not anchor a fresh prompt-cache marker — doing so pins the
191
- * cache to a volatile/duplicated prefix. Stale markers are still stripped from
192
- * them; only the *adding* of new markers is suppressed. Detected via
193
- * `additional_kwargs.isMeta === true` or `additional_kwargs.source === 'skill'`.
194
- */
148
+ * Synthetic skill/meta messages (reconstructed skill bodies, primed SKILL.md
149
+ * instructions) are re-injected every turn and are not stable conversation
150
+ * turns. They must not anchor a fresh prompt-cache marker — doing so pins the
151
+ * cache to a volatile/duplicated prefix. Stale markers are still stripped from
152
+ * them; only the *adding* of new markers is suppressed. Detected via
153
+ * `additional_kwargs.isMeta === true` or `additional_kwargs.source === 'skill'`.
154
+ */
195
155
  function isSyntheticMetaMessage(message) {
196
- const { additional_kwargs: kwargs } = message;
197
- if (kwargs == null) {
198
- return false;
199
- }
200
- return kwargs.isMeta === true || kwargs.source === SKILL_MESSAGE_SOURCE;
156
+ const { additional_kwargs: kwargs } = message;
157
+ if (kwargs == null) return false;
158
+ return kwargs.isMeta === true || kwargs.source === SKILL_MESSAGE_SOURCE;
201
159
  }
202
160
  function isCacheableConversationMessage(message) {
203
- const role = getMessageRole(message);
204
- return (role === 'human' || role === 'user' || role === 'ai' || role === 'assistant');
161
+ const role = getMessageRole(message);
162
+ return role === "human" || role === "user" || role === "ai" || role === "assistant";
205
163
  }
206
164
  function isAssistantConversationMessage(message) {
207
- const role = getMessageRole(message);
208
- return role === 'ai' || role === 'assistant';
165
+ const role = getMessageRole(message);
166
+ return role === "ai" || role === "assistant";
209
167
  }
210
168
  function hasCacheMarker(message) {
211
- return (Array.isArray(message.content) &&
212
- message.content.some((block) => 'cache_control' in block));
169
+ return Array.isArray(message.content) && message.content.some((block) => "cache_control" in block);
213
170
  }
214
171
  function addCacheControlToRecentMessages(messages, maxCachePoints, canUseMessage) {
215
- if (!Array.isArray(messages) ||
216
- messages.length === 0 ||
217
- maxCachePoints <= 0) {
218
- return messages;
219
- }
220
- const updatedMessages = [...messages];
221
- let cachePointsAdded = 0;
222
- for (let i = updatedMessages.length - 1; i >= 0; i--) {
223
- const originalMessage = updatedMessages[i];
224
- const content = originalMessage.content;
225
- const hasArrayContent = Array.isArray(content);
226
- const canAddCache = cachePointsAdded < maxCachePoints &&
227
- canUseMessage(originalMessage) &&
228
- !isSyntheticMetaMessage(originalMessage);
229
- if (!canAddCache && !hasArrayContent) {
230
- continue;
231
- }
232
- let workingContent;
233
- let modified = false;
234
- if (hasArrayContent) {
235
- const src = content;
236
- workingContent = [];
237
- let lastNonEmptyTextIndex = -1;
238
- for (let j = 0; j < src.length; j++) {
239
- const block = src[j];
240
- if (isCachePoint(block)) {
241
- modified = true;
242
- continue;
243
- }
244
- const cloned = { ...block };
245
- if ('cache_control' in cloned) {
246
- delete cloned.cache_control;
247
- modified = true;
248
- }
249
- if ('type' in cloned && cloned.type === 'text') {
250
- const text = cloned.text;
251
- if (text != null && text.trim() !== '') {
252
- lastNonEmptyTextIndex = workingContent.length;
253
- }
254
- }
255
- workingContent.push(cloned);
256
- }
257
- if (canAddCache && lastNonEmptyTextIndex >= 0) {
258
- workingContent[lastNonEmptyTextIndex].cache_control = {
259
- type: 'ephemeral',
260
- };
261
- cachePointsAdded++;
262
- modified = true;
263
- }
264
- if (!modified) {
265
- continue;
266
- }
267
- }
268
- else if (typeof content === 'string' &&
269
- content.trim() !== '' &&
270
- canAddCache) {
271
- workingContent = [
272
- { type: 'text', text: content, cache_control: { type: 'ephemeral' } },
273
- ];
274
- cachePointsAdded++;
275
- }
276
- else {
277
- continue;
278
- }
279
- updatedMessages[i] = cloneMessage(originalMessage, workingContent);
280
- }
281
- return updatedMessages;
172
+ if (!Array.isArray(messages) || messages.length === 0 || maxCachePoints <= 0) return messages;
173
+ const updatedMessages = [...messages];
174
+ let cachePointsAdded = 0;
175
+ for (let i = updatedMessages.length - 1; i >= 0; i--) {
176
+ const originalMessage = updatedMessages[i];
177
+ const content = originalMessage.content;
178
+ const hasArrayContent = Array.isArray(content);
179
+ const canAddCache = cachePointsAdded < maxCachePoints && canUseMessage(originalMessage) && !isSyntheticMetaMessage(originalMessage);
180
+ if (!canAddCache && !hasArrayContent) continue;
181
+ let workingContent;
182
+ let modified = false;
183
+ if (hasArrayContent) {
184
+ const src = content;
185
+ workingContent = [];
186
+ let lastNonEmptyTextIndex = -1;
187
+ for (let j = 0; j < src.length; j++) {
188
+ const block = src[j];
189
+ if (isCachePoint(block)) {
190
+ modified = true;
191
+ continue;
192
+ }
193
+ const cloned = { ...block };
194
+ if ("cache_control" in cloned) {
195
+ delete cloned.cache_control;
196
+ modified = true;
197
+ }
198
+ if ("type" in cloned && cloned.type === "text") {
199
+ const text = cloned.text;
200
+ if (text != null && text.trim() !== "") lastNonEmptyTextIndex = workingContent.length;
201
+ }
202
+ workingContent.push(cloned);
203
+ }
204
+ if (canAddCache && lastNonEmptyTextIndex >= 0) {
205
+ workingContent[lastNonEmptyTextIndex].cache_control = { type: "ephemeral" };
206
+ cachePointsAdded++;
207
+ modified = true;
208
+ }
209
+ if (!modified) continue;
210
+ } else if (typeof content === "string" && content.trim() !== "" && canAddCache) {
211
+ workingContent = [{
212
+ type: "text",
213
+ text: content,
214
+ cache_control: { type: "ephemeral" }
215
+ }];
216
+ cachePointsAdded++;
217
+ } else continue;
218
+ updatedMessages[i] = cloneMessage(originalMessage, workingContent);
219
+ }
220
+ return updatedMessages;
282
221
  }
283
222
  function addCacheControlToStablePrefixMessages(messages, maxCachePoints) {
284
- const assistantMarked = addCacheControlToRecentMessages(messages, maxCachePoints, isAssistantConversationMessage);
285
- if (assistantMarked.some(hasCacheMarker)) {
286
- return assistantMarked;
287
- }
288
- return addCacheControlToRecentMessages(messages, maxCachePoints, isCacheableConversationMessage);
223
+ const assistantMarked = addCacheControlToRecentMessages(messages, maxCachePoints, isAssistantConversationMessage);
224
+ if (assistantMarked.some(hasCacheMarker)) return assistantMarked;
225
+ return addCacheControlToRecentMessages(messages, maxCachePoints, isCacheableConversationMessage);
289
226
  }
290
227
  /**
291
- * Checks if a message's content has Anthropic cache_control fields.
292
- */
228
+ * Checks if a message's content has Anthropic cache_control fields.
229
+ */
293
230
  function hasAnthropicCacheControl(content) {
294
- for (let i = 0; i < content.length; i++) {
295
- if ('cache_control' in content[i])
296
- return true;
297
- }
298
- return false;
231
+ for (let i = 0; i < content.length; i++) if ("cache_control" in content[i]) return true;
232
+ return false;
299
233
  }
300
234
  /**
301
- * Removes all Anthropic cache_control fields from messages
302
- * Used when switching from Anthropic to Bedrock provider
303
- * Returns a new array - only clones messages that require modification.
304
- */
235
+ * Removes all Anthropic cache_control fields from messages
236
+ * Used when switching from Anthropic to Bedrock provider
237
+ * Returns a new array - only clones messages that require modification.
238
+ */
305
239
  function stripAnthropicCacheControl(messages) {
306
- if (!Array.isArray(messages)) {
307
- return messages;
308
- }
309
- const updatedMessages = [...messages];
310
- for (let i = 0; i < updatedMessages.length; i++) {
311
- const originalMessage = updatedMessages[i];
312
- const content = originalMessage.content;
313
- if (!Array.isArray(content) || !hasAnthropicCacheControl(content)) {
314
- continue;
315
- }
316
- const clonedContent = deepCloneContent(content);
317
- for (let j = 0; j < clonedContent.length; j++) {
318
- const block = clonedContent[j];
319
- if ('cache_control' in block) {
320
- delete block.cache_control;
321
- }
322
- }
323
- updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
324
- }
325
- return updatedMessages;
240
+ if (!Array.isArray(messages)) return messages;
241
+ const updatedMessages = [...messages];
242
+ for (let i = 0; i < updatedMessages.length; i++) {
243
+ const originalMessage = updatedMessages[i];
244
+ const content = originalMessage.content;
245
+ if (!Array.isArray(content) || !hasAnthropicCacheControl(content)) continue;
246
+ const clonedContent = deepCloneContent(content);
247
+ for (let j = 0; j < clonedContent.length; j++) {
248
+ const block = clonedContent[j];
249
+ if ("cache_control" in block) delete block.cache_control;
250
+ }
251
+ updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
252
+ }
253
+ return updatedMessages;
326
254
  }
327
255
  /**
328
- * Checks if a message's content has Bedrock cachePoint blocks.
329
- */
256
+ * Checks if a message's content has Bedrock cachePoint blocks.
257
+ */
330
258
  function hasBedrockCachePoint(content) {
331
- for (let i = 0; i < content.length; i++) {
332
- if (isCachePoint(content[i]))
333
- return true;
334
- }
335
- return false;
259
+ for (let i = 0; i < content.length; i++) if (isCachePoint(content[i])) return true;
260
+ return false;
336
261
  }
337
262
  /**
338
- * Removes all Bedrock cachePoint blocks from messages
339
- * Used when switching from Bedrock to Anthropic provider
340
- * Returns a new array - only clones messages that require modification.
341
- */
263
+ * Removes all Bedrock cachePoint blocks from messages
264
+ * Used when switching from Bedrock to Anthropic provider
265
+ * Returns a new array - only clones messages that require modification.
266
+ */
342
267
  function stripBedrockCacheControl(messages) {
343
- if (!Array.isArray(messages)) {
344
- return messages;
345
- }
346
- const updatedMessages = [...messages];
347
- for (let i = 0; i < updatedMessages.length; i++) {
348
- const originalMessage = updatedMessages[i];
349
- const content = originalMessage.content;
350
- if (!Array.isArray(content) || !hasBedrockCachePoint(content)) {
351
- continue;
352
- }
353
- const clonedContent = deepCloneContent(content).filter((block) => !isCachePoint(block));
354
- updatedMessages[i] = cloneMessage(originalMessage, clonedContent);
355
- }
356
- return updatedMessages;
268
+ if (!Array.isArray(messages)) return messages;
269
+ const updatedMessages = [...messages];
270
+ for (let i = 0; i < updatedMessages.length; i++) {
271
+ const originalMessage = updatedMessages[i];
272
+ const content = originalMessage.content;
273
+ if (!Array.isArray(content) || !hasBedrockCachePoint(content)) continue;
274
+ updatedMessages[i] = cloneMessage(originalMessage, deepCloneContent(content).filter((block) => !isCachePoint(block)));
275
+ }
276
+ return updatedMessages;
357
277
  }
358
278
  /**
359
- * Adds Bedrock Converse API cache points to the latest two user messages.
360
- * Inserts `{ cachePoint: { type: 'default' } }` as a separate content block
361
- * immediately after the last text block in each targeted message.
362
- * Strips ALL existing cache control (both Bedrock and Anthropic formats) from all messages,
363
- * then adds fresh cache points to the latest two non-tool user messages in a single backward pass.
364
- * This ensures we don't accumulate stale cache points across multiple turns.
365
- * Returns a new array - only clones messages that require modification.
366
- * @param messages - The array of message objects.
367
- * @returns - A new array of message objects with cache points added.
368
- */
279
+ * Adds Bedrock Converse API cache points to the latest two user messages.
280
+ * Inserts `{ cachePoint: { type: 'default' } }` as a separate content block
281
+ * immediately after the last text block in each targeted message.
282
+ * Strips ALL existing cache control (both Bedrock and Anthropic formats) from all messages,
283
+ * then adds fresh cache points to the latest two non-tool user messages in a single backward pass.
284
+ * This ensures we don't accumulate stale cache points across multiple turns.
285
+ * Returns a new array - only clones messages that require modification.
286
+ * @param messages - The array of message objects.
287
+ * @returns - A new array of message objects with cache points added.
288
+ */
369
289
  function addBedrockCacheControl(messages) {
370
- if (!Array.isArray(messages) || messages.length === 0) {
371
- return messages;
372
- }
373
- const updatedMessages = [...messages];
374
- let cachePointsAdded = 0;
375
- for (let i = updatedMessages.length - 1; i >= 0; i--) {
376
- const originalMessage = updatedMessages[i];
377
- const messageType = 'getType' in originalMessage &&
378
- typeof originalMessage.getType === 'function'
379
- ? originalMessage.getType()
380
- : undefined;
381
- const messageRole = 'role' in originalMessage && typeof originalMessage.role === 'string'
382
- ? originalMessage.role
383
- : undefined;
384
- const isSystemMessage = messageType === 'system' || messageRole === 'system';
385
- if (isSystemMessage) {
386
- updatedMessages[i] = sanitizeBedrockSystemMessage(originalMessage);
387
- continue;
388
- }
389
- const isToolMessage = messageType === 'tool' || messageRole === 'tool';
390
- const isUserMessage = messageType === 'human' || messageRole === 'user';
391
- const content = originalMessage.content;
392
- const hasSerializationProps = 'lc_kwargs' in originalMessage ||
393
- 'lc_serializable' in originalMessage ||
394
- 'lc_namespace' in originalMessage;
395
- const hasArrayContent = Array.isArray(content);
396
- const isEmptyString = typeof content === 'string' && content === '';
397
- const needsCacheAdd = cachePointsAdded < 2 &&
398
- isUserMessage &&
399
- !isToolMessage &&
400
- !isEmptyString &&
401
- !isSyntheticMetaMessage(originalMessage) &&
402
- (typeof content === 'string' || hasArrayContent);
403
- if (!needsCacheAdd && !hasArrayContent && !hasSerializationProps) {
404
- continue;
405
- }
406
- let workingContent;
407
- let modified = hasSerializationProps;
408
- if (hasArrayContent) {
409
- // Single pass: clone blocks, strip cache markers, find last
410
- // non-empty text block for cache point insertion — all at once.
411
- const src = content;
412
- workingContent = [];
413
- let lastNonEmptyTextIndex = -1;
414
- for (let j = 0; j < src.length; j++) {
415
- const block = src[j];
416
- if (isCachePoint(block)) {
417
- modified = true;
418
- continue;
419
- }
420
- const cloned = { ...block };
421
- if ('cache_control' in cloned) {
422
- delete cloned.cache_control;
423
- modified = true;
424
- }
425
- const type = cloned.type;
426
- if (type === _enum.ContentTypes.TEXT || type === 'text') {
427
- const text = cloned.text;
428
- if (text != null && text.trim() !== '') {
429
- lastNonEmptyTextIndex = workingContent.length;
430
- }
431
- }
432
- workingContent.push(cloned);
433
- }
434
- if (!modified && !needsCacheAdd) {
435
- continue;
436
- }
437
- // Insert cache point after the last non-empty text block.
438
- // Skip if no cacheable text content exists (whitespace-only messages).
439
- if (needsCacheAdd && lastNonEmptyTextIndex >= 0) {
440
- workingContent.splice(lastNonEmptyTextIndex + 1, 0, {
441
- cachePoint: { type: 'default' },
442
- });
443
- cachePointsAdded++;
444
- }
445
- }
446
- else if (typeof content === 'string' && needsCacheAdd) {
447
- workingContent = [
448
- { type: _enum.ContentTypes.TEXT, text: content },
449
- { cachePoint: { type: 'default' } },
450
- ];
451
- cachePointsAdded++;
452
- }
453
- else if (typeof content === 'string' && hasSerializationProps) {
454
- workingContent = content;
455
- }
456
- else {
457
- continue;
458
- }
459
- updatedMessages[i] = cloneMessage(originalMessage, workingContent);
460
- }
461
- return updatedMessages;
290
+ if (!Array.isArray(messages) || messages.length === 0) return messages;
291
+ const updatedMessages = [...messages];
292
+ let cachePointsAdded = 0;
293
+ for (let i = updatedMessages.length - 1; i >= 0; i--) {
294
+ const originalMessage = updatedMessages[i];
295
+ const messageType = "getType" in originalMessage && typeof originalMessage.getType === "function" ? originalMessage.getType() : void 0;
296
+ const messageRole = "role" in originalMessage && typeof originalMessage.role === "string" ? originalMessage.role : void 0;
297
+ if (messageType === "system" || messageRole === "system") {
298
+ updatedMessages[i] = sanitizeBedrockSystemMessage(originalMessage);
299
+ continue;
300
+ }
301
+ const isToolMessage = messageType === "tool" || messageRole === "tool";
302
+ const isUserMessage = messageType === "human" || messageRole === "user";
303
+ const content = originalMessage.content;
304
+ const hasSerializationProps = "lc_kwargs" in originalMessage || "lc_serializable" in originalMessage || "lc_namespace" in originalMessage;
305
+ const hasArrayContent = Array.isArray(content);
306
+ const needsCacheAdd = cachePointsAdded < 2 && isUserMessage && !isToolMessage && !(typeof content === "string" && content === "") && !isSyntheticMetaMessage(originalMessage) && (typeof content === "string" || hasArrayContent);
307
+ if (!needsCacheAdd && !hasArrayContent && !hasSerializationProps) continue;
308
+ let workingContent;
309
+ let modified = hasSerializationProps;
310
+ if (hasArrayContent) {
311
+ const src = content;
312
+ workingContent = [];
313
+ let lastNonEmptyTextIndex = -1;
314
+ for (let j = 0; j < src.length; j++) {
315
+ const block = src[j];
316
+ if (isCachePoint(block)) {
317
+ modified = true;
318
+ continue;
319
+ }
320
+ const cloned = { ...block };
321
+ if ("cache_control" in cloned) {
322
+ delete cloned.cache_control;
323
+ modified = true;
324
+ }
325
+ const type = cloned.type;
326
+ if (type === "text" || type === "text") {
327
+ const text = cloned.text;
328
+ if (text != null && text.trim() !== "") lastNonEmptyTextIndex = workingContent.length;
329
+ }
330
+ workingContent.push(cloned);
331
+ }
332
+ if (!modified && !needsCacheAdd) continue;
333
+ if (needsCacheAdd && lastNonEmptyTextIndex >= 0) {
334
+ workingContent.splice(lastNonEmptyTextIndex + 1, 0, { cachePoint: { type: "default" } });
335
+ cachePointsAdded++;
336
+ }
337
+ } else if (typeof content === "string" && needsCacheAdd) {
338
+ workingContent = [{
339
+ type: "text",
340
+ text: content
341
+ }, { cachePoint: { type: "default" } }];
342
+ cachePointsAdded++;
343
+ } else if (typeof content === "string" && hasSerializationProps) workingContent = content;
344
+ else continue;
345
+ updatedMessages[i] = cloneMessage(originalMessage, workingContent);
346
+ }
347
+ return updatedMessages;
462
348
  }
463
-
349
+ //#endregion
464
350
  exports.addBedrockCacheControl = addBedrockCacheControl;
465
351
  exports.addCacheControl = addCacheControl;
466
352
  exports.addCacheControlToStablePrefixMessages = addCacheControlToStablePrefixMessages;
467
353
  exports.stripAnthropicCacheControl = stripAnthropicCacheControl;
468
354
  exports.stripBedrockCacheControl = stripBedrockCacheControl;
469
- //# sourceMappingURL=cache.cjs.map
355
+
356
+ //# sourceMappingURL=cache.cjs.map