@librechat/agents 3.4.7 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (924) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +0 -356
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/agents/projection.cjs +0 -9
  4. package/dist/cjs/agents/projection.cjs.map +1 -1
  5. package/dist/cjs/common/constants.cjs +0 -26
  6. package/dist/cjs/common/constants.cjs.map +1 -1
  7. package/dist/cjs/common/enum.cjs +0 -85
  8. package/dist/cjs/common/enum.cjs.map +1 -1
  9. package/dist/cjs/events.cjs +0 -14
  10. package/dist/cjs/events.cjs.map +1 -1
  11. package/dist/cjs/graphs/Graph.cjs +1 -909
  12. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  13. package/dist/cjs/graphs/MultiAgentGraph.cjs +7 -272
  14. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  15. package/dist/cjs/graphs/applyGraphRuntimeConfig.cjs.map +1 -1
  16. package/dist/cjs/graphs/createGraph.cjs.map +1 -1
  17. package/dist/cjs/hitl/askUserQuestion.cjs +0 -53
  18. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  19. package/dist/cjs/hitl/askUserQuestions.cjs +0 -20
  20. package/dist/cjs/hitl/askUserQuestions.cjs.map +1 -1
  21. package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs +0 -6
  22. package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs.map +1 -1
  23. package/dist/cjs/hooks/HookRegistry.cjs +0 -127
  24. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  25. package/dist/cjs/hooks/createToolPolicyHook.cjs +0 -38
  26. package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
  27. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +0 -77
  28. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  29. package/dist/cjs/hooks/executeHooks.cjs +0 -79
  30. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  31. package/dist/cjs/hooks/index.cjs +0 -16
  32. package/dist/cjs/hooks/index.cjs.map +1 -1
  33. package/dist/cjs/hooks/matchers.cjs +0 -104
  34. package/dist/cjs/hooks/matchers.cjs.map +1 -1
  35. package/dist/cjs/hooks/types.cjs +0 -8
  36. package/dist/cjs/hooks/types.cjs.map +1 -1
  37. package/dist/cjs/instrumentation.cjs +0 -14
  38. package/dist/cjs/instrumentation.cjs.map +1 -1
  39. package/dist/cjs/langfuse.cjs +0 -75
  40. package/dist/cjs/langfuse.cjs.map +1 -1
  41. package/dist/cjs/langfuseConfig.cjs.map +1 -1
  42. package/dist/cjs/langfuseRuntimeContext.cjs +0 -13
  43. package/dist/cjs/langfuseRuntimeContext.cjs.map +1 -1
  44. package/dist/cjs/langfuseRuntimeScope.cjs +0 -4
  45. package/dist/cjs/langfuseRuntimeScope.cjs.map +1 -1
  46. package/dist/cjs/langfuseSpanRegistry.cjs +0 -28
  47. package/dist/cjs/langfuseSpanRegistry.cjs.map +1 -1
  48. package/dist/cjs/langfuseToolOutputTracing.cjs +0 -3
  49. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  50. package/dist/cjs/langfuseTraceShaping.cjs +0 -74
  51. package/dist/cjs/langfuseTraceShaping.cjs.map +1 -1
  52. package/dist/cjs/llm/anthropic/index.cjs +0 -3
  53. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  55. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +1 -111
  56. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  57. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +0 -1
  58. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  59. package/dist/cjs/llm/anthropic/utils/stream_events.cjs +0 -8
  60. package/dist/cjs/llm/anthropic/utils/stream_events.cjs.map +1 -1
  61. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  62. package/dist/cjs/llm/bedrock/cachePoints.cjs.map +1 -1
  63. package/dist/cjs/llm/bedrock/index.cjs +1 -95
  64. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  65. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  66. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +0 -78
  67. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  68. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +0 -24
  69. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
  70. package/dist/cjs/llm/contextOverflowRecovery.cjs +0 -62
  71. package/dist/cjs/llm/contextOverflowRecovery.cjs.map +1 -1
  72. package/dist/cjs/llm/fake.cjs.map +1 -1
  73. package/dist/cjs/llm/google/index.cjs +2 -21
  74. package/dist/cjs/llm/google/index.cjs.map +1 -1
  75. package/dist/cjs/llm/google/utils/common.cjs +0 -35
  76. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  77. package/dist/cjs/llm/init.cjs +0 -9
  78. package/dist/cjs/llm/init.cjs.map +1 -1
  79. package/dist/cjs/llm/invoke.cjs +1 -270
  80. package/dist/cjs/llm/invoke.cjs.map +1 -1
  81. package/dist/cjs/llm/mistral/index.cjs.map +1 -1
  82. package/dist/cjs/llm/openai/index.cjs +0 -99
  83. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  84. package/dist/cjs/llm/openai/streamMetadata.cjs +0 -21
  85. package/dist/cjs/llm/openai/streamMetadata.cjs.map +1 -1
  86. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  87. package/dist/cjs/llm/openrouter/index.cjs +0 -1
  88. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  89. package/dist/cjs/llm/openrouter/toolCache.cjs +0 -6
  90. package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
  91. package/dist/cjs/llm/preempt.cjs +0 -75
  92. package/dist/cjs/llm/preempt.cjs.map +1 -1
  93. package/dist/cjs/llm/providers.cjs.map +1 -1
  94. package/dist/cjs/llm/request.cjs +0 -10
  95. package/dist/cjs/llm/request.cjs.map +1 -1
  96. package/dist/cjs/llm/stream/chunkAdapters.cjs +0 -62
  97. package/dist/cjs/llm/stream/chunkAdapters.cjs.map +1 -1
  98. package/dist/cjs/llm/stream/smoother.cjs +0 -58
  99. package/dist/cjs/llm/stream/smoother.cjs.map +1 -1
  100. package/dist/cjs/llm/streamLimits.cjs +4 -293
  101. package/dist/cjs/llm/streamLimits.cjs.map +1 -1
  102. package/dist/cjs/llm/truncation.cjs +0 -36
  103. package/dist/cjs/llm/truncation.cjs.map +1 -1
  104. package/dist/cjs/llm/vertexai/index.cjs +0 -330
  105. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  106. package/dist/cjs/messages/alternation.cjs +0 -43
  107. package/dist/cjs/messages/alternation.cjs.map +1 -1
  108. package/dist/cjs/messages/anthropicToolCache.cjs +0 -45
  109. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
  110. package/dist/cjs/messages/assistantPhase.cjs +0 -12
  111. package/dist/cjs/messages/assistantPhase.cjs.map +1 -1
  112. package/dist/cjs/messages/budget.cjs +0 -9
  113. package/dist/cjs/messages/budget.cjs.map +1 -1
  114. package/dist/cjs/messages/cache.cjs +0 -172
  115. package/dist/cjs/messages/cache.cjs.map +1 -1
  116. package/dist/cjs/messages/content.cjs +0 -9
  117. package/dist/cjs/messages/content.cjs.map +1 -1
  118. package/dist/cjs/messages/contextPruning.cjs +0 -15
  119. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  120. package/dist/cjs/messages/contextPruningSettings.cjs +0 -3
  121. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
  122. package/dist/cjs/messages/core.cjs +0 -48
  123. package/dist/cjs/messages/core.cjs.map +1 -1
  124. package/dist/cjs/messages/format.cjs +1 -345
  125. package/dist/cjs/messages/format.cjs.map +1 -1
  126. package/dist/cjs/messages/handoffCue.cjs +0 -36
  127. package/dist/cjs/messages/handoffCue.cjs.map +1 -1
  128. package/dist/cjs/messages/ids.cjs.map +1 -1
  129. package/dist/cjs/messages/injected.cjs +0 -33
  130. package/dist/cjs/messages/injected.cjs.map +1 -1
  131. package/dist/cjs/messages/langchain.cjs +0 -14
  132. package/dist/cjs/messages/langchain.cjs.map +1 -1
  133. package/dist/cjs/messages/prune.cjs +1 -184
  134. package/dist/cjs/messages/prune.cjs.map +1 -1
  135. package/dist/cjs/messages/recency.cjs +0 -32
  136. package/dist/cjs/messages/recency.cjs.map +1 -1
  137. package/dist/cjs/messages/reducer.cjs +0 -30
  138. package/dist/cjs/messages/reducer.cjs.map +1 -1
  139. package/dist/cjs/messages/tools.cjs +0 -14
  140. package/dist/cjs/messages/tools.cjs.map +1 -1
  141. package/dist/cjs/openai/index.cjs.map +1 -1
  142. package/dist/cjs/prompts/activityLabel.cjs +9 -79
  143. package/dist/cjs/prompts/activityLabel.cjs.map +1 -1
  144. package/dist/cjs/responses/index.cjs.map +1 -1
  145. package/dist/cjs/run.cjs +2 -538
  146. package/dist/cjs/run.cjs.map +1 -1
  147. package/dist/cjs/session/AgentSession.cjs +1 -17
  148. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  149. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  150. package/dist/cjs/session/handlers.cjs +0 -7
  151. package/dist/cjs/session/handlers.cjs.map +1 -1
  152. package/dist/cjs/session/ids.cjs.map +1 -1
  153. package/dist/cjs/session/messageSerialization.cjs +0 -4
  154. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  155. package/dist/cjs/stream.cjs +1 -93
  156. package/dist/cjs/stream.cjs.map +1 -1
  157. package/dist/cjs/summarization/index.cjs +0 -27
  158. package/dist/cjs/summarization/index.cjs.map +1 -1
  159. package/dist/cjs/summarization/node.cjs +0 -273
  160. package/dist/cjs/summarization/node.cjs.map +1 -1
  161. package/dist/cjs/tools/BashExecutor.cjs +0 -35
  162. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  163. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +0 -24
  164. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  165. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  166. package/dist/cjs/tools/CodeExecutor.cjs +0 -13
  167. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  168. package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
  169. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +0 -101
  170. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  171. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  172. package/dist/cjs/tools/SkillTool.cjs +0 -5
  173. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  174. package/dist/cjs/tools/SubagentTool.cjs +0 -10
  175. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  176. package/dist/cjs/tools/ToolNode.cjs +6 -1038
  177. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  178. package/dist/cjs/tools/ToolSearch.cjs +0 -179
  179. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  180. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
  181. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
  182. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +0 -39
  183. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  184. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  185. package/dist/cjs/tools/eagerEventExecution.cjs +0 -6
  186. package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
  187. package/dist/cjs/tools/handlers.cjs +1 -41
  188. package/dist/cjs/tools/handlers.cjs.map +1 -1
  189. package/dist/cjs/tools/intentArg.cjs +1 -132
  190. package/dist/cjs/tools/intentArg.cjs.map +1 -1
  191. package/dist/cjs/tools/local/CompileCheckTool.cjs +0 -25
  192. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  193. package/dist/cjs/tools/local/FileCheckpointer.cjs +0 -23
  194. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  195. package/dist/cjs/tools/local/LocalCodingTools.cjs +0 -80
  196. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  197. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +0 -126
  198. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  199. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  200. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +0 -12
  201. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  202. package/dist/cjs/tools/local/attachments.cjs +0 -44
  203. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  204. package/dist/cjs/tools/local/bashAst.cjs +0 -16
  205. package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
  206. package/dist/cjs/tools/local/editStrategies.cjs +0 -14
  207. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
  208. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  209. package/dist/cjs/tools/local/syntaxCheck.cjs +0 -31
  210. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
  211. package/dist/cjs/tools/local/textEncoding.cjs +0 -11
  212. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
  213. package/dist/cjs/tools/local/workspaceFS.cjs +0 -33
  214. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
  215. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  216. package/dist/cjs/tools/schema.cjs +0 -8
  217. package/dist/cjs/tools/schema.cjs.map +1 -1
  218. package/dist/cjs/tools/search/anthropic.cjs +0 -9
  219. package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
  220. package/dist/cjs/tools/search/content.cjs.map +1 -1
  221. package/dist/cjs/tools/search/crw-scraper.cjs +0 -33
  222. package/dist/cjs/tools/search/crw-scraper.cjs.map +1 -1
  223. package/dist/cjs/tools/search/crw-search.cjs +0 -2
  224. package/dist/cjs/tools/search/crw-search.cjs.map +1 -1
  225. package/dist/cjs/tools/search/firecrawl.cjs +0 -25
  226. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  227. package/dist/cjs/tools/search/format.cjs +0 -30
  228. package/dist/cjs/tools/search/format.cjs.map +1 -1
  229. package/dist/cjs/tools/search/highlights.cjs +0 -16
  230. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  231. package/dist/cjs/tools/search/keenable-scraper.cjs +0 -8
  232. package/dist/cjs/tools/search/keenable-scraper.cjs.map +1 -1
  233. package/dist/cjs/tools/search/keenable-search.cjs +0 -7
  234. package/dist/cjs/tools/search/keenable-search.cjs.map +1 -1
  235. package/dist/cjs/tools/search/rerankers.cjs +0 -35
  236. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  237. package/dist/cjs/tools/search/schema.cjs +0 -1
  238. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  239. package/dist/cjs/tools/search/search.cjs +1 -14
  240. package/dist/cjs/tools/search/search.cjs.map +1 -1
  241. package/dist/cjs/tools/search/serper-scraper.cjs +0 -46
  242. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  243. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  244. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  245. package/dist/cjs/tools/search/tool.cjs +0 -25
  246. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  247. package/dist/cjs/tools/search/utils.cjs +0 -8
  248. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  249. package/dist/cjs/tools/skillCatalog.cjs +0 -6
  250. package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
  251. package/dist/cjs/tools/streamedToolCallSeals.cjs +0 -6
  252. package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
  253. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +0 -2
  254. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -1
  255. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +3 -213
  256. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  257. package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
  258. package/dist/cjs/tools/subagent/childGraphConfig.cjs +0 -4
  259. package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -1
  260. package/dist/cjs/tools/subagent/runtimeLimits.cjs.map +1 -1
  261. package/dist/cjs/tools/toolOutputReferences.cjs +1 -322
  262. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  263. package/dist/cjs/types/hitl.cjs +0 -5
  264. package/dist/cjs/types/hitl.cjs.map +1 -1
  265. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  266. package/dist/cjs/utils/errors.cjs +14 -165
  267. package/dist/cjs/utils/errors.cjs.map +1 -1
  268. package/dist/cjs/utils/events.cjs +0 -10
  269. package/dist/cjs/utils/events.cjs.map +1 -1
  270. package/dist/cjs/utils/graph.cjs.map +1 -1
  271. package/dist/cjs/utils/handlers.cjs +0 -3
  272. package/dist/cjs/utils/handlers.cjs.map +1 -1
  273. package/dist/cjs/utils/llm.cjs +0 -1
  274. package/dist/cjs/utils/llm.cjs.map +1 -1
  275. package/dist/cjs/utils/misc.cjs +0 -16
  276. package/dist/cjs/utils/misc.cjs.map +1 -1
  277. package/dist/cjs/utils/proxy.cjs +0 -26
  278. package/dist/cjs/utils/proxy.cjs.map +1 -1
  279. package/dist/cjs/utils/run.cjs +0 -6
  280. package/dist/cjs/utils/run.cjs.map +1 -1
  281. package/dist/cjs/utils/schema.cjs +0 -5
  282. package/dist/cjs/utils/schema.cjs.map +1 -1
  283. package/dist/cjs/utils/title.cjs +0 -6
  284. package/dist/cjs/utils/title.cjs.map +1 -1
  285. package/dist/cjs/utils/tokens.cjs +0 -113
  286. package/dist/cjs/utils/tokens.cjs.map +1 -1
  287. package/dist/cjs/utils/toolContent.cjs +0 -41
  288. package/dist/cjs/utils/toolContent.cjs.map +1 -1
  289. package/dist/cjs/utils/truncation.cjs +0 -61
  290. package/dist/cjs/utils/truncation.cjs.map +1 -1
  291. package/dist/esm/agents/AgentContext.mjs +0 -356
  292. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  293. package/dist/esm/agents/projection.mjs +0 -9
  294. package/dist/esm/agents/projection.mjs.map +1 -1
  295. package/dist/esm/common/constants.mjs +0 -26
  296. package/dist/esm/common/constants.mjs.map +1 -1
  297. package/dist/esm/common/enum.mjs +0 -85
  298. package/dist/esm/common/enum.mjs.map +1 -1
  299. package/dist/esm/events.mjs +0 -14
  300. package/dist/esm/events.mjs.map +1 -1
  301. package/dist/esm/graphs/Graph.mjs +1 -909
  302. package/dist/esm/graphs/Graph.mjs.map +1 -1
  303. package/dist/esm/graphs/MultiAgentGraph.mjs +7 -272
  304. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  305. package/dist/esm/graphs/applyGraphRuntimeConfig.mjs.map +1 -1
  306. package/dist/esm/graphs/createGraph.mjs.map +1 -1
  307. package/dist/esm/hitl/askUserQuestion.mjs +0 -53
  308. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  309. package/dist/esm/hitl/askUserQuestions.mjs +0 -20
  310. package/dist/esm/hitl/askUserQuestions.mjs.map +1 -1
  311. package/dist/esm/hitl/askUserQuestionsInterrupt.mjs +0 -6
  312. package/dist/esm/hitl/askUserQuestionsInterrupt.mjs.map +1 -1
  313. package/dist/esm/hooks/HookRegistry.mjs +0 -127
  314. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  315. package/dist/esm/hooks/createToolPolicyHook.mjs +0 -38
  316. package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
  317. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +0 -77
  318. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  319. package/dist/esm/hooks/executeHooks.mjs +0 -79
  320. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  321. package/dist/esm/hooks/index.mjs +0 -16
  322. package/dist/esm/hooks/index.mjs.map +1 -1
  323. package/dist/esm/hooks/matchers.mjs +0 -104
  324. package/dist/esm/hooks/matchers.mjs.map +1 -1
  325. package/dist/esm/hooks/types.mjs +0 -8
  326. package/dist/esm/hooks/types.mjs.map +1 -1
  327. package/dist/esm/instrumentation.mjs +0 -14
  328. package/dist/esm/instrumentation.mjs.map +1 -1
  329. package/dist/esm/langfuse.mjs +0 -75
  330. package/dist/esm/langfuse.mjs.map +1 -1
  331. package/dist/esm/langfuseConfig.mjs.map +1 -1
  332. package/dist/esm/langfuseRuntimeContext.mjs +0 -13
  333. package/dist/esm/langfuseRuntimeContext.mjs.map +1 -1
  334. package/dist/esm/langfuseRuntimeScope.mjs +0 -4
  335. package/dist/esm/langfuseRuntimeScope.mjs.map +1 -1
  336. package/dist/esm/langfuseSpanRegistry.mjs +0 -28
  337. package/dist/esm/langfuseSpanRegistry.mjs.map +1 -1
  338. package/dist/esm/langfuseToolOutputTracing.mjs +0 -3
  339. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  340. package/dist/esm/langfuseTraceShaping.mjs +0 -74
  341. package/dist/esm/langfuseTraceShaping.mjs.map +1 -1
  342. package/dist/esm/llm/anthropic/index.mjs +0 -3
  343. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  344. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  345. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +1 -111
  346. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  347. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +0 -1
  348. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  349. package/dist/esm/llm/anthropic/utils/stream_events.mjs +0 -8
  350. package/dist/esm/llm/anthropic/utils/stream_events.mjs.map +1 -1
  351. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  352. package/dist/esm/llm/bedrock/cachePoints.mjs.map +1 -1
  353. package/dist/esm/llm/bedrock/index.mjs +1 -95
  354. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  355. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  356. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +0 -78
  357. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  358. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +0 -24
  359. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
  360. package/dist/esm/llm/contextOverflowRecovery.mjs +0 -62
  361. package/dist/esm/llm/contextOverflowRecovery.mjs.map +1 -1
  362. package/dist/esm/llm/fake.mjs.map +1 -1
  363. package/dist/esm/llm/google/index.mjs +2 -21
  364. package/dist/esm/llm/google/index.mjs.map +1 -1
  365. package/dist/esm/llm/google/utils/common.mjs +0 -35
  366. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  367. package/dist/esm/llm/init.mjs +0 -9
  368. package/dist/esm/llm/init.mjs.map +1 -1
  369. package/dist/esm/llm/invoke.mjs +1 -270
  370. package/dist/esm/llm/invoke.mjs.map +1 -1
  371. package/dist/esm/llm/mistral/index.mjs.map +1 -1
  372. package/dist/esm/llm/openai/index.mjs +0 -99
  373. package/dist/esm/llm/openai/index.mjs.map +1 -1
  374. package/dist/esm/llm/openai/streamMetadata.mjs +0 -21
  375. package/dist/esm/llm/openai/streamMetadata.mjs.map +1 -1
  376. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  377. package/dist/esm/llm/openrouter/index.mjs +0 -1
  378. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  379. package/dist/esm/llm/openrouter/toolCache.mjs +0 -6
  380. package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
  381. package/dist/esm/llm/preempt.mjs +0 -75
  382. package/dist/esm/llm/preempt.mjs.map +1 -1
  383. package/dist/esm/llm/providers.mjs.map +1 -1
  384. package/dist/esm/llm/request.mjs +0 -10
  385. package/dist/esm/llm/request.mjs.map +1 -1
  386. package/dist/esm/llm/stream/chunkAdapters.mjs +0 -62
  387. package/dist/esm/llm/stream/chunkAdapters.mjs.map +1 -1
  388. package/dist/esm/llm/stream/smoother.mjs +0 -58
  389. package/dist/esm/llm/stream/smoother.mjs.map +1 -1
  390. package/dist/esm/llm/streamLimits.mjs +4 -293
  391. package/dist/esm/llm/streamLimits.mjs.map +1 -1
  392. package/dist/esm/llm/truncation.mjs +0 -36
  393. package/dist/esm/llm/truncation.mjs.map +1 -1
  394. package/dist/esm/llm/vertexai/index.mjs +0 -330
  395. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  396. package/dist/esm/messages/alternation.mjs +0 -43
  397. package/dist/esm/messages/alternation.mjs.map +1 -1
  398. package/dist/esm/messages/anthropicToolCache.mjs +0 -45
  399. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
  400. package/dist/esm/messages/assistantPhase.mjs +0 -12
  401. package/dist/esm/messages/assistantPhase.mjs.map +1 -1
  402. package/dist/esm/messages/budget.mjs +0 -9
  403. package/dist/esm/messages/budget.mjs.map +1 -1
  404. package/dist/esm/messages/cache.mjs +0 -172
  405. package/dist/esm/messages/cache.mjs.map +1 -1
  406. package/dist/esm/messages/content.mjs +0 -9
  407. package/dist/esm/messages/content.mjs.map +1 -1
  408. package/dist/esm/messages/contextPruning.mjs +0 -15
  409. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  410. package/dist/esm/messages/contextPruningSettings.mjs +0 -3
  411. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
  412. package/dist/esm/messages/core.mjs +0 -48
  413. package/dist/esm/messages/core.mjs.map +1 -1
  414. package/dist/esm/messages/format.mjs +1 -345
  415. package/dist/esm/messages/format.mjs.map +1 -1
  416. package/dist/esm/messages/handoffCue.mjs +0 -36
  417. package/dist/esm/messages/handoffCue.mjs.map +1 -1
  418. package/dist/esm/messages/ids.mjs.map +1 -1
  419. package/dist/esm/messages/injected.mjs +0 -33
  420. package/dist/esm/messages/injected.mjs.map +1 -1
  421. package/dist/esm/messages/langchain.mjs +0 -14
  422. package/dist/esm/messages/langchain.mjs.map +1 -1
  423. package/dist/esm/messages/prune.mjs +1 -184
  424. package/dist/esm/messages/prune.mjs.map +1 -1
  425. package/dist/esm/messages/recency.mjs +0 -32
  426. package/dist/esm/messages/recency.mjs.map +1 -1
  427. package/dist/esm/messages/reducer.mjs +0 -30
  428. package/dist/esm/messages/reducer.mjs.map +1 -1
  429. package/dist/esm/messages/tools.mjs +0 -14
  430. package/dist/esm/messages/tools.mjs.map +1 -1
  431. package/dist/esm/openai/index.mjs.map +1 -1
  432. package/dist/esm/prompts/activityLabel.mjs +9 -79
  433. package/dist/esm/prompts/activityLabel.mjs.map +1 -1
  434. package/dist/esm/responses/index.mjs.map +1 -1
  435. package/dist/esm/run.mjs +2 -538
  436. package/dist/esm/run.mjs.map +1 -1
  437. package/dist/esm/session/AgentSession.mjs +1 -17
  438. package/dist/esm/session/AgentSession.mjs.map +1 -1
  439. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  440. package/dist/esm/session/handlers.mjs +0 -7
  441. package/dist/esm/session/handlers.mjs.map +1 -1
  442. package/dist/esm/session/ids.mjs.map +1 -1
  443. package/dist/esm/session/messageSerialization.mjs +0 -4
  444. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  445. package/dist/esm/stream.mjs +1 -93
  446. package/dist/esm/stream.mjs.map +1 -1
  447. package/dist/esm/summarization/index.mjs +0 -27
  448. package/dist/esm/summarization/index.mjs.map +1 -1
  449. package/dist/esm/summarization/node.mjs +0 -273
  450. package/dist/esm/summarization/node.mjs.map +1 -1
  451. package/dist/esm/tools/BashExecutor.mjs +0 -35
  452. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  453. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +0 -24
  454. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  455. package/dist/esm/tools/Calculator.mjs.map +1 -1
  456. package/dist/esm/tools/CodeExecutor.mjs +0 -13
  457. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  458. package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
  459. package/dist/esm/tools/ProgrammaticToolCalling.mjs +0 -101
  460. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  461. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  462. package/dist/esm/tools/SkillTool.mjs +0 -5
  463. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  464. package/dist/esm/tools/SubagentTool.mjs +0 -10
  465. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  466. package/dist/esm/tools/ToolNode.mjs +6 -1038
  467. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  468. package/dist/esm/tools/ToolSearch.mjs +0 -179
  469. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  470. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
  471. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
  472. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +0 -39
  473. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  474. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  475. package/dist/esm/tools/eagerEventExecution.mjs +0 -6
  476. package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
  477. package/dist/esm/tools/handlers.mjs +1 -41
  478. package/dist/esm/tools/handlers.mjs.map +1 -1
  479. package/dist/esm/tools/intentArg.mjs +1 -132
  480. package/dist/esm/tools/intentArg.mjs.map +1 -1
  481. package/dist/esm/tools/local/CompileCheckTool.mjs +0 -25
  482. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  483. package/dist/esm/tools/local/FileCheckpointer.mjs +0 -23
  484. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  485. package/dist/esm/tools/local/LocalCodingTools.mjs +0 -80
  486. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  487. package/dist/esm/tools/local/LocalExecutionEngine.mjs +0 -126
  488. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  489. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  490. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +0 -12
  491. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  492. package/dist/esm/tools/local/attachments.mjs +0 -44
  493. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  494. package/dist/esm/tools/local/bashAst.mjs +0 -16
  495. package/dist/esm/tools/local/bashAst.mjs.map +1 -1
  496. package/dist/esm/tools/local/editStrategies.mjs +0 -14
  497. package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
  498. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  499. package/dist/esm/tools/local/syntaxCheck.mjs +0 -31
  500. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
  501. package/dist/esm/tools/local/textEncoding.mjs +0 -11
  502. package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
  503. package/dist/esm/tools/local/workspaceFS.mjs +0 -33
  504. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
  505. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  506. package/dist/esm/tools/schema.mjs +0 -8
  507. package/dist/esm/tools/schema.mjs.map +1 -1
  508. package/dist/esm/tools/search/anthropic.mjs +0 -9
  509. package/dist/esm/tools/search/anthropic.mjs.map +1 -1
  510. package/dist/esm/tools/search/content.mjs.map +1 -1
  511. package/dist/esm/tools/search/crw-scraper.mjs +0 -33
  512. package/dist/esm/tools/search/crw-scraper.mjs.map +1 -1
  513. package/dist/esm/tools/search/crw-search.mjs +0 -2
  514. package/dist/esm/tools/search/crw-search.mjs.map +1 -1
  515. package/dist/esm/tools/search/firecrawl.mjs +0 -25
  516. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  517. package/dist/esm/tools/search/format.mjs +0 -30
  518. package/dist/esm/tools/search/format.mjs.map +1 -1
  519. package/dist/esm/tools/search/highlights.mjs +0 -16
  520. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  521. package/dist/esm/tools/search/keenable-scraper.mjs +0 -8
  522. package/dist/esm/tools/search/keenable-scraper.mjs.map +1 -1
  523. package/dist/esm/tools/search/keenable-search.mjs +0 -7
  524. package/dist/esm/tools/search/keenable-search.mjs.map +1 -1
  525. package/dist/esm/tools/search/rerankers.mjs +0 -35
  526. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  527. package/dist/esm/tools/search/schema.mjs +0 -1
  528. package/dist/esm/tools/search/schema.mjs.map +1 -1
  529. package/dist/esm/tools/search/search.mjs +1 -14
  530. package/dist/esm/tools/search/search.mjs.map +1 -1
  531. package/dist/esm/tools/search/serper-scraper.mjs +0 -46
  532. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  533. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  534. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  535. package/dist/esm/tools/search/tool.mjs +0 -25
  536. package/dist/esm/tools/search/tool.mjs.map +1 -1
  537. package/dist/esm/tools/search/utils.mjs +0 -8
  538. package/dist/esm/tools/search/utils.mjs.map +1 -1
  539. package/dist/esm/tools/skillCatalog.mjs +0 -6
  540. package/dist/esm/tools/skillCatalog.mjs.map +1 -1
  541. package/dist/esm/tools/streamedToolCallSeals.mjs +0 -6
  542. package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
  543. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +0 -2
  544. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -1
  545. package/dist/esm/tools/subagent/SubagentExecutor.mjs +3 -213
  546. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  547. package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
  548. package/dist/esm/tools/subagent/childGraphConfig.mjs +0 -4
  549. package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -1
  550. package/dist/esm/tools/subagent/runtimeLimits.mjs.map +1 -1
  551. package/dist/esm/tools/toolOutputReferences.mjs +1 -322
  552. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  553. package/dist/esm/types/hitl.mjs +0 -5
  554. package/dist/esm/types/hitl.mjs.map +1 -1
  555. package/dist/esm/utils/callbacks.mjs.map +1 -1
  556. package/dist/esm/utils/errors.mjs +14 -165
  557. package/dist/esm/utils/errors.mjs.map +1 -1
  558. package/dist/esm/utils/events.mjs +0 -10
  559. package/dist/esm/utils/events.mjs.map +1 -1
  560. package/dist/esm/utils/graph.mjs.map +1 -1
  561. package/dist/esm/utils/handlers.mjs +0 -3
  562. package/dist/esm/utils/handlers.mjs.map +1 -1
  563. package/dist/esm/utils/llm.mjs +0 -1
  564. package/dist/esm/utils/llm.mjs.map +1 -1
  565. package/dist/esm/utils/misc.mjs +0 -16
  566. package/dist/esm/utils/misc.mjs.map +1 -1
  567. package/dist/esm/utils/proxy.mjs +0 -26
  568. package/dist/esm/utils/proxy.mjs.map +1 -1
  569. package/dist/esm/utils/run.mjs +0 -6
  570. package/dist/esm/utils/run.mjs.map +1 -1
  571. package/dist/esm/utils/schema.mjs +0 -5
  572. package/dist/esm/utils/schema.mjs.map +1 -1
  573. package/dist/esm/utils/title.mjs +0 -6
  574. package/dist/esm/utils/title.mjs.map +1 -1
  575. package/dist/esm/utils/tokens.mjs +0 -113
  576. package/dist/esm/utils/tokens.mjs.map +1 -1
  577. package/dist/esm/utils/toolContent.mjs +0 -41
  578. package/dist/esm/utils/toolContent.mjs.map +1 -1
  579. package/dist/esm/utils/truncation.mjs +0 -61
  580. package/dist/esm/utils/truncation.mjs.map +1 -1
  581. package/package.json +35 -32
  582. package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +0 -52
  583. package/dist/types/test/mockTools.d.ts +0 -28
  584. package/dist/types/utils/__tests__/fixtures/contextOverflowSignatures.d.ts +0 -40
  585. package/src/__tests__/stream.eagerArgsDivergence.test.ts +0 -911
  586. package/src/__tests__/stream.eagerEventExecution.test.ts +0 -5046
  587. package/src/__tests__/stream.streamLimits.test.ts +0 -1982
  588. package/src/agents/__tests__/AgentContext.anthropic.live.test.ts +0 -448
  589. package/src/agents/__tests__/AgentContext.bedrock.live.test.ts +0 -655
  590. package/src/agents/__tests__/AgentContext.openrouter.live.test.ts +0 -128
  591. package/src/agents/__tests__/AgentContext.overflow.test.ts +0 -205
  592. package/src/agents/__tests__/AgentContext.test.ts +0 -2425
  593. package/src/agents/__tests__/projection.test.ts +0 -73
  594. package/src/agents/__tests__/promptCacheLiveHelpers.ts +0 -175
  595. package/src/aggregator.test.ts +0 -1214
  596. package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +0 -273
  597. package/src/graphs/__tests__/Graph.closeRunStep.test.ts +0 -385
  598. package/src/graphs/__tests__/Graph.contextOverflow.test.ts +0 -1766
  599. package/src/graphs/__tests__/Graph.preemptSignal.test.ts +0 -126
  600. package/src/graphs/__tests__/Graph.reasoning.test.ts +0 -1717
  601. package/src/graphs/__tests__/Graph.subagentResumeState.test.ts +0 -80
  602. package/src/graphs/__tests__/MultiAgentGraph.test.ts +0 -177
  603. package/src/graphs/__tests__/composition.smoke.test.ts +0 -509
  604. package/src/graphs/__tests__/createGraph.test.ts +0 -206
  605. package/src/hooks/__tests__/HookRegistry.test.ts +0 -334
  606. package/src/hooks/__tests__/compactHooks.test.ts +0 -250
  607. package/src/hooks/__tests__/createToolPolicyHook.test.ts +0 -268
  608. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +0 -405
  609. package/src/hooks/__tests__/executeHooks.test.ts +0 -1294
  610. package/src/hooks/__tests__/integration.test.ts +0 -337
  611. package/src/hooks/__tests__/matchers.test.ts +0 -238
  612. package/src/hooks/__tests__/preemptBoundary.test.ts +0 -152
  613. package/src/hooks/__tests__/toolHooks.test.ts +0 -669
  614. package/src/llm/__tests__/contextOverflowRecovery.test.ts +0 -401
  615. package/src/llm/__tests__/fallbackOverflow.test.ts +0 -287
  616. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  617. package/src/llm/anthropic/inherited-content-utils.spec.ts +0 -249
  618. package/src/llm/anthropic/inherited-stream-events.spec.ts +0 -1259
  619. package/src/llm/anthropic/inherited-strict.spec.ts +0 -302
  620. package/src/llm/anthropic/llm.spec.ts +0 -3394
  621. package/src/llm/anthropic/utils/cross-provider-reasoning.test.ts +0 -383
  622. package/src/llm/anthropic/utils/cross-provider-server-tools.test.ts +0 -110
  623. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +0 -508
  624. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +0 -361
  625. package/src/llm/anthropic/utils/stripPrefillCache.test.ts +0 -111
  626. package/src/llm/anthropic/utils/tool-id-normalization.test.ts +0 -287
  627. package/src/llm/bedrock/inherited-cache.spec.ts +0 -144
  628. package/src/llm/bedrock/inherited.spec.ts +0 -724
  629. package/src/llm/bedrock/llm.spec.ts +0 -1533
  630. package/src/llm/bedrock/streamSealDispatch.test.ts +0 -331
  631. package/src/llm/bedrock/toolCache.test.ts +0 -194
  632. package/src/llm/bedrock/utils/cross-provider-reasoning.test.ts +0 -131
  633. package/src/llm/bedrock/utils/cross-provider-server-tools.test.ts +0 -122
  634. package/src/llm/bedrock/utils/message_inputs.test.ts +0 -650
  635. package/src/llm/bedrock/utils/message_outputs.test.ts +0 -85
  636. package/src/llm/bedrock/utils/toolResultCachePoint.test.ts +0 -118
  637. package/src/llm/custom-chat-models.smoke.test.ts +0 -1966
  638. package/src/llm/google/data/gettysburg10.wav +0 -0
  639. package/src/llm/google/data/hotdog.jpg +0 -0
  640. package/src/llm/google/inherited-stream-events.spec.ts +0 -350
  641. package/src/llm/google/llm.spec.ts +0 -1388
  642. package/src/llm/google/streamSmoothing.test.ts +0 -121
  643. package/src/llm/google/utils/common.test.ts +0 -196
  644. package/src/llm/invoke.alternation.test.ts +0 -87
  645. package/src/llm/invoke.handoffCue.test.ts +0 -112
  646. package/src/llm/invoke.streamLimits.test.ts +0 -142
  647. package/src/llm/invoke.test.ts +0 -1198
  648. package/src/llm/mistral/streamSmoothing.test.ts +0 -97
  649. package/src/llm/openai/cacheWriteTokens.test.ts +0 -112
  650. package/src/llm/openai/contentBlocks.test.ts +0 -381
  651. package/src/llm/openai/deepseek.test.ts +0 -747
  652. package/src/llm/openai/inherited-deepseek.spec.ts +0 -347
  653. package/src/llm/openai/inherited-xai.spec.ts +0 -416
  654. package/src/llm/openai/llm.spec.ts +0 -1774
  655. package/src/llm/openai/managedRequests.test.ts +0 -182
  656. package/src/llm/openai/sequentialToolCallSeals.test.ts +0 -199
  657. package/src/llm/openai/streamMetadata.spec.ts +0 -86
  658. package/src/llm/openai/streamMetadataDedup.spec.ts +0 -166
  659. package/src/llm/openai/utils/isReasoningModel.test.ts +0 -90
  660. package/src/llm/openai/utils/messages.test.ts +0 -488
  661. package/src/llm/openrouter/reasoning.test.ts +0 -561
  662. package/src/llm/openrouter/toolCache.test.ts +0 -134
  663. package/src/llm/preempt.test.ts +0 -323
  664. package/src/llm/stream/chunkAdapters.test.ts +0 -202
  665. package/src/llm/stream/reassembly.test.ts +0 -241
  666. package/src/llm/stream/smoother.bench.test.ts +0 -155
  667. package/src/llm/stream/smoother.test.ts +0 -519
  668. package/src/llm/streamLimits.test.ts +0 -450
  669. package/src/llm/truncation.test.ts +0 -242
  670. package/src/llm/vertexai/fixThoughtSignatures.test.ts +0 -154
  671. package/src/llm/vertexai/inherited-stream-events.spec.ts +0 -271
  672. package/src/llm/vertexai/llm.spec.ts +0 -159
  673. package/src/llm/vertexai/repairUsageMetadata.test.ts +0 -54
  674. package/src/llm/vertexai/sealStreamedToolCalls.test.ts +0 -88
  675. package/src/llm/vertexai/streamSealDispatch.test.ts +0 -148
  676. package/src/llm/vertexai/streamSmoothing.test.ts +0 -109
  677. package/src/messages/__tests__/anthropicToolCache.test.ts +0 -339
  678. package/src/messages/__tests__/observationMasking.test.ts +0 -312
  679. package/src/messages/__tests__/recency.test.ts +0 -267
  680. package/src/messages/__tests__/tools.test.ts +0 -473
  681. package/src/messages/alternation.test.ts +0 -212
  682. package/src/messages/assistantPhase.test.ts +0 -75
  683. package/src/messages/cache.tail.test.ts +0 -533
  684. package/src/messages/cache.test.ts +0 -2166
  685. package/src/messages/content.test.ts +0 -362
  686. package/src/messages/contextPruning.test.ts +0 -184
  687. package/src/messages/ensureThinkingBlock.test.ts +0 -1427
  688. package/src/messages/foldToollessToolBlocks.test.ts +0 -596
  689. package/src/messages/formatAgentMessages.reducer.test.ts +0 -162
  690. package/src/messages/formatAgentMessages.skills.test.ts +0 -513
  691. package/src/messages/formatAgentMessages.steer.test.ts +0 -598
  692. package/src/messages/formatAgentMessages.test.ts +0 -8111
  693. package/src/messages/formatAgentMessages.tools.test.ts +0 -522
  694. package/src/messages/formatMessage.test.ts +0 -693
  695. package/src/messages/handoffCue.test.ts +0 -96
  696. package/src/messages/injected.test.ts +0 -107
  697. package/src/messages/labelContentByAgent.test.ts +0 -962
  698. package/src/messages/reducer.spec.ts +0 -32
  699. package/src/messages/shiftIndexTokenCountMap.test.ts +0 -81
  700. package/src/messages/tailCacheConversion.test.ts +0 -161
  701. package/src/openai/__tests__/openai.test.ts +0 -337
  702. package/src/responses/__tests__/responses.test.ts +0 -652
  703. package/src/scripts/abort.ts +0 -157
  704. package/src/scripts/activity-labels/captured.json +0 -56
  705. package/src/scripts/activity-labels/checks.cjs +0 -205
  706. package/src/scripts/activity-labels/corpus.cjs +0 -473
  707. package/src/scripts/activity-labels/report.cjs +0 -203
  708. package/src/scripts/activity-labels/rescore.cjs +0 -102
  709. package/src/scripts/activity-labels/run.ts +0 -705
  710. package/src/scripts/activity-labels/variants.ts +0 -71
  711. package/src/scripts/ant_web_search.ts +0 -159
  712. package/src/scripts/ant_web_search_edge_case.ts +0 -163
  713. package/src/scripts/ant_web_search_error_edge_case.ts +0 -149
  714. package/src/scripts/args.ts +0 -48
  715. package/src/scripts/bedrock-cache-debug.ts +0 -250
  716. package/src/scripts/bedrock-content-aggregation-test.ts +0 -266
  717. package/src/scripts/bedrock-merge-test.ts +0 -107
  718. package/src/scripts/bedrock-parallel-tools-test.ts +0 -204
  719. package/src/scripts/bench-prompt-cache.ts +0 -479
  720. package/src/scripts/caching.ts +0 -132
  721. package/src/scripts/cli.ts +0 -172
  722. package/src/scripts/cli2.ts +0 -133
  723. package/src/scripts/cli3.ts +0 -184
  724. package/src/scripts/cli4.ts +0 -191
  725. package/src/scripts/cli5.ts +0 -191
  726. package/src/scripts/code_exec.ts +0 -214
  727. package/src/scripts/code_exec_files.ts +0 -237
  728. package/src/scripts/code_exec_multi_session.ts +0 -237
  729. package/src/scripts/code_exec_ptc.ts +0 -335
  730. package/src/scripts/code_exec_session.ts +0 -283
  731. package/src/scripts/code_exec_simple.ts +0 -148
  732. package/src/scripts/compare_pi_vs_ours.ts +0 -1259
  733. package/src/scripts/content.ts +0 -139
  734. package/src/scripts/context-overflow-probe.ts +0 -997
  735. package/src/scripts/empty_input.ts +0 -137
  736. package/src/scripts/handoff-test.ts +0 -134
  737. package/src/scripts/local_engine.ts +0 -166
  738. package/src/scripts/local_engine_checkpointer.ts +0 -205
  739. package/src/scripts/local_engine_compile.ts +0 -263
  740. package/src/scripts/local_engine_hooks.ts +0 -226
  741. package/src/scripts/local_engine_image.ts +0 -201
  742. package/src/scripts/local_engine_ptc.ts +0 -151
  743. package/src/scripts/local_engine_workspace.ts +0 -258
  744. package/src/scripts/memory.ts +0 -107
  745. package/src/scripts/multi-agent-chain.ts +0 -332
  746. package/src/scripts/multi-agent-conditional.ts +0 -222
  747. package/src/scripts/multi-agent-document-review-chain.ts +0 -198
  748. package/src/scripts/multi-agent-hybrid-flow.ts +0 -311
  749. package/src/scripts/multi-agent-parallel-start.ts +0 -265
  750. package/src/scripts/multi-agent-parallel.ts +0 -395
  751. package/src/scripts/multi-agent-sequence.ts +0 -217
  752. package/src/scripts/multi-agent-subagent.ts +0 -246
  753. package/src/scripts/multi-agent-supervisor.ts +0 -366
  754. package/src/scripts/multi-agent-test.ts +0 -187
  755. package/src/scripts/openrouter_prompt_cache_live.ts +0 -310
  756. package/src/scripts/parallel-asymmetric-tools-test.ts +0 -275
  757. package/src/scripts/parallel-full-metadata-test.ts +0 -241
  758. package/src/scripts/parallel-tools-test.ts +0 -341
  759. package/src/scripts/preempt-probe.ts +0 -330
  760. package/src/scripts/preempt-scenarios.ts +0 -388
  761. package/src/scripts/programmatic_exec.ts +0 -387
  762. package/src/scripts/programmatic_exec_agent.ts +0 -232
  763. package/src/scripts/search.ts +0 -147
  764. package/src/scripts/sequential-full-metadata-test.ts +0 -198
  765. package/src/scripts/session_live.ts +0 -548
  766. package/src/scripts/simple.ts +0 -226
  767. package/src/scripts/single-agent-metadata-test.ts +0 -196
  768. package/src/scripts/stream.ts +0 -141
  769. package/src/scripts/subagent-configurable-inheritance.ts +0 -252
  770. package/src/scripts/subagent-event-driven-debug.ts +0 -190
  771. package/src/scripts/subagent-tools-debug.ts +0 -160
  772. package/src/scripts/subagent-usage-sink.ts +0 -176
  773. package/src/scripts/summarization-recency.ts +0 -462
  774. package/src/scripts/test-custom-prompt-key.ts +0 -145
  775. package/src/scripts/test-handoff-input.ts +0 -170
  776. package/src/scripts/test-handoff-preamble.ts +0 -278
  777. package/src/scripts/test-handoff-steering.ts +0 -430
  778. package/src/scripts/test-multi-agent-list-handoff.ts +0 -418
  779. package/src/scripts/test-parallel-agent-labeling.ts +0 -327
  780. package/src/scripts/test-parallel-handoffs.ts +0 -292
  781. package/src/scripts/test-thinking-handoff-bedrock.ts +0 -154
  782. package/src/scripts/test-thinking-handoff.ts +0 -156
  783. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +0 -166
  784. package/src/scripts/test-tool-before-handoff-role-order.ts +0 -276
  785. package/src/scripts/test-tools-before-handoff.ts +0 -222
  786. package/src/scripts/test_code_api.ts +0 -354
  787. package/src/scripts/thinking-bedrock.ts +0 -160
  788. package/src/scripts/thinking-vertexai.ts +0 -168
  789. package/src/scripts/thinking.ts +0 -172
  790. package/src/scripts/tool_search.ts +0 -153
  791. package/src/scripts/tools.ts +0 -163
  792. package/src/session/__tests__/JsonlSessionStore.test.ts +0 -1463
  793. package/src/session/__tests__/handlers.test.ts +0 -161
  794. package/src/specs/activity-label-observability.live.test.ts +0 -262
  795. package/src/specs/activity-label-observability.test.ts +0 -167
  796. package/src/specs/activity-label-prompt.test.ts +0 -359
  797. package/src/specs/activity-label-trace-seed.test.ts +0 -47
  798. package/src/specs/activity-phase-label.test.ts +0 -306
  799. package/src/specs/agent-handoffs.live.test.ts +0 -140
  800. package/src/specs/agent-handoffs.test.ts +0 -2465
  801. package/src/specs/anthropic.simple.test.ts +0 -453
  802. package/src/specs/ask-user-question-batch.test.ts +0 -289
  803. package/src/specs/ask-user-questions.live.test.ts +0 -185
  804. package/src/specs/ask-user-questions.test.ts +0 -293
  805. package/src/specs/azure.simple.test.ts +0 -502
  806. package/src/specs/bedrock-toolless.live.test.ts +0 -123
  807. package/src/specs/bedrock-truncation.live.test.ts +0 -191
  808. package/src/specs/cache.simple.test.ts +0 -416
  809. package/src/specs/context-accuracy.live.test.ts +0 -409
  810. package/src/specs/context-overflow-recovery.live.test.ts +0 -213
  811. package/src/specs/context-usage-event.test.ts +0 -117
  812. package/src/specs/context-usage.live.test.ts +0 -297
  813. package/src/specs/custom-event-await.test.ts +0 -304
  814. package/src/specs/deepseek.simple.test.ts +0 -290
  815. package/src/specs/deterministic-trace-id.test.ts +0 -43
  816. package/src/specs/discovered-tools.test.ts +0 -217
  817. package/src/specs/durability-checkpoint.integration.test.ts +0 -243
  818. package/src/specs/graph-subagent.live.test.ts +0 -242
  819. package/src/specs/graph-subagent.test.ts +0 -322
  820. package/src/specs/handoffCue.test.ts +0 -165
  821. package/src/specs/langfuse-callbacks.test.ts +0 -1578
  822. package/src/specs/langfuse-config.test.ts +0 -247
  823. package/src/specs/langfuse-instrumentation.test.ts +0 -393
  824. package/src/specs/langfuse-metadata.test.ts +0 -245
  825. package/src/specs/langfuse-routing.integration.test.ts +0 -844
  826. package/src/specs/langfuse-runtime-context.test.ts +0 -92
  827. package/src/specs/langfuse-span-registry.test.ts +0 -87
  828. package/src/specs/langfuse-tool-output-tracing.test.ts +0 -1858
  829. package/src/specs/langfuse-trace-shaping.test.ts +0 -591
  830. package/src/specs/moonshot.simple.test.ts +0 -367
  831. package/src/specs/multi-agent-summarization.test.ts +0 -396
  832. package/src/specs/openai.simple.test.ts +0 -315
  833. package/src/specs/openrouter.simple.test.ts +0 -275
  834. package/src/specs/preemptSeal.test.ts +0 -678
  835. package/src/specs/prune.test.ts +0 -3741
  836. package/src/specs/reasoning.test.ts +0 -201
  837. package/src/specs/run-step-timestamps.test.ts +0 -414
  838. package/src/specs/spec.utils.ts +0 -15
  839. package/src/specs/subagent.test.ts +0 -864
  840. package/src/specs/summarization-unit.test.ts +0 -973
  841. package/src/specs/summarization.test.ts +0 -3823
  842. package/src/specs/summarize-prune.test.ts +0 -376
  843. package/src/specs/thinking-handoff.test.ts +0 -621
  844. package/src/specs/thinking-prune.test.ts +0 -827
  845. package/src/specs/token-accounting-e2e.test.ts +0 -1034
  846. package/src/specs/token-accounting-pipeline.test.ts +0 -1008
  847. package/src/specs/token-distribution-edge-case.test.ts +0 -315
  848. package/src/specs/token-memoization.test.ts +0 -40
  849. package/src/specs/tokens.test.ts +0 -1000
  850. package/src/specs/tool-error-resume.test.ts +0 -194
  851. package/src/specs/tool-error.test.ts +0 -198
  852. package/src/specs/vllm-reasoning-toolcalls.test.ts +0 -340
  853. package/src/stream.dispatch.test.ts +0 -63
  854. package/src/stream.test.ts +0 -144
  855. package/src/summarization/__tests__/aggregator.test.ts +0 -236
  856. package/src/summarization/__tests__/node.test.ts +0 -1996
  857. package/src/summarization/__tests__/trigger.test.ts +0 -149
  858. package/src/summarization/chunkHandler.test.ts +0 -196
  859. package/src/test/mockTools.ts +0 -386
  860. package/src/tools/Calculator.test.ts +0 -278
  861. package/src/tools/__tests__/BashExecutor.test.ts +0 -108
  862. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +0 -939
  863. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +0 -858
  864. package/src/tools/__tests__/CodeExecutor.stateful.test.ts +0 -124
  865. package/src/tools/__tests__/LocalExecutionRoots.test.ts +0 -8
  866. package/src/tools/__tests__/LocalExecutionTools.test.ts +0 -2733
  867. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.ts +0 -318
  868. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +0 -1557
  869. package/src/tools/__tests__/ReadFile.test.ts +0 -44
  870. package/src/tools/__tests__/SkillTool.test.ts +0 -442
  871. package/src/tools/__tests__/SubagentExecutor.test.ts +0 -3728
  872. package/src/tools/__tests__/SubagentReplay.test.ts +0 -329
  873. package/src/tools/__tests__/SubagentTool.test.ts +0 -149
  874. package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +0 -595
  875. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +0 -1191
  876. package/src/tools/__tests__/ToolNode.invalidToolCalls.test.ts +0 -757
  877. package/src/tools/__tests__/ToolNode.langfuse.test.ts +0 -57
  878. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +0 -736
  879. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +0 -1710
  880. package/src/tools/__tests__/ToolNode.runtimeState.test.ts +0 -120
  881. package/src/tools/__tests__/ToolNode.session.test.ts +0 -1352
  882. package/src/tools/__tests__/ToolNode.streamLimits.test.ts +0 -69
  883. package/src/tools/__tests__/ToolSearch.integration.test.ts +0 -161
  884. package/src/tools/__tests__/ToolSearch.test.ts +0 -1227
  885. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +0 -561
  886. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +0 -980
  887. package/src/tools/__tests__/directToolHooks.test.ts +0 -700
  888. package/src/tools/__tests__/eagerEventExecution.session.test.ts +0 -92
  889. package/src/tools/__tests__/handlers.test.ts +0 -997
  890. package/src/tools/__tests__/hitl.test.ts +0 -4663
  891. package/src/tools/__tests__/intentArg.test.ts +0 -357
  892. package/src/tools/__tests__/intentCoverage.test.ts +0 -139
  893. package/src/tools/__tests__/localToolNames.test.ts +0 -75
  894. package/src/tools/__tests__/skillCatalog.test.ts +0 -161
  895. package/src/tools/__tests__/subagentHooks.test.ts +0 -1651
  896. package/src/tools/__tests__/toolOutputReferences.test.ts +0 -515
  897. package/src/tools/__tests__/workspaceSeam.test.ts +0 -147
  898. package/src/tools/local/__tests__/FileCheckpointer.test.ts +0 -162
  899. package/src/tools/local/__tests__/editStrategies.test.ts +0 -134
  900. package/src/tools/search/content.test.ts +0 -173
  901. package/src/tools/search/crw.test.ts +0 -836
  902. package/src/tools/search/format.test.ts +0 -242
  903. package/src/tools/search/http-agent.test.ts +0 -133
  904. package/src/tools/search/jina-reranker.test.ts +0 -306
  905. package/src/tools/search/keenable-scraper.test.ts +0 -153
  906. package/src/tools/search/keenable.test.ts +0 -183
  907. package/src/tools/search/outcome.test.ts +0 -90
  908. package/src/tools/search/output.md +0 -2775
  909. package/src/tools/search/rag-api-reranker.test.ts +0 -891
  910. package/src/tools/search/source-processing.test.ts +0 -516
  911. package/src/tools/search/tavily.test.ts +0 -965
  912. package/src/tools/search/test.html +0 -884
  913. package/src/tools/search/test.md +0 -643
  914. package/src/tools/subagent/__tests__/SubagentExecutionRegistry.test.ts +0 -637
  915. package/src/tools/subagent/__tests__/SubagentExecutor.lazy.test.ts +0 -3054
  916. package/src/tools/subagent/__tests__/childGraphConfig.test.ts +0 -521
  917. package/src/utils/__tests__/apportion.test.ts +0 -32
  918. package/src/utils/__tests__/errors.test.ts +0 -270
  919. package/src/utils/__tests__/fixtures/contextOverflowSignatures.ts +0 -336
  920. package/src/utils/__tests__/redactSecrets.test.ts +0 -56
  921. package/src/utils/__tests__/truncation.test.ts +0 -66
  922. package/src/utils/llm.test.ts +0 -18
  923. package/src/utils/proxy.test.ts +0 -176
  924. package/src/utils/toolContent.test.ts +0 -1432
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/llm/vertexai/index.ts"],"sourcesContent":["import { ChatGoogle } from '@langchain/google-gauth';\nimport { ChatConnection } from '@langchain/google-common';\nimport { AIMessageChunk, isAIMessage } from '@langchain/core/messages';\nimport type {\n GeminiContent,\n GeminiRequest,\n GoogleAIModelRequestParams,\n GoogleAbstractedClient,\n} from '@langchain/google-common';\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { BaseMessage, UsageMetadata } from '@langchain/core/messages';\nimport type { ChatGenerationChunk } from '@langchain/core/outputs';\nimport type { GoogleThinkingConfig, VertexAIClientOptions } from '@/types';\nimport {\n STREAMED_TOOL_CALL_SEAL_METADATA_KEY,\n STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY,\n GOOGLE_STREAMED_TOOL_CALL_ADAPTER,\n} from '@/tools/streamedToolCallSeals';\nimport { smoothGenerationChunks } from '@/llm/stream/chunkAdapters';\nimport { resolveStreamDelay } from '@/llm/stream/smoother';\n\n/**\n * `@langchain/google-common`'s `_streamResponseChunks` emits usage on TWO\n * different paths within the same stream:\n *\n * - Streaming chunks set `chunk.generationInfo.usage_metadata` via\n * `responseToUsageMetadata`, which correctly sums\n * `candidatesTokenCount + thoughtsTokenCount` and includes\n * `output_token_details.reasoning`.\n * - The trailing fallback chunk (emitted after the API stream exhausts)\n * attaches its own `chunk.message.usage_metadata` built inline as\n * `output_tokens = candidatesTokenCount` only — dropping\n * `thoughtsTokenCount` and `output_token_details` entirely.\n *\n * After `AIMessageChunk.concat`, only `message.usage_metadata` survives —\n * which is the buggy fallback value. This breaks the documented\n * `total_tokens === input_tokens + output_tokens` invariant and silently\n * undercharges thinking models for reasoning tokens.\n *\n * The repair: track the last `generationInfo.usage_metadata` we see, and\n * when the fallback chunk arrives with its buggy `message.usage_metadata`,\n * replace it with the tracked good value. `CustomChatGoogleGenerativeAI`\n * solves the same problem for the Google API path differently — by\n * overriding `_convertToUsageMetadata`.\n */\nexport function repairStreamUsageMetadata(\n current: UsageMetadata | undefined,\n generationInfoUsage: UsageMetadata | undefined\n): UsageMetadata | undefined {\n if (!current) return current;\n if (!generationInfoUsage) return current;\n if (generationInfoUsage.total_tokens !== current.total_tokens) return current;\n if (generationInfoUsage.output_tokens <= current.output_tokens)\n return current;\n return generationInfoUsage;\n}\n\n/**\n * The Gemini API delivers function calls as complete objects — never as\n * partial arg deltas. `@langchain/google-common` pre-parses each streamed\n * functionCall part into `tool_calls` (invalid args land in\n * `invalid_tool_calls` instead), so a chunk whose tool-call chunks all parsed\n * cleanly is sealed on arrival for eager tool execution. Anything that fails\n * the parse check is left unstamped and falls back to the lazy path.\n */\nexport function sealCompleteStreamedToolCalls(message: AIMessageChunk): void {\n const chunkCount = message.tool_call_chunks?.length ?? 0;\n if (\n chunkCount === 0 ||\n (message.invalid_tool_calls?.length ?? 0) > 0 ||\n (message.tool_calls?.length ?? 0) !== chunkCount\n ) {\n return;\n }\n message.response_metadata = {\n ...message.response_metadata,\n [STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY]:\n GOOGLE_STREAMED_TOOL_CALL_ADAPTER,\n [STREAMED_TOOL_CALL_SEAL_METADATA_KEY]: { kind: 'all' },\n };\n}\n\ntype AdditionalKwargs =\n | undefined\n | (BaseMessage['additional_kwargs'] & {\n signatures?: Array<string | undefined>;\n });\n\n/**\n * Fixes thought signatures on functionCall parts in the formatted Gemini request.\n *\n * `@langchain/google-common` stores signatures as a flat array in\n * `additional_kwargs.signatures` (one per response part) and re-attaches them\n * by index only when `signatures.length === parts.length`. This fails when:\n * - The API omits a signature (length mismatch)\n * - Streaming chunks merge with different part counts\n * - The signature for a functionCall part is an empty string\n *\n * This function correlates each \"model\" content block in the formatted request\n * back to its originating AI message by *position*, then re-attaches non-empty\n * signatures that the library failed to apply. AI messages without signatures\n * still consume their slot — filtering them out shifted later messages onto\n * the wrong content block and dropped real signatures on the floor.\n */\nexport function fixThoughtSignatures(\n contents: GeminiContent[],\n input: BaseMessage[]\n): void {\n // All AI messages, in order — non-signature ones still consume positional\n // slots so later messages line up with their model content blocks.\n const aiMessages = input.filter(isAIMessage);\n const modelContents = contents.filter((c) => c.role === 'model');\n\n const count = Math.min(aiMessages.length, modelContents.length);\n for (let i = 0; i < count; i++) {\n const signatures = (aiMessages[i].additional_kwargs as AdditionalKwargs)\n ?.signatures;\n if (!Array.isArray(signatures) || signatures.length === 0) continue;\n\n const content = modelContents[i];\n const attachedSignatures = new Set(\n content.parts\n .map((p) => p.thoughtSignature)\n .filter((s): s is string => s != null && s !== '')\n );\n const availableSignatures = signatures.filter(\n (s): s is string => s != null && s !== '' && !attachedSignatures.has(s)\n );\n\n let sigIdx = 0;\n for (const part of content.parts) {\n if (\n 'functionCall' in part &&\n (part.thoughtSignature == null || part.thoughtSignature === '') &&\n sigIdx < availableSignatures.length\n ) {\n part.thoughtSignature = availableSignatures[sigIdx];\n sigIdx++;\n }\n }\n }\n}\n\nclass CustomChatConnection extends ChatConnection<VertexAIClientOptions> {\n thinkingConfig?: GoogleThinkingConfig;\n\n async formatData(\n input: BaseMessage[],\n parameters: GoogleAIModelRequestParams\n ): Promise<unknown> {\n const formattedData = (await super.formatData(\n input,\n parameters\n )) as GeminiRequest;\n if (formattedData.generationConfig?.thinkingConfig?.thinkingBudget === -1) {\n // -1 means \"let the model decide\" - delete the property so the API doesn't receive an invalid value\n if (\n formattedData.generationConfig.thinkingConfig.includeThoughts === false\n ) {\n formattedData.generationConfig.thinkingConfig.includeThoughts = true;\n }\n delete formattedData.generationConfig.thinkingConfig.thinkingBudget;\n }\n if (this.thinkingConfig?.thinkingLevel != null) {\n formattedData.generationConfig ??= {};\n // thinkingLevel and thinkingBudget cannot coexist — the API rejects the request.\n // Remove thinkingBudget when thinkingLevel is set.\n const { thinkingBudget: _, ...existingThinkingConfig } =\n (formattedData.generationConfig.thinkingConfig as\n | Record<string, unknown>\n | undefined) ?? {};\n (\n formattedData.generationConfig as Record<string, unknown>\n ).thinkingConfig = {\n ...existingThinkingConfig,\n thinkingLevel: this.thinkingConfig.thinkingLevel,\n ...(this.thinkingConfig.includeThoughts != null && {\n includeThoughts: this.thinkingConfig.includeThoughts,\n }),\n };\n }\n if (formattedData.contents) {\n fixThoughtSignatures(formattedData.contents, input);\n // gemini-3.1+ models reject role=\"function\"; convert to role=\"user\"\n for (const content of formattedData.contents) {\n if (content.role === 'function') {\n (content as { role: string }).role = 'user';\n }\n }\n }\n return formattedData;\n }\n}\n\n/**\n * Integration with Google Vertex AI chat models.\n *\n * Setup:\n * Install `@langchain/google-vertexai` and set your stringified\n * Vertex AI credentials as an environment variable named `GOOGLE_APPLICATION_CREDENTIALS`.\n *\n * ```bash\n * npm install @langchain/google-vertexai\n * export GOOGLE_APPLICATION_CREDENTIALS=\"path/to/credentials\"\n * ```\n *\n * ## [Constructor args](https://api.js.langchain.com/classes/_langchain_google_vertexai.index.ChatVertexAI.html#constructor.new_ChatVertexAI)\n *\n * ## [Runtime args](https://api.js.langchain.com/interfaces/langchain_google_common_types.GoogleAIBaseLanguageModelCallOptions.html)\n *\n * Runtime args can be passed as the second argument to any of the base runnable methods `.invoke`. `.stream`, `.batch`, etc.\n * They can also be passed via `.withConfig`, or the second arg in `.bindTools`, like shown in the examples below:\n *\n * ```typescript\n * // When calling `.withConfig`, call options should be passed via the first argument\n * const llmWithArgsBound = llm.withConfig({\n * stop: [\"\\n\"],\n * tools: [...],\n * });\n *\n * // When calling `.bindTools`, call options should be passed via the second argument\n * const llmWithTools = llm.bindTools(\n * [...],\n * {\n * tool_choice: \"auto\",\n * }\n * );\n * ```\n *\n * ## Examples\n *\n * <details open>\n * <summary><strong>Instantiate</strong></summary>\n *\n * ```typescript\n * import { ChatVertexAI } from '@langchain/google-vertexai';\n *\n * const llm = new ChatVertexAI({\n * model: \"gemini-1.5-pro\",\n * temperature: 0,\n * // other params...\n * });\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Invoking</strong></summary>\n *\n * ```typescript\n * const input = `Translate \"I love programming\" into French.`;\n *\n * // Models also accept a list of chat messages or a formatted prompt\n * const result = await llm.invoke(input);\n * console.log(result);\n * ```\n *\n * ```txt\n * AIMessageChunk {\n * \"content\": \"\\\"J'adore programmer\\\" \\n\\nHere's why this is the best translation:\\n\\n* **J'adore** means \\\"I love\\\" and conveys a strong passion.\\n* **Programmer** is the French verb for \\\"to program.\\\"\\n\\nThis translation is natural and idiomatic in French. \\n\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": [],\n * \"usage_metadata\": {\n * \"input_tokens\": 9,\n * \"output_tokens\": 63,\n * \"total_tokens\": 72\n * }\n * }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Streaming Chunks</strong></summary>\n *\n * ```typescript\n * for await (const chunk of await llm.stream(input)) {\n * console.log(chunk);\n * }\n * ```\n *\n * ```txt\n * AIMessageChunk {\n * \"content\": \"\\\"\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": []\n * }\n * AIMessageChunk {\n * \"content\": \"J'adore programmer\\\" \\n\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": []\n * }\n * AIMessageChunk {\n * \"content\": \"\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {},\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": []\n * }\n * AIMessageChunk {\n * \"content\": \"\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {\n * \"finishReason\": \"stop\"\n * },\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": [],\n * \"usage_metadata\": {\n * \"input_tokens\": 9,\n * \"output_tokens\": 8,\n * \"total_tokens\": 17\n * }\n * }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Aggregate Streamed Chunks</strong></summary>\n *\n * ```typescript\n * import { AIMessageChunk } from '@langchain/core/messages';\n * import { concat } from '@langchain/core/utils/stream';\n *\n * const stream = await llm.stream(input);\n * let full: AIMessageChunk | undefined;\n * for await (const chunk of stream) {\n * full = !full ? chunk : concat(full, chunk);\n * }\n * console.log(full);\n * ```\n *\n * ```txt\n * AIMessageChunk {\n * \"content\": \"\\\"J'adore programmer\\\" \\n\",\n * \"additional_kwargs\": {},\n * \"response_metadata\": {\n * \"finishReason\": \"stop\"\n * },\n * \"tool_calls\": [],\n * \"tool_call_chunks\": [],\n * \"invalid_tool_calls\": [],\n * \"usage_metadata\": {\n * \"input_tokens\": 9,\n * \"output_tokens\": 8,\n * \"total_tokens\": 17\n * }\n * }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Bind tools</strong></summary>\n *\n * ```typescript\n * import { z } from 'zod';\n *\n * const GetWeather = {\n * name: \"GetWeather\",\n * description: \"Get the current weather in a given location\",\n * schema: z.object({\n * location: z.string().describe(\"The city and state, e.g. San Francisco, CA\")\n * }),\n * }\n *\n * const GetPopulation = {\n * name: \"GetPopulation\",\n * description: \"Get the current population in a given location\",\n * schema: z.object({\n * location: z.string().describe(\"The city and state, e.g. San Francisco, CA\")\n * }),\n * }\n *\n * const llmWithTools = llm.bindTools([GetWeather, GetPopulation]);\n * const aiMsg = await llmWithTools.invoke(\n * \"Which city is hotter today and which is bigger: LA or NY?\"\n * );\n * console.log(aiMsg.tool_calls);\n * ```\n *\n * ```txt\n * [\n * {\n * name: 'GetPopulation',\n * args: { location: 'New York City, NY' },\n * id: '33c1c1f47e2f492799c77d2800a43912',\n * type: 'tool_call'\n * }\n * ]\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Structured Output</strong></summary>\n *\n * ```typescript\n * import { z } from 'zod';\n *\n * const Joke = z.object({\n * setup: z.string().describe(\"The setup of the joke\"),\n * punchline: z.string().describe(\"The punchline to the joke\"),\n * rating: z.number().optional().describe(\"How funny the joke is, from 1 to 10\")\n * }).describe('Joke to tell user.');\n *\n * const structuredLlm = llm.withStructuredOutput(Joke, { name: \"Joke\" });\n * const jokeResult = await structuredLlm.invoke(\"Tell me a joke about cats\");\n * console.log(jokeResult);\n * ```\n *\n * ```txt\n * {\n * setup: 'What do you call a cat that loves to bowl?',\n * punchline: 'An alley cat!'\n * }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Usage Metadata</strong></summary>\n *\n * ```typescript\n * const aiMsgForMetadata = await llm.invoke(input);\n * console.log(aiMsgForMetadata.usage_metadata);\n * ```\n *\n * ```txt\n * { input_tokens: 9, output_tokens: 8, total_tokens: 17 }\n * ```\n * </details>\n *\n * <br />\n *\n * <details>\n * <summary><strong>Stream Usage Metadata</strong></summary>\n *\n * ```typescript\n * const streamForMetadata = await llm.stream(\n * input,\n * {\n * streamUsage: true\n * }\n * );\n * let fullForMetadata: AIMessageChunk | undefined;\n * for await (const chunk of streamForMetadata) {\n * fullForMetadata = !fullForMetadata ? chunk : concat(fullForMetadata, chunk);\n * }\n * console.log(fullForMetadata?.usage_metadata);\n * ```\n *\n * ```txt\n * { input_tokens: 9, output_tokens: 8, total_tokens: 17 }\n * ```\n * </details>\n *\n * <br />\n */\nexport class ChatVertexAI extends ChatGoogle {\n lc_namespace = ['langchain', 'chat_models', 'vertexai'];\n _lc_stream_delay: number;\n dynamicThinkingBudget = false;\n thinkingConfig?: GoogleThinkingConfig;\n\n static lc_name(): 'LibreChatVertexAI' {\n return 'LibreChatVertexAI';\n }\n\n constructor(model: string, fields?: Omit<VertexAIClientOptions, 'model'>);\n constructor(fields?: VertexAIClientOptions);\n constructor(\n modelOrFields?: string | VertexAIClientOptions,\n params?: Omit<VertexAIClientOptions, 'model'>\n ) {\n const fields =\n typeof modelOrFields === 'string'\n ? { ...(params ?? {}), model: modelOrFields }\n : modelOrFields;\n const dynamicThinkingBudget = fields?.thinkingBudget === -1;\n super({\n ...fields,\n platformType: 'gcp',\n });\n this.dynamicThinkingBudget = dynamicThinkingBudget;\n this.thinkingConfig = fields?.thinkingConfig;\n this._lc_stream_delay = resolveStreamDelay(fields?._lc_stream_delay);\n }\n invocationParams(\n options?: this['ParsedCallOptions'] | undefined\n ): GoogleAIModelRequestParams {\n const params = super.invocationParams(options);\n if (this.dynamicThinkingBudget) {\n params.maxReasoningTokens = -1;\n }\n return params;\n }\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n yield* smoothGenerationChunks({\n chunks: this._streamRepairedChunks(messages, options),\n delayMs: this._lc_stream_delay,\n signal: options.signal,\n runManager,\n });\n }\n\n private async *_streamRepairedChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions']\n ): AsyncGenerator<ChatGenerationChunk> {\n let lastGoodUsage: UsageMetadata | undefined;\n for await (const chunk of super._streamResponseChunks(\n messages,\n options,\n undefined\n )) {\n const genUsage = (\n chunk.generationInfo as { usage_metadata?: UsageMetadata } | undefined\n )?.usage_metadata;\n if (genUsage) {\n lastGoodUsage = genUsage;\n }\n if (chunk.message instanceof AIMessageChunk) {\n const repaired = repairStreamUsageMetadata(\n chunk.message.usage_metadata,\n lastGoodUsage\n );\n if (repaired !== chunk.message.usage_metadata) {\n chunk.message.usage_metadata = repaired;\n }\n sealCompleteStreamedToolCalls(chunk.message);\n }\n yield chunk;\n }\n }\n buildConnection(\n fields: VertexAIClientOptions | undefined,\n client: GoogleAbstractedClient\n ): void {\n // Note: buildConnection is called from super() BEFORE this.thinkingConfig is set,\n // so we must read thinkingConfig from `fields` directly.\n const thinkingConfig = fields?.thinkingConfig ?? this.thinkingConfig;\n\n const connection = new CustomChatConnection(\n { ...fields, ...this },\n this.caller,\n client,\n false\n );\n connection.thinkingConfig = thinkingConfig;\n this.connection = connection;\n\n const streamedConnection = new CustomChatConnection(\n { ...fields, ...this },\n this.caller,\n client,\n true\n );\n streamedConnection.thinkingConfig = thinkingConfig;\n this.streamedConnection = streamedConnection;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,SAAgB,0BACd,SACA,qBAC2B;CAC3B,IAAI,CAAC,SAAS,OAAO;CACrB,IAAI,CAAC,qBAAqB,OAAO;CACjC,IAAI,oBAAoB,iBAAiB,QAAQ,cAAc,OAAO;CACtE,IAAI,oBAAoB,iBAAiB,QAAQ,eAC/C,OAAO;CACT,OAAO;AACT;;;;;;;;;AAUA,SAAgB,8BAA8B,SAA+B;CAC3E,MAAM,aAAa,QAAQ,kBAAkB,UAAU;CACvD,IACE,eAAe,MACd,QAAQ,oBAAoB,UAAU,KAAK,MAC3C,QAAQ,YAAY,UAAU,OAAO,YAEtC;CAEF,QAAQ,oBAAoB;EAC1B,GAAG,QAAQ;GACV,0CACC;GACD,uCAAuC,EAAE,MAAM,MAAM;CACxD;AACF;;;;;;;;;;;;;;;;;AAwBA,SAAgB,qBACd,UACA,OACM;CAGN,MAAM,aAAa,MAAM,OAAO,WAAW;CAC3C,MAAM,gBAAgB,SAAS,QAAQ,MAAM,EAAE,SAAS,OAAO;CAE/D,MAAM,QAAQ,KAAK,IAAI,WAAW,QAAQ,cAAc,MAAM;CAC9D,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;EAC9B,MAAM,aAAc,WAAW,EAAE,CAAC,mBAC9B;EACJ,IAAI,CAAC,MAAM,QAAQ,UAAU,KAAK,WAAW,WAAW,GAAG;EAE3D,MAAM,UAAU,cAAc;EAC9B,MAAM,qBAAqB,IAAI,IAC7B,QAAQ,MACL,KAAK,MAAM,EAAE,gBAAgB,CAAC,CAC9B,QAAQ,MAAmB,KAAK,QAAQ,MAAM,EAAE,CACrD;EACA,MAAM,sBAAsB,WAAW,QACpC,MAAmB,KAAK,QAAQ,MAAM,MAAM,CAAC,mBAAmB,IAAI,CAAC,CACxE;EAEA,IAAI,SAAS;EACb,KAAK,MAAM,QAAQ,QAAQ,OACzB,IACE,kBAAkB,SACjB,KAAK,oBAAoB,QAAQ,KAAK,qBAAqB,OAC5D,SAAS,oBAAoB,QAC7B;GACA,KAAK,mBAAmB,oBAAoB;GAC5C;EACF;CAEJ;AACF;AAEA,IAAM,uBAAN,cAAmC,eAAsC;CACvE;CAEA,MAAM,WACJ,OACA,YACkB;EAClB,MAAM,gBAAiB,MAAM,MAAM,WACjC,OACA,UACF;EACA,IAAI,cAAc,kBAAkB,gBAAgB,mBAAmB,IAAI;GAEzE,IACE,cAAc,iBAAiB,eAAe,oBAAoB,OAElE,cAAc,iBAAiB,eAAe,kBAAkB;GAElE,OAAO,cAAc,iBAAiB,eAAe;EACvD;EACA,IAAI,KAAK,gBAAgB,iBAAiB,MAAM;GAC9C,cAAc,qBAAqB,CAAC;GAGpC,MAAM,EAAE,gBAAgB,GAAG,GAAG,2BAC3B,cAAc,iBAAiB,kBAEd,CAAC;GACrB,cACgB,iBACd,iBAAiB;IACjB,GAAG;IACH,eAAe,KAAK,eAAe;IACnC,GAAI,KAAK,eAAe,mBAAmB,QAAQ,EACjD,iBAAiB,KAAK,eAAe,gBACvC;GACF;EACF;EACA,IAAI,cAAc,UAAU;GAC1B,qBAAqB,cAAc,UAAU,KAAK;GAElD,KAAK,MAAM,WAAW,cAAc,UAClC,IAAI,QAAQ,SAAS,YACnB,QAA8B,OAAO;EAG3C;EACA,OAAO;CACT;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4RA,IAAa,eAAb,cAAkC,WAAW;CAC3C,eAAe;EAAC;EAAa;EAAe;CAAU;CACtD;CACA,wBAAwB;CACxB;CAEA,OAAO,UAA+B;EACpC,OAAO;CACT;CAIA,YACE,eACA,QACA;EACA,MAAM,SACJ,OAAO,kBAAkB,WACrB;GAAE,GAAI,UAAU,CAAC;GAAI,OAAO;EAAc,IAC1C;EACN,MAAM,wBAAwB,QAAQ,mBAAmB;EACzD,MAAM;GACJ,GAAG;GACH,cAAc;EAChB,CAAC;EACD,KAAK,wBAAwB;EAC7B,KAAK,iBAAiB,QAAQ;EAC9B,KAAK,mBAAmB,mBAAmB,QAAQ,gBAAgB;CACrE;CACA,iBACE,SAC4B;EAC5B,MAAM,SAAS,MAAM,iBAAiB,OAAO;EAC7C,IAAI,KAAK,uBACP,OAAO,qBAAqB;EAE9B,OAAO;CACT;CACA,OAAO,sBACL,UACA,SACA,YACqC;EACrC,OAAO,uBAAuB;GAC5B,QAAQ,KAAK,sBAAsB,UAAU,OAAO;GACpD,SAAS,KAAK;GACd,QAAQ,QAAQ;GAChB;EACF,CAAC;CACH;CAEA,OAAe,sBACb,UACA,SACqC;EACrC,IAAI;EACJ,WAAW,MAAM,SAAS,MAAM,sBAC9B,UACA,SACA,KAAA,CACF,GAAG;GACD,MAAM,WACJ,MAAM,gBACL;GACH,IAAI,UACF,gBAAgB;GAElB,IAAI,MAAM,mBAAmB,gBAAgB;IAC3C,MAAM,WAAW,0BACf,MAAM,QAAQ,gBACd,aACF;IACA,IAAI,aAAa,MAAM,QAAQ,gBAC7B,MAAM,QAAQ,iBAAiB;IAEjC,8BAA8B,MAAM,OAAO;GAC7C;GACA,MAAM;EACR;CACF;CACA,gBACE,QACA,QACM;EAGN,MAAM,iBAAiB,QAAQ,kBAAkB,KAAK;EAEtD,MAAM,aAAa,IAAI,qBACrB;GAAE,GAAG;GAAQ,GAAG;EAAK,GACrB,KAAK,QACL,QACA,KACF;EACA,WAAW,iBAAiB;EAC5B,KAAK,aAAa;EAElB,MAAM,qBAAqB,IAAI,qBAC7B;GAAE,GAAG;GAAQ,GAAG;EAAK,GACrB,KAAK,QACL,QACA,IACF;EACA,mBAAmB,iBAAiB;EACpC,KAAK,qBAAqB;CAC5B;AACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/llm/vertexai/index.ts"],"mappings":"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"}
@@ -2,27 +2,12 @@ import "../common/enum.mjs";
2
2
  import "../common/index.mjs";
3
3
  import { HumanMessage } from "@langchain/core/messages";
4
4
  //#region src/messages/alternation.ts
5
- /**
6
- * Providers whose APIs specify strict user/assistant alternation. Mistral
7
- * rejects consecutive user turns outright. Bedrock's Converse API documents
8
- * the alternation requirement across many model families; enforcement varies
9
- * by family — Claude on Converse currently tolerates adjacent user turns
10
- * (verified live, 2026-07-28) — so the payload is normalized for all of them
11
- * rather than betting on per-family leniency. Anthropic's own Messages API,
12
- * OpenAI and Gemini all accept consecutive user turns, so they are
13
- * deliberately absent.
14
- */
15
5
  const strictAlternationProviders = new Set([
16
6
  "bedrock",
17
7
  "mistral",
18
8
  "mistralai"
19
9
  ]);
20
10
  const TOOL_RESULT_TYPES = new Set(["tool_result", "toolResult"]);
21
- /**
22
- * True when every block is a tool result. Both vendored converters already
23
- * merge adjacent runs of these, and folding one into a text turn would break
24
- * the tool pairing they depend on — so they are left alone here.
25
- */
26
11
  function isToolResultMessage(message) {
27
12
  const { content } = message;
28
13
  if (typeof content === "string" || content.length === 0) return false;
@@ -39,15 +24,6 @@ function joinContent(left, right) {
39
24
  if (typeof left === "string" && typeof right === "string") return left === "" ? right : `${left}\n\n${right}`;
40
25
  return [...toBlocks(left), ...toBlocks(right)];
41
26
  }
42
- /**
43
- * Merges runs of consecutive human turns into one, for providers that reject
44
- * them. Purely a wire-shaping pass: it returns a new array of new messages,
45
- * so graph state and the host's persisted messages keep the per-message
46
- * identity that steer rendering and the trailing-steer anchor rely on.
47
- *
48
- * Tool-result turns are excluded — the converters merge those themselves, and
49
- * combining one with a text turn would orphan the pairing.
50
- */
51
27
  function coalesceAdjacentUserTurns(messages) {
52
28
  const result = [];
53
29
  let mergedAny = false;
@@ -60,29 +36,10 @@ function coalesceAdjacentUserTurns(messages) {
60
36
  mergedAny = true;
61
37
  result[result.length - 1] = new HumanMessage({
62
38
  content: joinContent(previous.content, message.content),
63
- /**
64
- * The LATER turn's kwargs, deliberately. The one provider-path consumer
65
- * of these flags is the prompt-cache tail anchor, and it reasons
66
- * positionally: `isSyntheticMetaMessage` decides whether a breakpoint
67
- * may be inserted after the message's LAST text block. Merging keeps
68
- * the last block's provenance only if the last part's kwargs survive —
69
- * a skill body absorbed into a real user turn must stay anchorable
70
- * (the real turn ends it), while a real steer absorbed into a trailing
71
- * skill body must not pin the cache to the volatile body. The first
72
- * turn's id is kept so origin tracking can re-attach by key.
73
- */
74
39
  additional_kwargs: message.additional_kwargs,
75
40
  ...previous.id != null && { id: previous.id }
76
41
  });
77
42
  }
78
- /**
79
- * Identity on the no-merge path. The pass runs twice for a primary
80
- * Bedrock/Mistral call — once in `createCallModel` (must precede the cache
81
- * breakpoint) and once in the `attemptInvoke` funnel (must cover fallback
82
- * and summarization sends) — so the already-normalized second pass returns
83
- * the SAME array rather than reallocating a context-sized copy, and
84
- * callers can cheaply detect "nothing changed" by identity.
85
- */
86
43
  return mergedAny ? result : messages;
87
44
  }
88
45
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"alternation.mjs","names":[],"sources":["../../../src/messages/alternation.ts"],"sourcesContent":["// src/messages/alternation.ts\nimport { HumanMessage } from '@langchain/core/messages';\nimport type { BaseMessage, MessageContent } from '@langchain/core/messages';\nimport { Providers } from '@/common';\n\n/**\n * Providers whose APIs specify strict user/assistant alternation. Mistral\n * rejects consecutive user turns outright. Bedrock's Converse API documents\n * the alternation requirement across many model families; enforcement varies\n * by family — Claude on Converse currently tolerates adjacent user turns\n * (verified live, 2026-07-28) — so the payload is normalized for all of them\n * rather than betting on per-family leniency. Anthropic's own Messages API,\n * OpenAI and Gemini all accept consecutive user turns, so they are\n * deliberately absent.\n */\nexport const strictAlternationProviders: ReadonlySet<Providers> = new Set([\n Providers.BEDROCK,\n Providers.MISTRAL,\n Providers.MISTRALAI,\n]);\n\nconst TOOL_RESULT_TYPES = new Set(['tool_result', 'toolResult']);\n\n/**\n * True when every block is a tool result. Both vendored converters already\n * merge adjacent runs of these, and folding one into a text turn would break\n * the tool pairing they depend on — so they are left alone here.\n */\nfunction isToolResultMessage(message: BaseMessage): boolean {\n const { content } = message;\n if (typeof content === 'string' || content.length === 0) {\n return false;\n }\n return content.every(\n (block) =>\n typeof block.type === 'string' && TOOL_RESULT_TYPES.has(block.type)\n );\n}\n\nfunction toBlocks(content: MessageContent): Exclude<MessageContent, string> {\n if (typeof content === 'string') {\n return content === '' ? [] : [{ type: 'text', text: content }];\n }\n return content;\n}\n\nfunction joinContent(\n left: MessageContent,\n right: MessageContent\n): MessageContent {\n if (typeof left === 'string' && typeof right === 'string') {\n return left === '' ? right : `${left}\\n\\n${right}`;\n }\n return [...toBlocks(left), ...toBlocks(right)];\n}\n\n/**\n * Merges runs of consecutive human turns into one, for providers that reject\n * them. Purely a wire-shaping pass: it returns a new array of new messages,\n * so graph state and the host's persisted messages keep the per-message\n * identity that steer rendering and the trailing-steer anchor rely on.\n *\n * Tool-result turns are excluded — the converters merge those themselves, and\n * combining one with a text turn would orphan the pairing.\n */\nexport function coalesceAdjacentUserTurns(\n messages: BaseMessage[]\n): BaseMessage[] {\n const result: BaseMessage[] = [];\n let mergedAny = false;\n for (const message of messages) {\n const previous = result[result.length - 1];\n const mergeable =\n result.length > 0 &&\n previous.getType() === 'human' &&\n message.getType() === 'human' &&\n !isToolResultMessage(previous) &&\n !isToolResultMessage(message);\n\n if (!mergeable) {\n result.push(message);\n continue;\n }\n mergedAny = true;\n\n result[result.length - 1] = new HumanMessage({\n content: joinContent(previous.content, message.content),\n /**\n * The LATER turn's kwargs, deliberately. The one provider-path consumer\n * of these flags is the prompt-cache tail anchor, and it reasons\n * positionally: `isSyntheticMetaMessage` decides whether a breakpoint\n * may be inserted after the message's LAST text block. Merging keeps\n * the last block's provenance only if the last part's kwargs survive —\n * a skill body absorbed into a real user turn must stay anchorable\n * (the real turn ends it), while a real steer absorbed into a trailing\n * skill body must not pin the cache to the volatile body. The first\n * turn's id is kept so origin tracking can re-attach by key.\n */\n additional_kwargs: message.additional_kwargs,\n ...(previous.id != null && { id: previous.id }),\n });\n }\n /**\n * Identity on the no-merge path. The pass runs twice for a primary\n * Bedrock/Mistral call — once in `createCallModel` (must precede the cache\n * breakpoint) and once in the `attemptInvoke` funnel (must cover fallback\n * and summarization sends) — so the already-normalized second pass returns\n * the SAME array rather than reallocating a context-sized copy, and\n * callers can cheaply detect \"nothing changed\" by identity.\n */\n return mergedAny ? result : messages;\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,MAAa,6BAAqD,IAAI,IAAI;;;;AAI1E,CAAC;AAED,MAAM,oBAAoB,IAAI,IAAI,CAAC,eAAe,YAAY,CAAC;;;;;;AAO/D,SAAS,oBAAoB,SAA+B;CAC1D,MAAM,EAAE,YAAY;CACpB,IAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,GACpD,OAAO;CAET,OAAO,QAAQ,OACZ,UACC,OAAO,MAAM,SAAS,YAAY,kBAAkB,IAAI,MAAM,IAAI,CACtE;AACF;AAEA,SAAS,SAAS,SAA0D;CAC1E,IAAI,OAAO,YAAY,UACrB,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC;EAAE,MAAM;EAAQ,MAAM;CAAQ,CAAC;CAE/D,OAAO;AACT;AAEA,SAAS,YACP,MACA,OACgB;CAChB,IAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAC/C,OAAO,SAAS,KAAK,QAAQ,GAAG,KAAK,MAAM;CAE7C,OAAO,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,SAAS,KAAK,CAAC;AAC/C;;;;;;;;;;AAWA,SAAgB,0BACd,UACe;CACf,MAAM,SAAwB,CAAC;CAC/B,IAAI,YAAY;CAChB,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,WAAW,OAAO,OAAO,SAAS;EAQxC,IAAI,EANF,OAAO,SAAS,KAChB,SAAS,QAAQ,MAAM,WACvB,QAAQ,QAAQ,MAAM,WACtB,CAAC,oBAAoB,QAAQ,KAC7B,CAAC,oBAAoB,OAAO,IAEd;GACd,OAAO,KAAK,OAAO;GACnB;EACF;EACA,YAAY;EAEZ,OAAO,OAAO,SAAS,KAAK,IAAI,aAAa;GAC3C,SAAS,YAAY,SAAS,SAAS,QAAQ,OAAO;;;;;;;;;;;;GAYtD,mBAAmB,QAAQ;GAC3B,GAAI,SAAS,MAAM,QAAQ,EAAE,IAAI,SAAS,GAAG;EAC/C,CAAC;CACH;;;;;;;;;CASA,OAAO,YAAY,SAAS;AAC9B"}
1
+ {"version":3,"file":"alternation.mjs","names":[],"sources":["../../../src/messages/alternation.ts"],"mappings":";;;;AAeA,MAAa,6BAAqD,IAAI,IAAI;;;;AAI1E,CAAC;AAED,MAAM,oBAAoB,IAAI,IAAI,CAAC,eAAe,YAAY,CAAC;AAO/D,SAAS,oBAAoB,SAA+B;CAC1D,MAAM,EAAE,YAAY;CACpB,IAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,GACpD,OAAO;CAET,OAAO,QAAQ,OACZ,UACC,OAAO,MAAM,SAAS,YAAY,kBAAkB,IAAI,MAAM,IAAI,CACtE;AACF;AAEA,SAAS,SAAS,SAA0D;CAC1E,IAAI,OAAO,YAAY,UACrB,OAAO,YAAY,KAAK,CAAC,IAAI,CAAC;EAAE,MAAM;EAAQ,MAAM;CAAQ,CAAC;CAE/D,OAAO;AACT;AAEA,SAAS,YACP,MACA,OACgB;CAChB,IAAI,OAAO,SAAS,YAAY,OAAO,UAAU,UAC/C,OAAO,SAAS,KAAK,QAAQ,GAAG,KAAK,MAAM;CAE7C,OAAO,CAAC,GAAG,SAAS,IAAI,GAAG,GAAG,SAAS,KAAK,CAAC;AAC/C;AAWA,SAAgB,0BACd,UACe;CACf,MAAM,SAAwB,CAAC;CAC/B,IAAI,YAAY;CAChB,KAAK,MAAM,WAAW,UAAU;EAC9B,MAAM,WAAW,OAAO,OAAO,SAAS;EAQxC,IAAI,EANF,OAAO,SAAS,KAChB,SAAS,QAAQ,MAAM,WACvB,QAAQ,QAAQ,MAAM,WACtB,CAAC,oBAAoB,QAAQ,KAC7B,CAAC,oBAAoB,OAAO,IAEd;GACd,OAAO,KAAK,OAAO;GACnB;EACF;EACA,YAAY;EAEZ,OAAO,OAAO,SAAS,KAAK,IAAI,aAAa;GAC3C,SAAS,YAAY,SAAS,SAAS,QAAQ,OAAO;GAYtD,mBAAmB,QAAQ;GAC3B,GAAI,SAAS,MAAM,QAAQ,EAAE,IAAI,SAAS,GAAG;EAC/C,CAAC;CACH;CASA,OAAO,YAAY,SAAS;AAC9B"}
@@ -17,32 +17,13 @@ function isAnthropicBuiltInTool(tool) {
17
17
  const { type } = tool;
18
18
  return typeof type === "string" && ANTHROPIC_BUILT_IN_TOOL_PREFIXES.some((prefix) => type.startsWith(prefix));
19
19
  }
20
- /**
21
- * Whether a tool already carries a cache breakpoint. Built-ins use a direct
22
- * `cache_control`; custom tools normally carry it under `extras`, but a
23
- * caller-supplied Anthropic-native tool object can also put it directly on the
24
- * block — check both so stale markers are never missed.
25
- */
26
20
  function hasCacheControl(tool) {
27
21
  if (isAnthropicBuiltInTool(tool)) return tool.cache_control != null;
28
22
  return tool.cache_control != null || tool.extras?.cache_control != null;
29
23
  }
30
- /**
31
- * Return the `cache_control` from the location that actually reaches the
32
- * Anthropic payload for this tool's shape: directly on the block for
33
- * provider-shaped tools (built-ins and raw Anthropic tools), or under `extras`
34
- * for LangChain custom tools (the adapter promotes only that). Returns
35
- * `undefined` when no marker sits in the effective location — a marker in the
36
- * wrong place (e.g. a direct marker on a custom tool) does not count.
37
- */
38
24
  function getEffectiveCacheControl(tool) {
39
25
  return isProviderShapedTool(tool) ? tool.cache_control : tool.extras?.cache_control;
40
26
  }
41
- /**
42
- * Return a clone of `tool` with any `cache_control` removed — both the direct
43
- * block marker and the `extras` marker — preserving the prototype chain. Used
44
- * to clear stray markers off tools that must not anchor a competing breakpoint.
45
- */
46
27
  function stripCacheControl(tool) {
47
28
  const prototype = Object.getPrototypeOf(tool) ?? Object.prototype;
48
29
  const wrapped = { ...tool };
@@ -53,13 +34,6 @@ function stripCacheControl(tool) {
53
34
  }
54
35
  return Object.assign(Object.create(prototype), wrapped);
55
36
  }
56
- /**
57
- * Whether `tool` is already in the Anthropic provider payload shape — an
58
- * Anthropic built-in or a raw Anthropic tool object (has `input_schema`). These
59
- * carry `cache_control` directly on the block; the LangChain adapter does NOT
60
- * promote `extras.cache_control` for them. LangChain StructuredTools, by
61
- * contrast, expose the marker via `extras`.
62
- */
63
37
  function isProviderShapedTool(tool) {
64
38
  return isAnthropicBuiltInTool(tool) || "input_schema" in tool;
65
39
  }
@@ -78,12 +52,6 @@ function markCacheControl(tool, ttl) {
78
52
  cache_control: cacheControl
79
53
  } });
80
54
  }
81
- /**
82
- * Returns a callable that reports whether a given tool *name* is deferred
83
- * according to the supplied registry of tool definitions. Tools without
84
- * a registry entry are treated as non-deferred (i.e. static), matching
85
- * the host-supplied `graphTools` semantics elsewhere in the SDK.
86
- */
87
55
  function makeIsDeferred(toolDefinitions) {
88
56
  if (toolDefinitions == null || toolDefinitions.length === 0) return () => false;
89
57
  const deferred = /* @__PURE__ */ new Set();
@@ -91,19 +59,6 @@ function makeIsDeferred(toolDefinitions) {
91
59
  if (deferred.size === 0) return () => false;
92
60
  return (name) => deferred.has(name);
93
61
  }
94
- /**
95
- * Stable-partition `tools` into [static..., deferred...] and stamp the
96
- * Anthropic `cache_control: ephemeral` marker on the last static tool.
97
- *
98
- * If `tools` is undefined or empty, or no entry has a usable `.name`,
99
- * returns the input unchanged. If there are no static tools at all,
100
- * also returns unchanged (nothing to cache).
101
- *
102
- * The original tool instances are never mutated. The marked entry is a
103
- * shallow wrapper that preserves the prototype chain so downstream
104
- * `instanceof` checks still pass. For custom tools, `extras` is merged
105
- * so any existing `providerToolDefinition` / other extras are kept.
106
- */
107
62
  function partitionAndMarkAnthropicToolCache(tools, isDeferred, ttl) {
108
63
  if (tools == null || tools.length === 0) return tools;
109
64
  const staticTools = [];
@@ -1 +1 @@
1
- {"version":3,"file":"anthropicToolCache.mjs","names":[],"sources":["../../../src/messages/anthropicToolCache.ts"],"sourcesContent":["/**\n * Anthropic prompt-caching helper for the `tools[]` request field.\n *\n * Anthropic accepts `cache_control: { type: 'ephemeral' }` on individual\n * tool definitions. Whichever tool carries the marker becomes the end of\n * a cached prefix: `tools[0..N]` (everything up to and including the\n * marked tool) is cached and rebated on subsequent matching requests.\n *\n * For agents that mix static and deferred (lazily-discovered) tools, the\n * winning configuration is:\n *\n * 1. Stable-partition tools so all *static* (non-deferred) tools come\n * first and discovered-deferred tools come last.\n * 2. Stamp `cache_control` on the LAST static tool.\n *\n * That way, the cached prefix covers exactly the static tool inventory.\n * Discovered tools that show up later (or vary turn-to-turn as new ones\n * get discovered) never invalidate the prefix because they sit *after*\n * the breakpoint.\n *\n * LangChain's Anthropic adapter passes the marker through via\n * `tool.extras.cache_control` for custom tools, while Anthropic built-ins\n * require direct `cache_control`. Either way, we stamp a fresh wrapper —\n * never mutating the original tool instance, since callers may share them\n * across runs.\n */\n\nimport type { GraphTools } from '@/types';\nimport {\n buildAnthropicCacheControl,\n type PromptCacheTtl,\n} from '@/messages/cache';\n\nconst ANTHROPIC_BUILT_IN_TOOL_PREFIXES = [\n 'text_editor_',\n 'computer_',\n 'bash_',\n 'web_search_',\n 'web_fetch_',\n 'str_replace_editor_',\n 'str_replace_based_edit_tool_',\n 'code_execution_',\n 'memory_',\n 'tool_search_',\n 'mcp_toolset',\n] as const;\n\ntype AnthropicToolCacheCandidate = {\n name?: unknown;\n type?: unknown;\n extras?: Record<string, unknown>;\n cache_control?: unknown;\n};\n\nfunction isAnthropicBuiltInTool(\n tool: AnthropicToolCacheCandidate\n): tool is AnthropicToolCacheCandidate & { type: string } {\n const { type } = tool;\n return (\n typeof type === 'string' &&\n ANTHROPIC_BUILT_IN_TOOL_PREFIXES.some((prefix) => type.startsWith(prefix))\n );\n}\n\n/**\n * Whether a tool already carries a cache breakpoint. Built-ins use a direct\n * `cache_control`; custom tools normally carry it under `extras`, but a\n * caller-supplied Anthropic-native tool object can also put it directly on the\n * block — check both so stale markers are never missed.\n */\nfunction hasCacheControl(tool: AnthropicToolCacheCandidate): boolean {\n if (isAnthropicBuiltInTool(tool)) {\n return tool.cache_control != null;\n }\n return tool.cache_control != null || tool.extras?.cache_control != null;\n}\n\n/**\n * Return the `cache_control` from the location that actually reaches the\n * Anthropic payload for this tool's shape: directly on the block for\n * provider-shaped tools (built-ins and raw Anthropic tools), or under `extras`\n * for LangChain custom tools (the adapter promotes only that). Returns\n * `undefined` when no marker sits in the effective location — a marker in the\n * wrong place (e.g. a direct marker on a custom tool) does not count.\n */\nfunction getEffectiveCacheControl(\n tool: AnthropicToolCacheCandidate\n): { ttl?: unknown } | undefined {\n return (\n isProviderShapedTool(tool) ? tool.cache_control : tool.extras?.cache_control\n ) as { ttl?: unknown } | undefined;\n}\n\n/**\n * Return a clone of `tool` with any `cache_control` removed — both the direct\n * block marker and the `extras` marker — preserving the prototype chain. Used\n * to clear stray markers off tools that must not anchor a competing breakpoint.\n */\nfunction stripCacheControl(\n tool: AnthropicToolCacheCandidate\n): AnthropicToolCacheCandidate {\n const prototype = Object.getPrototypeOf(tool) ?? Object.prototype;\n const wrapped = { ...tool };\n delete wrapped.cache_control;\n if (wrapped.extras != null) {\n wrapped.extras = { ...wrapped.extras };\n delete wrapped.extras.cache_control;\n }\n return Object.assign(Object.create(prototype), wrapped);\n}\n\n/**\n * Whether `tool` is already in the Anthropic provider payload shape — an\n * Anthropic built-in or a raw Anthropic tool object (has `input_schema`). These\n * carry `cache_control` directly on the block; the LangChain adapter does NOT\n * promote `extras.cache_control` for them. LangChain StructuredTools, by\n * contrast, expose the marker via `extras`.\n */\nfunction isProviderShapedTool(tool: AnthropicToolCacheCandidate): boolean {\n return (\n isAnthropicBuiltInTool(tool) ||\n 'input_schema' in (tool as Record<string, unknown>)\n );\n}\n\nfunction markCacheControl(\n tool: AnthropicToolCacheCandidate,\n ttl?: PromptCacheTtl\n): AnthropicToolCacheCandidate {\n const cacheControl = buildAnthropicCacheControl(ttl);\n const prototype = Object.getPrototypeOf(tool) ?? Object.prototype;\n if (isProviderShapedTool(tool)) {\n // Built-ins and raw Anthropic tool objects carry cache_control directly on\n // the block; `extras` is not promoted onto the payload for these shapes.\n const wrapped = { ...tool };\n delete wrapped.extras;\n return Object.assign(Object.create(prototype), wrapped, {\n cache_control: cacheControl,\n });\n }\n\n // LangChain custom tools: drop any direct marker and expose the breakpoint via\n // `extras`, which the Anthropic adapter promotes onto the payload.\n const wrapped = { ...tool };\n delete wrapped.cache_control;\n return Object.assign(Object.create(prototype), wrapped, {\n extras: {\n ...(tool.extras ?? {}),\n cache_control: cacheControl,\n },\n });\n}\n\n/**\n * Returns a callable that reports whether a given tool *name* is deferred\n * according to the supplied registry of tool definitions. Tools without\n * a registry entry are treated as non-deferred (i.e. static), matching\n * the host-supplied `graphTools` semantics elsewhere in the SDK.\n */\nexport function makeIsDeferred(\n toolDefinitions:\n | ReadonlyArray<{ name: string; defer_loading?: boolean }>\n | undefined\n): (toolName: string) => boolean {\n if (toolDefinitions == null || toolDefinitions.length === 0) {\n return () => false;\n }\n const deferred = new Set<string>();\n for (const def of toolDefinitions) {\n if (def.defer_loading === true) deferred.add(def.name);\n }\n if (deferred.size === 0) return () => false;\n return (name) => deferred.has(name);\n}\n\n/**\n * Stable-partition `tools` into [static..., deferred...] and stamp the\n * Anthropic `cache_control: ephemeral` marker on the last static tool.\n *\n * If `tools` is undefined or empty, or no entry has a usable `.name`,\n * returns the input unchanged. If there are no static tools at all,\n * also returns unchanged (nothing to cache).\n *\n * The original tool instances are never mutated. The marked entry is a\n * shallow wrapper that preserves the prototype chain so downstream\n * `instanceof` checks still pass. For custom tools, `extras` is merged\n * so any existing `providerToolDefinition` / other extras are kept.\n */\nexport function partitionAndMarkAnthropicToolCache(\n tools: GraphTools | undefined,\n isDeferred: (toolName: string) => boolean,\n ttl?: PromptCacheTtl\n): GraphTools | undefined {\n if (tools == null || tools.length === 0) return tools;\n\n // Use unknown[] internally to avoid GraphTools' union-array variance\n // (each member is one of three array types). We cast back to\n // GraphTools when returning.\n const staticTools: unknown[] = [];\n const deferredTools: unknown[] = [];\n\n for (const tool of tools) {\n const name = (tool as { name?: unknown }).name;\n if (typeof name === 'string' && isDeferred(name)) {\n deferredTools.push(tool);\n } else {\n staticTools.push(tool);\n }\n }\n\n // Anthropic serializes ALL tools before system/messages, so a stray\n // cache_control on any tool — static or deferred — that survives the resolved\n // breakpoint would violate the longer-TTL-first ordering. Strip stale markers\n // off the deferred tools first (they sit after the breakpoint but still before\n // system/messages, and the all-deferred case has no breakpoint of its own).\n let mutated = false;\n for (let i = 0; i < deferredTools.length; i++) {\n const candidate = deferredTools[i] as AnthropicToolCacheCandidate;\n if (hasCacheControl(candidate)) {\n deferredTools[i] = stripCacheControl(candidate);\n mutated = true;\n }\n }\n\n if (staticTools.length === 0) {\n return mutated ? ([...deferredTools] as GraphTools) : tools;\n }\n\n // Strip any stray cache_control off the earlier static tools so a leftover\n // 5-minute marker never sits ahead of the resolved breakpoint, then stamp (or\n // re-stamp) only the last static tool with the resolved TTL.\n for (let i = 0; i < staticTools.length - 1; i++) {\n const candidate = staticTools[i] as AnthropicToolCacheCandidate;\n if (hasCacheControl(candidate)) {\n staticTools[i] = stripCacheControl(candidate);\n mutated = true;\n }\n }\n\n const last = staticTools[\n staticTools.length - 1\n ] as AnthropicToolCacheCandidate;\n const desiredTtl: '1h' | undefined = ttl === '1h' ? '1h' : undefined;\n // \"Already correct\" requires a marker IN the effective location (one that\n // reaches the payload for this tool's shape) carrying the resolved TTL. A\n // marker in the wrong place — e.g. a direct `cache_control` on a LangChain\n // custom tool — is ineffective and must be re-stamped.\n const effective = getEffectiveCacheControl(last);\n const lastAlreadyCorrect =\n effective != null &&\n (effective.ttl === '1h' ? '1h' : undefined) === desiredTtl;\n if (!lastAlreadyCorrect) {\n staticTools[staticTools.length - 1] = markCacheControl(last, ttl);\n mutated = true;\n }\n\n // Return the original reference only when nothing changed AND partitioning\n // moved nothing. When deferred tools exist they must end up after the cache\n // breakpoint, so the partitioned array is returned even if no marker changed.\n if (!mutated && deferredTools.length === 0) {\n return tools;\n }\n return [...staticTools, ...deferredTools] as GraphTools;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"anthropicToolCache.mjs","names":[],"sources":["../../../src/messages/anthropicToolCache.ts"],"mappings":"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"}
@@ -4,16 +4,9 @@ import "../common/index.mjs";
4
4
  function toAssistantTextPhase(value) {
5
5
  return value === "commentary" || value === "final_answer" ? value : void 0;
6
6
  }
7
- /** Reads both provider-native and LangChain standard-content phase fields. */
8
7
  function getAssistantTextPhase(contentPart) {
9
8
  return toAssistantTextPhase(contentPart.phase) ?? toAssistantTextPhase(contentPart.extras?.phase);
10
9
  }
11
- /**
12
- * Keeps provider-authored text phases in distinct message-creation steps.
13
- * Open Responses may return commentary and final-answer blocks in one chunk;
14
- * collapsing the array into one step would assign the first block's phase to
15
- * every block and hide the boundary that closes an activity phase.
16
- */
17
10
  function splitAssistantTextContentByPhase(content) {
18
11
  const groups = [];
19
12
  for (const contentPart of content) {
@@ -33,11 +26,6 @@ function isTextPart(contentPart) {
33
26
  function isReasoningPart(contentPart) {
34
27
  return contentPart.type === "think" || (contentPart.type?.startsWith("thinking") ?? false) || (contentPart.type?.startsWith("reasoning") ?? false) || (contentPart.type?.startsWith("reasoning_content") ?? false) || contentPart.type === "redacted_thinking";
35
28
  }
36
- /**
37
- * Derives additive message-creation metadata before a content delta is
38
- * dispatched. The fallback covers string-only providers whose semantic lane
39
- * is tracked by the stream handler rather than represented on a block.
40
- */
41
29
  function getMessageCreationContentMetadata(content, fallbackContentType) {
42
30
  if (!Array.isArray(content)) return fallbackContentType == null ? {} : { content_type: fallbackContentType };
43
31
  const textPart = content.find(isTextPart);
@@ -1 +1 @@
1
- {"version":3,"file":"assistantPhase.mjs","names":[],"sources":["../../../src/messages/assistantPhase.ts"],"sourcesContent":["import type { AssistantTextPhase } from '@/types/assistantPhase';\nimport type { MessageContentComplex } from '@/types/stream';\nimport { ContentTypes } from '@/common';\n\nexport type MessageCreationContentMetadata = {\n content_type?: ContentTypes.TEXT | ContentTypes.THINK;\n phase?: AssistantTextPhase;\n};\n\nfunction toAssistantTextPhase(value: unknown): AssistantTextPhase | undefined {\n return value === 'commentary' || value === 'final_answer' ? value : undefined;\n}\n\n/** Reads both provider-native and LangChain standard-content phase fields. */\nexport function getAssistantTextPhase(\n contentPart: MessageContentComplex\n): AssistantTextPhase | undefined {\n return (\n toAssistantTextPhase(contentPart.phase) ??\n toAssistantTextPhase(contentPart.extras?.phase)\n );\n}\n\n/**\n * Keeps provider-authored text phases in distinct message-creation steps.\n * Open Responses may return commentary and final-answer blocks in one chunk;\n * collapsing the array into one step would assign the first block's phase to\n * every block and hide the boundary that closes an activity phase.\n */\nexport function splitAssistantTextContentByPhase(\n content: MessageContentComplex[]\n): MessageContentComplex[][] {\n const groups: MessageContentComplex[][] = [];\n for (const contentPart of content) {\n const phase = getAssistantTextPhase(contentPart);\n const currentGroup = groups.at(-1);\n if (\n currentGroup == null ||\n getAssistantTextPhase(currentGroup[0]) !== phase\n ) {\n groups.push([contentPart]);\n continue;\n }\n currentGroup.push(contentPart);\n }\n return groups;\n}\n\nfunction isTextPart(contentPart: MessageContentComplex): boolean {\n return contentPart.type?.startsWith(ContentTypes.TEXT) ?? false;\n}\n\nfunction isReasoningPart(contentPart: MessageContentComplex): boolean {\n return (\n contentPart.type === ContentTypes.THINK ||\n (contentPart.type?.startsWith(ContentTypes.THINKING) ?? false) ||\n (contentPart.type?.startsWith(ContentTypes.REASONING) ?? false) ||\n (contentPart.type?.startsWith(ContentTypes.REASONING_CONTENT) ?? false) ||\n contentPart.type === 'redacted_thinking'\n );\n}\n\n/**\n * Derives additive message-creation metadata before a content delta is\n * dispatched. The fallback covers string-only providers whose semantic lane\n * is tracked by the stream handler rather than represented on a block.\n */\nexport function getMessageCreationContentMetadata(\n content: string | MessageContentComplex[] | undefined,\n fallbackContentType?: ContentTypes.TEXT | ContentTypes.THINK\n): MessageCreationContentMetadata {\n if (!Array.isArray(content)) {\n return fallbackContentType == null\n ? {}\n : { content_type: fallbackContentType };\n }\n const textPart = content.find(isTextPart);\n if (textPart != null) {\n const phase = getAssistantTextPhase(textPart);\n return {\n content_type: ContentTypes.TEXT,\n ...(phase == null ? {} : { phase }),\n };\n }\n if (content.some(isReasoningPart)) {\n return { content_type: ContentTypes.THINK };\n }\n return fallbackContentType == null\n ? {}\n : { content_type: fallbackContentType };\n}\n"],"mappings":";;;AASA,SAAS,qBAAqB,OAAgD;CAC5E,OAAO,UAAU,gBAAgB,UAAU,iBAAiB,QAAQ,KAAA;AACtE;;AAGA,SAAgB,sBACd,aACgC;CAChC,OACE,qBAAqB,YAAY,KAAK,KACtC,qBAAqB,YAAY,QAAQ,KAAK;AAElD;;;;;;;AAQA,SAAgB,iCACd,SAC2B;CAC3B,MAAM,SAAoC,CAAC;CAC3C,KAAK,MAAM,eAAe,SAAS;EACjC,MAAM,QAAQ,sBAAsB,WAAW;EAC/C,MAAM,eAAe,OAAO,GAAG,EAAE;EACjC,IACE,gBAAgB,QAChB,sBAAsB,aAAa,EAAE,MAAM,OAC3C;GACA,OAAO,KAAK,CAAC,WAAW,CAAC;GACzB;EACF;EACA,aAAa,KAAK,WAAW;CAC/B;CACA,OAAO;AACT;AAEA,SAAS,WAAW,aAA6C;CAC/D,OAAO,YAAY,MAAM,WAAA,MAA4B,KAAK;AAC5D;AAEA,SAAS,gBAAgB,aAA6C;CACpE,OACE,YAAY,SAAA,YACX,YAAY,MAAM,WAAA,UAAgC,KAAK,WACvD,YAAY,MAAM,WAAA,WAAiC,KAAK,WACxD,YAAY,MAAM,WAAA,mBAAyC,KAAK,UACjE,YAAY,SAAS;AAEzB;;;;;;AAOA,SAAgB,kCACd,SACA,qBACgC;CAChC,IAAI,CAAC,MAAM,QAAQ,OAAO,GACxB,OAAO,uBAAuB,OAC1B,CAAC,IACD,EAAE,cAAc,oBAAoB;CAE1C,MAAM,WAAW,QAAQ,KAAK,UAAU;CACxC,IAAI,YAAY,MAAM;EACpB,MAAM,QAAQ,sBAAsB,QAAQ;EAC5C,OAAO;GACL,cAAA;GACA,GAAI,SAAS,OAAO,CAAC,IAAI,EAAE,MAAM;EACnC;CACF;CACA,IAAI,QAAQ,KAAK,eAAe,GAC9B,OAAO,EAAE,cAAA,QAAiC;CAE5C,OAAO,uBAAuB,OAC1B,CAAC,IACD,EAAE,cAAc,oBAAoB;AAC1C"}
1
+ {"version":3,"file":"assistantPhase.mjs","names":[],"sources":["../../../src/messages/assistantPhase.ts"],"mappings":";;;AASA,SAAS,qBAAqB,OAAgD;CAC5E,OAAO,UAAU,gBAAgB,UAAU,iBAAiB,QAAQ,KAAA;AACtE;AAGA,SAAgB,sBACd,aACgC;CAChC,OACE,qBAAqB,YAAY,KAAK,KACtC,qBAAqB,YAAY,QAAQ,KAAK;AAElD;AAQA,SAAgB,iCACd,SAC2B;CAC3B,MAAM,SAAoC,CAAC;CAC3C,KAAK,MAAM,eAAe,SAAS;EACjC,MAAM,QAAQ,sBAAsB,WAAW;EAC/C,MAAM,eAAe,OAAO,GAAG,EAAE;EACjC,IACE,gBAAgB,QAChB,sBAAsB,aAAa,EAAE,MAAM,OAC3C;GACA,OAAO,KAAK,CAAC,WAAW,CAAC;GACzB;EACF;EACA,aAAa,KAAK,WAAW;CAC/B;CACA,OAAO;AACT;AAEA,SAAS,WAAW,aAA6C;CAC/D,OAAO,YAAY,MAAM,WAAA,MAA4B,KAAK;AAC5D;AAEA,SAAS,gBAAgB,aAA6C;CACpE,OACE,YAAY,SAAA,YACX,YAAY,MAAM,WAAA,UAAgC,KAAK,WACvD,YAAY,MAAM,WAAA,WAAiC,KAAK,WACxD,YAAY,MAAM,WAAA,mBAAyC,KAAK,UACjE,YAAY,SAAS;AAEzB;AAOA,SAAgB,kCACd,SACA,qBACgC;CAChC,IAAI,CAAC,MAAM,QAAQ,OAAO,GACxB,OAAO,uBAAuB,OAC1B,CAAC,IACD,EAAE,cAAc,oBAAoB;CAE1C,MAAM,WAAW,QAAQ,KAAK,UAAU;CACxC,IAAI,YAAY,MAAM;EACpB,MAAM,QAAQ,sBAAsB,QAAQ;EAC5C,OAAO;GACL,cAAA;GACA,GAAI,SAAS,OAAO,CAAC,IAAI,EAAE,MAAM;EACnC;CACF;CACA,IAAI,QAAQ,KAAK,eAAe,GAC9B,OAAO,EAAE,cAAA,QAAiC;CAE5C,OAAO,uBAAuB,OAC1B,CAAC,IACD,EAAE,cAAc,oBAAoB;AAC1C"}
@@ -1,13 +1,4 @@
1
1
  //#region src/messages/budget.ts
2
- /**
3
- * Reconciles a context-usage breakdown's instruction/available/message fields
4
- * from the pruner's budget metrics. `messageTokens` and `availableForMessages`
5
- * are DERIVED from `contextBudget` / `effectiveInstructionTokens` /
6
- * `remainingContextTokens` rather than summed from the index map — that map is
7
- * keyed by pre-prune indices, so summing it over the kept context would missum.
8
- * Shared by the live snapshot path (`Graph.createCallModel`) and the pre-send
9
- * projection (`AgentContext.projectContextUsage`) so both yield identical numbers.
10
- */
11
2
  function syncBudgetDerivedFields(usage) {
12
3
  const { breakdown, contextBudget, effectiveInstructionTokens } = usage;
13
4
  if (effectiveInstructionTokens == null) return;
@@ -1 +1 @@
1
- {"version":3,"file":"budget.mjs","names":[],"sources":["../../../src/messages/budget.ts"],"sourcesContent":["import type * as t from '@/types';\n\n/**\n * Reconciles a context-usage breakdown's instruction/available/message fields\n * from the pruner's budget metrics. `messageTokens` and `availableForMessages`\n * are DERIVED from `contextBudget` / `effectiveInstructionTokens` /\n * `remainingContextTokens` rather than summed from the index map — that map is\n * keyed by pre-prune indices, so summing it over the kept context would missum.\n * Shared by the live snapshot path (`Graph.createCallModel`) and the pre-send\n * projection (`AgentContext.projectContextUsage`) so both yield identical numbers.\n */\nexport function syncBudgetDerivedFields(usage: t.ContextUsageEvent): void {\n const { breakdown, contextBudget, effectiveInstructionTokens } = usage;\n if (effectiveInstructionTokens == null) {\n return;\n }\n breakdown.instructionTokens = effectiveInstructionTokens;\n if (contextBudget == null) {\n return;\n }\n breakdown.availableForMessages = Math.max(\n 0,\n contextBudget - effectiveInstructionTokens\n );\n if (usage.remainingContextTokens == null) {\n return;\n }\n breakdown.messageTokens = Math.max(\n 0,\n contextBudget - effectiveInstructionTokens - usage.remainingContextTokens\n );\n}\n"],"mappings":";;;;;;;;;;AAWA,SAAgB,wBAAwB,OAAkC;CACxE,MAAM,EAAE,WAAW,eAAe,+BAA+B;CACjE,IAAI,8BAA8B,MAChC;CAEF,UAAU,oBAAoB;CAC9B,IAAI,iBAAiB,MACnB;CAEF,UAAU,uBAAuB,KAAK,IACpC,GACA,gBAAgB,0BAClB;CACA,IAAI,MAAM,0BAA0B,MAClC;CAEF,UAAU,gBAAgB,KAAK,IAC7B,GACA,gBAAgB,6BAA6B,MAAM,sBACrD;AACF"}
1
+ {"version":3,"file":"budget.mjs","names":[],"sources":["../../../src/messages/budget.ts"],"mappings":";AAWA,SAAgB,wBAAwB,OAAkC;CACxE,MAAM,EAAE,WAAW,eAAe,+BAA+B;CACjE,IAAI,8BAA8B,MAChC;CAEF,UAAU,oBAAoB;CAC9B,IAAI,iBAAiB,MACnB;CAEF,UAAU,uBAAuB,KAAK,IACpC,GACA,gBAAgB,0BAClB;CACA,IAAI,MAAM,0BAA0B,MAClC;CAEF,UAAU,gBAAgB,KAAK,IAC7B,GACA,gBAAgB,6BAA6B,MAAM,sBACrD;AACF"}
@@ -4,86 +4,32 @@ import { toLangChainContent } from "./langchain.mjs";
4
4
  import { BaseMessage } from "@langchain/core/messages";
5
5
  import { isProxy } from "node:util/types";
6
6
  //#region src/messages/cache.ts
7
- /**
8
- * Default TTL applied wherever a prompt-cache breakpoint is added. The 1-hour
9
- * extended cache keeps prefixes warm across longer gaps between turns, at the
10
- * cost of a higher one-time cache-write multiplier (2x vs 1.25x for 5m).
11
- */
12
7
  const DEFAULT_PROMPT_CACHE_TTL = "1h";
13
- /**
14
- * Resolve an optionally-configured TTL to a concrete value, defaulting to the
15
- * 1-hour extended cache. Used at the Anthropic/Bedrock prompt-cache call sites.
16
- */
17
8
  function resolvePromptCacheTtl(ttl) {
18
9
  return ttl ?? "1h";
19
10
  }
20
- /**
21
- * Build an Anthropic `cache_control` breakpoint for the given TTL. `'5m'` (or
22
- * `undefined`) omits the `ttl` field — that is the provider default, so the
23
- * payload stays byte-identical to the legacy 5-minute marker. `'1h'` adds the
24
- * explicit extended-cache `ttl`.
25
- */
26
11
  function buildAnthropicCacheControl(ttl) {
27
12
  return ttl === "1h" ? {
28
13
  type: "ephemeral",
29
14
  ttl: "1h"
30
15
  } : { type: "ephemeral" };
31
16
  }
32
- /**
33
- * Build a Bedrock `cachePoint` for the given TTL. Mirrors
34
- * {@link buildAnthropicCacheControl}: `'5m'`/`undefined` omits `ttl` (the
35
- * legacy default), `'1h'` adds the extended-cache `ttl`.
36
- */
37
17
  function buildBedrockCachePoint(ttl) {
38
18
  return ttl === "1h" ? {
39
19
  type: "default",
40
20
  ttl: "1h"
41
21
  } : { type: "default" };
42
22
  }
43
- /**
44
- * Whether a Bedrock model id is an Anthropic Claude model. Claude is the only
45
- * Bedrock family that accepts the explicit cache features below; Amazon Nova and
46
- * others reject them. Matches both the `anthropic.` and cross-region
47
- * (`us.anthropic.`) / bare `claude` forms.
48
- */
49
23
  function isBedrockAnthropicModel(model) {
50
24
  return typeof model === "string" && /claude|anthropic/i.test(model);
51
25
  }
52
- /**
53
- * A `cachePoint` under `toolConfig.tools` is only accepted on Anthropic Claude
54
- * models. Amazon Nova rejects it outright — `Malformed input request:
55
- * #/toolConfig/tools/0: extraneous key [cachePoint] is not permitted` — even
56
- * though it accepts `cachePoint` in `system` and `messages` (verified live:
57
- * Nova returns HTTP 200 with real `cacheWriteInputTokens` for both). Per the AWS
58
- * prompt-caching docs the support table lists `tools` for Claude only.
59
- *
60
- * Gate ONLY the tool checkpoint on this, so a `promptCache: true` config on Nova
61
- * keeps its valid message/system caching instead of either 400-ing (tool point)
62
- * or losing caching entirely.
63
- *
64
- * @see https://docs.aws.amazon.com/bedrock/latest/userguide/prompt-caching.html
65
- * @see https://github.com/danny-avila/LibreChat/issues/13838
66
- */
67
26
  function supportsBedrockToolCache(model) {
68
27
  return isBedrockAnthropicModel(model);
69
28
  }
70
- /**
71
- * Resolve the Bedrock `cachePoint` TTL for a model. The extended `1h` TTL is
72
- * Anthropic-only: non-Claude models (e.g. Nova) hard-reject it with
73
- * `Extended TTL prompt caching is only supported for Anthropic models`, so they
74
- * are clamped to `5m` even when `1h` is configured (verified live). An omitted
75
- * model defaults to a Claude model, and Claude downgrades an unsupported `1h` to
76
- * `5m` server-side, so the `1h` default is safe for the Claude/undefined paths.
77
- *
78
- * @see https://github.com/danny-avila/LibreChat/issues/13838
79
- */
80
29
  function resolveBedrockPromptCacheTtl(ttl, model) {
81
30
  if (model != null && !isBedrockAnthropicModel(model)) return "5m";
82
31
  return resolvePromptCacheTtl(ttl);
83
32
  }
84
- /**
85
- * Deep clones a message's content to prevent mutation of the original.
86
- */
87
33
  function deepCloneContent(content, omittedProperty) {
88
34
  if (typeof content === "string") return content;
89
35
  if (Array.isArray(content)) return content.map((block) => {
@@ -98,12 +44,6 @@ function deepCloneContent(content, omittedProperty) {
98
44
  });
99
45
  return content;
100
46
  }
101
- /**
102
- * Clones a message with new content. For LangChain BaseMessage instances,
103
- * constructs a proper class instance so that `instanceof` checks are preserved
104
- * in downstream code (e.g., ensureThinkingBlockInMessages).
105
- * For plain objects (AnthropicMessage), uses object spread.
106
- */
107
47
  function cloneMessage(message, content) {
108
48
  if (message instanceof BaseMessage) {
109
49
  const descriptors = Object.getOwnPropertyDescriptors(message);
@@ -140,15 +80,6 @@ function cloneMessage(message, content) {
140
80
  }
141
81
  return cloned;
142
82
  }
143
- /**
144
- * Sanitize a Bedrock system message: strip Anthropic `cache_control` (Bedrock
145
- * conversion can't use it) and normalize any existing `cachePoint` to the
146
- * resolved TTL. The normalization matters because Bedrock requires longer-TTL
147
- * checkpoints to appear before shorter ones — a stale 5-minute system cachePoint
148
- * (host-supplied or carried over from a 5m config) left ahead of a 1-hour
149
- * message tail would make the request invalid. System messages are never
150
- * anchored as the tail breakpoint; this only fixes markers already present.
151
- */
152
83
  function sanitizeBedrockSystemMessage(message, ttl) {
153
84
  const content = message.content;
154
85
  if (!Array.isArray(content)) return message;
@@ -177,15 +108,6 @@ function sanitizeBedrockSystemMessage(message, ttl) {
177
108
  if (!modified) return message;
178
109
  return cloneMessage(message, sanitized);
179
110
  }
180
- /**
181
- * Anthropic API: Adds cache control to the appropriate user messages in the payload.
182
- * Strips ALL existing cache control (both Anthropic and Bedrock formats) from all messages,
183
- * then adds fresh cache control to the last 2 user messages in a single backward pass.
184
- * This ensures we don't accumulate stale cache points across multiple turns.
185
- * Returns a new array - only clones messages that require modification.
186
- * @param messages - The array of message objects.
187
- * @returns - A new array of message objects with cache control added.
188
- */
189
111
  function addCacheControl(messages, ttl) {
190
112
  if (!Array.isArray(messages) || messages.length < 2) return messages;
191
113
  const updatedMessages = [...messages];
@@ -234,9 +156,6 @@ function addCacheControl(messages, ttl) {
234
156
  }
235
157
  return updatedMessages;
236
158
  }
237
- /**
238
- * Checks if a content block is a cache point
239
- */
240
159
  function isCachePoint(block) {
241
160
  if (typeof block !== "object" || block == null || isProxy(block)) return false;
242
161
  try {
@@ -247,20 +166,6 @@ function isCachePoint(block) {
247
166
  return false;
248
167
  }
249
168
  }
250
- /**
251
- * Block types that must never anchor the tail cache breakpoint, because the
252
- * marker would not survive to the model call:
253
- * - `thinking` / `redacted_thinking`: native Anthropic reasoning — the API
254
- * rejects `cache_control` on these blocks.
255
- * - `reasoning_content` / `reasoning` / `think`: foreign reasoning (Bedrock,
256
- * Google, LibreChat) that `_convertMessagesToAnthropicPayload` DROPS on
257
- * assistant turns during a cross-provider handoff.
258
- * - `input_json_delta`: persisted partial tool-input deltas, also DROPPED by
259
- * `_convertMessagesToAnthropicPayload` (the assembled input is restored onto
260
- * the tool_use block).
261
- * Anchoring the only breakpoint on a block that is about to disappear silently
262
- * loses tail caching, so all of these are excluded.
263
- */
264
169
  const NON_ANCHORABLE_BLOCK_TYPES = new Set([
265
170
  "thinking",
266
171
  "redacted_thinking",
@@ -269,13 +174,6 @@ const NON_ANCHORABLE_BLOCK_TYPES = new Set([
269
174
  "think",
270
175
  "input_json_delta"
271
176
  ]);
272
- /**
273
- * A block can anchor the tail cache breakpoint when it is a real content block
274
- * that the Anthropic API accepts `cache_control` on and that survives provider
275
- * conversion. Reasoning / dropped-delta blocks are excluded (see
276
- * {@link NON_ANCHORABLE_BLOCK_TYPES}), and empty text blocks are not cacheable,
277
- * so both are skipped.
278
- */
279
177
  function isTailCacheableBlock(block) {
280
178
  if (isCachePoint(block)) return false;
281
179
  const type = block.type;
@@ -286,24 +184,6 @@ function isTailCacheableBlock(block) {
286
184
  }
287
185
  return true;
288
186
  }
289
- /**
290
- * Anthropic API: single tail cache breakpoint (default strategy).
291
- *
292
- * Places exactly ONE `cache_control` marker on the last cacheable block of the
293
- * final non-synthetic message, mirroring the Claude Code strategy
294
- * (`markerIndex = messages.length - 1`). Because the marker always rides the
295
- * true tail, the entire conversation prefix is written once and read back on
296
- * the next turn as the history grows append-only — instead of the rolling
297
- * "last two user messages" markers, which leave freshly appended tool/assistant
298
- * turns outside the cached prefix and re-write large spans every step.
299
- *
300
- * Stale markers (Anthropic `cache_control` and Bedrock cache points) are
301
- * stripped from every message in a single backward pass so exactly one marker
302
- * survives. Synthetic skill/meta messages are skipped as anchors (their volatile
303
- * content must not pin the cache) but still have stale markers removed.
304
- *
305
- * Returns a new array; only messages that require modification are cloned.
306
- */
307
187
  function addTailCacheControl(messages, ttl) {
308
188
  if (!Array.isArray(messages) || messages.length === 0) return messages;
309
189
  const updatedMessages = [...messages];
@@ -358,14 +238,6 @@ function getMessageRole(message) {
358
238
  if ("role" in message && typeof message.role === "string") return message.role;
359
239
  }
360
240
  const SKILL_MESSAGE_SOURCE = "skill";
361
- /**
362
- * Synthetic skill/meta messages (reconstructed skill bodies, primed SKILL.md
363
- * instructions) are re-injected every turn and are not stable conversation
364
- * turns. They must not anchor a fresh prompt-cache marker — doing so pins the
365
- * cache to a volatile/duplicated prefix. Stale markers are still stripped from
366
- * them; only the *adding* of new markers is suppressed. Detected via
367
- * `additional_kwargs.isMeta === true` or `additional_kwargs.source === 'skill'`.
368
- */
369
241
  function isSyntheticMetaMessage(message) {
370
242
  const { additional_kwargs: kwargs } = message;
371
243
  if (kwargs == null) return false;
@@ -438,9 +310,6 @@ function addCacheControlToStablePrefixMessages(messages, maxCachePoints, ttl) {
438
310
  if (assistantMarked.some(hasCacheMarker)) return assistantMarked;
439
311
  return addCacheControlToRecentMessages(messages, maxCachePoints, isCacheableConversationMessage, ttl);
440
312
  }
441
- /**
442
- * Checks if a message's content has Anthropic cache_control fields.
443
- */
444
313
  function hasAnthropicCacheControl(content) {
445
314
  for (let i = 0; i < content.length; i++) {
446
315
  const block = content[i];
@@ -453,11 +322,6 @@ function hasAnthropicCacheControl(content) {
453
322
  }
454
323
  return false;
455
324
  }
456
- /**
457
- * Removes all Anthropic cache_control fields from messages
458
- * Used when switching from Anthropic to Bedrock provider
459
- * Returns a new array - only clones messages that require modification.
460
- */
461
325
  function stripAnthropicCacheControl(messages) {
462
326
  if (!Array.isArray(messages)) return messages;
463
327
  const updatedMessages = [...messages];
@@ -469,18 +333,10 @@ function stripAnthropicCacheControl(messages) {
469
333
  }
470
334
  return updatedMessages;
471
335
  }
472
- /**
473
- * Checks if a message's content has Bedrock cachePoint blocks.
474
- */
475
336
  function hasBedrockCachePoint(content) {
476
337
  for (let i = 0; i < content.length; i++) if (isCachePoint(content[i])) return true;
477
338
  return false;
478
339
  }
479
- /**
480
- * Removes all Bedrock cachePoint blocks from messages
481
- * Used when switching from Bedrock to Anthropic provider
482
- * Returns a new array - only clones messages that require modification.
483
- */
484
340
  function stripBedrockCacheControl(messages) {
485
341
  if (!Array.isArray(messages)) return messages;
486
342
  const updatedMessages = [...messages];
@@ -492,17 +348,6 @@ function stripBedrockCacheControl(messages) {
492
348
  }
493
349
  return updatedMessages;
494
350
  }
495
- /**
496
- * Adds Bedrock Converse API cache points to the latest two user messages.
497
- * Inserts `{ cachePoint: { type: 'default' } }` as a separate content block
498
- * immediately after the last text block in each targeted message.
499
- * Strips ALL existing cache control (both Bedrock and Anthropic formats) from all messages,
500
- * then adds fresh cache points to the latest two non-tool user messages in a single backward pass.
501
- * This ensures we don't accumulate stale cache points across multiple turns.
502
- * Returns a new array - only clones messages that require modification.
503
- * @param messages - The array of message objects.
504
- * @returns - A new array of message objects with cache points added.
505
- */
506
351
  function addBedrockCacheControl(messages, ttl) {
507
352
  if (!Array.isArray(messages) || messages.length === 0) return messages;
508
353
  const updatedMessages = [...messages];
@@ -563,23 +408,6 @@ function addBedrockCacheControl(messages, ttl) {
563
408
  }
564
409
  return updatedMessages;
565
410
  }
566
- /**
567
- * Bedrock Converse API: single tail cache breakpoint (default strategy).
568
- *
569
- * The Bedrock counterpart of {@link addTailCacheControl}. Strips ALL existing
570
- * cache control (Bedrock cache points and Anthropic `cache_control`) from every
571
- * message, then inserts exactly ONE `{ cachePoint: { type: 'default' } }` block
572
- * immediately after the last non-empty text block of the most recent
573
- * non-synthetic, non-system message. Anchoring on the rolling tail keeps the
574
- * cached prefix append-only as the conversation grows, instead of re-writing
575
- * large spans every turn with the legacy "last two user messages" cache points.
576
- *
577
- * System messages are sanitized (Anthropic `cache_control` stripped) but never
578
- * anchored. Synthetic skill/meta messages are skipped as anchors so their
579
- * volatile content cannot pin the cache.
580
- *
581
- * Returns a new array - only clones messages that require modification.
582
- */
583
411
  function addBedrockTailCacheControl(messages, ttl) {
584
412
  if (!Array.isArray(messages) || messages.length === 0) return messages;
585
413
  const updatedMessages = [...messages];