@librechat/agents 3.4.7 → 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 (1026) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +0 -356
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/agents/projection.cjs +0 -9
  4. package/dist/cjs/agents/projection.cjs.map +1 -1
  5. package/dist/cjs/common/constants.cjs +0 -26
  6. package/dist/cjs/common/constants.cjs.map +1 -1
  7. package/dist/cjs/common/enum.cjs +0 -85
  8. package/dist/cjs/common/enum.cjs.map +1 -1
  9. package/dist/cjs/events.cjs +0 -14
  10. package/dist/cjs/events.cjs.map +1 -1
  11. package/dist/cjs/graphs/Graph.cjs +1 -909
  12. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  13. package/dist/cjs/graphs/MultiAgentGraph.cjs +7 -272
  14. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  15. package/dist/cjs/graphs/applyGraphRuntimeConfig.cjs.map +1 -1
  16. package/dist/cjs/graphs/createGraph.cjs.map +1 -1
  17. package/dist/cjs/hitl/askUserQuestion.cjs +0 -53
  18. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  19. package/dist/cjs/hitl/askUserQuestions.cjs +0 -20
  20. package/dist/cjs/hitl/askUserQuestions.cjs.map +1 -1
  21. package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs +0 -6
  22. package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs.map +1 -1
  23. package/dist/cjs/hooks/HookRegistry.cjs +0 -127
  24. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  25. package/dist/cjs/hooks/createToolPolicyHook.cjs +0 -38
  26. package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
  27. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +0 -77
  28. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  29. package/dist/cjs/hooks/executeHooks.cjs +0 -79
  30. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  31. package/dist/cjs/hooks/index.cjs +0 -16
  32. package/dist/cjs/hooks/index.cjs.map +1 -1
  33. package/dist/cjs/hooks/matchers.cjs +0 -104
  34. package/dist/cjs/hooks/matchers.cjs.map +1 -1
  35. package/dist/cjs/hooks/types.cjs +0 -8
  36. package/dist/cjs/hooks/types.cjs.map +1 -1
  37. package/dist/cjs/instrumentation.cjs +0 -14
  38. package/dist/cjs/instrumentation.cjs.map +1 -1
  39. package/dist/cjs/langfuse.cjs +0 -75
  40. package/dist/cjs/langfuse.cjs.map +1 -1
  41. package/dist/cjs/langfuseConfig.cjs.map +1 -1
  42. package/dist/cjs/langfuseRuntimeContext.cjs +0 -13
  43. package/dist/cjs/langfuseRuntimeContext.cjs.map +1 -1
  44. package/dist/cjs/langfuseRuntimeScope.cjs +0 -4
  45. package/dist/cjs/langfuseRuntimeScope.cjs.map +1 -1
  46. package/dist/cjs/langfuseSpanRegistry.cjs +0 -28
  47. package/dist/cjs/langfuseSpanRegistry.cjs.map +1 -1
  48. package/dist/cjs/langfuseToolOutputTracing.cjs +0 -3
  49. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  50. package/dist/cjs/langfuseTraceShaping.cjs +0 -74
  51. package/dist/cjs/langfuseTraceShaping.cjs.map +1 -1
  52. package/dist/cjs/llm/anthropic/index.cjs +0 -3
  53. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  55. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +1 -111
  56. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  57. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +0 -1
  58. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  59. package/dist/cjs/llm/anthropic/utils/stream_events.cjs +0 -8
  60. package/dist/cjs/llm/anthropic/utils/stream_events.cjs.map +1 -1
  61. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  62. package/dist/cjs/llm/bedrock/cachePoints.cjs.map +1 -1
  63. package/dist/cjs/llm/bedrock/index.cjs +1 -95
  64. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  65. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  66. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +0 -78
  67. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  68. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +0 -24
  69. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
  70. package/dist/cjs/llm/contextOverflowRecovery.cjs +0 -62
  71. package/dist/cjs/llm/contextOverflowRecovery.cjs.map +1 -1
  72. package/dist/cjs/llm/fake.cjs.map +1 -1
  73. package/dist/cjs/llm/google/index.cjs +2 -21
  74. package/dist/cjs/llm/google/index.cjs.map +1 -1
  75. package/dist/cjs/llm/google/utils/common.cjs +0 -35
  76. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  77. package/dist/cjs/llm/init.cjs +0 -9
  78. package/dist/cjs/llm/init.cjs.map +1 -1
  79. package/dist/cjs/llm/invoke.cjs +1 -270
  80. package/dist/cjs/llm/invoke.cjs.map +1 -1
  81. package/dist/cjs/llm/mistral/index.cjs.map +1 -1
  82. package/dist/cjs/llm/openai/index.cjs +0 -99
  83. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  84. package/dist/cjs/llm/openai/streamMetadata.cjs +0 -21
  85. package/dist/cjs/llm/openai/streamMetadata.cjs.map +1 -1
  86. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  87. package/dist/cjs/llm/openrouter/index.cjs +0 -1
  88. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  89. package/dist/cjs/llm/openrouter/toolCache.cjs +0 -6
  90. package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
  91. package/dist/cjs/llm/preempt.cjs +0 -75
  92. package/dist/cjs/llm/preempt.cjs.map +1 -1
  93. package/dist/cjs/llm/providers.cjs.map +1 -1
  94. package/dist/cjs/llm/request.cjs +0 -10
  95. package/dist/cjs/llm/request.cjs.map +1 -1
  96. package/dist/cjs/llm/stream/chunkAdapters.cjs +0 -62
  97. package/dist/cjs/llm/stream/chunkAdapters.cjs.map +1 -1
  98. package/dist/cjs/llm/stream/smoother.cjs +0 -58
  99. package/dist/cjs/llm/stream/smoother.cjs.map +1 -1
  100. package/dist/cjs/llm/streamLimits.cjs +4 -293
  101. package/dist/cjs/llm/streamLimits.cjs.map +1 -1
  102. package/dist/cjs/llm/truncation.cjs +0 -36
  103. package/dist/cjs/llm/truncation.cjs.map +1 -1
  104. package/dist/cjs/llm/vertexai/index.cjs +0 -330
  105. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  106. package/dist/cjs/messages/alternation.cjs +0 -43
  107. package/dist/cjs/messages/alternation.cjs.map +1 -1
  108. package/dist/cjs/messages/anthropicToolCache.cjs +0 -45
  109. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
  110. package/dist/cjs/messages/assistantPhase.cjs +0 -12
  111. package/dist/cjs/messages/assistantPhase.cjs.map +1 -1
  112. package/dist/cjs/messages/budget.cjs +0 -9
  113. package/dist/cjs/messages/budget.cjs.map +1 -1
  114. package/dist/cjs/messages/cache.cjs +0 -172
  115. package/dist/cjs/messages/cache.cjs.map +1 -1
  116. package/dist/cjs/messages/content.cjs +0 -9
  117. package/dist/cjs/messages/content.cjs.map +1 -1
  118. package/dist/cjs/messages/contextPruning.cjs +0 -15
  119. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  120. package/dist/cjs/messages/contextPruningSettings.cjs +0 -3
  121. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
  122. package/dist/cjs/messages/core.cjs +0 -48
  123. package/dist/cjs/messages/core.cjs.map +1 -1
  124. package/dist/cjs/messages/format.cjs +1 -345
  125. package/dist/cjs/messages/format.cjs.map +1 -1
  126. package/dist/cjs/messages/handoffCue.cjs +0 -36
  127. package/dist/cjs/messages/handoffCue.cjs.map +1 -1
  128. package/dist/cjs/messages/ids.cjs.map +1 -1
  129. package/dist/cjs/messages/injected.cjs +0 -33
  130. package/dist/cjs/messages/injected.cjs.map +1 -1
  131. package/dist/cjs/messages/langchain.cjs +0 -14
  132. package/dist/cjs/messages/langchain.cjs.map +1 -1
  133. package/dist/cjs/messages/prune.cjs +1 -184
  134. package/dist/cjs/messages/prune.cjs.map +1 -1
  135. package/dist/cjs/messages/recency.cjs +0 -32
  136. package/dist/cjs/messages/recency.cjs.map +1 -1
  137. package/dist/cjs/messages/reducer.cjs +0 -30
  138. package/dist/cjs/messages/reducer.cjs.map +1 -1
  139. package/dist/cjs/messages/tools.cjs +0 -14
  140. package/dist/cjs/messages/tools.cjs.map +1 -1
  141. package/dist/cjs/openai/index.cjs.map +1 -1
  142. package/dist/cjs/prompts/activityLabel.cjs +9 -79
  143. package/dist/cjs/prompts/activityLabel.cjs.map +1 -1
  144. package/dist/cjs/responses/index.cjs.map +1 -1
  145. package/dist/cjs/run.cjs +2 -538
  146. package/dist/cjs/run.cjs.map +1 -1
  147. package/dist/cjs/session/AgentSession.cjs +1 -17
  148. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  149. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  150. package/dist/cjs/session/handlers.cjs +0 -7
  151. package/dist/cjs/session/handlers.cjs.map +1 -1
  152. package/dist/cjs/session/ids.cjs.map +1 -1
  153. package/dist/cjs/session/messageSerialization.cjs +0 -4
  154. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  155. package/dist/cjs/stream.cjs +1 -93
  156. package/dist/cjs/stream.cjs.map +1 -1
  157. package/dist/cjs/summarization/index.cjs +0 -27
  158. package/dist/cjs/summarization/index.cjs.map +1 -1
  159. package/dist/cjs/summarization/node.cjs +0 -273
  160. package/dist/cjs/summarization/node.cjs.map +1 -1
  161. package/dist/cjs/tools/BashExecutor.cjs +0 -35
  162. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  163. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +0 -24
  164. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  165. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  166. package/dist/cjs/tools/CodeExecutor.cjs +0 -13
  167. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  168. package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
  169. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +0 -101
  170. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  171. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  172. package/dist/cjs/tools/SkillTool.cjs +0 -5
  173. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  174. package/dist/cjs/tools/SubagentTool.cjs +0 -10
  175. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  176. package/dist/cjs/tools/ToolNode.cjs +6 -1038
  177. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  178. package/dist/cjs/tools/ToolSearch.cjs +0 -179
  179. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  180. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
  181. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
  182. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +0 -39
  183. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  184. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  185. package/dist/cjs/tools/eagerEventExecution.cjs +0 -6
  186. package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
  187. package/dist/cjs/tools/handlers.cjs +1 -41
  188. package/dist/cjs/tools/handlers.cjs.map +1 -1
  189. package/dist/cjs/tools/intentArg.cjs +1 -132
  190. package/dist/cjs/tools/intentArg.cjs.map +1 -1
  191. package/dist/cjs/tools/local/CompileCheckTool.cjs +0 -25
  192. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  193. package/dist/cjs/tools/local/FileCheckpointer.cjs +0 -23
  194. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  195. package/dist/cjs/tools/local/LocalCodingTools.cjs +0 -80
  196. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  197. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +0 -126
  198. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  199. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  200. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +0 -12
  201. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  202. package/dist/cjs/tools/local/attachments.cjs +0 -44
  203. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  204. package/dist/cjs/tools/local/bashAst.cjs +0 -16
  205. package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
  206. package/dist/cjs/tools/local/editStrategies.cjs +0 -14
  207. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
  208. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  209. package/dist/cjs/tools/local/syntaxCheck.cjs +0 -31
  210. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
  211. package/dist/cjs/tools/local/textEncoding.cjs +0 -11
  212. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
  213. package/dist/cjs/tools/local/workspaceFS.cjs +0 -33
  214. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
  215. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  216. package/dist/cjs/tools/schema.cjs +0 -8
  217. package/dist/cjs/tools/schema.cjs.map +1 -1
  218. package/dist/cjs/tools/search/anthropic.cjs +0 -9
  219. package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
  220. package/dist/cjs/tools/search/content.cjs.map +1 -1
  221. package/dist/cjs/tools/search/crw-scraper.cjs +0 -33
  222. package/dist/cjs/tools/search/crw-scraper.cjs.map +1 -1
  223. package/dist/cjs/tools/search/crw-search.cjs +0 -2
  224. package/dist/cjs/tools/search/crw-search.cjs.map +1 -1
  225. package/dist/cjs/tools/search/firecrawl.cjs +0 -25
  226. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  227. package/dist/cjs/tools/search/format.cjs +0 -30
  228. package/dist/cjs/tools/search/format.cjs.map +1 -1
  229. package/dist/cjs/tools/search/highlights.cjs +0 -16
  230. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  231. package/dist/cjs/tools/search/keenable-scraper.cjs +0 -8
  232. package/dist/cjs/tools/search/keenable-scraper.cjs.map +1 -1
  233. package/dist/cjs/tools/search/keenable-search.cjs +0 -7
  234. package/dist/cjs/tools/search/keenable-search.cjs.map +1 -1
  235. package/dist/cjs/tools/search/rerankers.cjs +0 -35
  236. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  237. package/dist/cjs/tools/search/schema.cjs +0 -1
  238. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  239. package/dist/cjs/tools/search/search.cjs +1 -14
  240. package/dist/cjs/tools/search/search.cjs.map +1 -1
  241. package/dist/cjs/tools/search/serper-scraper.cjs +0 -46
  242. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  243. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  244. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  245. package/dist/cjs/tools/search/tool.cjs +0 -25
  246. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  247. package/dist/cjs/tools/search/utils.cjs +0 -8
  248. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  249. package/dist/cjs/tools/skillCatalog.cjs +0 -6
  250. package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
  251. package/dist/cjs/tools/streamedToolCallSeals.cjs +0 -6
  252. package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
  253. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +0 -2
  254. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -1
  255. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +3 -213
  256. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  257. package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
  258. package/dist/cjs/tools/subagent/childGraphConfig.cjs +0 -4
  259. package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -1
  260. package/dist/cjs/tools/subagent/runtimeLimits.cjs.map +1 -1
  261. package/dist/cjs/tools/toolOutputReferences.cjs +1 -322
  262. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  263. package/dist/cjs/types/hitl.cjs +0 -5
  264. package/dist/cjs/types/hitl.cjs.map +1 -1
  265. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  266. package/dist/cjs/utils/errors.cjs +14 -165
  267. package/dist/cjs/utils/errors.cjs.map +1 -1
  268. package/dist/cjs/utils/events.cjs +0 -10
  269. package/dist/cjs/utils/events.cjs.map +1 -1
  270. package/dist/cjs/utils/graph.cjs.map +1 -1
  271. package/dist/cjs/utils/handlers.cjs +0 -3
  272. package/dist/cjs/utils/handlers.cjs.map +1 -1
  273. package/dist/cjs/utils/llm.cjs +0 -1
  274. package/dist/cjs/utils/llm.cjs.map +1 -1
  275. package/dist/cjs/utils/misc.cjs +0 -16
  276. package/dist/cjs/utils/misc.cjs.map +1 -1
  277. package/dist/cjs/utils/proxy.cjs +0 -26
  278. package/dist/cjs/utils/proxy.cjs.map +1 -1
  279. package/dist/cjs/utils/run.cjs +0 -6
  280. package/dist/cjs/utils/run.cjs.map +1 -1
  281. package/dist/cjs/utils/schema.cjs +0 -5
  282. package/dist/cjs/utils/schema.cjs.map +1 -1
  283. package/dist/cjs/utils/title.cjs +0 -6
  284. package/dist/cjs/utils/title.cjs.map +1 -1
  285. package/dist/cjs/utils/tokens.cjs +0 -113
  286. package/dist/cjs/utils/tokens.cjs.map +1 -1
  287. package/dist/cjs/utils/toolContent.cjs +0 -41
  288. package/dist/cjs/utils/toolContent.cjs.map +1 -1
  289. package/dist/cjs/utils/truncation.cjs +0 -61
  290. package/dist/cjs/utils/truncation.cjs.map +1 -1
  291. package/dist/esm/agents/AgentContext.mjs +0 -356
  292. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  293. package/dist/esm/agents/projection.mjs +0 -9
  294. package/dist/esm/agents/projection.mjs.map +1 -1
  295. package/dist/esm/common/constants.mjs +0 -26
  296. package/dist/esm/common/constants.mjs.map +1 -1
  297. package/dist/esm/common/enum.mjs +0 -85
  298. package/dist/esm/common/enum.mjs.map +1 -1
  299. package/dist/esm/events.mjs +0 -14
  300. package/dist/esm/events.mjs.map +1 -1
  301. package/dist/esm/graphs/Graph.mjs +1 -909
  302. package/dist/esm/graphs/Graph.mjs.map +1 -1
  303. package/dist/esm/graphs/MultiAgentGraph.mjs +7 -272
  304. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  305. package/dist/esm/graphs/applyGraphRuntimeConfig.mjs.map +1 -1
  306. package/dist/esm/graphs/createGraph.mjs.map +1 -1
  307. package/dist/esm/hitl/askUserQuestion.mjs +0 -53
  308. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  309. package/dist/esm/hitl/askUserQuestions.mjs +0 -20
  310. package/dist/esm/hitl/askUserQuestions.mjs.map +1 -1
  311. package/dist/esm/hitl/askUserQuestionsInterrupt.mjs +0 -6
  312. package/dist/esm/hitl/askUserQuestionsInterrupt.mjs.map +1 -1
  313. package/dist/esm/hooks/HookRegistry.mjs +0 -127
  314. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  315. package/dist/esm/hooks/createToolPolicyHook.mjs +0 -38
  316. package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
  317. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +0 -77
  318. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  319. package/dist/esm/hooks/executeHooks.mjs +0 -79
  320. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  321. package/dist/esm/hooks/index.mjs +0 -16
  322. package/dist/esm/hooks/index.mjs.map +1 -1
  323. package/dist/esm/hooks/matchers.mjs +0 -104
  324. package/dist/esm/hooks/matchers.mjs.map +1 -1
  325. package/dist/esm/hooks/types.mjs +0 -8
  326. package/dist/esm/hooks/types.mjs.map +1 -1
  327. package/dist/esm/instrumentation.mjs +0 -14
  328. package/dist/esm/instrumentation.mjs.map +1 -1
  329. package/dist/esm/langfuse.mjs +0 -75
  330. package/dist/esm/langfuse.mjs.map +1 -1
  331. package/dist/esm/langfuseConfig.mjs.map +1 -1
  332. package/dist/esm/langfuseRuntimeContext.mjs +0 -13
  333. package/dist/esm/langfuseRuntimeContext.mjs.map +1 -1
  334. package/dist/esm/langfuseRuntimeScope.mjs +0 -4
  335. package/dist/esm/langfuseRuntimeScope.mjs.map +1 -1
  336. package/dist/esm/langfuseSpanRegistry.mjs +0 -28
  337. package/dist/esm/langfuseSpanRegistry.mjs.map +1 -1
  338. package/dist/esm/langfuseToolOutputTracing.mjs +0 -3
  339. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  340. package/dist/esm/langfuseTraceShaping.mjs +0 -74
  341. package/dist/esm/langfuseTraceShaping.mjs.map +1 -1
  342. package/dist/esm/llm/anthropic/index.mjs +0 -3
  343. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  344. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  345. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +1 -111
  346. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  347. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +0 -1
  348. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  349. package/dist/esm/llm/anthropic/utils/stream_events.mjs +0 -8
  350. package/dist/esm/llm/anthropic/utils/stream_events.mjs.map +1 -1
  351. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  352. package/dist/esm/llm/bedrock/cachePoints.mjs.map +1 -1
  353. package/dist/esm/llm/bedrock/index.mjs +1 -95
  354. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  355. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  356. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +0 -78
  357. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  358. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +0 -24
  359. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
  360. package/dist/esm/llm/contextOverflowRecovery.mjs +0 -62
  361. package/dist/esm/llm/contextOverflowRecovery.mjs.map +1 -1
  362. package/dist/esm/llm/fake.mjs.map +1 -1
  363. package/dist/esm/llm/google/index.mjs +2 -21
  364. package/dist/esm/llm/google/index.mjs.map +1 -1
  365. package/dist/esm/llm/google/utils/common.mjs +0 -35
  366. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  367. package/dist/esm/llm/init.mjs +0 -9
  368. package/dist/esm/llm/init.mjs.map +1 -1
  369. package/dist/esm/llm/invoke.mjs +1 -270
  370. package/dist/esm/llm/invoke.mjs.map +1 -1
  371. package/dist/esm/llm/mistral/index.mjs.map +1 -1
  372. package/dist/esm/llm/openai/index.mjs +0 -99
  373. package/dist/esm/llm/openai/index.mjs.map +1 -1
  374. package/dist/esm/llm/openai/streamMetadata.mjs +0 -21
  375. package/dist/esm/llm/openai/streamMetadata.mjs.map +1 -1
  376. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  377. package/dist/esm/llm/openrouter/index.mjs +0 -1
  378. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  379. package/dist/esm/llm/openrouter/toolCache.mjs +0 -6
  380. package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
  381. package/dist/esm/llm/preempt.mjs +0 -75
  382. package/dist/esm/llm/preempt.mjs.map +1 -1
  383. package/dist/esm/llm/providers.mjs.map +1 -1
  384. package/dist/esm/llm/request.mjs +0 -10
  385. package/dist/esm/llm/request.mjs.map +1 -1
  386. package/dist/esm/llm/stream/chunkAdapters.mjs +0 -62
  387. package/dist/esm/llm/stream/chunkAdapters.mjs.map +1 -1
  388. package/dist/esm/llm/stream/smoother.mjs +0 -58
  389. package/dist/esm/llm/stream/smoother.mjs.map +1 -1
  390. package/dist/esm/llm/streamLimits.mjs +4 -293
  391. package/dist/esm/llm/streamLimits.mjs.map +1 -1
  392. package/dist/esm/llm/truncation.mjs +0 -36
  393. package/dist/esm/llm/truncation.mjs.map +1 -1
  394. package/dist/esm/llm/vertexai/index.mjs +0 -330
  395. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  396. package/dist/esm/messages/alternation.mjs +0 -43
  397. package/dist/esm/messages/alternation.mjs.map +1 -1
  398. package/dist/esm/messages/anthropicToolCache.mjs +0 -45
  399. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
  400. package/dist/esm/messages/assistantPhase.mjs +0 -12
  401. package/dist/esm/messages/assistantPhase.mjs.map +1 -1
  402. package/dist/esm/messages/budget.mjs +0 -9
  403. package/dist/esm/messages/budget.mjs.map +1 -1
  404. package/dist/esm/messages/cache.mjs +0 -172
  405. package/dist/esm/messages/cache.mjs.map +1 -1
  406. package/dist/esm/messages/content.mjs +0 -9
  407. package/dist/esm/messages/content.mjs.map +1 -1
  408. package/dist/esm/messages/contextPruning.mjs +0 -15
  409. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  410. package/dist/esm/messages/contextPruningSettings.mjs +0 -3
  411. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
  412. package/dist/esm/messages/core.mjs +0 -48
  413. package/dist/esm/messages/core.mjs.map +1 -1
  414. package/dist/esm/messages/format.mjs +1 -345
  415. package/dist/esm/messages/format.mjs.map +1 -1
  416. package/dist/esm/messages/handoffCue.mjs +0 -36
  417. package/dist/esm/messages/handoffCue.mjs.map +1 -1
  418. package/dist/esm/messages/ids.mjs.map +1 -1
  419. package/dist/esm/messages/injected.mjs +0 -33
  420. package/dist/esm/messages/injected.mjs.map +1 -1
  421. package/dist/esm/messages/langchain.mjs +0 -14
  422. package/dist/esm/messages/langchain.mjs.map +1 -1
  423. package/dist/esm/messages/prune.mjs +1 -184
  424. package/dist/esm/messages/prune.mjs.map +1 -1
  425. package/dist/esm/messages/recency.mjs +0 -32
  426. package/dist/esm/messages/recency.mjs.map +1 -1
  427. package/dist/esm/messages/reducer.mjs +0 -30
  428. package/dist/esm/messages/reducer.mjs.map +1 -1
  429. package/dist/esm/messages/tools.mjs +0 -14
  430. package/dist/esm/messages/tools.mjs.map +1 -1
  431. package/dist/esm/openai/index.mjs.map +1 -1
  432. package/dist/esm/prompts/activityLabel.mjs +9 -79
  433. package/dist/esm/prompts/activityLabel.mjs.map +1 -1
  434. package/dist/esm/responses/index.mjs.map +1 -1
  435. package/dist/esm/run.mjs +2 -538
  436. package/dist/esm/run.mjs.map +1 -1
  437. package/dist/esm/session/AgentSession.mjs +1 -17
  438. package/dist/esm/session/AgentSession.mjs.map +1 -1
  439. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  440. package/dist/esm/session/handlers.mjs +0 -7
  441. package/dist/esm/session/handlers.mjs.map +1 -1
  442. package/dist/esm/session/ids.mjs.map +1 -1
  443. package/dist/esm/session/messageSerialization.mjs +0 -4
  444. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  445. package/dist/esm/stream.mjs +1 -93
  446. package/dist/esm/stream.mjs.map +1 -1
  447. package/dist/esm/summarization/index.mjs +0 -27
  448. package/dist/esm/summarization/index.mjs.map +1 -1
  449. package/dist/esm/summarization/node.mjs +0 -273
  450. package/dist/esm/summarization/node.mjs.map +1 -1
  451. package/dist/esm/tools/BashExecutor.mjs +0 -35
  452. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  453. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +0 -24
  454. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  455. package/dist/esm/tools/Calculator.mjs.map +1 -1
  456. package/dist/esm/tools/CodeExecutor.mjs +0 -13
  457. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  458. package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
  459. package/dist/esm/tools/ProgrammaticToolCalling.mjs +0 -101
  460. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  461. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  462. package/dist/esm/tools/SkillTool.mjs +0 -5
  463. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  464. package/dist/esm/tools/SubagentTool.mjs +0 -10
  465. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  466. package/dist/esm/tools/ToolNode.mjs +6 -1038
  467. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  468. package/dist/esm/tools/ToolSearch.mjs +0 -179
  469. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  470. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
  471. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
  472. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +0 -39
  473. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  474. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  475. package/dist/esm/tools/eagerEventExecution.mjs +0 -6
  476. package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
  477. package/dist/esm/tools/handlers.mjs +1 -41
  478. package/dist/esm/tools/handlers.mjs.map +1 -1
  479. package/dist/esm/tools/intentArg.mjs +1 -132
  480. package/dist/esm/tools/intentArg.mjs.map +1 -1
  481. package/dist/esm/tools/local/CompileCheckTool.mjs +0 -25
  482. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  483. package/dist/esm/tools/local/FileCheckpointer.mjs +0 -23
  484. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  485. package/dist/esm/tools/local/LocalCodingTools.mjs +0 -80
  486. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  487. package/dist/esm/tools/local/LocalExecutionEngine.mjs +0 -126
  488. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  489. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  490. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +0 -12
  491. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  492. package/dist/esm/tools/local/attachments.mjs +0 -44
  493. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  494. package/dist/esm/tools/local/bashAst.mjs +0 -16
  495. package/dist/esm/tools/local/bashAst.mjs.map +1 -1
  496. package/dist/esm/tools/local/editStrategies.mjs +0 -14
  497. package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
  498. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  499. package/dist/esm/tools/local/syntaxCheck.mjs +0 -31
  500. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
  501. package/dist/esm/tools/local/textEncoding.mjs +0 -11
  502. package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
  503. package/dist/esm/tools/local/workspaceFS.mjs +0 -33
  504. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
  505. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  506. package/dist/esm/tools/schema.mjs +0 -8
  507. package/dist/esm/tools/schema.mjs.map +1 -1
  508. package/dist/esm/tools/search/anthropic.mjs +0 -9
  509. package/dist/esm/tools/search/anthropic.mjs.map +1 -1
  510. package/dist/esm/tools/search/content.mjs.map +1 -1
  511. package/dist/esm/tools/search/crw-scraper.mjs +0 -33
  512. package/dist/esm/tools/search/crw-scraper.mjs.map +1 -1
  513. package/dist/esm/tools/search/crw-search.mjs +0 -2
  514. package/dist/esm/tools/search/crw-search.mjs.map +1 -1
  515. package/dist/esm/tools/search/firecrawl.mjs +0 -25
  516. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  517. package/dist/esm/tools/search/format.mjs +0 -30
  518. package/dist/esm/tools/search/format.mjs.map +1 -1
  519. package/dist/esm/tools/search/highlights.mjs +0 -16
  520. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  521. package/dist/esm/tools/search/keenable-scraper.mjs +0 -8
  522. package/dist/esm/tools/search/keenable-scraper.mjs.map +1 -1
  523. package/dist/esm/tools/search/keenable-search.mjs +0 -7
  524. package/dist/esm/tools/search/keenable-search.mjs.map +1 -1
  525. package/dist/esm/tools/search/rerankers.mjs +0 -35
  526. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  527. package/dist/esm/tools/search/schema.mjs +0 -1
  528. package/dist/esm/tools/search/schema.mjs.map +1 -1
  529. package/dist/esm/tools/search/search.mjs +1 -14
  530. package/dist/esm/tools/search/search.mjs.map +1 -1
  531. package/dist/esm/tools/search/serper-scraper.mjs +0 -46
  532. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  533. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  534. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  535. package/dist/esm/tools/search/tool.mjs +0 -25
  536. package/dist/esm/tools/search/tool.mjs.map +1 -1
  537. package/dist/esm/tools/search/utils.mjs +0 -8
  538. package/dist/esm/tools/search/utils.mjs.map +1 -1
  539. package/dist/esm/tools/skillCatalog.mjs +0 -6
  540. package/dist/esm/tools/skillCatalog.mjs.map +1 -1
  541. package/dist/esm/tools/streamedToolCallSeals.mjs +0 -6
  542. package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
  543. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +0 -2
  544. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -1
  545. package/dist/esm/tools/subagent/SubagentExecutor.mjs +3 -213
  546. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  547. package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
  548. package/dist/esm/tools/subagent/childGraphConfig.mjs +0 -4
  549. package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -1
  550. package/dist/esm/tools/subagent/runtimeLimits.mjs.map +1 -1
  551. package/dist/esm/tools/toolOutputReferences.mjs +1 -322
  552. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  553. package/dist/esm/types/hitl.mjs +0 -5
  554. package/dist/esm/types/hitl.mjs.map +1 -1
  555. package/dist/esm/utils/callbacks.mjs.map +1 -1
  556. package/dist/esm/utils/errors.mjs +14 -165
  557. package/dist/esm/utils/errors.mjs.map +1 -1
  558. package/dist/esm/utils/events.mjs +0 -10
  559. package/dist/esm/utils/events.mjs.map +1 -1
  560. package/dist/esm/utils/graph.mjs.map +1 -1
  561. package/dist/esm/utils/handlers.mjs +0 -3
  562. package/dist/esm/utils/handlers.mjs.map +1 -1
  563. package/dist/esm/utils/llm.mjs +0 -1
  564. package/dist/esm/utils/llm.mjs.map +1 -1
  565. package/dist/esm/utils/misc.mjs +0 -16
  566. package/dist/esm/utils/misc.mjs.map +1 -1
  567. package/dist/esm/utils/proxy.mjs +0 -26
  568. package/dist/esm/utils/proxy.mjs.map +1 -1
  569. package/dist/esm/utils/run.mjs +0 -6
  570. package/dist/esm/utils/run.mjs.map +1 -1
  571. package/dist/esm/utils/schema.mjs +0 -5
  572. package/dist/esm/utils/schema.mjs.map +1 -1
  573. package/dist/esm/utils/title.mjs +0 -6
  574. package/dist/esm/utils/title.mjs.map +1 -1
  575. package/dist/esm/utils/tokens.mjs +0 -113
  576. package/dist/esm/utils/tokens.mjs.map +1 -1
  577. package/dist/esm/utils/toolContent.mjs +0 -41
  578. package/dist/esm/utils/toolContent.mjs.map +1 -1
  579. package/dist/esm/utils/truncation.mjs +0 -61
  580. package/dist/esm/utils/truncation.mjs.map +1 -1
  581. package/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/__tests__/stream.eagerArgsDivergence.test.ts +0 -911
  688. package/src/__tests__/stream.eagerEventExecution.test.ts +0 -5046
  689. package/src/__tests__/stream.streamLimits.test.ts +0 -1982
  690. package/src/agents/__tests__/AgentContext.anthropic.live.test.ts +0 -448
  691. package/src/agents/__tests__/AgentContext.bedrock.live.test.ts +0 -655
  692. package/src/agents/__tests__/AgentContext.openrouter.live.test.ts +0 -128
  693. package/src/agents/__tests__/AgentContext.overflow.test.ts +0 -205
  694. package/src/agents/__tests__/AgentContext.test.ts +0 -2425
  695. package/src/agents/__tests__/projection.test.ts +0 -73
  696. package/src/agents/__tests__/promptCacheLiveHelpers.ts +0 -175
  697. package/src/aggregator.test.ts +0 -1214
  698. package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +0 -273
  699. package/src/graphs/__tests__/Graph.closeRunStep.test.ts +0 -385
  700. package/src/graphs/__tests__/Graph.contextOverflow.test.ts +0 -1766
  701. package/src/graphs/__tests__/Graph.preemptSignal.test.ts +0 -126
  702. package/src/graphs/__tests__/Graph.reasoning.test.ts +0 -1717
  703. package/src/graphs/__tests__/Graph.subagentResumeState.test.ts +0 -80
  704. package/src/graphs/__tests__/MultiAgentGraph.test.ts +0 -177
  705. package/src/graphs/__tests__/composition.smoke.test.ts +0 -509
  706. package/src/graphs/__tests__/createGraph.test.ts +0 -206
  707. package/src/hooks/__tests__/HookRegistry.test.ts +0 -334
  708. package/src/hooks/__tests__/compactHooks.test.ts +0 -250
  709. package/src/hooks/__tests__/createToolPolicyHook.test.ts +0 -268
  710. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +0 -405
  711. package/src/hooks/__tests__/executeHooks.test.ts +0 -1294
  712. package/src/hooks/__tests__/integration.test.ts +0 -337
  713. package/src/hooks/__tests__/matchers.test.ts +0 -238
  714. package/src/hooks/__tests__/preemptBoundary.test.ts +0 -152
  715. package/src/hooks/__tests__/toolHooks.test.ts +0 -669
  716. package/src/llm/__tests__/contextOverflowRecovery.test.ts +0 -401
  717. package/src/llm/__tests__/fallbackOverflow.test.ts +0 -287
  718. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  719. package/src/llm/anthropic/inherited-content-utils.spec.ts +0 -249
  720. package/src/llm/anthropic/inherited-stream-events.spec.ts +0 -1259
  721. package/src/llm/anthropic/inherited-strict.spec.ts +0 -302
  722. package/src/llm/anthropic/llm.spec.ts +0 -3394
  723. package/src/llm/anthropic/utils/cross-provider-reasoning.test.ts +0 -383
  724. package/src/llm/anthropic/utils/cross-provider-server-tools.test.ts +0 -110
  725. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +0 -508
  726. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +0 -361
  727. package/src/llm/anthropic/utils/stripPrefillCache.test.ts +0 -111
  728. package/src/llm/anthropic/utils/tool-id-normalization.test.ts +0 -287
  729. package/src/llm/bedrock/inherited-cache.spec.ts +0 -144
  730. package/src/llm/bedrock/inherited.spec.ts +0 -724
  731. package/src/llm/bedrock/llm.spec.ts +0 -1533
  732. package/src/llm/bedrock/streamSealDispatch.test.ts +0 -331
  733. package/src/llm/bedrock/toolCache.test.ts +0 -194
  734. package/src/llm/bedrock/utils/cross-provider-reasoning.test.ts +0 -131
  735. package/src/llm/bedrock/utils/cross-provider-server-tools.test.ts +0 -122
  736. package/src/llm/bedrock/utils/message_inputs.test.ts +0 -650
  737. package/src/llm/bedrock/utils/message_outputs.test.ts +0 -85
  738. package/src/llm/bedrock/utils/toolResultCachePoint.test.ts +0 -118
  739. package/src/llm/custom-chat-models.smoke.test.ts +0 -1966
  740. package/src/llm/google/data/gettysburg10.wav +0 -0
  741. package/src/llm/google/data/hotdog.jpg +0 -0
  742. package/src/llm/google/inherited-stream-events.spec.ts +0 -350
  743. package/src/llm/google/llm.spec.ts +0 -1388
  744. package/src/llm/google/streamSmoothing.test.ts +0 -121
  745. package/src/llm/google/utils/common.test.ts +0 -196
  746. package/src/llm/invoke.alternation.test.ts +0 -87
  747. package/src/llm/invoke.handoffCue.test.ts +0 -112
  748. package/src/llm/invoke.streamLimits.test.ts +0 -142
  749. package/src/llm/invoke.test.ts +0 -1198
  750. package/src/llm/mistral/streamSmoothing.test.ts +0 -97
  751. package/src/llm/openai/cacheWriteTokens.test.ts +0 -112
  752. package/src/llm/openai/contentBlocks.test.ts +0 -381
  753. package/src/llm/openai/deepseek.test.ts +0 -747
  754. package/src/llm/openai/inherited-deepseek.spec.ts +0 -347
  755. package/src/llm/openai/inherited-xai.spec.ts +0 -416
  756. package/src/llm/openai/llm.spec.ts +0 -1774
  757. package/src/llm/openai/managedRequests.test.ts +0 -182
  758. package/src/llm/openai/sequentialToolCallSeals.test.ts +0 -199
  759. package/src/llm/openai/streamMetadata.spec.ts +0 -86
  760. package/src/llm/openai/streamMetadataDedup.spec.ts +0 -166
  761. package/src/llm/openai/utils/isReasoningModel.test.ts +0 -90
  762. package/src/llm/openai/utils/messages.test.ts +0 -488
  763. package/src/llm/openrouter/reasoning.test.ts +0 -561
  764. package/src/llm/openrouter/toolCache.test.ts +0 -134
  765. package/src/llm/preempt.test.ts +0 -323
  766. package/src/llm/stream/chunkAdapters.test.ts +0 -202
  767. package/src/llm/stream/reassembly.test.ts +0 -241
  768. package/src/llm/stream/smoother.bench.test.ts +0 -155
  769. package/src/llm/stream/smoother.test.ts +0 -519
  770. package/src/llm/streamLimits.test.ts +0 -450
  771. package/src/llm/truncation.test.ts +0 -242
  772. package/src/llm/vertexai/fixThoughtSignatures.test.ts +0 -154
  773. package/src/llm/vertexai/inherited-stream-events.spec.ts +0 -271
  774. package/src/llm/vertexai/llm.spec.ts +0 -159
  775. package/src/llm/vertexai/repairUsageMetadata.test.ts +0 -54
  776. package/src/llm/vertexai/sealStreamedToolCalls.test.ts +0 -88
  777. package/src/llm/vertexai/streamSealDispatch.test.ts +0 -148
  778. package/src/llm/vertexai/streamSmoothing.test.ts +0 -109
  779. package/src/messages/__tests__/anthropicToolCache.test.ts +0 -339
  780. package/src/messages/__tests__/observationMasking.test.ts +0 -312
  781. package/src/messages/__tests__/recency.test.ts +0 -267
  782. package/src/messages/__tests__/tools.test.ts +0 -473
  783. package/src/messages/alternation.test.ts +0 -212
  784. package/src/messages/assistantPhase.test.ts +0 -75
  785. package/src/messages/cache.tail.test.ts +0 -533
  786. package/src/messages/cache.test.ts +0 -2166
  787. package/src/messages/content.test.ts +0 -362
  788. package/src/messages/contextPruning.test.ts +0 -184
  789. package/src/messages/ensureThinkingBlock.test.ts +0 -1427
  790. package/src/messages/foldToollessToolBlocks.test.ts +0 -596
  791. package/src/messages/formatAgentMessages.reducer.test.ts +0 -162
  792. package/src/messages/formatAgentMessages.skills.test.ts +0 -513
  793. package/src/messages/formatAgentMessages.steer.test.ts +0 -598
  794. package/src/messages/formatAgentMessages.test.ts +0 -8111
  795. package/src/messages/formatAgentMessages.tools.test.ts +0 -522
  796. package/src/messages/formatMessage.test.ts +0 -693
  797. package/src/messages/handoffCue.test.ts +0 -96
  798. package/src/messages/injected.test.ts +0 -107
  799. package/src/messages/labelContentByAgent.test.ts +0 -962
  800. package/src/messages/reducer.spec.ts +0 -32
  801. package/src/messages/shiftIndexTokenCountMap.test.ts +0 -81
  802. package/src/messages/tailCacheConversion.test.ts +0 -161
  803. package/src/openai/__tests__/openai.test.ts +0 -337
  804. package/src/responses/__tests__/responses.test.ts +0 -652
  805. package/src/scripts/abort.ts +0 -157
  806. package/src/scripts/activity-labels/captured.json +0 -56
  807. package/src/scripts/activity-labels/checks.cjs +0 -205
  808. package/src/scripts/activity-labels/corpus.cjs +0 -473
  809. package/src/scripts/activity-labels/report.cjs +0 -203
  810. package/src/scripts/activity-labels/rescore.cjs +0 -102
  811. package/src/scripts/activity-labels/run.ts +0 -705
  812. package/src/scripts/activity-labels/variants.ts +0 -71
  813. package/src/scripts/ant_web_search.ts +0 -159
  814. package/src/scripts/ant_web_search_edge_case.ts +0 -163
  815. package/src/scripts/ant_web_search_error_edge_case.ts +0 -149
  816. package/src/scripts/args.ts +0 -48
  817. package/src/scripts/bedrock-cache-debug.ts +0 -250
  818. package/src/scripts/bedrock-content-aggregation-test.ts +0 -266
  819. package/src/scripts/bedrock-merge-test.ts +0 -107
  820. package/src/scripts/bedrock-parallel-tools-test.ts +0 -204
  821. package/src/scripts/bench-prompt-cache.ts +0 -479
  822. package/src/scripts/caching.ts +0 -132
  823. package/src/scripts/cli.ts +0 -172
  824. package/src/scripts/cli2.ts +0 -133
  825. package/src/scripts/cli3.ts +0 -184
  826. package/src/scripts/cli4.ts +0 -191
  827. package/src/scripts/cli5.ts +0 -191
  828. package/src/scripts/code_exec.ts +0 -214
  829. package/src/scripts/code_exec_files.ts +0 -237
  830. package/src/scripts/code_exec_multi_session.ts +0 -237
  831. package/src/scripts/code_exec_ptc.ts +0 -335
  832. package/src/scripts/code_exec_session.ts +0 -283
  833. package/src/scripts/code_exec_simple.ts +0 -148
  834. package/src/scripts/compare_pi_vs_ours.ts +0 -1259
  835. package/src/scripts/content.ts +0 -139
  836. package/src/scripts/context-overflow-probe.ts +0 -997
  837. package/src/scripts/empty_input.ts +0 -137
  838. package/src/scripts/handoff-test.ts +0 -134
  839. package/src/scripts/local_engine.ts +0 -166
  840. package/src/scripts/local_engine_checkpointer.ts +0 -205
  841. package/src/scripts/local_engine_compile.ts +0 -263
  842. package/src/scripts/local_engine_hooks.ts +0 -226
  843. package/src/scripts/local_engine_image.ts +0 -201
  844. package/src/scripts/local_engine_ptc.ts +0 -151
  845. package/src/scripts/local_engine_workspace.ts +0 -258
  846. package/src/scripts/memory.ts +0 -107
  847. package/src/scripts/multi-agent-chain.ts +0 -332
  848. package/src/scripts/multi-agent-conditional.ts +0 -222
  849. package/src/scripts/multi-agent-document-review-chain.ts +0 -198
  850. package/src/scripts/multi-agent-hybrid-flow.ts +0 -311
  851. package/src/scripts/multi-agent-parallel-start.ts +0 -265
  852. package/src/scripts/multi-agent-parallel.ts +0 -395
  853. package/src/scripts/multi-agent-sequence.ts +0 -217
  854. package/src/scripts/multi-agent-subagent.ts +0 -246
  855. package/src/scripts/multi-agent-supervisor.ts +0 -366
  856. package/src/scripts/multi-agent-test.ts +0 -187
  857. package/src/scripts/openrouter_prompt_cache_live.ts +0 -310
  858. package/src/scripts/parallel-asymmetric-tools-test.ts +0 -275
  859. package/src/scripts/parallel-full-metadata-test.ts +0 -241
  860. package/src/scripts/parallel-tools-test.ts +0 -341
  861. package/src/scripts/preempt-probe.ts +0 -330
  862. package/src/scripts/preempt-scenarios.ts +0 -388
  863. package/src/scripts/programmatic_exec.ts +0 -387
  864. package/src/scripts/programmatic_exec_agent.ts +0 -232
  865. package/src/scripts/search.ts +0 -147
  866. package/src/scripts/sequential-full-metadata-test.ts +0 -198
  867. package/src/scripts/session_live.ts +0 -548
  868. package/src/scripts/simple.ts +0 -226
  869. package/src/scripts/single-agent-metadata-test.ts +0 -196
  870. package/src/scripts/stream.ts +0 -141
  871. package/src/scripts/subagent-configurable-inheritance.ts +0 -252
  872. package/src/scripts/subagent-event-driven-debug.ts +0 -190
  873. package/src/scripts/subagent-tools-debug.ts +0 -160
  874. package/src/scripts/subagent-usage-sink.ts +0 -176
  875. package/src/scripts/summarization-recency.ts +0 -462
  876. package/src/scripts/test-custom-prompt-key.ts +0 -145
  877. package/src/scripts/test-handoff-input.ts +0 -170
  878. package/src/scripts/test-handoff-preamble.ts +0 -278
  879. package/src/scripts/test-handoff-steering.ts +0 -430
  880. package/src/scripts/test-multi-agent-list-handoff.ts +0 -418
  881. package/src/scripts/test-parallel-agent-labeling.ts +0 -327
  882. package/src/scripts/test-parallel-handoffs.ts +0 -292
  883. package/src/scripts/test-thinking-handoff-bedrock.ts +0 -154
  884. package/src/scripts/test-thinking-handoff.ts +0 -156
  885. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +0 -166
  886. package/src/scripts/test-tool-before-handoff-role-order.ts +0 -276
  887. package/src/scripts/test-tools-before-handoff.ts +0 -222
  888. package/src/scripts/test_code_api.ts +0 -354
  889. package/src/scripts/thinking-bedrock.ts +0 -160
  890. package/src/scripts/thinking-vertexai.ts +0 -168
  891. package/src/scripts/thinking.ts +0 -172
  892. package/src/scripts/tool_search.ts +0 -153
  893. package/src/scripts/tools.ts +0 -163
  894. package/src/session/__tests__/JsonlSessionStore.test.ts +0 -1463
  895. package/src/session/__tests__/handlers.test.ts +0 -161
  896. package/src/specs/activity-label-observability.live.test.ts +0 -262
  897. package/src/specs/activity-label-observability.test.ts +0 -167
  898. package/src/specs/activity-label-prompt.test.ts +0 -359
  899. package/src/specs/activity-label-trace-seed.test.ts +0 -47
  900. package/src/specs/activity-phase-label.test.ts +0 -306
  901. package/src/specs/agent-handoffs.live.test.ts +0 -140
  902. package/src/specs/agent-handoffs.test.ts +0 -2465
  903. package/src/specs/anthropic.simple.test.ts +0 -453
  904. package/src/specs/ask-user-question-batch.test.ts +0 -289
  905. package/src/specs/ask-user-questions.live.test.ts +0 -185
  906. package/src/specs/ask-user-questions.test.ts +0 -293
  907. package/src/specs/azure.simple.test.ts +0 -502
  908. package/src/specs/bedrock-toolless.live.test.ts +0 -123
  909. package/src/specs/bedrock-truncation.live.test.ts +0 -191
  910. package/src/specs/cache.simple.test.ts +0 -416
  911. package/src/specs/context-accuracy.live.test.ts +0 -409
  912. package/src/specs/context-overflow-recovery.live.test.ts +0 -213
  913. package/src/specs/context-usage-event.test.ts +0 -117
  914. package/src/specs/context-usage.live.test.ts +0 -297
  915. package/src/specs/custom-event-await.test.ts +0 -304
  916. package/src/specs/deepseek.simple.test.ts +0 -290
  917. package/src/specs/deterministic-trace-id.test.ts +0 -43
  918. package/src/specs/discovered-tools.test.ts +0 -217
  919. package/src/specs/durability-checkpoint.integration.test.ts +0 -243
  920. package/src/specs/graph-subagent.live.test.ts +0 -242
  921. package/src/specs/graph-subagent.test.ts +0 -322
  922. package/src/specs/handoffCue.test.ts +0 -165
  923. package/src/specs/langfuse-callbacks.test.ts +0 -1578
  924. package/src/specs/langfuse-config.test.ts +0 -247
  925. package/src/specs/langfuse-instrumentation.test.ts +0 -393
  926. package/src/specs/langfuse-metadata.test.ts +0 -245
  927. package/src/specs/langfuse-routing.integration.test.ts +0 -844
  928. package/src/specs/langfuse-runtime-context.test.ts +0 -92
  929. package/src/specs/langfuse-span-registry.test.ts +0 -87
  930. package/src/specs/langfuse-tool-output-tracing.test.ts +0 -1858
  931. package/src/specs/langfuse-trace-shaping.test.ts +0 -591
  932. package/src/specs/moonshot.simple.test.ts +0 -367
  933. package/src/specs/multi-agent-summarization.test.ts +0 -396
  934. package/src/specs/openai.simple.test.ts +0 -315
  935. package/src/specs/openrouter.simple.test.ts +0 -275
  936. package/src/specs/preemptSeal.test.ts +0 -678
  937. package/src/specs/prune.test.ts +0 -3741
  938. package/src/specs/reasoning.test.ts +0 -201
  939. package/src/specs/run-step-timestamps.test.ts +0 -414
  940. package/src/specs/spec.utils.ts +0 -15
  941. package/src/specs/subagent.test.ts +0 -864
  942. package/src/specs/summarization-unit.test.ts +0 -973
  943. package/src/specs/summarization.test.ts +0 -3823
  944. package/src/specs/summarize-prune.test.ts +0 -376
  945. package/src/specs/thinking-handoff.test.ts +0 -621
  946. package/src/specs/thinking-prune.test.ts +0 -827
  947. package/src/specs/token-accounting-e2e.test.ts +0 -1034
  948. package/src/specs/token-accounting-pipeline.test.ts +0 -1008
  949. package/src/specs/token-distribution-edge-case.test.ts +0 -315
  950. package/src/specs/token-memoization.test.ts +0 -40
  951. package/src/specs/tokens.test.ts +0 -1000
  952. package/src/specs/tool-error-resume.test.ts +0 -194
  953. package/src/specs/tool-error.test.ts +0 -198
  954. package/src/specs/vllm-reasoning-toolcalls.test.ts +0 -340
  955. package/src/stream.dispatch.test.ts +0 -63
  956. package/src/stream.test.ts +0 -144
  957. package/src/summarization/__tests__/aggregator.test.ts +0 -236
  958. package/src/summarization/__tests__/node.test.ts +0 -1996
  959. package/src/summarization/__tests__/trigger.test.ts +0 -149
  960. package/src/summarization/chunkHandler.test.ts +0 -196
  961. package/src/test/mockTools.ts +0 -386
  962. package/src/tools/Calculator.test.ts +0 -278
  963. package/src/tools/__tests__/BashExecutor.test.ts +0 -108
  964. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +0 -939
  965. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +0 -858
  966. package/src/tools/__tests__/CodeExecutor.stateful.test.ts +0 -124
  967. package/src/tools/__tests__/LocalExecutionRoots.test.ts +0 -8
  968. package/src/tools/__tests__/LocalExecutionTools.test.ts +0 -2733
  969. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.ts +0 -318
  970. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +0 -1557
  971. package/src/tools/__tests__/ReadFile.test.ts +0 -44
  972. package/src/tools/__tests__/SkillTool.test.ts +0 -442
  973. package/src/tools/__tests__/SubagentExecutor.test.ts +0 -3728
  974. package/src/tools/__tests__/SubagentReplay.test.ts +0 -329
  975. package/src/tools/__tests__/SubagentTool.test.ts +0 -149
  976. package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +0 -595
  977. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +0 -1191
  978. package/src/tools/__tests__/ToolNode.invalidToolCalls.test.ts +0 -757
  979. package/src/tools/__tests__/ToolNode.langfuse.test.ts +0 -57
  980. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +0 -736
  981. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +0 -1710
  982. package/src/tools/__tests__/ToolNode.runtimeState.test.ts +0 -120
  983. package/src/tools/__tests__/ToolNode.session.test.ts +0 -1352
  984. package/src/tools/__tests__/ToolNode.streamLimits.test.ts +0 -69
  985. package/src/tools/__tests__/ToolSearch.integration.test.ts +0 -161
  986. package/src/tools/__tests__/ToolSearch.test.ts +0 -1227
  987. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +0 -561
  988. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +0 -980
  989. package/src/tools/__tests__/directToolHooks.test.ts +0 -700
  990. package/src/tools/__tests__/eagerEventExecution.session.test.ts +0 -92
  991. package/src/tools/__tests__/handlers.test.ts +0 -997
  992. package/src/tools/__tests__/hitl.test.ts +0 -4663
  993. package/src/tools/__tests__/intentArg.test.ts +0 -357
  994. package/src/tools/__tests__/intentCoverage.test.ts +0 -139
  995. package/src/tools/__tests__/localToolNames.test.ts +0 -75
  996. package/src/tools/__tests__/skillCatalog.test.ts +0 -161
  997. package/src/tools/__tests__/subagentHooks.test.ts +0 -1651
  998. package/src/tools/__tests__/toolOutputReferences.test.ts +0 -515
  999. package/src/tools/__tests__/workspaceSeam.test.ts +0 -147
  1000. package/src/tools/local/__tests__/FileCheckpointer.test.ts +0 -162
  1001. package/src/tools/local/__tests__/editStrategies.test.ts +0 -134
  1002. package/src/tools/search/content.test.ts +0 -173
  1003. package/src/tools/search/crw.test.ts +0 -836
  1004. package/src/tools/search/format.test.ts +0 -242
  1005. package/src/tools/search/http-agent.test.ts +0 -133
  1006. package/src/tools/search/jina-reranker.test.ts +0 -306
  1007. package/src/tools/search/keenable-scraper.test.ts +0 -153
  1008. package/src/tools/search/keenable.test.ts +0 -183
  1009. package/src/tools/search/outcome.test.ts +0 -90
  1010. package/src/tools/search/output.md +0 -2775
  1011. package/src/tools/search/rag-api-reranker.test.ts +0 -891
  1012. package/src/tools/search/source-processing.test.ts +0 -516
  1013. package/src/tools/search/tavily.test.ts +0 -965
  1014. package/src/tools/search/test.html +0 -884
  1015. package/src/tools/search/test.md +0 -643
  1016. package/src/tools/subagent/__tests__/SubagentExecutionRegistry.test.ts +0 -637
  1017. package/src/tools/subagent/__tests__/SubagentExecutor.lazy.test.ts +0 -3054
  1018. package/src/tools/subagent/__tests__/childGraphConfig.test.ts +0 -521
  1019. package/src/utils/__tests__/apportion.test.ts +0 -32
  1020. package/src/utils/__tests__/errors.test.ts +0 -270
  1021. package/src/utils/__tests__/fixtures/contextOverflowSignatures.ts +0 -336
  1022. package/src/utils/__tests__/redactSecrets.test.ts +0 -56
  1023. package/src/utils/__tests__/truncation.test.ts +0 -66
  1024. package/src/utils/llm.test.ts +0 -18
  1025. package/src/utils/proxy.test.ts +0 -176
  1026. package/src/utils/toolContent.test.ts +0 -1432
@@ -1 +1 @@
1
- {"version":3,"file":"prune.mjs","names":[],"sources":["../../../src/messages/prune.ts"],"sourcesContent":["import { isProxy } from 'node:util/types';\nimport {\n AIMessage,\n BaseMessage,\n ToolMessage,\n UsageMetadata,\n} from '@langchain/core/messages';\nimport type { AIMessageChunk } from '@langchain/core/messages';\nimport type {\n ThinkingContentText,\n MessageContentComplex,\n ReasoningContentText,\n} from '@/types/stream';\nimport type { ContextPruningConfig } from '@/types/graph';\nimport type { TokenCounter } from '@/types/run';\nimport {\n cloneToolMessageWithContent,\n compactToolContent,\n getToolContentCharLength,\n isComputerCallOutputMessage,\n serializeStructuredValueBounded,\n serializeToolContentBounded,\n} from '@/utils/toolContent';\nimport {\n HARD_MAX_TOOL_RESULT_CHARS,\n calculateMaxToolResultChars,\n truncateToolResultContent,\n} from '@/utils/truncation';\nimport { resolveContextPruningSettings } from './contextPruningSettings';\nimport { hasUnsafeStructuredSerialization } from '@/utils/tokens';\nimport { ContentTypes, Providers, Constants } from '@/common';\nimport { applyContextPruning } from './contextPruning';\nimport { toLangChainContent } from './langchain';\n\nfunction sumTokenCounts(\n tokenMap: Record<string, number | undefined>,\n count: number\n): number {\n let total = 0;\n for (let i = 0; i < count; i++) {\n total += tokenMap[i] ?? 0;\n }\n return total;\n}\n\n/** Default fraction of the token budget reserved as headroom (5 %). */\nexport const DEFAULT_RESERVE_RATIO = 0.05;\n\n/** Provider framing reserved for the assistant reply label. */\nexport const REPLY_PRIMER_TOKENS = 3;\n\n/** Context pressure at which observation masking and context fading activate. */\nconst PRESSURE_THRESHOLD_MASKING = 0.8;\n\n/** Pressure band thresholds paired with budget factors for progressive context fading. */\nconst PRESSURE_BANDS: [number, number][] = [\n [0.99, 0.05],\n [0.9, 0.2],\n [0.85, 0.5],\n [0.8, 1.0],\n];\n\n/** Maximum character length for masked (consumed) tool results. */\nconst MASKED_RESULT_MAX_CHARS = 300;\n\n/** Hard cap for the originalToolContent store (~2 MB estimated from char length). */\nexport const ORIGINAL_CONTENT_MAX_CHARS = 2_000_000;\n\n/**\n * Evicts oldest entries from `map` (in Map-iteration / insertion order) until\n * the cumulative char length of remaining values fits within\n * `ORIGINAL_CONTENT_MAX_CHARS`. Used by the recency-window carry-over merge\n * path in Graph.ts to bound long-running session memory: the pruner enforces\n * the cap inside its own `originalToolContent` map, but a key-wise union with\n * recency carry-over bypasses that cap unless re-applied here.\n */\nexport function enforceOriginalContentCap(map: Map<number, string>): void {\n let total = 0;\n for (const v of map.values()) {\n total += v.length;\n }\n while (total > ORIGINAL_CONTENT_MAX_CHARS && map.size > 0) {\n const oldest = map.keys().next();\n if (oldest.done === true) {\n break;\n }\n const removed = map.get(oldest.value);\n if (removed != null) {\n total -= removed.length;\n }\n map.delete(oldest.value);\n }\n}\n\n/** Minimum cumulative calibration ratio — provider can't count fewer tokens\n * than our raw estimate (within reason). Prevents divide-by-zero edge cases. */\nexport const CALIBRATION_RATIO_MIN = 0.5;\n\n/** Maximum cumulative calibration ratio — sanity cap for the running ratio. */\nexport const CALIBRATION_RATIO_MAX = 5;\n\n/** Keeps provider/local token calibration within the shared safe range. */\nexport function clampCalibrationRatio(ratio: number): number {\n return Math.max(\n CALIBRATION_RATIO_MIN,\n Math.min(CALIBRATION_RATIO_MAX, ratio)\n );\n}\n\nexport type PruneMessagesFactoryParams = {\n provider?: Providers;\n maxTokens: number;\n /** Per-tool-result character cap applied while reconciling cached counts. */\n maxToolResultChars?: number;\n startIndex: number;\n tokenCounter: TokenCounter;\n indexTokenCountMap: Record<string, number | undefined>;\n thinkingEnabled?: boolean;\n /** Context pruning configuration for position-based tool result degradation. */\n contextPruningConfig?: ContextPruningConfig;\n /**\n * When true, context pressure fading (pre-flight tool result truncation)\n * is skipped. Summarization replaces pruning as the primary context\n * management strategy — the summarizer needs full un-truncated tool results\n * to produce an accurate summary. Hard pruning still runs as a fallback\n * when summarization is skipped or capped.\n */\n summarizationEnabled?: boolean;\n /**\n * Returns the current instruction-token overhead (system message + tool schemas + summary).\n * Called on each prune invocation so the budget reflects dynamic changes\n * (e.g. summary added between turns). When messages don't include a leading\n * SystemMessage, these tokens are subtracted from the available budget so\n * the pruner correctly reserves space for the system prompt that will be\n * prepended later by `buildSystemRunnable`.\n */\n getInstructionTokens?: () => number;\n /**\n * Fraction of the effective token budget to reserve as headroom (0–1).\n * When set, pruning triggers at `effectiveMax * (1 - reserveRatio)` instead of\n * filling the context window to 100%. Defaults to 5 % (0.05) when omitted.\n */\n reserveRatio?: number;\n /**\n * Initial calibration ratio from a previous run's persisted contextMeta.\n * Seeds the running EMA so new messages are scaled immediately instead\n * of waiting for the first provider response. Ignored when <= 0.\n */\n calibrationRatio?: number;\n /** Optional diagnostic log callback wired by the graph for observability. */\n log?: (\n level: 'debug' | 'info' | 'warn' | 'error',\n message: string,\n data?: Record<string, unknown>\n ) => void;\n};\nexport type PruneMessagesParams = {\n messages: BaseMessage[];\n usageMetadata?: Partial<UsageMetadata>;\n startType?: ReturnType<BaseMessage['getType']>;\n /**\n * Fallback usage from the most recent LLM call only (not accumulated).\n * Calibration prefers the provider's raw `usageMetadata.input_tokens`\n * when available, because cache detail fields may use non-window\n * accounting units.\n */\n lastCallUsage?: {\n totalTokens: number;\n inputTokens?: number;\n };\n /**\n * Whether the token data is fresh (from a just-completed LLM call).\n * When false, provider calibration is skipped to avoid applying\n * stale ratios.\n */\n totalTokensFresh?: boolean;\n};\n\nfunction getToolCallIds(message: BaseMessage): Set<string> {\n const messageRole = (message as BaseMessage & { role?: unknown }).role;\n if (message.getType() !== 'ai' && messageRole !== 'assistant') {\n return new Set<string>();\n }\n\n const ids = new Set<string>();\n const aiMessage = message as AIMessage;\n for (const toolCall of aiMessage.tool_calls ?? []) {\n if (typeof toolCall.id === 'string' && toolCall.id.length > 0) {\n ids.add(toolCall.id);\n }\n }\n\n if (Array.isArray(aiMessage.content)) {\n for (const part of aiMessage.content) {\n if (typeof part !== 'object') {\n continue;\n }\n const record = part as { type?: unknown; id?: unknown };\n if (\n (record.type === 'tool_use' || record.type === 'tool_call') &&\n typeof record.id === 'string' &&\n record.id.length > 0\n ) {\n ids.add(record.id);\n }\n }\n }\n\n const toolOutputSource = getResponsesToolOutputSource(message);\n if (toolOutputSource != null) {\n for (const item of toolOutputSource.items) {\n if (item == null || typeof item !== 'object') {\n continue;\n }\n const record = item as {\n type?: unknown;\n call_id?: unknown;\n };\n if (\n (record.type === 'function_call' ||\n record.type === 'custom_tool_call' ||\n record.type === 'computer_call') &&\n typeof record.call_id === 'string' &&\n record.call_id !== ''\n ) {\n ids.add(record.call_id);\n }\n }\n }\n\n return ids;\n}\n\ntype ResponsesToolOutputSource = {\n source: 'response_metadata' | 'tool_outputs';\n items: unknown[];\n};\n\nfunction getResponsesToolOutputSource(\n message: BaseMessage\n): ResponsesToolOutputSource | undefined {\n const responseOutput = readPropertyWithoutAccessors(\n message.response_metadata,\n 'output'\n );\n if (\n !responseOutput.accessor &&\n Array.isArray(responseOutput.value) &&\n !isProxy(responseOutput.value) &&\n responseOutput.value.length > 0\n ) {\n return {\n source: 'response_metadata',\n items: responseOutput.value,\n };\n }\n const fallbackOutput = readPropertyWithoutAccessors(\n message.additional_kwargs,\n 'tool_outputs'\n );\n if (\n !fallbackOutput.accessor &&\n Array.isArray(fallbackOutput.value) &&\n !isProxy(fallbackOutput.value)\n ) {\n return {\n source: 'tool_outputs',\n items: fallbackOutput.value,\n };\n }\n return undefined;\n}\n\nfunction getToolResultId(message: BaseMessage): string | null {\n if (message.getType() !== 'tool') {\n return null;\n }\n const toolMessage = message as ToolMessage & {\n tool_call_id?: unknown;\n toolCallId?: unknown;\n };\n if (\n typeof toolMessage.tool_call_id === 'string' &&\n toolMessage.tool_call_id.length > 0\n ) {\n return toolMessage.tool_call_id;\n }\n if (\n typeof toolMessage.toolCallId === 'string' &&\n toolMessage.toolCallId.length > 0\n ) {\n return toolMessage.toolCallId;\n }\n return null;\n}\n\nfunction resolveTokenCountForMessage({\n message,\n messageIndexMap,\n tokenCounter,\n indexTokenCountMap,\n}: {\n message: BaseMessage;\n messageIndexMap: Map<BaseMessage, number>;\n tokenCounter: TokenCounter;\n indexTokenCountMap: Record<string, number | undefined>;\n}): number {\n const originalIndex = messageIndexMap.get(message) ?? -1;\n if (originalIndex > -1 && indexTokenCountMap[originalIndex] != null) {\n return indexTokenCountMap[originalIndex] as number;\n }\n return tokenCounter(message);\n}\n\nexport function repairOrphanedToolMessages({\n context,\n allMessages,\n tokenCounter,\n indexTokenCountMap,\n}: {\n context: BaseMessage[];\n allMessages: BaseMessage[];\n tokenCounter: TokenCounter;\n indexTokenCountMap: Record<string, number | undefined>;\n}): {\n context: BaseMessage[];\n reclaimedTokens: number;\n droppedOrphanCount: number;\n /** Messages removed from context during orphan repair. These should be\n * appended to `messagesToRefine` so that summarization can still see them\n * (e.g. a ToolMessage whose parent AI was pruned). */\n droppedMessages: BaseMessage[];\n} {\n const messageIndexMap = new Map<BaseMessage, number>();\n for (let i = 0; i < allMessages.length; i++) {\n messageIndexMap.set(allMessages[i], i);\n }\n\n const validToolCallIds = new Set<string>();\n const presentToolResultIds = new Set<string>();\n for (const message of context) {\n for (const id of getToolCallIds(message)) {\n validToolCallIds.add(id);\n }\n const resultId = getToolResultId(message);\n if (resultId != null) {\n presentToolResultIds.add(resultId);\n }\n }\n\n let reclaimedTokens = 0;\n let droppedOrphanCount = 0;\n const repairedContext: BaseMessage[] = [];\n const droppedMessages: BaseMessage[] = [];\n\n for (const message of context) {\n if (message.getType() === 'tool') {\n const toolResultId = getToolResultId(message);\n if (toolResultId == null || !validToolCallIds.has(toolResultId)) {\n droppedOrphanCount += 1;\n reclaimedTokens += resolveTokenCountForMessage({\n message,\n tokenCounter,\n messageIndexMap,\n indexTokenCountMap,\n });\n droppedMessages.push(message);\n continue;\n }\n repairedContext.push(message);\n continue;\n }\n\n const messageRole = (message as BaseMessage & { role?: unknown }).role;\n if (message.getType() === 'ai' || messageRole === 'assistant') {\n const toolCallIds = getToolCallIds(message);\n if (toolCallIds.size > 0) {\n let hasOrphanToolCalls = false;\n for (const id of toolCallIds) {\n if (!presentToolResultIds.has(id)) {\n hasOrphanToolCalls = true;\n break;\n }\n }\n if (hasOrphanToolCalls) {\n const originalTokens = resolveTokenCountForMessage({\n message,\n messageIndexMap,\n tokenCounter,\n indexTokenCountMap,\n });\n const stripped = stripOrphanToolUseBlocks(\n message,\n presentToolResultIds\n );\n if (stripped != null) {\n const strippedTokens = tokenCounter(stripped);\n reclaimedTokens += originalTokens - strippedTokens;\n repairedContext.push(stripped);\n } else {\n droppedOrphanCount += 1;\n reclaimedTokens += originalTokens;\n droppedMessages.push(message);\n }\n continue;\n }\n }\n }\n\n repairedContext.push(message);\n }\n\n return {\n context: repairedContext,\n reclaimedTokens,\n droppedOrphanCount,\n droppedMessages,\n };\n}\n\n/**\n * Strips tool_use content blocks and tool_calls entries from an AI message\n * when their corresponding ToolMessages are not in the context.\n * Returns null if the message has no content left after stripping.\n */\nfunction stripOrphanToolUseBlocks(\n message: BaseMessage,\n presentToolResultIds: Set<string>\n): BaseMessage | null {\n const aiMessage = message as AIMessage;\n const keptToolCalls = (aiMessage.tool_calls ?? []).filter(\n (tc) => typeof tc.id === 'string' && presentToolResultIds.has(tc.id)\n );\n\n let keptContent: MessageContentComplex[] | string;\n if (Array.isArray(aiMessage.content)) {\n const filtered = (aiMessage.content as MessageContentComplex[]).filter(\n (block) => {\n if (typeof block !== 'object') {\n return true;\n }\n const record = block as { type?: unknown; id?: unknown };\n if (\n (record.type === 'tool_use' || record.type === 'tool_call') &&\n typeof record.id === 'string'\n ) {\n return presentToolResultIds.has(record.id);\n }\n return true;\n }\n );\n\n keptContent = filtered;\n } else {\n keptContent = aiMessage.content;\n }\n\n const toolOutputSource = getResponsesToolOutputSource(message);\n const keptToolOutputs =\n toolOutputSource?.items.filter((item) => {\n if (item == null || typeof item !== 'object') {\n return true;\n }\n const record = item as {\n type?: unknown;\n call_id?: unknown;\n };\n if (\n record.type !== 'function_call' &&\n record.type !== 'custom_tool_call' &&\n record.type !== 'computer_call'\n ) {\n return true;\n }\n return (\n typeof record.call_id === 'string' &&\n presentToolResultIds.has(record.call_id)\n );\n }) ?? [];\n\n if (\n keptToolCalls.length === 0 &&\n Array.isArray(keptContent) &&\n keptContent.length === 0 &&\n keptToolOutputs.length === 0\n ) {\n return null;\n }\n\n let responseMetadata = message.response_metadata;\n let additionalKwargs = message.additional_kwargs;\n if (toolOutputSource?.source === 'response_metadata') {\n responseMetadata = cloneWithProjectedProperties(responseMetadata, {\n output: keptToolOutputs,\n });\n } else if (toolOutputSource?.source === 'tool_outputs') {\n additionalKwargs = cloneWithProjectedProperties(additionalKwargs, {\n tool_outputs: keptToolOutputs,\n });\n }\n\n return cloneWithProjectedProperties(message, {\n content: toLangChainContent(keptContent),\n tool_calls: keptToolCalls.length > 0 ? keptToolCalls : undefined,\n response_metadata: responseMetadata,\n additional_kwargs: additionalKwargs,\n });\n}\n\n/**\n * Lightweight structural cleanup: strips orphan tool_use blocks from AI messages\n * and drops orphan ToolMessages whose AI counterpart is missing.\n *\n * Unlike `repairOrphanedToolMessages`, this does NOT track tokens — it is\n * intended as a final safety net in Graph.ts right before model invocation\n * to prevent Anthropic/Bedrock structural validation errors.\n *\n * Uses duck-typing instead of `getType()` because messages at this stage\n * may be plain objects (from LangGraph state serialization) rather than\n * proper BaseMessage class instances.\n *\n * Includes a fast-path: if every tool_call has a matching tool_result and\n * vice-versa, the original array is returned immediately with zero allocation.\n */\nexport function sanitizeOrphanToolBlocks(\n messages: BaseMessage[],\n onMessageCloned?: (source: BaseMessage, clone: BaseMessage) => void\n): BaseMessage[] {\n const allToolCallIds = new Set<string>();\n const allToolResultIds = new Set<string>();\n\n for (const msg of messages) {\n const msgAny = msg as unknown as Record<string, unknown>;\n if (typeof (msg as { getType?: unknown }).getType === 'function') {\n for (const id of getToolCallIds(msg)) {\n allToolCallIds.add(id);\n }\n }\n const toolCalls = msgAny.tool_calls as Array<{ id?: string }> | undefined;\n if (Array.isArray(toolCalls)) {\n for (const tc of toolCalls) {\n if (\n typeof tc.id === 'string' &&\n tc.id.length > 0 &&\n !tc.id.startsWith(Constants.ANTHROPIC_SERVER_TOOL_PREFIX)\n ) {\n allToolCallIds.add(tc.id);\n }\n }\n }\n if (Array.isArray(msgAny.content)) {\n for (const block of msgAny.content as Array<Record<string, unknown>>) {\n if (\n typeof block === 'object' &&\n (block.type === 'tool_use' || block.type === 'tool_call') &&\n typeof block.id === 'string' &&\n !block.id.startsWith(Constants.ANTHROPIC_SERVER_TOOL_PREFIX)\n ) {\n allToolCallIds.add(block.id);\n }\n }\n }\n const toolCallId = msgAny.tool_call_id as string | undefined;\n if (typeof toolCallId === 'string' && toolCallId.length > 0) {\n allToolResultIds.add(toolCallId);\n }\n }\n\n let hasOrphans = false;\n for (const id of allToolCallIds) {\n if (!allToolResultIds.has(id)) {\n hasOrphans = true;\n break;\n }\n }\n if (!hasOrphans) {\n for (const id of allToolResultIds) {\n if (!allToolCallIds.has(id)) {\n hasOrphans = true;\n break;\n }\n }\n }\n if (!hasOrphans) {\n return messages;\n }\n\n const result: BaseMessage[] = [];\n const strippedAiIndices = new Set<number>();\n\n for (const msg of messages) {\n const msgAny = msg as unknown as Record<string, unknown>;\n const msgType =\n typeof (msg as { getType?: unknown }).getType === 'function'\n ? msg.getType()\n : ((msgAny.role as string | undefined) ??\n (msgAny._type as string | undefined));\n\n const toolCallId = msgAny.tool_call_id as string | undefined;\n if (\n (msgType === 'tool' || msg instanceof ToolMessage) &&\n typeof toolCallId === 'string' &&\n !allToolCallIds.has(toolCallId)\n ) {\n continue;\n }\n\n const toolCalls = msgAny.tool_calls as Array<{ id?: string }> | undefined;\n if (\n (msgType === 'ai' ||\n msgType === 'assistant' ||\n msg instanceof AIMessage) &&\n Array.isArray(toolCalls) &&\n toolCalls.length > 0\n ) {\n const hasOrphanCalls = toolCalls.some(\n (tc) => typeof tc.id === 'string' && !allToolResultIds.has(tc.id)\n );\n if (hasOrphanCalls) {\n if (msg instanceof AIMessage) {\n const stripped = stripOrphanToolUseBlocks(msg, allToolResultIds);\n if (stripped != null) {\n strippedAiIndices.add(result.length);\n onMessageCloned?.(msg, stripped);\n result.push(stripped);\n }\n continue;\n }\n const keptToolCalls = toolCalls.filter(\n (tc) => typeof tc.id === 'string' && allToolResultIds.has(tc.id)\n );\n const keptContent = Array.isArray(msgAny.content)\n ? (msgAny.content as Array<Record<string, unknown>>).filter(\n (block) => {\n if (typeof block !== 'object') return true;\n if (\n (block.type === 'tool_use' || block.type === 'tool_call') &&\n typeof block.id === 'string'\n ) {\n return allToolResultIds.has(block.id);\n }\n return true;\n }\n )\n : msgAny.content;\n if (\n keptToolCalls.length === 0 &&\n Array.isArray(keptContent) &&\n keptContent.length === 0\n ) {\n continue;\n }\n strippedAiIndices.add(result.length);\n const patched = Object.create(\n Object.getPrototypeOf(msg),\n Object.getOwnPropertyDescriptors(msg)\n );\n patched.tool_calls = keptToolCalls.length > 0 ? keptToolCalls : [];\n patched.content = keptContent;\n onMessageCloned?.(msg, patched as BaseMessage);\n result.push(patched as BaseMessage);\n continue;\n }\n }\n\n result.push(msg);\n }\n\n // Bedrock/Anthropic require the conversation to end with a user message;\n // a stripped AI message (tool_use removed) represents a dead-end exchange.\n while (result.length > 0 && strippedAiIndices.has(result.length - 1)) {\n result.pop();\n }\n\n return result;\n}\n\n/**\n * Truncates an oversized tool_use `input` field using head+tail, preserving\n * it as a valid JSON object. Head gets ~70%, tail gets ~30% so the model\n * sees both the beginning (what was called) and end (closing structure/values).\n * Falls back to head-only when the budget is too small for a meaningful tail.\n */\nfunction isIndexInContext(\n arrayA: unknown[],\n arrayB: unknown[],\n targetIndex: number\n): boolean {\n const startingIndexInA = arrayA.length - arrayB.length;\n return targetIndex >= startingIndexInA;\n}\n\nfunction addThinkingBlock(\n message: AIMessage,\n thinkingBlock: ThinkingContentText | ReasoningContentText\n): AIMessage {\n const content: MessageContentComplex[] = Array.isArray(message.content)\n ? (message.content as MessageContentComplex[])\n : [\n {\n type: ContentTypes.TEXT,\n text: message.content,\n },\n ];\n /** Edge case, the message already has the thinking block */\n if (content[0]?.type === thinkingBlock.type) {\n return message;\n }\n content.unshift(thinkingBlock);\n return new AIMessage({\n ...message,\n content: toLangChainContent(content),\n });\n}\n\n/**\n * Calculates the total tokens from a single usage object\n *\n * @param usage The usage metadata object containing token information\n * @returns An object containing the total input and output tokens\n */\nexport function calculateTotalTokens(\n usage: Partial<UsageMetadata>\n): UsageMetadata {\n const baseInputTokens = Number(usage.input_tokens) || 0;\n const cacheCreation = Number(usage.input_token_details?.cache_creation) || 0;\n const cacheRead = Number(usage.input_token_details?.cache_read) || 0;\n const totalOutputTokens = Number(usage.output_tokens) || 0;\n const cacheSum = cacheCreation + cacheRead;\n // Anthropic: input_tokens excludes cache, cache_read can be much larger than input_tokens.\n // OpenAI: input_tokens includes cache, cache_read is always <= input_tokens.\n const cacheIsAdditive = cacheSum > 0 && cacheSum > baseInputTokens;\n const totalInputTokens = cacheIsAdditive\n ? baseInputTokens + cacheSum\n : baseInputTokens;\n\n return {\n input_tokens: totalInputTokens,\n output_tokens: totalOutputTokens,\n total_tokens: totalInputTokens + totalOutputTokens,\n };\n}\n\nexport type PruningResult = {\n context: BaseMessage[];\n remainingContextTokens: number;\n messagesToRefine: BaseMessage[];\n thinkingStartIndex?: number;\n};\n\n/**\n * Locates a reasoning block in assistant content. Reasoning blocks carry\n * provider-specific `type` tags: Anthropic emits `thinking`, while Bedrock and\n * OpenAI-compatible reasoning providers (DeepSeek-R1, DashScope/Qwen-thinking)\n * emit `reasoning_content`. DeepSeek/Qwen route through the `THINKING` default\n * even though their blocks are `reasoning_content` and aren't normalized\n * upstream, so for the `THINKING` case we also accept `reasoning_content` — this\n * is what fixes issue #191.\n *\n * The broadening is intentionally one-directional. A Bedrock run\n * (`REASONING_CONTENT`) must NOT match an Anthropic `thinking` block: the\n * Bedrock input converter rejects `thinking` blocks outright\n * (`src/llm/bedrock/utils/message_inputs.ts`), so reattaching one to a\n * surviving message would make the request fail before it is sent.\n */\nfunction findReasoningBlock(\n content: MessageContentComplex[],\n reasoningType: ContentTypes\n): ThinkingContentText | ReasoningContentText | undefined {\n return content.find(\n (part) =>\n part.type === reasoningType ||\n (reasoningType === ContentTypes.THINKING &&\n part.type === ContentTypes.REASONING_CONTENT)\n ) as ThinkingContentText | ReasoningContentText | undefined;\n}\n\n/**\n * Processes an array of messages and returns a context of messages that fit within a specified token limit.\n * It iterates over the messages from newest to oldest, adding them to the context until the token limit is reached.\n *\n * @param options Configuration options for processing messages\n * @returns Object containing the message context, remaining tokens, messages not included, and summary index\n */\nexport function getMessagesWithinTokenLimit({\n messages: _messages,\n maxContextTokens,\n indexTokenCountMap,\n startType: _startType,\n thinkingEnabled,\n tokenCounter,\n thinkingStartIndex: _thinkingStartIndex = -1,\n reasoningType = ContentTypes.THINKING,\n instructionTokens: _instructionTokens = 0,\n}: {\n messages: BaseMessage[];\n maxContextTokens: number;\n indexTokenCountMap: Record<string, number | undefined>;\n startType?: string | string[];\n thinkingEnabled?: boolean;\n tokenCounter: TokenCounter;\n thinkingStartIndex?: number;\n reasoningType?: ContentTypes.THINKING | ContentTypes.REASONING_CONTENT;\n /**\n * Token overhead for instructions (system message + tool schemas + summary)\n * that are NOT included in `messages`. When messages[0] is already a\n * SystemMessage the budget is deducted from its indexTokenCountMap entry\n * as before; otherwise this value is subtracted from the available budget.\n */\n instructionTokens?: number;\n}): PruningResult {\n // Every reply is primed with <|start|>assistant<|message|>, so we\n // start with 3 tokens for the label after all messages have been counted.\n let currentTokenCount = REPLY_PRIMER_TOKENS;\n const instructions =\n _messages[0]?.getType() === 'system' ? _messages[0] : undefined;\n const instructionsTokenCount =\n instructions != null ? (indexTokenCountMap[0] ?? 0) : _instructionTokens;\n const initialContextTokens = maxContextTokens - instructionsTokenCount;\n let remainingContextTokens = initialContextTokens;\n let startType = _startType;\n const originalLength = _messages.length;\n const messages = [..._messages];\n /**\n * IMPORTANT: this context array gets reversed at the end, since the latest messages get pushed first.\n *\n * This may be confusing to read, but it is done to ensure the context is in the correct order for the model.\n * */\n let context: Array<BaseMessage | undefined> = [];\n\n let thinkingStartIndex = _thinkingStartIndex;\n let thinkingEndIndex = -1;\n let thinkingBlock: ThinkingContentText | ReasoningContentText | undefined;\n const endIndex = instructions != null ? 1 : 0;\n const prunedMemory: BaseMessage[] = [];\n\n if (_thinkingStartIndex > -1) {\n const thinkingMessageContent = messages[_thinkingStartIndex]?.content;\n if (Array.isArray(thinkingMessageContent)) {\n thinkingBlock = findReasoningBlock(thinkingMessageContent, reasoningType);\n }\n }\n\n if (currentTokenCount < remainingContextTokens) {\n let currentIndex = messages.length;\n while (\n messages.length > 0 &&\n currentTokenCount < remainingContextTokens &&\n currentIndex > endIndex\n ) {\n currentIndex--;\n if (messages.length === 1 && instructions) {\n break;\n }\n const poppedMessage = messages.pop();\n if (!poppedMessage) continue;\n const messageType = poppedMessage.getType();\n if (\n thinkingEnabled === true &&\n thinkingEndIndex === -1 &&\n currentIndex === originalLength - 1 &&\n (messageType === 'ai' || messageType === 'tool')\n ) {\n thinkingEndIndex = currentIndex;\n }\n if (\n thinkingEndIndex > -1 &&\n !thinkingBlock &&\n thinkingStartIndex < 0 &&\n messageType === 'ai' &&\n Array.isArray(poppedMessage.content)\n ) {\n thinkingBlock = findReasoningBlock(\n poppedMessage.content,\n reasoningType\n );\n thinkingStartIndex = thinkingBlock != null ? currentIndex : -1;\n }\n /**\n * Exited the trailing assistant/tool sequence without finding a\n * thinking block. Anthropic does not require Claude to emit a\n * thinking block before every tool call, so the absence of one is\n * a valid sequence — clear thinkingEndIndex so the pruner does not\n * treat it as malformed.\n */\n if (\n thinkingEndIndex > -1 &&\n thinkingStartIndex < 0 &&\n !thinkingBlock &&\n messageType !== 'ai' &&\n messageType !== 'tool'\n ) {\n thinkingEndIndex = -1;\n }\n\n const tokenCount = indexTokenCountMap[currentIndex] ?? 0;\n\n if (\n prunedMemory.length === 0 &&\n currentTokenCount + tokenCount <= remainingContextTokens\n ) {\n context.push(poppedMessage);\n currentTokenCount += tokenCount;\n } else {\n prunedMemory.push(poppedMessage);\n if (thinkingEndIndex > -1 && thinkingStartIndex < 0) {\n continue;\n }\n break;\n }\n }\n\n if (context[context.length - 1]?.getType() === 'tool') {\n startType = ['ai', 'human'];\n }\n\n if (startType != null && startType.length > 0 && context.length > 0) {\n let requiredTypeIndex = -1;\n\n let totalTokens = 0;\n for (let i = context.length - 1; i >= 0; i--) {\n const currentType = context[i]?.getType() ?? '';\n if (\n Array.isArray(startType)\n ? startType.includes(currentType)\n : currentType === startType\n ) {\n requiredTypeIndex = i + 1;\n break;\n }\n const originalIndex = originalLength - 1 - i;\n totalTokens += indexTokenCountMap[originalIndex] ?? 0;\n }\n\n if (requiredTypeIndex > 0) {\n currentTokenCount -= totalTokens;\n context = context.slice(0, requiredTypeIndex);\n }\n }\n }\n\n if (instructions && originalLength > 0) {\n context.push(_messages[0] as BaseMessage);\n messages.shift();\n }\n\n // The backward iteration pushed messages in reverse chronological order\n // (newest first). Restore correct chronological order before prepending\n // the remaining (older) messages so that messagesToRefine is always\n // ordered oldest → newest. Without this, callers that rely on\n // messagesToRefine order (e.g. the summarization node extracting the\n // latest turn) would see tool_use/tool_result pairs in the wrong order.\n prunedMemory.reverse();\n\n if (messages.length > 0) {\n prunedMemory.unshift(...messages);\n }\n\n remainingContextTokens -= currentTokenCount;\n const result: PruningResult = {\n remainingContextTokens,\n context: [] as BaseMessage[],\n messagesToRefine: prunedMemory,\n };\n\n if (thinkingStartIndex > -1) {\n result.thinkingStartIndex = thinkingStartIndex;\n }\n\n if (\n prunedMemory.length === 0 ||\n thinkingEndIndex < 0 ||\n (thinkingStartIndex > -1 &&\n isIndexInContext(_messages, context, thinkingStartIndex))\n ) {\n result.context = context.reverse() as BaseMessage[];\n return result;\n }\n\n /**\n * A trailing reasoning sequence was detected but its block could not be\n * located in the surviving context. Rather than throw — which permanently\n * bricks the conversation, re-firing on every retry of the same thread (see\n * issue #191) — return the partially-pruned context and let the provider\n * surface a real, recoverable error if the payload is genuinely malformed.\n * Strict providers (Anthropic) reject it cleanly; lenient ones (DeepSeek,\n * Qwen) proceed. The pruner cannot know which applies, so it must not be the\n * one to make the failure fatal.\n */\n if ((thinkingEndIndex > -1 && thinkingStartIndex < 0) || !thinkingBlock) {\n /**\n * No block was located, so any `thinkingStartIndex` set above came from a\n * stale carried-over index pointing at a block-less message. Drop it:\n * `createPruneMessages` persists the returned index as\n * `runThinkingStartIndex`, and a stale value would suppress the trailing\n * scan (`thinkingStartIndex < 0`) on later turns, causing a real reasoning\n * block to be missed and never reattached.\n */\n delete result.thinkingStartIndex;\n result.context = context.reverse() as BaseMessage[];\n return result;\n }\n\n let assistantIndex = -1;\n for (let i = 0; i < context.length; i++) {\n const currentMessage = context[i];\n const type = currentMessage?.getType();\n if (type === 'ai') {\n assistantIndex = i;\n }\n if (assistantIndex > -1 && (type === 'human' || type === 'system')) {\n break;\n }\n }\n\n if (assistantIndex === -1) {\n // No AI messages survived pruning — skip thinking block reattachment.\n // The caller handles empty/insufficient context via overflow recovery.\n result.context = context.reverse() as BaseMessage[];\n return result;\n }\n\n thinkingStartIndex = originalLength - 1 - assistantIndex;\n const thinkingTokenCount = tokenCounter(\n new AIMessage({ content: toLangChainContent([thinkingBlock]) })\n );\n const newRemainingCount = remainingContextTokens - thinkingTokenCount;\n const newMessage = addThinkingBlock(\n context[assistantIndex] as AIMessage,\n thinkingBlock\n );\n context[assistantIndex] = newMessage;\n if (newRemainingCount > 0) {\n result.context = context.reverse() as BaseMessage[];\n return result;\n }\n\n const thinkingMessage: AIMessage = context[assistantIndex] as AIMessage;\n const newThinkingMessageTokenCount =\n (indexTokenCountMap[thinkingStartIndex] ?? 0) + thinkingTokenCount;\n remainingContextTokens = initialContextTokens - newThinkingMessageTokenCount;\n currentTokenCount = REPLY_PRIMER_TOKENS;\n let newContext: BaseMessage[] = [];\n const secondRoundMessages = [..._messages];\n let currentIndex = secondRoundMessages.length;\n while (\n secondRoundMessages.length > 0 &&\n currentTokenCount < remainingContextTokens &&\n currentIndex > thinkingStartIndex\n ) {\n currentIndex--;\n const poppedMessage = secondRoundMessages.pop();\n if (!poppedMessage) continue;\n const tokenCount = indexTokenCountMap[currentIndex] ?? 0;\n if (currentTokenCount + tokenCount <= remainingContextTokens) {\n newContext.push(poppedMessage);\n currentTokenCount += tokenCount;\n } else {\n messages.push(poppedMessage);\n break;\n }\n }\n\n const firstMessage = newContext[newContext.length - 1];\n const firstMessageType = newContext[newContext.length - 1].getType();\n if (firstMessageType === 'tool') {\n startType = ['ai', 'human'];\n }\n\n if (startType != null && startType.length > 0 && newContext.length > 0) {\n let requiredTypeIndex = -1;\n\n let totalTokens = 0;\n for (let i = newContext.length - 1; i >= 0; i--) {\n const currentType = newContext[i]?.getType() ?? '';\n if (\n Array.isArray(startType)\n ? startType.includes(currentType)\n : currentType === startType\n ) {\n requiredTypeIndex = i + 1;\n break;\n }\n const originalIndex = originalLength - 1 - i;\n totalTokens += indexTokenCountMap[originalIndex] ?? 0;\n }\n\n if (requiredTypeIndex > 0) {\n currentTokenCount -= totalTokens;\n newContext = newContext.slice(0, requiredTypeIndex);\n }\n }\n\n if (firstMessageType === 'ai') {\n const newMessage = addThinkingBlock(\n firstMessage as AIMessage,\n thinkingBlock\n );\n newContext[newContext.length - 1] = newMessage;\n } else {\n newContext.push(thinkingMessage);\n }\n\n if (instructions && originalLength > 0) {\n newContext.push(_messages[0] as BaseMessage);\n secondRoundMessages.shift();\n }\n\n result.context = newContext.reverse();\n return result;\n}\n\nexport function checkValidNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value) && value > 0;\n}\n\n/**\n * Observation masking: replaces consumed ToolMessage content with tight\n * head+tail truncations that serve as informative placeholders.\n *\n * A ToolMessage is \"consumed\" when a subsequent AI message exists that is NOT\n * purely tool calls — meaning the model has already read and acted on the\n * result. Unconsumed results (the latest tool outputs the model hasn't\n * responded to yet) are left intact so the model can still use them.\n *\n * AI messages are never masked — they contain the model's own reasoning and\n * conclusions, which is what prevents the model from repeating work after\n * its tool results are masked.\n *\n * @returns The number of tool messages that were masked.\n */\nexport function maskConsumedToolResults(params: {\n messages: BaseMessage[];\n indexTokenCountMap: Record<string, number | undefined>;\n tokenCounter: TokenCounter;\n /** Raw-space token budget available for all consumed tool results combined.\n * When provided, the budget is distributed across consumed results weighted\n * by recency (newest get the most, oldest get MASKED_RESULT_MAX_CHARS min).\n * When omitted, falls back to a flat MASKED_RESULT_MAX_CHARS per result. */\n availableRawBudget?: number;\n /** When provided, original (pre-masking) content is stored here keyed by\n * message index — only for entries that actually get truncated. */\n originalContentStore?: Map<number, string>;\n /** Called after storing a newly captured entry. */\n onContentStored?: (index: number, content: string) => void;\n}): number {\n const { messages, indexTokenCountMap, tokenCounter } = params;\n let maskedCount = 0;\n\n // Pass 1 (backward): identify consumed tool message indices.\n // A ToolMessage is \"consumed\" once we've seen a subsequent AI message with\n // substantive text content (not just tool calls).\n // Collected in forward order (oldest first) for recency weighting.\n let seenNonToolCallAI = false;\n const consumedIndices: number[] = [];\n\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n const type = msg.getType();\n\n if (type === 'ai') {\n const hasText =\n typeof msg.content === 'string'\n ? msg.content.trim().length > 0\n : Array.isArray(msg.content) &&\n msg.content.some(\n (b) =>\n typeof b === 'object' &&\n (b as Record<string, unknown>).type === 'text' &&\n typeof (b as Record<string, unknown>).text === 'string' &&\n ((b as Record<string, unknown>).text as string).trim().length >\n 0\n );\n if (hasText) {\n seenNonToolCallAI = true;\n }\n } else if (type === 'tool' && seenNonToolCallAI) {\n consumedIndices.push(i);\n }\n }\n\n if (consumedIndices.length === 0) {\n return 0;\n }\n\n consumedIndices.reverse();\n\n const totalBudgetChars =\n params.availableRawBudget != null && params.availableRawBudget > 0\n ? params.availableRawBudget * 4\n : 0;\n\n const count = consumedIndices.length;\n\n for (let c = 0; c < count; c++) {\n const i = consumedIndices[c];\n const message = messages[i];\n if (isComputerCallOutputMessage(message)) {\n continue;\n }\n const content = message.content;\n\n let maxChars: number;\n if (totalBudgetChars > 0) {\n const position = count > 1 ? c / (count - 1) : 1;\n const weight = 0.2 + 0.8 * position;\n const totalWeight = count > 1 ? 0.6 * count : 1;\n const share = (weight / totalWeight) * totalBudgetChars;\n maxChars = Math.max(MASKED_RESULT_MAX_CHARS, Math.floor(share));\n } else {\n maxChars = MASKED_RESULT_MAX_CHARS;\n }\n\n const compacted = compactToolContent(content, maxChars);\n if (!compacted.changed) {\n continue;\n }\n\n if (params.originalContentStore && !params.originalContentStore.has(i)) {\n const original = serializeToolContentBounded(\n content,\n ORIGINAL_CONTENT_MAX_CHARS\n );\n params.originalContentStore.set(i, original);\n if (params.onContentStored) {\n params.onContentStored(i, original);\n }\n }\n\n const cloned = cloneToolMessageWithContent(\n message as ToolMessage,\n compacted.content\n );\n messages[i] = cloned;\n indexTokenCountMap[i] = tokenCounter(cloned);\n maskedCount++;\n }\n\n return maskedCount;\n}\n\n/**\n * Pre-flight truncation: truncates oversized ToolMessage content before the\n * main backward-iteration pruning runs. Unlike the ingestion guard (which caps\n * at tool-execution time), pre-flight truncation applies per-turn based on the\n * current context window budget (which may have shrunk due to growing conversation).\n *\n * After truncation, recounts tokens via tokenCounter and updates indexTokenCountMap\n * so subsequent pruning works with accurate counts.\n *\n * @returns The number of tool messages that were truncated.\n */\nexport function preFlightTruncateToolResults(params: {\n messages: BaseMessage[];\n maxContextTokens: number;\n indexTokenCountMap: Record<string, number | undefined>;\n tokenCounter: TokenCounter;\n}): number {\n const { messages, maxContextTokens, indexTokenCountMap, tokenCounter } =\n params;\n const baseMaxChars = calculateMaxToolResultChars(maxContextTokens);\n let truncatedCount = 0;\n\n const toolIndices: number[] = [];\n for (let i = 0; i < messages.length; i++) {\n if (\n messages[i].getType() === 'tool' &&\n !isComputerCallOutputMessage(messages[i])\n ) {\n toolIndices.push(i);\n }\n }\n\n for (let t = 0; t < toolIndices.length; t++) {\n const i = toolIndices[t];\n const message = messages[i];\n const content = message.content;\n\n const position = toolIndices.length > 1 ? t / (toolIndices.length - 1) : 1;\n const recencyFactor = 0.2 + 0.8 * position;\n const maxChars = Math.max(200, Math.floor(baseMaxChars * recencyFactor));\n\n const compacted = compactToolContent(content, maxChars);\n if (!compacted.changed) {\n continue;\n }\n const cloned = cloneToolMessageWithContent(\n message as ToolMessage,\n compacted.content\n );\n messages[i] = cloned;\n indexTokenCountMap[i] = tokenCounter(cloned);\n truncatedCount++;\n }\n\n return truncatedCount;\n}\n\n/**\n * Pre-flight truncation: truncates oversized `tool_use` input fields in AI messages.\n *\n * Tool call inputs (arguments) can be very large — e.g., code evaluation payloads from\n * MCP tools like chrome-devtools. Since these tool calls have already been executed,\n * the model only needs a summary of what was called, not the full arguments. Truncating\n * them before pruning can prevent entire messages from being dropped.\n *\n * Uses 15% of the context window (in estimated characters, ~4 chars/token) as the\n * per-input cap, capped at 200K chars.\n *\n * @returns The number of AI messages that had tool_use inputs truncated.\n */\nconst HARD_MAX_TOOL_CALL_INPUT_CHARS = 200_000;\nconst MIN_JSON_VALUE_CHARS = 4;\nconst ACCESSOR_INPUT_PLACEHOLDER = '[Property accessor omitted]';\n\ntype ToolInputProjection = {\n value: unknown;\n changed: boolean;\n};\n\ntype PropertyRead = {\n found: boolean;\n own: boolean;\n accessor: boolean;\n value?: unknown;\n};\n\nfunction normalizeToolInputLimit(maxChars: number): number {\n if (!Number.isFinite(maxChars)) {\n return HARD_MAX_TOOL_CALL_INPUT_CHARS;\n }\n return Math.max(MIN_JSON_VALUE_CHARS, Math.floor(maxChars));\n}\n\nfunction readPropertyWithoutAccessors(\n value: object,\n key: PropertyKey\n): PropertyRead {\n let current: object | null = value;\n for (let depth = 0; current != null && depth < 100; depth++) {\n if (isProxy(current)) {\n return { found: true, own: current === value, accessor: true };\n }\n let descriptor: PropertyDescriptor | undefined;\n try {\n descriptor = Object.getOwnPropertyDescriptor(current, key);\n } catch {\n return { found: true, own: current === value, accessor: true };\n }\n if (descriptor != null) {\n if (!('value' in descriptor)) {\n return { found: true, own: current === value, accessor: true };\n }\n return {\n found: true,\n own: current === value,\n accessor: false,\n value: descriptor.value,\n };\n }\n try {\n current = Object.getPrototypeOf(current) as object | null;\n } catch {\n return { found: true, own: false, accessor: true };\n }\n }\n return current == null\n ? { found: false, own: false, accessor: false }\n : { found: true, own: false, accessor: true };\n}\n\nfunction cloneWithProjectedProperties<T extends object>(\n value: T,\n changes: Readonly<Record<string, unknown>>\n): T {\n const descriptors = Object.getOwnPropertyDescriptors(value) as Record<\n string,\n PropertyDescriptor | undefined\n >;\n for (const [key, projectedValue] of Object.entries(changes)) {\n const descriptor = descriptors[key];\n descriptors[key] = {\n configurable: descriptor?.configurable ?? true,\n enumerable: descriptor?.enumerable ?? true,\n value: projectedValue,\n writable: descriptor?.writable ?? true,\n };\n }\n return Object.create(\n Object.getPrototypeOf(value),\n descriptors as PropertyDescriptorMap\n ) as T;\n}\n\nfunction createBoundedTruncationValue(\n preview: string,\n originalChars: number,\n maxChars: number\n): unknown {\n const normalizedMaxChars = normalizeToolInputLimit(maxChars);\n const emptyEnvelope = {\n _truncated: '',\n _originalChars: originalChars,\n };\n if (JSON.stringify(emptyEnvelope).length > normalizedMaxChars) {\n /**\n * Even the empty envelope overflows the cap, so no preview survives —\n * but the result must still be a JSON OBJECT, never `null`. This value\n * replaces a `tool_use.input` / tool-call `args` on messages that are\n * mutated IN PLACE into graph state (`preFlightTruncateToolCallInputs`),\n * and Anthropic rejects a replayed non-object input with a 400\n * (`tool_use.input: Input should be an object`). Observed live: a tight\n * summarization budget shrank the cap below the envelope, nulled a\n * retained calculator call's input and args, and the next model call\n * failed on replay.\n */\n return {};\n }\n\n let low = 0;\n let high = Math.min(preview.length, normalizedMaxChars);\n while (low < high) {\n const next = Math.ceil((low + high) / 2);\n const candidate = {\n _truncated: preview.slice(0, next),\n _originalChars: originalChars,\n };\n if (JSON.stringify(candidate).length <= normalizedMaxChars) {\n low = next;\n } else {\n high = next - 1;\n }\n }\n const truncationMarker = '… [truncated]';\n const boundedPreview =\n low < preview.length && low >= truncationMarker.length\n ? preview.slice(0, low - truncationMarker.length) + truncationMarker\n : preview.slice(0, low);\n return {\n _truncated: boundedPreview,\n _originalChars: originalChars,\n };\n}\n\nfunction projectToolInputWithinLimit(\n input: unknown,\n maxChars: number\n): ToolInputProjection {\n const normalizedMaxChars = normalizeToolInputLimit(maxChars);\n const serialized = serializeStructuredValueBounded(input, normalizedMaxChars);\n if (serialized.truncated) {\n return {\n value: createBoundedTruncationValue(\n serialized.content,\n serialized.originalChars,\n normalizedMaxChars\n ),\n changed: true,\n };\n }\n if (!hasUnsafeStructuredSerialization(input)) {\n return { value: input, changed: false };\n }\n\n try {\n return { value: JSON.parse(serialized.content), changed: true };\n } catch {\n return {\n value: createBoundedTruncationValue(\n serialized.content,\n serialized.originalChars,\n normalizedMaxChars\n ),\n changed: true,\n };\n }\n}\n\n/**\n * Serializes one structured tool-call input as valid, bounded JSON without\n * invoking user-defined accessors or `toJSON`.\n */\nexport function serializeToolCallInput(\n input: unknown,\n maxChars = HARD_MAX_TOOL_CALL_INPUT_CHARS\n): string {\n const normalizedMaxChars = normalizeToolInputLimit(maxChars);\n const projected = projectToolInputWithinLimit(input, normalizedMaxChars);\n const serialized = serializeStructuredValueBounded(\n projected.value,\n normalizedMaxChars\n );\n if (!serialized.truncated) {\n return serialized.content === 'undefined' ? 'null' : serialized.content;\n }\n const fallback = createBoundedTruncationValue(\n serialized.content,\n serialized.originalChars,\n normalizedMaxChars\n );\n return JSON.stringify(fallback);\n}\n\nfunction projectKnownInputProperty(\n value: object,\n key: string,\n maxChars: number,\n changes: Record<string, unknown>\n): void {\n const property = readPropertyWithoutAccessors(value, key);\n if (!property.found) {\n return;\n }\n const projected = property.accessor\n ? { value: ACCESSOR_INPUT_PLACEHOLDER, changed: true }\n : projectToolInputWithinLimit(property.value, maxChars);\n if (projected.changed || !property.own) {\n changes[key] = projected.value;\n }\n}\n\nfunction getStringProperty(value: object, key: string): string | undefined {\n const property = readPropertyWithoutAccessors(value, key);\n return !property.accessor && typeof property.value === 'string'\n ? property.value\n : undefined;\n}\n\nfunction projectInlineToolInput(\n block: MessageContentComplex,\n maxChars: number\n): MessageContentComplex {\n const type = getStringProperty(block, 'type');\n if (type !== 'tool_use' && type !== 'tool_call') {\n return block;\n }\n\n const changes: Record<string, unknown> = {};\n projectKnownInputProperty(block, 'input', maxChars, changes);\n projectKnownInputProperty(block, 'args', maxChars, changes);\n\n const nestedProperty = readPropertyWithoutAccessors(block, 'tool_call');\n if (\n nestedProperty.found &&\n !nestedProperty.accessor &&\n nestedProperty.value != null &&\n typeof nestedProperty.value === 'object'\n ) {\n const nestedChanges: Record<string, unknown> = {};\n projectKnownInputProperty(\n nestedProperty.value,\n 'args',\n maxChars,\n nestedChanges\n );\n if (Object.keys(nestedChanges).length > 0) {\n changes.tool_call = cloneWithProjectedProperties(\n nestedProperty.value,\n nestedChanges\n );\n } else if (!nestedProperty.own) {\n changes.tool_call = nestedProperty.value;\n }\n } else if (nestedProperty.accessor) {\n changes.tool_call = { args: ACCESSOR_INPUT_PLACEHOLDER };\n }\n\n return Object.keys(changes).length > 0\n ? cloneWithProjectedProperties(block, changes)\n : block;\n}\n\nfunction projectSerializedArguments(\n value: unknown,\n maxChars: number\n): { value: string; changed: boolean } {\n const normalizedMaxChars = normalizeToolInputLimit(maxChars);\n if (typeof value === 'string' && value.length <= normalizedMaxChars) {\n return { value, changed: false };\n }\n return {\n value: serializeToolCallInput(value, normalizedMaxChars),\n changed: true,\n };\n}\n\nfunction selectProjectedSerializedArguments(\n property: PropertyRead,\n canonical: string | undefined,\n maxChars: number\n): { value: string; changed: boolean } {\n if (canonical != null) {\n return { value: canonical, changed: property.value !== canonical };\n }\n if (property.accessor) {\n return {\n value: serializeToolCallInput(ACCESSOR_INPUT_PLACEHOLDER, maxChars),\n changed: true,\n };\n }\n return projectSerializedArguments(property.value, maxChars);\n}\n\nfunction projectRawOpenAIToolCalls(\n rawToolCalls: unknown,\n maxChars: number,\n canonicalArguments: ReadonlyMap<string, string>\n): { value: unknown; changed: boolean } {\n if (!Array.isArray(rawToolCalls)) {\n return { value: rawToolCalls, changed: false };\n }\n\n const state = { changed: false };\n const projected = rawToolCalls.map((rawToolCall) => {\n if (rawToolCall == null || typeof rawToolCall !== 'object') {\n return rawToolCall;\n }\n const functionProperty = readPropertyWithoutAccessors(\n rawToolCall,\n 'function'\n );\n if (\n !functionProperty.found ||\n functionProperty.accessor ||\n functionProperty.value == null ||\n typeof functionProperty.value !== 'object'\n ) {\n return rawToolCall;\n }\n\n const argsProperty = readPropertyWithoutAccessors(\n functionProperty.value,\n 'arguments'\n );\n if (!argsProperty.found) {\n return rawToolCall;\n }\n const callId = getStringProperty(rawToolCall, 'id');\n const canonical =\n callId != null ? canonicalArguments.get(callId) : undefined;\n const projectedArgs = selectProjectedSerializedArguments(\n argsProperty,\n canonical,\n maxChars\n );\n if (!projectedArgs.changed && functionProperty.own && argsProperty.own) {\n return rawToolCall;\n }\n\n state.changed = true;\n const projectedFunction = cloneWithProjectedProperties(\n functionProperty.value,\n { arguments: projectedArgs.value }\n );\n return cloneWithProjectedProperties(rawToolCall, {\n function: projectedFunction,\n });\n });\n return {\n value: state.changed ? projected : rawToolCalls,\n changed: state.changed,\n };\n}\n\nfunction projectLegacyFunctionCall(\n property: PropertyRead,\n maxChars: number\n): { value: unknown; changed: boolean } {\n if (!property.found) {\n return { value: property.value, changed: false };\n }\n if (property.own && !property.accessor && property.value === undefined) {\n return { value: undefined, changed: false };\n }\n if (\n property.accessor ||\n !property.own ||\n property.value == null ||\n typeof property.value !== 'object'\n ) {\n return { value: undefined, changed: true };\n }\n\n const nameProperty = readPropertyWithoutAccessors(property.value, 'name');\n const argsProperty = readPropertyWithoutAccessors(\n property.value,\n 'arguments'\n );\n if (\n nameProperty.accessor ||\n !nameProperty.own ||\n typeof nameProperty.value !== 'string' ||\n nameProperty.value === '' ||\n nameProperty.value.length > normalizeToolInputLimit(maxChars) ||\n !argsProperty.found ||\n argsProperty.accessor ||\n !argsProperty.own\n ) {\n return { value: undefined, changed: true };\n }\n try {\n const prototype = Object.getPrototypeOf(property.value);\n const enumerableKeys = Object.keys(property.value);\n if (\n (prototype === Object.prototype || prototype === null) &&\n enumerableKeys.length === 2 &&\n enumerableKeys.includes('name') &&\n enumerableKeys.includes('arguments') &&\n typeof argsProperty.value === 'string' &&\n argsProperty.value.length <= normalizeToolInputLimit(maxChars) &&\n !hasUnsafeStructuredSerialization(property.value)\n ) {\n return { value: property.value, changed: false };\n }\n } catch {\n return { value: undefined, changed: true };\n }\n const projectedArgs = selectProjectedSerializedArguments(\n argsProperty,\n undefined,\n maxChars\n );\n return {\n value: {\n name: nameProperty.value,\n arguments: projectedArgs.value,\n },\n changed: true,\n };\n}\n\nfunction projectResponsesOutput(\n output: unknown,\n maxChars: number,\n canonicalArguments: ReadonlyMap<string, string>,\n canonicalInputs: ReadonlyMap<string, unknown>\n): { value: unknown; changed: boolean } {\n if (!Array.isArray(output)) {\n return { value: output, changed: false };\n }\n\n const state = { changed: false };\n const projected = output.map((item) => {\n if (item == null || typeof item !== 'object') {\n return item;\n }\n const type = getStringProperty(item, 'type');\n if (\n type !== 'function_call' &&\n type !== 'custom_tool_call' &&\n type !== 'computer_call'\n ) {\n return item;\n }\n let inputKey = 'action';\n if (type === 'function_call') {\n inputKey = 'arguments';\n } else if (type === 'custom_tool_call') {\n inputKey = 'input';\n }\n const inputProperty = readPropertyWithoutAccessors(item, inputKey);\n if (!inputProperty.found) {\n return item;\n }\n const callId =\n getStringProperty(item, 'call_id') ?? getStringProperty(item, 'id');\n let projectedInput: ToolInputProjection;\n if (type === 'function_call') {\n const canonical =\n callId != null ? canonicalArguments.get(callId) : undefined;\n projectedInput = selectProjectedSerializedArguments(\n inputProperty,\n canonical,\n maxChars\n );\n } else {\n const canonicalArgs =\n callId != null ? canonicalInputs.get(callId) : undefined;\n const canonicalProperty =\n canonicalArgs != null && typeof canonicalArgs === 'object'\n ? readPropertyWithoutAccessors(canonicalArgs, inputKey)\n : undefined;\n let source = inputProperty.accessor\n ? ACCESSOR_INPUT_PLACEHOLDER\n : inputProperty.value;\n if (canonicalProperty != null && canonicalProperty.found) {\n source = canonicalProperty.accessor\n ? ACCESSOR_INPUT_PLACEHOLDER\n : canonicalProperty.value;\n }\n if (\n type === 'custom_tool_call' &&\n typeof source === 'string' &&\n source.length <= normalizeToolInputLimit(maxChars)\n ) {\n projectedInput = {\n value: source,\n changed: !inputProperty.own || inputProperty.value !== source,\n };\n } else if (type === 'custom_tool_call') {\n const value =\n typeof source === 'string'\n ? truncateToolResultContent(\n source,\n normalizeToolInputLimit(maxChars)\n )\n : serializeToolCallInput(source, maxChars);\n projectedInput = {\n value,\n changed: !inputProperty.own || inputProperty.value !== value,\n };\n } else {\n const projected = projectToolInputWithinLimit(source, maxChars);\n projectedInput = {\n value: projected.value,\n changed:\n projected.changed ||\n !inputProperty.own ||\n inputProperty.value !== projected.value,\n };\n }\n }\n if (!projectedInput.changed && inputProperty.own) {\n return item;\n }\n state.changed = true;\n return cloneWithProjectedProperties(item, {\n [inputKey]: projectedInput.value,\n });\n });\n return {\n value: state.changed ? projected : output,\n changed: state.changed,\n };\n}\n\n/** Per-input cap: 15% of context at ~4 chars/token, never above 200K chars. */\nexport function calculateMaxToolCallInputChars(\n maxContextTokens?: number\n): number {\n if (maxContextTokens == null || maxContextTokens <= 0) {\n return HARD_MAX_TOOL_CALL_INPUT_CHARS;\n }\n return Math.max(\n MIN_JSON_VALUE_CHARS,\n Math.min(\n Math.floor(maxContextTokens * 0.15) * 4,\n HARD_MAX_TOOL_CALL_INPUT_CHARS\n )\n );\n}\n\n/**\n * Projects historical tool-call inputs into a provider-safe bounded form.\n * Returns the original array when no message changes and otherwise clones only\n * the array and AI messages whose inline input or `tool_calls` args changed.\n */\nexport function projectToolCallInputs(\n messages: BaseMessage[],\n maxInputChars: number\n): BaseMessage[] {\n const normalizedMaxInputChars = normalizeToolInputLimit(maxInputChars);\n let projectedMessages: BaseMessage[] | undefined;\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n const messageRole = (message as BaseMessage & { role?: unknown }).role;\n if (message.getType() !== 'ai' && messageRole !== 'assistant') {\n continue;\n }\n\n const aiMessage = message as AIMessage | AIMessageChunk;\n let projectedContent = aiMessage.content;\n let contentChanged = false;\n if (Array.isArray(aiMessage.content)) {\n const originalContent = aiMessage.content as MessageContentComplex[];\n const mappedContent = originalContent.map((block) =>\n projectInlineToolInput(block, normalizedMaxInputChars)\n );\n contentChanged = mappedContent.some(\n (block, blockIndex) => block !== originalContent[blockIndex]\n );\n projectedContent = toLangChainContent(mappedContent);\n }\n\n const originalToolCalls = aiMessage.tool_calls ?? [];\n const projectedToolCalls = originalToolCalls.map((toolCall) => {\n const argsProperty = readPropertyWithoutAccessors(toolCall, 'args');\n const projected = argsProperty.accessor\n ? { value: ACCESSOR_INPUT_PLACEHOLDER, changed: true }\n : projectToolInputWithinLimit(\n argsProperty.value,\n normalizedMaxInputChars\n );\n if (argsProperty.own && !projected.changed) {\n return toolCall;\n }\n return cloneWithProjectedProperties(toolCall, {\n args: projected.value as Record<string, unknown>,\n });\n });\n const toolCallsChanged = projectedToolCalls.some(\n (toolCall, toolCallIndex) => toolCall !== originalToolCalls[toolCallIndex]\n );\n\n const rawAdditionalToolCallsProperty = readPropertyWithoutAccessors(\n aiMessage.additional_kwargs,\n 'tool_calls'\n );\n const rawAdditionalToolCalls = rawAdditionalToolCallsProperty.accessor\n ? undefined\n : rawAdditionalToolCallsProperty.value;\n const rawResponsesOutputProperty = readPropertyWithoutAccessors(\n aiMessage.response_metadata,\n 'output'\n );\n const rawResponsesOutput = rawResponsesOutputProperty.accessor\n ? undefined\n : rawResponsesOutputProperty.value;\n const canonicalArguments = new Map<string, string>();\n const canonicalInputs = new Map<string, unknown>();\n if (\n Array.isArray(rawAdditionalToolCalls) ||\n Array.isArray(rawResponsesOutput)\n ) {\n for (const toolCall of projectedToolCalls) {\n const id = getStringProperty(toolCall, 'id');\n if (id == null) {\n continue;\n }\n const args = readPropertyWithoutAccessors(toolCall, 'args');\n const canonicalInput = args.accessor\n ? ACCESSOR_INPUT_PLACEHOLDER\n : args.value;\n canonicalInputs.set(id, canonicalInput);\n canonicalArguments.set(\n id,\n serializeToolCallInput(canonicalInput, normalizedMaxInputChars)\n );\n }\n }\n\n const additionalKwargsChanges: Record<string, unknown> =\n rawAdditionalToolCallsProperty.accessor ? { tool_calls: undefined } : {};\n const rawToolCalls = projectRawOpenAIToolCalls(\n rawAdditionalToolCalls,\n normalizedMaxInputChars,\n canonicalArguments\n );\n if (rawToolCalls.changed) {\n additionalKwargsChanges.tool_calls = rawToolCalls.value;\n }\n const legacyFunctionCall = projectLegacyFunctionCall(\n readPropertyWithoutAccessors(\n aiMessage.additional_kwargs,\n 'function_call'\n ),\n normalizedMaxInputChars\n );\n if (legacyFunctionCall.changed) {\n additionalKwargsChanges.function_call = legacyFunctionCall.value;\n }\n const additionalKwargsChanged =\n Object.keys(additionalKwargsChanges).length > 0;\n let projectedAdditionalKwargs = aiMessage.additional_kwargs;\n if (additionalKwargsChanged) {\n projectedAdditionalKwargs = isProxy(aiMessage.additional_kwargs)\n ? { ...additionalKwargsChanges }\n : cloneWithProjectedProperties(\n aiMessage.additional_kwargs,\n additionalKwargsChanges\n );\n }\n\n let projectedResponseMetadata = aiMessage.response_metadata;\n let responseMetadataChanged = rawResponsesOutputProperty.accessor;\n const responsesOutput = projectResponsesOutput(\n rawResponsesOutput,\n normalizedMaxInputChars,\n canonicalArguments,\n canonicalInputs\n );\n if (responsesOutput.changed || rawResponsesOutputProperty.accessor) {\n const output = rawResponsesOutputProperty.accessor\n ? undefined\n : responsesOutput.value;\n projectedResponseMetadata = isProxy(aiMessage.response_metadata)\n ? { output }\n : cloneWithProjectedProperties(aiMessage.response_metadata, {\n output,\n });\n responseMetadataChanged = true;\n }\n\n if (\n !contentChanged &&\n !toolCallsChanged &&\n !additionalKwargsChanged &&\n !responseMetadataChanged\n ) {\n continue;\n }\n\n const projectedMessage = cloneWithProjectedProperties(aiMessage, {\n content: projectedContent,\n tool_calls: projectedToolCalls.length > 0 ? projectedToolCalls : [],\n additional_kwargs: projectedAdditionalKwargs,\n response_metadata: projectedResponseMetadata,\n });\n projectedMessages ??= [...messages];\n projectedMessages[i] = projectedMessage;\n }\n return projectedMessages ?? messages;\n}\n\nexport function preFlightTruncateToolCallInputs(params: {\n messages: BaseMessage[];\n maxContextTokens: number;\n indexTokenCountMap: Record<string, number | undefined>;\n tokenCounter: TokenCounter;\n}): number {\n const { messages, maxContextTokens, indexTokenCountMap, tokenCounter } =\n params;\n const maxInputChars = calculateMaxToolCallInputChars(maxContextTokens);\n const projected = projectToolCallInputs(messages, maxInputChars);\n if (projected === messages) {\n return 0;\n }\n\n let truncatedCount = 0;\n for (let i = 0; i < messages.length; i++) {\n if (projected[i] === messages[i]) {\n continue;\n }\n messages[i] = projected[i];\n indexTokenCountMap[i] = tokenCounter(projected[i]);\n truncatedCount++;\n }\n return truncatedCount;\n}\n\ntype ThinkingBlocks = {\n thinking_blocks?: Array<{\n type: 'thinking';\n thinking: string;\n signature: string;\n }>;\n};\n\nexport function createPruneMessages(factoryParams: PruneMessagesFactoryParams) {\n const indexTokenCountMap = { ...factoryParams.indexTokenCountMap };\n let lastTurnStartIndex = factoryParams.startIndex;\n let lastCutOffIndex = 0;\n let totalTokens = 0;\n for (const key in indexTokenCountMap) {\n totalTokens += indexTokenCountMap[key] ?? 0;\n }\n const reconciledToolMessages = new WeakSet<BaseMessage>();\n let runThinkingStartIndex = -1;\n /** Cumulative raw tiktoken tokens we've sent to the provider (messages only,\n * excludes instruction overhead and new outputs not yet seen by provider). */\n let cumulativeRawSent = 0;\n /** Cumulative provider-reported message tokens (providerInput - instructionOverhead). */\n let cumulativeProviderReported = 0;\n /** Stable calibration ratio = cumulativeProviderReported / cumulativeRawSent.\n * Converges monotonically as data accumulates. Falls back to seeded value. */\n let calibrationRatio =\n factoryParams.calibrationRatio != null && factoryParams.calibrationRatio > 0\n ? factoryParams.calibrationRatio\n : 1;\n /** Best observed instruction overhead from a near-zero variance turn.\n * Self-seeds from provider observations within the run. */\n let bestInstructionOverhead: number | undefined;\n const reconciledLegacyAiMessages = new WeakSet<BaseMessage>();\n let bestVarianceAbs = Infinity;\n /** Local estimate at the time bestInstructionOverhead was observed.\n * Used to invalidate the cached overhead when instructions change\n * mid-run (e.g. tool discovery adds tools to the bound set). */\n let bestInstructionEstimate: number | undefined;\n /** Original (pre-masking) tool result content keyed by message index.\n * Allows the summarizer to see full tool outputs even after masking\n * has truncated them in the live message array. Cleared when the\n * pruner is recreated after summarization. */\n const originalToolContent = new Map<number, string>();\n let originalToolContentSize = 0;\n const contextPruningSettings = resolveContextPruningSettings(\n factoryParams.contextPruningConfig\n );\n\n return function pruneMessages(params: PruneMessagesParams): {\n context: BaseMessage[];\n indexTokenCountMap: Record<string, number | undefined>;\n messagesToRefine?: BaseMessage[];\n prePruneContextTokens?: number;\n remainingContextTokens?: number;\n contextPressure?: number;\n originalToolContent?: Map<number, string>;\n newOriginalToolContent?: Map<number, string>;\n calibrationRatio?: number;\n resolvedInstructionOverhead?: number;\n /** Usable budget this call: maxTokens minus output reserve */\n contextBudget?: number;\n /** Calibrated instruction overhead actually applied this call */\n effectiveInstructionTokens?: number;\n } {\n let newOriginalToolContent: Map<number, string> | undefined;\n if (params.messages.length === 0) {\n /** Post-compaction calls still invoke the model — report the same\n * reserve-adjusted budget fields as the populated paths */\n const emptyInstructionTokens =\n factoryParams.getInstructionTokens?.() ?? 0;\n const emptyReserveRatio =\n factoryParams.reserveRatio ?? DEFAULT_RESERVE_RATIO;\n const emptyBudget =\n factoryParams.maxTokens -\n (emptyReserveRatio > 0 && emptyReserveRatio < 1\n ? Math.round(factoryParams.maxTokens * emptyReserveRatio)\n : 0);\n const emptyReplyPrimerTokens = Math.round(\n REPLY_PRIMER_TOKENS * calibrationRatio\n );\n return {\n context: [],\n indexTokenCountMap,\n messagesToRefine: [],\n prePruneContextTokens: 0,\n remainingContextTokens: Math.max(\n 0,\n emptyBudget - emptyInstructionTokens - emptyReplyPrimerTokens\n ),\n calibrationRatio,\n resolvedInstructionOverhead: bestInstructionOverhead,\n contextBudget: emptyBudget,\n effectiveInstructionTokens: emptyInstructionTokens,\n };\n }\n\n if (\n factoryParams.provider === Providers.OPENAI &&\n factoryParams.thinkingEnabled === true\n ) {\n for (let i = lastTurnStartIndex; i < params.messages.length; i++) {\n const m = params.messages[i];\n if (\n m.getType() === 'ai' &&\n typeof m.additional_kwargs.reasoning_content === 'string' &&\n Array.isArray(\n (\n m.additional_kwargs.provider_specific_fields as\n | ThinkingBlocks\n | undefined\n )?.thinking_blocks\n ) &&\n (m as AIMessage).tool_calls &&\n ((m as AIMessage).tool_calls?.length ?? 0) > 0\n ) {\n const message = m as AIMessage;\n const thinkingBlocks = (\n message.additional_kwargs.provider_specific_fields as ThinkingBlocks\n ).thinking_blocks;\n const signature =\n thinkingBlocks?.[thinkingBlocks.length - 1].signature;\n const thinkingBlock: ThinkingContentText = {\n signature,\n type: ContentTypes.THINKING,\n thinking: message.additional_kwargs.reasoning_content as string,\n };\n\n params.messages[i] = new AIMessage({\n ...message,\n content: toLangChainContent([thinkingBlock]),\n additional_kwargs: {\n ...message.additional_kwargs,\n reasoning_content: undefined,\n },\n });\n }\n }\n }\n\n let currentUsage: UsageMetadata | undefined;\n if (\n params.usageMetadata &&\n (checkValidNumber(params.usageMetadata.input_tokens) ||\n (checkValidNumber(params.usageMetadata.input_token_details) &&\n (checkValidNumber(\n params.usageMetadata.input_token_details.cache_creation\n ) ||\n checkValidNumber(\n params.usageMetadata.input_token_details.cache_read\n )))) &&\n checkValidNumber(params.usageMetadata.output_tokens)\n ) {\n currentUsage = calculateTotalTokens(params.usageMetadata);\n }\n\n const newOutputs = new Set<number>();\n\n // Host token maps predate LangChain formatting and may omit tool output or\n // legacy function-call arguments. Reconcile those provider-bound shapes\n // once before making any budget decision.\n const applyReconciledCount = (\n index: number,\n cachedCount: number | undefined,\n reconciledCount: number\n ): void => {\n if (cachedCount === undefined) {\n indexTokenCountMap[index] = reconciledCount;\n totalTokens += reconciledCount;\n if (index >= lastTurnStartIndex) {\n newOutputs.add(index);\n }\n return;\n }\n // Preserve a larger host estimate: reconciliation is a safety floor,\n // not permission to reduce an upstream count that may include provider\n // serialization overhead unavailable to the local counter.\n if (reconciledCount <= cachedCount) {\n return;\n }\n indexTokenCountMap[index] = reconciledCount;\n totalTokens += reconciledCount - cachedCount;\n if (index >= lastTurnStartIndex) {\n newOutputs.add(index);\n }\n };\n for (let i = 0; i < params.messages.length; i++) {\n let message = params.messages[i];\n const cachedCount = indexTokenCountMap[i];\n const messageType = message.getType();\n const messageRole = (message as BaseMessage & { role?: unknown }).role;\n const isAssistant = messageType === 'ai' || messageRole === 'assistant';\n const legacyFunctionCall = isAssistant\n ? readPropertyWithoutAccessors(\n message.additional_kwargs,\n 'function_call'\n )\n : undefined;\n if (\n legacyFunctionCall?.found === true &&\n !reconciledLegacyAiMessages.has(message)\n ) {\n const [projected] = projectToolCallInputs(\n [message],\n calculateMaxToolCallInputChars(factoryParams.maxTokens)\n );\n if (projected !== message) {\n message = projected;\n params.messages[i] = message;\n }\n reconciledLegacyAiMessages.add(message);\n if (cachedCount !== undefined || i < lastTurnStartIndex) {\n applyReconciledCount(\n i,\n cachedCount,\n factoryParams.tokenCounter(message)\n );\n }\n continue;\n }\n if (messageType !== 'tool' || reconciledToolMessages.has(message)) {\n continue;\n }\n if (!isComputerCallOutputMessage(message)) {\n const normalized = compactToolContent(\n message.content,\n factoryParams.maxToolResultChars ?? HARD_MAX_TOOL_RESULT_CHARS\n );\n if (normalized.changed) {\n message = cloneToolMessageWithContent(\n message as ToolMessage,\n normalized.content\n );\n params.messages[i] = message;\n }\n }\n const reconciledCount = factoryParams.tokenCounter(message);\n reconciledToolMessages.add(message);\n applyReconciledCount(i, cachedCount, reconciledCount);\n }\n\n let outputTokensAssigned = false;\n for (let i = lastTurnStartIndex; i < params.messages.length; i++) {\n const message = params.messages[i];\n if (indexTokenCountMap[i] !== undefined) {\n continue;\n }\n\n // Assign output_tokens to the first uncounted AI message — this is the\n // model's response. Previous code blindly targeted lastTurnStartIndex\n // which could hit a pre-counted HumanMessage or miss the AI entirely.\n if (!outputTokensAssigned && currentUsage && message.getType() === 'ai') {\n indexTokenCountMap[i] = currentUsage.output_tokens;\n newOutputs.add(i);\n outputTokensAssigned = true;\n } else {\n // Always store raw tiktoken count — the map stays in raw space.\n // Budget decisions multiply by calibrationRatio on the fly.\n indexTokenCountMap[i] = factoryParams.tokenCounter(message);\n if (currentUsage) {\n newOutputs.add(i);\n }\n }\n totalTokens += indexTokenCountMap[i] ?? 0;\n }\n\n // Cumulative calibration: accumulate raw tiktoken tokens and provider-\n // reported tokens across turns. The ratio of the two running totals\n // converges monotonically to the true provider multiplier — no EMA,\n // no per-turn oscillation, no map mutation.\n if (currentUsage && params.totalTokensFresh !== false) {\n const instructionOverhead = factoryParams.getInstructionTokens?.() ?? 0;\n const rawProviderInputTokens = Number(params.usageMetadata?.input_tokens);\n const providerInputTokens = checkValidNumber(rawProviderInputTokens)\n ? rawProviderInputTokens\n : (params.lastCallUsage?.inputTokens ?? currentUsage.input_tokens);\n\n // Sum raw tiktoken counts for messages the provider saw (excludes\n // new outputs from this turn — the provider hasn't seen them yet).\n let rawSentThisTurn = 0;\n const firstIsSystem =\n params.messages.length > 0 && params.messages[0].getType() === 'system';\n if (firstIsSystem) {\n rawSentThisTurn += indexTokenCountMap[0] ?? 0;\n }\n for (let i = lastCutOffIndex; i < params.messages.length; i++) {\n if ((i === 0 && firstIsSystem) || newOutputs.has(i)) {\n continue;\n }\n rawSentThisTurn += indexTokenCountMap[i] ?? 0;\n }\n\n const providerMessageTokens = Math.max(\n 0,\n providerInputTokens - instructionOverhead\n );\n const minimumComparableInputTokens =\n instructionOverhead + rawSentThisTurn * CALIBRATION_RATIO_MIN;\n let calibrationSkipReason: string | undefined;\n if (rawSentThisTurn <= 0) {\n calibrationSkipReason = 'no_sent_messages';\n } else if (providerMessageTokens <= 0) {\n calibrationSkipReason = 'input_below_instruction_overhead';\n } else if (providerInputTokens < minimumComparableInputTokens) {\n calibrationSkipReason = 'input_below_calibration_floor';\n }\n // No upper-bound rejection: maxTokens is an application budget, not the\n // provider's real context window. Usage above the budget is a genuine\n // measurement — and the one that must drive pruning/summarization.\n\n if (calibrationSkipReason == null) {\n cumulativeRawSent += rawSentThisTurn;\n cumulativeProviderReported += providerMessageTokens;\n const newRatio = cumulativeProviderReported / cumulativeRawSent;\n calibrationRatio = clampCalibrationRatio(newRatio);\n\n const calibratedOurTotal =\n instructionOverhead + rawSentThisTurn * calibrationRatio;\n const overallRatio =\n calibratedOurTotal > 0 ? providerInputTokens / calibratedOurTotal : 0;\n const variancePct = Math.round((overallRatio - 1) * 100);\n\n const absVariance = Math.abs(overallRatio - 1);\n if (absVariance < bestVarianceAbs) {\n bestVarianceAbs = absVariance;\n bestInstructionOverhead = Math.max(\n 0,\n Math.round(providerInputTokens - rawSentThisTurn * calibrationRatio)\n );\n bestInstructionEstimate = factoryParams.getInstructionTokens?.() ?? 0;\n }\n\n factoryParams.log?.('debug', 'Calibration observed', {\n providerInputTokens,\n calibratedEstimate: Math.round(calibratedOurTotal),\n variance: `${variancePct > 0 ? '+' : ''}${variancePct}%`,\n calibrationRatio: Math.round(calibrationRatio * 100) / 100,\n instructionOverhead,\n cumulativeRawSent,\n cumulativeProviderReported,\n });\n } else {\n factoryParams.log?.('debug', 'Calibration skipped', {\n reason: calibrationSkipReason,\n providerInputTokens,\n minimumComparableInputTokens: Math.round(\n minimumComparableInputTokens\n ),\n rawSentThisTurn,\n instructionOverhead,\n });\n }\n }\n\n // Computed BEFORE pre-flight truncation so the effective budget can drive\n // truncation thresholds — without this, thresholds based on maxTokens are\n // too generous and leave individual messages larger than the actual budget.\n const estimatedInstructionTokens =\n factoryParams.getInstructionTokens?.() ?? 0;\n const estimateStable =\n bestInstructionEstimate != null &&\n bestInstructionEstimate > 0 &&\n Math.abs(estimatedInstructionTokens - bestInstructionEstimate) /\n bestInstructionEstimate <\n 0.1;\n const currentInstructionTokens =\n bestInstructionOverhead != null &&\n bestInstructionOverhead <= estimatedInstructionTokens &&\n estimateStable\n ? bestInstructionOverhead\n : estimatedInstructionTokens;\n\n const reserveRatio = factoryParams.reserveRatio ?? DEFAULT_RESERVE_RATIO;\n const reserveTokens =\n reserveRatio > 0 && reserveRatio < 1\n ? Math.round(factoryParams.maxTokens * reserveRatio)\n : 0;\n const pruningBudget = factoryParams.maxTokens - reserveTokens;\n\n const effectiveMaxTokens = Math.max(\n 0,\n pruningBudget - currentInstructionTokens\n );\n\n let calibratedTotalTokens = Math.round(totalTokens * calibrationRatio);\n\n factoryParams.log?.('debug', 'Budget', {\n maxTokens: factoryParams.maxTokens,\n pruningBudget,\n effectiveMax: effectiveMaxTokens,\n instructionTokens: currentInstructionTokens,\n messageCount: params.messages.length,\n calibratedTotalTokens,\n calibrationRatio: Math.round(calibrationRatio * 100) / 100,\n });\n\n // When instructions alone consume the entire budget, no message can\n // fit regardless of truncation. Short-circuit: yield all messages for\n // summarization and return an empty context so the Graph can route to\n // the summarize node immediately instead of falling through to the\n // emergency path that would reach the same outcome more expensively.\n if (\n effectiveMaxTokens === 0 &&\n factoryParams.summarizationEnabled === true &&\n params.messages.length > 0\n ) {\n factoryParams.log?.(\n 'warn',\n 'Instructions consume entire budget — yielding all messages for summarization',\n {\n instructionTokens: currentInstructionTokens,\n pruningBudget,\n messageCount: params.messages.length,\n }\n );\n\n lastTurnStartIndex = params.messages.length;\n return {\n context: [],\n indexTokenCountMap,\n messagesToRefine: [...params.messages],\n prePruneContextTokens: calibratedTotalTokens,\n remainingContextTokens: 0,\n contextPressure:\n pruningBudget > 0 ? calibratedTotalTokens / pruningBudget : 0,\n calibrationRatio,\n resolvedInstructionOverhead: bestInstructionOverhead,\n contextBudget: pruningBudget,\n effectiveInstructionTokens: currentInstructionTokens,\n };\n }\n\n // ---------------------------------------------------------------------------\n // Progressive context fading — inspired by Claude Code's staged compaction.\n // Below 80%: no modifications, tool results retain full size.\n // Above 80%: graduated truncation with increasing aggression per pressure band.\n // Recency weighting ensures older results fade first, newer results last.\n //\n // At the gentlest level, truncation preserves most content (head+tail).\n // At the most aggressive level, the result is effectively a one-line placeholder.\n //\n // 80%: gentle — budget factor 1.0, oldest get light truncation\n // 85%: moderate — budget factor 0.50, older results shrink significantly\n // 90%: aggressive — budget factor 0.20, most results heavily truncated\n // 99%: emergency — budget factor 0.05, effectively placeholders for old results\n // ---------------------------------------------------------------------------\n totalTokens = sumTokenCounts(indexTokenCountMap, params.messages.length);\n calibratedTotalTokens = Math.round(totalTokens * calibrationRatio);\n const contextPressure =\n pruningBudget > 0 ? calibratedTotalTokens / pruningBudget : 0;\n let preFlightResultCount = 0;\n let preFlightInputCount = 0;\n\n // -----------------------------------------------------------------------\n // Observation masking (80%+ pressure, both paths):\n // Replace consumed ToolMessage content with tight head+tail placeholders.\n // AI messages stay intact so the model can read its own prior reasoning\n // and won't repeat work. Unconsumed results (latest tool outputs the\n // model hasn't acted on yet) stay full.\n //\n // When summarization is enabled, snapshot messages first so the\n // summarizer can see the full originals when compaction fires.\n // -----------------------------------------------------------------------\n let observationsMasked = 0;\n\n if (contextPressure >= PRESSURE_THRESHOLD_MASKING) {\n const rawMessageBudget =\n calibrationRatio > 0\n ? Math.floor(effectiveMaxTokens / calibrationRatio)\n : effectiveMaxTokens;\n // When summarization is enabled, use half the reserve ratio as extra\n // masking headroom — the LLM keeps more context while the summarizer\n // gets full content from originalToolContent regardless. The remaining\n // half of the reserve covers estimation errors.\n const reserveHeadroom =\n factoryParams.summarizationEnabled === true\n ? Math.floor(\n rawMessageBudget *\n (factoryParams.reserveRatio ?? DEFAULT_RESERVE_RATIO) *\n 0.5\n )\n : 0;\n observationsMasked = maskConsumedToolResults({\n messages: params.messages,\n indexTokenCountMap,\n tokenCounter: factoryParams.tokenCounter,\n availableRawBudget: rawMessageBudget + reserveHeadroom,\n originalContentStore:\n factoryParams.summarizationEnabled === true\n ? originalToolContent\n : undefined,\n onContentStored:\n factoryParams.summarizationEnabled === true\n ? (index: number, content: string): void => {\n originalToolContentSize += content.length;\n if (newOriginalToolContent == null) {\n newOriginalToolContent = new Map();\n }\n newOriginalToolContent.set(index, content);\n while (\n originalToolContentSize > ORIGINAL_CONTENT_MAX_CHARS &&\n originalToolContent.size > 0\n ) {\n const oldest = originalToolContent.keys().next();\n if (oldest.done === true) {\n break;\n }\n const removed = originalToolContent.get(oldest.value);\n if (removed != null) {\n originalToolContentSize -= removed.length;\n }\n originalToolContent.delete(oldest.value);\n }\n }\n : undefined,\n });\n if (observationsMasked > 0) {\n cumulativeRawSent = 0;\n cumulativeProviderReported = 0;\n }\n }\n\n if (\n contextPressure >= PRESSURE_THRESHOLD_MASKING &&\n factoryParams.summarizationEnabled !== true\n ) {\n const budgetFactor =\n PRESSURE_BANDS.find(\n ([threshold]) => contextPressure >= threshold\n )?.[1] ?? 1.0;\n\n const baseBudget = Math.max(\n 1024,\n Math.floor(effectiveMaxTokens * budgetFactor)\n );\n\n preFlightResultCount = preFlightTruncateToolResults({\n messages: params.messages,\n maxContextTokens: baseBudget,\n indexTokenCountMap,\n tokenCounter: factoryParams.tokenCounter,\n });\n\n preFlightInputCount = preFlightTruncateToolCallInputs({\n messages: params.messages,\n maxContextTokens: baseBudget,\n indexTokenCountMap,\n tokenCounter: factoryParams.tokenCounter,\n });\n }\n if (\n factoryParams.contextPruningConfig?.enabled === true &&\n factoryParams.summarizationEnabled !== true\n ) {\n applyContextPruning({\n messages: params.messages,\n indexTokenCountMap,\n tokenCounter: factoryParams.tokenCounter,\n resolvedSettings: contextPruningSettings,\n });\n }\n\n // Fit-to-budget: when summarization is enabled and individual messages\n // exceed the effective budget, truncate them so every message can fit in\n // a single context slot. Without this, oversized tool results (e.g.\n // take_snapshot at 9K chars) cause empty context → emergency truncation\n // → immediate re-summarization after just one tool call.\n //\n // This is NOT the lossy position-based fading above — it only targets\n // messages that individually exceed the budget, using the full effective\n // budget as the cap (not a pressure-scaled fraction).\n // Fit-to-budget caps are in raw space (divide by ratio) so that after\n // calibration the truncated results actually fit within the budget.\n const rawSpaceEffectiveMax =\n calibrationRatio > 0\n ? Math.round(effectiveMaxTokens / calibrationRatio)\n : effectiveMaxTokens;\n\n if (\n factoryParams.summarizationEnabled === true &&\n rawSpaceEffectiveMax > 0\n ) {\n preFlightResultCount = preFlightTruncateToolResults({\n messages: params.messages,\n maxContextTokens: rawSpaceEffectiveMax,\n indexTokenCountMap,\n tokenCounter: factoryParams.tokenCounter,\n });\n\n preFlightInputCount = preFlightTruncateToolCallInputs({\n messages: params.messages,\n maxContextTokens: rawSpaceEffectiveMax,\n indexTokenCountMap,\n tokenCounter: factoryParams.tokenCounter,\n });\n }\n\n const preTruncationTotalTokens = totalTokens;\n totalTokens = sumTokenCounts(indexTokenCountMap, params.messages.length);\n calibratedTotalTokens = Math.round(totalTokens * calibrationRatio);\n\n const anyAdjustment =\n observationsMasked > 0 ||\n preFlightResultCount > 0 ||\n preFlightInputCount > 0 ||\n totalTokens !== preTruncationTotalTokens;\n\n if (anyAdjustment) {\n factoryParams.log?.('debug', 'Context adjusted', {\n contextPressure: Math.round(contextPressure * 100),\n observationsMasked,\n toolOutputsTruncated: preFlightResultCount,\n toolInputsTruncated: preFlightInputCount,\n tokensBefore: preTruncationTotalTokens,\n tokensAfter: totalTokens,\n tokensSaved: preTruncationTotalTokens - totalTokens,\n });\n }\n\n lastTurnStartIndex = params.messages.length;\n const calibratedReplyPrimerTokens = Math.round(\n REPLY_PRIMER_TOKENS * calibrationRatio\n );\n if (\n lastCutOffIndex === 0 &&\n calibratedTotalTokens +\n calibratedReplyPrimerTokens +\n currentInstructionTokens <=\n pruningBudget\n ) {\n return {\n context: params.messages,\n indexTokenCountMap,\n messagesToRefine: [],\n prePruneContextTokens: calibratedTotalTokens,\n remainingContextTokens:\n pruningBudget -\n calibratedTotalTokens -\n calibratedReplyPrimerTokens -\n currentInstructionTokens,\n contextPressure,\n originalToolContent:\n originalToolContent.size > 0 ? originalToolContent : undefined,\n newOriginalToolContent,\n calibrationRatio,\n resolvedInstructionOverhead: bestInstructionOverhead,\n contextBudget: pruningBudget,\n effectiveInstructionTokens: currentInstructionTokens,\n };\n }\n\n const rawSpaceBudget =\n calibrationRatio > 0\n ? Math.round(pruningBudget / calibrationRatio)\n : pruningBudget;\n\n const rawSpaceInstructionTokens =\n calibrationRatio > 0\n ? Math.round(currentInstructionTokens / calibrationRatio)\n : currentInstructionTokens;\n\n const {\n context: initialContext,\n thinkingStartIndex,\n messagesToRefine,\n remainingContextTokens: initialRemainingContextTokens,\n } = getMessagesWithinTokenLimit({\n maxContextTokens: rawSpaceBudget,\n messages: params.messages,\n indexTokenCountMap,\n startType: params.startType,\n thinkingEnabled: factoryParams.thinkingEnabled,\n tokenCounter: factoryParams.tokenCounter,\n instructionTokens: rawSpaceInstructionTokens,\n reasoningType:\n factoryParams.provider === Providers.BEDROCK\n ? ContentTypes.REASONING_CONTENT\n : ContentTypes.THINKING,\n thinkingStartIndex:\n factoryParams.thinkingEnabled === true\n ? runThinkingStartIndex\n : undefined,\n });\n\n const {\n context: repairedContext,\n reclaimedTokens: initialReclaimedTokens,\n droppedMessages,\n } = repairOrphanedToolMessages({\n context: initialContext,\n allMessages: params.messages,\n tokenCounter: factoryParams.tokenCounter,\n indexTokenCountMap,\n });\n\n const contextBreakdown = repairedContext.map((msg) => {\n const type = msg.getType();\n const name = type === 'tool' ? (msg.name ?? 'unknown') : '';\n return name !== '' ? `${type}(${name})` : type;\n });\n factoryParams.log?.('debug', 'Pruning complete', {\n contextLength: repairedContext.length,\n contextTypes: contextBreakdown.join(', '),\n messagesToRefineCount: messagesToRefine.length,\n droppedOrphans: droppedMessages.length,\n remainingTokens: initialRemainingContextTokens,\n });\n\n let context = repairedContext;\n let reclaimedTokens = initialReclaimedTokens;\n\n // Orphan repair may drop ToolMessages whose parent AI was pruned.\n // Append them to messagesToRefine so summarization can still see the\n // tool results (otherwise the summary says \"in progress\" for a tool\n // call that already completed, causing the model to repeat it).\n if (droppedMessages.length > 0) {\n messagesToRefine.push(...droppedMessages);\n }\n\n // ---------------------------------------------------------------\n // Fallback fading: when summarization skipped fading earlier and\n // pruning still produced an empty context, apply lossy pressure-band\n // fading and retry. This is a last resort before emergency truncation\n // — the summarizer already saw the full messages, so fading the\n // surviving context for the LLM is acceptable.\n // ---------------------------------------------------------------\n if (\n context.length === 0 &&\n params.messages.length > 0 &&\n effectiveMaxTokens > 0 &&\n factoryParams.summarizationEnabled === true\n ) {\n const fadingBudget = Math.max(1024, effectiveMaxTokens);\n\n factoryParams.log?.(\n 'debug',\n 'Fallback fading — empty context with summarization',\n {\n messageCount: params.messages.length,\n effectiveMaxTokens,\n fadingBudget,\n }\n );\n\n const fadedMessages = [...params.messages];\n const preFadingTokenCounts: Record<string, number | undefined> = {};\n for (let i = 0; i < params.messages.length; i++) {\n preFadingTokenCounts[i] = indexTokenCountMap[i];\n }\n\n preFlightTruncateToolResults({\n messages: fadedMessages,\n maxContextTokens: fadingBudget,\n indexTokenCountMap,\n tokenCounter: factoryParams.tokenCounter,\n });\n preFlightTruncateToolCallInputs({\n messages: fadedMessages,\n maxContextTokens: fadingBudget,\n indexTokenCountMap,\n tokenCounter: factoryParams.tokenCounter,\n });\n\n const fadingRetry = getMessagesWithinTokenLimit({\n maxContextTokens: pruningBudget,\n messages: fadedMessages,\n indexTokenCountMap,\n startType: params.startType,\n thinkingEnabled: factoryParams.thinkingEnabled,\n tokenCounter: factoryParams.tokenCounter,\n instructionTokens: currentInstructionTokens,\n reasoningType:\n factoryParams.provider === Providers.BEDROCK\n ? ContentTypes.REASONING_CONTENT\n : ContentTypes.THINKING,\n thinkingStartIndex:\n factoryParams.thinkingEnabled === true\n ? runThinkingStartIndex\n : undefined,\n });\n\n const fadingRepaired = repairOrphanedToolMessages({\n context: fadingRetry.context,\n allMessages: fadedMessages,\n tokenCounter: factoryParams.tokenCounter,\n indexTokenCountMap,\n });\n\n if (fadingRepaired.context.length > 0) {\n context = fadingRepaired.context;\n reclaimedTokens = fadingRepaired.reclaimedTokens;\n messagesToRefine.push(...fadingRetry.messagesToRefine);\n if (fadingRepaired.droppedMessages.length > 0) {\n messagesToRefine.push(...fadingRepaired.droppedMessages);\n }\n\n factoryParams.log?.('debug', 'Fallback fading recovered context', {\n contextLength: context.length,\n messagesToRefineCount: messagesToRefine.length,\n remainingTokens: fadingRetry.remainingContextTokens,\n });\n\n for (const [key, value] of Object.entries(preFadingTokenCounts)) {\n indexTokenCountMap[key] = value;\n }\n } else {\n for (const [key, value] of Object.entries(preFadingTokenCounts)) {\n indexTokenCountMap[key] = value;\n }\n }\n }\n\n // ---------------------------------------------------------------\n // Emergency truncation: if pruning produced an empty context but\n // messages exist, aggressively truncate all tool_call inputs and\n // tool results, then retry. Budget is proportional to the\n // effective token limit (~4 chars/token, spread across messages)\n // with a floor of 200 chars so content is never completely blank.\n // Uses head+tail so the model sees both what was called and the\n // final outcome (e.g., return value at the end of a script eval).\n // ---------------------------------------------------------------\n if (\n context.length === 0 &&\n params.messages.length > 0 &&\n effectiveMaxTokens > 0\n ) {\n const perMessageTokenBudget = Math.floor(\n effectiveMaxTokens / Math.max(1, params.messages.length)\n );\n const emergencyMaxChars = Math.max(200, perMessageTokenBudget * 4);\n\n factoryParams.log?.(\n 'warn',\n 'Empty context, entering emergency truncation',\n {\n messageCount: params.messages.length,\n effectiveMax: effectiveMaxTokens,\n emergencyMaxChars,\n }\n );\n\n // Clone the messages array so emergency truncation doesn't permanently\n // mutate graph state. The originals remain intact for future turns\n // where more budget may be available. Also snapshot indexTokenCountMap\n // entries so the closure doesn't retain stale (too-small) counts for\n // the original un-truncated messages on the next turn.\n const emergencyMessages = [...params.messages];\n const preEmergencyTokenCounts: Record<string, number | undefined> = {};\n for (let i = 0; i < params.messages.length; i++) {\n preEmergencyTokenCounts[i] = indexTokenCountMap[i];\n }\n\n try {\n let emergencyTruncatedCount = 0;\n for (let i = 0; i < emergencyMessages.length; i++) {\n const message = emergencyMessages[i];\n if (\n message.getType() === 'tool' &&\n !isComputerCallOutputMessage(message)\n ) {\n const content = message.content;\n if (getToolContentCharLength(content) > emergencyMaxChars) {\n const compacted = compactToolContent(content, emergencyMaxChars);\n if (!compacted.changed) {\n continue;\n }\n const cloned = cloneToolMessageWithContent(\n message as ToolMessage,\n compacted.content\n );\n emergencyMessages[i] = cloned;\n indexTokenCountMap[i] = factoryParams.tokenCounter(cloned);\n emergencyTruncatedCount++;\n }\n }\n }\n\n const projectedToolInputs = projectToolCallInputs(\n emergencyMessages,\n emergencyMaxChars\n );\n if (projectedToolInputs !== emergencyMessages) {\n for (let i = 0; i < emergencyMessages.length; i++) {\n if (projectedToolInputs[i] === emergencyMessages[i]) {\n continue;\n }\n emergencyMessages[i] = projectedToolInputs[i];\n indexTokenCountMap[i] = factoryParams.tokenCounter(\n projectedToolInputs[i]\n );\n emergencyTruncatedCount++;\n }\n }\n\n factoryParams.log?.('info', 'Emergency truncation complete');\n factoryParams.log?.('debug', 'Emergency truncation details', {\n truncatedCount: emergencyTruncatedCount,\n emergencyMaxChars,\n });\n\n const retryResult = getMessagesWithinTokenLimit({\n maxContextTokens: pruningBudget,\n messages: emergencyMessages,\n indexTokenCountMap,\n startType: params.startType,\n thinkingEnabled: factoryParams.thinkingEnabled,\n tokenCounter: factoryParams.tokenCounter,\n instructionTokens: currentInstructionTokens,\n reasoningType:\n factoryParams.provider === Providers.BEDROCK\n ? ContentTypes.REASONING_CONTENT\n : ContentTypes.THINKING,\n thinkingStartIndex:\n factoryParams.thinkingEnabled === true\n ? runThinkingStartIndex\n : undefined,\n });\n\n const repaired = repairOrphanedToolMessages({\n context: retryResult.context,\n allMessages: emergencyMessages,\n tokenCounter: factoryParams.tokenCounter,\n indexTokenCountMap,\n });\n\n context = repaired.context;\n reclaimedTokens = repaired.reclaimedTokens;\n messagesToRefine.push(...retryResult.messagesToRefine);\n if (repaired.droppedMessages.length > 0) {\n messagesToRefine.push(...repaired.droppedMessages);\n }\n\n factoryParams.log?.('debug', 'Emergency truncation retry result', {\n contextLength: context.length,\n messagesToRefineCount: messagesToRefine.length,\n remainingTokens: retryResult.remainingContextTokens,\n });\n } finally {\n // Restore the closure's indexTokenCountMap to pre-emergency values so the\n // next turn counts old messages at their original (un-truncated) size.\n // The emergency-truncated counts were only needed for this turn's\n // getMessagesWithinTokenLimit retry.\n for (const [key, value] of Object.entries(preEmergencyTokenCounts)) {\n indexTokenCountMap[key] = value;\n }\n }\n }\n\n /** Scale raw-space remaining back to calibrated/provider units so it is\n * directly comparable with pruningBudget and prePruneContextTokens */\n const rawRemaining = Math.max(\n 0,\n initialRemainingContextTokens + reclaimedTokens\n );\n const remainingContextTokens = Math.max(\n 0,\n Math.min(\n pruningBudget,\n calibrationRatio > 0\n ? Math.round(rawRemaining * calibrationRatio)\n : rawRemaining\n )\n );\n\n runThinkingStartIndex = thinkingStartIndex ?? -1;\n /** The index is the first value of `context`, index relative to `params.messages` */\n lastCutOffIndex = Math.max(\n params.messages.length -\n (context.length - (context[0]?.getType() === 'system' ? 1 : 0)),\n 0\n );\n\n return {\n context,\n indexTokenCountMap,\n messagesToRefine,\n prePruneContextTokens: calibratedTotalTokens,\n remainingContextTokens,\n contextPressure,\n originalToolContent:\n originalToolContent.size > 0 ? originalToolContent : undefined,\n newOriginalToolContent,\n calibrationRatio,\n resolvedInstructionOverhead: bestInstructionOverhead,\n contextBudget: pruningBudget,\n effectiveInstructionTokens: currentInstructionTokens,\n };\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"prune.mjs","names":[],"sources":["../../../src/messages/prune.ts"],"mappings":"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"}
@@ -1,24 +1,5 @@
1
1
  //#region src/messages/recency.ts
2
2
  const DEFAULT_RETAIN_RECENT_TURNS = 2;
3
- /**
4
- * Splits `messages` into a head (older, to summarize) and a tail (recent,
5
- * to preserve verbatim) at user-message boundaries. The most recent
6
- * user-led turn is always included in the tail; additional older turns
7
- * are added subject to `turns` and `tokens` caps.
8
- *
9
- * Cutting strictly at HumanMessage boundaries ensures that:
10
- * - tool_use ↔ tool_result pairs are never split (they always live within
11
- * the same turn);
12
- * - the first user message is never replaced by a summary, addressing
13
- * the "first turn destruction" failure mode where a single large
14
- * user-pasted payload would otherwise be replaced by a generic summary.
15
- *
16
- * When `messages` contains no HumanMessage (degenerate state — e.g. system
17
- * + assistant messages from a programmatic preamble), everything is
18
- * placed in the head and the tail is empty. The summarize node treats
19
- * an empty tail as "nothing recent to preserve" and falls through to its
20
- * existing logic.
21
- */
22
3
  function splitAtRecencyBoundary(messages, options = {}) {
23
4
  const turnsCap = options.turns ?? 2;
24
5
  if (messages.length === 0 || turnsCap <= 0) return {
@@ -41,19 +22,6 @@ function splitAtRecencyBoundary(messages, options = {}) {
41
22
  const tokensCap = options.tokens;
42
23
  const tokenCounter = options.tokenCounter;
43
24
  const trackTokens = tokensCap != null && Number.isFinite(tokensCap) && tokenCounter != null;
44
- /**
45
- * Token-counting strategy: each candidate turn `t` spans the half-open
46
- * range `[turnStarts[t], turnStarts[t + 1])` (or `[turnStarts[t], messages.length)`
47
- * for the most recent turn). Successive iterations of the outer loop
48
- * walk older turns one at a time and never revisit messages from a
49
- * later turn — so each message contributes to `tokenCounter` at most
50
- * once across the entire selection, making the boundary search
51
- * `O(messages_in_visited_turns)` and bounded by `O(messages.length)`
52
- * even before the `turnsCap` short-circuit applies. The inner upper
53
- * bound uses `turnStarts[t + 1]` (a value derived from immutable
54
- * `turnStarts`) rather than the mutated `tailStartIndex` to make the
55
- * disjoint-range invariant self-evident.
56
- */
57
25
  let tailTokens = 0;
58
26
  if (trackTokens) for (let i = lastTurnStart; i < messages.length; i++) tailTokens += tokenCounter(messages[i]);
59
27
  for (let t = turnStarts.length - 2; t >= 0; t--) {
@@ -1 +1 @@
1
- {"version":3,"file":"recency.mjs","names":[],"sources":["../../../src/messages/recency.ts"],"sourcesContent":["import type { BaseMessage } from '@langchain/core/messages';\n\nexport const DEFAULT_RETAIN_RECENT_TURNS = 2;\n\n/**\n * Configuration for splitting a message list into a head (to be summarized)\n * and a tail (to be preserved verbatim).\n */\nexport interface RecencyWindowOptions {\n /**\n * Maximum number of recent user-led turns to keep in the tail. A \"turn\"\n * begins at a HumanMessage and includes every following AIMessage and\n * ToolMessage up to (but not including) the next HumanMessage. Cutting\n * at turn boundaries guarantees that tool_use / tool_result pairs are\n * never split across the head/tail divide.\n *\n * The most recent turn is always preserved regardless of this value or\n * the token cap, so that a single oversized first message is never\n * destroyed by summarization.\n *\n * Defaults to `2`. A value of `0` disables the recency window (head =\n * everything, tail = empty), restoring the pre-recency-window behavior.\n */\n turns?: number;\n /**\n * Optional cap on tail size in tokens. When set, additional turns\n * beyond the most recent one are added to the tail only while the\n * cumulative token count stays at or below this cap. Turns are added\n * whole — never partially — so a turn that would exceed the cap is\n * left in the head.\n *\n * The most recent turn is always preserved even if it exceeds the cap.\n */\n tokens?: number;\n /** Token-counter used to evaluate the optional `tokens` cap. */\n tokenCounter?: (m: BaseMessage) => number;\n}\n\nexport interface RecencySplit {\n /** Older messages eligible for summarization. Empty when nothing to summarize. */\n head: BaseMessage[];\n /** Recent messages preserved verbatim. Always contains the most recent turn when any HumanMessage exists. */\n tail: BaseMessage[];\n /** Number of user-led turns retained in the tail (0 if no HumanMessage exists). */\n tailTurnCount: number;\n /** Index in the original `messages` array where the tail begins. */\n tailStartIndex: number;\n}\n\n/**\n * Splits `messages` into a head (older, to summarize) and a tail (recent,\n * to preserve verbatim) at user-message boundaries. The most recent\n * user-led turn is always included in the tail; additional older turns\n * are added subject to `turns` and `tokens` caps.\n *\n * Cutting strictly at HumanMessage boundaries ensures that:\n * - tool_use ↔ tool_result pairs are never split (they always live within\n * the same turn);\n * - the first user message is never replaced by a summary, addressing\n * the \"first turn destruction\" failure mode where a single large\n * user-pasted payload would otherwise be replaced by a generic summary.\n *\n * When `messages` contains no HumanMessage (degenerate state — e.g. system\n * + assistant messages from a programmatic preamble), everything is\n * placed in the head and the tail is empty. The summarize node treats\n * an empty tail as \"nothing recent to preserve\" and falls through to its\n * existing logic.\n */\nexport function splitAtRecencyBoundary(\n messages: BaseMessage[],\n options: RecencyWindowOptions = {}\n): RecencySplit {\n const turnsCap = options.turns ?? DEFAULT_RETAIN_RECENT_TURNS;\n\n if (messages.length === 0 || turnsCap <= 0) {\n return {\n head: messages,\n tail: [],\n tailTurnCount: 0,\n tailStartIndex: messages.length,\n };\n }\n\n const turnStarts: number[] = [];\n for (let i = 0; i < messages.length; i++) {\n if (messages[i].getType() === 'human') {\n turnStarts.push(i);\n }\n }\n\n if (turnStarts.length === 0) {\n return {\n head: messages,\n tail: [],\n tailTurnCount: 0,\n tailStartIndex: messages.length,\n };\n }\n\n const lastTurnStart = turnStarts[turnStarts.length - 1] as number;\n let tailStartIndex = lastTurnStart;\n let tailTurnCount = 1;\n\n const tokensCap = options.tokens;\n const tokenCounter = options.tokenCounter;\n const trackTokens =\n tokensCap != null && Number.isFinite(tokensCap) && tokenCounter != null;\n\n /**\n * Token-counting strategy: each candidate turn `t` spans the half-open\n * range `[turnStarts[t], turnStarts[t + 1])` (or `[turnStarts[t], messages.length)`\n * for the most recent turn). Successive iterations of the outer loop\n * walk older turns one at a time and never revisit messages from a\n * later turn — so each message contributes to `tokenCounter` at most\n * once across the entire selection, making the boundary search\n * `O(messages_in_visited_turns)` and bounded by `O(messages.length)`\n * even before the `turnsCap` short-circuit applies. The inner upper\n * bound uses `turnStarts[t + 1]` (a value derived from immutable\n * `turnStarts`) rather than the mutated `tailStartIndex` to make the\n * disjoint-range invariant self-evident.\n */\n let tailTokens = 0;\n if (trackTokens) {\n for (let i = lastTurnStart; i < messages.length; i++) {\n tailTokens += tokenCounter(messages[i] as BaseMessage);\n }\n }\n\n for (let t = turnStarts.length - 2; t >= 0; t--) {\n if (tailTurnCount >= turnsCap) {\n break;\n }\n const turnStart = turnStarts[t] as number;\n const turnEnd = turnStarts[t + 1] as number;\n\n if (trackTokens) {\n let turnTokens = 0;\n for (let i = turnStart; i < turnEnd; i++) {\n turnTokens += tokenCounter(messages[i] as BaseMessage);\n }\n if (tailTokens + turnTokens > (tokensCap as number)) {\n break;\n }\n tailTokens += turnTokens;\n }\n\n tailStartIndex = turnStart;\n tailTurnCount += 1;\n }\n\n return {\n head: messages.slice(0, tailStartIndex),\n tail: messages.slice(tailStartIndex),\n tailTurnCount,\n tailStartIndex,\n };\n}\n"],"mappings":";AAEA,MAAa,8BAA8B;;;;;;;;;;;;;;;;;;;;AAkE3C,SAAgB,uBACd,UACA,UAAgC,CAAC,GACnB;CACd,MAAM,WAAW,QAAQ,SAAA;CAEzB,IAAI,SAAS,WAAW,KAAK,YAAY,GACvC,OAAO;EACL,MAAM;EACN,MAAM,CAAC;EACP,eAAe;EACf,gBAAgB,SAAS;CAC3B;CAGF,MAAM,aAAuB,CAAC;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KACnC,IAAI,SAAS,EAAE,CAAC,QAAQ,MAAM,SAC5B,WAAW,KAAK,CAAC;CAIrB,IAAI,WAAW,WAAW,GACxB,OAAO;EACL,MAAM;EACN,MAAM,CAAC;EACP,eAAe;EACf,gBAAgB,SAAS;CAC3B;CAGF,MAAM,gBAAgB,WAAW,WAAW,SAAS;CACrD,IAAI,iBAAiB;CACrB,IAAI,gBAAgB;CAEpB,MAAM,YAAY,QAAQ;CAC1B,MAAM,eAAe,QAAQ;CAC7B,MAAM,cACJ,aAAa,QAAQ,OAAO,SAAS,SAAS,KAAK,gBAAgB;;;;;;;;;;;;;;CAerE,IAAI,aAAa;CACjB,IAAI,aACF,KAAK,IAAI,IAAI,eAAe,IAAI,SAAS,QAAQ,KAC/C,cAAc,aAAa,SAAS,EAAiB;CAIzD,KAAK,IAAI,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;EAC/C,IAAI,iBAAiB,UACnB;EAEF,MAAM,YAAY,WAAW;EAC7B,MAAM,UAAU,WAAW,IAAI;EAE/B,IAAI,aAAa;GACf,IAAI,aAAa;GACjB,KAAK,IAAI,IAAI,WAAW,IAAI,SAAS,KACnC,cAAc,aAAa,SAAS,EAAiB;GAEvD,IAAI,aAAa,aAAc,WAC7B;GAEF,cAAc;EAChB;EAEA,iBAAiB;EACjB,iBAAiB;CACnB;CAEA,OAAO;EACL,MAAM,SAAS,MAAM,GAAG,cAAc;EACtC,MAAM,SAAS,MAAM,cAAc;EACnC;EACA;CACF;AACF"}
1
+ {"version":3,"file":"recency.mjs","names":[],"sources":["../../../src/messages/recency.ts"],"mappings":";AAEA,MAAa,8BAA8B;AAkE3C,SAAgB,uBACd,UACA,UAAgC,CAAC,GACnB;CACd,MAAM,WAAW,QAAQ,SAAA;CAEzB,IAAI,SAAS,WAAW,KAAK,YAAY,GACvC,OAAO;EACL,MAAM;EACN,MAAM,CAAC;EACP,eAAe;EACf,gBAAgB,SAAS;CAC3B;CAGF,MAAM,aAAuB,CAAC;CAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KACnC,IAAI,SAAS,EAAE,CAAC,QAAQ,MAAM,SAC5B,WAAW,KAAK,CAAC;CAIrB,IAAI,WAAW,WAAW,GACxB,OAAO;EACL,MAAM;EACN,MAAM,CAAC;EACP,eAAe;EACf,gBAAgB,SAAS;CAC3B;CAGF,MAAM,gBAAgB,WAAW,WAAW,SAAS;CACrD,IAAI,iBAAiB;CACrB,IAAI,gBAAgB;CAEpB,MAAM,YAAY,QAAQ;CAC1B,MAAM,eAAe,QAAQ;CAC7B,MAAM,cACJ,aAAa,QAAQ,OAAO,SAAS,SAAS,KAAK,gBAAgB;CAerE,IAAI,aAAa;CACjB,IAAI,aACF,KAAK,IAAI,IAAI,eAAe,IAAI,SAAS,QAAQ,KAC/C,cAAc,aAAa,SAAS,EAAiB;CAIzD,KAAK,IAAI,IAAI,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;EAC/C,IAAI,iBAAiB,UACnB;EAEF,MAAM,YAAY,WAAW;EAC7B,MAAM,UAAU,WAAW,IAAI;EAE/B,IAAI,aAAa;GACf,IAAI,aAAa;GACjB,KAAK,IAAI,IAAI,WAAW,IAAI,SAAS,KACnC,cAAc,aAAa,SAAS,EAAiB;GAEvD,IAAI,aAAa,aAAc,WAC7B;GAEF,cAAc;EAChB;EAEA,iBAAiB;EACjB,iBAAiB;CACnB;CAEA,OAAO;EACL,MAAM,SAAS,MAAM,GAAG,cAAc;EACtC,MAAM,SAAS,MAAM,cAAc;EACnC;EACA;CACF;AACF"}
@@ -2,44 +2,14 @@ import { RemoveMessage, coerceMessageLikeToMessage } from "@langchain/core/messa
2
2
  import { v4 } from "uuid";
3
3
  //#region src/messages/reducer.ts
4
4
  const REMOVE_ALL_MESSAGES = "__remove_all__";
5
- /**
6
- * Creates a message that instructs messagesStateReducer to remove ALL
7
- * existing messages from state. Messages appearing after this one in
8
- * the array become the new state.
9
- *
10
- * Usage (in a node return value):
11
- * ```ts
12
- * return { messages: [createRemoveAllMessage(), ...survivingMessages] };
13
- * ```
14
- *
15
- * This works because the reducer checks for `getType() === 'remove'`
16
- * with `id === REMOVE_ALL_MESSAGES` and discards everything before it.
17
- *
18
- * NOTE: Uses RemoveMessage from @langchain/core with a sentinel id so
19
- * the reducer can distinguish a "remove-all" marker from a single-message
20
- * removal.
21
- */
22
5
  function createRemoveAllMessage() {
23
6
  return new RemoveMessage({ id: REMOVE_ALL_MESSAGES });
24
7
  }
25
- /**
26
- * Coerce each entry to a {@link BaseMessage} in a single pass, skipping
27
- * null/undefined entries. Providers can emit empty/partial stream chunks that
28
- * arrive as `undefined`; passing those to `coerceMessageLikeToMessage` throws
29
- * "Cannot read properties of undefined (reading 'role')" and crashes the run.
30
- * Folding the null check into the coercion loop avoids a second pass over the
31
- * array. Refs LibreChat Discussion #12284.
32
- */
33
8
  function coerceMessages(messages) {
34
9
  const coerced = [];
35
10
  for (const message of messages) if (message != null) coerced.push(coerceMessageLikeToMessage(message));
36
11
  return coerced;
37
12
  }
38
- /**
39
- * Prebuilt reducer that combines returned messages.
40
- * Can handle standard messages and special modifiers like {@link RemoveMessage}
41
- * instances.
42
- */
43
13
  function messagesStateReducer(left, right) {
44
14
  const leftArray = Array.isArray(left) ? left : [left];
45
15
  const rightArray = Array.isArray(right) ? right : [right];
@@ -1 +1 @@
1
- {"version":3,"file":"reducer.mjs","names":[],"sources":["../../../src/messages/reducer.ts"],"sourcesContent":["import { v4 } from 'uuid';\nimport {\n BaseMessage,\n RemoveMessage,\n BaseMessageLike,\n coerceMessageLikeToMessage,\n} from '@langchain/core/messages';\n\nexport const REMOVE_ALL_MESSAGES = '__remove_all__';\n\n/**\n * Creates a message that instructs messagesStateReducer to remove ALL\n * existing messages from state. Messages appearing after this one in\n * the array become the new state.\n *\n * Usage (in a node return value):\n * ```ts\n * return { messages: [createRemoveAllMessage(), ...survivingMessages] };\n * ```\n *\n * This works because the reducer checks for `getType() === 'remove'`\n * with `id === REMOVE_ALL_MESSAGES` and discards everything before it.\n *\n * NOTE: Uses RemoveMessage from @langchain/core with a sentinel id so\n * the reducer can distinguish a \"remove-all\" marker from a single-message\n * removal.\n */\nexport function createRemoveAllMessage(): BaseMessage {\n return new RemoveMessage({ id: REMOVE_ALL_MESSAGES });\n}\n\nexport type Messages =\n | Array<BaseMessage | BaseMessageLike>\n | BaseMessage\n | BaseMessageLike;\n\n/**\n * Coerce each entry to a {@link BaseMessage} in a single pass, skipping\n * null/undefined entries. Providers can emit empty/partial stream chunks that\n * arrive as `undefined`; passing those to `coerceMessageLikeToMessage` throws\n * \"Cannot read properties of undefined (reading 'role')\" and crashes the run.\n * Folding the null check into the coercion loop avoids a second pass over the\n * array. Refs LibreChat Discussion #12284.\n */\nfunction coerceMessages(\n messages: ReadonlyArray<BaseMessageLike | null | undefined>\n): BaseMessage[] {\n const coerced: BaseMessage[] = [];\n for (const message of messages) {\n if (message != null) {\n coerced.push(coerceMessageLikeToMessage(message));\n }\n }\n return coerced;\n}\n\n/**\n * Prebuilt reducer that combines returned messages.\n * Can handle standard messages and special modifiers like {@link RemoveMessage}\n * instances.\n */\nexport function messagesStateReducer(\n left: Messages,\n right: Messages\n): BaseMessage[] {\n const leftArray = Array.isArray(left) ? left : [left];\n const rightArray = Array.isArray(right) ? right : [right];\n // coerce to message, skipping null/undefined entries in the same pass\n const leftMessages = coerceMessages(leftArray as BaseMessageLike[]);\n const rightMessages = coerceMessages(rightArray as BaseMessageLike[]);\n // assign missing ids\n for (const m of leftMessages) {\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n }\n\n let removeAllIdx: number | undefined;\n for (let i = 0; i < rightMessages.length; i += 1) {\n const m = rightMessages[i];\n if (m.id === null || m.id === undefined) {\n m.id = v4();\n m.lc_kwargs.id = m.id;\n }\n\n if (m.getType() === 'remove' && m.id === REMOVE_ALL_MESSAGES) {\n removeAllIdx = i;\n }\n }\n\n if (removeAllIdx != null) return rightMessages.slice(removeAllIdx + 1);\n\n // merge\n const merged = [...leftMessages];\n const mergedById = new Map(merged.map((m, i) => [m.id, i]));\n const idsToRemove = new Set();\n for (const m of rightMessages) {\n const existingIdx = mergedById.get(m.id);\n if (existingIdx !== undefined) {\n if (m.getType() === 'remove') {\n idsToRemove.add(m.id);\n } else {\n idsToRemove.delete(m.id);\n merged[existingIdx] = m;\n }\n } else {\n if (m.getType() === 'remove') {\n throw new Error(\n `Attempting to delete a message with an ID that doesn't exist ('${m.id}')`\n );\n }\n mergedById.set(m.id, merged.length);\n merged.push(m);\n }\n }\n return merged.filter((m) => !idsToRemove.has(m.id));\n}\n"],"mappings":";;;AAQA,MAAa,sBAAsB;;;;;;;;;;;;;;;;;;AAmBnC,SAAgB,yBAAsC;CACpD,OAAO,IAAI,cAAc,EAAE,IAAI,oBAAoB,CAAC;AACtD;;;;;;;;;AAeA,SAAS,eACP,UACe;CACf,MAAM,UAAyB,CAAC;CAChC,KAAK,MAAM,WAAW,UACpB,IAAI,WAAW,MACb,QAAQ,KAAK,2BAA2B,OAAO,CAAC;CAGpD,OAAO;AACT;;;;;;AAOA,SAAgB,qBACd,MACA,OACe;CACf,MAAM,YAAY,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;CACpD,MAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;CAExD,MAAM,eAAe,eAAe,SAA8B;CAClE,MAAM,gBAAgB,eAAe,UAA+B;CAEpE,KAAK,MAAM,KAAK,cACd,IAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAA,GAAW;EACvC,EAAE,KAAK,GAAG;EACV,EAAE,UAAU,KAAK,EAAE;CACrB;CAGF,IAAI;CACJ,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK,GAAG;EAChD,MAAM,IAAI,cAAc;EACxB,IAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAA,GAAW;GACvC,EAAE,KAAK,GAAG;GACV,EAAE,UAAU,KAAK,EAAE;EACrB;EAEA,IAAI,EAAE,QAAQ,MAAM,YAAY,EAAE,OAAA,kBAChC,eAAe;CAEnB;CAEA,IAAI,gBAAgB,MAAM,OAAO,cAAc,MAAM,eAAe,CAAC;CAGrE,MAAM,SAAS,CAAC,GAAG,YAAY;CAC/B,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;CAC1D,MAAM,8BAAc,IAAI,IAAI;CAC5B,KAAK,MAAM,KAAK,eAAe;EAC7B,MAAM,cAAc,WAAW,IAAI,EAAE,EAAE;EACvC,IAAI,gBAAgB,KAAA,GAClB,IAAI,EAAE,QAAQ,MAAM,UAClB,YAAY,IAAI,EAAE,EAAE;OACf;GACL,YAAY,OAAO,EAAE,EAAE;GACvB,OAAO,eAAe;EACxB;OACK;GACL,IAAI,EAAE,QAAQ,MAAM,UAClB,MAAM,IAAI,MACR,kEAAkE,EAAE,GAAG,GACzE;GAEF,WAAW,IAAI,EAAE,IAAI,OAAO,MAAM;GAClC,OAAO,KAAK,CAAC;EACf;CACF;CACA,OAAO,OAAO,QAAQ,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;AACpD"}
1
+ {"version":3,"file":"reducer.mjs","names":[],"sources":["../../../src/messages/reducer.ts"],"mappings":";;;AAQA,MAAa,sBAAsB;AAmBnC,SAAgB,yBAAsC;CACpD,OAAO,IAAI,cAAc,EAAE,IAAI,oBAAoB,CAAC;AACtD;AAeA,SAAS,eACP,UACe;CACf,MAAM,UAAyB,CAAC;CAChC,KAAK,MAAM,WAAW,UACpB,IAAI,WAAW,MACb,QAAQ,KAAK,2BAA2B,OAAO,CAAC;CAGpD,OAAO;AACT;AAOA,SAAgB,qBACd,MACA,OACe;CACf,MAAM,YAAY,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;CACpD,MAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;CAExD,MAAM,eAAe,eAAe,SAA8B;CAClE,MAAM,gBAAgB,eAAe,UAA+B;CAEpE,KAAK,MAAM,KAAK,cACd,IAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAA,GAAW;EACvC,EAAE,KAAK,GAAG;EACV,EAAE,UAAU,KAAK,EAAE;CACrB;CAGF,IAAI;CACJ,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK,GAAG;EAChD,MAAM,IAAI,cAAc;EACxB,IAAI,EAAE,OAAO,QAAQ,EAAE,OAAO,KAAA,GAAW;GACvC,EAAE,KAAK,GAAG;GACV,EAAE,UAAU,KAAK,EAAE;EACrB;EAEA,IAAI,EAAE,QAAQ,MAAM,YAAY,EAAE,OAAA,kBAChC,eAAe;CAEnB;CAEA,IAAI,gBAAgB,MAAM,OAAO,cAAc,MAAM,eAAe,CAAC;CAGrE,MAAM,SAAS,CAAC,GAAG,YAAY;CAC/B,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;CAC1D,MAAM,8BAAc,IAAI,IAAI;CAC5B,KAAK,MAAM,KAAK,eAAe;EAC7B,MAAM,cAAc,WAAW,IAAI,EAAE,EAAE;EACvC,IAAI,gBAAgB,KAAA,GAClB,IAAI,EAAE,QAAQ,MAAM,UAClB,YAAY,IAAI,EAAE,EAAE;OACf;GACL,YAAY,OAAO,EAAE,EAAE;GACvB,OAAO,eAAe;EACxB;OACK;GACL,IAAI,EAAE,QAAQ,MAAM,UAClB,MAAM,IAAI,MACR,kEAAkE,EAAE,GAAG,GACzE;GAEF,WAAW,IAAI,EAAE,IAAI,OAAO,MAAM;GAClC,OAAO,KAAK,CAAC;EACf;CACF;CACA,OAAO,OAAO,QAAQ,MAAM,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;AACpD"}
@@ -3,16 +3,6 @@ import "../common/index.mjs";
3
3
  import { findLastIndex } from "./core.mjs";
4
4
  import { AIMessageChunk, ToolMessage } from "@langchain/core/messages";
5
5
  //#region src/messages/tools.ts
6
- /**
7
- * Extracts discovered tool names from tool search results in the current turn.
8
- * Only processes tool search messages after the latest AI message with tool calls.
9
- *
10
- * Similar pattern to formatArtifactPayload - finds relevant messages efficiently
11
- * by identifying the latest AI parent and only processing subsequent tool messages.
12
- *
13
- * @param messages - All messages in the conversation
14
- * @returns Array of discovered tool names (empty if no new discoveries)
15
- */
16
6
  function extractToolDiscoveries(messages) {
17
7
  const lastMessage = messages[messages.length - 1];
18
8
  if (!(lastMessage instanceof ToolMessage)) return [];
@@ -33,10 +23,6 @@ function extractToolDiscoveries(messages) {
33
23
  }
34
24
  return discoveredNames;
35
25
  }
36
- /**
37
- * Checks if the current turn has any tool search results.
38
- * Quick check to avoid full extraction when not needed.
39
- */
40
26
  function hasToolSearchInCurrentTurn(messages) {
41
27
  const lastMessage = messages[messages.length - 1];
42
28
  if (!(lastMessage instanceof ToolMessage)) return false;
@@ -1 +1 @@
1
- {"version":3,"file":"tools.mjs","names":[],"sources":["../../../src/messages/tools.ts"],"sourcesContent":["// src/messages/toolDiscovery.ts\nimport { AIMessageChunk, ToolMessage } from '@langchain/core/messages';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport { findLastIndex } from './core';\nimport { Constants } from '@/common';\n\ntype ToolSearchArtifact = {\n tool_references?: Array<{ tool_name: string }>;\n};\n\n/**\n * Extracts discovered tool names from tool search results in the current turn.\n * Only processes tool search messages after the latest AI message with tool calls.\n *\n * Similar pattern to formatArtifactPayload - finds relevant messages efficiently\n * by identifying the latest AI parent and only processing subsequent tool messages.\n *\n * @param messages - All messages in the conversation\n * @returns Array of discovered tool names (empty if no new discoveries)\n */\nexport function extractToolDiscoveries(messages: BaseMessage[]): string[] {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return [];\n\n // Find the latest AIMessage with tool_calls that this tool message belongs to\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return [];\n\n // Collect tool_call_ids from the AI message\n const aiMessage = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIds = new Set(aiMessage.tool_calls?.map((tc) => tc.id) ?? []);\n\n // Only process tool search results after the AI message that belong to this turn\n const discoveredNames: string[] = [];\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (!(msg instanceof ToolMessage)) continue;\n if (msg.name !== Constants.TOOL_SEARCH) continue;\n if (!toolCallIds.has(msg.tool_call_id)) continue;\n\n // This is a tool search result from the current turn\n if (typeof msg.artifact === 'object' && msg.artifact != null) {\n const artifact = msg.artifact as ToolSearchArtifact;\n if (artifact.tool_references && artifact.tool_references.length > 0) {\n for (const ref of artifact.tool_references) {\n discoveredNames.push(ref.tool_name);\n }\n }\n }\n }\n\n return discoveredNames;\n}\n\n/**\n * Checks if the current turn has any tool search results.\n * Quick check to avoid full extraction when not needed.\n */\nexport function hasToolSearchInCurrentTurn(messages: BaseMessage[]): boolean {\n const lastMessage = messages[messages.length - 1];\n if (!(lastMessage instanceof ToolMessage)) return false;\n\n // Find the latest AIMessage with tool_calls\n const latestAIParentIndex = findLastIndex(\n messages,\n (msg) =>\n (msg instanceof AIMessageChunk &&\n (msg.tool_calls?.length ?? 0) > 0 &&\n msg.tool_calls?.some((tc) => tc.id === lastMessage.tool_call_id)) ??\n false\n );\n\n if (latestAIParentIndex === -1) return false;\n\n const aiMessage = messages[latestAIParentIndex] as AIMessageChunk;\n const toolCallIds = new Set(aiMessage.tool_calls?.map((tc) => tc.id) ?? []);\n\n // Check if any tool search results exist after the AI message\n for (let i = latestAIParentIndex + 1; i < messages.length; i++) {\n const msg = messages[i];\n if (\n msg instanceof ToolMessage &&\n msg.name === Constants.TOOL_SEARCH &&\n toolCallIds.has(msg.tool_call_id)\n ) {\n return true;\n }\n }\n\n return false;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAoBA,SAAgB,uBAAuB,UAAmC;CACxE,MAAM,cAAc,SAAS,SAAS,SAAS;CAC/C,IAAI,EAAE,uBAAuB,cAAc,OAAO,CAAC;CAGnD,MAAM,sBAAsB,cAC1B,WACC,SACE,eAAe,mBACb,IAAI,YAAY,UAAU,KAAK,KAChC,IAAI,YAAY,MAAM,OAAO,GAAG,OAAO,YAAY,YAAY,MACjE,KACJ;CAEA,IAAI,wBAAwB,IAAI,OAAO,CAAC;CAGxC,MAAM,YAAY,SAAS;CAC3B,MAAM,cAAc,IAAI,IAAI,UAAU,YAAY,KAAK,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;CAG1E,MAAM,kBAA4B,CAAC;CACnC,KAAK,IAAI,IAAI,sBAAsB,GAAG,IAAI,SAAS,QAAQ,KAAK;EAC9D,MAAM,MAAM,SAAS;EACrB,IAAI,EAAE,eAAe,cAAc;EACnC,IAAI,IAAI,SAAA,eAAgC;EACxC,IAAI,CAAC,YAAY,IAAI,IAAI,YAAY,GAAG;EAGxC,IAAI,OAAO,IAAI,aAAa,YAAY,IAAI,YAAY,MAAM;GAC5D,MAAM,WAAW,IAAI;GACrB,IAAI,SAAS,mBAAmB,SAAS,gBAAgB,SAAS,GAChE,KAAK,MAAM,OAAO,SAAS,iBACzB,gBAAgB,KAAK,IAAI,SAAS;EAGxC;CACF;CAEA,OAAO;AACT;;;;;AAMA,SAAgB,2BAA2B,UAAkC;CAC3E,MAAM,cAAc,SAAS,SAAS,SAAS;CAC/C,IAAI,EAAE,uBAAuB,cAAc,OAAO;CAGlD,MAAM,sBAAsB,cAC1B,WACC,SACE,eAAe,mBACb,IAAI,YAAY,UAAU,KAAK,KAChC,IAAI,YAAY,MAAM,OAAO,GAAG,OAAO,YAAY,YAAY,MACjE,KACJ;CAEA,IAAI,wBAAwB,IAAI,OAAO;CAEvC,MAAM,YAAY,SAAS;CAC3B,MAAM,cAAc,IAAI,IAAI,UAAU,YAAY,KAAK,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;CAG1E,KAAK,IAAI,IAAI,sBAAsB,GAAG,IAAI,SAAS,QAAQ,KAAK;EAC9D,MAAM,MAAM,SAAS;EACrB,IACE,eAAe,eACf,IAAI,SAAA,iBACJ,YAAY,IAAI,IAAI,YAAY,GAEhC,OAAO;CAEX;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"tools.mjs","names":[],"sources":["../../../src/messages/tools.ts"],"mappings":";;;;;AAoBA,SAAgB,uBAAuB,UAAmC;CACxE,MAAM,cAAc,SAAS,SAAS,SAAS;CAC/C,IAAI,EAAE,uBAAuB,cAAc,OAAO,CAAC;CAGnD,MAAM,sBAAsB,cAC1B,WACC,SACE,eAAe,mBACb,IAAI,YAAY,UAAU,KAAK,KAChC,IAAI,YAAY,MAAM,OAAO,GAAG,OAAO,YAAY,YAAY,MACjE,KACJ;CAEA,IAAI,wBAAwB,IAAI,OAAO,CAAC;CAGxC,MAAM,YAAY,SAAS;CAC3B,MAAM,cAAc,IAAI,IAAI,UAAU,YAAY,KAAK,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;CAG1E,MAAM,kBAA4B,CAAC;CACnC,KAAK,IAAI,IAAI,sBAAsB,GAAG,IAAI,SAAS,QAAQ,KAAK;EAC9D,MAAM,MAAM,SAAS;EACrB,IAAI,EAAE,eAAe,cAAc;EACnC,IAAI,IAAI,SAAA,eAAgC;EACxC,IAAI,CAAC,YAAY,IAAI,IAAI,YAAY,GAAG;EAGxC,IAAI,OAAO,IAAI,aAAa,YAAY,IAAI,YAAY,MAAM;GAC5D,MAAM,WAAW,IAAI;GACrB,IAAI,SAAS,mBAAmB,SAAS,gBAAgB,SAAS,GAChE,KAAK,MAAM,OAAO,SAAS,iBACzB,gBAAgB,KAAK,IAAI,SAAS;EAGxC;CACF;CAEA,OAAO;AACT;AAMA,SAAgB,2BAA2B,UAAkC;CAC3E,MAAM,cAAc,SAAS,SAAS,SAAS;CAC/C,IAAI,EAAE,uBAAuB,cAAc,OAAO;CAGlD,MAAM,sBAAsB,cAC1B,WACC,SACE,eAAe,mBACb,IAAI,YAAY,UAAU,KAAK,KAChC,IAAI,YAAY,MAAM,OAAO,GAAG,OAAO,YAAY,YAAY,MACjE,KACJ;CAEA,IAAI,wBAAwB,IAAI,OAAO;CAEvC,MAAM,YAAY,SAAS;CAC3B,MAAM,cAAc,IAAI,IAAI,UAAU,YAAY,KAAK,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;CAG1E,KAAK,IAAI,IAAI,sBAAsB,GAAG,IAAI,SAAS,QAAQ,KAAK;EAC9D,MAAM,MAAM,SAAS;EACrB,IACE,eAAe,eACf,IAAI,SAAA,iBACJ,YAAY,IAAI,IAAI,YAAY,GAEhC,OAAO;CAEX;CAEA,OAAO;AACT"}