@librechat/agents 3.2.32 → 3.2.34

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 (597) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.cjs +23 -0
  2. package/dist/cjs/agents/AgentContext.cjs +844 -1046
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/constants.cjs +13 -13
  5. package/dist/cjs/common/constants.cjs.map +1 -1
  6. package/dist/cjs/common/enum.cjs +233 -240
  7. package/dist/cjs/common/enum.cjs.map +1 -1
  8. package/dist/cjs/common/index.cjs +2 -0
  9. package/dist/cjs/events.cjs +121 -169
  10. package/dist/cjs/events.cjs.map +1 -1
  11. package/dist/cjs/graphs/Graph.cjs +1389 -1807
  12. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  13. package/dist/cjs/graphs/MultiAgentGraph.cjs +713 -945
  14. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  15. package/dist/cjs/graphs/index.cjs +2 -0
  16. package/dist/cjs/hitl/askUserQuestion.cjs +60 -62
  17. package/dist/cjs/hitl/askUserQuestion.cjs.map +1 -1
  18. package/dist/cjs/hitl/index.cjs +1 -0
  19. package/dist/cjs/hooks/HookRegistry.cjs +176 -202
  20. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -1
  21. package/dist/cjs/hooks/createToolPolicyHook.cjs +71 -101
  22. package/dist/cjs/hooks/createToolPolicyHook.cjs.map +1 -1
  23. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs +170 -273
  24. package/dist/cjs/hooks/createWorkspacePolicyHook.cjs.map +1 -1
  25. package/dist/cjs/hooks/executeHooks.cjs +227 -282
  26. package/dist/cjs/hooks/executeHooks.cjs.map +1 -1
  27. package/dist/cjs/hooks/index.cjs +6 -0
  28. package/dist/cjs/hooks/matchers.cjs +196 -230
  29. package/dist/cjs/hooks/matchers.cjs.map +1 -1
  30. package/dist/cjs/hooks/types.cjs +24 -24
  31. package/dist/cjs/hooks/types.cjs.map +1 -1
  32. package/dist/cjs/instrumentation.cjs +110 -137
  33. package/dist/cjs/instrumentation.cjs.map +1 -1
  34. package/dist/cjs/langchain/google-common.cjs +0 -3
  35. package/dist/cjs/langchain/index.cjs +80 -43
  36. package/dist/cjs/langchain/language_models/chat_models.cjs +0 -3
  37. package/dist/cjs/langchain/messages/tool.cjs +0 -3
  38. package/dist/cjs/langchain/messages.cjs +35 -18
  39. package/dist/cjs/langchain/openai.cjs +0 -3
  40. package/dist/cjs/langchain/prompts.cjs +5 -8
  41. package/dist/cjs/langchain/runnables.cjs +11 -10
  42. package/dist/cjs/langchain/tools.cjs +14 -11
  43. package/dist/cjs/langchain/utils/env.cjs +5 -8
  44. package/dist/cjs/langfuse.cjs +60 -79
  45. package/dist/cjs/langfuse.cjs.map +1 -1
  46. package/dist/cjs/langfuseToolOutputTracing.cjs +267 -399
  47. package/dist/cjs/langfuseToolOutputTracing.cjs.map +1 -1
  48. package/dist/cjs/llm/anthropic/index.cjs +432 -562
  49. package/dist/cjs/llm/anthropic/index.cjs.map +1 -1
  50. package/dist/cjs/llm/anthropic/types.cjs +23 -47
  51. package/dist/cjs/llm/anthropic/types.cjs.map +1 -1
  52. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +441 -731
  53. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  54. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +171 -256
  55. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  56. package/dist/cjs/llm/anthropic/utils/output_parsers.cjs +2 -0
  57. package/dist/cjs/llm/anthropic/utils/tools.cjs +12 -26
  58. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -1
  59. package/dist/cjs/llm/bedrock/index.cjs +214 -240
  60. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  61. package/dist/cjs/llm/bedrock/toolCache.cjs +84 -106
  62. package/dist/cjs/llm/bedrock/toolCache.cjs.map +1 -1
  63. package/dist/cjs/llm/bedrock/utils/index.cjs +2 -0
  64. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs +357 -620
  65. package/dist/cjs/llm/bedrock/utils/message_inputs.cjs.map +1 -1
  66. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs +141 -149
  67. package/dist/cjs/llm/bedrock/utils/message_outputs.cjs.map +1 -1
  68. package/dist/cjs/llm/fake.cjs +86 -96
  69. package/dist/cjs/llm/fake.cjs.map +1 -1
  70. package/dist/cjs/llm/google/index.cjs +183 -237
  71. package/dist/cjs/llm/google/index.cjs.map +1 -1
  72. package/dist/cjs/llm/google/utils/common.cjs +404 -674
  73. package/dist/cjs/llm/google/utils/common.cjs.map +1 -1
  74. package/dist/cjs/llm/google/utils/zod_to_genai_parameters.cjs +2 -0
  75. package/dist/cjs/llm/init.cjs +44 -53
  76. package/dist/cjs/llm/init.cjs.map +1 -1
  77. package/dist/cjs/llm/invoke.cjs +142 -182
  78. package/dist/cjs/llm/invoke.cjs.map +1 -1
  79. package/dist/cjs/llm/openai/index.cjs +1035 -1273
  80. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  81. package/dist/cjs/llm/openai/utils/index.cjs +189 -316
  82. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  83. package/dist/cjs/llm/openrouter/index.cjs +102 -153
  84. package/dist/cjs/llm/openrouter/index.cjs.map +1 -1
  85. package/dist/cjs/llm/openrouter/toolCache.cjs +35 -44
  86. package/dist/cjs/llm/openrouter/toolCache.cjs.map +1 -1
  87. package/dist/cjs/llm/providers.cjs +29 -37
  88. package/dist/cjs/llm/providers.cjs.map +1 -1
  89. package/dist/cjs/llm/request.cjs +20 -33
  90. package/dist/cjs/llm/request.cjs.map +1 -1
  91. package/dist/cjs/llm/vertexai/index.cjs +446 -453
  92. package/dist/cjs/llm/vertexai/index.cjs.map +1 -1
  93. package/dist/cjs/main.cjs +547 -528
  94. package/dist/cjs/messages/anthropicToolCache.cjs +68 -119
  95. package/dist/cjs/messages/anthropicToolCache.cjs.map +1 -1
  96. package/dist/cjs/messages/cache.cjs +305 -418
  97. package/dist/cjs/messages/cache.cjs.map +1 -1
  98. package/dist/cjs/messages/content.cjs +36 -49
  99. package/dist/cjs/messages/content.cjs.map +1 -1
  100. package/dist/cjs/messages/contextPruning.cjs +112 -145
  101. package/dist/cjs/messages/contextPruning.cjs.map +1 -1
  102. package/dist/cjs/messages/contextPruningSettings.cjs +36 -46
  103. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -1
  104. package/dist/cjs/messages/core.cjs +256 -397
  105. package/dist/cjs/messages/core.cjs.map +1 -1
  106. package/dist/cjs/messages/format.cjs +904 -1387
  107. package/dist/cjs/messages/format.cjs.map +1 -1
  108. package/dist/cjs/messages/ids.cjs +16 -20
  109. package/dist/cjs/messages/ids.cjs.map +1 -1
  110. package/dist/cjs/messages/index.cjs +12 -0
  111. package/dist/cjs/messages/langchain.cjs +18 -18
  112. package/dist/cjs/messages/langchain.cjs.map +1 -1
  113. package/dist/cjs/messages/prune.cjs +1054 -1517
  114. package/dist/cjs/messages/prune.cjs.map +1 -1
  115. package/dist/cjs/messages/recency.cjs +77 -95
  116. package/dist/cjs/messages/recency.cjs.map +1 -1
  117. package/dist/cjs/messages/reducer.cjs +63 -78
  118. package/dist/cjs/messages/reducer.cjs.map +1 -1
  119. package/dist/cjs/messages/tools.cjs +51 -79
  120. package/dist/cjs/messages/tools.cjs.map +1 -1
  121. package/dist/cjs/openai/index.cjs +171 -217
  122. package/dist/cjs/openai/index.cjs.map +1 -1
  123. package/dist/cjs/responses/index.cjs +302 -391
  124. package/dist/cjs/responses/index.cjs.map +1 -1
  125. package/dist/cjs/run.cjs +903 -1113
  126. package/dist/cjs/run.cjs.map +1 -1
  127. package/dist/cjs/session/AgentSession.cjs +805 -986
  128. package/dist/cjs/session/AgentSession.cjs.map +1 -1
  129. package/dist/cjs/session/JsonlSessionStore.cjs +327 -410
  130. package/dist/cjs/session/JsonlSessionStore.cjs.map +1 -1
  131. package/dist/cjs/session/handlers.cjs +192 -208
  132. package/dist/cjs/session/handlers.cjs.map +1 -1
  133. package/dist/cjs/session/ids.cjs +9 -10
  134. package/dist/cjs/session/ids.cjs.map +1 -1
  135. package/dist/cjs/session/index.cjs +4 -0
  136. package/dist/cjs/session/messageSerialization.cjs +94 -156
  137. package/dist/cjs/session/messageSerialization.cjs.map +1 -1
  138. package/dist/cjs/splitStream.cjs +147 -206
  139. package/dist/cjs/splitStream.cjs.map +1 -1
  140. package/dist/cjs/stream.cjs +874 -1344
  141. package/dist/cjs/stream.cjs.map +1 -1
  142. package/dist/cjs/summarization/index.cjs +57 -101
  143. package/dist/cjs/summarization/index.cjs.map +1 -1
  144. package/dist/cjs/summarization/node.cjs +643 -796
  145. package/dist/cjs/summarization/node.cjs.map +1 -1
  146. package/dist/cjs/tools/BashExecutor.cjs +110 -136
  147. package/dist/cjs/tools/BashExecutor.cjs.map +1 -1
  148. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +165 -245
  149. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -1
  150. package/dist/cjs/tools/Calculator.cjs +36 -57
  151. package/dist/cjs/tools/Calculator.cjs.map +1 -1
  152. package/dist/cjs/tools/CodeExecutor.cjs +126 -168
  153. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  154. package/dist/cjs/tools/CodeSessionFileSummary.cjs +36 -46
  155. package/dist/cjs/tools/CodeSessionFileSummary.cjs.map +1 -1
  156. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +459 -649
  157. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  158. package/dist/cjs/tools/ReadFile.cjs +17 -20
  159. package/dist/cjs/tools/ReadFile.cjs.map +1 -1
  160. package/dist/cjs/tools/SkillTool.cjs +26 -27
  161. package/dist/cjs/tools/SkillTool.cjs.map +1 -1
  162. package/dist/cjs/tools/SubagentTool.cjs +59 -61
  163. package/dist/cjs/tools/SubagentTool.cjs.map +1 -1
  164. package/dist/cjs/tools/ToolNode.cjs +2146 -2686
  165. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  166. package/dist/cjs/tools/ToolSearch.cjs +663 -825
  167. package/dist/cjs/tools/ToolSearch.cjs.map +1 -1
  168. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs +248 -340
  169. package/dist/cjs/tools/cloudflare/CloudflareBridgeRuntime.cjs.map +1 -1
  170. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs +170 -197
  171. package/dist/cjs/tools/cloudflare/CloudflareProgrammaticToolCalling.cjs.map +1 -1
  172. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs +425 -520
  173. package/dist/cjs/tools/cloudflare/CloudflareSandboxExecutionEngine.cjs.map +1 -1
  174. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs +91 -124
  175. package/dist/cjs/tools/cloudflare/CloudflareSandboxTools.cjs.map +1 -1
  176. package/dist/cjs/tools/cloudflare/index.cjs +4 -0
  177. package/dist/cjs/tools/eagerEventExecution.cjs +75 -99
  178. package/dist/cjs/tools/eagerEventExecution.cjs.map +1 -1
  179. package/dist/cjs/tools/handlers.cjs +200 -262
  180. package/dist/cjs/tools/handlers.cjs.map +1 -1
  181. package/dist/cjs/tools/local/CompileCheckTool.cjs +150 -212
  182. package/dist/cjs/tools/local/CompileCheckTool.cjs.map +1 -1
  183. package/dist/cjs/tools/local/FileCheckpointer.cjs +77 -85
  184. package/dist/cjs/tools/local/FileCheckpointer.cjs.map +1 -1
  185. package/dist/cjs/tools/local/LocalCodingTools.cjs +763 -1022
  186. package/dist/cjs/tools/local/LocalCodingTools.cjs.map +1 -1
  187. package/dist/cjs/tools/local/LocalExecutionEngine.cjs +666 -941
  188. package/dist/cjs/tools/local/LocalExecutionEngine.cjs.map +1 -1
  189. package/dist/cjs/tools/local/LocalExecutionTools.cjs +49 -92
  190. package/dist/cjs/tools/local/LocalExecutionTools.cjs.map +1 -1
  191. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs +286 -354
  192. package/dist/cjs/tools/local/LocalProgrammaticToolCalling.cjs.map +1 -1
  193. package/dist/cjs/tools/local/attachments.cjs +108 -165
  194. package/dist/cjs/tools/local/attachments.cjs.map +1 -1
  195. package/dist/cjs/tools/local/bashAst.cjs +99 -113
  196. package/dist/cjs/tools/local/bashAst.cjs.map +1 -1
  197. package/dist/cjs/tools/local/editStrategies.cjs +126 -169
  198. package/dist/cjs/tools/local/editStrategies.cjs.map +1 -1
  199. package/dist/cjs/tools/local/index.cjs +12 -0
  200. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs +136 -218
  201. package/dist/cjs/tools/local/resolveLocalExecutionTools.cjs.map +1 -1
  202. package/dist/cjs/tools/local/syntaxCheck.cjs +142 -161
  203. package/dist/cjs/tools/local/syntaxCheck.cjs.map +1 -1
  204. package/dist/cjs/tools/local/textEncoding.cjs +25 -23
  205. package/dist/cjs/tools/local/textEncoding.cjs.map +1 -1
  206. package/dist/cjs/tools/local/workspaceFS.cjs +38 -46
  207. package/dist/cjs/tools/local/workspaceFS.cjs.map +1 -1
  208. package/dist/cjs/tools/ptcTimeout.cjs +27 -47
  209. package/dist/cjs/tools/ptcTimeout.cjs.map +1 -1
  210. package/dist/cjs/tools/schema.cjs +24 -23
  211. package/dist/cjs/tools/schema.cjs.map +1 -1
  212. package/dist/cjs/tools/search/anthropic.cjs +24 -33
  213. package/dist/cjs/tools/search/anthropic.cjs.map +1 -1
  214. package/dist/cjs/tools/search/content.cjs +95 -137
  215. package/dist/cjs/tools/search/content.cjs.map +1 -1
  216. package/dist/cjs/tools/search/firecrawl.cjs +141 -172
  217. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -1
  218. package/dist/cjs/tools/search/format.cjs +128 -196
  219. package/dist/cjs/tools/search/format.cjs.map +1 -1
  220. package/dist/cjs/tools/search/highlights.cjs +165 -232
  221. package/dist/cjs/tools/search/highlights.cjs.map +1 -1
  222. package/dist/cjs/tools/search/index.cjs +2 -0
  223. package/dist/cjs/tools/search/rerankers.cjs +151 -174
  224. package/dist/cjs/tools/search/rerankers.cjs.map +1 -1
  225. package/dist/cjs/tools/search/schema.cjs +40 -39
  226. package/dist/cjs/tools/search/schema.cjs.map +1 -1
  227. package/dist/cjs/tools/search/search.cjs +428 -530
  228. package/dist/cjs/tools/search/search.cjs.map +1 -1
  229. package/dist/cjs/tools/search/serper-scraper.cjs +106 -127
  230. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -1
  231. package/dist/cjs/tools/search/tavily-scraper.cjs +129 -181
  232. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -1
  233. package/dist/cjs/tools/search/tavily-search.cjs +295 -359
  234. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -1
  235. package/dist/cjs/tools/search/tool.cjs +260 -299
  236. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  237. package/dist/cjs/tools/search/utils.cjs +74 -117
  238. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  239. package/dist/cjs/tools/skillCatalog.cjs +54 -72
  240. package/dist/cjs/tools/skillCatalog.cjs.map +1 -1
  241. package/dist/cjs/tools/streamedToolCallSeals.cjs +46 -34
  242. package/dist/cjs/tools/streamedToolCallSeals.cjs.map +1 -1
  243. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +612 -771
  244. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -1
  245. package/dist/cjs/tools/subagent/index.cjs +1 -0
  246. package/dist/cjs/tools/toolOutputReferences.cjs +523 -630
  247. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -1
  248. package/dist/cjs/utils/callbacks.cjs +11 -21
  249. package/dist/cjs/utils/callbacks.cjs.map +1 -1
  250. package/dist/cjs/utils/errors.cjs +70 -95
  251. package/dist/cjs/utils/errors.cjs.map +1 -1
  252. package/dist/cjs/utils/events.cjs +32 -42
  253. package/dist/cjs/utils/events.cjs.map +1 -1
  254. package/dist/cjs/utils/graph.cjs +8 -12
  255. package/dist/cjs/utils/graph.cjs.map +1 -1
  256. package/dist/cjs/utils/handlers.cjs +60 -82
  257. package/dist/cjs/utils/handlers.cjs.map +1 -1
  258. package/dist/cjs/utils/index.cjs +9 -0
  259. package/dist/cjs/utils/llm.cjs +19 -27
  260. package/dist/cjs/utils/llm.cjs.map +1 -1
  261. package/dist/cjs/utils/misc.cjs +30 -46
  262. package/dist/cjs/utils/misc.cjs.map +1 -1
  263. package/dist/cjs/utils/run.cjs +50 -66
  264. package/dist/cjs/utils/run.cjs.map +1 -1
  265. package/dist/cjs/utils/schema.cjs +11 -19
  266. package/dist/cjs/utils/schema.cjs.map +1 -1
  267. package/dist/cjs/utils/title.cjs +71 -106
  268. package/dist/cjs/utils/title.cjs.map +1 -1
  269. package/dist/cjs/utils/tokens.cjs +186 -283
  270. package/dist/cjs/utils/tokens.cjs.map +1 -1
  271. package/dist/cjs/utils/truncation.cjs +95 -114
  272. package/dist/cjs/utils/truncation.cjs.map +1 -1
  273. package/dist/esm/agents/AgentContext.mjs +844 -1044
  274. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  275. package/dist/esm/common/constants.mjs +13 -11
  276. package/dist/esm/common/constants.mjs.map +1 -1
  277. package/dist/esm/common/enum.mjs +221 -238
  278. package/dist/esm/common/enum.mjs.map +1 -1
  279. package/dist/esm/common/index.mjs +3 -0
  280. package/dist/esm/events.mjs +121 -167
  281. package/dist/esm/events.mjs.map +1 -1
  282. package/dist/esm/graphs/Graph.mjs +1388 -1804
  283. package/dist/esm/graphs/Graph.mjs.map +1 -1
  284. package/dist/esm/graphs/MultiAgentGraph.mjs +713 -943
  285. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  286. package/dist/esm/graphs/index.mjs +3 -0
  287. package/dist/esm/hitl/askUserQuestion.mjs +60 -60
  288. package/dist/esm/hitl/askUserQuestion.mjs.map +1 -1
  289. package/dist/esm/hitl/index.mjs +2 -0
  290. package/dist/esm/hooks/HookRegistry.mjs +176 -200
  291. package/dist/esm/hooks/HookRegistry.mjs.map +1 -1
  292. package/dist/esm/hooks/createToolPolicyHook.mjs +71 -99
  293. package/dist/esm/hooks/createToolPolicyHook.mjs.map +1 -1
  294. package/dist/esm/hooks/createWorkspacePolicyHook.mjs +170 -271
  295. package/dist/esm/hooks/createWorkspacePolicyHook.mjs.map +1 -1
  296. package/dist/esm/hooks/executeHooks.mjs +227 -280
  297. package/dist/esm/hooks/executeHooks.mjs.map +1 -1
  298. package/dist/esm/hooks/index.mjs +7 -0
  299. package/dist/esm/hooks/matchers.mjs +196 -228
  300. package/dist/esm/hooks/matchers.mjs.map +1 -1
  301. package/dist/esm/hooks/types.mjs +24 -22
  302. package/dist/esm/hooks/types.mjs.map +1 -1
  303. package/dist/esm/instrumentation.mjs +109 -132
  304. package/dist/esm/instrumentation.mjs.map +1 -1
  305. package/dist/esm/langchain/google-common.mjs +1 -2
  306. package/dist/esm/langchain/index.mjs +5 -5
  307. package/dist/esm/langchain/language_models/chat_models.mjs +1 -2
  308. package/dist/esm/langchain/messages/tool.mjs +1 -2
  309. package/dist/esm/langchain/messages.mjs +2 -2
  310. package/dist/esm/langchain/openai.mjs +1 -2
  311. package/dist/esm/langchain/prompts.mjs +2 -2
  312. package/dist/esm/langchain/runnables.mjs +2 -2
  313. package/dist/esm/langchain/tools.mjs +2 -2
  314. package/dist/esm/langchain/utils/env.mjs +2 -2
  315. package/dist/esm/langfuse.mjs +60 -76
  316. package/dist/esm/langfuse.mjs.map +1 -1
  317. package/dist/esm/langfuseToolOutputTracing.mjs +267 -395
  318. package/dist/esm/langfuseToolOutputTracing.mjs.map +1 -1
  319. package/dist/esm/llm/anthropic/index.mjs +432 -559
  320. package/dist/esm/llm/anthropic/index.mjs.map +1 -1
  321. package/dist/esm/llm/anthropic/types.mjs +23 -45
  322. package/dist/esm/llm/anthropic/types.mjs.map +1 -1
  323. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +439 -725
  324. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  325. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +171 -253
  326. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  327. package/dist/esm/llm/anthropic/utils/output_parsers.mjs +3 -0
  328. package/dist/esm/llm/anthropic/utils/tools.mjs +12 -24
  329. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -1
  330. package/dist/esm/llm/bedrock/index.mjs +214 -238
  331. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  332. package/dist/esm/llm/bedrock/toolCache.mjs +84 -104
  333. package/dist/esm/llm/bedrock/toolCache.mjs.map +1 -1
  334. package/dist/esm/llm/bedrock/utils/index.mjs +3 -0
  335. package/dist/esm/llm/bedrock/utils/message_inputs.mjs +357 -618
  336. package/dist/esm/llm/bedrock/utils/message_inputs.mjs.map +1 -1
  337. package/dist/esm/llm/bedrock/utils/message_outputs.mjs +140 -147
  338. package/dist/esm/llm/bedrock/utils/message_outputs.mjs.map +1 -1
  339. package/dist/esm/llm/fake.mjs +86 -94
  340. package/dist/esm/llm/fake.mjs.map +1 -1
  341. package/dist/esm/llm/google/index.mjs +183 -235
  342. package/dist/esm/llm/google/index.mjs.map +1 -1
  343. package/dist/esm/llm/google/utils/common.mjs +403 -666
  344. package/dist/esm/llm/google/utils/common.mjs.map +1 -1
  345. package/dist/esm/llm/google/utils/zod_to_genai_parameters.mjs +3 -0
  346. package/dist/esm/llm/init.mjs +44 -51
  347. package/dist/esm/llm/init.mjs.map +1 -1
  348. package/dist/esm/llm/invoke.mjs +142 -180
  349. package/dist/esm/llm/invoke.mjs.map +1 -1
  350. package/dist/esm/llm/openai/index.mjs +1035 -1268
  351. package/dist/esm/llm/openai/index.mjs.map +1 -1
  352. package/dist/esm/llm/openai/utils/index.mjs +188 -312
  353. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  354. package/dist/esm/llm/openrouter/index.mjs +102 -151
  355. package/dist/esm/llm/openrouter/index.mjs.map +1 -1
  356. package/dist/esm/llm/openrouter/toolCache.mjs +35 -42
  357. package/dist/esm/llm/openrouter/toolCache.mjs.map +1 -1
  358. package/dist/esm/llm/providers.mjs +29 -34
  359. package/dist/esm/llm/providers.mjs.map +1 -1
  360. package/dist/esm/llm/request.mjs +20 -31
  361. package/dist/esm/llm/request.mjs.map +1 -1
  362. package/dist/esm/llm/vertexai/index.mjs +446 -449
  363. package/dist/esm/llm/vertexai/index.mjs.map +1 -1
  364. package/dist/esm/main.mjs +99 -87
  365. package/dist/esm/messages/anthropicToolCache.mjs +68 -117
  366. package/dist/esm/messages/anthropicToolCache.mjs.map +1 -1
  367. package/dist/esm/messages/cache.mjs +305 -416
  368. package/dist/esm/messages/cache.mjs.map +1 -1
  369. package/dist/esm/messages/content.mjs +36 -47
  370. package/dist/esm/messages/content.mjs.map +1 -1
  371. package/dist/esm/messages/contextPruning.mjs +112 -143
  372. package/dist/esm/messages/contextPruning.mjs.map +1 -1
  373. package/dist/esm/messages/contextPruningSettings.mjs +36 -44
  374. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -1
  375. package/dist/esm/messages/core.mjs +254 -393
  376. package/dist/esm/messages/core.mjs.map +1 -1
  377. package/dist/esm/messages/format.mjs +902 -1383
  378. package/dist/esm/messages/format.mjs.map +1 -1
  379. package/dist/esm/messages/ids.mjs +16 -18
  380. package/dist/esm/messages/ids.mjs.map +1 -1
  381. package/dist/esm/messages/index.mjs +13 -0
  382. package/dist/esm/messages/langchain.mjs +18 -16
  383. package/dist/esm/messages/langchain.mjs.map +1 -1
  384. package/dist/esm/messages/prune.mjs +1053 -1514
  385. package/dist/esm/messages/prune.mjs.map +1 -1
  386. package/dist/esm/messages/recency.mjs +77 -93
  387. package/dist/esm/messages/recency.mjs.map +1 -1
  388. package/dist/esm/messages/reducer.mjs +63 -76
  389. package/dist/esm/messages/reducer.mjs.map +1 -1
  390. package/dist/esm/messages/tools.mjs +49 -75
  391. package/dist/esm/messages/tools.mjs.map +1 -1
  392. package/dist/esm/openai/index.mjs +170 -215
  393. package/dist/esm/openai/index.mjs.map +1 -1
  394. package/dist/esm/responses/index.mjs +301 -389
  395. package/dist/esm/responses/index.mjs.map +1 -1
  396. package/dist/esm/run.mjs +903 -1111
  397. package/dist/esm/run.mjs.map +1 -1
  398. package/dist/esm/session/AgentSession.mjs +806 -985
  399. package/dist/esm/session/AgentSession.mjs.map +1 -1
  400. package/dist/esm/session/JsonlSessionStore.mjs +326 -407
  401. package/dist/esm/session/JsonlSessionStore.mjs.map +1 -1
  402. package/dist/esm/session/handlers.mjs +192 -206
  403. package/dist/esm/session/handlers.mjs.map +1 -1
  404. package/dist/esm/session/ids.mjs +9 -8
  405. package/dist/esm/session/ids.mjs.map +1 -1
  406. package/dist/esm/session/index.mjs +5 -0
  407. package/dist/esm/session/messageSerialization.mjs +94 -154
  408. package/dist/esm/session/messageSerialization.mjs.map +1 -1
  409. package/dist/esm/splitStream.mjs +147 -204
  410. package/dist/esm/splitStream.mjs.map +1 -1
  411. package/dist/esm/stream.mjs +872 -1341
  412. package/dist/esm/stream.mjs.map +1 -1
  413. package/dist/esm/summarization/index.mjs +57 -99
  414. package/dist/esm/summarization/index.mjs.map +1 -1
  415. package/dist/esm/summarization/node.mjs +640 -790
  416. package/dist/esm/summarization/node.mjs.map +1 -1
  417. package/dist/esm/tools/BashExecutor.mjs +103 -129
  418. package/dist/esm/tools/BashExecutor.mjs.map +1 -1
  419. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +162 -239
  420. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -1
  421. package/dist/esm/tools/Calculator.mjs +34 -36
  422. package/dist/esm/tools/Calculator.mjs.map +1 -1
  423. package/dist/esm/tools/CodeExecutor.mjs +123 -164
  424. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  425. package/dist/esm/tools/CodeSessionFileSummary.mjs +36 -44
  426. package/dist/esm/tools/CodeSessionFileSummary.mjs.map +1 -1
  427. package/dist/esm/tools/ProgrammaticToolCalling.mjs +454 -644
  428. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  429. package/dist/esm/tools/ReadFile.mjs +17 -18
  430. package/dist/esm/tools/ReadFile.mjs.map +1 -1
  431. package/dist/esm/tools/SkillTool.mjs +26 -25
  432. package/dist/esm/tools/SkillTool.mjs.map +1 -1
  433. package/dist/esm/tools/SubagentTool.mjs +59 -59
  434. package/dist/esm/tools/SubagentTool.mjs.map +1 -1
  435. package/dist/esm/tools/ToolNode.mjs +2144 -2684
  436. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  437. package/dist/esm/tools/ToolSearch.mjs +659 -804
  438. package/dist/esm/tools/ToolSearch.mjs.map +1 -1
  439. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs +248 -338
  440. package/dist/esm/tools/cloudflare/CloudflareBridgeRuntime.mjs.map +1 -1
  441. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs +170 -195
  442. package/dist/esm/tools/cloudflare/CloudflareProgrammaticToolCalling.mjs.map +1 -1
  443. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs +424 -517
  444. package/dist/esm/tools/cloudflare/CloudflareSandboxExecutionEngine.mjs.map +1 -1
  445. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs +91 -122
  446. package/dist/esm/tools/cloudflare/CloudflareSandboxTools.mjs.map +1 -1
  447. package/dist/esm/tools/cloudflare/index.mjs +5 -0
  448. package/dist/esm/tools/eagerEventExecution.mjs +75 -96
  449. package/dist/esm/tools/eagerEventExecution.mjs.map +1 -1
  450. package/dist/esm/tools/handlers.mjs +200 -260
  451. package/dist/esm/tools/handlers.mjs.map +1 -1
  452. package/dist/esm/tools/local/CompileCheckTool.mjs +150 -210
  453. package/dist/esm/tools/local/CompileCheckTool.mjs.map +1 -1
  454. package/dist/esm/tools/local/FileCheckpointer.mjs +77 -83
  455. package/dist/esm/tools/local/FileCheckpointer.mjs.map +1 -1
  456. package/dist/esm/tools/local/LocalCodingTools.mjs +760 -1017
  457. package/dist/esm/tools/local/LocalCodingTools.mjs.map +1 -1
  458. package/dist/esm/tools/local/LocalExecutionEngine.mjs +663 -936
  459. package/dist/esm/tools/local/LocalExecutionEngine.mjs.map +1 -1
  460. package/dist/esm/tools/local/LocalExecutionTools.mjs +49 -90
  461. package/dist/esm/tools/local/LocalExecutionTools.mjs.map +1 -1
  462. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs +283 -349
  463. package/dist/esm/tools/local/LocalProgrammaticToolCalling.mjs.map +1 -1
  464. package/dist/esm/tools/local/attachments.mjs +108 -163
  465. package/dist/esm/tools/local/attachments.mjs.map +1 -1
  466. package/dist/esm/tools/local/bashAst.mjs +99 -111
  467. package/dist/esm/tools/local/bashAst.mjs.map +1 -1
  468. package/dist/esm/tools/local/editStrategies.mjs +126 -167
  469. package/dist/esm/tools/local/editStrategies.mjs.map +1 -1
  470. package/dist/esm/tools/local/index.mjs +13 -0
  471. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs +136 -216
  472. package/dist/esm/tools/local/resolveLocalExecutionTools.mjs.map +1 -1
  473. package/dist/esm/tools/local/syntaxCheck.mjs +138 -155
  474. package/dist/esm/tools/local/syntaxCheck.mjs.map +1 -1
  475. package/dist/esm/tools/local/textEncoding.mjs +25 -21
  476. package/dist/esm/tools/local/textEncoding.mjs.map +1 -1
  477. package/dist/esm/tools/local/workspaceFS.mjs +38 -44
  478. package/dist/esm/tools/local/workspaceFS.mjs.map +1 -1
  479. package/dist/esm/tools/ptcTimeout.mjs +27 -42
  480. package/dist/esm/tools/ptcTimeout.mjs.map +1 -1
  481. package/dist/esm/tools/schema.mjs +24 -21
  482. package/dist/esm/tools/schema.mjs.map +1 -1
  483. package/dist/esm/tools/search/anthropic.mjs +24 -31
  484. package/dist/esm/tools/search/anthropic.mjs.map +1 -1
  485. package/dist/esm/tools/search/content.mjs +93 -116
  486. package/dist/esm/tools/search/content.mjs.map +1 -1
  487. package/dist/esm/tools/search/firecrawl.mjs +139 -169
  488. package/dist/esm/tools/search/firecrawl.mjs.map +1 -1
  489. package/dist/esm/tools/search/format.mjs +128 -194
  490. package/dist/esm/tools/search/format.mjs.map +1 -1
  491. package/dist/esm/tools/search/highlights.mjs +165 -230
  492. package/dist/esm/tools/search/highlights.mjs.map +1 -1
  493. package/dist/esm/tools/search/index.mjs +3 -0
  494. package/dist/esm/tools/search/rerankers.mjs +149 -168
  495. package/dist/esm/tools/search/rerankers.mjs.map +1 -1
  496. package/dist/esm/tools/search/schema.mjs +39 -37
  497. package/dist/esm/tools/search/schema.mjs.map +1 -1
  498. package/dist/esm/tools/search/search.mjs +426 -528
  499. package/dist/esm/tools/search/search.mjs.map +1 -1
  500. package/dist/esm/tools/search/serper-scraper.mjs +104 -124
  501. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -1
  502. package/dist/esm/tools/search/tavily-scraper.mjs +127 -178
  503. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -1
  504. package/dist/esm/tools/search/tavily-search.mjs +293 -357
  505. package/dist/esm/tools/search/tavily-search.mjs.map +1 -1
  506. package/dist/esm/tools/search/tool.mjs +259 -297
  507. package/dist/esm/tools/search/tool.mjs.map +1 -1
  508. package/dist/esm/tools/search/utils.mjs +74 -115
  509. package/dist/esm/tools/search/utils.mjs.map +1 -1
  510. package/dist/esm/tools/skillCatalog.mjs +54 -70
  511. package/dist/esm/tools/skillCatalog.mjs.map +1 -1
  512. package/dist/esm/tools/streamedToolCallSeals.mjs +42 -31
  513. package/dist/esm/tools/streamedToolCallSeals.mjs.map +1 -1
  514. package/dist/esm/tools/subagent/SubagentExecutor.mjs +612 -768
  515. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -1
  516. package/dist/esm/tools/subagent/index.mjs +2 -0
  517. package/dist/esm/tools/toolOutputReferences.mjs +523 -624
  518. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -1
  519. package/dist/esm/utils/callbacks.mjs +11 -19
  520. package/dist/esm/utils/callbacks.mjs.map +1 -1
  521. package/dist/esm/utils/errors.mjs +70 -93
  522. package/dist/esm/utils/errors.mjs.map +1 -1
  523. package/dist/esm/utils/events.mjs +32 -40
  524. package/dist/esm/utils/events.mjs.map +1 -1
  525. package/dist/esm/utils/graph.mjs +8 -10
  526. package/dist/esm/utils/graph.mjs.map +1 -1
  527. package/dist/esm/utils/handlers.mjs +60 -80
  528. package/dist/esm/utils/handlers.mjs.map +1 -1
  529. package/dist/esm/utils/index.mjs +10 -0
  530. package/dist/esm/utils/llm.mjs +19 -25
  531. package/dist/esm/utils/llm.mjs.map +1 -1
  532. package/dist/esm/utils/misc.mjs +30 -44
  533. package/dist/esm/utils/misc.mjs.map +1 -1
  534. package/dist/esm/utils/run.mjs +50 -64
  535. package/dist/esm/utils/run.mjs.map +1 -1
  536. package/dist/esm/utils/schema.mjs +11 -17
  537. package/dist/esm/utils/schema.mjs.map +1 -1
  538. package/dist/esm/utils/title.mjs +71 -104
  539. package/dist/esm/utils/title.mjs.map +1 -1
  540. package/dist/esm/utils/tokens.mjs +186 -281
  541. package/dist/esm/utils/tokens.mjs.map +1 -1
  542. package/dist/esm/utils/truncation.mjs +95 -112
  543. package/dist/esm/utils/truncation.mjs.map +1 -1
  544. package/dist/types/llm/bedrock/utils/index.d.ts +1 -1
  545. package/dist/types/llm/bedrock/utils/message_outputs.d.ts +9 -0
  546. package/dist/types/llm/vertexai/index.d.ts +10 -0
  547. package/dist/types/tools/ToolNode.d.ts +8 -0
  548. package/dist/types/tools/search/tool.d.ts +17 -0
  549. package/dist/types/tools/search/types.d.ts +4 -0
  550. package/dist/types/tools/streamedToolCallSeals.d.ts +5 -1
  551. package/dist/types/types/tools.d.ts +10 -0
  552. package/package.json +4 -10
  553. package/src/__tests__/stream.eagerEventExecution.test.ts +703 -0
  554. package/src/llm/bedrock/index.ts +40 -0
  555. package/src/llm/bedrock/streamSealDispatch.test.ts +158 -0
  556. package/src/llm/bedrock/utils/index.ts +1 -0
  557. package/src/llm/bedrock/utils/message_outputs.test.ts +85 -0
  558. package/src/llm/bedrock/utils/message_outputs.ts +43 -0
  559. package/src/llm/google/utils/common.test.ts +64 -0
  560. package/src/llm/google/utils/common.ts +18 -0
  561. package/src/llm/openai/index.ts +95 -1
  562. package/src/llm/openai/sequentialToolCallSeals.test.ts +199 -0
  563. package/src/llm/vertexai/index.ts +31 -0
  564. package/src/llm/vertexai/sealStreamedToolCalls.test.ts +88 -0
  565. package/src/llm/vertexai/streamSealDispatch.test.ts +148 -0
  566. package/src/stream.ts +40 -6
  567. package/src/tools/ToolNode.ts +85 -3
  568. package/src/tools/__tests__/ToolNode.onResultCompletion.test.ts +368 -0
  569. package/src/tools/search/highlights.ts +9 -1
  570. package/src/tools/search/search.ts +41 -3
  571. package/src/tools/search/source-processing.test.ts +373 -0
  572. package/src/tools/search/tool.ts +22 -2
  573. package/src/tools/search/types.ts +4 -0
  574. package/src/tools/streamedToolCallSeals.ts +37 -9
  575. package/src/types/tools.ts +10 -0
  576. package/dist/cjs/langchain/google-common.cjs.map +0 -1
  577. package/dist/cjs/langchain/index.cjs.map +0 -1
  578. package/dist/cjs/langchain/language_models/chat_models.cjs.map +0 -1
  579. package/dist/cjs/langchain/messages/tool.cjs.map +0 -1
  580. package/dist/cjs/langchain/messages.cjs.map +0 -1
  581. package/dist/cjs/langchain/openai.cjs.map +0 -1
  582. package/dist/cjs/langchain/prompts.cjs.map +0 -1
  583. package/dist/cjs/langchain/runnables.cjs.map +0 -1
  584. package/dist/cjs/langchain/tools.cjs.map +0 -1
  585. package/dist/cjs/langchain/utils/env.cjs.map +0 -1
  586. package/dist/cjs/main.cjs.map +0 -1
  587. package/dist/esm/langchain/google-common.mjs.map +0 -1
  588. package/dist/esm/langchain/index.mjs.map +0 -1
  589. package/dist/esm/langchain/language_models/chat_models.mjs.map +0 -1
  590. package/dist/esm/langchain/messages/tool.mjs.map +0 -1
  591. package/dist/esm/langchain/messages.mjs.map +0 -1
  592. package/dist/esm/langchain/openai.mjs.map +0 -1
  593. package/dist/esm/langchain/prompts.mjs.map +0 -1
  594. package/dist/esm/langchain/runnables.mjs.map +0 -1
  595. package/dist/esm/langchain/tools.mjs.map +0 -1
  596. package/dist/esm/langchain/utils/env.mjs.map +0 -1
  597. package/dist/esm/main.mjs.map +0 -1
@@ -1,319 +1,266 @@
1
- import { matchesQuery } from './matchers.mjs';
2
-
1
+ import { matchesQuery } from "./matchers.mjs";
2
+ //#region src/hooks/executeHooks.ts
3
3
  /** Default per-hook timeout when a matcher doesn't set its own. */
4
- const DEFAULT_HOOK_TIMEOUT_MS = 30_000;
4
+ const DEFAULT_HOOK_TIMEOUT_MS = 3e4;
5
5
  function freshResult() {
6
- return {
7
- additionalContexts: [],
8
- errors: [],
9
- };
6
+ return {
7
+ additionalContexts: [],
8
+ errors: []
9
+ };
10
10
  }
11
11
  function combineSignals(parent, timeoutMs) {
12
- const timeoutSignal = AbortSignal.timeout(timeoutMs);
13
- if (parent === undefined) {
14
- return timeoutSignal;
15
- }
16
- return AbortSignal.any([parent, timeoutSignal]);
12
+ const timeoutSignal = AbortSignal.timeout(timeoutMs);
13
+ if (parent === void 0) return timeoutSignal;
14
+ return AbortSignal.any([parent, timeoutSignal]);
17
15
  }
18
16
  function isTimeout(err) {
19
- if (err instanceof Error) {
20
- return err.name === 'TimeoutError' || err.name === 'AbortError';
21
- }
22
- return false;
17
+ if (err instanceof Error) return err.name === "TimeoutError" || err.name === "AbortError";
18
+ return false;
23
19
  }
24
20
  function describeError(err) {
25
- if (err instanceof Error) {
26
- return err.message !== '' ? err.message : err.name;
27
- }
28
- return String(err);
21
+ if (err instanceof Error) return err.message !== "" ? err.message : err.name;
22
+ return String(err);
29
23
  }
30
24
  function makeAbortPromise(signal) {
31
- let onAbort;
32
- const promise = new Promise((_resolve, reject) => {
33
- if (signal.aborted) {
34
- reject(signal.reason instanceof Error ? signal.reason : new Error('aborted'));
35
- return;
36
- }
37
- onAbort = () => {
38
- reject(signal.reason instanceof Error ? signal.reason : new Error('aborted'));
39
- };
40
- signal.addEventListener('abort', onAbort, { once: true });
41
- });
42
- const cleanup = () => {
43
- if (onAbort !== undefined) {
44
- signal.removeEventListener('abort', onAbort);
45
- onAbort = undefined;
46
- }
47
- };
48
- return { promise, cleanup };
25
+ let onAbort;
26
+ const promise = new Promise((_resolve, reject) => {
27
+ if (signal.aborted) {
28
+ reject(signal.reason instanceof Error ? signal.reason : /* @__PURE__ */ new Error("aborted"));
29
+ return;
30
+ }
31
+ onAbort = () => {
32
+ reject(signal.reason instanceof Error ? signal.reason : /* @__PURE__ */ new Error("aborted"));
33
+ };
34
+ signal.addEventListener("abort", onAbort, { once: true });
35
+ });
36
+ const cleanup = () => {
37
+ if (onAbort !== void 0) {
38
+ signal.removeEventListener("abort", onAbort);
39
+ onAbort = void 0;
40
+ }
41
+ };
42
+ return {
43
+ promise,
44
+ cleanup
45
+ };
49
46
  }
50
47
  async function runHook(hook, input, signal, abortPromise, matcher) {
51
- const hookPromise = Promise.resolve().then(() => hook(input, signal));
52
- try {
53
- const output = await Promise.race([hookPromise, abortPromise]);
54
- return { matcher, output, error: null, timedOut: false };
55
- }
56
- catch (err) {
57
- return {
58
- matcher,
59
- output: null,
60
- error: describeError(err),
61
- timedOut: isTimeout(err),
62
- };
63
- }
48
+ const hookPromise = Promise.resolve().then(() => hook(input, signal));
49
+ try {
50
+ return {
51
+ matcher,
52
+ output: await Promise.race([hookPromise, abortPromise]),
53
+ error: null,
54
+ timedOut: false
55
+ };
56
+ } catch (err) {
57
+ return {
58
+ matcher,
59
+ output: null,
60
+ error: describeError(err),
61
+ timedOut: isTimeout(err)
62
+ };
63
+ }
64
64
  }
65
65
  async function runMatcherHooks(matcher, input, signal) {
66
- const abortRace = makeAbortPromise(signal);
67
- const tasks = matcher.hooks.map((hook) => runHook(hook, input, signal, abortRace.promise, matcher));
68
- try {
69
- return await Promise.all(tasks);
70
- }
71
- finally {
72
- abortRace.cleanup();
73
- }
66
+ const abortRace = makeAbortPromise(signal);
67
+ const tasks = matcher.hooks.map((hook) => runHook(hook, input, signal, abortRace.promise, matcher));
68
+ try {
69
+ return await Promise.all(tasks);
70
+ } finally {
71
+ abortRace.cleanup();
72
+ }
74
73
  }
75
74
  function reportErrors(outcomes, event, logger) {
76
- for (const outcome of outcomes) {
77
- if (outcome.error === null) {
78
- continue;
79
- }
80
- if (outcome.matcher.internal === true) {
81
- continue;
82
- }
83
- const label = outcome.timedOut ? 'timed out' : 'threw an error';
84
- const message = `Hook for ${event} ${label}: ${outcome.error}`;
85
- if (logger !== undefined) {
86
- logger.warn(message);
87
- continue;
88
- }
89
- // eslint-disable-next-line no-console
90
- console.warn(message);
91
- }
75
+ for (const outcome of outcomes) {
76
+ if (outcome.error === null) continue;
77
+ if (outcome.matcher.internal === true) continue;
78
+ const message = `Hook for ${event} ${outcome.timedOut ? "timed out" : "threw an error"}: ${outcome.error}`;
79
+ if (logger !== void 0) {
80
+ logger.warn(message);
81
+ continue;
82
+ }
83
+ console.warn(message);
84
+ }
92
85
  }
93
86
  function applyToolDecision(agg, decision, reason) {
94
- if (decision === 'deny') {
95
- if (agg.decision === 'deny') {
96
- return;
97
- }
98
- agg.decision = 'deny';
99
- agg.reason = reason;
100
- return;
101
- }
102
- if (decision === 'ask') {
103
- if (agg.decision === 'deny' || agg.decision === 'ask') {
104
- return;
105
- }
106
- agg.decision = 'ask';
107
- agg.reason = reason;
108
- return;
109
- }
110
- if (agg.decision === undefined) {
111
- agg.decision = 'allow';
112
- agg.reason = reason;
113
- }
87
+ if (decision === "deny") {
88
+ if (agg.decision === "deny") return;
89
+ agg.decision = "deny";
90
+ agg.reason = reason;
91
+ return;
92
+ }
93
+ if (decision === "ask") {
94
+ if (agg.decision === "deny" || agg.decision === "ask") return;
95
+ agg.decision = "ask";
96
+ agg.reason = reason;
97
+ return;
98
+ }
99
+ if (agg.decision === void 0) {
100
+ agg.decision = "allow";
101
+ agg.reason = reason;
102
+ }
114
103
  }
115
104
  function applyStopDecision(agg, decision, reason) {
116
- if (decision === 'block') {
117
- if (agg.stopDecision === 'block') {
118
- return;
119
- }
120
- agg.stopDecision = 'block';
121
- agg.reason = reason;
122
- return;
123
- }
124
- if (agg.stopDecision === undefined) {
125
- agg.stopDecision = 'continue';
126
- if (agg.reason === undefined) {
127
- agg.reason = reason;
128
- }
129
- }
105
+ if (decision === "block") {
106
+ if (agg.stopDecision === "block") return;
107
+ agg.stopDecision = "block";
108
+ agg.reason = reason;
109
+ return;
110
+ }
111
+ if (agg.stopDecision === void 0) {
112
+ agg.stopDecision = "continue";
113
+ if (agg.reason === void 0) agg.reason = reason;
114
+ }
130
115
  }
131
116
  function applyDecision(agg, output) {
132
- if (!('decision' in output) || output.decision === undefined) {
133
- return;
134
- }
135
- const decision = output.decision;
136
- const reason = 'reason' in output && typeof output.reason === 'string'
137
- ? output.reason
138
- : undefined;
139
- if (decision === 'deny' || decision === 'ask' || decision === 'allow') {
140
- applyToolDecision(agg, decision, reason);
141
- return;
142
- }
143
- applyStopDecision(agg, decision, reason);
117
+ if (!("decision" in output) || output.decision === void 0) return;
118
+ const decision = output.decision;
119
+ const reason = "reason" in output && typeof output.reason === "string" ? output.reason : void 0;
120
+ if (decision === "deny" || decision === "ask" || decision === "allow") {
121
+ applyToolDecision(agg, decision, reason);
122
+ return;
123
+ }
124
+ applyStopDecision(agg, decision, reason);
144
125
  }
145
126
  function applyContext(agg, output) {
146
- if (typeof output.additionalContext === 'string' &&
147
- output.additionalContext.length > 0) {
148
- agg.additionalContexts.push(output.additionalContext);
149
- }
127
+ if (typeof output.additionalContext === "string" && output.additionalContext.length > 0) agg.additionalContexts.push(output.additionalContext);
150
128
  }
151
129
  function applyStopFlag(agg, output) {
152
- if (output.preventContinuation !== true) {
153
- return;
154
- }
155
- agg.preventContinuation = true;
156
- if (typeof output.stopReason === 'string' && agg.stopReason === undefined) {
157
- agg.stopReason = output.stopReason;
158
- }
130
+ if (output.preventContinuation !== true) return;
131
+ agg.preventContinuation = true;
132
+ if (typeof output.stopReason === "string" && agg.stopReason === void 0) agg.stopReason = output.stopReason;
159
133
  }
160
134
  function applyUpdatedInput(agg, output) {
161
- if (!('updatedInput' in output) || output.updatedInput === undefined) {
162
- return;
163
- }
164
- agg.updatedInput = output.updatedInput;
135
+ if (!("updatedInput" in output) || output.updatedInput === void 0) return;
136
+ agg.updatedInput = output.updatedInput;
165
137
  }
166
138
  function applyUpdatedOutput(agg, output) {
167
- if (!('updatedOutput' in output) || output.updatedOutput === undefined) {
168
- return;
169
- }
170
- agg.updatedOutput = output.updatedOutput;
139
+ if (!("updatedOutput" in output) || output.updatedOutput === void 0) return;
140
+ agg.updatedOutput = output.updatedOutput;
171
141
  }
172
142
  function applyAllowedDecisions(agg, output) {
173
- if (!('allowedDecisions' in output) ||
174
- output.allowedDecisions === undefined) {
175
- return;
176
- }
177
- agg.allowedDecisions = output.allowedDecisions;
143
+ if (!("allowedDecisions" in output) || output.allowedDecisions === void 0) return;
144
+ agg.allowedDecisions = output.allowedDecisions;
178
145
  }
179
146
  function fold(outcomes) {
180
- const agg = freshResult();
181
- for (const outcome of outcomes) {
182
- if (outcome.error !== null) {
183
- if (outcome.matcher.internal !== true) {
184
- agg.errors.push(outcome.error);
185
- }
186
- continue;
187
- }
188
- const output = outcome.output;
189
- if (output === null) {
190
- continue;
191
- }
192
- /**
193
- * Skip fire-and-forget outputs entirely: the agent has already
194
- * moved on, so an async hook cannot influence the run. Background
195
- * work inside the hook body still runs (we don't cancel it), it
196
- * just doesn't fold into the aggregate result.
197
- */
198
- if (output.async === true) {
199
- continue;
200
- }
201
- applyContext(agg, output);
202
- applyStopFlag(agg, output);
203
- applyDecision(agg, output);
204
- applyUpdatedInput(agg, output);
205
- applyUpdatedOutput(agg, output);
206
- applyAllowedDecisions(agg, output);
207
- }
208
- return agg;
147
+ const agg = freshResult();
148
+ for (const outcome of outcomes) {
149
+ if (outcome.error !== null) {
150
+ if (outcome.matcher.internal !== true) agg.errors.push(outcome.error);
151
+ continue;
152
+ }
153
+ const output = outcome.output;
154
+ if (output === null) continue;
155
+ /**
156
+ * Skip fire-and-forget outputs entirely: the agent has already
157
+ * moved on, so an async hook cannot influence the run. Background
158
+ * work inside the hook body still runs (we don't cancel it), it
159
+ * just doesn't fold into the aggregate result.
160
+ */
161
+ if (output.async === true) continue;
162
+ applyContext(agg, output);
163
+ applyStopFlag(agg, output);
164
+ applyDecision(agg, output);
165
+ applyUpdatedInput(agg, output);
166
+ applyUpdatedOutput(agg, output);
167
+ applyAllowedDecisions(agg, output);
168
+ }
169
+ return agg;
209
170
  }
210
171
  /**
211
- * Fires every matcher registered against `input.hook_event_name`, folding
212
- * their results per `deny > ask > allow` precedence and accumulating
213
- * context/errors.
214
- *
215
- * ## Parallelism and determinism
216
- *
217
- * All matching hooks fire simultaneously and are awaited via `Promise.all`,
218
- * which preserves input-array order in its returned results. The fold
219
- * therefore iterates outcomes in **registration order** — outer loop over
220
- * matchers as they sit in the registry (global first, then session), inner
221
- * loop over each matcher's `hooks` array. Last-writer-wins fields
222
- * (`updatedInput`, `updatedOutput`) are deterministic in that order, even
223
- * though hooks may complete in arbitrary wall-clock order.
224
- *
225
- * Consumers that need a single authoritative rewrite should still scope
226
- * `updatedInput`/`updatedOutput` to one hook per matcher to avoid subtle
227
- * precedence bugs when matchers are added in a different order than
228
- * expected.
229
- *
230
- * ## Timeouts and cancellation
231
- *
232
- * Each matcher receives **one shared `AbortSignal`** derived from the
233
- * caller's parent signal combined with `matcher.timeout` (falling back to
234
- * `opts.timeoutMs`, default {@link DEFAULT_HOOK_TIMEOUT_MS}). Sharing the
235
- * signal across hooks in a matcher collapses N timer allocations into
236
- * one, which matters on the PreToolUse hot path where a matcher with
237
- * several hooks fires on every tool call. Each hook call is raced
238
- * against the shared signal, so even a hook that ignores the signal is
239
- * force-unblocked when the timeout fires. Timeout/abort errors are
240
- * swallowed into the aggregated result's `errors` array (non-fatal by
241
- * default).
242
- *
243
- * ## Internal matchers
244
- *
245
- * A matcher with `internal: true` is excluded from both the `errors` array
246
- * and the logger output. Use it for infrastructure hooks whose failures
247
- * should not pollute user-visible diagnostics.
248
- *
249
- * ## Once semantics — atomic at-most-once
250
- *
251
- * A matcher with `once: true` is removed from the registry **before any
252
- * hook runs**, inside the synchronous prefix of `executeHooks` (between
253
- * `getMatchers` and the first `await`). Because Node's event loop serialises
254
- * sync work, two concurrent `executeHooks` calls can never both observe
255
- * and dispatch the same `once` matcher — whichever call runs its sync
256
- * prefix first consumes it, and the loser sees an empty bucket.
257
- *
258
- * Trade-off: if every hook in a `once` matcher throws, the matcher is
259
- * still gone. "Once" here means "at most one dispatch, ever", not "at
260
- * most one successful execution with retry on failure". Hosts that need
261
- * retry semantics should register a normal matcher and self-unregister
262
- * via the `unregister` callback returned from `registry.register`.
263
- */
172
+ * Fires every matcher registered against `input.hook_event_name`, folding
173
+ * their results per `deny > ask > allow` precedence and accumulating
174
+ * context/errors.
175
+ *
176
+ * ## Parallelism and determinism
177
+ *
178
+ * All matching hooks fire simultaneously and are awaited via `Promise.all`,
179
+ * which preserves input-array order in its returned results. The fold
180
+ * therefore iterates outcomes in **registration order** — outer loop over
181
+ * matchers as they sit in the registry (global first, then session), inner
182
+ * loop over each matcher's `hooks` array. Last-writer-wins fields
183
+ * (`updatedInput`, `updatedOutput`) are deterministic in that order, even
184
+ * though hooks may complete in arbitrary wall-clock order.
185
+ *
186
+ * Consumers that need a single authoritative rewrite should still scope
187
+ * `updatedInput`/`updatedOutput` to one hook per matcher to avoid subtle
188
+ * precedence bugs when matchers are added in a different order than
189
+ * expected.
190
+ *
191
+ * ## Timeouts and cancellation
192
+ *
193
+ * Each matcher receives **one shared `AbortSignal`** derived from the
194
+ * caller's parent signal combined with `matcher.timeout` (falling back to
195
+ * `opts.timeoutMs`, default {@link DEFAULT_HOOK_TIMEOUT_MS}). Sharing the
196
+ * signal across hooks in a matcher collapses N timer allocations into
197
+ * one, which matters on the PreToolUse hot path where a matcher with
198
+ * several hooks fires on every tool call. Each hook call is raced
199
+ * against the shared signal, so even a hook that ignores the signal is
200
+ * force-unblocked when the timeout fires. Timeout/abort errors are
201
+ * swallowed into the aggregated result's `errors` array (non-fatal by
202
+ * default).
203
+ *
204
+ * ## Internal matchers
205
+ *
206
+ * A matcher with `internal: true` is excluded from both the `errors` array
207
+ * and the logger output. Use it for infrastructure hooks whose failures
208
+ * should not pollute user-visible diagnostics.
209
+ *
210
+ * ## Once semantics — atomic at-most-once
211
+ *
212
+ * A matcher with `once: true` is removed from the registry **before any
213
+ * hook runs**, inside the synchronous prefix of `executeHooks` (between
214
+ * `getMatchers` and the first `await`). Because Node's event loop serialises
215
+ * sync work, two concurrent `executeHooks` calls can never both observe
216
+ * and dispatch the same `once` matcher — whichever call runs its sync
217
+ * prefix first consumes it, and the loser sees an empty bucket.
218
+ *
219
+ * Trade-off: if every hook in a `once` matcher throws, the matcher is
220
+ * still gone. "Once" here means "at most one dispatch, ever", not "at
221
+ * most one successful execution with retry on failure". Hosts that need
222
+ * retry semantics should register a normal matcher and self-unregister
223
+ * via the `unregister` callback returned from `registry.register`.
224
+ */
264
225
  async function executeHooks(opts) {
265
- const { registry, input, sessionId, matchQuery, signal, timeoutMs = DEFAULT_HOOK_TIMEOUT_MS, logger, } = opts;
266
- const event = input.hook_event_name;
267
- const matchers = registry.getMatchers(event, sessionId);
268
- if (matchers.length === 0) {
269
- return freshResult();
270
- }
271
- // --- SYNC CRITICAL SECTION: once-matcher removal must complete before any await ---
272
- const tasks = [];
273
- for (const matcher of matchers) {
274
- if (!matchesQuery(matcher.pattern, matchQuery)) {
275
- continue;
276
- }
277
- if (matcher.once === true) {
278
- registry.removeMatcher(event, matcher, sessionId);
279
- }
280
- if (matcher.hooks.length === 0) {
281
- continue;
282
- }
283
- const perHookTimeout = matcher.timeout ?? timeoutMs;
284
- const matcherSignal = combineSignals(signal, perHookTimeout);
285
- tasks.push(runMatcherHooks(matcher, input, matcherSignal));
286
- }
287
- // --- END SYNC CRITICAL SECTION ---
288
- if (tasks.length === 0) {
289
- return freshResult();
290
- }
291
- const outcomes = (await Promise.all(tasks)).flat();
292
- reportErrors(outcomes, event, logger);
293
- const aggregated = fold(outcomes);
294
- /**
295
- * Centralized `preventContinuation` propagation: when any hook (across
296
- * any callsite RunStart, PreToolUse, PostToolBatch, SubagentStop,
297
- * etc.) returns `preventContinuation: true`, raise a halt signal on
298
- * the registry scoped to the run's `sessionId`. `Run.processStream`
299
- * polls the signal between stream events using its own id and exits
300
- * cleanly, skipping the `Stop` hook (since the run is being halted,
301
- * not naturally completing).
302
- *
303
- * First-write-wins per session inside the registry — a halt already
304
- * raised by an earlier hook in the same run is preserved so the
305
- * original `reason` / `source` are not clobbered. Hooks fired
306
- * without a `sessionId` cannot raise a halt (there's no run for the
307
- * loop to poll under), which is fine: every in-tree callsite passes
308
- * `sessionId: runId`. Pre-stream callsites in `Run.processStream`
309
- * still read `preventContinuation` directly off the result for an
310
- * early return because they have not yet entered the stream loop.
311
- */
312
- if (aggregated.preventContinuation === true && sessionId !== undefined) {
313
- registry.haltRun(sessionId, aggregated.stopReason ?? 'preventContinuation', event);
314
- }
315
- return aggregated;
226
+ const { registry, input, sessionId, matchQuery, signal, timeoutMs = DEFAULT_HOOK_TIMEOUT_MS, logger } = opts;
227
+ const event = input.hook_event_name;
228
+ const matchers = registry.getMatchers(event, sessionId);
229
+ if (matchers.length === 0) return freshResult();
230
+ const tasks = [];
231
+ for (const matcher of matchers) {
232
+ if (!matchesQuery(matcher.pattern, matchQuery)) continue;
233
+ if (matcher.once === true) registry.removeMatcher(event, matcher, sessionId);
234
+ if (matcher.hooks.length === 0) continue;
235
+ const matcherSignal = combineSignals(signal, matcher.timeout ?? timeoutMs);
236
+ tasks.push(runMatcherHooks(matcher, input, matcherSignal));
237
+ }
238
+ if (tasks.length === 0) return freshResult();
239
+ const outcomes = (await Promise.all(tasks)).flat();
240
+ reportErrors(outcomes, event, logger);
241
+ const aggregated = fold(outcomes);
242
+ /**
243
+ * Centralized `preventContinuation` propagation: when any hook (across
244
+ * any callsite RunStart, PreToolUse, PostToolBatch, SubagentStop,
245
+ * etc.) returns `preventContinuation: true`, raise a halt signal on
246
+ * the registry scoped to the run's `sessionId`. `Run.processStream`
247
+ * polls the signal between stream events using its own id and exits
248
+ * cleanly, skipping the `Stop` hook (since the run is being halted,
249
+ * not naturally completing).
250
+ *
251
+ * First-write-wins per session inside the registry — a halt already
252
+ * raised by an earlier hook in the same run is preserved so the
253
+ * original `reason` / `source` are not clobbered. Hooks fired
254
+ * without a `sessionId` cannot raise a halt (there's no run for the
255
+ * loop to poll under), which is fine: every in-tree callsite passes
256
+ * `sessionId: runId`. Pre-stream callsites in `Run.processStream`
257
+ * still read `preventContinuation` directly off the result for an
258
+ * early return because they have not yet entered the stream loop.
259
+ */
260
+ if (aggregated.preventContinuation === true && sessionId !== void 0) registry.haltRun(sessionId, aggregated.stopReason ?? "preventContinuation", event);
261
+ return aggregated;
316
262
  }
317
-
263
+ //#endregion
318
264
  export { DEFAULT_HOOK_TIMEOUT_MS, executeHooks };
319
- //# sourceMappingURL=executeHooks.mjs.map
265
+
266
+ //# sourceMappingURL=executeHooks.mjs.map