@librechat/agents 3.4.6 → 3.5.0

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 (1027) 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 +5 -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 +5 -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/dist/types/agents/AgentContext.d.ts +3 -3
  582. package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +3 -3
  583. package/dist/types/agents/projection.d.ts +1 -1
  584. package/dist/types/events.d.ts +2 -2
  585. package/dist/types/graphs/Graph.d.ts +11 -11
  586. package/dist/types/graphs/MultiAgentGraph.d.ts +2 -2
  587. package/dist/types/graphs/createGraph.d.ts +4 -4
  588. package/dist/types/graphs/graphFactory.d.ts +1 -1
  589. package/dist/types/hitl/askUserQuestion.d.ts +1 -1
  590. package/dist/types/hitl/askUserQuestions.d.ts +1 -1
  591. package/dist/types/hitl/askUserQuestionsInterrupt.d.ts +1 -1
  592. package/dist/types/hooks/types.d.ts +1 -1
  593. package/dist/types/instrumentation.d.ts +1 -1
  594. package/dist/types/langfuse.d.ts +3 -3
  595. package/dist/types/langfuseConfig.d.ts +2 -2
  596. package/dist/types/langfuseRuntimeContext.d.ts +1 -1
  597. package/dist/types/langfuseRuntimeScope.d.ts +2 -2
  598. package/dist/types/langfuseSpanRegistry.d.ts +1 -1
  599. package/dist/types/langfuseToolOutputTracing.d.ts +3 -3
  600. package/dist/types/llm/anthropic/index.d.ts +1 -1
  601. package/dist/types/llm/bedrock/index.d.ts +1 -1
  602. package/dist/types/llm/bedrock/toolCache.d.ts +2 -2
  603. package/dist/types/llm/contextOverflowRecovery.d.ts +2 -2
  604. package/dist/types/llm/google/index.d.ts +1 -1
  605. package/dist/types/llm/init.d.ts +2 -2
  606. package/dist/types/llm/invoke.d.ts +6 -6
  607. package/dist/types/llm/mistral/index.d.ts +1 -1
  608. package/dist/types/llm/openai/index.d.ts +2 -2
  609. package/dist/types/llm/openrouter/index.d.ts +2 -2
  610. package/dist/types/llm/openrouter/toolCache.d.ts +2 -2
  611. package/dist/types/llm/providers.d.ts +2 -2
  612. package/dist/types/llm/request.d.ts +2 -2
  613. package/dist/types/llm/stream/chunkAdapters.d.ts +1 -1
  614. package/dist/types/llm/streamLimits.d.ts +1 -1
  615. package/dist/types/llm/truncation.d.ts +1 -1
  616. package/dist/types/llm/vertexai/index.d.ts +1 -1
  617. package/dist/types/messages/alternation.d.ts +1 -1
  618. package/dist/types/messages/anthropicToolCache.d.ts +2 -2
  619. package/dist/types/messages/assistantPhase.d.ts +3 -3
  620. package/dist/types/messages/budget.d.ts +1 -1
  621. package/dist/types/messages/cache.d.ts +1 -1
  622. package/dist/types/messages/contextPruning.d.ts +2 -2
  623. package/dist/types/messages/core.d.ts +2 -2
  624. package/dist/types/messages/format.d.ts +2 -2
  625. package/dist/types/messages/ids.d.ts +2 -2
  626. package/dist/types/messages/injected.d.ts +1 -1
  627. package/dist/types/messages/langchain.d.ts +1 -1
  628. package/dist/types/messages/prune.d.ts +3 -3
  629. package/dist/types/openai/index.d.ts +1 -1
  630. package/dist/types/prompts/activityLabel.d.ts +2 -2
  631. package/dist/types/responses/index.d.ts +1 -1
  632. package/dist/types/run.d.ts +3 -3
  633. package/dist/types/session/handlers.d.ts +1 -1
  634. package/dist/types/session/types.d.ts +1 -1
  635. package/dist/types/stream.d.ts +4 -4
  636. package/dist/types/summarization/index.d.ts +1 -1
  637. package/dist/types/summarization/node.d.ts +6 -6
  638. package/dist/types/test/mockTools.d.ts +1 -1
  639. package/dist/types/tools/BashExecutor.d.ts +2 -2
  640. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +2 -2
  641. package/dist/types/tools/CodeExecutor.d.ts +3 -3
  642. package/dist/types/tools/CodeSessionFileSummary.d.ts +1 -1
  643. package/dist/types/tools/ProgrammaticToolCalling.d.ts +2 -2
  644. package/dist/types/tools/ReadFile.d.ts +1 -1
  645. package/dist/types/tools/SkillTool.d.ts +1 -1
  646. package/dist/types/tools/SubagentTool.d.ts +3 -3
  647. package/dist/types/tools/ToolNode.d.ts +5 -5
  648. package/dist/types/tools/ToolSearch.d.ts +2 -2
  649. package/dist/types/tools/cloudflare/CloudflareBridgeRuntime.d.ts +1 -1
  650. package/dist/types/tools/cloudflare/CloudflareProgrammaticToolCalling.d.ts +1 -1
  651. package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +2 -2
  652. package/dist/types/tools/cloudflare/CloudflareSandboxTools.d.ts +1 -1
  653. package/dist/types/tools/eagerEventExecution.d.ts +1 -1
  654. package/dist/types/tools/handlers.d.ts +3 -3
  655. package/dist/types/tools/intentArg.d.ts +1 -1
  656. package/dist/types/tools/local/CompileCheckTool.d.ts +2 -2
  657. package/dist/types/tools/local/FileCheckpointer.d.ts +1 -1
  658. package/dist/types/tools/local/LocalCodingTools.d.ts +2 -2
  659. package/dist/types/tools/local/LocalExecutionEngine.d.ts +1 -1
  660. package/dist/types/tools/local/LocalExecutionTools.d.ts +1 -1
  661. package/dist/types/tools/local/LocalProgrammaticToolCalling.d.ts +1 -1
  662. package/dist/types/tools/local/bashAst.d.ts +1 -1
  663. package/dist/types/tools/local/resolveLocalExecutionTools.d.ts +1 -1
  664. package/dist/types/tools/local/syntaxCheck.d.ts +1 -1
  665. package/dist/types/tools/ptcTimeout.d.ts +1 -1
  666. package/dist/types/tools/schema.d.ts +1 -1
  667. package/dist/types/tools/search/anthropic.d.ts +1 -1
  668. package/dist/types/tools/skillCatalog.d.ts +1 -1
  669. package/dist/types/tools/subagent/SubagentExecutor.d.ts +5 -5
  670. package/dist/types/tools/subagent/SubagentReplay.d.ts +3 -3
  671. package/dist/types/tools/subagent/childGraphConfig.d.ts +2 -2
  672. package/dist/types/types/activityLabel.d.ts +3 -3
  673. package/dist/types/types/graph.d.ts +7 -7
  674. package/dist/types/types/llm.d.ts +9 -9
  675. package/dist/types/types/run.d.ts +7 -7
  676. package/dist/types/types/stream.d.ts +5 -5
  677. package/dist/types/types/summarize.d.ts +2 -2
  678. package/dist/types/types/tools.d.ts +5 -5
  679. package/dist/types/utils/__tests__/fixtures/contextOverflowSignatures.d.ts +1 -1
  680. package/dist/types/utils/errors.d.ts +1 -1
  681. package/dist/types/utils/events.d.ts +1 -1
  682. package/dist/types/utils/handlers.d.ts +3 -3
  683. package/dist/types/utils/llm.d.ts +1 -1
  684. package/dist/types/utils/llmConfig.d.ts +1 -1
  685. package/dist/types/utils/title.d.ts +1 -1
  686. package/package.json +10 -3
  687. package/src/llm/google/utils/common.ts +6 -4
  688. package/src/__tests__/stream.eagerArgsDivergence.test.ts +0 -911
  689. package/src/__tests__/stream.eagerEventExecution.test.ts +0 -5046
  690. package/src/__tests__/stream.streamLimits.test.ts +0 -1982
  691. package/src/agents/__tests__/AgentContext.anthropic.live.test.ts +0 -448
  692. package/src/agents/__tests__/AgentContext.bedrock.live.test.ts +0 -655
  693. package/src/agents/__tests__/AgentContext.openrouter.live.test.ts +0 -128
  694. package/src/agents/__tests__/AgentContext.overflow.test.ts +0 -205
  695. package/src/agents/__tests__/AgentContext.test.ts +0 -2425
  696. package/src/agents/__tests__/projection.test.ts +0 -73
  697. package/src/agents/__tests__/promptCacheLiveHelpers.ts +0 -175
  698. package/src/aggregator.test.ts +0 -1214
  699. package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +0 -273
  700. package/src/graphs/__tests__/Graph.closeRunStep.test.ts +0 -385
  701. package/src/graphs/__tests__/Graph.contextOverflow.test.ts +0 -1766
  702. package/src/graphs/__tests__/Graph.preemptSignal.test.ts +0 -126
  703. package/src/graphs/__tests__/Graph.reasoning.test.ts +0 -1717
  704. package/src/graphs/__tests__/Graph.subagentResumeState.test.ts +0 -80
  705. package/src/graphs/__tests__/MultiAgentGraph.test.ts +0 -177
  706. package/src/graphs/__tests__/composition.smoke.test.ts +0 -509
  707. package/src/graphs/__tests__/createGraph.test.ts +0 -206
  708. package/src/hooks/__tests__/HookRegistry.test.ts +0 -334
  709. package/src/hooks/__tests__/compactHooks.test.ts +0 -250
  710. package/src/hooks/__tests__/createToolPolicyHook.test.ts +0 -268
  711. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +0 -405
  712. package/src/hooks/__tests__/executeHooks.test.ts +0 -1294
  713. package/src/hooks/__tests__/integration.test.ts +0 -337
  714. package/src/hooks/__tests__/matchers.test.ts +0 -238
  715. package/src/hooks/__tests__/preemptBoundary.test.ts +0 -152
  716. package/src/hooks/__tests__/toolHooks.test.ts +0 -669
  717. package/src/llm/__tests__/contextOverflowRecovery.test.ts +0 -401
  718. package/src/llm/__tests__/fallbackOverflow.test.ts +0 -287
  719. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  720. package/src/llm/anthropic/inherited-content-utils.spec.ts +0 -249
  721. package/src/llm/anthropic/inherited-stream-events.spec.ts +0 -1259
  722. package/src/llm/anthropic/inherited-strict.spec.ts +0 -302
  723. package/src/llm/anthropic/llm.spec.ts +0 -3394
  724. package/src/llm/anthropic/utils/cross-provider-reasoning.test.ts +0 -383
  725. package/src/llm/anthropic/utils/cross-provider-server-tools.test.ts +0 -110
  726. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +0 -508
  727. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +0 -361
  728. package/src/llm/anthropic/utils/stripPrefillCache.test.ts +0 -111
  729. package/src/llm/anthropic/utils/tool-id-normalization.test.ts +0 -287
  730. package/src/llm/bedrock/inherited-cache.spec.ts +0 -144
  731. package/src/llm/bedrock/inherited.spec.ts +0 -724
  732. package/src/llm/bedrock/llm.spec.ts +0 -1533
  733. package/src/llm/bedrock/streamSealDispatch.test.ts +0 -331
  734. package/src/llm/bedrock/toolCache.test.ts +0 -194
  735. package/src/llm/bedrock/utils/cross-provider-reasoning.test.ts +0 -131
  736. package/src/llm/bedrock/utils/cross-provider-server-tools.test.ts +0 -122
  737. package/src/llm/bedrock/utils/message_inputs.test.ts +0 -650
  738. package/src/llm/bedrock/utils/message_outputs.test.ts +0 -85
  739. package/src/llm/bedrock/utils/toolResultCachePoint.test.ts +0 -118
  740. package/src/llm/custom-chat-models.smoke.test.ts +0 -1966
  741. package/src/llm/google/data/gettysburg10.wav +0 -0
  742. package/src/llm/google/data/hotdog.jpg +0 -0
  743. package/src/llm/google/inherited-stream-events.spec.ts +0 -350
  744. package/src/llm/google/llm.spec.ts +0 -1388
  745. package/src/llm/google/streamSmoothing.test.ts +0 -121
  746. package/src/llm/google/utils/common.test.ts +0 -185
  747. package/src/llm/invoke.alternation.test.ts +0 -87
  748. package/src/llm/invoke.handoffCue.test.ts +0 -112
  749. package/src/llm/invoke.streamLimits.test.ts +0 -142
  750. package/src/llm/invoke.test.ts +0 -1198
  751. package/src/llm/mistral/streamSmoothing.test.ts +0 -97
  752. package/src/llm/openai/cacheWriteTokens.test.ts +0 -112
  753. package/src/llm/openai/contentBlocks.test.ts +0 -381
  754. package/src/llm/openai/deepseek.test.ts +0 -747
  755. package/src/llm/openai/inherited-deepseek.spec.ts +0 -347
  756. package/src/llm/openai/inherited-xai.spec.ts +0 -416
  757. package/src/llm/openai/llm.spec.ts +0 -1774
  758. package/src/llm/openai/managedRequests.test.ts +0 -182
  759. package/src/llm/openai/sequentialToolCallSeals.test.ts +0 -199
  760. package/src/llm/openai/streamMetadata.spec.ts +0 -86
  761. package/src/llm/openai/streamMetadataDedup.spec.ts +0 -166
  762. package/src/llm/openai/utils/isReasoningModel.test.ts +0 -90
  763. package/src/llm/openai/utils/messages.test.ts +0 -488
  764. package/src/llm/openrouter/reasoning.test.ts +0 -561
  765. package/src/llm/openrouter/toolCache.test.ts +0 -134
  766. package/src/llm/preempt.test.ts +0 -323
  767. package/src/llm/stream/chunkAdapters.test.ts +0 -202
  768. package/src/llm/stream/reassembly.test.ts +0 -241
  769. package/src/llm/stream/smoother.bench.test.ts +0 -155
  770. package/src/llm/stream/smoother.test.ts +0 -519
  771. package/src/llm/streamLimits.test.ts +0 -450
  772. package/src/llm/truncation.test.ts +0 -242
  773. package/src/llm/vertexai/fixThoughtSignatures.test.ts +0 -154
  774. package/src/llm/vertexai/inherited-stream-events.spec.ts +0 -271
  775. package/src/llm/vertexai/llm.spec.ts +0 -159
  776. package/src/llm/vertexai/repairUsageMetadata.test.ts +0 -54
  777. package/src/llm/vertexai/sealStreamedToolCalls.test.ts +0 -88
  778. package/src/llm/vertexai/streamSealDispatch.test.ts +0 -148
  779. package/src/llm/vertexai/streamSmoothing.test.ts +0 -109
  780. package/src/messages/__tests__/anthropicToolCache.test.ts +0 -339
  781. package/src/messages/__tests__/observationMasking.test.ts +0 -312
  782. package/src/messages/__tests__/recency.test.ts +0 -267
  783. package/src/messages/__tests__/tools.test.ts +0 -473
  784. package/src/messages/alternation.test.ts +0 -212
  785. package/src/messages/assistantPhase.test.ts +0 -75
  786. package/src/messages/cache.tail.test.ts +0 -533
  787. package/src/messages/cache.test.ts +0 -2166
  788. package/src/messages/content.test.ts +0 -362
  789. package/src/messages/contextPruning.test.ts +0 -184
  790. package/src/messages/ensureThinkingBlock.test.ts +0 -1427
  791. package/src/messages/foldToollessToolBlocks.test.ts +0 -596
  792. package/src/messages/formatAgentMessages.reducer.test.ts +0 -162
  793. package/src/messages/formatAgentMessages.skills.test.ts +0 -513
  794. package/src/messages/formatAgentMessages.steer.test.ts +0 -598
  795. package/src/messages/formatAgentMessages.test.ts +0 -8111
  796. package/src/messages/formatAgentMessages.tools.test.ts +0 -522
  797. package/src/messages/formatMessage.test.ts +0 -693
  798. package/src/messages/handoffCue.test.ts +0 -96
  799. package/src/messages/injected.test.ts +0 -107
  800. package/src/messages/labelContentByAgent.test.ts +0 -962
  801. package/src/messages/reducer.spec.ts +0 -32
  802. package/src/messages/shiftIndexTokenCountMap.test.ts +0 -81
  803. package/src/messages/tailCacheConversion.test.ts +0 -161
  804. package/src/openai/__tests__/openai.test.ts +0 -337
  805. package/src/responses/__tests__/responses.test.ts +0 -652
  806. package/src/scripts/abort.ts +0 -157
  807. package/src/scripts/activity-labels/captured.json +0 -56
  808. package/src/scripts/activity-labels/checks.cjs +0 -205
  809. package/src/scripts/activity-labels/corpus.cjs +0 -473
  810. package/src/scripts/activity-labels/report.cjs +0 -203
  811. package/src/scripts/activity-labels/rescore.cjs +0 -102
  812. package/src/scripts/activity-labels/run.ts +0 -705
  813. package/src/scripts/activity-labels/variants.ts +0 -71
  814. package/src/scripts/ant_web_search.ts +0 -159
  815. package/src/scripts/ant_web_search_edge_case.ts +0 -163
  816. package/src/scripts/ant_web_search_error_edge_case.ts +0 -149
  817. package/src/scripts/args.ts +0 -48
  818. package/src/scripts/bedrock-cache-debug.ts +0 -250
  819. package/src/scripts/bedrock-content-aggregation-test.ts +0 -266
  820. package/src/scripts/bedrock-merge-test.ts +0 -107
  821. package/src/scripts/bedrock-parallel-tools-test.ts +0 -204
  822. package/src/scripts/bench-prompt-cache.ts +0 -479
  823. package/src/scripts/caching.ts +0 -132
  824. package/src/scripts/cli.ts +0 -172
  825. package/src/scripts/cli2.ts +0 -133
  826. package/src/scripts/cli3.ts +0 -184
  827. package/src/scripts/cli4.ts +0 -191
  828. package/src/scripts/cli5.ts +0 -191
  829. package/src/scripts/code_exec.ts +0 -214
  830. package/src/scripts/code_exec_files.ts +0 -237
  831. package/src/scripts/code_exec_multi_session.ts +0 -237
  832. package/src/scripts/code_exec_ptc.ts +0 -335
  833. package/src/scripts/code_exec_session.ts +0 -283
  834. package/src/scripts/code_exec_simple.ts +0 -148
  835. package/src/scripts/compare_pi_vs_ours.ts +0 -1259
  836. package/src/scripts/content.ts +0 -139
  837. package/src/scripts/context-overflow-probe.ts +0 -997
  838. package/src/scripts/empty_input.ts +0 -137
  839. package/src/scripts/handoff-test.ts +0 -134
  840. package/src/scripts/local_engine.ts +0 -166
  841. package/src/scripts/local_engine_checkpointer.ts +0 -205
  842. package/src/scripts/local_engine_compile.ts +0 -263
  843. package/src/scripts/local_engine_hooks.ts +0 -226
  844. package/src/scripts/local_engine_image.ts +0 -201
  845. package/src/scripts/local_engine_ptc.ts +0 -151
  846. package/src/scripts/local_engine_workspace.ts +0 -258
  847. package/src/scripts/memory.ts +0 -107
  848. package/src/scripts/multi-agent-chain.ts +0 -332
  849. package/src/scripts/multi-agent-conditional.ts +0 -222
  850. package/src/scripts/multi-agent-document-review-chain.ts +0 -198
  851. package/src/scripts/multi-agent-hybrid-flow.ts +0 -311
  852. package/src/scripts/multi-agent-parallel-start.ts +0 -265
  853. package/src/scripts/multi-agent-parallel.ts +0 -395
  854. package/src/scripts/multi-agent-sequence.ts +0 -217
  855. package/src/scripts/multi-agent-subagent.ts +0 -246
  856. package/src/scripts/multi-agent-supervisor.ts +0 -366
  857. package/src/scripts/multi-agent-test.ts +0 -187
  858. package/src/scripts/openrouter_prompt_cache_live.ts +0 -310
  859. package/src/scripts/parallel-asymmetric-tools-test.ts +0 -275
  860. package/src/scripts/parallel-full-metadata-test.ts +0 -241
  861. package/src/scripts/parallel-tools-test.ts +0 -341
  862. package/src/scripts/preempt-probe.ts +0 -330
  863. package/src/scripts/preempt-scenarios.ts +0 -388
  864. package/src/scripts/programmatic_exec.ts +0 -387
  865. package/src/scripts/programmatic_exec_agent.ts +0 -232
  866. package/src/scripts/search.ts +0 -147
  867. package/src/scripts/sequential-full-metadata-test.ts +0 -198
  868. package/src/scripts/session_live.ts +0 -548
  869. package/src/scripts/simple.ts +0 -226
  870. package/src/scripts/single-agent-metadata-test.ts +0 -196
  871. package/src/scripts/stream.ts +0 -141
  872. package/src/scripts/subagent-configurable-inheritance.ts +0 -252
  873. package/src/scripts/subagent-event-driven-debug.ts +0 -190
  874. package/src/scripts/subagent-tools-debug.ts +0 -160
  875. package/src/scripts/subagent-usage-sink.ts +0 -176
  876. package/src/scripts/summarization-recency.ts +0 -462
  877. package/src/scripts/test-custom-prompt-key.ts +0 -145
  878. package/src/scripts/test-handoff-input.ts +0 -170
  879. package/src/scripts/test-handoff-preamble.ts +0 -278
  880. package/src/scripts/test-handoff-steering.ts +0 -430
  881. package/src/scripts/test-multi-agent-list-handoff.ts +0 -418
  882. package/src/scripts/test-parallel-agent-labeling.ts +0 -327
  883. package/src/scripts/test-parallel-handoffs.ts +0 -292
  884. package/src/scripts/test-thinking-handoff-bedrock.ts +0 -154
  885. package/src/scripts/test-thinking-handoff.ts +0 -156
  886. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +0 -166
  887. package/src/scripts/test-tool-before-handoff-role-order.ts +0 -276
  888. package/src/scripts/test-tools-before-handoff.ts +0 -222
  889. package/src/scripts/test_code_api.ts +0 -354
  890. package/src/scripts/thinking-bedrock.ts +0 -160
  891. package/src/scripts/thinking-vertexai.ts +0 -168
  892. package/src/scripts/thinking.ts +0 -172
  893. package/src/scripts/tool_search.ts +0 -153
  894. package/src/scripts/tools.ts +0 -163
  895. package/src/session/__tests__/JsonlSessionStore.test.ts +0 -1463
  896. package/src/session/__tests__/handlers.test.ts +0 -161
  897. package/src/specs/activity-label-observability.live.test.ts +0 -262
  898. package/src/specs/activity-label-observability.test.ts +0 -167
  899. package/src/specs/activity-label-prompt.test.ts +0 -359
  900. package/src/specs/activity-label-trace-seed.test.ts +0 -47
  901. package/src/specs/activity-phase-label.test.ts +0 -306
  902. package/src/specs/agent-handoffs.live.test.ts +0 -140
  903. package/src/specs/agent-handoffs.test.ts +0 -2465
  904. package/src/specs/anthropic.simple.test.ts +0 -453
  905. package/src/specs/ask-user-question-batch.test.ts +0 -289
  906. package/src/specs/ask-user-questions.live.test.ts +0 -185
  907. package/src/specs/ask-user-questions.test.ts +0 -293
  908. package/src/specs/azure.simple.test.ts +0 -502
  909. package/src/specs/bedrock-toolless.live.test.ts +0 -123
  910. package/src/specs/bedrock-truncation.live.test.ts +0 -191
  911. package/src/specs/cache.simple.test.ts +0 -416
  912. package/src/specs/context-accuracy.live.test.ts +0 -409
  913. package/src/specs/context-overflow-recovery.live.test.ts +0 -213
  914. package/src/specs/context-usage-event.test.ts +0 -117
  915. package/src/specs/context-usage.live.test.ts +0 -297
  916. package/src/specs/custom-event-await.test.ts +0 -304
  917. package/src/specs/deepseek.simple.test.ts +0 -290
  918. package/src/specs/deterministic-trace-id.test.ts +0 -43
  919. package/src/specs/discovered-tools.test.ts +0 -217
  920. package/src/specs/durability-checkpoint.integration.test.ts +0 -243
  921. package/src/specs/graph-subagent.live.test.ts +0 -242
  922. package/src/specs/graph-subagent.test.ts +0 -322
  923. package/src/specs/handoffCue.test.ts +0 -165
  924. package/src/specs/langfuse-callbacks.test.ts +0 -1578
  925. package/src/specs/langfuse-config.test.ts +0 -247
  926. package/src/specs/langfuse-instrumentation.test.ts +0 -393
  927. package/src/specs/langfuse-metadata.test.ts +0 -245
  928. package/src/specs/langfuse-routing.integration.test.ts +0 -844
  929. package/src/specs/langfuse-runtime-context.test.ts +0 -92
  930. package/src/specs/langfuse-span-registry.test.ts +0 -87
  931. package/src/specs/langfuse-tool-output-tracing.test.ts +0 -1858
  932. package/src/specs/langfuse-trace-shaping.test.ts +0 -591
  933. package/src/specs/moonshot.simple.test.ts +0 -367
  934. package/src/specs/multi-agent-summarization.test.ts +0 -396
  935. package/src/specs/openai.simple.test.ts +0 -315
  936. package/src/specs/openrouter.simple.test.ts +0 -275
  937. package/src/specs/preemptSeal.test.ts +0 -678
  938. package/src/specs/prune.test.ts +0 -3741
  939. package/src/specs/reasoning.test.ts +0 -201
  940. package/src/specs/run-step-timestamps.test.ts +0 -414
  941. package/src/specs/spec.utils.ts +0 -15
  942. package/src/specs/subagent.test.ts +0 -864
  943. package/src/specs/summarization-unit.test.ts +0 -973
  944. package/src/specs/summarization.test.ts +0 -3823
  945. package/src/specs/summarize-prune.test.ts +0 -376
  946. package/src/specs/thinking-handoff.test.ts +0 -621
  947. package/src/specs/thinking-prune.test.ts +0 -827
  948. package/src/specs/token-accounting-e2e.test.ts +0 -1034
  949. package/src/specs/token-accounting-pipeline.test.ts +0 -1008
  950. package/src/specs/token-distribution-edge-case.test.ts +0 -315
  951. package/src/specs/token-memoization.test.ts +0 -40
  952. package/src/specs/tokens.test.ts +0 -1000
  953. package/src/specs/tool-error-resume.test.ts +0 -194
  954. package/src/specs/tool-error.test.ts +0 -198
  955. package/src/specs/vllm-reasoning-toolcalls.test.ts +0 -340
  956. package/src/stream.dispatch.test.ts +0 -63
  957. package/src/stream.test.ts +0 -144
  958. package/src/summarization/__tests__/aggregator.test.ts +0 -236
  959. package/src/summarization/__tests__/node.test.ts +0 -1996
  960. package/src/summarization/__tests__/trigger.test.ts +0 -149
  961. package/src/summarization/chunkHandler.test.ts +0 -196
  962. package/src/test/mockTools.ts +0 -386
  963. package/src/tools/Calculator.test.ts +0 -278
  964. package/src/tools/__tests__/BashExecutor.test.ts +0 -108
  965. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +0 -939
  966. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +0 -858
  967. package/src/tools/__tests__/CodeExecutor.stateful.test.ts +0 -124
  968. package/src/tools/__tests__/LocalExecutionRoots.test.ts +0 -8
  969. package/src/tools/__tests__/LocalExecutionTools.test.ts +0 -2733
  970. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.ts +0 -318
  971. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +0 -1557
  972. package/src/tools/__tests__/ReadFile.test.ts +0 -44
  973. package/src/tools/__tests__/SkillTool.test.ts +0 -442
  974. package/src/tools/__tests__/SubagentExecutor.test.ts +0 -3728
  975. package/src/tools/__tests__/SubagentReplay.test.ts +0 -329
  976. package/src/tools/__tests__/SubagentTool.test.ts +0 -149
  977. package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +0 -595
  978. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +0 -1191
  979. package/src/tools/__tests__/ToolNode.invalidToolCalls.test.ts +0 -757
  980. package/src/tools/__tests__/ToolNode.langfuse.test.ts +0 -57
  981. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +0 -736
  982. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +0 -1710
  983. package/src/tools/__tests__/ToolNode.runtimeState.test.ts +0 -120
  984. package/src/tools/__tests__/ToolNode.session.test.ts +0 -1352
  985. package/src/tools/__tests__/ToolNode.streamLimits.test.ts +0 -69
  986. package/src/tools/__tests__/ToolSearch.integration.test.ts +0 -161
  987. package/src/tools/__tests__/ToolSearch.test.ts +0 -1227
  988. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +0 -561
  989. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +0 -980
  990. package/src/tools/__tests__/directToolHooks.test.ts +0 -700
  991. package/src/tools/__tests__/eagerEventExecution.session.test.ts +0 -92
  992. package/src/tools/__tests__/handlers.test.ts +0 -997
  993. package/src/tools/__tests__/hitl.test.ts +0 -4663
  994. package/src/tools/__tests__/intentArg.test.ts +0 -357
  995. package/src/tools/__tests__/intentCoverage.test.ts +0 -139
  996. package/src/tools/__tests__/localToolNames.test.ts +0 -75
  997. package/src/tools/__tests__/skillCatalog.test.ts +0 -161
  998. package/src/tools/__tests__/subagentHooks.test.ts +0 -1651
  999. package/src/tools/__tests__/toolOutputReferences.test.ts +0 -515
  1000. package/src/tools/__tests__/workspaceSeam.test.ts +0 -147
  1001. package/src/tools/local/__tests__/FileCheckpointer.test.ts +0 -162
  1002. package/src/tools/local/__tests__/editStrategies.test.ts +0 -134
  1003. package/src/tools/search/content.test.ts +0 -173
  1004. package/src/tools/search/crw.test.ts +0 -836
  1005. package/src/tools/search/format.test.ts +0 -242
  1006. package/src/tools/search/http-agent.test.ts +0 -133
  1007. package/src/tools/search/jina-reranker.test.ts +0 -306
  1008. package/src/tools/search/keenable-scraper.test.ts +0 -153
  1009. package/src/tools/search/keenable.test.ts +0 -183
  1010. package/src/tools/search/outcome.test.ts +0 -90
  1011. package/src/tools/search/output.md +0 -2775
  1012. package/src/tools/search/rag-api-reranker.test.ts +0 -891
  1013. package/src/tools/search/source-processing.test.ts +0 -516
  1014. package/src/tools/search/tavily.test.ts +0 -965
  1015. package/src/tools/search/test.html +0 -884
  1016. package/src/tools/search/test.md +0 -643
  1017. package/src/tools/subagent/__tests__/SubagentExecutionRegistry.test.ts +0 -637
  1018. package/src/tools/subagent/__tests__/SubagentExecutor.lazy.test.ts +0 -3054
  1019. package/src/tools/subagent/__tests__/childGraphConfig.test.ts +0 -521
  1020. package/src/utils/__tests__/apportion.test.ts +0 -32
  1021. package/src/utils/__tests__/errors.test.ts +0 -270
  1022. package/src/utils/__tests__/fixtures/contextOverflowSignatures.ts +0 -336
  1023. package/src/utils/__tests__/redactSecrets.test.ts +0 -56
  1024. package/src/utils/__tests__/truncation.test.ts +0 -66
  1025. package/src/utils/llm.test.ts +0 -18
  1026. package/src/utils/proxy.test.ts +0 -176
  1027. package/src/utils/toolContent.test.ts +0 -1432
@@ -1,13 +1,4 @@
1
1
  //#region src/llm/openai/streamMetadata.ts
2
- /**
3
- * `@langchain/openai` stamps these scalar fields together onto every chunk
4
- * whose `choice.finish_reason` is set. Providers that emit `finish_reason` on
5
- * more than one streamed chunk (e.g. OpenRouter) otherwise make core's
6
- * `_mergeDicts` concatenate them into `stopstop` / duplicated model names — in
7
- * both the aggregated graph message and the Langfuse trace. Core keeps
8
- * `id`/`name`/`model_provider` last but not these, so keep the first occurrence
9
- * and drop later repeats at the source, before either aggregation runs.
10
- */
11
2
  const REPEATED_SCALAR_METADATA_FIELDS = [
12
3
  "model_name",
13
4
  "finish_reason",
@@ -18,18 +9,6 @@ function completionIndex(generationInfo) {
18
9
  const completion = generationInfo?.completion;
19
10
  return typeof completion === "number" ? completion : 0;
20
11
  }
21
- /**
22
- * Strip scalar `response_metadata`/`generationInfo` fields that have already
23
- * appeared on an earlier chunk of the same completion (tracked in `seen`),
24
- * keeping the first occurrence so the aggregated message still carries the
25
- * value once. Scoped per completion index so multi-choice (`n > 1`) responses,
26
- * which `_generate` aggregates separately, keep each choice's own metadata.
27
- *
28
- * Deletes from a shallow clone rather than in place: providers such as
29
- * `ChatDeepSeek` split one raw chunk into several synthetic pieces that share
30
- * the same `response_metadata`/`generationInfo` objects, so mutating in place
31
- * would strip fields from sibling chunks that were already emitted.
32
- */
33
12
  function dropRepeatedScalarMetadata(chunk, seen) {
34
13
  const generationInfo = chunk.generationInfo;
35
14
  const responseMetadata = chunk.message.response_metadata;
@@ -1 +1 @@
1
- {"version":3,"file":"streamMetadata.mjs","names":[],"sources":["../../../../src/llm/openai/streamMetadata.ts"],"sourcesContent":["import type { ChatGenerationChunk } from '@langchain/core/outputs';\n\n/**\n * `@langchain/openai` stamps these scalar fields together onto every chunk\n * whose `choice.finish_reason` is set. Providers that emit `finish_reason` on\n * more than one streamed chunk (e.g. OpenRouter) otherwise make core's\n * `_mergeDicts` concatenate them into `stopstop` / duplicated model names — in\n * both the aggregated graph message and the Langfuse trace. Core keeps\n * `id`/`name`/`model_provider` last but not these, so keep the first occurrence\n * and drop later repeats at the source, before either aggregation runs.\n */\nconst REPEATED_SCALAR_METADATA_FIELDS = [\n 'model_name',\n 'finish_reason',\n 'service_tier',\n 'system_fingerprint',\n] as const;\n\n/** Per-completion-index set of scalar fields already emitted this stream. */\nexport type SeenScalarMetadata = Map<number, Set<string>>;\n\nfunction completionIndex(\n generationInfo: Record<string, unknown> | undefined\n): number {\n const completion = generationInfo?.completion;\n return typeof completion === 'number' ? completion : 0;\n}\n\n/**\n * Strip scalar `response_metadata`/`generationInfo` fields that have already\n * appeared on an earlier chunk of the same completion (tracked in `seen`),\n * keeping the first occurrence so the aggregated message still carries the\n * value once. Scoped per completion index so multi-choice (`n > 1`) responses,\n * which `_generate` aggregates separately, keep each choice's own metadata.\n *\n * Deletes from a shallow clone rather than in place: providers such as\n * `ChatDeepSeek` split one raw chunk into several synthetic pieces that share\n * the same `response_metadata`/`generationInfo` objects, so mutating in place\n * would strip fields from sibling chunks that were already emitted.\n */\nexport function dropRepeatedScalarMetadata(\n chunk: ChatGenerationChunk,\n seen: SeenScalarMetadata\n): void {\n const generationInfo = chunk.generationInfo as\n | Record<string, unknown>\n | undefined;\n const responseMetadata = chunk.message.response_metadata as Record<\n string,\n unknown\n >;\n\n const index = completionIndex(generationInfo);\n let seenFields = seen.get(index);\n if (seenFields == null) {\n seenFields = new Set<string>();\n seen.set(index, seenFields);\n }\n\n const dropFromGenerationInfo: string[] = [];\n const dropFromResponseMetadata: string[] = [];\n for (const field of REPEATED_SCALAR_METADATA_FIELDS) {\n const inGenerationInfo =\n generationInfo != null && generationInfo[field] != null;\n const inResponseMetadata = responseMetadata[field] != null;\n if (!inGenerationInfo && !inResponseMetadata) {\n continue;\n }\n if (!seenFields.has(field)) {\n seenFields.add(field);\n continue;\n }\n if (inGenerationInfo) {\n dropFromGenerationInfo.push(field);\n }\n if (inResponseMetadata) {\n dropFromResponseMetadata.push(field);\n }\n }\n\n if (dropFromGenerationInfo.length > 0 && generationInfo != null) {\n const cloned = { ...generationInfo };\n for (const field of dropFromGenerationInfo) {\n delete cloned[field];\n }\n chunk.generationInfo = cloned;\n }\n if (dropFromResponseMetadata.length > 0) {\n const cloned = { ...responseMetadata };\n for (const field of dropFromResponseMetadata) {\n delete cloned[field];\n }\n chunk.message.response_metadata = cloned;\n }\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAM,kCAAkC;CACtC;CACA;CACA;CACA;AACF;AAKA,SAAS,gBACP,gBACQ;CACR,MAAM,aAAa,gBAAgB;CACnC,OAAO,OAAO,eAAe,WAAW,aAAa;AACvD;;;;;;;;;;;;;AAcA,SAAgB,2BACd,OACA,MACM;CACN,MAAM,iBAAiB,MAAM;CAG7B,MAAM,mBAAmB,MAAM,QAAQ;CAKvC,MAAM,QAAQ,gBAAgB,cAAc;CAC5C,IAAI,aAAa,KAAK,IAAI,KAAK;CAC/B,IAAI,cAAc,MAAM;EACtB,6BAAa,IAAI,IAAY;EAC7B,KAAK,IAAI,OAAO,UAAU;CAC5B;CAEA,MAAM,yBAAmC,CAAC;CAC1C,MAAM,2BAAqC,CAAC;CAC5C,KAAK,MAAM,SAAS,iCAAiC;EACnD,MAAM,mBACJ,kBAAkB,QAAQ,eAAe,UAAU;EACrD,MAAM,qBAAqB,iBAAiB,UAAU;EACtD,IAAI,CAAC,oBAAoB,CAAC,oBACxB;EAEF,IAAI,CAAC,WAAW,IAAI,KAAK,GAAG;GAC1B,WAAW,IAAI,KAAK;GACpB;EACF;EACA,IAAI,kBACF,uBAAuB,KAAK,KAAK;EAEnC,IAAI,oBACF,yBAAyB,KAAK,KAAK;CAEvC;CAEA,IAAI,uBAAuB,SAAS,KAAK,kBAAkB,MAAM;EAC/D,MAAM,SAAS,EAAE,GAAG,eAAe;EACnC,KAAK,MAAM,SAAS,wBAClB,OAAO,OAAO;EAEhB,MAAM,iBAAiB;CACzB;CACA,IAAI,yBAAyB,SAAS,GAAG;EACvC,MAAM,SAAS,EAAE,GAAG,iBAAiB;EACrC,KAAK,MAAM,SAAS,0BAClB,OAAO,OAAO;EAEhB,MAAM,QAAQ,oBAAoB;CACpC;AACF"}
1
+ {"version":3,"file":"streamMetadata.mjs","names":[],"sources":["../../../../src/llm/openai/streamMetadata.ts"],"mappings":";AAWA,MAAM,kCAAkC;CACtC;CACA;CACA;CACA;AACF;AAKA,SAAS,gBACP,gBACQ;CACR,MAAM,aAAa,gBAAgB;CACnC,OAAO,OAAO,eAAe,WAAW,aAAa;AACvD;AAcA,SAAgB,2BACd,OACA,MACM;CACN,MAAM,iBAAiB,MAAM;CAG7B,MAAM,mBAAmB,MAAM,QAAQ;CAKvC,MAAM,QAAQ,gBAAgB,cAAc;CAC5C,IAAI,aAAa,KAAK,IAAI,KAAK;CAC/B,IAAI,cAAc,MAAM;EACtB,6BAAa,IAAI,IAAY;EAC7B,KAAK,IAAI,OAAO,UAAU;CAC5B;CAEA,MAAM,yBAAmC,CAAC;CAC1C,MAAM,2BAAqC,CAAC;CAC5C,KAAK,MAAM,SAAS,iCAAiC;EACnD,MAAM,mBACJ,kBAAkB,QAAQ,eAAe,UAAU;EACrD,MAAM,qBAAqB,iBAAiB,UAAU;EACtD,IAAI,CAAC,oBAAoB,CAAC,oBACxB;EAEF,IAAI,CAAC,WAAW,IAAI,KAAK,GAAG;GAC1B,WAAW,IAAI,KAAK;GACpB;EACF;EACA,IAAI,kBACF,uBAAuB,KAAK,KAAK;EAEnC,IAAI,oBACF,yBAAyB,KAAK,KAAK;CAEvC;CAEA,IAAI,uBAAuB,SAAS,KAAK,kBAAkB,MAAM;EAC/D,MAAM,SAAS,EAAE,GAAG,eAAe;EACnC,KAAK,MAAM,SAAS,wBAClB,OAAO,OAAO;EAEhB,MAAM,iBAAiB;CACzB;CACA,IAAI,yBAAyB,SAAS,GAAG;EACvC,MAAM,SAAS,EAAE,GAAG,iBAAiB;EACrC,KAAK,MAAM,SAAS,0BAClB,OAAO,OAAO;EAEhB,MAAM,QAAQ,oBAAoB;CACpC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/llm/openai/utils/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\nimport { type OpenAI as OpenAIClient } from 'openai';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport {\n makeInvalidToolCall,\n parseToolCall,\n} from '@langchain/core/output_parsers/openai_tools';\nimport {\n AIMessage,\n AIMessageChunk,\n type BaseMessage,\n ChatMessage,\n ToolMessage,\n isAIMessage,\n type UsageMetadata,\n type BaseMessageFields,\n type MessageContentComplex,\n type InvalidToolCall,\n type MessageContentImageUrl,\n StandardContentBlockConverter,\n parseBase64DataUrl,\n parseMimeType,\n convertToProviderContentBlock,\n isDataContentBlock,\n} from '@langchain/core/messages';\nimport type {\n ChatCompletionContentPartText,\n ChatCompletionContentPartImage,\n ChatCompletionContentPartInputAudio,\n ChatCompletionContentPart,\n} from 'openai/resources/chat/completions';\nimport type {\n OpenAICallOptions,\n OpenAIChatInput,\n ChatOpenAIReasoningSummary,\n} from '@langchain/openai';\nimport type { ToolCall, ToolCallChunk } from '@langchain/core/messages/tool';\nimport {\n getBoundedCacheControlledTextToolContent,\n getComputerCallOutputScreenshot,\n isComputerCallOutputMessage,\n serializeStructuredValueBounded,\n} from '@/utils/toolContent';\nimport {\n STREAMED_TOOL_CALL_SEAL_METADATA_KEY,\n STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY,\n OPENAI_RESPONSES_STREAMED_TOOL_CALL_ADAPTER,\n} from '@/tools/streamedToolCallSeals';\nimport {\n calculateMaxToolCallInputChars,\n projectToolCallInputs,\n serializeToolCallInput,\n} from '@/messages/prune';\nimport { HARD_MAX_TOOL_RESULT_CHARS } from '@/utils/truncation';\nimport { toLangChainContent } from '@/messages/langchain';\n\nexport type { OpenAICallOptions, OpenAIChatInput };\n\n// Utility types to get hidden OpenAI response types\ntype ExtractAsyncIterableType<T> = T extends AsyncIterable<infer U> ? U : never;\ntype ExcludeController<T> = T extends { controller: unknown } ? never : T;\ntype ExcludeNonController<T> = T extends { controller: unknown } ? T : never;\n\ntype ResponsesCreate = OpenAIClient.Responses['create'];\ntype ResponsesParse = OpenAIClient.Responses['parse'];\n\ntype ResponsesInputItem = OpenAIClient.Responses.ResponseInputItem;\n\ntype ResponsesCreateInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\ntype ResponsesParseInvoke = ExcludeController<\n Awaited<ReturnType<ResponsesParse>>\n>;\n\ntype ResponsesCreateStream = ExcludeNonController<\n Awaited<ReturnType<ResponsesCreate>>\n>;\n\nexport type ResponseReturnStreamEvents =\n ExtractAsyncIterableType<ResponsesCreateStream>;\n\n// TODO import from SDK when available\ntype OpenAIRoleEnum =\n | 'system'\n | 'developer'\n | 'assistant'\n | 'user'\n | 'function'\n | 'tool';\n\ntype OpenAICompletionParam =\n OpenAIClient.Chat.Completions.ChatCompletionMessageParam;\n\nconst MAX_PROVIDER_TOOL_CALL_INPUT_CHARS = calculateMaxToolCallInputChars();\n\nfunction convertLangChainToolCallToBoundedOpenAI(toolCall: ToolCall): {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n} {\n if (toolCall.id == null) {\n throw new Error('All OpenAI tool calls must have an \"id\" field.');\n }\n return {\n id: toolCall.id,\n type: 'function',\n function: {\n name: toolCall.name,\n arguments: serializeToolCallInput(\n toolCall.args,\n MAX_PROVIDER_TOOL_CALL_INPUT_CHARS\n ),\n },\n };\n}\n\nfunction extractGenericMessageCustomRole(message: ChatMessage) {\n if (\n message.role !== 'system' &&\n message.role !== 'developer' &&\n message.role !== 'assistant' &&\n message.role !== 'user' &&\n message.role !== 'function' &&\n message.role !== 'tool'\n ) {\n console.warn(`Unknown message role: ${message.role}`);\n }\n\n return message.role as OpenAIRoleEnum;\n}\n\nexport function messageToOpenAIRole(message: BaseMessage): OpenAIRoleEnum {\n const type = message._getType();\n switch (type) {\n case 'system':\n return 'system';\n case 'ai':\n return 'assistant';\n case 'human':\n return 'user';\n case 'function':\n return 'function';\n case 'tool':\n return 'tool';\n case 'generic': {\n if (!ChatMessage.isInstance(message))\n throw new Error('Invalid generic chat message');\n return extractGenericMessageCustomRole(message);\n }\n default:\n throw new Error(`Unknown message type: ${type}`);\n }\n}\n\nconst completionsApiContentBlockConverter: StandardContentBlockConverter<{\n text: ChatCompletionContentPartText;\n image: ChatCompletionContentPartImage;\n audio: ChatCompletionContentPartInputAudio;\n file: ChatCompletionContentPart.File;\n}> = {\n providerName: 'ChatOpenAI',\n\n fromStandardTextBlock(block): ChatCompletionContentPartText {\n return { type: 'text', text: block.text };\n },\n\n fromStandardImageBlock(block): ChatCompletionContentPartImage {\n if (block.source_type === 'url') {\n return {\n type: 'image_url',\n image_url: {\n url: block.url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n const url = `data:${block.mime_type ?? ''};base64,${block.data}`;\n return {\n type: 'image_url',\n image_url: {\n url,\n ...(block.metadata?.detail\n ? { detail: block.metadata.detail as 'auto' | 'low' | 'high' }\n : {}),\n },\n };\n }\n\n throw new Error(\n `Image content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardAudioBlock(block): ChatCompletionContentPartInputAudio {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL audio blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n const rawMimeType = data.mime_type || block.mime_type || '';\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(rawMimeType);\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: data.data,\n },\n };\n }\n\n if (block.source_type === 'base64') {\n let mimeType: { type: string; subtype: string };\n\n try {\n mimeType = parseMimeType(block.mime_type ?? '');\n } catch {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n if (\n mimeType.type !== 'audio' ||\n (mimeType.subtype !== 'wav' && mimeType.subtype !== 'mp3')\n ) {\n throw new Error(\n `Audio blocks with source_type ${block.source_type} must have mime type of audio/wav or audio/mp3`\n );\n }\n\n return {\n type: 'input_audio',\n input_audio: {\n format: mimeType.subtype,\n data: block.data,\n },\n };\n }\n\n throw new Error(\n `Audio content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n\n fromStandardFileBlock(block): ChatCompletionContentPart.File {\n if (block.source_type === 'url') {\n const data = parseBase64DataUrl({ dataUrl: block.url });\n if (!data) {\n throw new Error(\n `URL file blocks with source_type ${block.source_type} must be formatted as a data URL for ChatOpenAI`\n );\n }\n\n return {\n type: 'file',\n file: {\n file_data: block.url, // formatted as base64 data URL\n ...(block.metadata?.filename || block.metadata?.name\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'base64') {\n return {\n type: 'file',\n file: {\n file_data: `data:${block.mime_type ?? ''};base64,${block.data}`,\n ...(block.metadata?.filename ||\n block.metadata?.name ||\n block.metadata?.title\n ? {\n filename: (block.metadata.filename ||\n block.metadata.name ||\n block.metadata.title) as string,\n }\n : {}),\n },\n };\n }\n\n if (block.source_type === 'id') {\n return {\n type: 'file',\n file: {\n file_id: block.id,\n },\n };\n }\n\n throw new Error(\n `File content blocks with source_type ${block.source_type} are not supported for ChatOpenAI`\n );\n },\n};\n\n/** Options for converting messages to OpenAI params */\nexport interface ConvertMessagesOptions {\n /** Include reasoning_content field for DeepSeek thinking mode with tool calls */\n includeReasoningContent?: boolean;\n /** Include reasoning_details field for OpenRouter/Gemini thinking mode with tool calls */\n includeReasoningDetails?: boolean;\n /** Convert reasoning_details to content blocks for Claude (requires content array format) */\n convertReasoningDetailsToContent?: boolean;\n /** Preserve OpenRouter's canonical cache-decorated tool text block. */\n preserveToolCacheControl?: boolean;\n}\n\n// Used in LangSmith, export is important here\nexport function _convertMessagesToOpenAIParams(\n messages: BaseMessage[],\n model?: string,\n options?: ConvertMessagesOptions\n): OpenAICompletionParam[] {\n const projectedMessages = projectToolCallInputs(\n messages,\n MAX_PROVIDER_TOOL_CALL_INPUT_CHARS\n );\n let hasReasoningToolCallContext = false;\n // TODO: Function messages do not support array content, fix cast\n return projectedMessages.flatMap((message) => {\n let role = messageToOpenAIRole(message);\n if (role === 'system' && isReasoningModel(model)) {\n role = 'developer';\n }\n\n let hasAnthropicThinkingBlock: boolean = false;\n\n let content: unknown;\n if (\n role === 'tool' &&\n typeof message.content !== 'string' &&\n !isComputerCallOutputMessage(message)\n ) {\n content =\n options?.preserveToolCacheControl === true\n ? getBoundedCacheControlledTextToolContent(\n message.content,\n HARD_MAX_TOOL_RESULT_CHARS\n )\n : undefined;\n content ??= serializeStructuredValueBounded(\n message.content,\n HARD_MAX_TOOL_RESULT_CHARS\n ).content;\n } else if (typeof message.content === 'string') {\n content = message.content;\n } else {\n content = message.content.map((m) => {\n if ('type' in m && m.type === 'thinking') {\n hasAnthropicThinkingBlock = true;\n return m;\n }\n if (isDataContentBlock(m)) {\n return convertToProviderContentBlock(\n m,\n completionsApiContentBlockConverter\n );\n }\n return m;\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const completionParam: Record<string, any> = {\n role,\n content,\n };\n let messageHasToolCalls = false;\n let messageIsToolResult = false;\n if (message.name != null) {\n completionParam.name = message.name;\n }\n if (message.additional_kwargs.function_call != null) {\n completionParam.function_call = message.additional_kwargs.function_call;\n completionParam.content = '';\n }\n if (isAIMessage(message) && !!message.tool_calls?.length) {\n messageHasToolCalls = true;\n completionParam.tool_calls = message.tool_calls.map(\n convertLangChainToolCallToBoundedOpenAI\n );\n completionParam.content = hasAnthropicThinkingBlock ? content : '';\n if (\n options?.includeReasoningDetails === true &&\n message.additional_kwargs.reasoning_details != null\n ) {\n // For Claude via OpenRouter, convert reasoning_details to content blocks\n const isClaudeModel =\n model?.includes('claude') === true ||\n model?.includes('anthropic') === true;\n if (\n options.convertReasoningDetailsToContent === true &&\n isClaudeModel\n ) {\n const reasoningDetails = message.additional_kwargs\n .reasoning_details as Record<string, unknown>[];\n const contentBlocks = [];\n\n // Add thinking blocks from reasoning_details\n for (const detail of reasoningDetails) {\n if (detail.type === 'reasoning.text' && detail.text != null) {\n contentBlocks.push({\n type: 'thinking',\n thinking: detail.text,\n });\n } else if (\n detail.type === 'reasoning.encrypted' &&\n detail.data != null\n ) {\n contentBlocks.push({\n type: 'redacted_thinking',\n data: detail.data,\n id: detail.id,\n });\n }\n }\n\n // Set content to array with thinking blocks\n if (contentBlocks.length > 0) {\n completionParam.content = contentBlocks;\n }\n } else {\n // For non-Claude models, pass as separate field\n completionParam.reasoning_details =\n message.additional_kwargs.reasoning_details;\n }\n }\n } else {\n if (message.additional_kwargs.tool_calls != null) {\n messageHasToolCalls =\n !Array.isArray(message.additional_kwargs.tool_calls) ||\n message.additional_kwargs.tool_calls.length > 0;\n completionParam.tool_calls = message.additional_kwargs.tool_calls;\n if (\n options?.includeReasoningDetails === true &&\n message.additional_kwargs.reasoning_details != null\n ) {\n // For Claude via OpenRouter, convert reasoning_details to content blocks\n const isClaudeModel =\n model?.includes('claude') === true ||\n model?.includes('anthropic') === true;\n if (\n options.convertReasoningDetailsToContent === true &&\n isClaudeModel\n ) {\n const reasoningDetails = message.additional_kwargs\n .reasoning_details as Record<string, unknown>[];\n const contentBlocks = [];\n\n // Add thinking blocks from reasoning_details\n for (const detail of reasoningDetails) {\n if (detail.type === 'reasoning.text' && detail.text != null) {\n contentBlocks.push({\n type: 'thinking',\n thinking: detail.text,\n });\n } else if (\n detail.type === 'reasoning.encrypted' &&\n detail.data != null\n ) {\n contentBlocks.push({\n type: 'redacted_thinking',\n data: detail.data,\n id: detail.id,\n });\n }\n }\n\n // Set content to array with thinking blocks\n if (contentBlocks.length > 0) {\n completionParam.content = contentBlocks;\n }\n } else {\n // For non-Claude models, pass as separate field\n completionParam.reasoning_details =\n message.additional_kwargs.reasoning_details;\n }\n }\n }\n if ((message as ToolMessage).tool_call_id != null) {\n messageIsToolResult = true;\n completionParam.tool_call_id = (message as ToolMessage).tool_call_id;\n }\n }\n\n if (\n options?.includeReasoningContent === true &&\n isAIMessage(message) &&\n (hasReasoningToolCallContext || messageHasToolCalls) &&\n typeof message.additional_kwargs.reasoning_content === 'string' &&\n message.additional_kwargs.reasoning_content !== ''\n ) {\n completionParam.reasoning_content =\n message.additional_kwargs.reasoning_content;\n }\n\n if (messageHasToolCalls || messageIsToolResult) {\n hasReasoningToolCallContext = true;\n }\n\n if (\n message.additional_kwargs.audio &&\n typeof message.additional_kwargs.audio === 'object' &&\n 'id' in message.additional_kwargs.audio\n ) {\n const audioMessage = {\n role: 'assistant',\n audio: {\n id: message.additional_kwargs.audio.id,\n },\n };\n return [completionParam, audioMessage] as OpenAICompletionParam[];\n }\n\n return completionParam as OpenAICompletionParam;\n });\n}\n\nconst _FUNCTION_CALL_IDS_MAP_KEY = '__openai_function_call_ids__';\n\nfunction _convertReasoningSummaryToOpenAIResponsesParams(\n reasoning: ChatOpenAIReasoningSummary\n): OpenAIClient.Responses.ResponseReasoningItem {\n // combine summary parts that have the the same index and then remove the indexes\n const summary = (\n reasoning.summary.length > 1\n ? reasoning.summary.reduce(\n (acc, curr) => {\n const last = acc.at(-1);\n\n if (last!.index === curr.index) {\n last!.text += curr.text;\n } else {\n acc.push(curr);\n }\n return acc;\n },\n [{ ...reasoning.summary[0] }]\n )\n : reasoning.summary\n ).map((s) =>\n Object.fromEntries(Object.entries(s).filter(([k]) => k !== 'index'))\n ) as OpenAIClient.Responses.ResponseReasoningItem.Summary[];\n\n return {\n ...reasoning,\n summary,\n } as OpenAIClient.Responses.ResponseReasoningItem;\n}\n\nexport function _convertMessagesToOpenAIResponsesParams(\n messages: BaseMessage[],\n model?: string,\n zdrEnabled?: boolean\n): ResponsesInputItem[] {\n const projectedMessages = projectToolCallInputs(\n messages,\n MAX_PROVIDER_TOOL_CALL_INPUT_CHARS\n );\n return projectedMessages.flatMap(\n (lcMsg): ResponsesInputItem | ResponsesInputItem[] => {\n const additional_kwargs =\n lcMsg.additional_kwargs as BaseMessageFields['additional_kwargs'] & {\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n type?: string;\n refusal?: string;\n };\n const responseMetadata = lcMsg.response_metadata as {\n output?: ResponsesInputItem[];\n };\n\n let role = messageToOpenAIRole(lcMsg);\n if (role === 'system' && isReasoningModel(model)) role = 'developer';\n\n if (role === 'function') {\n throw new Error('Function messages are not supported in Responses API');\n }\n\n if (role === 'tool') {\n const toolMessage = lcMsg as ToolMessage;\n\n // Handle computer call output\n if (additional_kwargs.type === 'computer_call_output') {\n const screenshot = getComputerCallOutputScreenshot(\n toolMessage.content\n );\n if (screenshot == null) {\n throw new Error('Invalid computer call output');\n }\n\n const output: OpenAIClient.Responses.ResponseComputerToolCallOutputScreenshot =\n 'image_url' in screenshot\n ? {\n type: 'computer_screenshot',\n image_url: screenshot.image_url,\n }\n : {\n type: 'computer_screenshot',\n file_id: screenshot.file_id,\n };\n const computerCallOutput: ResponsesInputItem = {\n type: 'computer_call_output',\n output,\n call_id: toolMessage.tool_call_id,\n };\n return computerCallOutput;\n }\n\n return {\n type: 'function_call_output',\n call_id: toolMessage.tool_call_id,\n id: toolMessage.id?.startsWith('fc_') ? toolMessage.id : undefined,\n output:\n typeof toolMessage.content !== 'string'\n ? serializeStructuredValueBounded(\n toolMessage.content,\n HARD_MAX_TOOL_RESULT_CHARS\n ).content\n : toolMessage.content,\n };\n }\n\n if (role === 'assistant') {\n // if we have the original response items, just reuse them\n if (\n !zdrEnabled &&\n responseMetadata.output != null &&\n Array.isArray(responseMetadata.output) &&\n responseMetadata.output.length > 0 &&\n responseMetadata.output.every((item) => 'type' in item)\n ) {\n return responseMetadata.output;\n }\n\n // otherwise, try to reconstruct the response from what we have\n\n const input: ResponsesInputItem[] = [];\n\n // reasoning items\n if (additional_kwargs.reasoning && !zdrEnabled) {\n const reasoningItem = _convertReasoningSummaryToOpenAIResponsesParams(\n additional_kwargs.reasoning\n );\n input.push(reasoningItem);\n }\n\n // ai content\n let content = lcMsg.content as\n | string\n | Array<\n | MessageContentComplex\n | OpenAIClient.Responses.ResponseOutputText\n | OpenAIClient.Responses.ResponseOutputRefusal\n >;\n if (additional_kwargs.refusal) {\n if (typeof content === 'string') {\n content = [{ type: 'output_text', text: content, annotations: [] }];\n }\n content = [\n ...content,\n { type: 'refusal', refusal: additional_kwargs.refusal },\n ];\n }\n\n input.push({\n type: 'message',\n role: 'assistant',\n ...(lcMsg.id && !zdrEnabled && lcMsg.id.startsWith('msg_')\n ? { id: lcMsg.id }\n : {}),\n content:\n typeof content === 'string'\n ? content\n : content.flatMap((item) => {\n if (item.type === 'text') {\n const textItem = item as MessageContentComplex & {\n annotations?: unknown[];\n };\n return {\n type: 'output_text',\n text: item.text,\n annotations: textItem.annotations ?? [],\n };\n }\n\n if (item.type === 'output_text' || item.type === 'refusal') {\n return item;\n }\n\n return [];\n }),\n } as ResponsesInputItem);\n\n const functionCallIds = additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY];\n\n if (isAIMessage(lcMsg) && !!lcMsg.tool_calls?.length) {\n input.push(\n ...lcMsg.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.name,\n arguments: serializeToolCallInput(\n toolCall.args,\n MAX_PROVIDER_TOOL_CALL_INPUT_CHARS\n ),\n call_id: toolCall.id!,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id!] } : {}),\n })\n )\n );\n } else if (additional_kwargs.tool_calls) {\n input.push(\n ...additional_kwargs.tool_calls.map(\n (toolCall): ResponsesInputItem => ({\n type: 'function_call',\n name: toolCall.function.name,\n call_id: toolCall.id,\n arguments: toolCall.function.arguments,\n ...(zdrEnabled ? { id: functionCallIds?.[toolCall.id] } : {}),\n })\n )\n );\n }\n\n const toolOutputs =\n ((responseMetadata.output as Array<ResponsesInputItem> | undefined)\n ?.length ?? 0) > 0\n ? responseMetadata.output\n : additional_kwargs.tool_outputs;\n\n const fallthroughCallTypes: ResponsesInputItem['type'][] = [\n 'computer_call',\n /** @ts-ignore */\n 'mcp_call',\n /** @ts-ignore */\n 'code_interpreter_call',\n /** @ts-ignore */\n 'image_generation_call',\n ];\n\n if (toolOutputs != null) {\n const castToolOutputs = toolOutputs as Array<ResponsesInputItem>;\n const fallthroughCalls = castToolOutputs.filter((item) =>\n fallthroughCallTypes.includes(item.type)\n );\n if (fallthroughCalls.length > 0) input.push(...fallthroughCalls);\n }\n\n return input;\n }\n\n if (role === 'user' || role === 'system' || role === 'developer') {\n if (typeof lcMsg.content === 'string') {\n return { type: 'message', role, content: lcMsg.content };\n }\n\n const messages: ResponsesInputItem[] = [];\n const content = (lcMsg.content as MessageContentComplex[]).flatMap(\n (item) => {\n if (item.type === 'mcp_approval_response') {\n const approvalResponse = item as MessageContentComplex & {\n approval_request_id: string;\n approve: boolean;\n };\n messages.push({\n // @ts-ignore\n type: 'mcp_approval_response',\n approval_request_id: approvalResponse.approval_request_id,\n approve: approvalResponse.approve,\n });\n }\n if (isDataContentBlock(item)) {\n return convertToProviderContentBlock(\n item,\n completionsApiContentBlockConverter\n );\n }\n if (item.type === 'text') {\n return {\n type: 'input_text',\n text: item.text,\n };\n }\n if (item.type === 'image_url') {\n const imageItem = item as MessageContentImageUrl;\n return {\n type: 'input_image',\n image_url:\n typeof imageItem.image_url === 'string'\n ? imageItem.image_url\n : imageItem.image_url.url,\n detail:\n typeof imageItem.image_url === 'string'\n ? 'auto'\n : imageItem.image_url.detail,\n };\n }\n if (\n item.type === 'input_text' ||\n item.type === 'input_image' ||\n item.type === 'input_file'\n ) {\n return item;\n }\n return [];\n }\n );\n\n if (content.length > 0) {\n messages.push({\n type: 'message',\n role,\n content,\n } as ResponsesInputItem);\n }\n return messages;\n }\n\n console.warn(\n `Unsupported role found when converting to OpenAI Responses API: ${role}`\n );\n return [];\n }\n );\n}\n\nexport function isReasoningModel(model?: string) {\n return model != null && model !== '' && /\\b(o\\d|gpt-[5-9])\\b/i.test(model);\n}\n\nfunction _convertOpenAIResponsesMessageToBaseMessage(\n response: ResponsesCreateInvoke | ResponsesParseInvoke\n): BaseMessage {\n if (response.error) {\n // TODO: add support for `addLangChainErrorFields`\n const error = new Error(response.error.message);\n error.name = response.error.code;\n throw error;\n }\n\n let messageId: string | undefined;\n const content: MessageContentComplex[] = [];\n const tool_calls: ToolCall[] = [];\n const invalid_tool_calls: InvalidToolCall[] = [];\n const response_metadata: Record<string, unknown> = {\n model: response.model,\n created_at: response.created_at,\n id: response.id,\n incomplete_details: response.incomplete_details,\n metadata: response.metadata,\n object: response.object,\n status: response.status,\n user: response.user,\n service_tier: response.service_tier,\n\n // for compatibility with chat completion calls.\n model_name: response.model,\n };\n\n const additional_kwargs: {\n [key: string]: unknown;\n refusal?: string;\n reasoning?: OpenAIClient.Responses.ResponseReasoningItem;\n tool_outputs?: unknown[];\n parsed?: unknown;\n [_FUNCTION_CALL_IDS_MAP_KEY]?: Record<string, string>;\n } = {};\n\n for (const item of response.output) {\n if (item.type === 'message') {\n messageId = item.id;\n content.push(\n ...item.content.flatMap((part) => {\n if (part.type === 'output_text') {\n if ('parsed' in part && part.parsed != null) {\n additional_kwargs.parsed = part.parsed;\n }\n return {\n type: 'text',\n text: part.text,\n annotations: part.annotations,\n };\n }\n\n if (part.type === 'refusal') {\n additional_kwargs.refusal = part.refusal;\n return [];\n }\n\n return part;\n })\n );\n } else if (item.type === 'function_call') {\n const fnAdapter = {\n function: { name: item.name, arguments: item.arguments },\n id: item.call_id,\n };\n\n try {\n tool_calls.push(parseToolCall(fnAdapter, { returnId: true }));\n } catch (e: unknown) {\n let errMessage: string | undefined;\n if (\n typeof e === 'object' &&\n e != null &&\n 'message' in e &&\n typeof e.message === 'string'\n ) {\n errMessage = e.message;\n }\n invalid_tool_calls.push(makeInvalidToolCall(fnAdapter, errMessage));\n }\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] ??= {};\n if (item.id) {\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY][item.call_id] = item.id;\n }\n } else if (item.type === 'reasoning') {\n additional_kwargs.reasoning = item;\n } else {\n additional_kwargs.tool_outputs ??= [];\n additional_kwargs.tool_outputs.push(item);\n }\n }\n\n return new AIMessage({\n id: messageId,\n content: toLangChainContent(content),\n tool_calls,\n invalid_tool_calls,\n usage_metadata: response.usage,\n additional_kwargs,\n response_metadata,\n });\n}\n\nexport function _convertOpenAIResponsesDeltaToBaseMessageChunk(\n chunk: ResponseReturnStreamEvents\n) {\n const content: MessageContentComplex[] = [];\n let generationInfo: Record<string, unknown> = {};\n let usage_metadata: UsageMetadata | undefined;\n const tool_call_chunks: ToolCallChunk[] = [];\n const response_metadata: Record<string, unknown> = {};\n const additional_kwargs: {\n [key: string]: unknown;\n reasoning?: Partial<ChatOpenAIReasoningSummary>;\n tool_outputs?: unknown[];\n } = {};\n let id: string | undefined;\n if (chunk.type === 'response.output_text.delta') {\n content.push({\n type: 'text',\n text: chunk.delta,\n index: chunk.content_index,\n });\n /** @ts-ignore */\n } else if (chunk.type === 'response.output_text_annotation.added') {\n content.push({\n type: 'text',\n text: '',\n /** @ts-ignore */\n annotations: [chunk.annotation],\n /** @ts-ignore */\n index: chunk.content_index,\n });\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'message'\n ) {\n id = chunk.item.id;\n } else if (\n chunk.type === 'response.output_item.added' &&\n chunk.item.type === 'function_call'\n ) {\n response_metadata[STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY] =\n OPENAI_RESPONSES_STREAMED_TOOL_CALL_ADAPTER;\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n name: chunk.item.name,\n args: chunk.item.arguments,\n id: chunk.item.call_id,\n index: chunk.output_index,\n });\n\n additional_kwargs[_FUNCTION_CALL_IDS_MAP_KEY] = {\n [chunk.item.call_id]: chunk.item.id,\n };\n } else if (\n chunk.type === 'response.output_item.done' &&\n [\n 'web_search_call',\n 'file_search_call',\n 'computer_call',\n 'code_interpreter_call',\n 'mcp_call',\n 'mcp_list_tools',\n 'mcp_approval_request',\n 'image_generation_call',\n ].includes(chunk.item.type)\n ) {\n additional_kwargs.tool_outputs = [chunk.item];\n } else if (chunk.type === 'response.created') {\n response_metadata.id = chunk.response.id;\n response_metadata.model_name = chunk.response.model;\n response_metadata.model = chunk.response.model;\n } else if (chunk.type === 'response.completed') {\n const msg = _convertOpenAIResponsesMessageToBaseMessage(chunk.response);\n\n usage_metadata = chunk.response.usage;\n if (chunk.response.text?.format?.type === 'json_schema') {\n additional_kwargs.parsed ??= JSON.parse(msg.text);\n }\n for (const [key, value] of Object.entries(chunk.response)) {\n if (key !== 'id') response_metadata[key] = value;\n }\n } else if (chunk.type === 'response.function_call_arguments.delta') {\n response_metadata[STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY] =\n OPENAI_RESPONSES_STREAMED_TOOL_CALL_ADAPTER;\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n args: chunk.delta,\n index: chunk.output_index,\n });\n } else if (chunk.type === 'response.function_call_arguments.done') {\n response_metadata[STREAMED_TOOL_CALL_ADAPTER_METADATA_KEY] =\n OPENAI_RESPONSES_STREAMED_TOOL_CALL_ADAPTER;\n response_metadata[STREAMED_TOOL_CALL_SEAL_METADATA_KEY] = {\n kind: 'single',\n index: chunk.output_index,\n };\n tool_call_chunks.push({\n type: 'tool_call_chunk',\n name: chunk.name,\n args: chunk.arguments,\n index: chunk.output_index,\n });\n } else if (\n chunk.type === 'response.web_search_call.completed' ||\n chunk.type === 'response.file_search_call.completed'\n ) {\n generationInfo = {\n tool_outputs: {\n id: chunk.item_id,\n type: chunk.type.replace('response.', '').replace('.completed', ''),\n status: 'completed',\n },\n };\n } else if (chunk.type === 'response.refusal.done') {\n additional_kwargs.refusal = chunk.refusal;\n } else if (\n chunk.type === 'response.output_item.added' &&\n 'item' in chunk &&\n chunk.item.type === 'reasoning'\n ) {\n const summary: ChatOpenAIReasoningSummary['summary'] | undefined = chunk\n .item.summary\n ? chunk.item.summary.map((s, index) => ({\n ...s,\n index,\n }))\n : undefined;\n\n additional_kwargs.reasoning = {\n // We only capture ID in the first chunk or else the concatenated result of all chunks will\n // have an ID field that is repeated once per chunk. There is special handling for the `type`\n // field that prevents this, however.\n id: chunk.item.id,\n type: chunk.item.type,\n ...(summary ? { summary } : {}),\n };\n } else if (chunk.type === 'response.reasoning_summary_part.added') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [{ ...chunk.part, index: chunk.summary_index }],\n };\n } else if (chunk.type === 'response.reasoning_summary_text.delta') {\n additional_kwargs.reasoning = {\n type: 'reasoning',\n summary: [\n { text: chunk.delta, type: 'summary_text', index: chunk.summary_index },\n ],\n };\n /** @ts-ignore */\n } else if (chunk.type === 'response.image_generation_call.partial_image') {\n // noop/fixme: retaining partial images in a message chunk means that _all_\n // partial images get kept in history, so we don't do anything here.\n return null;\n } else {\n return null;\n }\n\n return new ChatGenerationChunk({\n // Legacy reasons, `onLLMNewToken` should pulls this out\n text: content.map((part) => ('text' in part ? part.text : '')).join(''),\n message: new AIMessageChunk({\n id,\n content: toLangChainContent(content),\n tool_call_chunks,\n usage_metadata,\n additional_kwargs,\n response_metadata,\n }),\n generationInfo,\n });\n}\n"],"mappings":";;;;;;;AAgGA,MAAM,qCAAqC,+BAA+B;AAE1E,SAAS,wCAAwC,UAO/C;CACA,IAAI,SAAS,MAAM,MACjB,MAAM,IAAI,MAAM,kDAAgD;CAElE,OAAO;EACL,IAAI,SAAS;EACb,MAAM;EACN,UAAU;GACR,MAAM,SAAS;GACf,WAAW,uBACT,SAAS,MACT,kCACF;EACF;CACF;AACF;AAEA,SAAS,gCAAgC,SAAsB;CAC7D,IACE,QAAQ,SAAS,YACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,UACjB,QAAQ,SAAS,cACjB,QAAQ,SAAS,QAEjB,QAAQ,KAAK,yBAAyB,QAAQ,MAAM;CAGtD,OAAO,QAAQ;AACjB;AAEA,SAAgB,oBAAoB,SAAsC;CACxE,MAAM,OAAO,QAAQ,SAAS;CAC9B,QAAQ,MAAR;EACA,KAAK,UACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,KAAK;GACH,IAAI,CAAC,YAAY,WAAW,OAAO,GACjC,MAAM,IAAI,MAAM,8BAA8B;GAChD,OAAO,gCAAgC,OAAO;EAEhD,SACE,MAAM,IAAI,MAAM,yBAAyB,MAAM;CACjD;AACF;AAEA,MAAM,sCAKD;CACH,cAAc;CAEd,sBAAsB,OAAsC;EAC1D,OAAO;GAAE,MAAM;GAAQ,MAAM,MAAM;EAAK;CAC1C;CAEA,uBAAuB,OAAuC;EAC5D,IAAI,MAAM,gBAAgB,OACxB,OAAO;GACL,MAAM;GACN,WAAW;IACT,KAAK,MAAM;IACX,GAAI,MAAM,UAAU,SAChB,EAAE,QAAQ,MAAM,SAAS,OAAkC,IAC3D,CAAC;GACP;EACF;EAGF,IAAI,MAAM,gBAAgB,UAExB,OAAO;GACL,MAAM;GACN,WAAW;IACT,KAAA,QAJgB,MAAM,aAAa,GAAG,UAAU,MAAM;IAKtD,GAAI,MAAM,UAAU,SAChB,EAAE,QAAQ,MAAM,SAAS,OAAkC,IAC3D,CAAC;GACP;EACF;EAGF,MAAM,IAAI,MACR,yCAAyC,MAAM,YAAY,kCAC7D;CACF;CAEA,uBAAuB,OAA4C;EACjE,IAAI,MAAM,gBAAgB,OAAO;GAC/B,MAAM,OAAO,mBAAmB,EAAE,SAAS,MAAM,IAAI,CAAC;GACtD,IAAI,CAAC,MACH,MAAM,IAAI,MACR,qCAAqC,MAAM,YAAY,gDACzD;GAGF,MAAM,cAAc,KAAK,aAAa,MAAM,aAAa;GACzD,IAAI;GAEJ,IAAI;IACF,WAAW,cAAc,WAAW;GACtC,QAAQ;IACN,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GACF;GAEA,IACE,SAAS,SAAS,WACjB,SAAS,YAAY,SAAS,SAAS,YAAY,OAEpD,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GAGF,OAAO;IACL,MAAM;IACN,aAAa;KACX,QAAQ,SAAS;KACjB,MAAM,KAAK;IACb;GACF;EACF;EAEA,IAAI,MAAM,gBAAgB,UAAU;GAClC,IAAI;GAEJ,IAAI;IACF,WAAW,cAAc,MAAM,aAAa,EAAE;GAChD,QAAQ;IACN,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GACF;GAEA,IACE,SAAS,SAAS,WACjB,SAAS,YAAY,SAAS,SAAS,YAAY,OAEpD,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GAGF,OAAO;IACL,MAAM;IACN,aAAa;KACX,QAAQ,SAAS;KACjB,MAAM,MAAM;IACd;GACF;EACF;EAEA,MAAM,IAAI,MACR,yCAAyC,MAAM,YAAY,kCAC7D;CACF;CAEA,sBAAsB,OAAuC;EAC3D,IAAI,MAAM,gBAAgB,OAAO;GAE/B,IAAI,CADS,mBAAmB,EAAE,SAAS,MAAM,IAAI,CAC7C,GACN,MAAM,IAAI,MACR,oCAAoC,MAAM,YAAY,gDACxD;GAGF,OAAO;IACL,MAAM;IACN,MAAM;KACJ,WAAW,MAAM;KACjB,GAAI,MAAM,UAAU,YAAY,MAAM,UAAU,OAC5C,EACA,UAAW,MAAM,SAAS,YACtB,MAAM,SAAS,KACrB,IACE,CAAC;IACP;GACF;EACF;EAEA,IAAI,MAAM,gBAAgB,UACxB,OAAO;GACL,MAAM;GACN,MAAM;IACJ,WAAW,QAAQ,MAAM,aAAa,GAAG,UAAU,MAAM;IACzD,GAAI,MAAM,UAAU,YACpB,MAAM,UAAU,QAChB,MAAM,UAAU,QACZ,EACA,UAAW,MAAM,SAAS,YACtB,MAAM,SAAS,QACf,MAAM,SAAS,MACrB,IACE,CAAC;GACP;EACF;EAGF,IAAI,MAAM,gBAAgB,MACxB,OAAO;GACL,MAAM;GACN,MAAM,EACJ,SAAS,MAAM,GACjB;EACF;EAGF,MAAM,IAAI,MACR,wCAAwC,MAAM,YAAY,kCAC5D;CACF;AACF;AAeA,SAAgB,+BACd,UACA,OACA,SACyB;CACzB,MAAM,oBAAoB,sBACxB,UACA,kCACF;CACA,IAAI,8BAA8B;CAElC,OAAO,kBAAkB,SAAS,YAAY;EAC5C,IAAI,OAAO,oBAAoB,OAAO;EACtC,IAAI,SAAS,YAAY,iBAAiB,KAAK,GAC7C,OAAO;EAGT,IAAI,4BAAqC;EAEzC,IAAI;EACJ,IACE,SAAS,UACT,OAAO,QAAQ,YAAY,YAC3B,CAAC,4BAA4B,OAAO,GACpC;GACA,UACE,SAAS,6BAA6B,OAClC,yCACA,QAAQ,SACR,0BACF,IACE,KAAA;GACN,YAAY,gCACV,QAAQ,SACR,0BACF,CAAC,CAAC;EACJ,OAAO,IAAI,OAAO,QAAQ,YAAY,UACpC,UAAU,QAAQ;OAElB,UAAU,QAAQ,QAAQ,KAAK,MAAM;GACnC,IAAI,UAAU,KAAK,EAAE,SAAS,YAAY;IACxC,4BAA4B;IAC5B,OAAO;GACT;GACA,IAAI,mBAAmB,CAAC,GACtB,OAAO,8BACL,GACA,mCACF;GAEF,OAAO;EACT,CAAC;EAGH,MAAM,kBAAuC;GAC3C;GACA;EACF;EACA,IAAI,sBAAsB;EAC1B,IAAI,sBAAsB;EAC1B,IAAI,QAAQ,QAAQ,MAClB,gBAAgB,OAAO,QAAQ;EAEjC,IAAI,QAAQ,kBAAkB,iBAAiB,MAAM;GACnD,gBAAgB,gBAAgB,QAAQ,kBAAkB;GAC1D,gBAAgB,UAAU;EAC5B;EACA,IAAI,YAAY,OAAO,KAAK,CAAC,CAAC,QAAQ,YAAY,QAAQ;GACxD,sBAAsB;GACtB,gBAAgB,aAAa,QAAQ,WAAW,IAC9C,uCACF;GACA,gBAAgB,UAAU,4BAA4B,UAAU;GAChE,IACE,SAAS,4BAA4B,QACrC,QAAQ,kBAAkB,qBAAqB,MAC/C;IAEA,MAAM,gBACJ,OAAO,SAAS,QAAQ,MAAM,QAC9B,OAAO,SAAS,WAAW,MAAM;IACnC,IACE,QAAQ,qCAAqC,QAC7C,eACA;KACA,MAAM,mBAAmB,QAAQ,kBAC9B;KACH,MAAM,gBAAgB,CAAC;KAGvB,KAAK,MAAM,UAAU,kBACnB,IAAI,OAAO,SAAS,oBAAoB,OAAO,QAAQ,MACrD,cAAc,KAAK;MACjB,MAAM;MACN,UAAU,OAAO;KACnB,CAAC;UACI,IACL,OAAO,SAAS,yBAChB,OAAO,QAAQ,MAEf,cAAc,KAAK;MACjB,MAAM;MACN,MAAM,OAAO;MACb,IAAI,OAAO;KACb,CAAC;KAKL,IAAI,cAAc,SAAS,GACzB,gBAAgB,UAAU;IAE9B,OAEE,gBAAgB,oBACd,QAAQ,kBAAkB;GAEhC;EACF,OAAO;GACL,IAAI,QAAQ,kBAAkB,cAAc,MAAM;IAChD,sBACE,CAAC,MAAM,QAAQ,QAAQ,kBAAkB,UAAU,KACnD,QAAQ,kBAAkB,WAAW,SAAS;IAChD,gBAAgB,aAAa,QAAQ,kBAAkB;IACvD,IACE,SAAS,4BAA4B,QACrC,QAAQ,kBAAkB,qBAAqB,MAC/C;KAEA,MAAM,gBACJ,OAAO,SAAS,QAAQ,MAAM,QAC9B,OAAO,SAAS,WAAW,MAAM;KACnC,IACE,QAAQ,qCAAqC,QAC7C,eACA;MACA,MAAM,mBAAmB,QAAQ,kBAC9B;MACH,MAAM,gBAAgB,CAAC;MAGvB,KAAK,MAAM,UAAU,kBACnB,IAAI,OAAO,SAAS,oBAAoB,OAAO,QAAQ,MACrD,cAAc,KAAK;OACjB,MAAM;OACN,UAAU,OAAO;MACnB,CAAC;WACI,IACL,OAAO,SAAS,yBAChB,OAAO,QAAQ,MAEf,cAAc,KAAK;OACjB,MAAM;OACN,MAAM,OAAO;OACb,IAAI,OAAO;MACb,CAAC;MAKL,IAAI,cAAc,SAAS,GACzB,gBAAgB,UAAU;KAE9B,OAEE,gBAAgB,oBACd,QAAQ,kBAAkB;IAEhC;GACF;GACA,IAAK,QAAwB,gBAAgB,MAAM;IACjD,sBAAsB;IACtB,gBAAgB,eAAgB,QAAwB;GAC1D;EACF;EAEA,IACE,SAAS,4BAA4B,QACrC,YAAY,OAAO,MAClB,+BAA+B,wBAChC,OAAO,QAAQ,kBAAkB,sBAAsB,YACvD,QAAQ,kBAAkB,sBAAsB,IAEhD,gBAAgB,oBACd,QAAQ,kBAAkB;EAG9B,IAAI,uBAAuB,qBACzB,8BAA8B;EAGhC,IACE,QAAQ,kBAAkB,SAC1B,OAAO,QAAQ,kBAAkB,UAAU,YAC3C,QAAQ,QAAQ,kBAAkB,OAQlC,OAAO,CAAC,iBAAiB;GALvB,MAAM;GACN,OAAO,EACL,IAAI,QAAQ,kBAAkB,MAAM,GACtC;EAEkC,CAAC;EAGvC,OAAO;CACT,CAAC;AACH;AAuTA,SAAgB,iBAAiB,OAAgB;CAC/C,OAAO,SAAS,QAAQ,UAAU,MAAM,uBAAuB,KAAK,KAAK;AAC3E"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../../src/llm/openai/utils/index.ts"],"mappings":";;;;;;;AAgGA,MAAM,qCAAqC,+BAA+B;AAE1E,SAAS,wCAAwC,UAO/C;CACA,IAAI,SAAS,MAAM,MACjB,MAAM,IAAI,MAAM,kDAAgD;CAElE,OAAO;EACL,IAAI,SAAS;EACb,MAAM;EACN,UAAU;GACR,MAAM,SAAS;GACf,WAAW,uBACT,SAAS,MACT,kCACF;EACF;CACF;AACF;AAEA,SAAS,gCAAgC,SAAsB;CAC7D,IACE,QAAQ,SAAS,YACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,UACjB,QAAQ,SAAS,cACjB,QAAQ,SAAS,QAEjB,QAAQ,KAAK,yBAAyB,QAAQ,MAAM;CAGtD,OAAO,QAAQ;AACjB;AAEA,SAAgB,oBAAoB,SAAsC;CACxE,MAAM,OAAO,QAAQ,SAAS;CAC9B,QAAQ,MAAR;EACA,KAAK,UACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,YACH,OAAO;EACT,KAAK,QACH,OAAO;EACT,KAAK;GACH,IAAI,CAAC,YAAY,WAAW,OAAO,GACjC,MAAM,IAAI,MAAM,8BAA8B;GAChD,OAAO,gCAAgC,OAAO;EAEhD,SACE,MAAM,IAAI,MAAM,yBAAyB,MAAM;CACjD;AACF;AAEA,MAAM,sCAKD;CACH,cAAc;CAEd,sBAAsB,OAAsC;EAC1D,OAAO;GAAE,MAAM;GAAQ,MAAM,MAAM;EAAK;CAC1C;CAEA,uBAAuB,OAAuC;EAC5D,IAAI,MAAM,gBAAgB,OACxB,OAAO;GACL,MAAM;GACN,WAAW;IACT,KAAK,MAAM;IACX,GAAI,MAAM,UAAU,SAChB,EAAE,QAAQ,MAAM,SAAS,OAAkC,IAC3D,CAAC;GACP;EACF;EAGF,IAAI,MAAM,gBAAgB,UAExB,OAAO;GACL,MAAM;GACN,WAAW;IACT,KAAA,QAJgB,MAAM,aAAa,GAAG,UAAU,MAAM;IAKtD,GAAI,MAAM,UAAU,SAChB,EAAE,QAAQ,MAAM,SAAS,OAAkC,IAC3D,CAAC;GACP;EACF;EAGF,MAAM,IAAI,MACR,yCAAyC,MAAM,YAAY,kCAC7D;CACF;CAEA,uBAAuB,OAA4C;EACjE,IAAI,MAAM,gBAAgB,OAAO;GAC/B,MAAM,OAAO,mBAAmB,EAAE,SAAS,MAAM,IAAI,CAAC;GACtD,IAAI,CAAC,MACH,MAAM,IAAI,MACR,qCAAqC,MAAM,YAAY,gDACzD;GAGF,MAAM,cAAc,KAAK,aAAa,MAAM,aAAa;GACzD,IAAI;GAEJ,IAAI;IACF,WAAW,cAAc,WAAW;GACtC,QAAQ;IACN,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GACF;GAEA,IACE,SAAS,SAAS,WACjB,SAAS,YAAY,SAAS,SAAS,YAAY,OAEpD,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GAGF,OAAO;IACL,MAAM;IACN,aAAa;KACX,QAAQ,SAAS;KACjB,MAAM,KAAK;IACb;GACF;EACF;EAEA,IAAI,MAAM,gBAAgB,UAAU;GAClC,IAAI;GAEJ,IAAI;IACF,WAAW,cAAc,MAAM,aAAa,EAAE;GAChD,QAAQ;IACN,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GACF;GAEA,IACE,SAAS,SAAS,WACjB,SAAS,YAAY,SAAS,SAAS,YAAY,OAEpD,MAAM,IAAI,MACR,iCAAiC,MAAM,YAAY,+CACrD;GAGF,OAAO;IACL,MAAM;IACN,aAAa;KACX,QAAQ,SAAS;KACjB,MAAM,MAAM;IACd;GACF;EACF;EAEA,MAAM,IAAI,MACR,yCAAyC,MAAM,YAAY,kCAC7D;CACF;CAEA,sBAAsB,OAAuC;EAC3D,IAAI,MAAM,gBAAgB,OAAO;GAE/B,IAAI,CADS,mBAAmB,EAAE,SAAS,MAAM,IAAI,CAC7C,GACN,MAAM,IAAI,MACR,oCAAoC,MAAM,YAAY,gDACxD;GAGF,OAAO;IACL,MAAM;IACN,MAAM;KACJ,WAAW,MAAM;KACjB,GAAI,MAAM,UAAU,YAAY,MAAM,UAAU,OAC5C,EACA,UAAW,MAAM,SAAS,YACtB,MAAM,SAAS,KACrB,IACE,CAAC;IACP;GACF;EACF;EAEA,IAAI,MAAM,gBAAgB,UACxB,OAAO;GACL,MAAM;GACN,MAAM;IACJ,WAAW,QAAQ,MAAM,aAAa,GAAG,UAAU,MAAM;IACzD,GAAI,MAAM,UAAU,YACpB,MAAM,UAAU,QAChB,MAAM,UAAU,QACZ,EACA,UAAW,MAAM,SAAS,YACtB,MAAM,SAAS,QACf,MAAM,SAAS,MACrB,IACE,CAAC;GACP;EACF;EAGF,IAAI,MAAM,gBAAgB,MACxB,OAAO;GACL,MAAM;GACN,MAAM,EACJ,SAAS,MAAM,GACjB;EACF;EAGF,MAAM,IAAI,MACR,wCAAwC,MAAM,YAAY,kCAC5D;CACF;AACF;AAeA,SAAgB,+BACd,UACA,OACA,SACyB;CACzB,MAAM,oBAAoB,sBACxB,UACA,kCACF;CACA,IAAI,8BAA8B;CAElC,OAAO,kBAAkB,SAAS,YAAY;EAC5C,IAAI,OAAO,oBAAoB,OAAO;EACtC,IAAI,SAAS,YAAY,iBAAiB,KAAK,GAC7C,OAAO;EAGT,IAAI,4BAAqC;EAEzC,IAAI;EACJ,IACE,SAAS,UACT,OAAO,QAAQ,YAAY,YAC3B,CAAC,4BAA4B,OAAO,GACpC;GACA,UACE,SAAS,6BAA6B,OAClC,yCACA,QAAQ,SACR,0BACF,IACE,KAAA;GACN,YAAY,gCACV,QAAQ,SACR,0BACF,CAAC,CAAC;EACJ,OAAO,IAAI,OAAO,QAAQ,YAAY,UACpC,UAAU,QAAQ;OAElB,UAAU,QAAQ,QAAQ,KAAK,MAAM;GACnC,IAAI,UAAU,KAAK,EAAE,SAAS,YAAY;IACxC,4BAA4B;IAC5B,OAAO;GACT;GACA,IAAI,mBAAmB,CAAC,GACtB,OAAO,8BACL,GACA,mCACF;GAEF,OAAO;EACT,CAAC;EAGH,MAAM,kBAAuC;GAC3C;GACA;EACF;EACA,IAAI,sBAAsB;EAC1B,IAAI,sBAAsB;EAC1B,IAAI,QAAQ,QAAQ,MAClB,gBAAgB,OAAO,QAAQ;EAEjC,IAAI,QAAQ,kBAAkB,iBAAiB,MAAM;GACnD,gBAAgB,gBAAgB,QAAQ,kBAAkB;GAC1D,gBAAgB,UAAU;EAC5B;EACA,IAAI,YAAY,OAAO,KAAK,CAAC,CAAC,QAAQ,YAAY,QAAQ;GACxD,sBAAsB;GACtB,gBAAgB,aAAa,QAAQ,WAAW,IAC9C,uCACF;GACA,gBAAgB,UAAU,4BAA4B,UAAU;GAChE,IACE,SAAS,4BAA4B,QACrC,QAAQ,kBAAkB,qBAAqB,MAC/C;IAEA,MAAM,gBACJ,OAAO,SAAS,QAAQ,MAAM,QAC9B,OAAO,SAAS,WAAW,MAAM;IACnC,IACE,QAAQ,qCAAqC,QAC7C,eACA;KACA,MAAM,mBAAmB,QAAQ,kBAC9B;KACH,MAAM,gBAAgB,CAAC;KAGvB,KAAK,MAAM,UAAU,kBACnB,IAAI,OAAO,SAAS,oBAAoB,OAAO,QAAQ,MACrD,cAAc,KAAK;MACjB,MAAM;MACN,UAAU,OAAO;KACnB,CAAC;UACI,IACL,OAAO,SAAS,yBAChB,OAAO,QAAQ,MAEf,cAAc,KAAK;MACjB,MAAM;MACN,MAAM,OAAO;MACb,IAAI,OAAO;KACb,CAAC;KAKL,IAAI,cAAc,SAAS,GACzB,gBAAgB,UAAU;IAE9B,OAEE,gBAAgB,oBACd,QAAQ,kBAAkB;GAEhC;EACF,OAAO;GACL,IAAI,QAAQ,kBAAkB,cAAc,MAAM;IAChD,sBACE,CAAC,MAAM,QAAQ,QAAQ,kBAAkB,UAAU,KACnD,QAAQ,kBAAkB,WAAW,SAAS;IAChD,gBAAgB,aAAa,QAAQ,kBAAkB;IACvD,IACE,SAAS,4BAA4B,QACrC,QAAQ,kBAAkB,qBAAqB,MAC/C;KAEA,MAAM,gBACJ,OAAO,SAAS,QAAQ,MAAM,QAC9B,OAAO,SAAS,WAAW,MAAM;KACnC,IACE,QAAQ,qCAAqC,QAC7C,eACA;MACA,MAAM,mBAAmB,QAAQ,kBAC9B;MACH,MAAM,gBAAgB,CAAC;MAGvB,KAAK,MAAM,UAAU,kBACnB,IAAI,OAAO,SAAS,oBAAoB,OAAO,QAAQ,MACrD,cAAc,KAAK;OACjB,MAAM;OACN,UAAU,OAAO;MACnB,CAAC;WACI,IACL,OAAO,SAAS,yBAChB,OAAO,QAAQ,MAEf,cAAc,KAAK;OACjB,MAAM;OACN,MAAM,OAAO;OACb,IAAI,OAAO;MACb,CAAC;MAKL,IAAI,cAAc,SAAS,GACzB,gBAAgB,UAAU;KAE9B,OAEE,gBAAgB,oBACd,QAAQ,kBAAkB;IAEhC;GACF;GACA,IAAK,QAAwB,gBAAgB,MAAM;IACjD,sBAAsB;IACtB,gBAAgB,eAAgB,QAAwB;GAC1D;EACF;EAEA,IACE,SAAS,4BAA4B,QACrC,YAAY,OAAO,MAClB,+BAA+B,wBAChC,OAAO,QAAQ,kBAAkB,sBAAsB,YACvD,QAAQ,kBAAkB,sBAAsB,IAEhD,gBAAgB,oBACd,QAAQ,kBAAkB;EAG9B,IAAI,uBAAuB,qBACzB,8BAA8B;EAGhC,IACE,QAAQ,kBAAkB,SAC1B,OAAO,QAAQ,kBAAkB,UAAU,YAC3C,QAAQ,QAAQ,kBAAkB,OAQlC,OAAO,CAAC,iBAAiB;GALvB,MAAM;GACN,OAAO,EACL,IAAI,QAAQ,kBAAkB,MAAM,GACtC;EAEkC,CAAC;EAGvC,OAAO;CACT,CAAC;AACH;AAuTA,SAAgB,iBAAiB,OAAgB;CAC/C,OAAO,SAAS,QAAQ,UAAU,MAAM,uBAAuB,KAAK,KAAK;AAC3E"}
@@ -13,7 +13,6 @@ function getReasoningDetails(value) {
13
13
  }
14
14
  var ChatOpenRouter = class extends ChatOpenAI {
15
15
  openRouterReasoning;
16
- /** @deprecated Use `reasoning` object instead */
17
16
  includeReasoning;
18
17
  constructor(_fields) {
19
18
  const fieldsWithoutPromptCache = { ..._fields };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/llm/openrouter/index.ts"],"sourcesContent":["import type {\n ChatOpenAICallOptions,\n OpenAIChatInput,\n OpenAIClient,\n} from '@langchain/openai';\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { ChatGenerationChunk } from '@langchain/core/outputs';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type { SeenScalarMetadata } from '@/llm/openai/streamMetadata';\nimport type { PromptCacheTtl } from '@/messages/cache';\nimport { dropRepeatedScalarMetadata } from '@/llm/openai/streamMetadata';\nimport { ChatOpenAI, emitStreamChunkCallback } from '@/llm/openai';\n\nexport type OpenRouterReasoningEffort =\n | 'xhigh'\n | 'high'\n | 'medium'\n | 'low'\n | 'minimal'\n | 'none';\n\nexport interface OpenRouterReasoning {\n effort?: OpenRouterReasoningEffort;\n max_tokens?: number;\n exclude?: boolean;\n enabled?: boolean;\n}\n\nexport interface ChatOpenRouterCallOptions\n extends Omit<ChatOpenAICallOptions, 'reasoning'> {\n /** @deprecated Use `reasoning` object instead */\n include_reasoning?: boolean;\n reasoning?: OpenRouterReasoning;\n modelKwargs?: OpenAIChatInput['modelKwargs'];\n useResponsesApi?: boolean;\n promptCache?: boolean;\n /**\n * Prompt-cache breakpoint TTL. Defaults to `'1h'` (extended cache) when\n * `promptCache` is enabled; set `'5m'` for the legacy 5-minute behavior.\n * OpenRouter forwards this to Claude upstreams (Anthropic / Bedrock / Vertex),\n * which downgrade to 5m where the extended TTL isn't supported.\n */\n promptCacheTtl?: PromptCacheTtl;\n}\n\nexport type ChatOpenRouterInput = Partial<\n ChatOpenRouterCallOptions & OpenAIChatInput\n> & {\n /** Minimum delay in ms between visible streamed deltas (default 25; 0 disables). */\n _lc_stream_delay?: number;\n};\n\n/** invocationParams return type extended with OpenRouter reasoning */\nexport type OpenRouterInvocationParams = Omit<\n OpenAIClient.Chat.ChatCompletionCreateParams,\n 'messages'\n> & {\n reasoning?: OpenRouterReasoning;\n cache_control?: { type: 'ephemeral'; ttl?: '1h' };\n};\n\ntype InvocationParamsExtra = {\n streaming?: boolean;\n};\n\ninterface OpenRouterReasoningTextDetail {\n type: 'reasoning.text';\n text?: string;\n format?: string;\n index?: number;\n}\n\ninterface OpenRouterReasoningEncryptedDetail {\n type: 'reasoning.encrypted';\n id?: string;\n data?: string;\n format?: string;\n index?: number;\n}\n\ntype OpenRouterReasoningDetail =\n | OpenRouterReasoningTextDetail\n | OpenRouterReasoningEncryptedDetail;\n\nfunction isReasoningTextDetail(\n value: unknown\n): value is OpenRouterReasoningTextDetail {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n value.type === 'reasoning.text'\n );\n}\n\nfunction isReasoningEncryptedDetail(\n value: unknown\n): value is OpenRouterReasoningEncryptedDetail {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n value.type === 'reasoning.encrypted'\n );\n}\n\nfunction getReasoningDetails(value: unknown): OpenRouterReasoningDetail[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter(\n (detail): detail is OpenRouterReasoningDetail =>\n isReasoningTextDetail(detail) || isReasoningEncryptedDetail(detail)\n );\n}\n\nexport class ChatOpenRouter extends ChatOpenAI {\n private openRouterReasoning?: OpenRouterReasoning;\n /** @deprecated Use `reasoning` object instead */\n private includeReasoning?: boolean;\n\n constructor(_fields: ChatOpenRouterInput) {\n const fieldsWithoutPromptCache: ChatOpenRouterInput = { ..._fields };\n delete fieldsWithoutPromptCache.promptCache;\n delete fieldsWithoutPromptCache.promptCacheTtl;\n\n const {\n include_reasoning,\n reasoning: openRouterReasoning,\n modelKwargs = {},\n ...fields\n } = fieldsWithoutPromptCache;\n\n // Extract reasoning from modelKwargs if provided there (e.g., from LLMConfig)\n const { reasoning: mkReasoning, ...restModelKwargs } = modelKwargs as {\n reasoning?: OpenRouterReasoning;\n } & Record<string, unknown>;\n const mergedReasoning =\n mkReasoning != null || openRouterReasoning != null\n ? {\n ...mkReasoning,\n ...openRouterReasoning,\n }\n : undefined;\n const runtimeReasoning =\n mergedReasoning ??\n (include_reasoning === true ? { enabled: true } : undefined);\n const parentModelKwargs =\n runtimeReasoning == null\n ? restModelKwargs\n : { ...restModelKwargs, reasoning: runtimeReasoning };\n\n super({\n ...fields,\n modelKwargs: parentModelKwargs,\n includeReasoningDetails: true,\n convertReasoningDetailsToContent: true,\n preserveToolCacheControl: true,\n responsesPromptCache: _fields.promptCache,\n responsesPromptCacheTtl: _fields.promptCacheTtl,\n });\n\n // Merge reasoning config: modelKwargs.reasoning < constructor reasoning\n if (mergedReasoning != null) {\n this.openRouterReasoning = mergedReasoning;\n }\n\n this.includeReasoning = include_reasoning;\n }\n static lc_name(): 'LibreChatOpenRouter' {\n return 'LibreChatOpenRouter';\n }\n\n // OpenRouter widens OpenAI reasoning with extra effort levels ('xhigh' | 'none' | 'minimal').\n override invocationParams(\n options?: this['ParsedCallOptions'],\n extra?: InvocationParamsExtra\n ): OpenRouterInvocationParams {\n type MutableParams = Omit<\n OpenAIClient.Chat.ChatCompletionCreateParams,\n 'messages'\n > & {\n reasoning_effort?: string;\n reasoning?: OpenRouterReasoning;\n cache_control?: { type: 'ephemeral'; ttl?: '1h' };\n };\n\n const optionsWithDefaults = this._combineCallOptions(options);\n const useResponsesApi = this._useResponsesApi(options);\n const params = (\n useResponsesApi\n ? this.responses.invocationParams(optionsWithDefaults)\n : this.completions.invocationParams(optionsWithDefaults, extra)\n ) as MutableParams;\n\n // Remove the OpenAI-native reasoning_effort that the parent sets;\n // OpenRouter uses a `reasoning` object instead\n delete params.reasoning_effort;\n\n // Build the OpenRouter reasoning config\n const reasoning = this.buildOpenRouterReasoning(optionsWithDefaults);\n if (reasoning != null) {\n params.reasoning = reasoning;\n } else {\n delete params.reasoning;\n }\n\n return params;\n }\n\n private buildOpenRouterReasoning(\n options?: this['ParsedCallOptions']\n ): OpenRouterReasoning | undefined {\n let reasoning: OpenRouterReasoning | undefined;\n\n // 1. Instance-level reasoning config (from constructor)\n if (this.openRouterReasoning != null) {\n reasoning = { ...this.openRouterReasoning };\n }\n\n // 2. LangChain-style reasoning params (from parent's `this.reasoning`)\n const lcReasoning = this.getReasoningParams(options);\n if (lcReasoning?.effort != null) {\n reasoning = {\n ...reasoning,\n effort: lcReasoning.effort as OpenRouterReasoningEffort,\n };\n }\n\n // 3. Call-level reasoning override\n const callReasoning = (options as ChatOpenRouterCallOptions | undefined)\n ?.reasoning;\n if (callReasoning != null) {\n reasoning = { ...reasoning, ...callReasoning };\n }\n\n // 4. Legacy include_reasoning backward compatibility\n if (reasoning == null && this.includeReasoning === true) {\n reasoning = { enabled: true };\n }\n\n return reasoning;\n }\n\n override async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const reasoningTextByIndex = new Map<\n number,\n OpenRouterReasoningTextDetail\n >();\n const reasoningEncryptedById = new Map<\n string,\n OpenRouterReasoningEncryptedDetail\n >();\n // Consume the raw (un-deduped) stream so `finish_reason` survives as the\n // reasoning-flush signal below; de-duplicate after that, before emitting.\n const seenScalarMetadata: SeenScalarMetadata = new Map();\n\n for await (const generationChunk of super._streamRawResponseChunks(\n messages,\n options,\n undefined\n )) {\n let currentReasoningText = '';\n const reasoningDetails = getReasoningDetails(\n generationChunk.message.additional_kwargs.reasoning_details\n );\n\n for (const detail of reasoningDetails) {\n if (detail.type === 'reasoning.text') {\n currentReasoningText += detail.text ?? '';\n const index = detail.index ?? 0;\n const existing = reasoningTextByIndex.get(index);\n if (existing != null) {\n existing.text = `${existing.text ?? ''}${detail.text ?? ''}`;\n continue;\n }\n reasoningTextByIndex.set(index, {\n ...detail,\n text: detail.text ?? '',\n });\n continue;\n }\n if (detail.id != null) {\n reasoningEncryptedById.set(detail.id, { ...detail });\n }\n }\n\n if (\n currentReasoningText.length > 0 &&\n generationChunk.message.additional_kwargs.reasoning == null\n ) {\n generationChunk.message.additional_kwargs.reasoning =\n currentReasoningText;\n }\n\n if (generationChunk.generationInfo?.finish_reason != null) {\n const finalReasoningDetails = [\n ...reasoningTextByIndex.values(),\n ...reasoningEncryptedById.values(),\n ];\n if (finalReasoningDetails.length > 0) {\n generationChunk.message.additional_kwargs.reasoning_details =\n finalReasoningDetails;\n } else {\n delete generationChunk.message.additional_kwargs.reasoning_details;\n }\n } else {\n delete generationChunk.message.additional_kwargs.reasoning_details;\n }\n\n dropRepeatedScalarMetadata(generationChunk, seenScalarMetadata);\n await emitStreamChunkCallback(generationChunk, runManager);\n yield generationChunk;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/llm/openrouter/index.ts"],"mappings":"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"}
@@ -23,12 +23,6 @@ function markCacheControl(tool, ttl) {
23
23
  cache_control: buildAnthropicCacheControl(ttl)
24
24
  };
25
25
  }
26
- /**
27
- * Drop any existing `cache_control` from a tool. Reused/caller-supplied tools
28
- * can carry a stale marker (e.g. from a prior `promptCacheTtl: '5m'` run); since
29
- * all tools serialize before system/messages, a leftover 5-minute marker ahead
30
- * of the resolved breakpoint would violate the longer-TTL-first ordering.
31
- */
32
26
  function stripCacheControl(tool) {
33
27
  if (tool.cache_control == null) return tool;
34
28
  const { cache_control: _omit, ...rest } = tool;
@@ -1 +1 @@
1
- {"version":3,"file":"toolCache.mjs","names":[],"sources":["../../../../src/llm/openrouter/toolCache.ts"],"sourcesContent":["import type { BindToolsInput } from '@langchain/core/language_models/chat_models';\nimport type { OpenAIClient } from '@langchain/openai';\nimport type { GraphTools } from '@/types';\nimport {\n buildAnthropicCacheControl,\n type PromptCacheTtl,\n} from '@/messages/cache';\nimport { _convertToOpenAITool } from '@/llm/openai';\n\ntype OpenRouterCacheControl = { type: 'ephemeral'; ttl?: '1h' };\n\ntype OpenRouterToolWithCacheControl = OpenAIClient.ChatCompletionTool & {\n cache_control?: OpenRouterCacheControl;\n defer_loading?: boolean;\n};\n\ntype ToolNameCandidate = {\n name?: unknown;\n function?: {\n name?: unknown;\n };\n defer_loading?: unknown;\n};\n\nfunction getToolName(tool: unknown): string | undefined {\n const candidate = tool as ToolNameCandidate;\n if (typeof candidate.name === 'string') {\n return candidate.name;\n }\n if (typeof candidate.function?.name === 'string') {\n return candidate.function.name;\n }\n return undefined;\n}\n\nfunction hasDeferredMarker(tool: unknown): boolean {\n return (tool as ToolNameCandidate).defer_loading === true;\n}\n\nfunction toOpenRouterTool(tool: unknown): OpenRouterToolWithCacheControl {\n const converted = _convertToOpenAITool(\n tool as BindToolsInput\n ) as OpenRouterToolWithCacheControl;\n\n if (hasDeferredMarker(tool)) {\n return { ...converted, defer_loading: true };\n }\n\n return converted;\n}\n\nfunction markCacheControl(\n tool: OpenRouterToolWithCacheControl,\n ttl?: PromptCacheTtl\n): OpenRouterToolWithCacheControl {\n return {\n ...tool,\n cache_control: buildAnthropicCacheControl(ttl),\n };\n}\n\n/**\n * Drop any existing `cache_control` from a tool. Reused/caller-supplied tools\n * can carry a stale marker (e.g. from a prior `promptCacheTtl: '5m'` run); since\n * all tools serialize before system/messages, a leftover 5-minute marker ahead\n * of the resolved breakpoint would violate the longer-TTL-first ordering.\n */\nfunction stripCacheControl(\n tool: OpenRouterToolWithCacheControl\n): OpenRouterToolWithCacheControl {\n if (tool.cache_control == null) {\n return tool;\n }\n const { cache_control: _omit, ...rest } = tool;\n return rest;\n}\n\nexport function partitionAndMarkOpenRouterToolCache(\n tools: GraphTools | undefined,\n isDeferred: (toolName: string) => boolean,\n ttl?: PromptCacheTtl\n): GraphTools | undefined {\n if (tools == null || tools.length === 0) {\n return tools;\n }\n\n const staticTools: OpenRouterToolWithCacheControl[] = [];\n const deferredTools: OpenRouterToolWithCacheControl[] = [];\n\n for (const tool of tools as readonly unknown[]) {\n const converted = toOpenRouterTool(tool);\n const name = getToolName(converted) ?? getToolName(tool);\n\n if (name != null && isDeferred(name)) {\n deferredTools.push(converted);\n continue;\n }\n\n staticTools.push(converted);\n }\n\n // Deferred tools sit after the breakpoint but still before system/messages,\n // so strip any stale marker off them.\n for (let i = 0; i < deferredTools.length; i++) {\n deferredTools[i] = stripCacheControl(deferredTools[i]);\n }\n\n if (staticTools.length === 0) {\n return [...deferredTools] as GraphTools;\n }\n\n // Strip stale markers off the earlier static tools, then stamp only the last\n // static tool with the resolved TTL (markCacheControl overwrites any marker).\n for (let i = 0; i < staticTools.length - 1; i++) {\n staticTools[i] = stripCacheControl(staticTools[i]);\n }\n staticTools[staticTools.length - 1] = markCacheControl(\n staticTools[staticTools.length - 1],\n ttl\n );\n\n return [...staticTools, ...deferredTools] as GraphTools;\n}\n"],"mappings":";;;AAwBA,SAAS,YAAY,MAAmC;CACtD,MAAM,YAAY;CAClB,IAAI,OAAO,UAAU,SAAS,UAC5B,OAAO,UAAU;CAEnB,IAAI,OAAO,UAAU,UAAU,SAAS,UACtC,OAAO,UAAU,SAAS;AAG9B;AAEA,SAAS,kBAAkB,MAAwB;CACjD,OAAQ,KAA2B,kBAAkB;AACvD;AAEA,SAAS,iBAAiB,MAA+C;CACvE,MAAM,YAAY,qBAChB,IACF;CAEA,IAAI,kBAAkB,IAAI,GACxB,OAAO;EAAE,GAAG;EAAW,eAAe;CAAK;CAG7C,OAAO;AACT;AAEA,SAAS,iBACP,MACA,KACgC;CAChC,OAAO;EACL,GAAG;EACH,eAAe,2BAA2B,GAAG;CAC/C;AACF;;;;;;;AAQA,SAAS,kBACP,MACgC;CAChC,IAAI,KAAK,iBAAiB,MACxB,OAAO;CAET,MAAM,EAAE,eAAe,OAAO,GAAG,SAAS;CAC1C,OAAO;AACT;AAEA,SAAgB,oCACd,OACA,YACA,KACwB;CACxB,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO;CAGT,MAAM,cAAgD,CAAC;CACvD,MAAM,gBAAkD,CAAC;CAEzD,KAAK,MAAM,QAAQ,OAA6B;EAC9C,MAAM,YAAY,iBAAiB,IAAI;EACvC,MAAM,OAAO,YAAY,SAAS,KAAK,YAAY,IAAI;EAEvD,IAAI,QAAQ,QAAQ,WAAW,IAAI,GAAG;GACpC,cAAc,KAAK,SAAS;GAC5B;EACF;EAEA,YAAY,KAAK,SAAS;CAC5B;CAIA,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KACxC,cAAc,KAAK,kBAAkB,cAAc,EAAE;CAGvD,IAAI,YAAY,WAAW,GACzB,OAAO,CAAC,GAAG,aAAa;CAK1B,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,SAAS,GAAG,KAC1C,YAAY,KAAK,kBAAkB,YAAY,EAAE;CAEnD,YAAY,YAAY,SAAS,KAAK,iBACpC,YAAY,YAAY,SAAS,IACjC,GACF;CAEA,OAAO,CAAC,GAAG,aAAa,GAAG,aAAa;AAC1C"}
1
+ {"version":3,"file":"toolCache.mjs","names":[],"sources":["../../../../src/llm/openrouter/toolCache.ts"],"mappings":";;;AAwBA,SAAS,YAAY,MAAmC;CACtD,MAAM,YAAY;CAClB,IAAI,OAAO,UAAU,SAAS,UAC5B,OAAO,UAAU;CAEnB,IAAI,OAAO,UAAU,UAAU,SAAS,UACtC,OAAO,UAAU,SAAS;AAG9B;AAEA,SAAS,kBAAkB,MAAwB;CACjD,OAAQ,KAA2B,kBAAkB;AACvD;AAEA,SAAS,iBAAiB,MAA+C;CACvE,MAAM,YAAY,qBAChB,IACF;CAEA,IAAI,kBAAkB,IAAI,GACxB,OAAO;EAAE,GAAG;EAAW,eAAe;CAAK;CAG7C,OAAO;AACT;AAEA,SAAS,iBACP,MACA,KACgC;CAChC,OAAO;EACL,GAAG;EACH,eAAe,2BAA2B,GAAG;CAC/C;AACF;AAQA,SAAS,kBACP,MACgC;CAChC,IAAI,KAAK,iBAAiB,MACxB,OAAO;CAET,MAAM,EAAE,eAAe,OAAO,GAAG,SAAS;CAC1C,OAAO;AACT;AAEA,SAAgB,oCACd,OACA,YACA,KACwB;CACxB,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO;CAGT,MAAM,cAAgD,CAAC;CACvD,MAAM,gBAAkD,CAAC;CAEzD,KAAK,MAAM,QAAQ,OAA6B;EAC9C,MAAM,YAAY,iBAAiB,IAAI;EACvC,MAAM,OAAO,YAAY,SAAS,KAAK,YAAY,IAAI;EAEvD,IAAI,QAAQ,QAAQ,WAAW,IAAI,GAAG;GACpC,cAAc,KAAK,SAAS;GAC5B;EACF;EAEA,YAAY,KAAK,SAAS;CAC5B;CAIA,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KACxC,cAAc,KAAK,kBAAkB,cAAc,EAAE;CAGvD,IAAI,YAAY,WAAW,GACzB,OAAO,CAAC,GAAG,aAAa;CAK1B,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,SAAS,GAAG,KAC1C,YAAY,KAAK,kBAAkB,YAAY,EAAE;CAEnD,YAAY,YAAY,SAAS,KAAK,iBACpC,YAAY,YAAY,SAAS,IACjC,GACF;CAEA,OAAO,CAAC,GAAG,aAAa,GAAG,aAAa;AAC1C"}
@@ -2,29 +2,11 @@ import "../common/constants.mjs";
2
2
  import "../common/enum.mjs";
3
3
  import "../common/index.mjs";
4
4
  //#region src/llm/preempt.ts
5
- /**
6
- * Normalizes a host-supplied seal budget.
7
- *
8
- * Read in two places that interpret it differently — a numeric comparison in
9
- * the seal gate and an addition into the recursion limit — so a value like
10
- * `1.5` would permit two seals while reserving fractional headroom, `NaN`
11
- * would poison the recursion limit outright, and `Infinity` would remove both
12
- * bounds at once. Normalizing once keeps the two readings in agreement.
13
- *
14
- * `0` is honored as a deliberate "never seal"; anything not finite falls back
15
- * to the default rather than silently disabling the feature.
16
- */
17
5
  function resolveMaxSeals(maxSeals) {
18
6
  if (maxSeals == null || !Number.isFinite(maxSeals)) return 8;
19
7
  const whole = Math.floor(maxSeals);
20
8
  return whole > 0 ? whole : 0;
21
9
  }
22
- /**
23
- * True when the accumulated content carries at least one non-whitespace text
24
- * block. `thinking` / `reasoning` blocks deliberately do not count: they are
25
- * stripped or signed on several providers and cannot stand in for the visible
26
- * assistant turn a sealed sequence needs.
27
- */
28
10
  function hasNonEmptyTextContent(content) {
29
11
  if (typeof content === "string") return content.trim() !== "";
30
12
  for (const block of content) {
@@ -34,19 +16,6 @@ function hasNonEmptyTextContent(content) {
34
16
  }
35
17
  return false;
36
18
  }
37
- /**
38
- * True while a Gemini server-side tool call is still awaiting its response.
39
- *
40
- * Google's server-side tools (Search, URL context) never populate
41
- * `tool_calls` or `tool_call_chunks` — those are derived from `functionCall`
42
- * parts only, while a server-side invocation arrives as a `toolCall` CONTENT
43
- * block and its result as a later `toolResponse` block. The tool-call gates
44
- * cannot see it, so sealing between the two would replay a model turn holding
45
- * an unanswered server-side call.
46
- *
47
- * Counted rather than id-matched: Google answers calls in order, and counting
48
- * stays correct when a part omits its id.
49
- */
50
19
  function hasOpenGoogleServerToolCall(content) {
51
20
  if (typeof content === "string") return false;
52
21
  let calls = 0;
@@ -55,11 +24,6 @@ function hasOpenGoogleServerToolCall(content) {
55
24
  else if (block.type === "toolResponse") responses += 1;
56
25
  return calls > responses;
57
26
  }
58
- /**
59
- * Ids of Anthropic server-side tool calls whose paired result block is already
60
- * on the accumulated content. Those calls are answered and cannot be orphaned
61
- * by a seal.
62
- */
63
27
  function settledServerToolCallIds(content) {
64
28
  const settled = /* @__PURE__ */ new Set();
65
29
  if (typeof content === "string") return settled;
@@ -70,7 +34,6 @@ function settledServerToolCallIds(content) {
70
34
  }
71
35
  return settled;
72
36
  }
73
- /** Tool calls still awaiting an answer, ignoring ones already settled. */
74
37
  function countOpenToolCalls(calls, settled) {
75
38
  if (calls == null || calls.length === 0) return 0;
76
39
  if (settled.size === 0) return calls.length;
@@ -78,46 +41,8 @@ function countOpenToolCalls(calls, settled) {
78
41
  for (const call of calls) if (call.id == null || !settled.has(call.id)) open += 1;
79
42
  return open;
80
43
  }
81
- /**
82
- * Cooperative mid-generation seal gate. Returns true ONLY when sealing here
83
- * yields a message sequence valid on EVERY supported provider:
84
- * - non-whitespace TEXT content, so the FIRST injected user turn is preceded
85
- * by a non-empty assistant turn — no empty-content 400s. Note this says
86
- * nothing about adjacency AMONG several injected turns: a boundary that
87
- * drains two steers emits two consecutive user messages, which strict
88
- * providers reject. That is normalized at the provider-facing hop by
89
- * `coalesceAdjacentUserTurns`, not here;
90
- * - no tool call in flight, so no `tool_use` can be orphaned AND no eagerly
91
- * prestarted execution can be stripped out from under the model.
92
- *
93
- * Anthropic's server-side tools need no check of their own. Every
94
- * `server_tool_use` content block also emits a `tool_call_chunk`
95
- * (`_makeMessageChunkFromAnthropicEvent`), and `concat` keeps that chunk on
96
- * the accumulated message for the remainder of the turn, so the tool-call
97
- * gates below already cover it. The practical consequence is worth stating
98
- * plainly: once a turn starts a web search it is no longer preemptible, and
99
- * a queued message waits for the ordinary tool boundary instead.
100
- *
101
- * Nothing is stripped and nothing is repaired: when the accumulated shape is
102
- * not already safe the stream simply runs on, and whatever the host queued
103
- * lands at the next tool boundary instead. Chunks accumulate monotonically
104
- * through `concat`, so an unsafe shape can never be observed at a seal point.
105
- */
106
44
  function canSealPreempt(chunk) {
107
45
  if (chunk == null) return false;
108
- /**
109
- * Anthropic's server-side tools run inside the provider, so unlike a client
110
- * tool they never reach `ToolNode` and never produce a `PostToolBatch`
111
- * boundary. `concat` also keeps their `server_tool_use` chunk on the
112
- * accumulated message for the rest of the turn. Together that means a naive
113
- * tool-call gate makes a turn permanently unsealable the moment a web
114
- * search starts, with no later boundary to drain into — the queued message
115
- * waits for the whole turn to finish rather than for the next tool step.
116
- *
117
- * So calls whose paired result block has already landed are treated as
118
- * settled: they cannot be orphaned, because the provider has already
119
- * answered them.
120
- */
121
46
  const settled = settledServerToolCallIds(chunk.content);
122
47
  if (countOpenToolCalls(chunk.tool_calls, settled) > 0) return false;
123
48
  if (countOpenToolCalls(chunk.tool_call_chunks, settled) > 0) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"preempt.mjs","names":[],"sources":["../../../src/llm/preempt.ts"],"sourcesContent":["// src/llm/preempt.ts\nimport type { AIMessageChunk } from '@langchain/core/messages';\nimport { ContentTypes, DEFAULT_MAX_SEALS } from '@/common';\n\n/**\n * Normalizes a host-supplied seal budget.\n *\n * Read in two places that interpret it differently — a numeric comparison in\n * the seal gate and an addition into the recursion limit — so a value like\n * `1.5` would permit two seals while reserving fractional headroom, `NaN`\n * would poison the recursion limit outright, and `Infinity` would remove both\n * bounds at once. Normalizing once keeps the two readings in agreement.\n *\n * `0` is honored as a deliberate \"never seal\"; anything not finite falls back\n * to the default rather than silently disabling the feature.\n */\nexport function resolveMaxSeals(maxSeals: number | undefined): number {\n if (maxSeals == null || !Number.isFinite(maxSeals)) {\n return DEFAULT_MAX_SEALS;\n }\n const whole = Math.floor(maxSeals);\n return whole > 0 ? whole : 0;\n}\n\n/**\n * True when the accumulated content carries at least one non-whitespace text\n * block. `thinking` / `reasoning` blocks deliberately do not count: they are\n * stripped or signed on several providers and cannot stand in for the visible\n * assistant turn a sealed sequence needs.\n */\nfunction hasNonEmptyTextContent(content: AIMessageChunk['content']): boolean {\n if (typeof content === 'string') {\n return content.trim() !== '';\n }\n for (const block of content) {\n if (block.type !== ContentTypes.TEXT) {\n continue;\n }\n const text = block[ContentTypes.TEXT];\n if (typeof text === 'string' && text.trim() !== '') {\n return true;\n }\n }\n return false;\n}\n\n/**\n * True while a Gemini server-side tool call is still awaiting its response.\n *\n * Google's server-side tools (Search, URL context) never populate\n * `tool_calls` or `tool_call_chunks` — those are derived from `functionCall`\n * parts only, while a server-side invocation arrives as a `toolCall` CONTENT\n * block and its result as a later `toolResponse` block. The tool-call gates\n * cannot see it, so sealing between the two would replay a model turn holding\n * an unanswered server-side call.\n *\n * Counted rather than id-matched: Google answers calls in order, and counting\n * stays correct when a part omits its id.\n */\nfunction hasOpenGoogleServerToolCall(\n content: AIMessageChunk['content']\n): boolean {\n if (typeof content === 'string') {\n return false;\n }\n let calls = 0;\n let responses = 0;\n for (const block of content) {\n if (block.type === 'toolCall') {\n calls += 1;\n } else if (block.type === 'toolResponse') {\n responses += 1;\n }\n }\n return calls > responses;\n}\n\n/**\n * Ids of Anthropic server-side tool calls whose paired result block is already\n * on the accumulated content. Those calls are answered and cannot be orphaned\n * by a seal.\n */\nfunction settledServerToolCallIds(\n content: AIMessageChunk['content']\n): Set<string> {\n const settled = new Set<string>();\n if (typeof content === 'string') {\n return settled;\n }\n for (const block of content) {\n if (block.type !== 'web_search_tool_result') {\n continue;\n }\n const id = block.tool_use_id;\n if (typeof id === 'string') {\n settled.add(id);\n }\n }\n return settled;\n}\n\n/** Tool calls still awaiting an answer, ignoring ones already settled. */\nfunction countOpenToolCalls(\n calls: ReadonlyArray<{ id?: string }> | undefined,\n settled: Set<string>\n): number {\n if (calls == null || calls.length === 0) {\n return 0;\n }\n if (settled.size === 0) {\n return calls.length;\n }\n let open = 0;\n for (const call of calls) {\n if (call.id == null || !settled.has(call.id)) {\n open += 1;\n }\n }\n return open;\n}\n\n/**\n * Cooperative mid-generation seal gate. Returns true ONLY when sealing here\n * yields a message sequence valid on EVERY supported provider:\n * - non-whitespace TEXT content, so the FIRST injected user turn is preceded\n * by a non-empty assistant turn — no empty-content 400s. Note this says\n * nothing about adjacency AMONG several injected turns: a boundary that\n * drains two steers emits two consecutive user messages, which strict\n * providers reject. That is normalized at the provider-facing hop by\n * `coalesceAdjacentUserTurns`, not here;\n * - no tool call in flight, so no `tool_use` can be orphaned AND no eagerly\n * prestarted execution can be stripped out from under the model.\n *\n * Anthropic's server-side tools need no check of their own. Every\n * `server_tool_use` content block also emits a `tool_call_chunk`\n * (`_makeMessageChunkFromAnthropicEvent`), and `concat` keeps that chunk on\n * the accumulated message for the remainder of the turn, so the tool-call\n * gates below already cover it. The practical consequence is worth stating\n * plainly: once a turn starts a web search it is no longer preemptible, and\n * a queued message waits for the ordinary tool boundary instead.\n *\n * Nothing is stripped and nothing is repaired: when the accumulated shape is\n * not already safe the stream simply runs on, and whatever the host queued\n * lands at the next tool boundary instead. Chunks accumulate monotonically\n * through `concat`, so an unsafe shape can never be observed at a seal point.\n */\nexport function canSealPreempt(chunk: AIMessageChunk | undefined): boolean {\n if (chunk == null) {\n return false;\n }\n /**\n * Anthropic's server-side tools run inside the provider, so unlike a client\n * tool they never reach `ToolNode` and never produce a `PostToolBatch`\n * boundary. `concat` also keeps their `server_tool_use` chunk on the\n * accumulated message for the rest of the turn. Together that means a naive\n * tool-call gate makes a turn permanently unsealable the moment a web\n * search starts, with no later boundary to drain into — the queued message\n * waits for the whole turn to finish rather than for the next tool step.\n *\n * So calls whose paired result block has already landed are treated as\n * settled: they cannot be orphaned, because the provider has already\n * answered them.\n */\n const settled = settledServerToolCallIds(chunk.content);\n if (countOpenToolCalls(chunk.tool_calls, settled) > 0) {\n return false;\n }\n if (countOpenToolCalls(chunk.tool_call_chunks, settled) > 0) {\n return false;\n }\n if ((chunk.invalid_tool_calls?.length ?? 0) > 0) {\n return false;\n }\n if (hasOpenGoogleServerToolCall(chunk.content)) {\n return false;\n }\n return hasNonEmptyTextContent(chunk.content);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,SAAgB,gBAAgB,UAAsC;CACpE,IAAI,YAAY,QAAQ,CAAC,OAAO,SAAS,QAAQ,GAC/C,OAAA;CAEF,MAAM,QAAQ,KAAK,MAAM,QAAQ;CACjC,OAAO,QAAQ,IAAI,QAAQ;AAC7B;;;;;;;AAQA,SAAS,uBAAuB,SAA6C;CAC3E,IAAI,OAAO,YAAY,UACrB,OAAO,QAAQ,KAAK,MAAM;CAE5B,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,MAAM,SAAA,QACR;EAEF,MAAM,OAAO,MAAA;EACb,IAAI,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM,IAC9C,OAAO;CAEX;CACA,OAAO;AACT;;;;;;;;;;;;;;AAeA,SAAS,4BACP,SACS;CACT,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,IAAI,QAAQ;CACZ,IAAI,YAAY;CAChB,KAAK,MAAM,SAAS,SAClB,IAAI,MAAM,SAAS,YACjB,SAAS;MACJ,IAAI,MAAM,SAAS,gBACxB,aAAa;CAGjB,OAAO,QAAQ;AACjB;;;;;;AAOA,SAAS,yBACP,SACa;CACb,MAAM,0BAAU,IAAI,IAAY;CAChC,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,MAAM,SAAS,0BACjB;EAEF,MAAM,KAAK,MAAM;EACjB,IAAI,OAAO,OAAO,UAChB,QAAQ,IAAI,EAAE;CAElB;CACA,OAAO;AACT;;AAGA,SAAS,mBACP,OACA,SACQ;CACR,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO;CAET,IAAI,QAAQ,SAAS,GACnB,OAAO,MAAM;CAEf,IAAI,OAAO;CACX,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,MAAM,QAAQ,CAAC,QAAQ,IAAI,KAAK,EAAE,GACzC,QAAQ;CAGZ,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,SAAgB,eAAe,OAA4C;CACzE,IAAI,SAAS,MACX,OAAO;;;;;;;;;;;;;;CAeT,MAAM,UAAU,yBAAyB,MAAM,OAAO;CACtD,IAAI,mBAAmB,MAAM,YAAY,OAAO,IAAI,GAClD,OAAO;CAET,IAAI,mBAAmB,MAAM,kBAAkB,OAAO,IAAI,GACxD,OAAO;CAET,KAAK,MAAM,oBAAoB,UAAU,KAAK,GAC5C,OAAO;CAET,IAAI,4BAA4B,MAAM,OAAO,GAC3C,OAAO;CAET,OAAO,uBAAuB,MAAM,OAAO;AAC7C"}
1
+ {"version":3,"file":"preempt.mjs","names":[],"sources":["../../../src/llm/preempt.ts"],"mappings":";;;;AAgBA,SAAgB,gBAAgB,UAAsC;CACpE,IAAI,YAAY,QAAQ,CAAC,OAAO,SAAS,QAAQ,GAC/C,OAAA;CAEF,MAAM,QAAQ,KAAK,MAAM,QAAQ;CACjC,OAAO,QAAQ,IAAI,QAAQ;AAC7B;AAQA,SAAS,uBAAuB,SAA6C;CAC3E,IAAI,OAAO,YAAY,UACrB,OAAO,QAAQ,KAAK,MAAM;CAE5B,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,MAAM,SAAA,QACR;EAEF,MAAM,OAAO,MAAA;EACb,IAAI,OAAO,SAAS,YAAY,KAAK,KAAK,MAAM,IAC9C,OAAO;CAEX;CACA,OAAO;AACT;AAeA,SAAS,4BACP,SACS;CACT,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,IAAI,QAAQ;CACZ,IAAI,YAAY;CAChB,KAAK,MAAM,SAAS,SAClB,IAAI,MAAM,SAAS,YACjB,SAAS;MACJ,IAAI,MAAM,SAAS,gBACxB,aAAa;CAGjB,OAAO,QAAQ;AACjB;AAOA,SAAS,yBACP,SACa;CACb,MAAM,0BAAU,IAAI,IAAY;CAChC,IAAI,OAAO,YAAY,UACrB,OAAO;CAET,KAAK,MAAM,SAAS,SAAS;EAC3B,IAAI,MAAM,SAAS,0BACjB;EAEF,MAAM,KAAK,MAAM;EACjB,IAAI,OAAO,OAAO,UAChB,QAAQ,IAAI,EAAE;CAElB;CACA,OAAO;AACT;AAGA,SAAS,mBACP,OACA,SACQ;CACR,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO;CAET,IAAI,QAAQ,SAAS,GACnB,OAAO,MAAM;CAEf,IAAI,OAAO;CACX,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,MAAM,QAAQ,CAAC,QAAQ,IAAI,KAAK,EAAE,GACzC,QAAQ;CAGZ,OAAO;AACT;AA2BA,SAAgB,eAAe,OAA4C;CACzE,IAAI,SAAS,MACX,OAAO;CAeT,MAAM,UAAU,yBAAyB,MAAM,OAAO;CACtD,IAAI,mBAAmB,MAAM,YAAY,OAAO,IAAI,GAClD,OAAO;CAET,IAAI,mBAAmB,MAAM,kBAAkB,OAAO,IAAI,GACxD,OAAO;CAET,KAAK,MAAM,oBAAoB,UAAU,KAAK,GAC5C,OAAO;CAET,IAAI,4BAA4B,MAAM,OAAO,GAC3C,OAAO;CAET,OAAO,uBAAuB,MAAM,OAAO;AAC7C"}
@@ -1 +1 @@
1
- {"version":3,"file":"providers.mjs","names":[],"sources":["../../../src/llm/providers.ts"],"sourcesContent":["// src/llm/providers.ts\nimport { CustomChatMistralAI } from '@/llm/mistral';\nimport type {\n ChatModelConstructorMap,\n ProviderOptionsMap,\n ChatModelMap,\n} from '@/types';\nimport {\n AzureChatOpenAI,\n ChatDeepSeek,\n ChatMoonshot,\n ChatOpenAI,\n ChatXAI,\n} from '@/llm/openai';\nimport { CustomChatGoogleGenerativeAI } from '@/llm/google';\nimport { CustomChatBedrockConverse } from '@/llm/bedrock';\nimport { CustomAnthropic } from '@/llm/anthropic';\nimport { ChatOpenRouter } from '@/llm/openrouter';\nimport { ChatVertexAI } from '@/llm/vertexai';\nimport { Providers } from '@/common';\n\nexport const llmProviders: Partial<ChatModelConstructorMap> = {\n [Providers.XAI]: ChatXAI,\n [Providers.OPENAI]: ChatOpenAI,\n [Providers.AZURE]: AzureChatOpenAI,\n [Providers.VERTEXAI]: ChatVertexAI,\n [Providers.DEEPSEEK]: ChatDeepSeek,\n [Providers.MISTRALAI]: CustomChatMistralAI,\n [Providers.MISTRAL]: CustomChatMistralAI,\n [Providers.ANTHROPIC]: CustomAnthropic,\n [Providers.OPENROUTER]: ChatOpenRouter,\n [Providers.BEDROCK]: CustomChatBedrockConverse,\n // [Providers.ANTHROPIC]: ChatAnthropic,\n [Providers.GOOGLE]: CustomChatGoogleGenerativeAI,\n [Providers.MOONSHOT]: ChatMoonshot,\n};\n\nexport const manualToolStreamProviders = new Set<Providers | string>([\n Providers.ANTHROPIC,\n Providers.BEDROCK,\n]);\n\nexport const getChatModelClass = <P extends Providers>(\n provider: P\n): new (config: ProviderOptionsMap[P]) => ChatModelMap[P] => {\n const ChatModelClass = llmProviders[provider];\n if (!ChatModelClass) {\n throw new Error(`Unsupported LLM provider: ${provider}`);\n }\n\n return ChatModelClass;\n};\n"],"mappings":";;;;;;;;;;AAqBA,MAAa,eAAiD;UAC3C;aACG;kBACD;eACG;eACA;gBACC;cACF;gBACE;iBACC;cACH;aAED;eACE;AACxB;AAEA,MAAa,4BAA4B,IAAI,IAAwB,CAAA,aAAA,SAGrE,CAAC;AAED,MAAa,qBACX,aAC2D;CAC3D,MAAM,iBAAiB,aAAa;CACpC,IAAI,CAAC,gBACH,MAAM,IAAI,MAAM,6BAA6B,UAAU;CAGzD,OAAO;AACT"}
1
+ {"version":3,"file":"providers.mjs","names":[],"sources":["../../../src/llm/providers.ts"],"mappings":";;;;;;;;;;AAqBA,MAAa,eAAiD;UAC3C;aACG;kBACD;eACG;eACA;gBACC;cACF;gBACE;iBACC;cACH;aAED;eACE;AACxB;AAEA,MAAa,4BAA4B,IAAI,IAAwB,CAAA,aAAA,SAGrE,CAAC;AAED,MAAa,qBACX,aAC2D;CAC3D,MAAM,iBAAiB,aAAa;CACpC,IAAI,CAAC,gBACH,MAAM,IAAI,MAAM,6BAA6B,UAAU;CAGzD,OAAO;AACT"}
@@ -1,11 +1,6 @@
1
1
  import "../common/enum.mjs";
2
2
  import "../common/index.mjs";
3
3
  //#region src/llm/request.ts
4
- /**
5
- * Returns true when the provider + clientOptions indicate extended thinking
6
- * is enabled. Works across Anthropic (direct), Bedrock (additionalModelRequestFields),
7
- * and OpenAI-compat (modelKwargs.thinking).
8
- */
9
4
  function isThinkingEnabled(provider, clientOptions) {
10
5
  if (!clientOptions) return false;
11
6
  if (provider === "anthropic" && clientOptions.thinking != null) return true;
@@ -13,11 +8,6 @@ function isThinkingEnabled(provider, clientOptions) {
13
8
  if (provider === "openAI" && (clientOptions.modelKwargs?.thinking)?.type === "enabled") return true;
14
9
  return false;
15
10
  }
16
- /**
17
- * Returns the correct key for setting max output tokens on the model
18
- * constructor options. Google/Vertex use `maxOutputTokens`, all others
19
- * use `maxTokens`.
20
- */
21
11
  function getMaxOutputTokensKey(provider) {
22
12
  return provider === "google" || provider === "vertexai" ? "maxOutputTokens" : "maxTokens";
23
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"request.mjs","names":[],"sources":["../../../src/llm/request.ts"],"sourcesContent":["import type * as t from '@/types';\nimport { Providers } from '@/common';\n\n/**\n * Returns true when the provider + clientOptions indicate extended thinking\n * is enabled. Works across Anthropic (direct), Bedrock (additionalModelRequestFields),\n * and OpenAI-compat (modelKwargs.thinking).\n */\nexport function isThinkingEnabled(\n provider: Providers,\n clientOptions?: t.ClientOptions\n): boolean {\n if (!clientOptions) return false;\n\n if (\n provider === Providers.ANTHROPIC &&\n (clientOptions as t.AnthropicClientOptions).thinking != null\n ) {\n return true;\n }\n\n if (\n provider === Providers.BEDROCK &&\n (clientOptions as t.BedrockAnthropicInput).additionalModelRequestFields?.[\n 'thinking'\n ] != null\n ) {\n return true;\n }\n\n if (\n provider === Providers.OPENAI &&\n (\n (clientOptions as t.OpenAIClientOptions).modelKwargs\n ?.thinking as t.AnthropicClientOptions['thinking']\n )?.type === 'enabled'\n ) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Returns the correct key for setting max output tokens on the model\n * constructor options. Google/Vertex use `maxOutputTokens`, all others\n * use `maxTokens`.\n */\nexport function getMaxOutputTokensKey(\n provider: Providers | string\n): 'maxOutputTokens' | 'maxTokens' {\n return provider === Providers.GOOGLE || provider === Providers.VERTEXAI\n ? 'maxOutputTokens'\n : 'maxTokens';\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,kBACd,UACA,eACS;CACT,IAAI,CAAC,eAAe,OAAO;CAE3B,IACE,aAAA,eACC,cAA2C,YAAY,MAExD,OAAO;CAGT,IACE,aAAA,aACC,cAA0C,+BACzC,eACG,MAEL,OAAO;CAGT,IACE,aAAA,aAEG,cAAwC,aACrC,SAAA,EACH,SAAS,WAEZ,OAAO;CAGT,OAAO;AACT;;;;;;AAOA,SAAgB,sBACd,UACiC;CACjC,OAAO,aAAA,YAAiC,aAAA,aACpC,oBACA;AACN"}
1
+ {"version":3,"file":"request.mjs","names":[],"sources":["../../../src/llm/request.ts"],"mappings":";;;AAQA,SAAgB,kBACd,UACA,eACS;CACT,IAAI,CAAC,eAAe,OAAO;CAE3B,IACE,aAAA,eACC,cAA2C,YAAY,MAExD,OAAO;CAGT,IACE,aAAA,aACC,cAA0C,+BACzC,eACG,MAEL,OAAO;CAGT,IACE,aAAA,aAEG,cAAwC,aACrC,SAAA,EACH,SAAS,WAEZ,OAAO;CAGT,OAAO;AACT;AAOA,SAAgB,sBACd,UACiC;CACjC,OAAO,aAAA,YAAiC,aAAA,aACpC,oBACA;AACN"}
@@ -2,14 +2,6 @@ import { smoothStream } from "./smoother.mjs";
2
2
  import { AIMessageChunk } from "@langchain/core/messages";
3
3
  import { ChatGenerationChunk } from "@langchain/core/outputs";
4
4
  //#region src/llm/stream/chunkAdapters.ts
5
- /**
6
- * Rebuilds a generation chunk carrying one piece of a split plain-text chunk.
7
- * Unsplit pieces return the original chunk untouched, so disabled smoothing is
8
- * byte-identical to no smoothing. Usage metadata, additional kwargs and
9
- * response metadata survive only on the first piece: the aggregator merges
10
- * dicts by concatenating string fields, so replicating them across pieces
11
- * would duplicate reasoning text and scalar metadata once per piece.
12
- */
13
5
  function cloneGenerationChunkPiece(chunk, piece) {
14
6
  if (piece.isFirst && piece.isLast) return chunk;
15
7
  const message = chunk.message;
@@ -29,15 +21,6 @@ const SPLITTABLE_TEXT_PART_KEYS = new Set([
29
21
  "text",
30
22
  "index"
31
23
  ]);
32
- /**
33
- * Returns the sole plain text part of a single-element complex content array
34
- * (the shape google-common emits for text deltas), or null when the part
35
- * carries anything beyond `type`/`text`/`index` (thought signatures, media,
36
- * function calls) and must not be sliced. The part must carry a numeric
37
- * `index`: it is the aggregator's list-merge key, and without it each split
38
- * piece would append as a separate content part instead of merging back
39
- * into one — index-less parts pace whole instead.
40
- */
41
24
  function getSplittableTextPart(message, chunkText) {
42
25
  const content = message.content;
43
26
  if (!Array.isArray(content) || content.length !== 1) return null;
@@ -64,25 +47,6 @@ function clonePartGenerationChunkPiece(chunk, part, piece) {
64
47
  }))
65
48
  });
66
49
  }
67
- /**
68
- * Provider-agnostic classification of a `ChatGenerationChunk` for the
69
- * smoothing engine:
70
- * - splittable: plain visible text — string content equal to `chunk.text`, or
71
- * a single plain text part (google-common's delta shape) — with no
72
- * logprobs / finish_reason; sliced adaptively at the pacing cadence.
73
- * - atomic: any other text-bearing chunk (complex content arrays, logprobs,
74
- * finish_reason, provider-specific reasoning payloads surfaced via
75
- * `getAtomicText`) — paced as one piece, never split.
76
- * - passthrough: tool-call deltas, usage-only and metadata chunks — strict
77
- * FIFO, zero delay.
78
- */
79
- /**
80
- * google-common stamps `logprobs: { content: [] }` on every chunk, so only
81
- * logprobs that actually carry data may block splitting here. This is looser
82
- * than the OpenAI-family adapter in `llm/openai/index.ts`, which treats ANY
83
- * logprobs as atomic (its providers only attach logprobs when requested, and
84
- * the DeepSeek suite pins that contract) — do not unify the two predicates.
85
- */
86
50
  function hasMeaningfulLogprobs(generationInfo) {
87
51
  const logprobs = generationInfo?.logprobs;
88
52
  if (logprobs == null) return false;
@@ -90,23 +54,9 @@ function hasMeaningfulLogprobs(generationInfo) {
90
54
  if (Array.isArray(content)) return content.length > 0;
91
55
  return true;
92
56
  }
93
- /** google-common reports the terminal reason camelCase (`finishReason`). */
94
57
  function hasFinishReason(generationInfo) {
95
58
  return generationInfo?.finish_reason != null || generationInfo?.finishReason != null;
96
59
  }
97
- /**
98
- * Chunks that pair visible text with reasoning payloads in
99
- * `additional_kwargs` (Gemini thought summaries, reasoning_content deltas,
100
- * OpenRouter reasoning_details) must pace whole: split pieces would each
101
- * carry the same kwargs and downstream merging — the aggregator's dict merge
102
- * or OpenRouter's reasoning_details accumulation — duplicates them once per
103
- * piece.
104
- */
105
- /**
106
- * Mixed text/tool-call deltas must never split: cloned pieces would each
107
- * carry the same tool_call_chunks and downstream accumulation would corrupt
108
- * the assembled tool arguments.
109
- */
110
60
  function hasToolCallChunks(message) {
111
61
  return (message.tool_call_chunks?.length ?? 0) > 0;
112
62
  }
@@ -116,12 +66,6 @@ function hasReasoningKwargs(message) {
116
66
  if (Array.isArray(kwargs.reasoning_details) && kwargs.reasoning_details.length > 0) return true;
117
67
  return kwargs.reasoning != null;
118
68
  }
119
- /**
120
- * Extracts the visible reasoning text a kwargs-borne delta contributes, so
121
- * reasoning-only chunks (Gemini thoughts, DeepSeek reasoning_content,
122
- * OpenAI reasoning summaries, OpenRouter reasoning_details) pace atomically
123
- * at the cadence instead of passing through unsmoothed.
124
- */
125
69
  function getReasoningKwargsText(message) {
126
70
  const kwargs = message.additional_kwargs;
127
71
  if (typeof kwargs.reasoning_content === "string" && kwargs.reasoning_content !== "") return kwargs.reasoning_content;
@@ -170,12 +114,6 @@ function toGenerationSmoothItem(chunk, getAtomicText) {
170
114
  emit: () => chunk
171
115
  };
172
116
  }
173
- /**
174
- * Wraps a provider's raw chunk stream with adaptive smoothing and per-piece
175
- * `handleLLMNewToken` dispatch. The raw stream must NOT dispatch runManager
176
- * callbacks itself — callback-echo consumers would otherwise observe the
177
- * unsmoothed deltas.
178
- */
179
117
  async function* smoothGenerationChunks({ chunks, delayMs, signal, runManager }) {
180
118
  const source = (async function* () {
181
119
  for await (const chunk of chunks) yield toGenerationSmoothItem(chunk, getReasoningKwargsText);
@@ -1 +1 @@
1
- {"version":3,"file":"chunkAdapters.mjs","names":[],"sources":["../../../../src/llm/stream/chunkAdapters.ts"],"sourcesContent":["import { AIMessageChunk } from '@langchain/core/messages';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { SmoothItem, SmoothPiece } from '@/llm/stream/smoother';\nimport { smoothStream } from '@/llm/stream/smoother';\n\n/**\n * Rebuilds a generation chunk carrying one piece of a split plain-text chunk.\n * Unsplit pieces return the original chunk untouched, so disabled smoothing is\n * byte-identical to no smoothing. Usage metadata, additional kwargs and\n * response metadata survive only on the first piece: the aggregator merges\n * dicts by concatenating string fields, so replicating them across pieces\n * would duplicate reasoning text and scalar metadata once per piece.\n */\nexport function cloneGenerationChunkPiece(\n chunk: ChatGenerationChunk,\n piece: SmoothPiece\n): ChatGenerationChunk {\n if (piece.isFirst && piece.isLast) {\n return chunk;\n }\n const message = chunk.message as AIMessageChunk;\n return new ChatGenerationChunk({\n text: piece.text,\n generationInfo: piece.isFirst ? chunk.generationInfo : undefined,\n message: new AIMessageChunk(\n Object.assign({}, message, {\n content: piece.text,\n usage_metadata: piece.isFirst ? message.usage_metadata : undefined,\n additional_kwargs: piece.isFirst ? message.additional_kwargs : {},\n response_metadata: piece.isFirst ? message.response_metadata : {},\n })\n ),\n });\n}\n\nconst SPLITTABLE_TEXT_PART_KEYS: ReadonlySet<string> = new Set([\n 'type',\n 'text',\n 'index',\n]);\n\n/**\n * Returns the sole plain text part of a single-element complex content array\n * (the shape google-common emits for text deltas), or null when the part\n * carries anything beyond `type`/`text`/`index` (thought signatures, media,\n * function calls) and must not be sliced. The part must carry a numeric\n * `index`: it is the aggregator's list-merge key, and without it each split\n * piece would append as a separate content part instead of merging back\n * into one — index-less parts pace whole instead.\n */\nfunction getSplittableTextPart(\n message: AIMessageChunk,\n chunkText: string\n): Record<string, unknown> | null {\n const content = message.content;\n if (!Array.isArray(content) || content.length !== 1) {\n return null;\n }\n const part: unknown = content[0];\n if (part == null || typeof part !== 'object') {\n return null;\n }\n const record = part as Record<string, unknown>;\n if (typeof record.text !== 'string' || record.text !== chunkText) {\n return null;\n }\n if (record.type != null && record.type !== 'text') {\n return null;\n }\n if (typeof record.index !== 'number') {\n return null;\n }\n if (!Object.keys(record).every((key) => SPLITTABLE_TEXT_PART_KEYS.has(key))) {\n return null;\n }\n return record;\n}\n\nfunction clonePartGenerationChunkPiece(\n chunk: ChatGenerationChunk,\n part: Record<string, unknown>,\n piece: SmoothPiece\n): ChatGenerationChunk {\n if (piece.isFirst && piece.isLast) {\n return chunk;\n }\n const message = chunk.message as AIMessageChunk;\n return new ChatGenerationChunk({\n text: piece.text,\n generationInfo: piece.isFirst ? chunk.generationInfo : undefined,\n message: new AIMessageChunk(\n Object.assign({}, message, {\n content: [Object.assign({}, part, { text: piece.text })],\n usage_metadata: piece.isFirst ? message.usage_metadata : undefined,\n additional_kwargs: piece.isFirst ? message.additional_kwargs : {},\n response_metadata: piece.isFirst ? message.response_metadata : {},\n })\n ),\n });\n}\n\n/**\n * Provider-agnostic classification of a `ChatGenerationChunk` for the\n * smoothing engine:\n * - splittable: plain visible text — string content equal to `chunk.text`, or\n * a single plain text part (google-common's delta shape) — with no\n * logprobs / finish_reason; sliced adaptively at the pacing cadence.\n * - atomic: any other text-bearing chunk (complex content arrays, logprobs,\n * finish_reason, provider-specific reasoning payloads surfaced via\n * `getAtomicText`) — paced as one piece, never split.\n * - passthrough: tool-call deltas, usage-only and metadata chunks — strict\n * FIFO, zero delay.\n */\n/**\n * google-common stamps `logprobs: { content: [] }` on every chunk, so only\n * logprobs that actually carry data may block splitting here. This is looser\n * than the OpenAI-family adapter in `llm/openai/index.ts`, which treats ANY\n * logprobs as atomic (its providers only attach logprobs when requested, and\n * the DeepSeek suite pins that contract) — do not unify the two predicates.\n */\nfunction hasMeaningfulLogprobs(\n generationInfo: ChatGenerationChunk['generationInfo']\n): boolean {\n const logprobs = generationInfo?.logprobs;\n if (logprobs == null) {\n return false;\n }\n const content = (logprobs as { content?: unknown }).content;\n if (Array.isArray(content)) {\n return content.length > 0;\n }\n return true;\n}\n\n/** google-common reports the terminal reason camelCase (`finishReason`). */\nfunction hasFinishReason(\n generationInfo: ChatGenerationChunk['generationInfo']\n): boolean {\n return (\n generationInfo?.finish_reason != null || generationInfo?.finishReason != null\n );\n}\n\n/**\n * Chunks that pair visible text with reasoning payloads in\n * `additional_kwargs` (Gemini thought summaries, reasoning_content deltas,\n * OpenRouter reasoning_details) must pace whole: split pieces would each\n * carry the same kwargs and downstream merging — the aggregator's dict merge\n * or OpenRouter's reasoning_details accumulation — duplicates them once per\n * piece.\n */\n/**\n * Mixed text/tool-call deltas must never split: cloned pieces would each\n * carry the same tool_call_chunks and downstream accumulation would corrupt\n * the assembled tool arguments.\n */\nexport function hasToolCallChunks(message: AIMessageChunk): boolean {\n return (message.tool_call_chunks?.length ?? 0) > 0;\n}\n\nexport function hasReasoningKwargs(message: AIMessageChunk): boolean {\n const kwargs = message.additional_kwargs;\n if (\n typeof kwargs.reasoning_content === 'string' &&\n kwargs.reasoning_content !== ''\n ) {\n return true;\n }\n if (\n Array.isArray(kwargs.reasoning_details) &&\n kwargs.reasoning_details.length > 0\n ) {\n return true;\n }\n return kwargs.reasoning != null;\n}\n\n/**\n * Extracts the visible reasoning text a kwargs-borne delta contributes, so\n * reasoning-only chunks (Gemini thoughts, DeepSeek reasoning_content,\n * OpenAI reasoning summaries, OpenRouter reasoning_details) pace atomically\n * at the cadence instead of passing through unsmoothed.\n */\nexport function getReasoningKwargsText(message: AIMessageChunk): string {\n const kwargs = message.additional_kwargs;\n if (\n typeof kwargs.reasoning_content === 'string' &&\n kwargs.reasoning_content !== ''\n ) {\n return kwargs.reasoning_content;\n }\n const reasoning = kwargs.reasoning;\n if (typeof reasoning === 'string' && reasoning !== '') {\n return reasoning;\n }\n if (reasoning != null && typeof reasoning === 'object') {\n const summaryText = (\n reasoning as { summary?: { text?: unknown }[] }\n ).summary?.[0]?.text;\n if (typeof summaryText === 'string' && summaryText !== '') {\n return summaryText;\n }\n }\n const details = kwargs.reasoning_details;\n if (Array.isArray(details)) {\n let text = '';\n for (const detail of details) {\n if (detail != null && typeof detail === 'object') {\n const detailText = (detail as { text?: unknown }).text;\n if (typeof detailText === 'string') {\n text += detailText;\n }\n }\n }\n if (text !== '') {\n return text;\n }\n }\n return '';\n}\n\nexport function toGenerationSmoothItem(\n chunk: ChatGenerationChunk,\n getAtomicText?: (message: AIMessageChunk) => string\n): SmoothItem<ChatGenerationChunk> {\n const { message } = chunk;\n const isMessageChunk = message instanceof AIMessageChunk;\n const cleanGenerationInfo =\n !hasMeaningfulLogprobs(chunk.generationInfo) &&\n !hasFinishReason(chunk.generationInfo);\n const splittable =\n Boolean(chunk.text) &&\n isMessageChunk &&\n typeof message.content === 'string' &&\n message.content === chunk.text &&\n cleanGenerationInfo &&\n !hasReasoningKwargs(message) &&\n !hasToolCallChunks(message);\n\n if (splittable) {\n return {\n text: chunk.text,\n smooth: true,\n emit: (piece) => cloneGenerationChunkPiece(chunk, piece),\n };\n }\n\n const splittablePart =\n Boolean(chunk.text) &&\n isMessageChunk &&\n cleanGenerationInfo &&\n !hasReasoningKwargs(message) &&\n !hasToolCallChunks(message)\n ? getSplittableTextPart(message, chunk.text)\n : null;\n if (splittablePart != null) {\n return {\n text: chunk.text,\n smooth: true,\n emit: (piece) =>\n clonePartGenerationChunkPiece(chunk, splittablePart, piece),\n };\n }\n\n const pacedText =\n chunk.text ||\n (isMessageChunk && getAtomicText != null ? getAtomicText(message) : '');\n if (pacedText !== '') {\n return {\n text: pacedText,\n smooth: true,\n atomic: true,\n emit: () => chunk,\n };\n }\n\n return { text: '', smooth: false, emit: () => chunk };\n}\n\n/**\n * Wraps a provider's raw chunk stream with adaptive smoothing and per-piece\n * `handleLLMNewToken` dispatch. The raw stream must NOT dispatch runManager\n * callbacks itself — callback-echo consumers would otherwise observe the\n * unsmoothed deltas.\n */\nexport async function* smoothGenerationChunks({\n chunks,\n delayMs,\n signal,\n runManager,\n}: {\n chunks: AsyncGenerator<ChatGenerationChunk>;\n delayMs: number;\n signal?: AbortSignal;\n runManager?: CallbackManagerForLLMRun;\n}): AsyncGenerator<ChatGenerationChunk> {\n const source = (async function* (): AsyncGenerator<\n SmoothItem<ChatGenerationChunk>\n > {\n for await (const chunk of chunks) {\n yield toGenerationSmoothItem(chunk, getReasoningKwargsText);\n }\n })();\n\n for await (const outputChunk of smoothStream({ source, delayMs, signal })) {\n yield outputChunk;\n await runManager?.handleLLMNewToken(\n outputChunk.text || '',\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: outputChunk }\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"chunkAdapters.mjs","names":[],"sources":["../../../../src/llm/stream/chunkAdapters.ts"],"mappings":"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"}