@librechat/agents 3.2.21 → 3.2.32

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 (402) hide show
  1. package/dist/cjs/agents/AgentContext.cjs +3 -2
  2. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  3. package/dist/cjs/events.cjs.map +1 -1
  4. package/dist/cjs/graphs/Graph.cjs +200 -54
  5. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  6. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  7. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +13 -7
  8. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  9. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  10. package/dist/cjs/hooks/types.cjs.map +1 -1
  11. package/dist/cjs/instrumentation.cjs +2 -2
  12. package/dist/cjs/instrumentation.cjs.map +1 -1
  13. package/dist/cjs/langfuse.cjs +17 -1
  14. package/dist/cjs/langfuse.cjs.map +1 -1
  15. package/dist/cjs/langfuseToolOutputTracing.cjs +2 -2
  16. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  17. package/dist/cjs/llm/anthropic/index.cjs +1 -1
  18. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  19. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +38 -3
  20. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  21. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +6 -2
  22. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  23. package/dist/cjs/llm/bedrock/index.cjs +2 -2
  24. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  25. package/dist/cjs/llm/bedrock/toolCache.cjs +8 -5
  26. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  27. package/dist/cjs/llm/fake.cjs +16 -14
  28. package/dist/cjs/llm/fake.cjs.map +1 -1
  29. package/dist/cjs/llm/google/index.cjs +22 -0
  30. package/dist/cjs/llm/google/index.cjs.map +1 -1
  31. package/dist/cjs/llm/google/utils/common.cjs +88 -27
  32. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  33. package/dist/cjs/llm/init.cjs +2 -2
  34. package/dist/cjs/llm/invoke.cjs +108 -11
  35. package/dist/cjs/llm/invoke.cjs.map +1 -1
  36. package/dist/cjs/llm/openai/index.cjs +1 -1
  37. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  38. package/dist/cjs/llm/openai/utils/index.cjs +1 -1
  39. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  40. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  41. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  42. package/dist/cjs/main.cjs +1 -0
  43. package/dist/cjs/main.cjs.map +1 -1
  44. package/dist/cjs/messages/cache.cjs +29 -8
  45. package/dist/cjs/messages/cache.cjs.map +1 -1
  46. package/dist/cjs/messages/content.cjs.map +1 -1
  47. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  48. package/dist/cjs/messages/format.cjs +129 -17
  49. package/dist/cjs/messages/format.cjs.map +1 -1
  50. package/dist/cjs/messages/prune.cjs.map +1 -1
  51. package/dist/cjs/messages/reducer.cjs +1 -1
  52. package/dist/cjs/messages/reducer.cjs.map +1 -1
  53. package/dist/cjs/messages/tools.cjs +1 -1
  54. package/dist/cjs/messages/tools.cjs.map +1 -1
  55. package/dist/cjs/openai/index.cjs.map +1 -1
  56. package/dist/cjs/responses/index.cjs.map +1 -1
  57. package/dist/cjs/run.cjs +41 -20
  58. package/dist/cjs/run.cjs.map +1 -1
  59. package/dist/cjs/session/AgentSession.cjs +4 -4
  60. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  61. package/dist/cjs/session/JsonlSessionStore.cjs +2 -2
  62. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  63. package/dist/cjs/session/handlers.cjs +2 -2
  64. package/dist/cjs/session/handlers.cjs.map +1 -1
  65. package/dist/cjs/stream.cjs +248 -25
  66. package/dist/cjs/stream.cjs.map +1 -1
  67. package/dist/cjs/summarization/node.cjs.map +1 -1
  68. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +1 -1
  69. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  70. package/dist/cjs/tools/Calculator.cjs +1 -1
  71. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  72. package/dist/cjs/tools/CodeExecutor.cjs +1 -1
  73. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  74. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  75. package/dist/cjs/tools/ToolNode.cjs +37 -18
  76. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  77. package/dist/cjs/tools/ToolSearch.cjs +1 -1
  78. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  79. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +7 -4
  80. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  81. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +4 -4
  82. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  83. package/dist/cjs/tools/handlers.cjs +2 -1
  84. package/dist/cjs/tools/handlers.cjs.map +1 -1
  85. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  86. package/dist/cjs/tools/local/FileCheckpointer.cjs +2 -1
  87. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  88. package/dist/cjs/tools/local/LocalCodingTools.cjs +45 -19
  89. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  90. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +3 -3
  91. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  92. package/dist/cjs/tools/local/LocalExecutionTools.cjs +2 -2
  93. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  94. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +4 -3
  95. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  96. package/dist/cjs/tools/local/attachments.cjs +0 -5
  97. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  98. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +4 -4
  99. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  100. package/dist/cjs/tools/search/firecrawl.cjs +1 -1
  101. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  102. package/dist/cjs/tools/search/rerankers.cjs +7 -3
  103. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  104. package/dist/cjs/tools/search/tavily-search.cjs +1 -1
  105. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  106. package/dist/cjs/tools/search/utils.cjs +76 -8
  107. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  108. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +1 -1
  109. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  110. package/dist/cjs/utils/handlers.cjs +1 -1
  111. package/dist/cjs/utils/handlers.cjs.map +1 -1
  112. package/dist/cjs/utils/run.cjs +1 -1
  113. package/dist/cjs/utils/run.cjs.map +1 -1
  114. package/dist/esm/agents/AgentContext.mjs +3 -2
  115. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  116. package/dist/esm/events.mjs.map +1 -1
  117. package/dist/esm/graphs/Graph.mjs +200 -54
  118. package/dist/esm/graphs/Graph.mjs.map +1 -1
  119. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  120. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +13 -7
  121. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  122. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  123. package/dist/esm/hooks/types.mjs.map +1 -1
  124. package/dist/esm/instrumentation.mjs +2 -2
  125. package/dist/esm/instrumentation.mjs.map +1 -1
  126. package/dist/esm/langfuse.mjs +17 -2
  127. package/dist/esm/langfuse.mjs.map +1 -1
  128. package/dist/esm/langfuseToolOutputTracing.mjs +2 -2
  129. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  130. package/dist/esm/llm/anthropic/index.mjs +1 -1
  131. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  132. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +38 -3
  133. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  134. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +6 -2
  135. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  136. package/dist/esm/llm/bedrock/index.mjs +2 -2
  137. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  138. package/dist/esm/llm/bedrock/toolCache.mjs +8 -5
  139. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  140. package/dist/esm/llm/fake.mjs +16 -14
  141. package/dist/esm/llm/fake.mjs.map +1 -1
  142. package/dist/esm/llm/google/index.mjs +23 -1
  143. package/dist/esm/llm/google/index.mjs.map +1 -1
  144. package/dist/esm/llm/google/utils/common.mjs +88 -27
  145. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  146. package/dist/esm/llm/init.mjs +2 -2
  147. package/dist/esm/llm/invoke.mjs +104 -7
  148. package/dist/esm/llm/invoke.mjs.map +1 -1
  149. package/dist/esm/llm/openai/index.mjs +1 -1
  150. package/dist/esm/llm/openai/index.mjs.map +1 -1
  151. package/dist/esm/llm/openai/utils/index.mjs +1 -1
  152. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  153. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  154. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  155. package/dist/esm/main.mjs +1 -1
  156. package/dist/esm/messages/cache.mjs +29 -8
  157. package/dist/esm/messages/cache.mjs.map +1 -1
  158. package/dist/esm/messages/content.mjs.map +1 -1
  159. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  160. package/dist/esm/messages/format.mjs +129 -18
  161. package/dist/esm/messages/format.mjs.map +1 -1
  162. package/dist/esm/messages/prune.mjs.map +1 -1
  163. package/dist/esm/messages/reducer.mjs +1 -1
  164. package/dist/esm/messages/reducer.mjs.map +1 -1
  165. package/dist/esm/messages/tools.mjs +1 -1
  166. package/dist/esm/messages/tools.mjs.map +1 -1
  167. package/dist/esm/openai/index.mjs.map +1 -1
  168. package/dist/esm/responses/index.mjs.map +1 -1
  169. package/dist/esm/run.mjs +41 -20
  170. package/dist/esm/run.mjs.map +1 -1
  171. package/dist/esm/session/AgentSession.mjs +4 -4
  172. package/dist/esm/session/AgentSession.mjs.map +1 -1
  173. package/dist/esm/session/JsonlSessionStore.mjs +2 -2
  174. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  175. package/dist/esm/session/handlers.mjs +2 -2
  176. package/dist/esm/session/handlers.mjs.map +1 -1
  177. package/dist/esm/stream.mjs +248 -25
  178. package/dist/esm/stream.mjs.map +1 -1
  179. package/dist/esm/summarization/node.mjs.map +1 -1
  180. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +1 -1
  181. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  182. package/dist/esm/tools/Calculator.mjs +1 -1
  183. package/dist/esm/tools/Calculator.mjs.map +1 -1
  184. package/dist/esm/tools/CodeExecutor.mjs +1 -1
  185. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  186. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  187. package/dist/esm/tools/ToolNode.mjs +37 -18
  188. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  189. package/dist/esm/tools/ToolSearch.mjs +1 -1
  190. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  191. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +7 -4
  192. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  193. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +4 -4
  194. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  195. package/dist/esm/tools/handlers.mjs +2 -1
  196. package/dist/esm/tools/handlers.mjs.map +1 -1
  197. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  198. package/dist/esm/tools/local/FileCheckpointer.mjs +2 -1
  199. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  200. package/dist/esm/tools/local/LocalCodingTools.mjs +45 -19
  201. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  202. package/dist/esm/tools/local/LocalExecutionEngine.mjs +3 -3
  203. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  204. package/dist/esm/tools/local/LocalExecutionTools.mjs +2 -2
  205. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  206. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +4 -3
  207. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  208. package/dist/esm/tools/local/attachments.mjs +0 -5
  209. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  210. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +4 -4
  211. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  212. package/dist/esm/tools/search/firecrawl.mjs +1 -1
  213. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  214. package/dist/esm/tools/search/rerankers.mjs +8 -4
  215. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  216. package/dist/esm/tools/search/tavily-search.mjs +1 -1
  217. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  218. package/dist/esm/tools/search/utils.mjs +76 -9
  219. package/dist/esm/tools/search/utils.mjs.map +1 -1
  220. package/dist/esm/tools/subagent/SubagentExecutor.mjs +1 -1
  221. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  222. package/dist/esm/utils/handlers.mjs +1 -1
  223. package/dist/esm/utils/handlers.mjs.map +1 -1
  224. package/dist/esm/utils/run.mjs +1 -1
  225. package/dist/esm/utils/run.mjs.map +1 -1
  226. package/dist/types/agents/__tests__/promptCacheLiveHelpers.d.ts +1 -1
  227. package/dist/types/events.d.ts +1 -1
  228. package/dist/types/graphs/Graph.d.ts +7 -1
  229. package/dist/types/hooks/executeHooks.d.ts +1 -1
  230. package/dist/types/hooks/types.d.ts +5 -0
  231. package/dist/types/langfuse.d.ts +4 -0
  232. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +1 -1
  233. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +1 -1
  234. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +2 -2
  235. package/dist/types/llm/bedrock/index.d.ts +2 -2
  236. package/dist/types/llm/fake.d.ts +3 -3
  237. package/dist/types/llm/google/index.d.ts +1 -0
  238. package/dist/types/llm/google/types.d.ts +1 -1
  239. package/dist/types/llm/google/utils/common.d.ts +2 -2
  240. package/dist/types/llm/google/utils/tools.d.ts +1 -1
  241. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +1 -1
  242. package/dist/types/llm/openai/index.d.ts +2 -2
  243. package/dist/types/llm/openai/utils/index.d.ts +1 -1
  244. package/dist/types/llm/openrouter/index.d.ts +4 -4
  245. package/dist/types/messages/contextPruning.d.ts +1 -1
  246. package/dist/types/messages/format.d.ts +14 -4
  247. package/dist/types/messages/prune.d.ts +1 -1
  248. package/dist/types/session/JsonlSessionStore.d.ts +1 -1
  249. package/dist/types/session/handlers.d.ts +1 -1
  250. package/dist/types/session/types.d.ts +1 -1
  251. package/dist/types/summarization/node.d.ts +1 -1
  252. package/dist/types/tools/SubagentTool.d.ts +2 -2
  253. package/dist/types/tools/ToolNode.d.ts +9 -2
  254. package/dist/types/tools/cloudflare/CloudflareSandboxExecutionEngine.d.ts +1 -1
  255. package/dist/types/tools/search/types.d.ts +1 -1
  256. package/dist/types/tools/search/utils.d.ts +11 -0
  257. package/dist/types/types/graph.d.ts +4 -4
  258. package/dist/types/types/llm.d.ts +4 -3
  259. package/dist/types/types/messages.d.ts +1 -1
  260. package/dist/types/types/run.d.ts +6 -6
  261. package/dist/types/types/stream.d.ts +2 -2
  262. package/dist/types/types/tools.d.ts +5 -1
  263. package/dist/types/utils/handlers.d.ts +2 -2
  264. package/dist/types/utils/run.d.ts +1 -1
  265. package/package.json +13 -10
  266. package/src/__tests__/stream.eagerEventExecution.test.ts +543 -6
  267. package/src/agents/AgentContext.ts +2 -2
  268. package/src/agents/__tests__/AgentContext.test.ts +3 -3
  269. package/src/agents/__tests__/promptCacheLiveHelpers.ts +1 -1
  270. package/src/events.ts +1 -1
  271. package/src/graphs/Graph.ts +329 -72
  272. package/src/graphs/MultiAgentGraph.ts +1 -1
  273. package/src/graphs/__tests__/Graph.reasoning.test.ts +919 -6
  274. package/src/graphs/__tests__/MultiAgentGraph.test.ts +1 -1
  275. package/src/graphs/__tests__/composition.smoke.test.ts +1 -1
  276. package/src/hooks/__tests__/HookRegistry.test.ts +1 -1
  277. package/src/hooks/__tests__/compactHooks.test.ts +8 -8
  278. package/src/hooks/__tests__/createWorkspacePolicyHook.test.ts +34 -22
  279. package/src/hooks/__tests__/executeHooks.test.ts +3 -3
  280. package/src/hooks/__tests__/integration.test.ts +3 -3
  281. package/src/hooks/__tests__/toolHooks.test.ts +10 -10
  282. package/src/hooks/createWorkspacePolicyHook.ts +17 -14
  283. package/src/hooks/executeHooks.ts +1 -1
  284. package/src/hooks/types.ts +5 -0
  285. package/src/instrumentation.ts +11 -11
  286. package/src/langfuse.ts +35 -1
  287. package/src/langfuseToolOutputTracing.ts +2 -2
  288. package/src/llm/anthropic/index.ts +1 -1
  289. package/src/llm/anthropic/llm.spec.ts +36 -0
  290. package/src/llm/anthropic/utils/message_inputs.ts +46 -4
  291. package/src/llm/anthropic/utils/message_outputs.ts +9 -7
  292. package/src/llm/anthropic/utils/output_parsers.ts +5 -5
  293. package/src/llm/anthropic/utils/streaming-tool-input.test.ts +186 -0
  294. package/src/llm/bedrock/index.ts +4 -4
  295. package/src/llm/bedrock/toolCache.test.ts +48 -9
  296. package/src/llm/bedrock/toolCache.ts +11 -6
  297. package/src/llm/fake.ts +30 -25
  298. package/src/llm/google/index.ts +43 -1
  299. package/src/llm/google/llm.spec.ts +173 -1
  300. package/src/llm/google/types.ts +1 -1
  301. package/src/llm/google/utils/common.ts +154 -45
  302. package/src/llm/google/utils/tools.ts +8 -8
  303. package/src/llm/google/utils/zod_to_genai_parameters.ts +4 -4
  304. package/src/llm/invoke.test.ts +3 -3
  305. package/src/llm/invoke.ts +170 -10
  306. package/src/llm/openai/index.ts +4 -4
  307. package/src/llm/openai/utils/index.ts +14 -14
  308. package/src/llm/openrouter/index.ts +4 -4
  309. package/src/llm/openrouter/reasoning.test.ts +2 -2
  310. package/src/llm/vertexai/fixThoughtSignatures.test.ts +1 -1
  311. package/src/llm/vertexai/index.ts +1 -1
  312. package/src/messages/cache.test.ts +144 -0
  313. package/src/messages/cache.ts +50 -13
  314. package/src/messages/content.ts +1 -1
  315. package/src/messages/contextPruning.ts +1 -1
  316. package/src/messages/format.ts +236 -43
  317. package/src/messages/formatAgentMessages.skills.test.ts +205 -26
  318. package/src/messages/formatAgentMessages.test.ts +841 -10
  319. package/src/messages/labelContentByAgent.test.ts +2 -2
  320. package/src/messages/prune.ts +1 -1
  321. package/src/messages/reducer.ts +1 -1
  322. package/src/messages/tools.ts +1 -1
  323. package/src/openai/__tests__/openai.test.ts +2 -2
  324. package/src/openai/index.ts +1 -1
  325. package/src/responses/__tests__/responses.test.ts +2 -2
  326. package/src/responses/index.ts +1 -1
  327. package/src/run.ts +68 -41
  328. package/src/session/AgentSession.ts +6 -6
  329. package/src/session/JsonlSessionStore.ts +3 -3
  330. package/src/session/__tests__/JsonlSessionStore.test.ts +5 -5
  331. package/src/session/__tests__/handlers.test.ts +2 -2
  332. package/src/session/handlers.ts +5 -5
  333. package/src/session/types.ts +1 -1
  334. package/src/specs/agent-handoffs.test.ts +1 -1
  335. package/src/specs/langfuse-callbacks.test.ts +2 -2
  336. package/src/specs/langfuse-metadata.test.ts +39 -0
  337. package/src/specs/langfuse-tool-output-tracing.test.ts +1 -1
  338. package/src/specs/multi-agent-summarization.test.ts +4 -4
  339. package/src/specs/subagent.test.ts +3 -3
  340. package/src/specs/summarization-unit.test.ts +1 -1
  341. package/src/specs/thinking-handoff.test.ts +1 -1
  342. package/src/splitStream.test.ts +48 -0
  343. package/src/stream.test.ts +53 -3
  344. package/src/stream.ts +450 -39
  345. package/src/summarization/__tests__/aggregator.test.ts +2 -2
  346. package/src/summarization/__tests__/node.test.ts +2 -2
  347. package/src/summarization/node.ts +1 -1
  348. package/src/tools/BashProgrammaticToolCalling.ts +5 -5
  349. package/src/tools/Calculator.ts +1 -1
  350. package/src/tools/CodeExecutor.ts +2 -4
  351. package/src/tools/SubagentTool.ts +2 -2
  352. package/src/tools/ToolNode.ts +37 -16
  353. package/src/tools/ToolSearch.ts +1 -1
  354. package/src/tools/__tests__/CloudflareSandboxExecution.test.ts +4 -4
  355. package/src/tools/__tests__/CodeApiAuthHeaders.test.ts +12 -12
  356. package/src/tools/__tests__/LocalExecutionTools.test.ts +125 -93
  357. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +29 -5
  358. package/src/tools/__tests__/ReadFile.test.ts +1 -1
  359. package/src/tools/__tests__/SkillTool.test.ts +4 -4
  360. package/src/tools/__tests__/SubagentExecutor.test.ts +17 -13
  361. package/src/tools/__tests__/SubagentTool.test.ts +2 -2
  362. package/src/tools/__tests__/ToolNode.eagerEventExecution.test.ts +1 -1
  363. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +2 -5
  364. package/src/tools/__tests__/ToolNode.session.test.ts +1 -1
  365. package/src/tools/__tests__/ToolSearch.test.ts +1 -1
  366. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +1 -1
  367. package/src/tools/__tests__/directToolHITLResumeScope.test.ts +35 -32
  368. package/src/tools/__tests__/directToolHooks.test.ts +41 -0
  369. package/src/tools/__tests__/handlers.test.ts +2 -2
  370. package/src/tools/__tests__/hitl.test.ts +11 -11
  371. package/src/tools/__tests__/localToolNames.test.ts +8 -6
  372. package/src/tools/__tests__/skillCatalog.test.ts +1 -1
  373. package/src/tools/__tests__/subagentHooks.test.ts +20 -10
  374. package/src/tools/__tests__/workspaceSeam.test.ts +20 -7
  375. package/src/tools/cloudflare/CloudflareSandboxExecutionEngine.ts +9 -6
  376. package/src/tools/cloudflare/CloudflareSandboxTools.ts +19 -19
  377. package/src/tools/handlers.ts +5 -5
  378. package/src/tools/local/CompileCheckTool.ts +4 -7
  379. package/src/tools/local/FileCheckpointer.ts +6 -5
  380. package/src/tools/local/LocalCodingTools.ts +100 -45
  381. package/src/tools/local/LocalExecutionEngine.ts +5 -5
  382. package/src/tools/local/LocalExecutionTools.ts +9 -9
  383. package/src/tools/local/LocalProgrammaticToolCalling.ts +5 -4
  384. package/src/tools/local/attachments.ts +0 -6
  385. package/src/tools/local/resolveLocalExecutionTools.ts +15 -15
  386. package/src/tools/search/firecrawl.ts +1 -1
  387. package/src/tools/search/jina-reranker.test.ts +148 -37
  388. package/src/tools/search/rerankers.ts +14 -4
  389. package/src/tools/search/tavily-search.ts +2 -2
  390. package/src/tools/search/types.ts +1 -1
  391. package/src/tools/search/utils.ts +99 -9
  392. package/src/tools/subagent/SubagentExecutor.ts +12 -6
  393. package/src/types/graph.ts +12 -12
  394. package/src/types/llm.ts +7 -6
  395. package/src/types/messages.ts +1 -1
  396. package/src/types/run.ts +7 -7
  397. package/src/types/stream.ts +2 -2
  398. package/src/types/tools.ts +5 -1
  399. package/src/utils/handlers.ts +2 -2
  400. package/src/utils/llmConfig.ts +1 -1
  401. package/src/utils/logging.ts +20 -10
  402. package/src/utils/run.ts +2 -2
@@ -1,13 +1,13 @@
1
1
  import { HumanMessage } from '@langchain/core/messages';
2
2
  import type { TPayload } from '@/types';
3
- import { formatAgentMessages } from './format';
4
3
  import { ContentTypes, Constants } from '@/common';
4
+ import { formatAgentMessages } from './format';
5
5
 
6
6
  /** Helper to build a skill tool_call content part */
7
7
  function skillToolCall(
8
8
  id: string,
9
9
  skillName: string,
10
- output = 'Skill loaded.',
10
+ output = 'Skill loaded.'
11
11
  ): Record<string, unknown> {
12
12
  return {
13
13
  type: ContentTypes.TOOL_CALL,
@@ -45,15 +45,24 @@ describe('formatAgentMessages skill body reconstruction', () => {
45
45
  },
46
46
  ];
47
47
 
48
- const { messages } = formatAgentMessages(payload, undefined, tools, skillBodies);
48
+ const { messages } = formatAgentMessages(
49
+ payload,
50
+ undefined,
51
+ tools,
52
+ skillBodies
53
+ );
49
54
 
50
55
  // user, AI, ToolMessage, injected HumanMessage
51
56
  expect(messages.length).toBeGreaterThanOrEqual(4);
52
57
  const last = messages[messages.length - 1];
53
58
  expect(last).toBeInstanceOf(HumanMessage);
54
- expect(last.content).toBe('# PDF Analyzer\nAnalyze PDF files step by step.');
59
+ expect(last.content).toBe(
60
+ '# PDF Analyzer\nAnalyze PDF files step by step.'
61
+ );
55
62
  expect((last as HumanMessage).additional_kwargs.source).toBe('skill');
56
- expect((last as HumanMessage).additional_kwargs.skillName).toBe('pdf-analyzer');
63
+ expect((last as HumanMessage).additional_kwargs.skillName).toBe(
64
+ 'pdf-analyzer'
65
+ );
57
66
  expect((last as HumanMessage).additional_kwargs.isMeta).toBe(true);
58
67
  });
59
68
 
@@ -67,7 +76,12 @@ describe('formatAgentMessages skill body reconstruction', () => {
67
76
  },
68
77
  ];
69
78
 
70
- const { messages } = formatAgentMessages(payload, undefined, restrictedTools, skillBodies);
79
+ const { messages } = formatAgentMessages(
80
+ payload,
81
+ undefined,
82
+ restrictedTools,
83
+ skillBodies
84
+ );
71
85
 
72
86
  const humanMessages = messages.filter((m) => m instanceof HumanMessage);
73
87
  // Only the user message, no injected skill body
@@ -83,7 +97,12 @@ describe('formatAgentMessages skill body reconstruction', () => {
83
97
  },
84
98
  ];
85
99
 
86
- const { messages } = formatAgentMessages(payload, undefined, tools, skillBodies);
100
+ const { messages } = formatAgentMessages(
101
+ payload,
102
+ undefined,
103
+ tools,
104
+ skillBodies
105
+ );
87
106
 
88
107
  const humanMessages = messages.filter((m) => m instanceof HumanMessage);
89
108
  expect(humanMessages).toHaveLength(1); // only the user message
@@ -100,13 +119,22 @@ describe('formatAgentMessages skill body reconstruction', () => {
100
119
  },
101
120
  ];
102
121
 
103
- const { messages } = formatAgentMessages(payload, undefined, undefined, skillBodies);
122
+ const { messages } = formatAgentMessages(
123
+ payload,
124
+ undefined,
125
+ undefined,
126
+ skillBodies
127
+ );
104
128
 
105
129
  const injected = messages.filter(
106
- (m) => m instanceof HumanMessage && (m as HumanMessage).additional_kwargs?.source === 'skill',
130
+ (m) =>
131
+ m instanceof HumanMessage &&
132
+ (m as HumanMessage).additional_kwargs.source === 'skill'
107
133
  );
108
134
  expect(injected).toHaveLength(1);
109
- expect(injected[0].content).toBe('# Code Review\nReview the code for issues.');
135
+ expect(injected[0].content).toBe(
136
+ '# Code Review\nReview the code for issues.'
137
+ );
110
138
  });
111
139
 
112
140
  it('no injection when skills Map is undefined', () => {
@@ -118,10 +146,17 @@ describe('formatAgentMessages skill body reconstruction', () => {
118
146
  },
119
147
  ];
120
148
 
121
- const { messages } = formatAgentMessages(payload, undefined, undefined, undefined);
149
+ const { messages } = formatAgentMessages(
150
+ payload,
151
+ undefined,
152
+ undefined,
153
+ undefined
154
+ );
122
155
 
123
156
  const injected = messages.filter(
124
- (m) => m instanceof HumanMessage && (m as HumanMessage).additional_kwargs?.source === 'skill',
157
+ (m) =>
158
+ m instanceof HumanMessage &&
159
+ (m as HumanMessage).additional_kwargs.source === 'skill'
125
160
  );
126
161
  expect(injected).toHaveLength(0);
127
162
  });
@@ -135,10 +170,17 @@ describe('formatAgentMessages skill body reconstruction', () => {
135
170
  },
136
171
  ];
137
172
 
138
- const { messages } = formatAgentMessages(payload, undefined, undefined, new Map());
173
+ const { messages } = formatAgentMessages(
174
+ payload,
175
+ undefined,
176
+ undefined,
177
+ new Map()
178
+ );
139
179
 
140
180
  const injected = messages.filter(
141
- (m) => m instanceof HumanMessage && (m as HumanMessage).additional_kwargs?.source === 'skill',
181
+ (m) =>
182
+ m instanceof HumanMessage &&
183
+ (m as HumanMessage).additional_kwargs.source === 'skill'
142
184
  );
143
185
  expect(injected).toHaveLength(0);
144
186
  });
@@ -166,10 +208,17 @@ describe('formatAgentMessages skill body reconstruction', () => {
166
208
  },
167
209
  ];
168
210
 
169
- const { messages } = formatAgentMessages(payload, undefined, tools, skillBodies);
211
+ const { messages } = formatAgentMessages(
212
+ payload,
213
+ undefined,
214
+ tools,
215
+ skillBodies
216
+ );
170
217
 
171
218
  const injected = messages.filter(
172
- (m) => m instanceof HumanMessage && (m as HumanMessage).additional_kwargs?.source === 'skill',
219
+ (m) =>
220
+ m instanceof HumanMessage &&
221
+ (m as HumanMessage).additional_kwargs.source === 'skill'
173
222
  );
174
223
  expect(injected).toHaveLength(1);
175
224
  });
@@ -193,10 +242,17 @@ describe('formatAgentMessages skill body reconstruction', () => {
193
242
  },
194
243
  ];
195
244
 
196
- const { messages } = formatAgentMessages(payload, undefined, tools, skillBodies);
245
+ const { messages } = formatAgentMessages(
246
+ payload,
247
+ undefined,
248
+ tools,
249
+ skillBodies
250
+ );
197
251
 
198
252
  const injected = messages.filter(
199
- (m) => m instanceof HumanMessage && (m as HumanMessage).additional_kwargs?.source === 'skill',
253
+ (m) =>
254
+ m instanceof HumanMessage &&
255
+ (m as HumanMessage).additional_kwargs.source === 'skill'
200
256
  );
201
257
  expect(injected).toHaveLength(0); // gracefully skipped
202
258
  });
@@ -220,10 +276,17 @@ describe('formatAgentMessages skill body reconstruction', () => {
220
276
  },
221
277
  ];
222
278
 
223
- const { messages } = formatAgentMessages(payload, undefined, tools, skillBodies);
279
+ const { messages } = formatAgentMessages(
280
+ payload,
281
+ undefined,
282
+ tools,
283
+ skillBodies
284
+ );
224
285
 
225
286
  const injected = messages.filter(
226
- (m) => m instanceof HumanMessage && (m as HumanMessage).additional_kwargs?.source === 'skill',
287
+ (m) =>
288
+ m instanceof HumanMessage &&
289
+ (m as HumanMessage).additional_kwargs.source === 'skill'
227
290
  );
228
291
  expect(injected).toHaveLength(0);
229
292
  });
@@ -244,10 +307,17 @@ describe('formatAgentMessages skill body reconstruction', () => {
244
307
  },
245
308
  ];
246
309
 
247
- const { messages } = formatAgentMessages(payload, undefined, tools, skillBodies);
310
+ const { messages } = formatAgentMessages(
311
+ payload,
312
+ undefined,
313
+ tools,
314
+ skillBodies
315
+ );
248
316
 
249
317
  const injected = messages.filter(
250
- (m) => m instanceof HumanMessage && (m as HumanMessage).additional_kwargs?.source === 'skill',
318
+ (m) =>
319
+ m instanceof HumanMessage &&
320
+ (m as HumanMessage).additional_kwargs.source === 'skill'
251
321
  );
252
322
  expect(injected).toHaveLength(1);
253
323
  });
@@ -264,13 +334,22 @@ describe('formatAgentMessages skill body reconstruction', () => {
264
334
  },
265
335
  ];
266
336
 
267
- const { messages } = formatAgentMessages(payload, undefined, tools, skillBodies);
337
+ const { messages } = formatAgentMessages(
338
+ payload,
339
+ undefined,
340
+ tools,
341
+ skillBodies
342
+ );
268
343
 
269
344
  const injected = messages.filter(
270
- (m) => m instanceof HumanMessage && (m as HumanMessage).additional_kwargs?.source === 'skill',
345
+ (m) =>
346
+ m instanceof HumanMessage &&
347
+ (m as HumanMessage).additional_kwargs.source === 'skill'
271
348
  );
272
349
  expect(injected).toHaveLength(2);
273
- const names = injected.map((m) => (m as HumanMessage).additional_kwargs.skillName);
350
+ const names = injected.map(
351
+ (m) => (m as HumanMessage).additional_kwargs.skillName
352
+ );
274
353
  expect(names).toContain('pdf-analyzer');
275
354
  expect(names).toContain('code-review');
276
355
  });
@@ -304,7 +383,7 @@ describe('formatAgentMessages skill body reconstruction', () => {
304
383
  payload,
305
384
  inputTokenMap,
306
385
  tools,
307
- skillBodies,
386
+ skillBodies
308
387
  );
309
388
 
310
389
  // There should be messages: user, AI, ToolMessage, injected HumanMessage
@@ -331,4 +410,104 @@ describe('formatAgentMessages skill body reconstruction', () => {
331
410
  expect(assistantTotal).toBe(500);
332
411
  });
333
412
  });
413
+
414
+ describe('skipSkillBodyNames (fresh-prime dedupe)', () => {
415
+ const tools = new Set([Constants.SKILL_TOOL]);
416
+
417
+ const injectedSkillBodies = (
418
+ messages: ReturnType<typeof formatAgentMessages>['messages']
419
+ ) =>
420
+ messages.filter(
421
+ (m) =>
422
+ m instanceof HumanMessage &&
423
+ (m as HumanMessage).additional_kwargs.source === 'skill'
424
+ );
425
+
426
+ it('does NOT reconstruct body when skill name is in skipSkillBodyNames', () => {
427
+ const payload: TPayload = [
428
+ { role: 'user', content: 'Review my code' },
429
+ {
430
+ role: 'assistant',
431
+ content: [skillToolCall('call_1', 'code-review')],
432
+ },
433
+ ];
434
+
435
+ const { messages } = formatAgentMessages(
436
+ payload,
437
+ undefined,
438
+ tools,
439
+ skillBodies,
440
+ { skipSkillBodyNames: new Set(['code-review']) }
441
+ );
442
+
443
+ expect(injectedSkillBodies(messages)).toHaveLength(0);
444
+ });
445
+
446
+ it('reconstructs only names NOT in skipSkillBodyNames', () => {
447
+ const payload: TPayload = [
448
+ { role: 'user', content: 'Go' },
449
+ {
450
+ role: 'assistant',
451
+ content: [
452
+ skillToolCall('call_1', 'pdf-analyzer'),
453
+ skillToolCall('call_2', 'code-review'),
454
+ ],
455
+ },
456
+ ];
457
+
458
+ const { messages } = formatAgentMessages(
459
+ payload,
460
+ undefined,
461
+ tools,
462
+ skillBodies,
463
+ { skipSkillBodyNames: new Set(['code-review']) }
464
+ );
465
+
466
+ const injected = injectedSkillBodies(messages);
467
+ expect(injected).toHaveLength(1);
468
+ expect((injected[0] as HumanMessage).additional_kwargs.skillName).toBe(
469
+ 'pdf-analyzer'
470
+ );
471
+ });
472
+
473
+ it('reconstructs normally when skipSkillBodyNames is empty', () => {
474
+ const payload: TPayload = [
475
+ { role: 'user', content: 'Review my code' },
476
+ {
477
+ role: 'assistant',
478
+ content: [skillToolCall('call_1', 'code-review')],
479
+ },
480
+ ];
481
+
482
+ const { messages } = formatAgentMessages(
483
+ payload,
484
+ undefined,
485
+ tools,
486
+ skillBodies,
487
+ { skipSkillBodyNames: new Set() }
488
+ );
489
+
490
+ expect(injectedSkillBodies(messages)).toHaveLength(1);
491
+ });
492
+
493
+ it('skips in the non-tools-filtering path too', () => {
494
+ const payload: TPayload = [
495
+ { role: 'user', content: 'Review my code' },
496
+ {
497
+ role: 'assistant',
498
+ content: [skillToolCall('call_1', 'code-review')],
499
+ },
500
+ ];
501
+
502
+ const { messages } = formatAgentMessages(
503
+ payload,
504
+ undefined,
505
+ undefined,
506
+ skillBodies,
507
+ { skipSkillBodyNames: new Set(['code-review']) }
508
+ );
509
+
510
+ expect(injectedSkillBodies(messages)).toHaveLength(0);
511
+ });
512
+ });
334
513
  });