@librechat/agents 3.4.7 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (924) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +0 -356
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/agents/projection.cjs +0 -9
  4. package/dist/cjs/agents/projection.cjs.map +1 -1
  5. package/dist/cjs/common/constants.cjs +0 -26
  6. package/dist/cjs/common/constants.cjs.map +1 -1
  7. package/dist/cjs/common/enum.cjs +0 -85
  8. package/dist/cjs/common/enum.cjs.map +1 -1
  9. package/dist/cjs/events.cjs +0 -14
  10. package/dist/cjs/events.cjs.map +1 -1
  11. package/dist/cjs/graphs/Graph.cjs +1 -909
  12. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  13. package/dist/cjs/graphs/MultiAgentGraph.cjs +7 -272
  14. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  15. package/dist/cjs/graphs/applyGraphRuntimeConfig.cjs.map +1 -1
  16. package/dist/cjs/graphs/createGraph.cjs.map +1 -1
  17. package/dist/cjs/hitl/askUserQuestion.cjs +0 -53
  18. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  19. package/dist/cjs/hitl/askUserQuestions.cjs +0 -20
  20. package/dist/cjs/hitl/askUserQuestions.cjs.map +1 -1
  21. package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs +0 -6
  22. package/dist/cjs/hitl/askUserQuestionsInterrupt.cjs.map +1 -1
  23. package/dist/cjs/hooks/HookRegistry.cjs +0 -127
  24. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  25. package/dist/cjs/hooks/createToolPolicyHook.cjs +0 -38
  26. package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
  27. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +0 -77
  28. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  29. package/dist/cjs/hooks/executeHooks.cjs +0 -79
  30. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  31. package/dist/cjs/hooks/index.cjs +0 -16
  32. package/dist/cjs/hooks/index.cjs.map +1 -1
  33. package/dist/cjs/hooks/matchers.cjs +0 -104
  34. package/dist/cjs/hooks/matchers.cjs.map +1 -1
  35. package/dist/cjs/hooks/types.cjs +0 -8
  36. package/dist/cjs/hooks/types.cjs.map +1 -1
  37. package/dist/cjs/instrumentation.cjs +0 -14
  38. package/dist/cjs/instrumentation.cjs.map +1 -1
  39. package/dist/cjs/langfuse.cjs +0 -75
  40. package/dist/cjs/langfuse.cjs.map +1 -1
  41. package/dist/cjs/langfuseConfig.cjs.map +1 -1
  42. package/dist/cjs/langfuseRuntimeContext.cjs +0 -13
  43. package/dist/cjs/langfuseRuntimeContext.cjs.map +1 -1
  44. package/dist/cjs/langfuseRuntimeScope.cjs +0 -4
  45. package/dist/cjs/langfuseRuntimeScope.cjs.map +1 -1
  46. package/dist/cjs/langfuseSpanRegistry.cjs +0 -28
  47. package/dist/cjs/langfuseSpanRegistry.cjs.map +1 -1
  48. package/dist/cjs/langfuseToolOutputTracing.cjs +0 -3
  49. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  50. package/dist/cjs/langfuseTraceShaping.cjs +0 -74
  51. package/dist/cjs/langfuseTraceShaping.cjs.map +1 -1
  52. package/dist/cjs/llm/anthropic/index.cjs +0 -3
  53. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  55. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +1 -111
  56. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  57. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +0 -1
  58. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  59. package/dist/cjs/llm/anthropic/utils/stream_events.cjs +0 -8
  60. package/dist/cjs/llm/anthropic/utils/stream_events.cjs.map +1 -1
  61. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  62. package/dist/cjs/llm/bedrock/cachePoints.cjs.map +1 -1
  63. package/dist/cjs/llm/bedrock/index.cjs +1 -95
  64. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  65. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  66. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +0 -78
  67. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  68. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +0 -24
  69. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
  70. package/dist/cjs/llm/contextOverflowRecovery.cjs +0 -62
  71. package/dist/cjs/llm/contextOverflowRecovery.cjs.map +1 -1
  72. package/dist/cjs/llm/fake.cjs.map +1 -1
  73. package/dist/cjs/llm/google/index.cjs +2 -21
  74. package/dist/cjs/llm/google/index.cjs.map +1 -1
  75. package/dist/cjs/llm/google/utils/common.cjs +0 -35
  76. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  77. package/dist/cjs/llm/init.cjs +0 -9
  78. package/dist/cjs/llm/init.cjs.map +1 -1
  79. package/dist/cjs/llm/invoke.cjs +1 -270
  80. package/dist/cjs/llm/invoke.cjs.map +1 -1
  81. package/dist/cjs/llm/mistral/index.cjs.map +1 -1
  82. package/dist/cjs/llm/openai/index.cjs +0 -99
  83. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  84. package/dist/cjs/llm/openai/streamMetadata.cjs +0 -21
  85. package/dist/cjs/llm/openai/streamMetadata.cjs.map +1 -1
  86. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  87. package/dist/cjs/llm/openrouter/index.cjs +0 -1
  88. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  89. package/dist/cjs/llm/openrouter/toolCache.cjs +0 -6
  90. package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
  91. package/dist/cjs/llm/preempt.cjs +0 -75
  92. package/dist/cjs/llm/preempt.cjs.map +1 -1
  93. package/dist/cjs/llm/providers.cjs.map +1 -1
  94. package/dist/cjs/llm/request.cjs +0 -10
  95. package/dist/cjs/llm/request.cjs.map +1 -1
  96. package/dist/cjs/llm/stream/chunkAdapters.cjs +0 -62
  97. package/dist/cjs/llm/stream/chunkAdapters.cjs.map +1 -1
  98. package/dist/cjs/llm/stream/smoother.cjs +0 -58
  99. package/dist/cjs/llm/stream/smoother.cjs.map +1 -1
  100. package/dist/cjs/llm/streamLimits.cjs +4 -293
  101. package/dist/cjs/llm/streamLimits.cjs.map +1 -1
  102. package/dist/cjs/llm/truncation.cjs +0 -36
  103. package/dist/cjs/llm/truncation.cjs.map +1 -1
  104. package/dist/cjs/llm/vertexai/index.cjs +0 -330
  105. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  106. package/dist/cjs/messages/alternation.cjs +0 -43
  107. package/dist/cjs/messages/alternation.cjs.map +1 -1
  108. package/dist/cjs/messages/anthropicToolCache.cjs +0 -45
  109. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
  110. package/dist/cjs/messages/assistantPhase.cjs +0 -12
  111. package/dist/cjs/messages/assistantPhase.cjs.map +1 -1
  112. package/dist/cjs/messages/budget.cjs +0 -9
  113. package/dist/cjs/messages/budget.cjs.map +1 -1
  114. package/dist/cjs/messages/cache.cjs +0 -172
  115. package/dist/cjs/messages/cache.cjs.map +1 -1
  116. package/dist/cjs/messages/content.cjs +0 -9
  117. package/dist/cjs/messages/content.cjs.map +1 -1
  118. package/dist/cjs/messages/contextPruning.cjs +0 -15
  119. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  120. package/dist/cjs/messages/contextPruningSettings.cjs +0 -3
  121. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
  122. package/dist/cjs/messages/core.cjs +0 -48
  123. package/dist/cjs/messages/core.cjs.map +1 -1
  124. package/dist/cjs/messages/format.cjs +1 -345
  125. package/dist/cjs/messages/format.cjs.map +1 -1
  126. package/dist/cjs/messages/handoffCue.cjs +0 -36
  127. package/dist/cjs/messages/handoffCue.cjs.map +1 -1
  128. package/dist/cjs/messages/ids.cjs.map +1 -1
  129. package/dist/cjs/messages/injected.cjs +0 -33
  130. package/dist/cjs/messages/injected.cjs.map +1 -1
  131. package/dist/cjs/messages/langchain.cjs +0 -14
  132. package/dist/cjs/messages/langchain.cjs.map +1 -1
  133. package/dist/cjs/messages/prune.cjs +1 -184
  134. package/dist/cjs/messages/prune.cjs.map +1 -1
  135. package/dist/cjs/messages/recency.cjs +0 -32
  136. package/dist/cjs/messages/recency.cjs.map +1 -1
  137. package/dist/cjs/messages/reducer.cjs +0 -30
  138. package/dist/cjs/messages/reducer.cjs.map +1 -1
  139. package/dist/cjs/messages/tools.cjs +0 -14
  140. package/dist/cjs/messages/tools.cjs.map +1 -1
  141. package/dist/cjs/openai/index.cjs.map +1 -1
  142. package/dist/cjs/prompts/activityLabel.cjs +9 -79
  143. package/dist/cjs/prompts/activityLabel.cjs.map +1 -1
  144. package/dist/cjs/responses/index.cjs.map +1 -1
  145. package/dist/cjs/run.cjs +2 -538
  146. package/dist/cjs/run.cjs.map +1 -1
  147. package/dist/cjs/session/AgentSession.cjs +1 -17
  148. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  149. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  150. package/dist/cjs/session/handlers.cjs +0 -7
  151. package/dist/cjs/session/handlers.cjs.map +1 -1
  152. package/dist/cjs/session/ids.cjs.map +1 -1
  153. package/dist/cjs/session/messageSerialization.cjs +0 -4
  154. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  155. package/dist/cjs/stream.cjs +1 -93
  156. package/dist/cjs/stream.cjs.map +1 -1
  157. package/dist/cjs/summarization/index.cjs +0 -27
  158. package/dist/cjs/summarization/index.cjs.map +1 -1
  159. package/dist/cjs/summarization/node.cjs +0 -273
  160. package/dist/cjs/summarization/node.cjs.map +1 -1
  161. package/dist/cjs/tools/BashExecutor.cjs +0 -35
  162. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  163. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +0 -24
  164. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  165. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  166. package/dist/cjs/tools/CodeExecutor.cjs +0 -13
  167. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  168. package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
  169. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +0 -101
  170. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  171. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  172. package/dist/cjs/tools/SkillTool.cjs +0 -5
  173. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  174. package/dist/cjs/tools/SubagentTool.cjs +0 -10
  175. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  176. package/dist/cjs/tools/ToolNode.cjs +6 -1038
  177. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  178. package/dist/cjs/tools/ToolSearch.cjs +0 -179
  179. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  180. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
  181. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
  182. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +0 -39
  183. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  184. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  185. package/dist/cjs/tools/eagerEventExecution.cjs +0 -6
  186. package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
  187. package/dist/cjs/tools/handlers.cjs +1 -41
  188. package/dist/cjs/tools/handlers.cjs.map +1 -1
  189. package/dist/cjs/tools/intentArg.cjs +1 -132
  190. package/dist/cjs/tools/intentArg.cjs.map +1 -1
  191. package/dist/cjs/tools/local/CompileCheckTool.cjs +0 -25
  192. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  193. package/dist/cjs/tools/local/FileCheckpointer.cjs +0 -23
  194. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  195. package/dist/cjs/tools/local/LocalCodingTools.cjs +0 -80
  196. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  197. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +0 -126
  198. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  199. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  200. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +0 -12
  201. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  202. package/dist/cjs/tools/local/attachments.cjs +0 -44
  203. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  204. package/dist/cjs/tools/local/bashAst.cjs +0 -16
  205. package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
  206. package/dist/cjs/tools/local/editStrategies.cjs +0 -14
  207. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
  208. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  209. package/dist/cjs/tools/local/syntaxCheck.cjs +0 -31
  210. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
  211. package/dist/cjs/tools/local/textEncoding.cjs +0 -11
  212. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
  213. package/dist/cjs/tools/local/workspaceFS.cjs +0 -33
  214. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
  215. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  216. package/dist/cjs/tools/schema.cjs +0 -8
  217. package/dist/cjs/tools/schema.cjs.map +1 -1
  218. package/dist/cjs/tools/search/anthropic.cjs +0 -9
  219. package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
  220. package/dist/cjs/tools/search/content.cjs.map +1 -1
  221. package/dist/cjs/tools/search/crw-scraper.cjs +0 -33
  222. package/dist/cjs/tools/search/crw-scraper.cjs.map +1 -1
  223. package/dist/cjs/tools/search/crw-search.cjs +0 -2
  224. package/dist/cjs/tools/search/crw-search.cjs.map +1 -1
  225. package/dist/cjs/tools/search/firecrawl.cjs +0 -25
  226. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  227. package/dist/cjs/tools/search/format.cjs +0 -30
  228. package/dist/cjs/tools/search/format.cjs.map +1 -1
  229. package/dist/cjs/tools/search/highlights.cjs +0 -16
  230. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  231. package/dist/cjs/tools/search/keenable-scraper.cjs +0 -8
  232. package/dist/cjs/tools/search/keenable-scraper.cjs.map +1 -1
  233. package/dist/cjs/tools/search/keenable-search.cjs +0 -7
  234. package/dist/cjs/tools/search/keenable-search.cjs.map +1 -1
  235. package/dist/cjs/tools/search/rerankers.cjs +0 -35
  236. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  237. package/dist/cjs/tools/search/schema.cjs +0 -1
  238. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  239. package/dist/cjs/tools/search/search.cjs +1 -14
  240. package/dist/cjs/tools/search/search.cjs.map +1 -1
  241. package/dist/cjs/tools/search/serper-scraper.cjs +0 -46
  242. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  243. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  244. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  245. package/dist/cjs/tools/search/tool.cjs +0 -25
  246. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  247. package/dist/cjs/tools/search/utils.cjs +0 -8
  248. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  249. package/dist/cjs/tools/skillCatalog.cjs +0 -6
  250. package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
  251. package/dist/cjs/tools/streamedToolCallSeals.cjs +0 -6
  252. package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
  253. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs +0 -2
  254. package/dist/cjs/tools/subagent/SubagentExecutionRegistry.cjs.map +1 -1
  255. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +3 -213
  256. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  257. package/dist/cjs/tools/subagent/SubagentReplay.cjs.map +1 -1
  258. package/dist/cjs/tools/subagent/childGraphConfig.cjs +0 -4
  259. package/dist/cjs/tools/subagent/childGraphConfig.cjs.map +1 -1
  260. package/dist/cjs/tools/subagent/runtimeLimits.cjs.map +1 -1
  261. package/dist/cjs/tools/toolOutputReferences.cjs +1 -322
  262. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  263. package/dist/cjs/types/hitl.cjs +0 -5
  264. package/dist/cjs/types/hitl.cjs.map +1 -1
  265. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  266. package/dist/cjs/utils/errors.cjs +14 -165
  267. package/dist/cjs/utils/errors.cjs.map +1 -1
  268. package/dist/cjs/utils/events.cjs +0 -10
  269. package/dist/cjs/utils/events.cjs.map +1 -1
  270. package/dist/cjs/utils/graph.cjs.map +1 -1
  271. package/dist/cjs/utils/handlers.cjs +0 -3
  272. package/dist/cjs/utils/handlers.cjs.map +1 -1
  273. package/dist/cjs/utils/llm.cjs +0 -1
  274. package/dist/cjs/utils/llm.cjs.map +1 -1
  275. package/dist/cjs/utils/misc.cjs +0 -16
  276. package/dist/cjs/utils/misc.cjs.map +1 -1
  277. package/dist/cjs/utils/proxy.cjs +0 -26
  278. package/dist/cjs/utils/proxy.cjs.map +1 -1
  279. package/dist/cjs/utils/run.cjs +0 -6
  280. package/dist/cjs/utils/run.cjs.map +1 -1
  281. package/dist/cjs/utils/schema.cjs +0 -5
  282. package/dist/cjs/utils/schema.cjs.map +1 -1
  283. package/dist/cjs/utils/title.cjs +0 -6
  284. package/dist/cjs/utils/title.cjs.map +1 -1
  285. package/dist/cjs/utils/tokens.cjs +0 -113
  286. package/dist/cjs/utils/tokens.cjs.map +1 -1
  287. package/dist/cjs/utils/toolContent.cjs +0 -41
  288. package/dist/cjs/utils/toolContent.cjs.map +1 -1
  289. package/dist/cjs/utils/truncation.cjs +0 -61
  290. package/dist/cjs/utils/truncation.cjs.map +1 -1
  291. package/dist/esm/agents/AgentContext.mjs +0 -356
  292. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  293. package/dist/esm/agents/projection.mjs +0 -9
  294. package/dist/esm/agents/projection.mjs.map +1 -1
  295. package/dist/esm/common/constants.mjs +0 -26
  296. package/dist/esm/common/constants.mjs.map +1 -1
  297. package/dist/esm/common/enum.mjs +0 -85
  298. package/dist/esm/common/enum.mjs.map +1 -1
  299. package/dist/esm/events.mjs +0 -14
  300. package/dist/esm/events.mjs.map +1 -1
  301. package/dist/esm/graphs/Graph.mjs +1 -909
  302. package/dist/esm/graphs/Graph.mjs.map +1 -1
  303. package/dist/esm/graphs/MultiAgentGraph.mjs +7 -272
  304. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  305. package/dist/esm/graphs/applyGraphRuntimeConfig.mjs.map +1 -1
  306. package/dist/esm/graphs/createGraph.mjs.map +1 -1
  307. package/dist/esm/hitl/askUserQuestion.mjs +0 -53
  308. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  309. package/dist/esm/hitl/askUserQuestions.mjs +0 -20
  310. package/dist/esm/hitl/askUserQuestions.mjs.map +1 -1
  311. package/dist/esm/hitl/askUserQuestionsInterrupt.mjs +0 -6
  312. package/dist/esm/hitl/askUserQuestionsInterrupt.mjs.map +1 -1
  313. package/dist/esm/hooks/HookRegistry.mjs +0 -127
  314. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  315. package/dist/esm/hooks/createToolPolicyHook.mjs +0 -38
  316. package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
  317. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +0 -77
  318. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  319. package/dist/esm/hooks/executeHooks.mjs +0 -79
  320. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  321. package/dist/esm/hooks/index.mjs +0 -16
  322. package/dist/esm/hooks/index.mjs.map +1 -1
  323. package/dist/esm/hooks/matchers.mjs +0 -104
  324. package/dist/esm/hooks/matchers.mjs.map +1 -1
  325. package/dist/esm/hooks/types.mjs +0 -8
  326. package/dist/esm/hooks/types.mjs.map +1 -1
  327. package/dist/esm/instrumentation.mjs +0 -14
  328. package/dist/esm/instrumentation.mjs.map +1 -1
  329. package/dist/esm/langfuse.mjs +0 -75
  330. package/dist/esm/langfuse.mjs.map +1 -1
  331. package/dist/esm/langfuseConfig.mjs.map +1 -1
  332. package/dist/esm/langfuseRuntimeContext.mjs +0 -13
  333. package/dist/esm/langfuseRuntimeContext.mjs.map +1 -1
  334. package/dist/esm/langfuseRuntimeScope.mjs +0 -4
  335. package/dist/esm/langfuseRuntimeScope.mjs.map +1 -1
  336. package/dist/esm/langfuseSpanRegistry.mjs +0 -28
  337. package/dist/esm/langfuseSpanRegistry.mjs.map +1 -1
  338. package/dist/esm/langfuseToolOutputTracing.mjs +0 -3
  339. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  340. package/dist/esm/langfuseTraceShaping.mjs +0 -74
  341. package/dist/esm/langfuseTraceShaping.mjs.map +1 -1
  342. package/dist/esm/llm/anthropic/index.mjs +0 -3
  343. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  344. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  345. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +1 -111
  346. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  347. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +0 -1
  348. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  349. package/dist/esm/llm/anthropic/utils/stream_events.mjs +0 -8
  350. package/dist/esm/llm/anthropic/utils/stream_events.mjs.map +1 -1
  351. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  352. package/dist/esm/llm/bedrock/cachePoints.mjs.map +1 -1
  353. package/dist/esm/llm/bedrock/index.mjs +1 -95
  354. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  355. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  356. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +0 -78
  357. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  358. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +0 -24
  359. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
  360. package/dist/esm/llm/contextOverflowRecovery.mjs +0 -62
  361. package/dist/esm/llm/contextOverflowRecovery.mjs.map +1 -1
  362. package/dist/esm/llm/fake.mjs.map +1 -1
  363. package/dist/esm/llm/google/index.mjs +2 -21
  364. package/dist/esm/llm/google/index.mjs.map +1 -1
  365. package/dist/esm/llm/google/utils/common.mjs +0 -35
  366. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  367. package/dist/esm/llm/init.mjs +0 -9
  368. package/dist/esm/llm/init.mjs.map +1 -1
  369. package/dist/esm/llm/invoke.mjs +1 -270
  370. package/dist/esm/llm/invoke.mjs.map +1 -1
  371. package/dist/esm/llm/mistral/index.mjs.map +1 -1
  372. package/dist/esm/llm/openai/index.mjs +0 -99
  373. package/dist/esm/llm/openai/index.mjs.map +1 -1
  374. package/dist/esm/llm/openai/streamMetadata.mjs +0 -21
  375. package/dist/esm/llm/openai/streamMetadata.mjs.map +1 -1
  376. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  377. package/dist/esm/llm/openrouter/index.mjs +0 -1
  378. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  379. package/dist/esm/llm/openrouter/toolCache.mjs +0 -6
  380. package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
  381. package/dist/esm/llm/preempt.mjs +0 -75
  382. package/dist/esm/llm/preempt.mjs.map +1 -1
  383. package/dist/esm/llm/providers.mjs.map +1 -1
  384. package/dist/esm/llm/request.mjs +0 -10
  385. package/dist/esm/llm/request.mjs.map +1 -1
  386. package/dist/esm/llm/stream/chunkAdapters.mjs +0 -62
  387. package/dist/esm/llm/stream/chunkAdapters.mjs.map +1 -1
  388. package/dist/esm/llm/stream/smoother.mjs +0 -58
  389. package/dist/esm/llm/stream/smoother.mjs.map +1 -1
  390. package/dist/esm/llm/streamLimits.mjs +4 -293
  391. package/dist/esm/llm/streamLimits.mjs.map +1 -1
  392. package/dist/esm/llm/truncation.mjs +0 -36
  393. package/dist/esm/llm/truncation.mjs.map +1 -1
  394. package/dist/esm/llm/vertexai/index.mjs +0 -330
  395. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  396. package/dist/esm/messages/alternation.mjs +0 -43
  397. package/dist/esm/messages/alternation.mjs.map +1 -1
  398. package/dist/esm/messages/anthropicToolCache.mjs +0 -45
  399. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
  400. package/dist/esm/messages/assistantPhase.mjs +0 -12
  401. package/dist/esm/messages/assistantPhase.mjs.map +1 -1
  402. package/dist/esm/messages/budget.mjs +0 -9
  403. package/dist/esm/messages/budget.mjs.map +1 -1
  404. package/dist/esm/messages/cache.mjs +0 -172
  405. package/dist/esm/messages/cache.mjs.map +1 -1
  406. package/dist/esm/messages/content.mjs +0 -9
  407. package/dist/esm/messages/content.mjs.map +1 -1
  408. package/dist/esm/messages/contextPruning.mjs +0 -15
  409. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  410. package/dist/esm/messages/contextPruningSettings.mjs +0 -3
  411. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
  412. package/dist/esm/messages/core.mjs +0 -48
  413. package/dist/esm/messages/core.mjs.map +1 -1
  414. package/dist/esm/messages/format.mjs +1 -345
  415. package/dist/esm/messages/format.mjs.map +1 -1
  416. package/dist/esm/messages/handoffCue.mjs +0 -36
  417. package/dist/esm/messages/handoffCue.mjs.map +1 -1
  418. package/dist/esm/messages/ids.mjs.map +1 -1
  419. package/dist/esm/messages/injected.mjs +0 -33
  420. package/dist/esm/messages/injected.mjs.map +1 -1
  421. package/dist/esm/messages/langchain.mjs +0 -14
  422. package/dist/esm/messages/langchain.mjs.map +1 -1
  423. package/dist/esm/messages/prune.mjs +1 -184
  424. package/dist/esm/messages/prune.mjs.map +1 -1
  425. package/dist/esm/messages/recency.mjs +0 -32
  426. package/dist/esm/messages/recency.mjs.map +1 -1
  427. package/dist/esm/messages/reducer.mjs +0 -30
  428. package/dist/esm/messages/reducer.mjs.map +1 -1
  429. package/dist/esm/messages/tools.mjs +0 -14
  430. package/dist/esm/messages/tools.mjs.map +1 -1
  431. package/dist/esm/openai/index.mjs.map +1 -1
  432. package/dist/esm/prompts/activityLabel.mjs +9 -79
  433. package/dist/esm/prompts/activityLabel.mjs.map +1 -1
  434. package/dist/esm/responses/index.mjs.map +1 -1
  435. package/dist/esm/run.mjs +2 -538
  436. package/dist/esm/run.mjs.map +1 -1
  437. package/dist/esm/session/AgentSession.mjs +1 -17
  438. package/dist/esm/session/AgentSession.mjs.map +1 -1
  439. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  440. package/dist/esm/session/handlers.mjs +0 -7
  441. package/dist/esm/session/handlers.mjs.map +1 -1
  442. package/dist/esm/session/ids.mjs.map +1 -1
  443. package/dist/esm/session/messageSerialization.mjs +0 -4
  444. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  445. package/dist/esm/stream.mjs +1 -93
  446. package/dist/esm/stream.mjs.map +1 -1
  447. package/dist/esm/summarization/index.mjs +0 -27
  448. package/dist/esm/summarization/index.mjs.map +1 -1
  449. package/dist/esm/summarization/node.mjs +0 -273
  450. package/dist/esm/summarization/node.mjs.map +1 -1
  451. package/dist/esm/tools/BashExecutor.mjs +0 -35
  452. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  453. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +0 -24
  454. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  455. package/dist/esm/tools/Calculator.mjs.map +1 -1
  456. package/dist/esm/tools/CodeExecutor.mjs +0 -13
  457. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  458. package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
  459. package/dist/esm/tools/ProgrammaticToolCalling.mjs +0 -101
  460. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  461. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  462. package/dist/esm/tools/SkillTool.mjs +0 -5
  463. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  464. package/dist/esm/tools/SubagentTool.mjs +0 -10
  465. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  466. package/dist/esm/tools/ToolNode.mjs +6 -1038
  467. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  468. package/dist/esm/tools/ToolSearch.mjs +0 -179
  469. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  470. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
  471. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
  472. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +0 -39
  473. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  474. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  475. package/dist/esm/tools/eagerEventExecution.mjs +0 -6
  476. package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
  477. package/dist/esm/tools/handlers.mjs +1 -41
  478. package/dist/esm/tools/handlers.mjs.map +1 -1
  479. package/dist/esm/tools/intentArg.mjs +1 -132
  480. package/dist/esm/tools/intentArg.mjs.map +1 -1
  481. package/dist/esm/tools/local/CompileCheckTool.mjs +0 -25
  482. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  483. package/dist/esm/tools/local/FileCheckpointer.mjs +0 -23
  484. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  485. package/dist/esm/tools/local/LocalCodingTools.mjs +0 -80
  486. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  487. package/dist/esm/tools/local/LocalExecutionEngine.mjs +0 -126
  488. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  489. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  490. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +0 -12
  491. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  492. package/dist/esm/tools/local/attachments.mjs +0 -44
  493. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  494. package/dist/esm/tools/local/bashAst.mjs +0 -16
  495. package/dist/esm/tools/local/bashAst.mjs.map +1 -1
  496. package/dist/esm/tools/local/editStrategies.mjs +0 -14
  497. package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
  498. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  499. package/dist/esm/tools/local/syntaxCheck.mjs +0 -31
  500. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
  501. package/dist/esm/tools/local/textEncoding.mjs +0 -11
  502. package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
  503. package/dist/esm/tools/local/workspaceFS.mjs +0 -33
  504. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
  505. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  506. package/dist/esm/tools/schema.mjs +0 -8
  507. package/dist/esm/tools/schema.mjs.map +1 -1
  508. package/dist/esm/tools/search/anthropic.mjs +0 -9
  509. package/dist/esm/tools/search/anthropic.mjs.map +1 -1
  510. package/dist/esm/tools/search/content.mjs.map +1 -1
  511. package/dist/esm/tools/search/crw-scraper.mjs +0 -33
  512. package/dist/esm/tools/search/crw-scraper.mjs.map +1 -1
  513. package/dist/esm/tools/search/crw-search.mjs +0 -2
  514. package/dist/esm/tools/search/crw-search.mjs.map +1 -1
  515. package/dist/esm/tools/search/firecrawl.mjs +0 -25
  516. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  517. package/dist/esm/tools/search/format.mjs +0 -30
  518. package/dist/esm/tools/search/format.mjs.map +1 -1
  519. package/dist/esm/tools/search/highlights.mjs +0 -16
  520. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  521. package/dist/esm/tools/search/keenable-scraper.mjs +0 -8
  522. package/dist/esm/tools/search/keenable-scraper.mjs.map +1 -1
  523. package/dist/esm/tools/search/keenable-search.mjs +0 -7
  524. package/dist/esm/tools/search/keenable-search.mjs.map +1 -1
  525. package/dist/esm/tools/search/rerankers.mjs +0 -35
  526. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  527. package/dist/esm/tools/search/schema.mjs +0 -1
  528. package/dist/esm/tools/search/schema.mjs.map +1 -1
  529. package/dist/esm/tools/search/search.mjs +1 -14
  530. package/dist/esm/tools/search/search.mjs.map +1 -1
  531. package/dist/esm/tools/search/serper-scraper.mjs +0 -46
  532. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  533. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  534. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  535. package/dist/esm/tools/search/tool.mjs +0 -25
  536. package/dist/esm/tools/search/tool.mjs.map +1 -1
  537. package/dist/esm/tools/search/utils.mjs +0 -8
  538. package/dist/esm/tools/search/utils.mjs.map +1 -1
  539. package/dist/esm/tools/skillCatalog.mjs +0 -6
  540. package/dist/esm/tools/skillCatalog.mjs.map +1 -1
  541. package/dist/esm/tools/streamedToolCallSeals.mjs +0 -6
  542. package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
  543. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs +0 -2
  544. package/dist/esm/tools/subagent/SubagentExecutionRegistry.mjs.map +1 -1
  545. package/dist/esm/tools/subagent/SubagentExecutor.mjs +3 -213
  546. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  547. package/dist/esm/tools/subagent/SubagentReplay.mjs.map +1 -1
  548. package/dist/esm/tools/subagent/childGraphConfig.mjs +0 -4
  549. package/dist/esm/tools/subagent/childGraphConfig.mjs.map +1 -1
  550. package/dist/esm/tools/subagent/runtimeLimits.mjs.map +1 -1
  551. package/dist/esm/tools/toolOutputReferences.mjs +1 -322
  552. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  553. package/dist/esm/types/hitl.mjs +0 -5
  554. package/dist/esm/types/hitl.mjs.map +1 -1
  555. package/dist/esm/utils/callbacks.mjs.map +1 -1
  556. package/dist/esm/utils/errors.mjs +14 -165
  557. package/dist/esm/utils/errors.mjs.map +1 -1
  558. package/dist/esm/utils/events.mjs +0 -10
  559. package/dist/esm/utils/events.mjs.map +1 -1
  560. package/dist/esm/utils/graph.mjs.map +1 -1
  561. package/dist/esm/utils/handlers.mjs +0 -3
  562. package/dist/esm/utils/handlers.mjs.map +1 -1
  563. package/dist/esm/utils/llm.mjs +0 -1
  564. package/dist/esm/utils/llm.mjs.map +1 -1
  565. package/dist/esm/utils/misc.mjs +0 -16
  566. package/dist/esm/utils/misc.mjs.map +1 -1
  567. package/dist/esm/utils/proxy.mjs +0 -26
  568. package/dist/esm/utils/proxy.mjs.map +1 -1
  569. package/dist/esm/utils/run.mjs +0 -6
  570. package/dist/esm/utils/run.mjs.map +1 -1
  571. package/dist/esm/utils/schema.mjs +0 -5
  572. package/dist/esm/utils/schema.mjs.map +1 -1
  573. package/dist/esm/utils/title.mjs +0 -6
  574. package/dist/esm/utils/title.mjs.map +1 -1
  575. package/dist/esm/utils/tokens.mjs +0 -113
  576. package/dist/esm/utils/tokens.mjs.map +1 -1
  577. package/dist/esm/utils/toolContent.mjs +0 -41
  578. package/dist/esm/utils/toolContent.mjs.map +1 -1
  579. package/dist/esm/utils/truncation.mjs +0 -61
  580. package/dist/esm/utils/truncation.mjs.map +1 -1
  581. package/package.json +35 -32
  582. package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +0 -52
  583. package/dist/types/test/mockTools.d.ts +0 -28
  584. package/dist/types/utils/__tests__/fixtures/contextOverflowSignatures.d.ts +0 -40
  585. package/src/__tests__/stream.eagerArgsDivergence.test.ts +0 -911
  586. package/src/__tests__/stream.eagerEventExecution.test.ts +0 -5046
  587. package/src/__tests__/stream.streamLimits.test.ts +0 -1982
  588. package/src/agents/__tests__/AgentContext.anthropic.live.test.ts +0 -448
  589. package/src/agents/__tests__/AgentContext.bedrock.live.test.ts +0 -655
  590. package/src/agents/__tests__/AgentContext.openrouter.live.test.ts +0 -128
  591. package/src/agents/__tests__/AgentContext.overflow.test.ts +0 -205
  592. package/src/agents/__tests__/AgentContext.test.ts +0 -2425
  593. package/src/agents/__tests__/projection.test.ts +0 -73
  594. package/src/agents/__tests__/promptCacheLiveHelpers.ts +0 -175
  595. package/src/aggregator.test.ts +0 -1214
  596. package/src/graphs/__tests__/Graph.breakerLifecycle.test.ts +0 -273
  597. package/src/graphs/__tests__/Graph.closeRunStep.test.ts +0 -385
  598. package/src/graphs/__tests__/Graph.contextOverflow.test.ts +0 -1766
  599. package/src/graphs/__tests__/Graph.preemptSignal.test.ts +0 -126
  600. package/src/graphs/__tests__/Graph.reasoning.test.ts +0 -1717
  601. package/src/graphs/__tests__/Graph.subagentResumeState.test.ts +0 -80
  602. package/src/graphs/__tests__/MultiAgentGraph.test.ts +0 -177
  603. package/src/graphs/__tests__/composition.smoke.test.ts +0 -509
  604. package/src/graphs/__tests__/createGraph.test.ts +0 -206
  605. package/src/hooks/__tests__/HookRegistry.test.ts +0 -334
  606. package/src/hooks/__tests__/compactHooks.test.ts +0 -250
  607. package/src/hooks/__tests__/createToolPolicyHook.test.ts +0 -268
  608. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +0 -405
  609. package/src/hooks/__tests__/executeHooks.test.ts +0 -1294
  610. package/src/hooks/__tests__/integration.test.ts +0 -337
  611. package/src/hooks/__tests__/matchers.test.ts +0 -238
  612. package/src/hooks/__tests__/preemptBoundary.test.ts +0 -152
  613. package/src/hooks/__tests__/toolHooks.test.ts +0 -669
  614. package/src/llm/__tests__/contextOverflowRecovery.test.ts +0 -401
  615. package/src/llm/__tests__/fallbackOverflow.test.ts +0 -287
  616. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  617. package/src/llm/anthropic/inherited-content-utils.spec.ts +0 -249
  618. package/src/llm/anthropic/inherited-stream-events.spec.ts +0 -1259
  619. package/src/llm/anthropic/inherited-strict.spec.ts +0 -302
  620. package/src/llm/anthropic/llm.spec.ts +0 -3394
  621. package/src/llm/anthropic/utils/cross-provider-reasoning.test.ts +0 -383
  622. package/src/llm/anthropic/utils/cross-provider-server-tools.test.ts +0 -110
  623. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +0 -508
  624. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +0 -361
  625. package/src/llm/anthropic/utils/stripPrefillCache.test.ts +0 -111
  626. package/src/llm/anthropic/utils/tool-id-normalization.test.ts +0 -287
  627. package/src/llm/bedrock/inherited-cache.spec.ts +0 -144
  628. package/src/llm/bedrock/inherited.spec.ts +0 -724
  629. package/src/llm/bedrock/llm.spec.ts +0 -1533
  630. package/src/llm/bedrock/streamSealDispatch.test.ts +0 -331
  631. package/src/llm/bedrock/toolCache.test.ts +0 -194
  632. package/src/llm/bedrock/utils/cross-provider-reasoning.test.ts +0 -131
  633. package/src/llm/bedrock/utils/cross-provider-server-tools.test.ts +0 -122
  634. package/src/llm/bedrock/utils/message_inputs.test.ts +0 -650
  635. package/src/llm/bedrock/utils/message_outputs.test.ts +0 -85
  636. package/src/llm/bedrock/utils/toolResultCachePoint.test.ts +0 -118
  637. package/src/llm/custom-chat-models.smoke.test.ts +0 -1966
  638. package/src/llm/google/data/gettysburg10.wav +0 -0
  639. package/src/llm/google/data/hotdog.jpg +0 -0
  640. package/src/llm/google/inherited-stream-events.spec.ts +0 -350
  641. package/src/llm/google/llm.spec.ts +0 -1388
  642. package/src/llm/google/streamSmoothing.test.ts +0 -121
  643. package/src/llm/google/utils/common.test.ts +0 -196
  644. package/src/llm/invoke.alternation.test.ts +0 -87
  645. package/src/llm/invoke.handoffCue.test.ts +0 -112
  646. package/src/llm/invoke.streamLimits.test.ts +0 -142
  647. package/src/llm/invoke.test.ts +0 -1198
  648. package/src/llm/mistral/streamSmoothing.test.ts +0 -97
  649. package/src/llm/openai/cacheWriteTokens.test.ts +0 -112
  650. package/src/llm/openai/contentBlocks.test.ts +0 -381
  651. package/src/llm/openai/deepseek.test.ts +0 -747
  652. package/src/llm/openai/inherited-deepseek.spec.ts +0 -347
  653. package/src/llm/openai/inherited-xai.spec.ts +0 -416
  654. package/src/llm/openai/llm.spec.ts +0 -1774
  655. package/src/llm/openai/managedRequests.test.ts +0 -182
  656. package/src/llm/openai/sequentialToolCallSeals.test.ts +0 -199
  657. package/src/llm/openai/streamMetadata.spec.ts +0 -86
  658. package/src/llm/openai/streamMetadataDedup.spec.ts +0 -166
  659. package/src/llm/openai/utils/isReasoningModel.test.ts +0 -90
  660. package/src/llm/openai/utils/messages.test.ts +0 -488
  661. package/src/llm/openrouter/reasoning.test.ts +0 -561
  662. package/src/llm/openrouter/toolCache.test.ts +0 -134
  663. package/src/llm/preempt.test.ts +0 -323
  664. package/src/llm/stream/chunkAdapters.test.ts +0 -202
  665. package/src/llm/stream/reassembly.test.ts +0 -241
  666. package/src/llm/stream/smoother.bench.test.ts +0 -155
  667. package/src/llm/stream/smoother.test.ts +0 -519
  668. package/src/llm/streamLimits.test.ts +0 -450
  669. package/src/llm/truncation.test.ts +0 -242
  670. package/src/llm/vertexai/fixThoughtSignatures.test.ts +0 -154
  671. package/src/llm/vertexai/inherited-stream-events.spec.ts +0 -271
  672. package/src/llm/vertexai/llm.spec.ts +0 -159
  673. package/src/llm/vertexai/repairUsageMetadata.test.ts +0 -54
  674. package/src/llm/vertexai/sealStreamedToolCalls.test.ts +0 -88
  675. package/src/llm/vertexai/streamSealDispatch.test.ts +0 -148
  676. package/src/llm/vertexai/streamSmoothing.test.ts +0 -109
  677. package/src/messages/__tests__/anthropicToolCache.test.ts +0 -339
  678. package/src/messages/__tests__/observationMasking.test.ts +0 -312
  679. package/src/messages/__tests__/recency.test.ts +0 -267
  680. package/src/messages/__tests__/tools.test.ts +0 -473
  681. package/src/messages/alternation.test.ts +0 -212
  682. package/src/messages/assistantPhase.test.ts +0 -75
  683. package/src/messages/cache.tail.test.ts +0 -533
  684. package/src/messages/cache.test.ts +0 -2166
  685. package/src/messages/content.test.ts +0 -362
  686. package/src/messages/contextPruning.test.ts +0 -184
  687. package/src/messages/ensureThinkingBlock.test.ts +0 -1427
  688. package/src/messages/foldToollessToolBlocks.test.ts +0 -596
  689. package/src/messages/formatAgentMessages.reducer.test.ts +0 -162
  690. package/src/messages/formatAgentMessages.skills.test.ts +0 -513
  691. package/src/messages/formatAgentMessages.steer.test.ts +0 -598
  692. package/src/messages/formatAgentMessages.test.ts +0 -8111
  693. package/src/messages/formatAgentMessages.tools.test.ts +0 -522
  694. package/src/messages/formatMessage.test.ts +0 -693
  695. package/src/messages/handoffCue.test.ts +0 -96
  696. package/src/messages/injected.test.ts +0 -107
  697. package/src/messages/labelContentByAgent.test.ts +0 -962
  698. package/src/messages/reducer.spec.ts +0 -32
  699. package/src/messages/shiftIndexTokenCountMap.test.ts +0 -81
  700. package/src/messages/tailCacheConversion.test.ts +0 -161
  701. package/src/openai/__tests__/openai.test.ts +0 -337
  702. package/src/responses/__tests__/responses.test.ts +0 -652
  703. package/src/scripts/abort.ts +0 -157
  704. package/src/scripts/activity-labels/captured.json +0 -56
  705. package/src/scripts/activity-labels/checks.cjs +0 -205
  706. package/src/scripts/activity-labels/corpus.cjs +0 -473
  707. package/src/scripts/activity-labels/report.cjs +0 -203
  708. package/src/scripts/activity-labels/rescore.cjs +0 -102
  709. package/src/scripts/activity-labels/run.ts +0 -705
  710. package/src/scripts/activity-labels/variants.ts +0 -71
  711. package/src/scripts/ant_web_search.ts +0 -159
  712. package/src/scripts/ant_web_search_edge_case.ts +0 -163
  713. package/src/scripts/ant_web_search_error_edge_case.ts +0 -149
  714. package/src/scripts/args.ts +0 -48
  715. package/src/scripts/bedrock-cache-debug.ts +0 -250
  716. package/src/scripts/bedrock-content-aggregation-test.ts +0 -266
  717. package/src/scripts/bedrock-merge-test.ts +0 -107
  718. package/src/scripts/bedrock-parallel-tools-test.ts +0 -204
  719. package/src/scripts/bench-prompt-cache.ts +0 -479
  720. package/src/scripts/caching.ts +0 -132
  721. package/src/scripts/cli.ts +0 -172
  722. package/src/scripts/cli2.ts +0 -133
  723. package/src/scripts/cli3.ts +0 -184
  724. package/src/scripts/cli4.ts +0 -191
  725. package/src/scripts/cli5.ts +0 -191
  726. package/src/scripts/code_exec.ts +0 -214
  727. package/src/scripts/code_exec_files.ts +0 -237
  728. package/src/scripts/code_exec_multi_session.ts +0 -237
  729. package/src/scripts/code_exec_ptc.ts +0 -335
  730. package/src/scripts/code_exec_session.ts +0 -283
  731. package/src/scripts/code_exec_simple.ts +0 -148
  732. package/src/scripts/compare_pi_vs_ours.ts +0 -1259
  733. package/src/scripts/content.ts +0 -139
  734. package/src/scripts/context-overflow-probe.ts +0 -997
  735. package/src/scripts/empty_input.ts +0 -137
  736. package/src/scripts/handoff-test.ts +0 -134
  737. package/src/scripts/local_engine.ts +0 -166
  738. package/src/scripts/local_engine_checkpointer.ts +0 -205
  739. package/src/scripts/local_engine_compile.ts +0 -263
  740. package/src/scripts/local_engine_hooks.ts +0 -226
  741. package/src/scripts/local_engine_image.ts +0 -201
  742. package/src/scripts/local_engine_ptc.ts +0 -151
  743. package/src/scripts/local_engine_workspace.ts +0 -258
  744. package/src/scripts/memory.ts +0 -107
  745. package/src/scripts/multi-agent-chain.ts +0 -332
  746. package/src/scripts/multi-agent-conditional.ts +0 -222
  747. package/src/scripts/multi-agent-document-review-chain.ts +0 -198
  748. package/src/scripts/multi-agent-hybrid-flow.ts +0 -311
  749. package/src/scripts/multi-agent-parallel-start.ts +0 -265
  750. package/src/scripts/multi-agent-parallel.ts +0 -395
  751. package/src/scripts/multi-agent-sequence.ts +0 -217
  752. package/src/scripts/multi-agent-subagent.ts +0 -246
  753. package/src/scripts/multi-agent-supervisor.ts +0 -366
  754. package/src/scripts/multi-agent-test.ts +0 -187
  755. package/src/scripts/openrouter_prompt_cache_live.ts +0 -310
  756. package/src/scripts/parallel-asymmetric-tools-test.ts +0 -275
  757. package/src/scripts/parallel-full-metadata-test.ts +0 -241
  758. package/src/scripts/parallel-tools-test.ts +0 -341
  759. package/src/scripts/preempt-probe.ts +0 -330
  760. package/src/scripts/preempt-scenarios.ts +0 -388
  761. package/src/scripts/programmatic_exec.ts +0 -387
  762. package/src/scripts/programmatic_exec_agent.ts +0 -232
  763. package/src/scripts/search.ts +0 -147
  764. package/src/scripts/sequential-full-metadata-test.ts +0 -198
  765. package/src/scripts/session_live.ts +0 -548
  766. package/src/scripts/simple.ts +0 -226
  767. package/src/scripts/single-agent-metadata-test.ts +0 -196
  768. package/src/scripts/stream.ts +0 -141
  769. package/src/scripts/subagent-configurable-inheritance.ts +0 -252
  770. package/src/scripts/subagent-event-driven-debug.ts +0 -190
  771. package/src/scripts/subagent-tools-debug.ts +0 -160
  772. package/src/scripts/subagent-usage-sink.ts +0 -176
  773. package/src/scripts/summarization-recency.ts +0 -462
  774. package/src/scripts/test-custom-prompt-key.ts +0 -145
  775. package/src/scripts/test-handoff-input.ts +0 -170
  776. package/src/scripts/test-handoff-preamble.ts +0 -278
  777. package/src/scripts/test-handoff-steering.ts +0 -430
  778. package/src/scripts/test-multi-agent-list-handoff.ts +0 -418
  779. package/src/scripts/test-parallel-agent-labeling.ts +0 -327
  780. package/src/scripts/test-parallel-handoffs.ts +0 -292
  781. package/src/scripts/test-thinking-handoff-bedrock.ts +0 -154
  782. package/src/scripts/test-thinking-handoff.ts +0 -156
  783. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +0 -166
  784. package/src/scripts/test-tool-before-handoff-role-order.ts +0 -276
  785. package/src/scripts/test-tools-before-handoff.ts +0 -222
  786. package/src/scripts/test_code_api.ts +0 -354
  787. package/src/scripts/thinking-bedrock.ts +0 -160
  788. package/src/scripts/thinking-vertexai.ts +0 -168
  789. package/src/scripts/thinking.ts +0 -172
  790. package/src/scripts/tool_search.ts +0 -153
  791. package/src/scripts/tools.ts +0 -163
  792. package/src/session/__tests__/JsonlSessionStore.test.ts +0 -1463
  793. package/src/session/__tests__/handlers.test.ts +0 -161
  794. package/src/specs/activity-label-observability.live.test.ts +0 -262
  795. package/src/specs/activity-label-observability.test.ts +0 -167
  796. package/src/specs/activity-label-prompt.test.ts +0 -359
  797. package/src/specs/activity-label-trace-seed.test.ts +0 -47
  798. package/src/specs/activity-phase-label.test.ts +0 -306
  799. package/src/specs/agent-handoffs.live.test.ts +0 -140
  800. package/src/specs/agent-handoffs.test.ts +0 -2465
  801. package/src/specs/anthropic.simple.test.ts +0 -453
  802. package/src/specs/ask-user-question-batch.test.ts +0 -289
  803. package/src/specs/ask-user-questions.live.test.ts +0 -185
  804. package/src/specs/ask-user-questions.test.ts +0 -293
  805. package/src/specs/azure.simple.test.ts +0 -502
  806. package/src/specs/bedrock-toolless.live.test.ts +0 -123
  807. package/src/specs/bedrock-truncation.live.test.ts +0 -191
  808. package/src/specs/cache.simple.test.ts +0 -416
  809. package/src/specs/context-accuracy.live.test.ts +0 -409
  810. package/src/specs/context-overflow-recovery.live.test.ts +0 -213
  811. package/src/specs/context-usage-event.test.ts +0 -117
  812. package/src/specs/context-usage.live.test.ts +0 -297
  813. package/src/specs/custom-event-await.test.ts +0 -304
  814. package/src/specs/deepseek.simple.test.ts +0 -290
  815. package/src/specs/deterministic-trace-id.test.ts +0 -43
  816. package/src/specs/discovered-tools.test.ts +0 -217
  817. package/src/specs/durability-checkpoint.integration.test.ts +0 -243
  818. package/src/specs/graph-subagent.live.test.ts +0 -242
  819. package/src/specs/graph-subagent.test.ts +0 -322
  820. package/src/specs/handoffCue.test.ts +0 -165
  821. package/src/specs/langfuse-callbacks.test.ts +0 -1578
  822. package/src/specs/langfuse-config.test.ts +0 -247
  823. package/src/specs/langfuse-instrumentation.test.ts +0 -393
  824. package/src/specs/langfuse-metadata.test.ts +0 -245
  825. package/src/specs/langfuse-routing.integration.test.ts +0 -844
  826. package/src/specs/langfuse-runtime-context.test.ts +0 -92
  827. package/src/specs/langfuse-span-registry.test.ts +0 -87
  828. package/src/specs/langfuse-tool-output-tracing.test.ts +0 -1858
  829. package/src/specs/langfuse-trace-shaping.test.ts +0 -591
  830. package/src/specs/moonshot.simple.test.ts +0 -367
  831. package/src/specs/multi-agent-summarization.test.ts +0 -396
  832. package/src/specs/openai.simple.test.ts +0 -315
  833. package/src/specs/openrouter.simple.test.ts +0 -275
  834. package/src/specs/preemptSeal.test.ts +0 -678
  835. package/src/specs/prune.test.ts +0 -3741
  836. package/src/specs/reasoning.test.ts +0 -201
  837. package/src/specs/run-step-timestamps.test.ts +0 -414
  838. package/src/specs/spec.utils.ts +0 -15
  839. package/src/specs/subagent.test.ts +0 -864
  840. package/src/specs/summarization-unit.test.ts +0 -973
  841. package/src/specs/summarization.test.ts +0 -3823
  842. package/src/specs/summarize-prune.test.ts +0 -376
  843. package/src/specs/thinking-handoff.test.ts +0 -621
  844. package/src/specs/thinking-prune.test.ts +0 -827
  845. package/src/specs/token-accounting-e2e.test.ts +0 -1034
  846. package/src/specs/token-accounting-pipeline.test.ts +0 -1008
  847. package/src/specs/token-distribution-edge-case.test.ts +0 -315
  848. package/src/specs/token-memoization.test.ts +0 -40
  849. package/src/specs/tokens.test.ts +0 -1000
  850. package/src/specs/tool-error-resume.test.ts +0 -194
  851. package/src/specs/tool-error.test.ts +0 -198
  852. package/src/specs/vllm-reasoning-toolcalls.test.ts +0 -340
  853. package/src/stream.dispatch.test.ts +0 -63
  854. package/src/stream.test.ts +0 -144
  855. package/src/summarization/__tests__/aggregator.test.ts +0 -236
  856. package/src/summarization/__tests__/node.test.ts +0 -1996
  857. package/src/summarization/__tests__/trigger.test.ts +0 -149
  858. package/src/summarization/chunkHandler.test.ts +0 -196
  859. package/src/test/mockTools.ts +0 -386
  860. package/src/tools/Calculator.test.ts +0 -278
  861. package/src/tools/__tests__/BashExecutor.test.ts +0 -108
  862. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +0 -939
  863. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +0 -858
  864. package/src/tools/__tests__/CodeExecutor.stateful.test.ts +0 -124
  865. package/src/tools/__tests__/LocalExecutionRoots.test.ts +0 -8
  866. package/src/tools/__tests__/LocalExecutionTools.test.ts +0 -2733
  867. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.ts +0 -318
  868. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +0 -1557
  869. package/src/tools/__tests__/ReadFile.test.ts +0 -44
  870. package/src/tools/__tests__/SkillTool.test.ts +0 -442
  871. package/src/tools/__tests__/SubagentExecutor.test.ts +0 -3728
  872. package/src/tools/__tests__/SubagentReplay.test.ts +0 -329
  873. package/src/tools/__tests__/SubagentTool.test.ts +0 -149
  874. package/src/tools/__tests__/ToolNode.breakerSignal.test.ts +0 -595
  875. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +0 -1191
  876. package/src/tools/__tests__/ToolNode.invalidToolCalls.test.ts +0 -757
  877. package/src/tools/__tests__/ToolNode.langfuse.test.ts +0 -57
  878. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +0 -736
  879. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +0 -1710
  880. package/src/tools/__tests__/ToolNode.runtimeState.test.ts +0 -120
  881. package/src/tools/__tests__/ToolNode.session.test.ts +0 -1352
  882. package/src/tools/__tests__/ToolNode.streamLimits.test.ts +0 -69
  883. package/src/tools/__tests__/ToolSearch.integration.test.ts +0 -161
  884. package/src/tools/__tests__/ToolSearch.test.ts +0 -1227
  885. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +0 -561
  886. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +0 -980
  887. package/src/tools/__tests__/directToolHooks.test.ts +0 -700
  888. package/src/tools/__tests__/eagerEventExecution.session.test.ts +0 -92
  889. package/src/tools/__tests__/handlers.test.ts +0 -997
  890. package/src/tools/__tests__/hitl.test.ts +0 -4663
  891. package/src/tools/__tests__/intentArg.test.ts +0 -357
  892. package/src/tools/__tests__/intentCoverage.test.ts +0 -139
  893. package/src/tools/__tests__/localToolNames.test.ts +0 -75
  894. package/src/tools/__tests__/skillCatalog.test.ts +0 -161
  895. package/src/tools/__tests__/subagentHooks.test.ts +0 -1651
  896. package/src/tools/__tests__/toolOutputReferences.test.ts +0 -515
  897. package/src/tools/__tests__/workspaceSeam.test.ts +0 -147
  898. package/src/tools/local/__tests__/FileCheckpointer.test.ts +0 -162
  899. package/src/tools/local/__tests__/editStrategies.test.ts +0 -134
  900. package/src/tools/search/content.test.ts +0 -173
  901. package/src/tools/search/crw.test.ts +0 -836
  902. package/src/tools/search/format.test.ts +0 -242
  903. package/src/tools/search/http-agent.test.ts +0 -133
  904. package/src/tools/search/jina-reranker.test.ts +0 -306
  905. package/src/tools/search/keenable-scraper.test.ts +0 -153
  906. package/src/tools/search/keenable.test.ts +0 -183
  907. package/src/tools/search/outcome.test.ts +0 -90
  908. package/src/tools/search/output.md +0 -2775
  909. package/src/tools/search/rag-api-reranker.test.ts +0 -891
  910. package/src/tools/search/source-processing.test.ts +0 -516
  911. package/src/tools/search/tavily.test.ts +0 -965
  912. package/src/tools/search/test.html +0 -884
  913. package/src/tools/search/test.md +0 -643
  914. package/src/tools/subagent/__tests__/SubagentExecutionRegistry.test.ts +0 -637
  915. package/src/tools/subagent/__tests__/SubagentExecutor.lazy.test.ts +0 -3054
  916. package/src/tools/subagent/__tests__/childGraphConfig.test.ts +0 -521
  917. package/src/utils/__tests__/apportion.test.ts +0 -32
  918. package/src/utils/__tests__/errors.test.ts +0 -270
  919. package/src/utils/__tests__/fixtures/contextOverflowSignatures.ts +0 -336
  920. package/src/utils/__tests__/redactSecrets.test.ts +0 -56
  921. package/src/utils/__tests__/truncation.test.ts +0 -66
  922. package/src/utils/llm.test.ts +0 -18
  923. package/src/utils/proxy.test.ts +0 -176
  924. package/src/utils/toolContent.test.ts +0 -1432
@@ -1 +1 @@
1
- {"version":3,"file":"node.mjs","names":["chunkAny"],"sources":["../../../src/summarization/node.ts"],"sourcesContent":["import {\n AIMessage,\n ToolMessage,\n HumanMessage,\n SystemMessage,\n} from '@langchain/core/messages';\nimport type { UsageMetadata, BaseMessage } from '@langchain/core/messages';\nimport type { RunnableConfig } from '@langchain/core/runnables';\nimport type { StreamLimitState } from '@/llm/streamLimits';\nimport type { AgentContext } from '@/agents/AgentContext';\nimport type { HookRegistry } from '@/hooks';\nimport type { OnChunk } from '@/llm/invoke';\nimport type * as t from '@/types';\nimport {\n cloneToolMessageWithContent,\n compactToolContent,\n isComputerCallOutputMessage,\n serializeToolContentBounded,\n} from '@/utils/toolContent';\nimport {\n enforceStreamLimitsForWireChunk,\n StreamLimitExceededError,\n STREAM_LIMIT_EPOCH_KEY,\n} from '@/llm/streamLimits';\nimport {\n addTailCacheControl,\n resolvePromptCacheTtl,\n type PromptCacheTtl,\n} from '@/messages/cache';\nimport {\n DEFAULT_RETAIN_RECENT_TURNS,\n splitAtRecencyBoundary,\n} from '@/messages/recency';\nimport {\n Constants,\n ContentTypes,\n GraphEvents,\n StepTypes,\n Providers,\n} from '@/common';\nimport { safeDispatchCustomEvent, emitAgentLog } from '@/utils/events';\nimport { attemptInvoke, tryFallbackProviders } from '@/llm/invoke';\nimport { calculateMaxToolResultChars } from '@/utils/truncation';\nimport { createRemoveAllMessage } from '@/messages/reducer';\nimport { getMaxOutputTokensKey } from '@/llm/request';\nimport { initializeModel } from '@/llm/init';\nimport { getChunkContent } from '@/stream';\nimport { executeHooks } from '@/hooks';\n\nconst SUMMARIZATION_PARAM_KEYS = new Set(['maxSummaryTokens']);\n\n/**\n * Default number of recent user-led turns preserved verbatim during\n * compaction. A turn begins at a HumanMessage and includes every\n * following AIMessage and ToolMessage up to the next HumanMessage.\n * The most recent turn is always retained regardless of this value;\n * the default of `2` additionally keeps the prior exchange so the\n * model has fresh context on what just happened. Setting\n * `retainRecent.turns` to `0` reverts to the legacy \"summarize every\n * message\" behavior.\n */\n/**\n * Token overhead of the XML wrapper + instruction text added around the\n * summary at injection time in AgentContext.buildSystemRunnable:\n * `<summary>\\n${text}\\n</summary>\\n\\nYour context window was compacted...`\n * ~33 tokens on Anthropic, ~24-27 on OpenAI. Using 33 as a safe ceiling.\n */\nconst SUMMARY_WRAPPER_OVERHEAD_TOKENS = 33;\n\n/** Structured checkpoint prompt for fresh summarization (no prior summary). */\nexport const DEFAULT_SUMMARIZATION_PROMPT = `Hold on, before you continue I need you to write me a checkpoint of everything so far. Your context window is filling up and this checkpoint replaces the messages above, so capture everything you need to pick right back up.\n\nDon't second-guess or fact-check anything you did, your tool results reflect exactly what happened. If a tool result appears truncated, that's just a display artifact from context management: the tool executed fully. Just record what you did and what you observed. Only the checkpoint, don't respond to me or continue the conversation.\n\n## Checkpoint\n\n## Goal\nWhat I asked you to do and any sub-goals you identified.\n\n## Constraints & Preferences\nAny rules, preferences, or configuration I established.\n\n## Progress\n### Done\n- What you completed and the outcomes\n\n### In Progress\n- What you're currently working on\n\n## Key Decisions\nDecisions you made and why.\n\n## Next Steps\nConcrete task actions remaining, in priority order.\n\n## Critical Context\nExact identifiers, names, error messages, URLs, and details you need to preserve verbatim.\n\nRules:\n- Record what you did and observed, don't judge or re-evaluate it\n- For each tool call: the tool name, key inputs, and the outcome\n- Preserve exact identifiers, names, errors, and references verbatim\n- Short declarative sentences\n- Skip empty sections`;\n\n/** Prompt for re-compaction when a prior summary exists. */\nexport const DEFAULT_UPDATE_SUMMARIZATION_PROMPT = `Hold on again, update your checkpoint. Merge the new messages into your existing checkpoint and give me a single consolidated replacement.\n\nKeep it roughly the same length as your last checkpoint. Compress older details to make room for what's new, don't just append. Give recent actions more detail, compress older items to one-liners.\n\nDon't fact-check or second-guess anything, your tool results are ground truth. If a tool result appears truncated, that's just a display artifact: the tool executed fully. Only the checkpoint, don't respond to me or continue the conversation.\n\nRules:\n- Merge new progress into existing sections, don't duplicate headers\n- Compress older completed items into one-line entries\n- Move items from \"In Progress\" to \"Done\" when you completed them\n- Update \"Next Steps\" to reflect current task priorities.\n- For each new tool call: the tool name, key inputs, and the outcome\n- Preserve exact identifiers, names, errors, and references verbatim\n- Skip empty sections`;\n\nfunction separateParameters(parameters: Record<string, unknown>): {\n llmParams: Record<string, unknown>;\n maxSummaryTokens?: number;\n} {\n const llmParams: Record<string, unknown> = {};\n let maxSummaryTokens: number | undefined;\n\n for (const [key, value] of Object.entries(parameters)) {\n if (SUMMARIZATION_PARAM_KEYS.has(key)) {\n if (\n key === 'maxSummaryTokens' &&\n typeof value === 'number' &&\n value > 0\n ) {\n maxSummaryTokens = value;\n }\n } else {\n llmParams[key] = value;\n }\n }\n\n return { llmParams, maxSummaryTokens };\n}\n\n/**\n * Generates a structural metadata summary without making an LLM call.\n * Used as a last-resort fallback when all summarization attempts fail.\n * Preserves tool names and message counts so the agent retains basic context.\n */\nfunction generateMetadataStub(messages: BaseMessage[]): string {\n const counts: Record<string, number> = {};\n const toolNames = new Set<string>();\n\n for (const msg of messages) {\n const role = msg.getType();\n counts[role] = (counts[role] ?? 0) + 1;\n\n if (role === 'tool' && msg.name != null && msg.name !== '') {\n toolNames.add(msg.name);\n }\n\n if (\n role === 'ai' &&\n msg instanceof AIMessage &&\n msg.tool_calls &&\n msg.tool_calls.length > 0\n ) {\n for (const tc of msg.tool_calls) {\n toolNames.add(tc.name);\n }\n }\n }\n\n const countParts = Object.entries(counts)\n .map(([role, count]) => `${count} ${role}`)\n .join(', ');\n\n const lines = [\n `[Metadata summary: ${messages.length} messages (${countParts})]`,\n ];\n\n if (toolNames.size > 0) {\n lines.push(`[Tools used: ${Array.from(toolNames).join(', ')}]`);\n }\n\n return lines.join('\\n');\n}\n\n/** Maximum number of tool failures to include in the enrichment section. */\nconst MAX_TOOL_FAILURES = 8;\n/** Maximum chars per failure summary line. */\nconst MAX_TOOL_FAILURE_CHARS = 240;\n\n/**\n * Extracts failed tool results from messages and formats them as a structured\n * section. LLMs often omit specific failure details (exit codes, error messages)\n * from their summaries, this mechanical enrichment guarantees they survive.\n */\nfunction extractToolFailuresSection(messages: BaseMessage[]): string {\n const failures: Array<{ toolName: string; summary: string }> = [];\n const seen = new Set<string>();\n\n for (const msg of messages) {\n if (msg.getType() !== 'tool') {\n continue;\n }\n const toolMsg = msg as ToolMessage;\n if (toolMsg.status !== 'error') {\n continue;\n }\n // Deduplicate by tool_call_id\n const callId = toolMsg.tool_call_id;\n if (callId && seen.has(callId)) {\n continue;\n }\n if (callId) {\n seen.add(callId);\n }\n\n const toolName = toolMsg.name ?? 'tool';\n const content = serializeToolContentBounded(\n toolMsg.content,\n MAX_TOOL_FAILURE_CHARS * 4\n );\n const normalized = content.replace(/\\s+/g, ' ').trim();\n const summary =\n normalized.length > MAX_TOOL_FAILURE_CHARS\n ? `${normalized.slice(0, MAX_TOOL_FAILURE_CHARS - 3)}...`\n : normalized;\n\n failures.push({ toolName, summary });\n }\n\n if (failures.length === 0) {\n return '';\n }\n\n const lines = failures\n .slice(0, MAX_TOOL_FAILURES)\n .map((f) => `- ${f.toolName}: ${f.summary}`);\n if (failures.length > MAX_TOOL_FAILURES) {\n lines.push(`- ...and ${failures.length - MAX_TOOL_FAILURES} more`);\n }\n\n return `\\n\\n## Tool Failures\\n${lines.join('\\n')}`;\n}\n\n/**\n * Appends mechanical enrichment sections to an LLM-generated summary.\n * Tool failures are appended verbatim because LLMs often omit specific\n * error details from their summaries.\n */\nfunction enrichSummary(summaryText: string, messages: BaseMessage[]): string {\n return summaryText + extractToolFailuresSection(messages);\n}\n\n/**\n * Restores pre-masking tool content onto the messages array using\n * `pendingOriginalToolContent` stored on AgentContext. Only allocates\n * a new array when there are entries to restore; otherwise returns the\n * input reference unchanged.\n */\nfunction restoreOriginalToolContent(\n messages: BaseMessage[],\n originalToolContent: Map<number, string> | undefined,\n maxContextTokens?: number\n): BaseMessage[] {\n if (originalToolContent == null || originalToolContent.size === 0) {\n return messages;\n }\n\n const restorable: Array<{\n index: number;\n message: ToolMessage;\n content: string;\n }> = [];\n for (const [index, content] of originalToolContent) {\n const message = messages[index];\n if (\n message instanceof ToolMessage &&\n !isComputerCallOutputMessage(message)\n ) {\n restorable.push({ index, message, content });\n }\n }\n if (restorable.length === 0) {\n return messages;\n }\n\n /**\n * Restored originals improve checkpoint quality, but they still feed a\n * provider call. Share one tool-result budget across every restoration so\n * several previously masked results cannot overflow the summarizer.\n */\n let remainingChars = calculateMaxToolResultChars(maxContextTokens);\n const restored = [...messages];\n for (let i = 0; i < restorable.length; i++) {\n const { index, message, content } = restorable[i];\n const maxChars = Math.floor(remainingChars / (restorable.length - i));\n const compacted = compactToolContent(content, maxChars).content;\n restored[index] = cloneToolMessageWithContent(message, compacted);\n remainingChars -= serializeToolContentBounded(compacted, maxChars).length;\n }\n return restored;\n}\n\n// ---------------------------------------------------------------------------\n// Extracted helpers for createSummarizeNode\n// ---------------------------------------------------------------------------\n\ninterface SummarizationClientConfig {\n provider: string;\n modelName?: string;\n clientOptions: Record<string, unknown>;\n effectiveMaxSummaryTokens?: number;\n promptText: string;\n updatePromptText: string;\n}\n\n/** Assembles the summarization model's client options from agent and config. */\nfunction buildSummarizationClientConfig(\n agentContext: AgentContext,\n summarizationConfig?: t.SummarizationConfig\n): SummarizationClientConfig {\n const provider = (summarizationConfig?.provider ??\n agentContext.provider) as string;\n const modelName = summarizationConfig?.model;\n const parameters = summarizationConfig?.parameters ?? {};\n const promptText =\n summarizationConfig?.prompt ?? DEFAULT_SUMMARIZATION_PROMPT;\n const updatePromptText =\n summarizationConfig?.updatePrompt ?? DEFAULT_UPDATE_SUMMARIZATION_PROMPT;\n\n const { llmParams, maxSummaryTokens: paramMaxSummaryTokens } =\n separateParameters(parameters);\n\n const isSelfSummarize = provider === (agentContext.provider as string);\n const baseOptions =\n isSelfSummarize && agentContext.clientOptions\n ? { ...agentContext.clientOptions }\n : {};\n\n const clientOptions: Record<string, unknown> = {\n ...baseOptions,\n ...llmParams,\n };\n\n if (modelName != null && modelName !== '') {\n clientOptions.model = modelName;\n clientOptions.modelName = modelName;\n }\n\n const effectiveMaxSummaryTokens =\n paramMaxSummaryTokens ?? summarizationConfig?.maxSummaryTokens;\n\n if (effectiveMaxSummaryTokens != null) {\n clientOptions[getMaxOutputTokensKey(provider)] = effectiveMaxSummaryTokens;\n }\n\n return {\n provider,\n modelName,\n clientOptions,\n effectiveMaxSummaryTokens,\n promptText,\n updatePromptText,\n };\n}\n\n/** Computes the token count for a summary, preferring provider output tokens when available. */\nfunction computeSummaryTokenCount(\n summaryText: string,\n summaryUsage: Partial<UsageMetadata> | undefined,\n tokenCounter?: (message: BaseMessage) => number\n): number {\n const providerOutputTokens = Number(summaryUsage?.output_tokens) || 0;\n if (providerOutputTokens > 0) {\n return providerOutputTokens + SUMMARY_WRAPPER_OVERHEAD_TOKENS;\n }\n if (tokenCounter) {\n return (\n tokenCounter(new SystemMessage(summaryText)) +\n SUMMARY_WRAPPER_OVERHEAD_TOKENS\n );\n }\n return 0;\n}\n\n/**\n * Names the first retained message so the summary declares its own extent\n * rather than leaving the next run to infer coverage from where the block\n * happens to sit.\n *\n * Anchored to the retained side, not the covered side. One source message can\n * expand into several messages — a steer splits an assistant entry into\n * pre-steer, steer, and post-steer entries sharing its ID — and the recency\n * split lands on any human-type message, including the steer. Naming the last\n * *covered* message would then name a half-covered ID with no correct reading;\n * naming the first *retained* message makes that same message the anchor, so it\n * survives whole and everything before it is unambiguously covered.\n *\n * Synthetic entries are skipped, because they can sit *before* a resolvable\n * one. `formatAgentMessages` reconstructs skill bodies inside its payload loop\n * (see the `pendingSkillNames` block) and keeps processing payload entries\n * afterwards, so an unstamped skill body — which `messagesStateReducer` then\n * gives a UUID no payload entry carries — is followed by stamped messages.\n * Anchoring on the UUID would look resolvable at write time and degrade to\n * positional trimming on read, dropping the retained tail. Skipping it reaches\n * the stamped message behind it.\n *\n * `convertInjectedMessages` records `injected` on everything it builds, which is\n * what makes this decidable: `isMeta` and `source` are both optional on\n * `InjectedMessage`, so a bare entry carries no marker of its own, and an\n * injected `source: 'steer'` is otherwise indistinguishable from a replayed one.\n * The remaining `isMeta`/`source` checks cover the constructors that build\n * synthetic entries directly instead of going through that funnel — hook context\n * in `ToolNode` and `StandardGraph`, handoff cues, reconstructed skill bodies.\n *\n * `steer` is exempt from the `source` check because a replayed steer *is*\n * correlated with its payload entry; rejecting every marked `source` once\n * dropped exactly those retained steers. Injected steers are still caught, by\n * `injected`.\n *\n * Known limitation: a payload entry that omits `messageId` is never stamped, so\n * the reducer's UUID is recorded and cannot resolve on the next run. There is no\n * write-time fix — such an entry has no stable ID to name in the next payload\n * either — and the reader's positional fallback is what `main` already does, so\n * the anchor degrades rather than misleads.\n */\nfunction isSyntheticContext(message: BaseMessage): boolean {\n const { additional_kwargs: kwargs } = message;\n if (kwargs.injected === true || kwargs.isMeta === true) {\n return true;\n }\n return kwargs.source != null && kwargs.source !== 'steer';\n}\n\nfunction resolveSummaryCoverage(\n messagesToRetain: BaseMessage[]\n): t.SummaryCoverage | undefined {\n for (let i = 0; i < messagesToRetain.length; i++) {\n const message = messagesToRetain[i];\n if (isSyntheticContext(message)) {\n continue;\n }\n const sourceMessageId = message.additional_kwargs.sourceMessageId;\n const sourceId =\n typeof sourceMessageId === 'string' ? sourceMessageId.trim() : '';\n const id = sourceId !== '' ? sourceId : message.id?.trim();\n if (id != null && id !== '') {\n return { retainedFromMessageId: id };\n }\n }\n return undefined;\n}\n\n/** Constructs the SummaryContentBlock persisted in the run step and dispatched to events. */\nfunction buildSummaryBlock(params: {\n summaryText: string;\n tokenCount: number;\n coverage?: t.SummaryCoverage;\n stepId: string;\n stepIndex: number;\n modelName?: string;\n provider: string;\n summaryVersion: number;\n}): t.SummaryContentBlock {\n return {\n type: ContentTypes.SUMMARY,\n content: [\n {\n type: ContentTypes.TEXT,\n text: params.summaryText,\n } as t.MessageContentComplex,\n ],\n tokenCount: params.tokenCount,\n ...(params.coverage != null ? { coverage: params.coverage } : {}),\n summaryVersion: params.summaryVersion,\n boundary: {\n messageId: params.stepId,\n contentIndex: params.stepIndex,\n },\n model: params.modelName,\n provider: params.provider,\n createdAt: new Date().toISOString(),\n };\n}\n\ntype LogFn = (\n level: 'debug' | 'info' | 'warn' | 'error',\n message: string,\n data?: Record<string, unknown>\n) => void;\n\n/**\n * Extracts an HTTP status code from a thrown LLM-provider error. Returns\n * `undefined` for non-object values (including `null` or `undefined`, both\n * valid `throw` targets in JS) so callers never dereference a nullish\n * value.\n */\nfunction extractHttpStatus(err: unknown): number | undefined {\n if (err == null || typeof err !== 'object') {\n return undefined;\n }\n const errRecord = err as Record<string, unknown>;\n const direct = errRecord.status;\n if (typeof direct === 'number') {\n return direct;\n }\n const statusCode = errRecord.statusCode;\n if (typeof statusCode === 'number') {\n return statusCode;\n }\n const response = errRecord.response;\n if (response != null && typeof response === 'object') {\n const nested = (response as Record<string, unknown>).status;\n if (typeof nested === 'number') {\n return nested;\n }\n }\n return undefined;\n}\n\n/**\n * Formats a provider-level error for logging. Returns both a human-readable\n * suffix (safe to include in the message string so it survives any host-side\n * formatter) and a structured metadata bag for rich log backends.\n */\nfunction describeProviderError(\n err: unknown,\n provider: string,\n modelName?: string\n): { suffix: string; data: Record<string, unknown> } {\n const providerLabel = `${provider}/${modelName ?? '(no-model)'}`;\n const errMsg = err instanceof Error ? err.message : String(err);\n\n const data: Record<string, unknown> = {\n provider,\n model: modelName,\n };\n if (err instanceof Error) {\n data.errorName = err.name;\n data.errorStack = err.stack;\n }\n\n const status = extractHttpStatus(err);\n const statusSuffix = status != null ? ` (HTTP ${status})` : '';\n if (status != null) {\n data.status = status;\n }\n\n return {\n suffix: `[${providerLabel}]${statusSuffix}: ${errMsg}`,\n data,\n };\n}\n\n/**\n * Formats an exhausted-fallback error. `tryFallbackProviders` throws the\n * last fallback provider's error, which may be from any of the configured\n * fallbacks — not the primary — so we label the log with the list of\n * fallback providers attempted rather than mis-attributing to the primary.\n *\n * Entries in `fallbacks` are normally strongly typed, but we defend against\n * malformed runtime config (null/undefined entries, missing `provider`\n * field) so a recoverable summarization failure is never promoted to an\n * uncaught exception from inside the logging path.\n */\nfunction describeFallbackError(\n err: unknown,\n fallbacks: unknown\n): { suffix: string; data: Record<string, unknown> } {\n const errMsg = err instanceof Error ? err.message : String(err);\n const list: ReadonlyArray<unknown> = Array.isArray(fallbacks)\n ? fallbacks\n : [];\n const providerNames = list\n .map((f) => {\n if (f == null || typeof f !== 'object') {\n return undefined;\n }\n const raw = (f as { provider?: unknown }).provider;\n return raw != null ? String(raw) : undefined;\n })\n .filter((p): p is string => typeof p === 'string');\n const label =\n providerNames.length > 0\n ? `fallbacks=[${providerNames.join(',')}]`\n : 'no-fallbacks';\n\n const data: Record<string, unknown> = {\n fallbackProviders: providerNames,\n fallbackCount: list.length,\n };\n if (err instanceof Error) {\n data.errorName = err.name;\n data.errorStack = err.stack;\n }\n const status = extractHttpStatus(err);\n const statusSuffix = status != null ? ` (HTTP ${status})` : '';\n if (status != null) {\n data.status = status;\n }\n\n return {\n suffix: `[${label}]${statusSuffix}: ${errMsg}`,\n data,\n };\n}\n\n/**\n * Runs the summarization LLM call with primary + fallback providers,\n * falling back to a metadata stub when all calls fail.\n */\nasync function executeSummarizationWithFallback(params: {\n agentContext: AgentContext;\n messages: BaseMessage[];\n clientConfig: SummarizationClientConfig;\n summarizeConfig?: RunnableConfig;\n stepId: string;\n usePromptCache: boolean;\n log: LogFn;\n /** Carries the run's stream limits so the event cap covers summary streams. */\n graph?: StreamLimitState & { getBreakerSignal?: () => AbortSignal };\n}): Promise<{\n text: string;\n usage?: Partial<UsageMetadata>;\n /**\n * True when every model call failed and `text` is the generated metadata\n * stub rather than a real summary. Callers that would replace history with\n * this need to know it carries none of the original content.\n */\n usedMetadataStub?: boolean;\n}> {\n const {\n agentContext,\n messages,\n clientConfig,\n summarizeConfig,\n stepId,\n usePromptCache,\n log,\n graph,\n } = params;\n\n const priorSummaryText = agentContext.getSummaryText()?.trim() ?? '';\n\n let summaryText = '';\n let summaryUsage: Partial<UsageMetadata> | undefined;\n let usedMetadataStub = false;\n\n try {\n /**\n * Initialize inside the try so that a misconfigured provider\n * (e.g. an unrecognized summarization.provider) surfaces through the\n * `log('error', ...)` path below rather than bubbling up silently.\n */\n const summarizationModel = initializeModel({\n provider: clientConfig.provider as Providers,\n clientOptions: clientConfig.clientOptions as t.ClientOptions,\n tools: agentContext.getToolsForBinding(),\n }) as t.ChatModel;\n\n const result = await summarizeWithCacheHit({\n model: summarizationModel,\n messages,\n promptText: clientConfig.promptText,\n updatePromptText: clientConfig.updatePromptText,\n priorSummaryText,\n config: summarizeConfig,\n stepId,\n provider: clientConfig.provider as Providers,\n reasoningKey: agentContext.reasoningKey,\n graph,\n usePromptCache,\n promptCacheTtl:\n (clientConfig.provider as Providers) === Providers.ANTHROPIC ||\n (clientConfig.provider as Providers) === Providers.OPENROUTER\n ? resolvePromptCacheTtl(\n (\n clientConfig.clientOptions as {\n promptCacheTtl?: PromptCacheTtl;\n }\n ).promptCacheTtl\n )\n : undefined,\n log,\n });\n summaryText = result.text;\n summaryUsage = result.usage;\n } catch (primaryError) {\n const primaryDescribed = describeProviderError(\n primaryError,\n clientConfig.provider,\n clientConfig.modelName\n );\n log('error', `Summarization LLM call failed ${primaryDescribed.suffix}`, {\n ...primaryDescribed.data,\n messagesToRefineCount: messages.length,\n });\n\n /**\n * A tripped stream circuit breaker is a safety abort, not a\n * summarization failure to recover from: retrying on fallback providers\n * would spend more provider work after the limit fired, and degrading to\n * the metadata stub would let the run continue (and periodic compaction\n * commit the stub) despite the `StreamLimits` contract that a breach\n * rejects the run. Rethrown so the summarize node fails the run with\n * the actionable limit error, consistent with agent turns and subagents.\n */\n if (primaryError instanceof StreamLimitExceededError) {\n throw primaryError;\n }\n /** A parallel branch's trip aborts the composed summarization signal,\n * and a provider can surface that as a generic abort error; entering\n * fallback recovery or degrading to the metadata stub would continue\n * work after the run-wide safety abort. Checked on BOTH channels: the\n * graph's own breaker, and the composed config signal that carries a\n * parent run's trip into subagent child graphs. */\n {\n const trippedReason = findStreamLimitAbortReason(\n graph?.getBreakerSignal?.(),\n summarizeConfig?.signal\n );\n if (trippedReason != null) {\n throw trippedReason;\n }\n }\n\n const rawFallbacks = (\n clientConfig.clientOptions as unknown as t.LLMConfig | undefined\n )?.fallbacks;\n const fallbacks = Array.isArray(rawFallbacks) ? rawFallbacks : [];\n if (fallbacks.length > 0) {\n try {\n const onChunk = createSummarizationChunkHandler({\n stepId,\n config: traceConfig(summarizeConfig, 'cache_hit_compaction'),\n provider: clientConfig.provider as Providers,\n reasoningKey: agentContext.reasoningKey,\n graph,\n });\n const fbResult = await tryFallbackProviders({\n fallbacks,\n tools: agentContext.getToolsForBinding(),\n messages: [\n ...messages,\n new HumanMessage(\n buildSummarizationInstruction(\n clientConfig.promptText,\n clientConfig.updatePromptText,\n priorSummaryText\n )\n ),\n ],\n config: withBreakerSignal(\n traceConfig(summarizeConfig, 'cache_hit_compaction'),\n graph\n ),\n primaryError,\n onChunk,\n streamLimitState: graph,\n });\n const fbMsg = fbResult?.messages?.[0];\n if (fbMsg) {\n summaryText = extractResponseText(\n fbMsg as { content: string | object }\n );\n }\n } catch (fbErr) {\n if (fbErr instanceof StreamLimitExceededError) {\n throw fbErr;\n }\n const fbDescribed = describeFallbackError(fbErr, fallbacks);\n log('warn', `Fallback providers also failed ${fbDescribed.suffix}`, {\n ...fbDescribed.data,\n });\n }\n }\n if (!summaryText) {\n log(\n 'warn',\n `Summarization failed, falling back to metadata stub ${primaryDescribed.suffix}`,\n {\n ...primaryDescribed.data,\n messagesToRefineCount: messages.length,\n }\n );\n summaryText = generateMetadataStub(messages);\n usedMetadataStub = true;\n }\n }\n\n return { text: summaryText, usage: summaryUsage, usedMetadataStub };\n}\n\n/** Dispatches run step completion, ON_SUMMARIZE_COMPLETE, and rebuilds token map. */\nasync function dispatchCompletionEvents(params: {\n graph: CreateSummarizeNodeParams['graph'];\n runnableConfig?: RunnableConfig;\n stepId: string;\n summaryBlock: t.SummaryContentBlock;\n agentContext: AgentContext;\n runStep: t.RunStep;\n summaryUsage?: Partial<UsageMetadata>;\n agentId: string;\n /**\n * Number of messages preserved verbatim by the recency window after\n * compaction. Reported via the PostCompact hook payload so observers\n * (metrics, cleanup) see the true post-compaction message count\n * instead of always-zero.\n */\n messagesAfterCount: number;\n}): Promise<void> {\n const {\n graph,\n runnableConfig,\n stepId,\n summaryBlock,\n agentContext,\n runStep,\n summaryUsage,\n agentId,\n messagesAfterCount,\n } = params;\n\n runStep.summary = summaryBlock;\n if (summaryUsage) {\n runStep.usage = {\n prompt_tokens: Number(summaryUsage.input_tokens) || 0,\n completion_tokens: Number(summaryUsage.output_tokens) || 0,\n total_tokens:\n (Number(summaryUsage.input_tokens) || 0) +\n (Number(summaryUsage.output_tokens) || 0),\n };\n }\n\n await graph.dispatchRunStepCompleted(\n stepId,\n { type: 'summary', summary: summaryBlock } satisfies t.SummaryCompleted,\n runnableConfig\n );\n\n if (runnableConfig) {\n await safeDispatchCustomEvent(\n GraphEvents.ON_SUMMARIZE_COMPLETE,\n {\n id: stepId,\n agentId,\n summary: summaryBlock,\n } satisfies t.SummarizeCompleteEvent,\n runnableConfig\n );\n }\n\n const sessionId = graph.runId ?? '';\n if (graph.hookRegistry?.hasHookFor('PostCompact', sessionId) === true) {\n const threadId = (\n runnableConfig?.configurable as Record<string, unknown> | undefined\n )?.thread_id as string | undefined;\n const firstBlock = summaryBlock.content?.[0];\n const summaryText =\n firstBlock != null &&\n typeof firstBlock === 'object' &&\n 'text' in firstBlock &&\n typeof firstBlock.text === 'string'\n ? firstBlock.text\n : '';\n await executeHooks({\n registry: graph.hookRegistry,\n input: {\n hook_event_name: 'PostCompact',\n runId: sessionId,\n threadId,\n agentId,\n summary: summaryText,\n messagesAfterCount,\n },\n sessionId,\n }).catch(() => {\n /* PostCompact is observational — swallow errors */\n });\n }\n\n agentContext.rebuildTokenMapAfterSummarization({});\n}\n\n// ---------------------------------------------------------------------------\n// createSummarizeNode\n// ---------------------------------------------------------------------------\n\ninterface CreateSummarizeNodeParams {\n agentContext: AgentContext;\n graph: {\n contentData: t.RunStep[];\n contentIndexMap: Map<string, number>;\n config?: RunnableConfig;\n runId?: string;\n isMultiAgent: boolean;\n hookRegistry?: HookRegistry;\n dispatchRunStep: (\n runStep: t.RunStep,\n config?: RunnableConfig\n ) => Promise<void>;\n dispatchRunStepCompleted: (\n stepId: string,\n result: t.StepCompleted,\n config?: RunnableConfig\n ) => Promise<void>;\n /**\n * Terminal close for a summary step that ends without a completion —\n * an errored or empty summary would otherwise stay `in_progress` until\n * the run-end sweep reported it as `completed`.\n */\n closeRunStep?: (\n stepId: string,\n status: Exclude<t.RunStepStatus, 'in_progress'>,\n config?: RunnableConfig\n ) => Promise<void>;\n /** The run's shared breaker signal, composed into every summarization\n * model attempt so a sibling branch tripping a stream limit also\n * cancels in-flight summaries. */\n getBreakerSignal?: () => AbortSignal;\n /** The run's shared breaker controller. Preferred over the bare signal\n * accessor: the node captures it at entry so a breach detected by its\n * own chunk handler trips the run that STARTED the summarization. */\n getBreakerController?: () => AbortController;\n /** The controller's epoch, captured at entry and stamped into summary\n * attempt metadata so the wire consumer epoch-gates old-run summary\n * chunks like model-attempt chunks. */\n getBreakerEpoch?: () => number;\n } & StreamLimitState;\n generateStepId: (stepKey: string) => [string, number];\n}\n\n/** Composes the run's breaker signal (when the adapter provides one) into a\n * summarization attempt's config, so breaches in sibling branches cancel\n * summaries too. */\nfunction withBreakerSignal<T extends { signal?: AbortSignal }>(\n config: T | undefined,\n graph?: { getBreakerSignal?: () => AbortSignal }\n): T | undefined {\n const breakerSignal = graph?.getBreakerSignal?.();\n if (breakerSignal == null) {\n return config;\n }\n if (config == null) {\n return { signal: breakerSignal } as T;\n }\n const existing = config.signal;\n if (existing == null || existing === breakerSignal) {\n return { ...config, signal: breakerSignal };\n }\n return { ...config, signal: AbortSignal.any([existing, breakerSignal]) };\n}\n\n/** First stream-limit reason found on any of the given signals. Checked\n * alongside the graph's own breaker because a subagent child graph receives\n * a ROOT sibling's trip through its constructor/invocation signal — the\n * child's private breaker never fires for it. */\nfunction findStreamLimitAbortReason(\n ...signals: Array<AbortSignal | undefined>\n): StreamLimitExceededError | undefined {\n for (const signal of signals) {\n if (\n signal?.aborted === true &&\n signal.reason instanceof StreamLimitExceededError\n ) {\n return signal.reason;\n }\n }\n return undefined;\n}\n\nexport function createSummarizeNode({\n agentContext,\n graph: adapterGraph,\n generateStepId,\n}: CreateSummarizeNodeParams) {\n return async (\n state: {\n messages: BaseMessage[];\n summarizationRequest?: t.SummarizationNodeInput;\n },\n config?: RunnableConfig\n ): Promise<{ summarizationRequest: undefined; messages?: BaseMessage[] }> => {\n /** The breaker signal is captured at node ENTRY, before dispatchRunStep,\n * ON_SUMMARIZE_START, or PreCompact awaits: a sibling's trip plus a\n * prompt next run can reset the controller during one of those awaits,\n * and resolving the live accessor later would bind this summarization\n * to the fresh controller. `Object.create` freezes the signal while\n * DELEGATING every other adapter member — spreading would snapshot the\n * charge-credit accessor pair and detach it from graph resets. */\n const entryBreakerController = adapterGraph.getBreakerController?.();\n const entryBreakerSignal =\n entryBreakerController?.signal ?? adapterGraph.getBreakerSignal?.();\n const entryBreakerEpoch = adapterGraph.getBreakerEpoch?.();\n const graph =\n entryBreakerSignal == null\n ? adapterGraph\n : (Object.create(adapterGraph, {\n getBreakerSignal: { value: (): AbortSignal => entryBreakerSignal },\n ...(entryBreakerController != null && {\n getBreakerController: {\n value: (): AbortController => entryBreakerController,\n },\n }),\n }) as typeof adapterGraph);\n const request = state.summarizationRequest;\n if (request == null) {\n return { summarizationRequest: undefined };\n }\n /** Already-tripped-at-entry: a parallel sibling's breach failed the run\n * before this node was scheduled — via this graph's own breaker or, in\n * a subagent child graph, the parent trip on the invocation signal.\n * Rethrow before dispatching steps, hooks, or the model call — an\n * adapter that doesn't synchronously reject an aborted signal would\n * otherwise spend summarization provider work on a failed run. */\n const entryTripReason = findStreamLimitAbortReason(\n entryBreakerSignal,\n config?.signal\n );\n if (entryTripReason != null) {\n throw entryTripReason;\n }\n\n /**\n * Overflow recovery routes through this node purely to get back to the\n * agent node with a corrected budget, and deliberately spends no model\n * call on its first attempt: re-pruning under the raised context pressure\n * drives the pruner's tool-output compression and masking, which is\n * cheaper than a summary and cannot lose message content. Summarization\n * is also skipped outright when the caller never enabled it.\n */\n if (\n request.reason === 'overflow' &&\n (request.allowSummarization !== true ||\n agentContext.summarizationEnabled !== true)\n ) {\n emitAgentLog(\n config,\n 'debug',\n 'summarize',\n 'Overflow recovery re-prune — compressing tool output without a summarization call',\n {\n maxContextTokens: agentContext.maxContextTokens,\n summarizationEnabled: agentContext.summarizationEnabled === true,\n allowSummarization: request.allowSummarization === true,\n },\n { runId: graph.runId, agentId: request.agentId }\n );\n return { summarizationRequest: undefined };\n }\n\n const maxCtx = agentContext.maxContextTokens ?? 0;\n if (maxCtx > 0 && agentContext.instructionTokens >= maxCtx) {\n emitAgentLog(\n config,\n 'warn',\n 'summarize',\n 'Summarization skipped, instructions exceed context budget. Reduce the number of tools or increase maxContextTokens.',\n {\n instructionTokens: agentContext.instructionTokens,\n maxContextTokens: maxCtx,\n breakdown: agentContext.formatTokenBudgetBreakdown(),\n },\n { runId: graph.runId, agentId: request.agentId }\n );\n return { summarizationRequest: undefined };\n }\n\n /**\n * Capture the original-tool-content map locally before doing the\n * split. We need it in three places: to restore the head for\n * summarizer quality, to leave intact on the skip path (state is\n * unchanged), and — critically — to carry forward the tail-relevant\n * entries on the summarize-fired path. Clearing it eagerly here\n * would lose the originals for masked tool messages that the\n * recency window keeps in the tail; a future summarization could\n * then only summarize the masked stub instead of the full payload.\n */\n const originalPending = agentContext.pendingOriginalToolContent;\n\n const restoredMessages = restoreOriginalToolContent(\n state.messages,\n originalPending,\n agentContext.maxContextTokens\n );\n\n const runnableConfig = config ?? graph.config;\n\n const retainRecent = agentContext.summarizationConfig?.retainRecent;\n const { head: messagesToRefine, tailStartIndex } = splitAtRecencyBoundary(\n restoredMessages,\n {\n turns: retainRecent?.turns ?? DEFAULT_RETAIN_RECENT_TURNS,\n tokens: retainRecent?.tokens,\n tokenCounter: agentContext.tokenCounter,\n }\n );\n /**\n * Use the *masked* messages for the retained tail so that any\n * truncation prune applied to oversized ToolMessage content stays\n * truncated in live state. The summarizer above reads the restored\n * (full-content) head for summary quality, but reinjecting restored\n * tool payloads into state would defeat masking and bloat the\n * checkpoint, forcing more expensive re-pruning on later turns.\n * `restoreOriginalToolContent` returns an array with identical\n * length and structure to `state.messages` (replacements only at\n * specific indices), so the same tailStartIndex slices both arrays\n * at the same turn boundary.\n */\n const messagesToRetain = state.messages.slice(tailStartIndex);\n\n if (messagesToRefine.length === 0) {\n /**\n * Recency window covers the entire conversation — there is no\n * older content to summarize. Skipping prevents the model from\n * destroying the user's most recent message (e.g. a large pasted\n * payload on the first turn) by replacing it with a generic\n * checkpoint summary. Mark the trigger so the same unchanged\n * state is not re-evaluated on the next prune cycle.\n */\n emitAgentLog(\n config,\n 'debug',\n 'summarize',\n 'Summarization skipped — recency window retains all messages',\n {\n messagesRetained: messagesToRetain.length,\n retainTurns: retainRecent?.turns ?? DEFAULT_RETAIN_RECENT_TURNS,\n },\n { runId: graph.runId, agentId: request.agentId }\n );\n agentContext.markSummarizationTriggered(state.messages.length);\n return { summarizationRequest: undefined };\n }\n\n const clientConfig = buildSummarizationClientConfig(\n agentContext,\n agentContext.summarizationConfig\n );\n\n const stepKey = `summarize-${request.agentId}`;\n const [stepId, stepIndex] = generateStepId(stepKey);\n\n const placeholderSummary: t.SummaryContentBlock = {\n type: ContentTypes.SUMMARY,\n model: clientConfig.modelName,\n provider: clientConfig.provider,\n };\n\n const runStep: t.RunStep = {\n stepIndex,\n id: stepId,\n type: StepTypes.MESSAGE_CREATION,\n index: graph.contentData.length,\n stepDetails: {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: { message_id: stepId },\n },\n summary: placeholderSummary,\n usage: null,\n };\n\n if (graph.runId != null && graph.runId !== '') {\n runStep.runId = graph.runId;\n }\n if (graph.isMultiAgent && agentContext.agentId) {\n runStep.agentId = agentContext.agentId;\n }\n\n await graph.dispatchRunStep(runStep, runnableConfig);\n\n if (runnableConfig) {\n await safeDispatchCustomEvent(\n GraphEvents.ON_SUMMARIZE_START,\n {\n agentId: request.agentId,\n provider: clientConfig.provider,\n model: clientConfig.modelName,\n messagesToRefineCount: messagesToRefine.length,\n summaryVersion: agentContext.summaryVersion + 1,\n } satisfies t.SummarizeStartEvent,\n runnableConfig\n );\n }\n\n const sessionId = graph.runId ?? '';\n if (graph.hookRegistry?.hasHookFor('PreCompact', sessionId) === true) {\n const threadId = (\n runnableConfig?.configurable as Record<string, unknown> | undefined\n )?.thread_id as string | undefined;\n await executeHooks({\n registry: graph.hookRegistry,\n input: {\n hook_event_name: 'PreCompact',\n runId: sessionId,\n threadId,\n agentId: request.agentId,\n messagesBeforeCount: messagesToRefine.length,\n trigger: agentContext.summarizationConfig?.trigger?.type ?? 'default',\n },\n sessionId,\n }).catch(() => {\n /* PreCompact is observational — swallow errors */\n });\n }\n\n const isSelfSummarizeModel =\n clientConfig.provider === (agentContext.provider as string);\n const hasPromptCache =\n isSelfSummarizeModel &&\n (agentContext.clientOptions as Record<string, unknown> | undefined)\n ?.promptCache === true;\n\n const log: LogFn = (level, message, data) => {\n emitAgentLog(runnableConfig, level, 'summarize', message, data, {\n runId: graph.runId,\n agentId: request.agentId,\n });\n };\n\n log('debug', 'Summarization starting', {\n messagesToRefineCount: messagesToRefine.length,\n hasPriorSummary: (agentContext.getSummaryText()?.trim() ?? '') !== '',\n summaryVersion: agentContext.summaryVersion + 1,\n isSelfSummarize: isSelfSummarizeModel,\n hasPromptCache,\n provider: clientConfig.provider,\n });\n\n const summarizeConfig: RunnableConfig | undefined = config\n ? {\n ...config,\n metadata: {\n ...config.metadata,\n agent_id: request.agentId,\n /** Canonical agent-identity key, overwritten by every component\n * that stamps identity (graph model path, ToolNode, here) so the\n * closest stamper always wins via spread order — Langfuse scope\n * trust relies on it (see `isForeignScope`). */\n agentId: request.agentId,\n summarization_provider: clientConfig.provider,\n summarization_model: clientConfig.modelName,\n /**\n * Per-call model attribution for usage consumers (the subagent\n * usage-capture handler): the summarizer's model can differ from\n * the agent's primary, and providers that emit no `ls_model_name`\n * would otherwise be billed against the primary config's model.\n * Omitted for self-summarize (no explicit model — the primary\n * config fallback is then correct). `tryFallbackProviders`\n * overrides this per fallback attempt; `INVOKED_PROVIDER` is\n * stamped by `attemptInvoke` itself.\n */\n ...(clientConfig.modelName != null && clientConfig.modelName !== ''\n ? { [Constants.INVOKED_MODEL]: clientConfig.modelName }\n : {}),\n /** Entry-captured breaker epoch: the wire consumer epoch-gates\n * old-run summary chunks exactly like model-attempt chunks —\n * without the stamp, a straggling summary from a failed run\n * reads as current and could abort the next run's controller. */\n ...(entryBreakerEpoch != null\n ? { [STREAM_LIMIT_EPOCH_KEY]: entryBreakerEpoch }\n : {}),\n },\n }\n : undefined;\n\n /** Rechecked after the pre-call awaits (dispatchRunStep,\n * ON_SUMMARIZE_START, PreCompact): a sibling can trip the breaker while\n * this node is paused in one of them, and a provider that doesn't\n * synchronously reject an aborted signal would still start the\n * summarization call. Mirrors the model node's pre-invoke recheck. */\n {\n const preCallTrip = findStreamLimitAbortReason(\n entryBreakerSignal,\n config?.signal\n );\n if (preCallTrip != null) {\n throw preCallTrip;\n }\n }\n const {\n text: rawText,\n usage: summaryUsage,\n usedMetadataStub,\n } = await executeSummarizationWithFallback({\n agentContext,\n messages: messagesToRefine,\n clientConfig,\n summarizeConfig,\n stepId,\n usePromptCache: isSelfSummarizeModel && hasPromptCache,\n log,\n graph,\n });\n\n /**\n * The metadata stub describes the history rather than summarizing it, so\n * committing it means removing the head and keeping nothing of what it\n * said. That trade is never worth making to paper over an overflow: the\n * recovery would \"succeed\" only by destroying the conversation it was\n * supposed to preserve. Leave state untouched and let the provider error\n * surface instead.\n */\n if (usedMetadataStub === true && request.reason === 'overflow') {\n log(\n 'warn',\n 'Overflow summarization failed; keeping history rather than replacing it with a metadata stub'\n );\n agentContext.markSummarizationTriggered(state.messages.length);\n /**\n * The run step was already dispatched, so it has to be resolved here or\n * consumers tracking step lifecycle keep an unfinished placeholder for\n * the rest of the run.\n */\n await graph.dispatchRunStepCompleted(\n stepId,\n {\n type: 'summary',\n summary: placeholderSummary,\n } satisfies t.SummaryCompleted,\n runnableConfig\n );\n if (runnableConfig) {\n await safeDispatchCustomEvent(\n GraphEvents.ON_SUMMARIZE_COMPLETE,\n {\n id: stepId,\n agentId: request.agentId,\n error:\n 'Summarization failed during overflow recovery; conversation history was preserved',\n } satisfies t.SummarizeCompleteEvent,\n runnableConfig\n );\n }\n return { summarizationRequest: undefined };\n }\n\n if (!rawText) {\n agentContext.markSummarizationTriggered(0);\n if (runnableConfig) {\n await safeDispatchCustomEvent(\n GraphEvents.ON_SUMMARIZE_COMPLETE,\n {\n id: stepId,\n agentId: request.agentId,\n error: 'Summarization produced empty output',\n } satisfies t.SummarizeCompleteEvent,\n runnableConfig\n );\n }\n await graph.closeRunStep?.(stepId, 'failed', runnableConfig);\n return { summarizationRequest: undefined };\n }\n\n const summaryText = enrichSummary(rawText, messagesToRefine);\n\n const tokenCount = computeSummaryTokenCount(\n summaryText,\n summaryUsage,\n agentContext.tokenCounter\n );\n\n agentContext.setSummary(summaryText, tokenCount);\n\n log('info', 'Summary persisted');\n log('debug', 'Summary details', {\n summaryTokens: tokenCount,\n textLength: summaryText.length,\n messagesCompacted: messagesToRefine.length,\n summaryVersion: agentContext.summaryVersion,\n ...(summaryUsage != null\n ? {\n input_tokens: summaryUsage.input_tokens,\n output_tokens: summaryUsage.output_tokens,\n cache_read: summaryUsage.input_token_details?.cache_read,\n cache_creation: summaryUsage.input_token_details?.cache_creation,\n }\n : {}),\n });\n\n const summaryBlock = buildSummaryBlock({\n summaryText,\n tokenCount,\n coverage: resolveSummaryCoverage(messagesToRetain),\n stepId,\n stepIndex: runStep.index,\n modelName: clientConfig.modelName,\n provider: clientConfig.provider,\n summaryVersion: agentContext.summaryVersion,\n });\n\n await dispatchCompletionEvents({\n graph,\n runnableConfig,\n stepId,\n summaryBlock,\n agentContext,\n runStep,\n summaryUsage,\n agentId: request.agentId,\n messagesAfterCount: messagesToRetain.length,\n });\n\n /**\n * `dispatchCompletionEvents` calls `rebuildTokenMapAfterSummarization({})`\n * which resets the dedupe baseline to 0 — correct under the legacy\n * \"remove-all only\" shape where no messages survived, but stale once\n * the recency window keeps a tail. Realign the baseline to the\n * surviving tail length so a subsequent prune cycle on the unchanged\n * tail short-circuits via `shouldSkipSummarization` instead of\n * looping back into another summarize call.\n */\n agentContext.markSummarizationTriggered(messagesToRetain.length);\n\n /**\n * Carry forward the original-content entries that correspond to the\n * retained tail, reindexed for the post-removeAll state where tail\n * messages start at index 0. Without this, a future summarization\n * that pulls these tail messages into its head would only see the\n * masked stubs (since `setSummary` clears `pruneMessages`, and the\n * fresh pruner at the next turn has no record of prior masks).\n * Entries for indices < `tailStartIndex` belong to messages we just\n * summarized — they are no longer reachable so they are dropped.\n */\n if (originalPending != null && originalPending.size > 0) {\n const tailPending = new Map<number, string>();\n for (const [idx, content] of originalPending) {\n if (idx >= tailStartIndex) {\n tailPending.set(idx - tailStartIndex, content);\n }\n }\n agentContext.pendingOriginalToolContent =\n tailPending.size > 0 ? tailPending : undefined;\n } else {\n agentContext.pendingOriginalToolContent = undefined;\n }\n\n return {\n summarizationRequest: undefined,\n messages:\n messagesToRetain.length > 0\n ? [createRemoveAllMessage(), ...messagesToRetain]\n : [createRemoveAllMessage()],\n };\n };\n}\n\n/** Extracts text from an LLM response, skipping reasoning/thinking blocks. */\nfunction extractResponseText(response: { content: string | object }): string {\n const { content } = response;\n if (typeof content === 'string') {\n return content.trim();\n }\n if (!Array.isArray(content)) {\n return '';\n }\n const parts: string[] = [];\n for (const block of content) {\n if (typeof block === 'string') {\n parts.push(block);\n continue;\n }\n if (block == null || typeof block !== 'object') {\n continue;\n }\n const rec = block as Record<string, unknown>;\n if (\n rec.type === ContentTypes.THINKING ||\n rec.type === ContentTypes.REASONING_CONTENT ||\n rec.type === 'redacted_thinking'\n ) {\n continue;\n }\n if (rec.type === 'text' && typeof rec.text === 'string') {\n parts.push(rec.text);\n }\n }\n return parts.join('').trim();\n}\n\nfunction buildSummarizationInstruction(\n promptText: string,\n updatePromptText: string | undefined,\n priorSummaryText: string\n): string {\n const effectivePrompt = priorSummaryText\n ? (updatePromptText ?? promptText)\n : promptText;\n const parts = [effectivePrompt];\n if (priorSummaryText) {\n parts.push(\n `\\n\\n<previous-summary>\\n${priorSummaryText}\\n</previous-summary>`\n );\n }\n return parts.join('');\n}\n\n/** Creates an `onChunk` callback that dispatches `ON_SUMMARIZE_DELTA` events for streaming. */\nexport function createSummarizationChunkHandler({\n stepId,\n config,\n provider,\n reasoningKey = 'reasoning_content',\n graph,\n}: {\n stepId?: string;\n config?: RunnableConfig;\n provider?: Providers;\n reasoningKey?: 'reasoning_content' | 'reasoning';\n graph?: StreamLimitState & { getBreakerController?: () => AbortController };\n}): OnChunk | undefined {\n if (stepId == null || stepId === '' || !config) {\n return undefined;\n }\n const limitMetadata = config.metadata as Record<string, unknown> | undefined;\n return (chunk, attemptMetadata) => {\n /**\n * Charged as `producer` so it PAIRS with the run's registered stream\n * handler: inside a live run the provider callbacks route each chunk\n * through the graph's `on_chat_model_stream` consumer too, and two\n * same-side consumer claims would charge the chunk twice — halving an\n * opt-in event cap. Standalone callers (tests, custom hosts, runs with\n * no registered handler) still get single-sided enforcement from this\n * one claim. Summarization deliberately passes NO `context` to\n * `attemptInvoke`, whose onChunk branch would otherwise add a second\n * producer claim. A breach trips the run's shared breaker (the\n * ENTRY-captured controller when the adapter provides one) before\n * rethrowing: this producer claim wins the race, so the wire consumer's\n * breaker-aborting catch never fires for the same chunk — without the\n * trip here, sibling model calls, tools, and subagents would keep\n * consuming quota while the summary branch rejects.\n * `executeSummarizationWithFallback` then rethrows past fallbacks and\n * the metadata stub, failing the run like any other breach.\n */\n if (graph != null) {\n try {\n enforceStreamLimitsForWireChunk({\n graph,\n metadata: attemptMetadata ?? limitMetadata,\n chunk: chunk as Parameters<\n typeof enforceStreamLimitsForWireChunk\n >[0]['chunk'],\n });\n } catch (error) {\n if (error instanceof StreamLimitExceededError) {\n graph.getBreakerController?.().abort(error);\n }\n throw error;\n }\n }\n const chunkAny = chunk as Parameters<typeof getChunkContent>[0]['chunk'];\n const raw = getChunkContent({ chunk: chunkAny, provider, reasoningKey });\n if (raw == null || (typeof raw === 'string' && !raw)) {\n return;\n }\n const contentBlocks: t.MessageContentComplex[] =\n typeof raw === 'string'\n ? [{ type: ContentTypes.TEXT, text: raw } as t.MessageContentComplex]\n : raw;\n\n void safeDispatchCustomEvent(\n GraphEvents.ON_SUMMARIZE_DELTA,\n {\n id: stepId,\n delta: {\n summary: {\n type: ContentTypes.SUMMARY,\n content: contentBlocks,\n provider: String(config.metadata?.summarization_provider ?? ''),\n model: String(config.metadata?.summarization_model ?? ''),\n },\n },\n } satisfies t.SummarizeDeltaEvent,\n config\n );\n };\n}\n\nfunction traceConfig(\n config: RunnableConfig | undefined,\n stage: string\n): RunnableConfig | undefined {\n if (!config) {\n return undefined;\n }\n return {\n ...config,\n runName: `summarization:${stage}`,\n metadata: { ...config.metadata, summarization: true, stage },\n };\n}\n\n/**\n * Cache-friendly compaction: sends raw conversation messages with the\n * summarization instruction appended as the final HumanMessage.\n * Providers with prompt caching get a cache hit on the system prompt +\n * tool definitions prefix.\n */\nasync function summarizeWithCacheHit({\n model,\n messages,\n promptText,\n updatePromptText,\n priorSummaryText,\n config,\n stepId,\n provider,\n reasoningKey,\n graph,\n usePromptCache,\n promptCacheTtl,\n log,\n}: {\n model: t.ChatModel;\n messages: BaseMessage[];\n promptText: string;\n updatePromptText?: string;\n priorSummaryText: string;\n config?: RunnableConfig;\n stepId?: string;\n provider: Providers;\n reasoningKey?: 'reasoning_content' | 'reasoning';\n graph?: StreamLimitState & { getBreakerSignal?: () => AbortSignal };\n usePromptCache?: boolean;\n promptCacheTtl?: PromptCacheTtl;\n log?: LogFn;\n}): Promise<{ text: string; usage?: Partial<UsageMetadata> }> {\n const instruction = buildSummarizationInstruction(\n promptText,\n updatePromptText,\n priorSummaryText\n );\n\n const fullMessages = [...messages, new HumanMessage(instruction)];\n const invokeMessages =\n usePromptCache === true\n ? addTailCacheControl(fullMessages, promptCacheTtl)\n : fullMessages;\n\n const result = await attemptInvoke(\n {\n model,\n messages: invokeMessages,\n provider,\n onChunk: createSummarizationChunkHandler({\n stepId,\n config: traceConfig(config, 'cache_hit_compaction'),\n provider,\n reasoningKey,\n graph,\n }),\n /** Accounting lease only (summarization passes no `context` so its\n * producer claim never stacks with the onChunk handler's). */\n streamLimitState: graph,\n },\n withBreakerSignal(traceConfig(config, 'cache_hit_compaction'), graph)\n );\n\n const responseMsg = result.messages?.[0];\n const text = responseMsg\n ? extractResponseText(responseMsg as { content: string | object })\n : '';\n let usage: Partial<UsageMetadata> | undefined;\n let usageSource = 'none';\n if (\n responseMsg != null &&\n 'usage_metadata' in responseMsg &&\n responseMsg.usage_metadata != null\n ) {\n usage = responseMsg.usage_metadata as Partial<UsageMetadata>;\n usageSource = 'usage_metadata';\n } else if (responseMsg != null) {\n const respMeta = responseMsg.response_metadata as\n | Record<string, unknown>\n | undefined;\n const raw = (respMeta?.metadata as Record<string, unknown> | undefined)\n ?.usage as Record<string, unknown> | undefined;\n if (raw != null) {\n usage = {\n input_tokens: Number(raw.inputTokens) || undefined,\n output_tokens: Number(raw.outputTokens) || undefined,\n } as Partial<UsageMetadata>;\n usageSource = 'response_metadata';\n }\n }\n const cacheDetails = (\n usage as\n | {\n input_token_details?: {\n cache_read?: number;\n cache_creation?: number;\n };\n }\n | undefined\n )?.input_token_details;\n log?.('debug', 'Summarization LLM usage', {\n source: usageSource,\n input_tokens: usage?.input_tokens,\n output_tokens: usage?.output_tokens,\n ...(cacheDetails?.cache_read != null || cacheDetails?.cache_creation != null\n ? {\n 'input_token_details.cache_read': cacheDetails.cache_read,\n 'input_token_details.cache_creation': cacheDetails.cache_creation,\n }\n : {}),\n });\n return { text, usage };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"node.mjs","names":["chunkAny"],"sources":["../../../src/summarization/node.ts"],"mappings":"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"}
@@ -44,14 +44,6 @@ Usage:
44
44
  - ${BASH_SHELL_GUIDANCE}
45
45
  - NEVER use this tool to execute malicious commands.
46
46
  `.trim();
47
- /**
48
- * Bash statefulness is filesystem-tier and scoped to `/mnt/data`. The machine
49
- * is warm across calls, but each call runs in a fresh sandbox (new process
50
- * tree + private /tmp), so background processes are reaped when the call ends
51
- * and anything written outside /mnt/data is discarded. The note must not
52
- * promise otherwise: a model told background processes survive will start a
53
- * server in one call and assume it is listening in the next.
54
- */
55
47
  const STATEFUL_BASH_NOTE = "Session state: commands in this conversation run on the same warm machine, so files written to /mnt/data persist between calls. Each call runs in a fresh, isolated sandbox: shell variables, the working directory, /tmp, and background processes do NOT survive after the call returns — a process started in one call is terminated when that call ends. Only /mnt/data is durable (the machine itself may also be reset at any time).";
56
48
  const StatefulBashExecutionToolDescription = `
57
49
  Runs bash commands and returns stdout/stderr output. Commands in this conversation share one warm machine with a persistent /mnt/data, but each command runs in its own isolated sandbox (not a persistent shell session).
@@ -65,16 +57,6 @@ Usage:
65
57
  - ${BASH_SHELL_GUIDANCE}
66
58
  - NEVER use this tool to execute malicious commands.
67
59
  `.trim();
68
- /**
69
- * Supplemental prompt documenting the tool-output reference feature.
70
- *
71
- * Hosts should append this (separated by a blank line) to the base
72
- * {@link BashExecutionToolDescription} only when
73
- * `RunConfig.toolOutputReferences.enabled` is `true`. When the feature
74
- * is disabled, including this text would tell the LLM to emit
75
- * `{{tool0turn0}}` placeholders that pass through unsubstituted and
76
- * leak into the shell.
77
- */
78
60
  const BashToolOutputReferencesGuide = `
79
61
  Referencing previous tool outputs:
80
62
  - Every successful tool result is tagged with a reference key of the form \`tool<idx>turn<turn>\` (e.g., \`tool0turn0\`). The key appears either as a \`[ref: tool0turn0]\` prefix line or, when the output is a JSON object, as a \`_ref\` field on the object.
@@ -85,13 +67,6 @@ Referencing previous tool outputs:
85
67
  - Heredoc example: \`wc -c << 'EOF'\\n{{tool0turn0}}\\nEOF\` (the quotes around \`'EOF'\` disable interpolation inside the body).
86
68
  - Unknown reference keys are left in place and surfaced as \`[unresolved refs: …]\` after the output.
87
69
  `.trim();
88
- /**
89
- * Composes the bash tool description, optionally appending the
90
- * tool-output references guide. Hosts that enable
91
- * `RunConfig.toolOutputReferences` should pass `enableToolOutputReferences: true`
92
- * when registering the tool so the LLM learns the `{{…}}` syntax it
93
- * will actually be able to use.
94
- */
95
70
  function buildBashExecutionToolDescription(options) {
96
71
  const base = options?.statefulSessions === true ? StatefulBashExecutionToolDescription : BashExecutionToolDescription;
97
72
  if (options?.enableToolOutputReferences === true) return `${base}\n\n${BashToolOutputReferencesGuide}`;
@@ -114,16 +89,6 @@ function buildBashExecutionToolSchema(opts) {
114
89
  };
115
90
  }
116
91
  const BashExecutionToolName = "bash_tool";
117
- /**
118
- * Default bash tool definition using the base description.
119
- *
120
- * When `RunConfig.toolOutputReferences.enabled` is `true`, build a
121
- * reference-aware description with
122
- * {@link buildBashExecutionToolDescription}
123
- * (`{ enableToolOutputReferences: true }`) and construct a custom
124
- * definition using it — using this constant as-is leaves the LLM
125
- * unaware of the `{{tool<i>turn<n>}}` syntax.
126
- */
127
92
  const BashExecutionToolDefinition = {
128
93
  name: BashExecutionToolName,
129
94
  description: BashExecutionToolDescription,
@@ -1 +1 @@
1
- {"version":3,"file":"BashExecutor.mjs","names":[],"sources":["../../../src/tools/BashExecutor.ts"],"sourcesContent":["import { config } from 'dotenv';\nimport fetch, { RequestInit } from 'node-fetch';\nimport { tool, DynamicStructuredTool } from '@langchain/core/tools';\nimport type * as t from '@/types';\nimport {\n BASH_SHELL_GUIDANCE,\n CODE_ARTIFACT_PATH_GUIDANCE,\n appendFailedExecutionFileReminder,\n appendTmpScratchReminder,\n appendCodeSessionFileSummary,\n emptyOutputMessage,\n buildCodeApiHttpErrorMessage,\n CodeApiRequestError,\n getCodeBaseURL,\n normalizeCodeApiRequestError,\n resolveCodeApiAuthHeaders,\n} from './CodeExecutor';\nimport { resolveFetchProxyAgent } from '@/utils/proxy';\nimport { INTENT_PROPERTY } from '@/tools/intentArg';\nimport { Constants } from '@/common';\n\nconfig();\n\nconst baseEndpoint = getCodeBaseURL();\nconst EXEC_ENDPOINT = `${baseEndpoint}/exec`;\n\nexport const BashExecutionToolSchema = {\n type: 'object',\n properties: {\n intent: { ...INTENT_PROPERTY },\n command: {\n type: 'string',\n description: `The bash command or script to execute.\n- The environment is stateless; variables and state don't persist between executions.\n- Prior /mnt/data files are available and can be modified in place.\n- ${CODE_ARTIFACT_PATH_GUIDANCE}\n- ${BASH_SHELL_GUIDANCE}\n- Input code **IS ALREADY** displayed to the user, so **DO NOT** repeat it in your response unless asked.\n- Output code **IS NOT** displayed to the user, so **DO** write all desired output explicitly.\n- IMPORTANT: You MUST explicitly print/output ALL results you want the user to see.\n- Use \\`echo\\`, \\`printf\\`, or \\`cat\\` for all outputs.`,\n },\n args: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional arguments to execute the command with. This should only be used if the input command requires additional arguments to run.',\n },\n },\n required: ['command'],\n} as const;\n\nexport const BashExecutionToolDescription = `\nRuns bash commands and returns stdout/stderr output from a stateless execution environment, similar to running scripts in a command-line interface. Each execution is isolated and independent.\n\nUsage:\n- No network access available.\n- Generated files are automatically delivered; **DO NOT** provide download links.\n- ${CODE_ARTIFACT_PATH_GUIDANCE}\n- ${BASH_SHELL_GUIDANCE}\n- NEVER use this tool to execute malicious commands.\n`.trim();\n\n/**\n * Bash statefulness is filesystem-tier and scoped to `/mnt/data`. The machine\n * is warm across calls, but each call runs in a fresh sandbox (new process\n * tree + private /tmp), so background processes are reaped when the call ends\n * and anything written outside /mnt/data is discarded. The note must not\n * promise otherwise: a model told background processes survive will start a\n * server in one call and assume it is listening in the next.\n */\nexport const STATEFUL_BASH_NOTE =\n 'Session state: commands in this conversation run on the same warm machine, so files written to /mnt/data persist between calls. Each call runs in a fresh, isolated sandbox: shell variables, the working directory, /tmp, and background processes do NOT survive after the call returns — a process started in one call is terminated when that call ends. Only /mnt/data is durable (the machine itself may also be reset at any time).';\n\nexport const StatefulBashExecutionToolDescription = `\nRuns bash commands and returns stdout/stderr output. Commands in this conversation share one warm machine with a persistent /mnt/data, but each command runs in its own isolated sandbox (not a persistent shell session).\n\n${STATEFUL_BASH_NOTE}\n\nUsage:\n- No network access available.\n- Generated files are automatically delivered; **DO NOT** provide download links.\n- ${CODE_ARTIFACT_PATH_GUIDANCE}\n- ${BASH_SHELL_GUIDANCE}\n- NEVER use this tool to execute malicious commands.\n`.trim();\n\n/**\n * Supplemental prompt documenting the tool-output reference feature.\n *\n * Hosts should append this (separated by a blank line) to the base\n * {@link BashExecutionToolDescription} only when\n * `RunConfig.toolOutputReferences.enabled` is `true`. When the feature\n * is disabled, including this text would tell the LLM to emit\n * `{{tool0turn0}}` placeholders that pass through unsubstituted and\n * leak into the shell.\n */\nexport const BashToolOutputReferencesGuide = `\nReferencing previous tool outputs:\n- Every successful tool result is tagged with a reference key of the form \\`tool<idx>turn<turn>\\` (e.g., \\`tool0turn0\\`). The key appears either as a \\`[ref: tool0turn0]\\` prefix line or, when the output is a JSON object, as a \\`_ref\\` field on the object.\n- To pipe a previous tool output into this tool, embed the placeholder \\`{{tool<idx>turn<turn>}}\\` literally anywhere in the \\`command\\` string (or any string arg). It will be substituted with the stored output verbatim before the command runs.\n- The substituted value is the original output string (no \\`[ref: …]\\` prefix, no \\`_ref\\` key), so it is safe to pipe directly into \\`jq\\`, \\`grep\\`, \\`awk\\`, etc.\n- Example (simple ASCII output): \\`echo '{{tool0turn0}}' | jq '.foo'\\` takes the full output of the first tool from the first turn and pipes it into jq.\n- For payloads that may contain quotes, parentheses, backticks, or arbitrary bytes (random/binary data, JSON with embedded quotes, multi-line strings), prefer a quoted-delimiter heredoc over \\`echo '…'\\`. The heredoc body is not interpreted by the shell, so substituted payloads pass through unchanged.\n- Heredoc example: \\`wc -c << 'EOF'\\\\n{{tool0turn0}}\\\\nEOF\\` (the quotes around \\`'EOF'\\` disable interpolation inside the body).\n- Unknown reference keys are left in place and surfaced as \\`[unresolved refs: …]\\` after the output.\n`.trim();\n\n/**\n * Composes the bash tool description, optionally appending the\n * tool-output references guide. Hosts that enable\n * `RunConfig.toolOutputReferences` should pass `enableToolOutputReferences: true`\n * when registering the tool so the LLM learns the `{{…}}` syntax it\n * will actually be able to use.\n */\nexport function buildBashExecutionToolDescription(options?: {\n enableToolOutputReferences?: boolean;\n statefulSessions?: boolean;\n}): string {\n const base =\n options?.statefulSessions === true\n ? StatefulBashExecutionToolDescription\n : BashExecutionToolDescription;\n if (options?.enableToolOutputReferences === true) {\n return `${base}\\n\\n${BashToolOutputReferencesGuide}`;\n }\n return base;\n}\n\nconst STATELESS_BASH_PARAM_NOTE =\n 'The environment is stateless; variables and state don\\'t persist between executions.';\nconst STATEFUL_BASH_PARAM_NOTE =\n 'Files written to /mnt/data persist between calls on the same warm machine. Each call runs in a fresh sandbox: shell variables, cwd, /tmp, and background processes do NOT survive the call. Only /mnt/data is durable.';\n\nexport function buildBashExecutionToolSchema(opts?: {\n statefulSessions?: boolean;\n}): typeof BashExecutionToolSchema {\n const note =\n opts?.statefulSessions === true\n ? STATEFUL_BASH_PARAM_NOTE\n : STATELESS_BASH_PARAM_NOTE;\n const commandDescription =\n BashExecutionToolSchema.properties.command.description.replace(\n STATELESS_BASH_PARAM_NOTE,\n note\n );\n return {\n ...BashExecutionToolSchema,\n properties: {\n ...BashExecutionToolSchema.properties,\n command: {\n ...BashExecutionToolSchema.properties.command,\n description: commandDescription,\n },\n },\n } as typeof BashExecutionToolSchema;\n}\n\nexport const BashExecutionToolName = Constants.BASH_TOOL;\n\n/**\n * Default bash tool definition using the base description.\n *\n * When `RunConfig.toolOutputReferences.enabled` is `true`, build a\n * reference-aware description with\n * {@link buildBashExecutionToolDescription}\n * (`{ enableToolOutputReferences: true }`) and construct a custom\n * definition using it — using this constant as-is leaves the LLM\n * unaware of the `{{tool<i>turn<n>}}` syntax.\n */\nexport const BashExecutionToolDefinition = {\n name: BashExecutionToolName,\n description: BashExecutionToolDescription,\n schema: BashExecutionToolSchema,\n} as const;\n\nfunction createBashExecutionTool(\n params: t.BashExecutionToolParams | null = {}\n): DynamicStructuredTool {\n return tool(\n async (rawInput, config) => {\n /* `statefulSessions` is prompt-only — keep it out of the wire body. */\n const {\n authHeaders,\n statefulSessions: _statefulSessions,\n ...executionParams\n } = params ?? {};\n void _statefulSessions;\n /* Drop any model-supplied `runtime_session_hint` from the raw args: the\n * hint must only come from ToolNode's injected `_runtime_session_hint`\n * (below), never from the tool call itself. */\n /* `intent` is a UI display label — never part of the wire body. */\n const {\n command,\n intent: _ignoredIntent,\n runtime_session_hint: _ignoredModelHint,\n ...rest\n } = rawInput as {\n command: string;\n intent?: unknown;\n runtime_session_hint?: unknown;\n args?: string[];\n };\n void _ignoredModelHint;\n void _ignoredIntent;\n const { session_id, _injected_files, _runtime_session_hint } =\n (config.toolCall ?? {}) as {\n session_id?: string;\n _injected_files?: t.CodeEnvFile[];\n _runtime_session_hint?: string;\n };\n\n const postData: Record<string, unknown> = {\n lang: 'bash',\n code: command,\n ...rest,\n ...executionParams,\n };\n\n if (\n typeof _runtime_session_hint === 'string' &&\n _runtime_session_hint !== ''\n ) {\n postData.runtime_session_hint = _runtime_session_hint;\n }\n\n /* See `CodeExecutor.ts` for the rationale — `/files/<session_id>`\n * HTTP fallback was removed because codeapi's sessionAuth requires\n * kind/id query params unavailable at this point. */\n if (_injected_files && _injected_files.length > 0) {\n postData.files = _injected_files;\n } else if (\n session_id != null &&\n session_id.length > 0 &&\n !Array.isArray(postData.files)\n ) {\n // eslint-disable-next-line no-console\n console.debug(\n `[BashExecutor] No injected files for session_id=${session_id} — exec will run without input files`\n );\n }\n\n try {\n const resolvedAuthHeaders =\n await resolveCodeApiAuthHeaders(authHeaders);\n const fetchOptions: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'LibreChat/1.0',\n ...resolvedAuthHeaders,\n },\n body: JSON.stringify(postData),\n };\n\n const proxyAgent = resolveFetchProxyAgent(EXEC_ENDPOINT);\n if (proxyAgent) {\n fetchOptions.agent = proxyAgent;\n }\n const response = await fetch(EXEC_ENDPOINT, fetchOptions);\n if (!response.ok) {\n throw new CodeApiRequestError(\n await buildCodeApiHttpErrorMessage('POST', EXEC_ENDPOINT, response)\n );\n }\n\n const result: t.ExecuteResult = await response.json();\n let formattedOutput = '';\n if (result.stdout) {\n formattedOutput += `stdout:\\n${result.stdout}\\n`;\n } else {\n formattedOutput += emptyOutputMessage;\n }\n if (result.stderr) formattedOutput += `stderr:\\n${result.stderr}\\n`;\n\n const outputWithReminder = appendTmpScratchReminder(\n formattedOutput,\n command\n );\n const hasFiles = result.files != null && result.files.length > 0;\n const runtimeEcho =\n result.runtime_session_id != null\n ? {\n runtime_session_id: result.runtime_session_id,\n runtime_status: result.runtime_status,\n }\n : {};\n return [\n appendCodeSessionFileSummary(outputWithReminder, result.files),\n (hasFiles\n ? {\n session_id: result.session_id,\n files: result.files,\n ...runtimeEcho,\n }\n : {\n session_id: result.session_id,\n ...runtimeEcho,\n }) satisfies t.CodeExecutionArtifact,\n ];\n } catch (error) {\n const messageWithReminder = appendFailedExecutionFileReminder(\n normalizeCodeApiRequestError(error).message,\n command\n );\n throw new Error(`Execution error:\\n\\n${messageWithReminder}`);\n }\n },\n {\n name: BashExecutionToolName,\n description: buildBashExecutionToolDescription({\n statefulSessions: params?.statefulSessions,\n }),\n schema: buildBashExecutionToolSchema(params ?? undefined),\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\nexport { createBashExecutionTool };\n"],"mappings":"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"}
1
+ {"version":3,"file":"BashExecutor.mjs","names":[],"sources":["../../../src/tools/BashExecutor.ts"],"mappings":"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"}
@@ -10,7 +10,6 @@ import { config } from "dotenv";
10
10
  config();
11
11
  const DEFAULT_MAX_ROUND_TRIPS = 20;
12
12
  const DEFAULT_RUN_TIMEOUT_MS = resolveCodeApiRunTimeoutMs();
13
- /** Bash reserved words that get `_tool` suffix when used as function names */
14
13
  const BASH_RESERVED = new Set([
15
14
  "if",
16
15
  "then",
@@ -125,13 +124,6 @@ function normalizeBashToolResultsForReplay(toolResults) {
125
124
  };
126
125
  });
127
126
  }
128
- /**
129
- * Normalizes a tool name to a valid bash function identifier.
130
- * 1. Replace hyphens, spaces, dots with underscores
131
- * 2. Remove any other invalid characters
132
- * 3. Prefix with underscore if starts with number
133
- * 4. Append `_tool` if it's a bash reserved word
134
- */
135
127
  function normalizeToBashIdentifier(name) {
136
128
  let normalized = name.replace(/[-\s.]/g, "_");
137
129
  normalized = normalized.replace(/[^a-zA-Z0-9_]/g, "");
@@ -139,11 +131,6 @@ function normalizeToBashIdentifier(name) {
139
131
  if (BASH_RESERVED.has(normalized)) normalized = normalized + "_tool";
140
132
  return normalized;
141
133
  }
142
- /**
143
- * Extracts tool names that are actually called in the bash code.
144
- * Bash functions are invoked as commands (no parentheses), so we match
145
- * the normalized name as a word boundary.
146
- */
147
134
  function extractUsedBashToolNames(code, toolNameMap) {
148
135
  const usedTools = /* @__PURE__ */ new Set();
149
136
  for (const [bashName, originalName] of toolNameMap) {
@@ -152,9 +139,6 @@ function extractUsedBashToolNames(code, toolNameMap) {
152
139
  }
153
140
  return usedTools;
154
141
  }
155
- /**
156
- * Filters tool definitions to only include tools actually used in the bash code.
157
- */
158
142
  function filterBashToolsByUsage(toolDefs, code, debug = false) {
159
143
  const toolNameMap = /* @__PURE__ */ new Map();
160
144
  for (const def of toolDefs) {
@@ -172,14 +156,6 @@ function filterBashToolsByUsage(toolDefs, code, debug = false) {
172
156
  }
173
157
  return toolDefs.filter((def) => usedToolNames.has(def.name));
174
158
  }
175
- /**
176
- * Creates a Bash Programmatic Tool Calling tool for multi-tool orchestration.
177
- *
178
- * This tool enables AI agents to write bash scripts that orchestrate multiple
179
- * tool calls programmatically via the remote Code API, reducing LLM round-trips.
180
- *
181
- * The tool map must be provided at runtime via config.toolCall (injected by ToolNode).
182
- */
183
159
  function createBashProgrammaticToolCallingTool(initParams = {}) {
184
160
  const baseUrl = initParams.baseUrl ?? getCodeBaseURL();
185
161
  const maxRoundTrips = initParams.maxRoundTrips ?? DEFAULT_MAX_ROUND_TRIPS;
@@ -1 +1 @@
1
- {"version":3,"file":"BashProgrammaticToolCalling.mjs","names":[],"sources":["../../../src/tools/BashProgrammaticToolCalling.ts"],"sourcesContent":["import { config } from 'dotenv';\nimport { tool, DynamicStructuredTool } from '@langchain/core/tools';\nimport type { ToolCall } from '@langchain/core/messages/tool';\nimport type { ProgrammaticToolCallingJsonSchema } from './ptcTimeout';\nimport type * as t from '@/types';\nimport {\n BASH_SHELL_GUIDANCE,\n CODE_ARTIFACT_PATH_GUIDANCE,\n appendFailedExecutionFileReminder,\n buildCodeApiExecutionErrorMessage,\n CodeApiRequestError,\n getCodeBaseURL,\n} from './CodeExecutor';\nimport {\n clampCodeApiRunTimeoutMs,\n createCodeApiRunTimeoutSchema,\n resolveCodeApiRunTimeoutMs,\n} from './ptcTimeout';\nimport {\n makeRequest,\n executeTools,\n formatCompletedResponse,\n} from './ProgrammaticToolCalling';\nimport { INTENT_PROPERTY } from '@/tools/intentArg';\nimport { Constants } from '@/common';\n\nconfig();\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst DEFAULT_MAX_ROUND_TRIPS = 20;\nconst DEFAULT_RUN_TIMEOUT_MS = resolveCodeApiRunTimeoutMs();\n\n/** Bash reserved words that get `_tool` suffix when used as function names */\nconst BASH_RESERVED = new Set([\n 'if',\n 'then',\n 'else',\n 'elif',\n 'fi',\n 'case',\n 'esac',\n 'for',\n 'while',\n 'until',\n 'do',\n 'done',\n 'in',\n 'function',\n 'select',\n 'time',\n 'coproc',\n 'declare',\n 'typeset',\n 'local',\n 'readonly',\n 'export',\n 'unset',\n]);\n\n// ============================================================================\n// Description Components\n// ============================================================================\n\nconst STATELESS_WARNING = `CRITICAL - STATELESS EXECUTION:\nEach call is a fresh bash shell. Variables and state do NOT persist between calls.\nYou MUST complete your entire workflow in ONE code block.\nDO NOT split work across multiple calls expecting to reuse variables.`;\n\nconst CORE_RULES = `Rules:\n- One call: state does not persist\n- Tools are pre-defined as bash functions—DO NOT redefine them\n- Each tool function accepts a JSON string argument\n- Save tool output with raw=$(tool '{}'); printf '%s\\n' \"$raw\" > /mnt/data/file.json; direct tool > file may be empty\n- Tool stdout is normalized to one compact JSON value when possible; parse saved stdout once, then use fromjson? // . only for JSON-string fields\n- Only echo/printf output returns to the model\n- ${CODE_ARTIFACT_PATH_GUIDANCE}\n- ${BASH_SHELL_GUIDANCE}\n- timeout caps one sandbox run/replay iteration, not the total multi-round-trip workflow`;\n\nconst ADDITIONAL_RULES =\n '- Tool names normalized: hyphens→underscores, reserved words get `_tool` suffix';\n\nconst EXAMPLES = `Example (Complete workflow in one call):\n # Query data and process\n data=$(query_database '{\"sql\": \"SELECT * FROM users\"}')\n echo \"$data\" | jq '.[] | .name'\n\nExample (Parallel calls):\n { sf=$(web_search '{\"query\": \"SF weather\"}'); printf '%s\\n' \"$sf\" > /mnt/data/sf.json; } &\n { ny=$(web_search '{\"query\": \"NY weather\"}'); printf '%s\\n' \"$ny\" > /mnt/data/ny.json; } &\n wait\n echo \"SF: $(jq -r . /mnt/data/sf.json)\"\n echo \"NY: $(jq -r . /mnt/data/ny.json)\"`;\n\nconst CODE_PARAM_DESCRIPTION = `Bash code that calls tools programmatically. Tools are available as bash functions.\n\n${STATELESS_WARNING}\n\nEach tool function accepts a JSON string as its argument.\nExample: tool_name '{\"key\": \"value\"}'\n\n${EXAMPLES}\n\n${CORE_RULES}`;\n\n// ============================================================================\n// Schema\n// ============================================================================\n\nexport function createBashProgrammaticToolCallingSchema(\n maxRunTimeoutMs = DEFAULT_RUN_TIMEOUT_MS\n): ProgrammaticToolCallingJsonSchema {\n return {\n type: 'object',\n properties: {\n intent: { ...INTENT_PROPERTY },\n code: {\n type: 'string',\n minLength: 1,\n description: CODE_PARAM_DESCRIPTION,\n },\n timeout: createCodeApiRunTimeoutSchema(maxRunTimeoutMs),\n },\n required: ['code'],\n } as const;\n}\n\nexport const BashProgrammaticToolCallingSchema =\n createBashProgrammaticToolCallingSchema();\n\nexport const BashProgrammaticToolCallingName =\n Constants.BASH_PROGRAMMATIC_TOOL_CALLING;\n\nexport const BashProgrammaticToolCallingDescription = `\nRun tools via bash code. Tools are available as bash functions that accept JSON string arguments.\n\n${STATELESS_WARNING}\n\n${CORE_RULES}\n${ADDITIONAL_RULES}\n\nWhen to use: shell pipelines, parallel execution (& and wait), file processing, text manipulation.\n\n${EXAMPLES}\n`.trim();\n\nexport const BashProgrammaticToolCallingDefinition = {\n name: BashProgrammaticToolCallingName,\n description: BashProgrammaticToolCallingDescription,\n schema: BashProgrammaticToolCallingSchema,\n} as const;\n\nfunction maybeParseJsonResultString(result: unknown): unknown {\n if (typeof result !== 'string') {\n return result;\n }\n\n const trimmed = result.trim();\n if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {\n return result;\n }\n\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return result;\n }\n}\n\nexport function normalizeBashToolResultsForReplay(\n toolResults: t.PTCToolResult[]\n): t.PTCToolResult[] {\n return toolResults.map((toolResult) => {\n if (toolResult.is_error) {\n return toolResult;\n }\n\n return {\n ...toolResult,\n result: maybeParseJsonResultString(toolResult.result),\n };\n });\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Normalizes a tool name to a valid bash function identifier.\n * 1. Replace hyphens, spaces, dots with underscores\n * 2. Remove any other invalid characters\n * 3. Prefix with underscore if starts with number\n * 4. Append `_tool` if it's a bash reserved word\n */\nexport function normalizeToBashIdentifier(name: string): string {\n let normalized = name.replace(/[-\\s.]/g, '_');\n normalized = normalized.replace(/[^a-zA-Z0-9_]/g, '');\n\n if (/^[0-9]/.test(normalized)) {\n normalized = '_' + normalized;\n }\n\n if (BASH_RESERVED.has(normalized)) {\n normalized = normalized + '_tool';\n }\n\n return normalized;\n}\n\n/**\n * Extracts tool names that are actually called in the bash code.\n * Bash functions are invoked as commands (no parentheses), so we match\n * the normalized name as a word boundary.\n */\nexport function extractUsedBashToolNames(\n code: string,\n toolNameMap: Map<string, string>\n): Set<string> {\n const usedTools = new Set<string>();\n\n for (const [bashName, originalName] of toolNameMap) {\n const escapedName = bashName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const pattern = new RegExp(`\\\\b${escapedName}\\\\b`, 'g');\n\n if (pattern.test(code)) {\n usedTools.add(originalName);\n }\n }\n\n return usedTools;\n}\n\n/**\n * Filters tool definitions to only include tools actually used in the bash code.\n */\nexport function filterBashToolsByUsage(\n toolDefs: t.LCTool[],\n code: string,\n debug = false\n): t.LCTool[] {\n const toolNameMap = new Map<string, string>();\n for (const def of toolDefs) {\n const bashName = normalizeToBashIdentifier(def.name);\n toolNameMap.set(bashName, def.name);\n }\n\n const usedToolNames = extractUsedBashToolNames(code, toolNameMap);\n\n if (debug) {\n // eslint-disable-next-line no-console\n console.log(\n `[BashPTC Debug] Tool filtering: found ${usedToolNames.size}/${toolDefs.length} tools in code`\n );\n if (usedToolNames.size > 0) {\n // eslint-disable-next-line no-console\n console.log(\n `[BashPTC Debug] Matched tools: ${Array.from(usedToolNames).join(', ')}`\n );\n }\n }\n\n if (usedToolNames.size === 0) {\n if (debug) {\n // eslint-disable-next-line no-console\n console.log(\n '[BashPTC Debug] No tools detected in code - sending all tools as fallback'\n );\n }\n return toolDefs;\n }\n\n return toolDefs.filter((def) => usedToolNames.has(def.name));\n}\n\n// ============================================================================\n// Tool Factory\n// ============================================================================\n\n/**\n * Creates a Bash Programmatic Tool Calling tool for multi-tool orchestration.\n *\n * This tool enables AI agents to write bash scripts that orchestrate multiple\n * tool calls programmatically via the remote Code API, reducing LLM round-trips.\n *\n * The tool map must be provided at runtime via config.toolCall (injected by ToolNode).\n */\nexport function createBashProgrammaticToolCallingTool(\n initParams: t.BashProgrammaticToolCallingParams = {}\n): DynamicStructuredTool {\n const baseUrl = initParams.baseUrl ?? getCodeBaseURL();\n const maxRoundTrips = initParams.maxRoundTrips ?? DEFAULT_MAX_ROUND_TRIPS;\n const maxRunTimeoutMs = resolveCodeApiRunTimeoutMs(initParams.runTimeoutMs);\n const proxy = initParams.proxy ?? process.env.PROXY;\n const debug = initParams.debug ?? process.env.BASH_PTC_DEBUG === 'true';\n const EXEC_ENDPOINT = `${baseUrl}/exec/programmatic`;\n\n return tool(\n async (rawParams, config) => {\n const params = rawParams as { code: string; timeout?: number };\n const { code } = params;\n const timeout = clampCodeApiRunTimeoutMs(params.timeout, maxRunTimeoutMs);\n\n const toolCall = (config.toolCall ?? {}) as ToolCall &\n Partial<t.ProgrammaticCache> & {\n session_id?: string;\n _injected_files?: t.CodeEnvFile[];\n _runtime_session_hint?: string;\n };\n const {\n toolMap,\n toolDefs,\n session_id,\n _injected_files,\n _runtime_session_hint,\n } = toolCall;\n\n if (toolMap == null || toolMap.size === 0) {\n throw new Error(\n 'No toolMap provided. ' +\n 'ToolNode should inject this from AgentContext when invoked through the graph.'\n );\n }\n\n if (toolDefs == null || toolDefs.length === 0) {\n throw new Error(\n 'No tool definitions provided. ' +\n 'Either pass tools in the input or ensure ToolNode injects toolDefs.'\n );\n }\n\n let roundTrip = 0;\n\n try {\n // ====================================================================\n // Phase 1: Filter tools and make initial request\n // ====================================================================\n\n const effectiveTools = filterBashToolsByUsage(toolDefs, code, debug);\n\n if (debug) {\n // eslint-disable-next-line no-console\n console.log(\n `[BashPTC Debug] Sending ${effectiveTools.length} tools to API ` +\n `(filtered from ${toolDefs.length})`\n );\n }\n\n /* `/files/<session_id>` HTTP fallback removed — codeapi's\n * sessionAuth requires kind/id query params unavailable at\n * this point. See `CodeExecutor.ts` for full rationale. */\n let files: t.CodeEnvFile[] | undefined;\n if (_injected_files && _injected_files.length > 0) {\n files = _injected_files;\n } else if (session_id != null && session_id.length > 0) {\n // eslint-disable-next-line no-console\n console.debug(\n `[BashProgrammaticToolCalling] No injected files for session_id=${session_id} — exec will run without input files`\n );\n }\n\n /* Stateful sessions: hint on the INITIAL request only (continuations\n * bind via continuation_token). Wire-only in v1 — BashPTC keeps its\n * stateless prompt. */\n const runtimeSessionHint =\n typeof _runtime_session_hint === 'string' &&\n _runtime_session_hint !== ''\n ? _runtime_session_hint\n : undefined;\n\n let response = await makeRequest(\n EXEC_ENDPOINT,\n {\n lang: 'bash',\n code,\n tools: effectiveTools,\n session_id,\n timeout,\n ...(files && files.length > 0 ? { files } : {}),\n ...(runtimeSessionHint != null\n ? { runtime_session_hint: runtimeSessionHint }\n : {}),\n },\n proxy,\n initParams.authHeaders\n );\n\n // ====================================================================\n // Phase 2: Handle response loop\n // ====================================================================\n\n while (response.status === 'tool_call_required') {\n roundTrip++;\n\n if (roundTrip > maxRoundTrips) {\n throw new Error(\n `Exceeded maximum round trips (${maxRoundTrips}). ` +\n 'This may indicate an infinite loop, excessive tool calls, ' +\n 'or a logic error in your code.'\n );\n }\n\n if (debug) {\n // eslint-disable-next-line no-console\n console.log(\n `[BashPTC Debug] Round trip ${roundTrip}: ${response.tool_calls?.length ?? 0} tool(s) to execute`\n );\n }\n\n const toolResults = normalizeBashToolResultsForReplay(\n await executeTools(\n response.tool_calls ?? [],\n toolMap,\n Constants.BASH_PROGRAMMATIC_TOOL_CALLING\n )\n );\n\n response = await makeRequest(\n EXEC_ENDPOINT,\n {\n continuation_token: response.continuation_token,\n tool_results: toolResults,\n },\n proxy,\n initParams.authHeaders\n );\n }\n\n // ====================================================================\n // Phase 3: Handle final state\n // ====================================================================\n\n if (response.status === 'completed') {\n return formatCompletedResponse(response, code);\n }\n\n if (response.status === 'error') {\n throw new Error(buildCodeApiExecutionErrorMessage(response));\n }\n\n throw new CodeApiRequestError();\n } catch (error) {\n const messageWithReminder = appendFailedExecutionFileReminder(\n (error as Error).message,\n code\n );\n throw new Error(\n `Bash programmatic execution failed: ${messageWithReminder}`\n );\n }\n },\n {\n name: Constants.BASH_PROGRAMMATIC_TOOL_CALLING,\n description: BashProgrammaticToolCallingDescription,\n schema: createBashProgrammaticToolCallingSchema(maxRunTimeoutMs),\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BashProgrammaticToolCalling.mjs","names":[],"sources":["../../../src/tools/BashProgrammaticToolCalling.ts"],"mappings":";;;;;;;;;AA0BA,OAAO;AAMP,MAAM,0BAA0B;AAChC,MAAM,yBAAyB,2BAA2B;AAG1D,MAAM,gBAAgB,IAAI,IAAI;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAMD,MAAM,oBAAoB;;;;AAK1B,MAAM,aAAa;;;;;;;IAOf,4BAA4B;IAC5B,oBAAoB;;AAGxB,MAAM,mBACJ;AAEF,MAAM,WAAW;;;;;;;;;;;AAYjB,MAAM,yBAAyB;;EAE7B,kBAAkB;;;;;EAKlB,SAAS;;EAET;AAMF,SAAgB,wCACd,kBAAkB,wBACiB;CACnC,OAAO;EACL,MAAM;EACN,YAAY;GACV,QAAQ,EAAE,GAAG,gBAAgB;GAC7B,MAAM;IACJ,MAAM;IACN,WAAW;IACX,aAAa;GACf;GACA,SAAS,8BAA8B,eAAe;EACxD;EACA,UAAU,CAAC,MAAM;CACnB;AACF;AAEA,MAAa,oCACX,wCAAwC;AAE1C,MAAa,kCAAA;AAGb,MAAa,yCAAyC;;;EAGpD,kBAAkB;;EAElB,WAAW;EACX,iBAAiB;;;;EAIjB,SAAS;EACT,KAAK;AAEP,MAAa,wCAAwC;CACnD,MAAM;CACN,aAAa;CACb,QAAQ;AACV;AAEA,SAAS,2BAA2B,QAA0B;CAC5D,IAAI,OAAO,WAAW,UACpB,OAAO;CAGT,MAAM,UAAU,OAAO,KAAK;CAC5B,IAAI,CAAC,QAAQ,WAAW,GAAG,KAAK,CAAC,QAAQ,WAAW,GAAG,GACrD,OAAO;CAGT,IAAI;EACF,OAAO,KAAK,MAAM,OAAO;CAC3B,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,kCACd,aACmB;CACnB,OAAO,YAAY,KAAK,eAAe;EACrC,IAAI,WAAW,UACb,OAAO;EAGT,OAAO;GACL,GAAG;GACH,QAAQ,2BAA2B,WAAW,MAAM;EACtD;CACF,CAAC;AACH;AAaA,SAAgB,0BAA0B,MAAsB;CAC9D,IAAI,aAAa,KAAK,QAAQ,WAAW,GAAG;CAC5C,aAAa,WAAW,QAAQ,kBAAkB,EAAE;CAEpD,IAAI,SAAS,KAAK,UAAU,GAC1B,aAAa,MAAM;CAGrB,IAAI,cAAc,IAAI,UAAU,GAC9B,aAAa,aAAa;CAG5B,OAAO;AACT;AAOA,SAAgB,yBACd,MACA,aACa;CACb,MAAM,4BAAY,IAAI,IAAY;CAElC,KAAK,MAAM,CAAC,UAAU,iBAAiB,aAAa;EAClD,MAAM,cAAc,SAAS,QAAQ,uBAAuB,MAAM;EAGlE,IAAI,IAFgB,OAAO,MAAM,YAAY,MAAM,GAEzC,CAAC,CAAC,KAAK,IAAI,GACnB,UAAU,IAAI,YAAY;CAE9B;CAEA,OAAO;AACT;AAKA,SAAgB,uBACd,UACA,MACA,QAAQ,OACI;CACZ,MAAM,8BAAc,IAAI,IAAoB;CAC5C,KAAK,MAAM,OAAO,UAAU;EAC1B,MAAM,WAAW,0BAA0B,IAAI,IAAI;EACnD,YAAY,IAAI,UAAU,IAAI,IAAI;CACpC;CAEA,MAAM,gBAAgB,yBAAyB,MAAM,WAAW;CAEhE,IAAI,OAAO;EAET,QAAQ,IACN,yCAAyC,cAAc,KAAK,GAAG,SAAS,OAAO,eACjF;EACA,IAAI,cAAc,OAAO,GAEvB,QAAQ,IACN,kCAAkC,MAAM,KAAK,aAAa,CAAC,CAAC,KAAK,IAAI,GACvE;CAEJ;CAEA,IAAI,cAAc,SAAS,GAAG;EAC5B,IAAI,OAEF,QAAQ,IACN,2EACF;EAEF,OAAO;CACT;CAEA,OAAO,SAAS,QAAQ,QAAQ,cAAc,IAAI,IAAI,IAAI,CAAC;AAC7D;AAcA,SAAgB,sCACd,aAAkD,CAAC,GAC5B;CACvB,MAAM,UAAU,WAAW,WAAW,eAAe;CACrD,MAAM,gBAAgB,WAAW,iBAAiB;CAClD,MAAM,kBAAkB,2BAA2B,WAAW,YAAY;CAC1E,MAAM,QAAQ,WAAW,SAAS,QAAQ,IAAI;CAC9C,MAAM,QAAQ,WAAW,SAAS,QAAQ,IAAI,mBAAmB;CACjE,MAAM,gBAAgB,GAAG,QAAQ;CAEjC,OAAO,KACL,OAAO,WAAW,WAAW;EAC3B,MAAM,SAAS;EACf,MAAM,EAAE,SAAS;EACjB,MAAM,UAAU,yBAAyB,OAAO,SAAS,eAAe;EAQxE,MAAM,EACJ,SACA,UACA,YACA,iBACA,0BAXgB,OAAO,YAAY,CAAC;EActC,IAAI,WAAW,QAAQ,QAAQ,SAAS,GACtC,MAAM,IAAI,MACR,oGAEF;EAGF,IAAI,YAAY,QAAQ,SAAS,WAAW,GAC1C,MAAM,IAAI,MACR,mGAEF;EAGF,IAAI,YAAY;EAEhB,IAAI;GAKF,MAAM,iBAAiB,uBAAuB,UAAU,MAAM,KAAK;GAEnE,IAAI,OAEF,QAAQ,IACN,2BAA2B,eAAe,OAAO,+BAC7B,SAAS,OAAO,EACtC;GAMF,IAAI;GACJ,IAAI,mBAAmB,gBAAgB,SAAS,GAC9C,QAAQ;QACH,IAAI,cAAc,QAAQ,WAAW,SAAS,GAEnD,QAAQ,MACN,kEAAkE,WAAW,qCAC/E;GAMF,MAAM,qBACJ,OAAO,0BAA0B,YACjC,0BAA0B,KACtB,wBACA,KAAA;GAEN,IAAI,WAAW,MAAM,YACnB,eACA;IACE,MAAM;IACN;IACA,OAAO;IACP;IACA;IACA,GAAI,SAAS,MAAM,SAAS,IAAI,EAAE,MAAM,IAAI,CAAC;IAC7C,GAAI,sBAAsB,OACtB,EAAE,sBAAsB,mBAAmB,IAC3C,CAAC;GACP,GACA,OACA,WAAW,WACb;GAMA,OAAO,SAAS,WAAW,sBAAsB;IAC/C;IAEA,IAAI,YAAY,eACd,MAAM,IAAI,MACR,iCAAiC,cAAc,4FAGjD;IAGF,IAAI,OAEF,QAAQ,IACN,8BAA8B,UAAU,IAAI,SAAS,YAAY,UAAU,EAAE,oBAC/E;IAGF,MAAM,cAAc,kCAClB,MAAM,aACJ,SAAS,cAAc,CAAC,GACxB,SAAA,qBAEF,CACF;IAEA,WAAW,MAAM,YACf,eACA;KACE,oBAAoB,SAAS;KAC7B,cAAc;IAChB,GACA,OACA,WAAW,WACb;GACF;GAMA,IAAI,SAAS,WAAW,aACtB,OAAO,wBAAwB,UAAU,IAAI;GAG/C,IAAI,SAAS,WAAW,SACtB,MAAM,IAAI,MAAM,kCAAkC,QAAQ,CAAC;GAG7D,MAAM,IAAI,oBAAoB;EAChC,SAAS,OAAO;GACd,MAAM,sBAAsB,kCACzB,MAAgB,SACjB,IACF;GACA,MAAM,IAAI,MACR,uCAAuC,qBACzC;EACF;CACF,GACA;EACE,MAAA;EACA,aAAa;EACb,QAAQ,wCAAwC,eAAe;EAC/D,gBAAA;CACF,CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"Calculator.mjs","names":[],"sources":["../../../src/tools/Calculator.ts"],"sourcesContent":["import * as math from 'mathjs';\nimport { Tool } from '@langchain/core/tools';\n\nexport const CalculatorToolName = 'calculator';\n\nexport const CalculatorToolDescription =\n 'Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.';\n\nexport const CalculatorSchema = {\n type: 'object',\n properties: {\n input: {\n type: 'string',\n description: 'A valid mathematical expression to evaluate',\n },\n },\n required: ['input'],\n} as const;\n\nexport const CalculatorToolDefinition = {\n name: CalculatorToolName,\n description: CalculatorToolDescription,\n schema: CalculatorSchema,\n} as const;\n\nexport class Calculator extends Tool {\n static lc_name(): string {\n return 'Calculator';\n }\n\n get lc_namespace(): string[] {\n return [...super.lc_namespace, 'calculator'];\n }\n\n name = CalculatorToolName;\n\n async _call(input: string): Promise<string> {\n try {\n return math.evaluate(input).toString();\n } catch {\n return 'I don\\'t know how to do that.';\n }\n }\n\n description = CalculatorToolDescription;\n}\n"],"mappings":";;;AAGA,MAAa,qBAAqB;AAElC,MAAa,4BACX;AAEF,MAAa,mBAAmB;CAC9B,MAAM;CACN,YAAY,EACV,OAAO;EACL,MAAM;EACN,aAAa;CACf,EACF;CACA,UAAU,CAAC,OAAO;AACpB;AAEA,MAAa,2BAA2B;CACtC,MAAM;CACN,aAAa;CACb,QAAQ;AACV;AAEA,IAAa,aAAb,cAAgC,KAAK;CACnC,OAAO,UAAkB;EACvB,OAAO;CACT;CAEA,IAAI,eAAyB;EAC3B,OAAO,CAAC,GAAG,MAAM,cAAc,YAAY;CAC7C;CAEA,OAAO;CAEP,MAAM,MAAM,OAAgC;EAC1C,IAAI;GACF,OAAO,KAAK,SAAS,KAAK,CAAC,CAAC,SAAS;EACvC,QAAQ;GACN,OAAO;EACT;CACF;CAEA,cAAc;AAChB"}
1
+ {"version":3,"file":"Calculator.mjs","names":[],"sources":["../../../src/tools/Calculator.ts"],"mappings":";;;AAGA,MAAa,qBAAqB;AAElC,MAAa,4BACX;AAEF,MAAa,mBAAmB;CAC9B,MAAM;CACN,YAAY,EACV,OAAO;EACL,MAAM;EACN,aAAa;CACf,EACF;CACA,UAAU,CAAC,OAAO;AACpB;AAEA,MAAa,2BAA2B;CACtC,MAAM;CACN,aAAa;CACb,QAAQ;AACV;AAEA,IAAa,aAAb,cAAgC,KAAK;CACnC,OAAO,UAAkB;EACvB,OAAO;CACT;CAEA,IAAI,eAAyB;EAC3B,OAAO,CAAC,GAAG,MAAM,cAAc,YAAY;CAC7C;CAEA,OAAO;CAEP,MAAM,MAAM,OAAgC;EAC1C,IAAI;GACF,OAAO,KAAK,SAAS,KAAK,CAAC,CAAC,SAAS;EACvC,QAAQ;GACN,OAAO;EACT;CACF;CAEA,cAAc;AAChB"}
@@ -151,14 +151,6 @@ Usage:
151
151
  - ${CODE_ARTIFACT_PATH_GUIDANCE}
152
152
  - NEVER use this tool to execute malicious code.
153
153
  `.trim();
154
- /**
155
- * Statefulness here is FILESYSTEM-tier, not runtime-tier. Executions in a
156
- * session reuse one warm machine, so `/mnt/data` carries across calls — but
157
- * every execution is a brand-new interpreter process in a fresh sandbox, so
158
- * variables and imports never survive. The note must not imply otherwise: a
159
- * model told its in-memory state persists writes `df = ...` in one call and
160
- * `df.head()` in the next, then hits a NameError it was told to treat as rare.
161
- */
162
154
  const STATEFUL_ENV_NOTE = "Session state: executions in this conversation run on the same warm machine, so files persist between calls — but each execution is a NEW process. Variables, imports, and in-memory data NEVER carry over: every call must re-import and rebuild the state it needs. Only /mnt/data is durable (the machine itself may also be reset at any time), so write anything that must survive there and read it back next call.";
163
155
  const StatefulCodeExecutionToolDescription = `
164
156
  Runs code and returns stdout/stderr output. Executions in this conversation share one warm machine with a persistent /mnt/data, but each execution runs as a separate process (not a notebook-style kernel).
@@ -200,11 +192,6 @@ function createCodeExecutionTool(params = {}) {
200
192
  return tool(async (rawInput, config) => {
201
193
  const { authHeaders, statefulSessions: _statefulSessions, ...executionParams } = params ?? {};
202
194
  const { lang, code, intent: _ignoredIntent, runtime_session_hint: _ignoredModelHint, ...rest } = rawInput;
203
- /**
204
- * Extract session context from config.toolCall (injected by ToolNode).
205
- * - session_id: associates with the previous run.
206
- * - _injected_files: File refs to pass directly (avoids /files endpoint race condition).
207
- */
208
195
  const { session_id, _injected_files, _runtime_session_hint } = config.toolCall ?? {};
209
196
  const postData = {
210
197
  lang,
@@ -1 +1 @@
1
- {"version":3,"file":"CodeExecutor.mjs","names":[],"sources":["../../../src/tools/CodeExecutor.ts"],"sourcesContent":["import { config } from 'dotenv';\nimport fetch, { RequestInit } from 'node-fetch';\nimport { getEnvironmentVariable } from '@langchain/core/utils/env';\nimport { tool, DynamicStructuredTool } from '@langchain/core/tools';\nimport type * as t from '@/types';\nimport { appendCodeSessionFileSummary } from '@/tools/CodeSessionFileSummary';\nimport { resolveFetchProxyAgent } from '@/utils/proxy';\nimport { INTENT_PROPERTY } from '@/tools/intentArg';\nimport { EnvVar, Constants } from '@/common';\n\nexport {\n appendCodeSessionFileSummary,\n stripCodeSessionFileSummary,\n} from '@/tools/CodeSessionFileSummary';\n\nconfig();\n\nexport const getCodeBaseURL = (): string =>\n getEnvironmentVariable(EnvVar.CODE_BASEURL) ??\n Constants.OFFICIAL_CODE_BASEURL;\n\nexport const emptyOutputMessage =\n 'stdout: Empty. Ensure you\\'re writing output explicitly.\\n';\n\nexport const CODE_ARTIFACT_PATH_GUIDANCE =\n 'Anything a later call needs (data, helper scripts/modules, partial results) MUST be written under `/mnt/data` in the same call that produces it; `/tmp` never survives the call. `/mnt/data` keeps files with recognized extensions, covering common source, text, data, document, image, and archive formats (.py/.sh/.sql/.md/.json/.csv/.parquet/.png/.pdf/.zip and similar); extensionless or unusual extensions are not kept. Failed executions register nothing; fix the error and rerun before relying on new files.';\n\nexport const BASH_SHELL_GUIDANCE =\n 'Bash: multi-line files use heredoc/printf; run Python via python3 -c/heredoc, not bare Python.';\n\nconst TMP_PATH_PATTERN = /(^|[^A-Za-z0-9_])\\/tmp(?:\\/|\\b)/;\nconst MNT_DATA_PATH_PATTERN = /(^|[^A-Za-z0-9_])\\/mnt\\/data(?:\\/|\\b)/;\n\nexport const TMP_SCRATCH_OUTPUT_REMINDER =\n 'Note: /tmp files are same-call scratch only and were not persisted; use /mnt/data for files needed later.';\n\nexport const FAILED_EXECUTION_FILE_REMINDER =\n 'Note: any files written during this failed call were not registered for later calls; fix the error and rerun before relying on them.';\n\nexport function appendTmpScratchReminder(output: string, code: string): string {\n if (!TMP_PATH_PATTERN.test(code)) {\n return output;\n }\n return `${output.trimEnd()}\\n${TMP_SCRATCH_OUTPUT_REMINDER}\\n`;\n}\n\nexport function appendFailedExecutionFileReminder(\n output: string,\n code: string\n): string {\n if (\n !MNT_DATA_PATH_PATTERN.test(code) ||\n output.includes(FAILED_EXECUTION_FILE_REMINDER)\n ) {\n return output;\n }\n return `${output.trimEnd()}\\n${FAILED_EXECUTION_FILE_REMINDER}\\n`;\n}\n\nconst SUPPORTED_LANGUAGES = [\n 'py',\n 'js',\n 'ts',\n 'c',\n 'cpp',\n 'java',\n 'php',\n 'rs',\n 'go',\n 'd',\n 'f90',\n 'r',\n 'bash',\n] as const;\n\nexport const CodeExecutionToolSchema = {\n type: 'object',\n properties: {\n intent: { ...INTENT_PROPERTY },\n lang: {\n type: 'string',\n enum: SUPPORTED_LANGUAGES,\n description:\n 'The programming language or runtime to execute the code in.',\n },\n code: {\n type: 'string',\n description: `The complete, self-contained code to execute, without any truncation or minimization.\n- The environment is stateless; variables and imports don't persist between executions.\n- Prior /mnt/data files are available and can be modified in place.\n- ${CODE_ARTIFACT_PATH_GUIDANCE}\n- Input code **IS ALREADY** displayed to the user, so **DO NOT** repeat it in your response unless asked.\n- Output code **IS NOT** displayed to the user, so **DO** write all desired output explicitly.\n- IMPORTANT: You MUST explicitly print/output ALL results you want the user to see.\n- py: This is not a Jupyter notebook environment. Use \\`print()\\` for all outputs.\n- py: Matplotlib: Use \\`plt.savefig()\\` to save plots as files.\n- js: use the \\`console\\` or \\`process\\` methods for all outputs.\n- r: IMPORTANT: No X11 display available. ALL graphics MUST use Cairo library (library(Cairo)).\n- Other languages: use appropriate output functions.`,\n },\n args: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional arguments to execute the code with. This should only be used if the input code requires additional arguments to run.',\n },\n },\n required: ['lang', 'code'],\n} as const;\n\nconst baseEndpoint = getCodeBaseURL();\nconst EXEC_ENDPOINT = `${baseEndpoint}/exec`;\n\ntype SupportedLanguage = (typeof SUPPORTED_LANGUAGES)[number];\n\nconst MAX_RETRY_AFTER_SECONDS = 3600;\n\nexport const CODE_API_UNAVAILABLE_ERROR_MESSAGE =\n 'Code execution is temporarily unavailable. Please retry.';\nexport const CODE_API_AUTHORIZATION_ERROR_MESSAGE =\n 'Code execution is not authorized. Verify access before trying again.';\nexport const CODE_API_EXECUTION_FAILED_ERROR_MESSAGE = 'Code execution failed.';\nexport const CODE_API_INVALID_REQUEST_ERROR_MESSAGE =\n 'The code execution request was rejected. Please check the tool input and try again.';\nexport const CODE_API_RATE_LIMITED_ERROR_MESSAGE =\n 'Code execution is temporarily rate-limited. Please retry shortly.';\n\nconst SAFE_CODE_API_EXECUTION_ERROR_DETAILS: Readonly<\n Partial<Record<string, string>>\n> = {\n 'Execution failed or timed out': 'Execution failed or timed out.',\n 'Out of memory': 'Execution exceeded the memory limit.',\n 'Time limit exceeded': 'Execution exceeded the time limit.',\n 'sandbox emitted an empty pending tool call block; aborting to avoid a tight retry loop':\n 'Generated code emitted an invalid empty tool request.',\n 'stderr length exceeded': 'Execution error output exceeded the size limit.',\n 'stdout length exceeded': 'Execution output exceeded the size limit.',\n};\n\nexport class CodeApiRequestError extends Error {\n constructor(message = CODE_API_UNAVAILABLE_ERROR_MESSAGE) {\n super(message);\n this.name = 'CodeApiRequestError';\n }\n}\n\nfunction getRetryAfterSeconds(responseBody: string): number | undefined {\n try {\n const parsed = JSON.parse(responseBody) as {\n error?: unknown;\n retry_after_seconds?: unknown;\n };\n if (\n parsed.error !== 'rate_limited' ||\n typeof parsed.retry_after_seconds !== 'number' ||\n !Number.isFinite(parsed.retry_after_seconds) ||\n parsed.retry_after_seconds <= 0\n ) {\n return undefined;\n }\n return Math.min(\n Math.ceil(parsed.retry_after_seconds),\n MAX_RETRY_AFTER_SECONDS\n );\n } catch {\n return undefined;\n }\n}\n\nexport function normalizeCodeApiRequestError(\n error: unknown\n): CodeApiRequestError {\n return error instanceof CodeApiRequestError\n ? error\n : new CodeApiRequestError();\n}\n\nfunction getSafeCodeApiExecutionErrorDetail(\n error: unknown\n): string | undefined {\n if (typeof error !== 'string') {\n return undefined;\n }\n const exactMatch = SAFE_CODE_API_EXECUTION_ERROR_DETAILS[error];\n if (exactMatch != null) {\n return exactMatch;\n }\n if (/^Sandbox exited with code (?:-?\\d{1,4}|unknown)$/.test(error)) {\n return error.replace(/^Sandbox/, 'Execution');\n }\n if (/^Sandbox requested an unregistered tool: .+$/.test(error)) {\n return 'Generated code requested a tool that is not available.';\n }\n return undefined;\n}\n\nexport function buildCodeApiExecutionErrorMessage(response: {\n error?: unknown;\n stderr?: unknown;\n}): string {\n const safeDetail = getSafeCodeApiExecutionErrorDetail(response.error);\n const message =\n safeDetail != null\n ? `${CODE_API_EXECUTION_FAILED_ERROR_MESSAGE} ${safeDetail}`\n : CODE_API_EXECUTION_FAILED_ERROR_MESSAGE;\n if (typeof response.stderr === 'string' && response.stderr !== '') {\n return `${message}\\n\\nStderr:\\n${response.stderr}`;\n }\n return message;\n}\n\nexport async function resolveCodeApiAuthHeaders(\n authHeaders?: t.CodeApiAuthHeaders\n): Promise<t.CodeApiAuthHeaderMap> {\n if (authHeaders == null) {\n return {};\n }\n if (typeof authHeaders === 'function') {\n try {\n const resolvedHeaders = await authHeaders();\n return resolvedHeaders;\n } catch {\n throw new CodeApiRequestError(CODE_API_AUTHORIZATION_ERROR_MESSAGE);\n }\n }\n return authHeaders;\n}\n\nexport async function buildCodeApiHttpErrorMessage(\n _method: string,\n _endpoint: string,\n response: { status: number; text: () => Promise<string> }\n): Promise<string> {\n let responseBody = '';\n try {\n responseBody = await response.text();\n } catch {\n responseBody = '';\n }\n if (response.status === 429) {\n const retryAfterSeconds = getRetryAfterSeconds(responseBody);\n return retryAfterSeconds != null\n ? `Code execution is temporarily rate-limited. Retry after ${retryAfterSeconds} seconds.`\n : CODE_API_RATE_LIMITED_ERROR_MESSAGE;\n }\n if (response.status === 401 || response.status === 403) {\n return CODE_API_AUTHORIZATION_ERROR_MESSAGE;\n }\n if (response.status === 400 || response.status === 422) {\n return CODE_API_INVALID_REQUEST_ERROR_MESSAGE;\n }\n return CODE_API_UNAVAILABLE_ERROR_MESSAGE;\n}\n\nexport const CodeExecutionToolDescription = `\nRuns code and returns stdout/stderr output from a stateless execution environment, similar to running scripts in a command-line interface. Each execution is isolated and independent.\n\nUsage:\n- No network access available.\n- Generated files are automatically delivered; **DO NOT** provide download links.\n- ${CODE_ARTIFACT_PATH_GUIDANCE}\n- NEVER use this tool to execute malicious code.\n`.trim();\n\n/**\n * Statefulness here is FILESYSTEM-tier, not runtime-tier. Executions in a\n * session reuse one warm machine, so `/mnt/data` carries across calls — but\n * every execution is a brand-new interpreter process in a fresh sandbox, so\n * variables and imports never survive. The note must not imply otherwise: a\n * model told its in-memory state persists writes `df = ...` in one call and\n * `df.head()` in the next, then hits a NameError it was told to treat as rare.\n */\nexport const STATEFUL_ENV_NOTE =\n 'Session state: executions in this conversation run on the same warm machine, so files persist between calls — but each execution is a NEW process. Variables, imports, and in-memory data NEVER carry over: every call must re-import and rebuild the state it needs. Only /mnt/data is durable (the machine itself may also be reset at any time), so write anything that must survive there and read it back next call.';\n\nexport const StatefulCodeExecutionToolDescription = `\nRuns code and returns stdout/stderr output. Executions in this conversation share one warm machine with a persistent /mnt/data, but each execution runs as a separate process (not a notebook-style kernel).\n\n${STATEFUL_ENV_NOTE}\n\nUsage:\n- No network access available.\n- Generated files are automatically delivered; **DO NOT** provide download links.\n- ${CODE_ARTIFACT_PATH_GUIDANCE}\n- NEVER use this tool to execute malicious code.\n`.trim();\n\nexport function buildCodeExecutionToolDescription(opts?: {\n statefulSessions?: boolean;\n}): string {\n return opts?.statefulSessions === true\n ? StatefulCodeExecutionToolDescription\n : CodeExecutionToolDescription;\n}\n\nconst STATELESS_CODE_PARAM_NOTE =\n 'The environment is stateless; variables and imports don\\'t persist between executions.';\nconst STATEFUL_CODE_PARAM_NOTE =\n 'Executions in this conversation share one warm machine, so files written to /mnt/data persist between calls. Each execution is a new process: variables and imports do NOT carry over — re-import and reload from /mnt/data every call.';\n\nexport function buildCodeExecutionToolSchema(opts?: {\n statefulSessions?: boolean;\n}): typeof CodeExecutionToolSchema {\n const note =\n opts?.statefulSessions === true\n ? STATEFUL_CODE_PARAM_NOTE\n : STATELESS_CODE_PARAM_NOTE;\n const codeDescription =\n CodeExecutionToolSchema.properties.code.description.replace(\n STATELESS_CODE_PARAM_NOTE,\n note\n );\n return {\n ...CodeExecutionToolSchema,\n properties: {\n ...CodeExecutionToolSchema.properties,\n code: {\n ...CodeExecutionToolSchema.properties.code,\n description: codeDescription,\n },\n },\n } as typeof CodeExecutionToolSchema;\n}\n\nexport const CodeExecutionToolName = Constants.EXECUTE_CODE;\n\nexport const CodeExecutionToolDefinition = {\n name: CodeExecutionToolName,\n description: CodeExecutionToolDescription,\n schema: CodeExecutionToolSchema,\n} as const;\n\nfunction createCodeExecutionTool(\n params: t.CodeExecutionToolParams | null = {}\n): DynamicStructuredTool {\n return tool(\n async (rawInput, config) => {\n /* `statefulSessions` is a prompt-only flag (drives the description);\n * keep it out of the wire body. */\n const {\n authHeaders,\n statefulSessions: _statefulSessions,\n ...executionParams\n } = params ?? {};\n void _statefulSessions;\n /* Drop any model-supplied `runtime_session_hint` from the raw args: the\n * hint is host-controlled and must only ever come from ToolNode's\n * injected `_runtime_session_hint` (below). Spreading `...rest` into\n * postData would otherwise let a tool call opt itself into / pick a\n * stateful runtime even when statefulSessions is off. */\n /* `intent` is a UI display label — never part of the wire body. */\n const {\n lang,\n code,\n intent: _ignoredIntent,\n runtime_session_hint: _ignoredModelHint,\n ...rest\n } = rawInput as {\n lang: SupportedLanguage;\n code: string;\n intent?: unknown;\n runtime_session_hint?: unknown;\n args?: string[];\n };\n void _ignoredModelHint;\n void _ignoredIntent;\n /**\n * Extract session context from config.toolCall (injected by ToolNode).\n * - session_id: associates with the previous run.\n * - _injected_files: File refs to pass directly (avoids /files endpoint race condition).\n */\n const { session_id, _injected_files, _runtime_session_hint } =\n (config.toolCall ?? {}) as {\n session_id?: string;\n _injected_files?: t.CodeEnvFile[];\n _runtime_session_hint?: string;\n };\n\n const postData: Record<string, unknown> = {\n lang,\n code,\n ...rest,\n ...executionParams,\n };\n\n /* Stateful sessions: forward the hint so the Code API can route this\n * execution to a warm per-session runtime. Additive — stateless\n * servers ignore the unknown field. */\n if (\n typeof _runtime_session_hint === 'string' &&\n _runtime_session_hint !== ''\n ) {\n postData.runtime_session_hint = _runtime_session_hint;\n }\n\n /* File injection: `_injected_files` from ToolNode (set when host\n * primes a CodeSessionContext) or `params.files` from tool\n * factory (set by hosts that pre-resolve at construction time).\n * The legacy `/files/<session_id>` HTTP fallback was removed —\n * codeapi's `sessionAuth` middleware now requires kind/id query\n * params the tool can't supply at this point, so the fetch 400'd\n * silently and the catch swallowed the failure. */\n if (_injected_files && _injected_files.length > 0) {\n postData.files = _injected_files;\n } else if (\n session_id != null &&\n session_id.length > 0 &&\n !Array.isArray(postData.files)\n ) {\n // eslint-disable-next-line no-console\n console.debug(\n `[CodeExecutor] No injected files for session_id=${session_id} — exec will run without input files`\n );\n }\n\n try {\n const resolvedAuthHeaders =\n await resolveCodeApiAuthHeaders(authHeaders);\n const fetchOptions: RequestInit = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'User-Agent': 'LibreChat/1.0',\n ...resolvedAuthHeaders,\n },\n body: JSON.stringify(postData),\n };\n\n const proxyAgent = resolveFetchProxyAgent(EXEC_ENDPOINT);\n if (proxyAgent) {\n fetchOptions.agent = proxyAgent;\n }\n const response = await fetch(EXEC_ENDPOINT, fetchOptions);\n if (!response.ok) {\n throw new CodeApiRequestError(\n await buildCodeApiHttpErrorMessage('POST', EXEC_ENDPOINT, response)\n );\n }\n\n const result: t.ExecuteResult = await response.json();\n let formattedOutput = '';\n if (result.stdout) {\n formattedOutput += `stdout:\\n${result.stdout}\\n`;\n } else {\n formattedOutput += emptyOutputMessage;\n }\n if (result.stderr) formattedOutput += `stderr:\\n${result.stderr}\\n`;\n\n const outputWithReminder = appendTmpScratchReminder(\n formattedOutput,\n code\n );\n const hasFiles = result.files != null && result.files.length > 0;\n /* Echo the durable runtime session (stateful backends only) so hosts\n * can surface a \"session active / was reset\" signal later. Additive:\n * absent on stateless servers. */\n const runtimeEcho =\n result.runtime_session_id != null\n ? {\n runtime_session_id: result.runtime_session_id,\n runtime_status: result.runtime_status,\n }\n : {};\n return [\n appendCodeSessionFileSummary(outputWithReminder, result.files),\n (hasFiles\n ? {\n session_id: result.session_id,\n files: result.files,\n ...runtimeEcho,\n }\n : {\n session_id: result.session_id,\n ...runtimeEcho,\n }) satisfies t.CodeExecutionArtifact,\n ];\n } catch (error) {\n const messageWithReminder = appendFailedExecutionFileReminder(\n normalizeCodeApiRequestError(error).message,\n code\n );\n throw new Error(`Execution error:\\n\\n${messageWithReminder}`);\n }\n },\n {\n name: CodeExecutionToolName,\n description: buildCodeExecutionToolDescription(params ?? undefined),\n schema: buildCodeExecutionToolSchema(params ?? undefined),\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\nexport { createCodeExecutionTool };\n"],"mappings":"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"}
1
+ {"version":3,"file":"CodeExecutor.mjs","names":[],"sources":["../../../src/tools/CodeExecutor.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CodeSessionFileSummary.mjs","names":[],"sources":["../../../src/tools/CodeSessionFileSummary.ts"],"sourcesContent":["import type * as t from '@/types';\n\nconst IMAGE_FILE_EXTENSIONS = new Set([\n '.avif',\n '.bmp',\n '.gif',\n '.ico',\n '.jpeg',\n '.jpg',\n '.png',\n '.tif',\n '.tiff',\n '.webp',\n]);\n\nconst CODE_SESSION_FILE_SUMMARY_PATTERN =\n /^Generated files:\\nSession files: \\d+ persisted file\\(s\\) are available in \\/mnt\\/data, including \\d+ image\\(s\\)\\. Use known \\/mnt\\/data paths directly in later code-tool calls\\. The app displays files\\/images automatically; do not invent download links or wrap generated images in Markdown\\.$/;\n\nfunction getFileExtension(name: string): string {\n const lastSlash = name.lastIndexOf('/');\n const basename = lastSlash >= 0 ? name.slice(lastSlash + 1) : name;\n const lastDot = basename.lastIndexOf('.');\n return lastDot >= 0 ? basename.slice(lastDot).toLowerCase() : '';\n}\n\nfunction isImageFile(file: Partial<t.FileRef> | null | undefined): boolean {\n const name = file?.name;\n return (\n typeof name === 'string' &&\n IMAGE_FILE_EXTENSIONS.has(getFileExtension(name))\n );\n}\n\nfunction buildCodeSessionFileSummary(\n fileCount: number,\n imageCount: number\n): string {\n return (\n 'Generated files:\\n' +\n `Session files: ${fileCount} persisted file(s) are available in /mnt/data, including ${imageCount} image(s). ` +\n 'Use known /mnt/data paths directly in later code-tool calls. ' +\n 'The app displays files/images automatically; do not invent download links or wrap generated images in Markdown.'\n );\n}\n\nfunction isGeneratedFile(file: Partial<t.FileRef> | null | undefined): boolean {\n return file?.inherited !== true;\n}\n\nexport function stripCodeSessionFileSummary(output: string): string {\n const summaryStart = output.lastIndexOf('Generated files:');\n if (summaryStart < 0) return output;\n const beforeSummary = output.slice(0, summaryStart);\n if (beforeSummary !== '' && !beforeSummary.endsWith('\\n\\n')) return output;\n const maybeSummary = output.slice(summaryStart);\n if (!CODE_SESSION_FILE_SUMMARY_PATTERN.test(maybeSummary)) return output;\n return beforeSummary.trimEnd();\n}\n\nexport function appendCodeSessionFileSummary(\n output: string,\n files: t.FileRefs | undefined\n): string {\n if (files == null || files.length === 0) {\n return output.trim();\n }\n\n const generatedFiles = files.filter(isGeneratedFile);\n if (generatedFiles.length === 0) {\n return output.trim();\n }\n\n const imageCount = generatedFiles.filter(isImageFile).length;\n const summary = buildCodeSessionFileSummary(\n generatedFiles.length,\n imageCount\n );\n\n return `${output.trimEnd()}\\n\\n${summary}`.trim();\n}\n"],"mappings":";AAEA,MAAM,wBAAwB,IAAI,IAAI;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,oCACJ;AAEF,SAAS,iBAAiB,MAAsB;CAC9C,MAAM,YAAY,KAAK,YAAY,GAAG;CACtC,MAAM,WAAW,aAAa,IAAI,KAAK,MAAM,YAAY,CAAC,IAAI;CAC9D,MAAM,UAAU,SAAS,YAAY,GAAG;CACxC,OAAO,WAAW,IAAI,SAAS,MAAM,OAAO,CAAC,CAAC,YAAY,IAAI;AAChE;AAEA,SAAS,YAAY,MAAsD;CACzE,MAAM,OAAO,MAAM;CACnB,OACE,OAAO,SAAS,YAChB,sBAAsB,IAAI,iBAAiB,IAAI,CAAC;AAEpD;AAEA,SAAS,4BACP,WACA,YACQ;CACR,OACE;iBACkB,UAAU,2DAA2D,WAAW;AAItG;AAEA,SAAS,gBAAgB,MAAsD;CAC7E,OAAO,MAAM,cAAc;AAC7B;AAEA,SAAgB,4BAA4B,QAAwB;CAClE,MAAM,eAAe,OAAO,YAAY,kBAAkB;CAC1D,IAAI,eAAe,GAAG,OAAO;CAC7B,MAAM,gBAAgB,OAAO,MAAM,GAAG,YAAY;CAClD,IAAI,kBAAkB,MAAM,CAAC,cAAc,SAAS,MAAM,GAAG,OAAO;CACpE,MAAM,eAAe,OAAO,MAAM,YAAY;CAC9C,IAAI,CAAC,kCAAkC,KAAK,YAAY,GAAG,OAAO;CAClE,OAAO,cAAc,QAAQ;AAC/B;AAEA,SAAgB,6BACd,QACA,OACQ;CACR,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO,OAAO,KAAK;CAGrB,MAAM,iBAAiB,MAAM,OAAO,eAAe;CACnD,IAAI,eAAe,WAAW,GAC5B,OAAO,OAAO,KAAK;CAGrB,MAAM,aAAa,eAAe,OAAO,WAAW,CAAC,CAAC;CACtD,MAAM,UAAU,4BACd,eAAe,QACf,UACF;CAEA,OAAO,GAAG,OAAO,QAAQ,EAAE,MAAM,UAAU,KAAK;AAClD"}
1
+ {"version":3,"file":"CodeSessionFileSummary.mjs","names":[],"sources":["../../../src/tools/CodeSessionFileSummary.ts"],"mappings":";AAEA,MAAM,wBAAwB,IAAI,IAAI;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,oCACJ;AAEF,SAAS,iBAAiB,MAAsB;CAC9C,MAAM,YAAY,KAAK,YAAY,GAAG;CACtC,MAAM,WAAW,aAAa,IAAI,KAAK,MAAM,YAAY,CAAC,IAAI;CAC9D,MAAM,UAAU,SAAS,YAAY,GAAG;CACxC,OAAO,WAAW,IAAI,SAAS,MAAM,OAAO,CAAC,CAAC,YAAY,IAAI;AAChE;AAEA,SAAS,YAAY,MAAsD;CACzE,MAAM,OAAO,MAAM;CACnB,OACE,OAAO,SAAS,YAChB,sBAAsB,IAAI,iBAAiB,IAAI,CAAC;AAEpD;AAEA,SAAS,4BACP,WACA,YACQ;CACR,OACE;iBACkB,UAAU,2DAA2D,WAAW;AAItG;AAEA,SAAS,gBAAgB,MAAsD;CAC7E,OAAO,MAAM,cAAc;AAC7B;AAEA,SAAgB,4BAA4B,QAAwB;CAClE,MAAM,eAAe,OAAO,YAAY,kBAAkB;CAC1D,IAAI,eAAe,GAAG,OAAO;CAC7B,MAAM,gBAAgB,OAAO,MAAM,GAAG,YAAY;CAClD,IAAI,kBAAkB,MAAM,CAAC,cAAc,SAAS,MAAM,GAAG,OAAO;CACpE,MAAM,eAAe,OAAO,MAAM,YAAY;CAC9C,IAAI,CAAC,kCAAkC,KAAK,YAAY,GAAG,OAAO;CAClE,OAAO,cAAc,QAAQ;AAC/B;AAEA,SAAgB,6BACd,QACA,OACQ;CACR,IAAI,SAAS,QAAQ,MAAM,WAAW,GACpC,OAAO,OAAO,KAAK;CAGrB,MAAM,iBAAiB,MAAM,OAAO,eAAe;CACnD,IAAI,eAAe,WAAW,GAC5B,OAAO,OAAO,KAAK;CAGrB,MAAM,aAAa,eAAe,OAAO,WAAW,CAAC,CAAC;CACtD,MAAM,UAAU,4BACd,eAAe,QACf,UACF;CAEA,OAAO,GAAG,OAAO,QAAQ,EAAE,MAAM,UAAU,KAAK;AAClD"}