@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 +1 @@
1
- {"version":3,"file":"index.cjs","names":["ChatOpenAI","emitStreamChunkCallback"],"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":";;;AAoFA,SAAS,sBACP,OACwC;CACxC,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAS,2BACP,OAC6C;CAC7C,OACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,MAAM,SAAS;AAEnB;AAEA,SAAS,oBAAoB,OAA6C;CACxE,IAAI,CAAC,MAAM,QAAQ,KAAK,GACtB,OAAO,CAAC;CAEV,OAAO,MAAM,QACV,WACC,sBAAsB,MAAM,KAAK,2BAA2B,MAAM,CACtE;AACF;AAEA,IAAa,iBAAb,cAAoCA,cAAAA,WAAW;CAC7C;;CAEA;CAEA,YAAY,SAA8B;EACxC,MAAM,2BAAgD,EAAE,GAAG,QAAQ;EACnE,OAAO,yBAAyB;EAChC,OAAO,yBAAyB;EAEhC,MAAM,EACJ,mBACA,WAAW,qBACX,cAAc,CAAC,GACf,GAAG,WACD;EAGJ,MAAM,EAAE,WAAW,aAAa,GAAG,oBAAoB;EAGvD,MAAM,kBACJ,eAAe,QAAQ,uBAAuB,OAC1C;GACA,GAAG;GACH,GAAG;EACL,IACE,KAAA;EACN,MAAM,mBACJ,oBACC,sBAAsB,OAAO,EAAE,SAAS,KAAK,IAAI,KAAA;EACpD,MAAM,oBACJ,oBAAoB,OAChB,kBACA;GAAE,GAAG;GAAiB,WAAW;EAAiB;EAExD,MAAM;GACJ,GAAG;GACH,aAAa;GACb,yBAAyB;GACzB,kCAAkC;GAClC,0BAA0B;GAC1B,sBAAsB,QAAQ;GAC9B,yBAAyB,QAAQ;EACnC,CAAC;EAGD,IAAI,mBAAmB,MACrB,KAAK,sBAAsB;EAG7B,KAAK,mBAAmB;CAC1B;CACA,OAAO,UAAiC;EACtC,OAAO;CACT;CAGA,iBACE,SACA,OAC4B;EAU5B,MAAM,sBAAsB,KAAK,oBAAoB,OAAO;EAE5D,MAAM,SADkB,KAAK,iBAAiB,OAE9B,IACV,KAAK,UAAU,iBAAiB,mBAAmB,IACnD,KAAK,YAAY,iBAAiB,qBAAqB,KAAK;EAKlE,OAAO,OAAO;EAGd,MAAM,YAAY,KAAK,yBAAyB,mBAAmB;EACnE,IAAI,aAAa,MACf,OAAO,YAAY;OAEnB,OAAO,OAAO;EAGhB,OAAO;CACT;CAEA,yBACE,SACiC;EACjC,IAAI;EAGJ,IAAI,KAAK,uBAAuB,MAC9B,YAAY,EAAE,GAAG,KAAK,oBAAoB;EAI5C,MAAM,cAAc,KAAK,mBAAmB,OAAO;EACnD,IAAI,aAAa,UAAU,MACzB,YAAY;GACV,GAAG;GACH,QAAQ,YAAY;EACtB;EAIF,MAAM,gBAAiB,SACnB;EACJ,IAAI,iBAAiB,MACnB,YAAY;GAAE,GAAG;GAAW,GAAG;EAAc;EAI/C,IAAI,aAAa,QAAQ,KAAK,qBAAqB,MACjD,YAAY,EAAE,SAAS,KAAK;EAG9B,OAAO;CACT;CAEA,OAAgB,sBACd,UACA,SACA,YACqC;EACrC,MAAM,uCAAuB,IAAI,IAG/B;EACF,MAAM,yCAAyB,IAAI,IAGjC;EAGF,MAAM,qCAAyC,IAAI,IAAI;EAEvD,WAAW,MAAM,mBAAmB,MAAM,yBACxC,UACA,SACA,KAAA,CACF,GAAG;GACD,IAAI,uBAAuB;GAC3B,MAAM,mBAAmB,oBACvB,gBAAgB,QAAQ,kBAAkB,iBAC5C;GAEA,KAAK,MAAM,UAAU,kBAAkB;IACrC,IAAI,OAAO,SAAS,kBAAkB;KACpC,wBAAwB,OAAO,QAAQ;KACvC,MAAM,QAAQ,OAAO,SAAS;KAC9B,MAAM,WAAW,qBAAqB,IAAI,KAAK;KAC/C,IAAI,YAAY,MAAM;MACpB,SAAS,OAAO,GAAG,SAAS,QAAQ,KAAK,OAAO,QAAQ;MACxD;KACF;KACA,qBAAqB,IAAI,OAAO;MAC9B,GAAG;MACH,MAAM,OAAO,QAAQ;KACvB,CAAC;KACD;IACF;IACA,IAAI,OAAO,MAAM,MACf,uBAAuB,IAAI,OAAO,IAAI,EAAE,GAAG,OAAO,CAAC;GAEvD;GAEA,IACE,qBAAqB,SAAS,KAC9B,gBAAgB,QAAQ,kBAAkB,aAAa,MAEvD,gBAAgB,QAAQ,kBAAkB,YACxC;GAGJ,IAAI,gBAAgB,gBAAgB,iBAAiB,MAAM;IACzD,MAAM,wBAAwB,CAC5B,GAAG,qBAAqB,OAAO,GAC/B,GAAG,uBAAuB,OAAO,CACnC;IACA,IAAI,sBAAsB,SAAS,GACjC,gBAAgB,QAAQ,kBAAkB,oBACxC;SAEF,OAAO,gBAAgB,QAAQ,kBAAkB;GAErD,OACE,OAAO,gBAAgB,QAAQ,kBAAkB;GAGnD,uBAAA,2BAA2B,iBAAiB,kBAAkB;GAC9D,MAAMC,cAAAA,wBAAwB,iBAAiB,UAAU;GACzD,MAAM;EACR;CACF;AACF"}
1
+ {"version":3,"file":"index.cjs","names":["ChatOpenAI","emitStreamChunkCallback"],"sources":["../../../../src/llm/openrouter/index.ts"],"mappings":"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"}
@@ -23,12 +23,6 @@ function markCacheControl(tool, ttl) {
23
23
  cache_control: require_cache.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.cjs","names":["_convertToOpenAITool","buildAnthropicCacheControl"],"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,YAAYA,cAAAA,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,eAAeC,cAAAA,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.cjs","names":["_convertToOpenAITool","buildAnthropicCacheControl"],"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,YAAYA,cAAAA,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,eAAeC,cAAAA,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 @@ require("../common/constants.cjs");
2
2
  require("../common/enum.cjs");
3
3
  require("../common/index.cjs");
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.cjs","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.cjs","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.cjs","names":["ChatXAI","ChatOpenAI","AzureChatOpenAI","ChatVertexAI","ChatDeepSeek","CustomChatMistralAI","CustomAnthropic","ChatOpenRouter","CustomChatBedrockConverse","CustomChatGoogleGenerativeAI","ChatMoonshot"],"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;UAC3CA,gBAAAA;aACGC,gBAAAA;kBACDC,gBAAAA;eACGC,gBAAAA;eACAC,gBAAAA;gBACCC,gBAAAA;cACFA,gBAAAA;gBACEC,gBAAAA;iBACCC,gBAAAA;cACHC,gBAAAA;aAEDC,gBAAAA;eACEC,gBAAAA;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.cjs","names":["ChatXAI","ChatOpenAI","AzureChatOpenAI","ChatVertexAI","ChatDeepSeek","CustomChatMistralAI","CustomAnthropic","ChatOpenRouter","CustomChatBedrockConverse","CustomChatGoogleGenerativeAI","ChatMoonshot"],"sources":["../../../src/llm/providers.ts"],"mappings":";;;;;;;;;;AAqBA,MAAa,eAAiD;UAC3CA,gBAAAA;aACGC,gBAAAA;kBACDC,gBAAAA;eACGC,gBAAAA;eACAC,gBAAAA;gBACCC,gBAAAA;cACFA,gBAAAA;gBACEC,gBAAAA;iBACCC,gBAAAA;cACHC,gBAAAA;aAEDC,gBAAAA;eACEC,gBAAAA;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
  require("../common/enum.cjs");
2
2
  require("../common/index.cjs");
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.cjs","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.cjs","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 @@ const require_smoother = require("./smoother.cjs");
2
2
  let _langchain_core_messages = require("@langchain/core/messages");
3
3
  let _langchain_core_outputs = require("@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.cjs","names":["ChatGenerationChunk","AIMessageChunk","smoothStream"],"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.cjs","names":["ChatGenerationChunk","AIMessageChunk","smoothStream"],"sources":["../../../../src/llm/stream/chunkAdapters.ts"],"mappings":"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"}
@@ -11,20 +11,7 @@ const STREAM_BOUNDARIES = new Set([
11
11
  ":"
12
12
  ]);
13
13
  const STREAM_ABORT_MESSAGE = "AbortError: User aborted the request.";
14
- /**
15
- * How long generator teardown waits for the background producer to observe a
16
- * consumer close before abandoning it. Well-behaved streams settle in
17
- * microseconds (the next enqueue throws); a stalled provider that ignores
18
- * aborts otherwise blocks teardown — and abort propagation — indefinitely.
19
- * An abandoned producer still self-terminates on its next enqueue attempt.
20
- */
21
14
  const PRODUCER_CLOSE_GRACE_MS = 1e3;
22
- /**
23
- * Resolves a configured stream delay to its effective value (default 25ms;
24
- * 0 disables smoothing). Non-finite inputs (NaN from a malformed config
25
- * value, ±Infinity) normalize to the default rather than poisoning piece
26
- * arithmetic downstream.
27
- */
28
15
  function resolveStreamDelay(delay) {
29
16
  if (delay == null || !Number.isFinite(delay)) return 25;
30
17
  return Math.max(0, delay);
@@ -38,27 +25,15 @@ function findStreamChunkBoundary(text, minSize) {
38
25
  for (let position = minSize; position < scanEnd; position++) if (STREAM_BOUNDARIES.has(text[position])) return position + 1;
39
26
  return scanEnd;
40
27
  }
41
- /**
42
- * Backlog-proportional piece sizing: emit enough per tick that the current
43
- * backlog drains in ~`targetLatencyMs`, so render lag stays pinned near the
44
- * target regardless of how fast the provider streams. Token-sized arrivals
45
- * never exceed the minimum piece, matching the legacy fixed-size splitter.
46
- */
47
28
  function computeAdaptivePieceSize(bufferedTextLength, tickMs, targetLatencyMs = 250) {
48
29
  if (bufferedTextLength <= 0) return 4;
49
30
  if (tickMs <= 0 || targetLatencyMs <= 0) return bufferedTextLength;
50
31
  return Math.max(4, Math.ceil(bufferedTextLength * tickMs / targetLatencyMs));
51
32
  }
52
- /**
53
- * A cadence, not an additive sleep: time the consumer already spent since the
54
- * last visible emission counts against the target delay, so slow downstream
55
- * handlers never compound latency.
56
- */
57
33
  function getCadencedStreamDelay({ targetDelay, lastVisibleTextAt, now }) {
58
34
  if (targetDelay <= 0 || lastVisibleTextAt == null) return 0;
59
35
  return Math.max(0, targetDelay - (now - lastVisibleTextAt));
60
36
  }
61
- /** Abort-aware sleep that resolves (never rejects) on abort; callers re-check the signal. */
62
37
  async function waitForStreamDelay(delay, signal) {
63
38
  if (delay <= 0 || isSignalAborted(signal)) return;
64
39
  await new Promise((resolve) => {
@@ -76,23 +51,8 @@ async function waitForStreamDelay(delay, signal) {
76
51
  if (isSignalAborted(signal)) onAbort();
77
52
  });
78
53
  }
79
- /**
80
- * Bounded producer/consumer smoothing engine.
81
- *
82
- * The producer drains `source` eagerly into a bounded queue (the buffer is the
83
- * backlog measurement adaptive sizing needs); at capacity it parks, applying
84
- * backpressure to the underlying stream. The consumer emits paced pieces,
85
- * decrementing the text budget and waking the producer *before* each cadenced
86
- * sleep so the provider stream keeps being read during pacing.
87
- *
88
- * `delayMs <= 0` disables smoothing entirely: every item passes through FIFO,
89
- * unsplit and undelayed.
90
- */
91
54
  async function* smoothStream({ source, delayMs, signal, abortUpstream }) {
92
55
  if (!(delayMs > 0)) {
93
- /** Disabled smoothing preserves fully lazy streaming: no background
94
- * producer, no read-ahead — each provider chunk is pulled only when the
95
- * consumer asks, exactly like the pre-engine pass-through paths. */
96
56
  for await (const item of source) {
97
57
  if (isSignalAborted(signal)) {
98
58
  abortUpstream?.();
@@ -127,9 +87,6 @@ async function* smoothStream({ source, delayMs, signal, abortUpstream }) {
127
87
  const hasQueuedItems = () => queuedItemIndex < queuedItems.length;
128
88
  const getQueuedItemCount = () => queuedItems.length - queuedItemIndex;
129
89
  const isQueueAtCapacity = () => getQueuedItemCount() >= 256 || bufferedTextLength >= 8192;
130
- /** Abort-aware: a consumer parked on an empty queue must wake when the
131
- * signal fires even if the provider stream never honors the abort — the
132
- * loop's top-of-iteration check then throws the canonical error. */
133
90
  const waitForNextItem = async () => {
134
91
  if (hasQueuedItems() || producerState.done || producerState.failed || isSignalAborted(signal)) return;
135
92
  await new Promise((resolve) => {
@@ -185,14 +142,6 @@ async function* smoothStream({ source, delayMs, signal, abortUpstream }) {
185
142
  bufferedTextLength += textLength;
186
143
  notifyConsumerForItem();
187
144
  };
188
- /**
189
- * Oversized splittable items are segmented at admission so a single giant
190
- * provider chunk cannot blow past the text budget: each segment re-checks
191
- * capacity, so the producer parks mid-chunk once the buffer fills — the
192
- * same bound the legacy split-before-enqueue queues enforced. The wrapped
193
- * emit maps segment-local pieces back to chunk-global isFirst/isLast so
194
- * provider clone contracts are unaffected.
195
- */
196
145
  const enqueueSegmented = async (item) => {
197
146
  if (!item.smooth || item.atomic === true || item.text.length <= 4096) {
198
147
  await enqueue(item);
@@ -272,9 +221,6 @@ async function* smoothStream({ source, delayMs, signal, abortUpstream }) {
272
221
  current = void 0;
273
222
  continue;
274
223
  }
275
- /** Once the producer is done the backlog is final: drain it linearly
276
- * across the remaining target window instead of letting the
277
- * proportional formula decay geometrically and stretch the tail. */
278
224
  if (producerState.done && drainTicksRemaining == null) drainTicksRemaining = Math.max(1, Math.floor(250 / delayMs));
279
225
  const tickBudget = drainTicksRemaining != null ? Math.max(4, Math.ceil(bufferedTextLength / drainTicksRemaining)) : computeAdaptivePieceSize(bufferedTextLength, delayMs);
280
226
  if (drainTicksRemaining != null && drainTicksRemaining > 1) drainTicksRemaining -= 1;
@@ -297,10 +243,6 @@ async function* smoothStream({ source, delayMs, signal, abortUpstream }) {
297
243
  });
298
244
  continue;
299
245
  }
300
- /** One cadence tick drains up to the adaptive budget ACROSS queued
301
- * items, so token-sized provider deltas coalesce instead of costing a
302
- * full tick each; passthrough items flush free mid-batch (FIFO), and
303
- * atomic items end the batch to take their own tick. */
304
246
  let consumed = 0;
305
247
  while (consumed < tickBudget) {
306
248
  if (isSignalAborted(signal)) throwAborted();
@@ -1 +1 @@
1
- {"version":3,"file":"smoother.cjs","names":["iterator"],"sources":["../../../../src/llm/stream/smoother.ts"],"sourcesContent":["export const DEFAULT_STREAM_DELAY = 25;\nexport const SMOOTH_TARGET_LATENCY_MS = 250;\nexport const MAX_STREAM_QUEUE_CHUNKS = 256;\nexport const MAX_STREAM_QUEUE_TEXT_CHARS = 8192;\nexport const MAX_SMOOTH_ITEM_SEGMENT_CHARS = 4096;\nexport const STREAM_CHUNK_MIN_SIZE = 4;\nexport const STREAM_BOUNDARIES: ReadonlySet<string> = new Set([\n ' ',\n '.',\n ',',\n '!',\n '?',\n ';',\n ':',\n]);\n\nexport const STREAM_ABORT_MESSAGE = 'AbortError: User aborted the request.';\nexport const STREAM_PRODUCER_FAILURE = 'Stream producer failed.';\n\n/**\n * How long generator teardown waits for the background producer to observe a\n * consumer close before abandoning it. Well-behaved streams settle in\n * microseconds (the next enqueue throws); a stalled provider that ignores\n * aborts otherwise blocks teardown — and abort propagation — indefinitely.\n * An abandoned producer still self-terminates on its next enqueue attempt.\n */\nexport const PRODUCER_CLOSE_GRACE_MS = 1000;\n\n/**\n * Resolves a configured stream delay to its effective value (default 25ms;\n * 0 disables smoothing). Non-finite inputs (NaN from a malformed config\n * value, ±Infinity) normalize to the default rather than poisoning piece\n * arithmetic downstream.\n */\nexport function resolveStreamDelay(delay?: number): number {\n if (delay == null || !Number.isFinite(delay)) {\n return DEFAULT_STREAM_DELAY;\n }\n return Math.max(0, delay);\n}\n\nexport function isSignalAborted(signal?: AbortSignal): boolean {\n return signal?.aborted === true;\n}\n\n/**\n * How far past the target size the word-boundary search may extend before\n * hard-cutting. Natural language hits a boundary within a few characters;\n * boundary-free runs (base64, minified data, long identifiers) must not\n * stretch a piece — or an admission segment — arbitrarily far past its\n * budget.\n */\nexport const STREAM_BOUNDARY_LOOKAHEAD_CHARS = 64;\n\nexport function findStreamChunkBoundary(\n text: string,\n minSize: number\n): number {\n if (minSize >= text.length) {\n return text.length;\n }\n\n const scanEnd = Math.min(\n text.length,\n minSize + STREAM_BOUNDARY_LOOKAHEAD_CHARS\n );\n for (let position = minSize; position < scanEnd; position++) {\n if (STREAM_BOUNDARIES.has(text[position])) {\n return position + 1;\n }\n }\n\n return scanEnd;\n}\n\n/**\n * Backlog-proportional piece sizing: emit enough per tick that the current\n * backlog drains in ~`targetLatencyMs`, so render lag stays pinned near the\n * target regardless of how fast the provider streams. Token-sized arrivals\n * never exceed the minimum piece, matching the legacy fixed-size splitter.\n */\nexport function computeAdaptivePieceSize(\n bufferedTextLength: number,\n tickMs: number,\n targetLatencyMs: number = SMOOTH_TARGET_LATENCY_MS\n): number {\n if (bufferedTextLength <= 0) {\n return STREAM_CHUNK_MIN_SIZE;\n }\n if (tickMs <= 0 || targetLatencyMs <= 0) {\n return bufferedTextLength;\n }\n return Math.max(\n STREAM_CHUNK_MIN_SIZE,\n Math.ceil((bufferedTextLength * tickMs) / targetLatencyMs)\n );\n}\n\n/**\n * A cadence, not an additive sleep: time the consumer already spent since the\n * last visible emission counts against the target delay, so slow downstream\n * handlers never compound latency.\n */\nexport function getCadencedStreamDelay({\n targetDelay,\n lastVisibleTextAt,\n now,\n}: {\n targetDelay: number;\n lastVisibleTextAt?: number;\n now: number;\n}): number {\n if (targetDelay <= 0 || lastVisibleTextAt == null) {\n return 0;\n }\n return Math.max(0, targetDelay - (now - lastVisibleTextAt));\n}\n\n/** Abort-aware sleep that resolves (never rejects) on abort; callers re-check the signal. */\nexport async function waitForStreamDelay(\n delay: number,\n signal?: AbortSignal\n): Promise<void> {\n if (delay <= 0 || isSignalAborted(signal)) {\n return;\n }\n await new Promise<void>((resolve) => {\n const timeoutRef: { current?: ReturnType<typeof setTimeout> } = {};\n const onAbort = (): void => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n signal?.removeEventListener('abort', onAbort);\n resolve();\n };\n timeoutRef.current = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, delay);\n signal?.addEventListener('abort', onAbort, { once: true });\n if (isSignalAborted(signal)) {\n onAbort();\n }\n });\n}\n\nexport type SmoothPiece = {\n text: string;\n isFirst: boolean;\n isLast: boolean;\n};\n\n/**\n * One classified unit of provider stream output.\n *\n * - `smooth: true` — visible text, paced at the configured cadence and (unless\n * `atomic`) sliced adaptively at dequeue time.\n * - `atomic: true` — paced as a single piece, never split (text-bearing chunks\n * whose metadata cannot survive slicing, e.g. logprobs / finish_reason).\n * - `smooth: false` — passthrough: tool-call deltas, usage-only, id-only and\n * seal chunks. Zero delay, strict FIFO with the text around them.\n *\n * `emit` builds the provider-specific output for one piece; `isFirst` lets\n * providers keep usage_metadata on only the first piece of a split.\n */\nexport type SmoothItem<TEmit> = {\n text: string;\n smooth: boolean;\n atomic?: boolean;\n emit: (piece: SmoothPiece) => TEmit;\n};\n\ntype ProducerState = {\n done: boolean;\n failed: boolean;\n error?: unknown;\n};\n\ntype QueuedSmoothItem<TEmit> = {\n item: SmoothItem<TEmit>;\n textLength: number;\n};\n\n/**\n * Bounded producer/consumer smoothing engine.\n *\n * The producer drains `source` eagerly into a bounded queue (the buffer is the\n * backlog measurement adaptive sizing needs); at capacity it parks, applying\n * backpressure to the underlying stream. The consumer emits paced pieces,\n * decrementing the text budget and waking the producer *before* each cadenced\n * sleep so the provider stream keeps being read during pacing.\n *\n * `delayMs <= 0` disables smoothing entirely: every item passes through FIFO,\n * unsplit and undelayed.\n */\nexport async function* smoothStream<TEmit>({\n source,\n delayMs,\n signal,\n abortUpstream,\n}: {\n source: AsyncIterable<SmoothItem<TEmit>>;\n delayMs: number;\n signal?: AbortSignal;\n abortUpstream?: () => void;\n}): AsyncGenerator<TEmit> {\n if (!(delayMs > 0)) {\n /** Disabled smoothing preserves fully lazy streaming: no background\n * producer, no read-ahead — each provider chunk is pulled only when the\n * consumer asks, exactly like the pre-engine pass-through paths. */\n for await (const item of source) {\n if (isSignalAborted(signal)) {\n abortUpstream?.();\n throw new Error(STREAM_ABORT_MESSAGE);\n }\n yield item.emit({ text: item.text, isFirst: true, isLast: true });\n }\n return;\n }\n\n const queuedItems: QueuedSmoothItem<TEmit>[] = [];\n const producerState: ProducerState = { done: false, failed: false };\n let queuedItemIndex = 0;\n let bufferedTextLength = 0;\n let consumerClosed = false;\n let notifyConsumer: (() => void) | undefined;\n let notifyProducer: (() => void) | undefined;\n\n const notifyConsumerForItem = (): void => {\n notifyConsumer?.();\n notifyConsumer = undefined;\n };\n\n const notifyProducerForSpace = (): void => {\n notifyProducer?.();\n notifyProducer = undefined;\n };\n\n const hasQueuedItems = (): boolean => queuedItemIndex < queuedItems.length;\n\n const getQueuedItemCount = (): number =>\n queuedItems.length - queuedItemIndex;\n\n const isQueueAtCapacity = (): boolean =>\n getQueuedItemCount() >= MAX_STREAM_QUEUE_CHUNKS ||\n bufferedTextLength >= MAX_STREAM_QUEUE_TEXT_CHARS;\n\n /** Abort-aware: a consumer parked on an empty queue must wake when the\n * signal fires even if the provider stream never honors the abort — the\n * loop's top-of-iteration check then throws the canonical error. */\n const waitForNextItem = async (): Promise<void> => {\n if (\n hasQueuedItems() ||\n producerState.done ||\n producerState.failed ||\n isSignalAborted(signal)\n ) {\n return;\n }\n await new Promise<void>((resolve) => {\n const onAbort = (): void => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n };\n notifyConsumer = (): void => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n };\n signal?.addEventListener('abort', onAbort, { once: true });\n if (isSignalAborted(signal)) {\n onAbort();\n }\n });\n };\n\n const waitForQueueSpace = async (): Promise<void> => {\n while (\n isQueueAtCapacity() &&\n !consumerClosed &&\n !isSignalAborted(signal)\n ) {\n await new Promise<void>((resolve) => {\n const onAbort = (): void => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n };\n const onSpace = (): void => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n };\n notifyProducer = onSpace;\n signal?.addEventListener('abort', onAbort, { once: true });\n if (isSignalAborted(signal)) {\n onAbort();\n }\n });\n }\n };\n\n const dequeue = (): QueuedSmoothItem<TEmit> | undefined => {\n if (!hasQueuedItems()) {\n return undefined;\n }\n const queuedItem = queuedItems[queuedItemIndex];\n queuedItemIndex++;\n if (queuedItemIndex > 128 && queuedItemIndex * 2 >= queuedItems.length) {\n queuedItems.splice(0, queuedItemIndex);\n queuedItemIndex = 0;\n }\n return queuedItem;\n };\n\n const throwAborted = (): never => {\n abortUpstream?.();\n throw new Error(STREAM_ABORT_MESSAGE);\n };\n\n const enqueue = async (item: SmoothItem<TEmit>): Promise<void> => {\n await waitForQueueSpace();\n if (consumerClosed || isSignalAborted(signal)) {\n throwAborted();\n }\n const textLength = item.smooth ? item.text.length : 0;\n queuedItems.push({ item, textLength });\n bufferedTextLength += textLength;\n notifyConsumerForItem();\n };\n\n /**\n * Oversized splittable items are segmented at admission so a single giant\n * provider chunk cannot blow past the text budget: each segment re-checks\n * capacity, so the producer parks mid-chunk once the buffer fills — the\n * same bound the legacy split-before-enqueue queues enforced. The wrapped\n * emit maps segment-local pieces back to chunk-global isFirst/isLast so\n * provider clone contracts are unaffected.\n */\n const enqueueSegmented = async (item: SmoothItem<TEmit>): Promise<void> => {\n if (\n !item.smooth ||\n item.atomic === true ||\n item.text.length <= MAX_SMOOTH_ITEM_SEGMENT_CHARS\n ) {\n await enqueue(item);\n return;\n }\n\n const segments: { start: number; end: number }[] = [];\n let offset = 0;\n while (offset < item.text.length) {\n const end =\n offset +\n findStreamChunkBoundary(\n item.text.slice(offset),\n MAX_SMOOTH_ITEM_SEGMENT_CHARS\n );\n segments.push({ start: offset, end });\n offset = end;\n }\n\n for (let i = 0; i < segments.length; i++) {\n const isFirstSegment = i === 0;\n const isLastSegment = i === segments.length - 1;\n await enqueue({\n text: item.text.slice(segments[i].start, segments[i].end),\n smooth: true,\n emit: (piece) =>\n item.emit({\n text: piece.text,\n isFirst: isFirstSegment && piece.isFirst,\n isLast: isLastSegment && piece.isLast,\n }),\n });\n }\n };\n\n const producer = (async (): Promise<void> => {\n try {\n for await (const item of source) {\n if (isSignalAborted(signal)) {\n throwAborted();\n }\n await enqueueSegmented(item);\n }\n } catch (error) {\n producerState.failed = true;\n producerState.error = error;\n } finally {\n producerState.done = true;\n notifyConsumerForItem();\n }\n })();\n\n let hasEmittedText = false;\n let lastVisibleTextAt: number | undefined;\n let drainTicksRemaining: number | undefined;\n let current: QueuedSmoothItem<TEmit> | undefined;\n let headOffset = 0;\n let keepStreaming = true;\n try {\n while (keepStreaming) {\n if (isSignalAborted(signal)) {\n throwAborted();\n }\n\n if (current == null) {\n await waitForNextItem();\n current = dequeue();\n headOffset = 0;\n }\n\n if (current == null) {\n if (producerState.failed) {\n throw producerState.error ?? new Error(STREAM_PRODUCER_FAILURE);\n }\n if (producerState.done) {\n keepStreaming = false;\n }\n continue;\n }\n\n const { item } = current;\n\n if (!item.smooth) {\n notifyProducerForSpace();\n current = undefined;\n yield item.emit({ text: item.text, isFirst: true, isLast: true });\n continue;\n }\n\n if (item.text === '') {\n bufferedTextLength = Math.max(\n 0,\n bufferedTextLength - current.textLength\n );\n notifyProducerForSpace();\n current = undefined;\n continue;\n }\n\n /** Once the producer is done the backlog is final: drain it linearly\n * across the remaining target window instead of letting the\n * proportional formula decay geometrically and stretch the tail. */\n if (producerState.done && drainTicksRemaining == null) {\n drainTicksRemaining = Math.max(\n 1,\n Math.floor(SMOOTH_TARGET_LATENCY_MS / delayMs)\n );\n }\n const tickBudget =\n drainTicksRemaining != null\n ? Math.max(\n STREAM_CHUNK_MIN_SIZE,\n Math.ceil(bufferedTextLength / drainTicksRemaining)\n )\n : computeAdaptivePieceSize(bufferedTextLength, delayMs);\n if (drainTicksRemaining != null && drainTicksRemaining > 1) {\n drainTicksRemaining -= 1;\n }\n\n await waitForStreamDelay(\n getCadencedStreamDelay({\n targetDelay: hasEmittedText ? delayMs : 0,\n lastVisibleTextAt,\n now: Date.now(),\n }),\n signal\n );\n if (isSignalAborted(signal)) {\n throwAborted();\n }\n hasEmittedText = true;\n lastVisibleTextAt = Date.now();\n\n if (item.atomic === true) {\n bufferedTextLength = Math.max(\n 0,\n bufferedTextLength - current.textLength\n );\n notifyProducerForSpace();\n current = undefined;\n yield item.emit({ text: item.text, isFirst: true, isLast: true });\n continue;\n }\n\n /** One cadence tick drains up to the adaptive budget ACROSS queued\n * items, so token-sized provider deltas coalesce instead of costing a\n * full tick each; passthrough items flush free mid-batch (FIFO), and\n * atomic items end the batch to take their own tick. */\n let consumed = 0;\n while (consumed < tickBudget) {\n if (isSignalAborted(signal)) {\n throwAborted();\n }\n if (current == null) {\n if (!hasQueuedItems()) {\n break;\n }\n current = dequeue();\n headOffset = 0;\n if (current == null) {\n break;\n }\n }\n\n const batchItem = current.item;\n if (!batchItem.smooth) {\n notifyProducerForSpace();\n current = undefined;\n yield batchItem.emit({\n text: batchItem.text,\n isFirst: true,\n isLast: true,\n });\n continue;\n }\n if (batchItem.text === '') {\n bufferedTextLength = Math.max(\n 0,\n bufferedTextLength - current.textLength\n );\n notifyProducerForSpace();\n current = undefined;\n continue;\n }\n if (batchItem.atomic === true) {\n break;\n }\n\n const remainingText = batchItem.text.slice(headOffset);\n const pieceLength = findStreamChunkBoundary(\n remainingText,\n tickBudget - consumed\n );\n const pieceEnd = headOffset + pieceLength;\n const piece = batchItem.text.slice(headOffset, pieceEnd);\n const isFirst = headOffset === 0;\n const isLast = pieceEnd === batchItem.text.length;\n\n bufferedTextLength = Math.max(0, bufferedTextLength - piece.length);\n notifyProducerForSpace();\n if (isLast) {\n current = undefined;\n } else {\n headOffset = pieceEnd;\n }\n consumed += piece.length;\n yield batchItem.emit({ text: piece, isFirst, isLast });\n }\n }\n } finally {\n consumerClosed = true;\n if (producerState.done) {\n await producer;\n } else {\n abortUpstream?.();\n notifyProducerForSpace();\n const iterator = source as Partial<AsyncGenerator<SmoothItem<TEmit>>>;\n const closing = iterator.return?.call(source, undefined as never);\n if (closing != null) {\n void closing.then(\n () => undefined,\n () => undefined\n );\n }\n await Promise.race([\n producer,\n new Promise<void>((resolve) => {\n const timeout = setTimeout(resolve, PRODUCER_CLOSE_GRACE_MS);\n timeout.unref();\n }),\n ]);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"smoother.cjs","names":["iterator"],"sources":["../../../../src/llm/stream/smoother.ts"],"mappings":"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"}