@illuma-ai/agents 1.4.0-alpha.6 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (800) hide show
  1. package/README.md +62 -0
  2. package/dist/cjs/agents/AgentContext.cjs +274 -67
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -1
  4. package/dist/cjs/common/enum.cjs +44 -13
  5. package/dist/cjs/common/enum.cjs.map +1 -1
  6. package/dist/cjs/graphs/Graph.cjs +182 -5
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  8. package/dist/cjs/graphs/MultiAgentGraph.cjs +152 -1167
  9. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -1
  10. package/dist/cjs/hooks/HookRegistry.cjs +162 -0
  11. package/dist/cjs/hooks/HookRegistry.cjs.map +1 -0
  12. package/dist/cjs/hooks/executeHooks.cjs +276 -0
  13. package/dist/cjs/hooks/executeHooks.cjs.map +1 -0
  14. package/dist/cjs/hooks/matchers.cjs +256 -0
  15. package/dist/cjs/hooks/matchers.cjs.map +1 -0
  16. package/dist/cjs/hooks/types.cjs +27 -0
  17. package/dist/cjs/hooks/types.cjs.map +1 -0
  18. package/dist/cjs/langchain/google-common.cjs +3 -0
  19. package/dist/cjs/langchain/google-common.cjs.map +1 -0
  20. package/dist/cjs/langchain/index.cjs +86 -0
  21. package/dist/cjs/langchain/index.cjs.map +1 -0
  22. package/dist/cjs/langchain/language_models/chat_models.cjs +3 -0
  23. package/dist/cjs/langchain/language_models/chat_models.cjs.map +1 -0
  24. package/dist/cjs/langchain/messages/tool.cjs +3 -0
  25. package/dist/cjs/langchain/messages/tool.cjs.map +1 -0
  26. package/dist/cjs/langchain/messages.cjs +51 -0
  27. package/dist/cjs/langchain/messages.cjs.map +1 -0
  28. package/dist/cjs/langchain/openai.cjs +3 -0
  29. package/dist/cjs/langchain/openai.cjs.map +1 -0
  30. package/dist/cjs/langchain/prompts.cjs +11 -0
  31. package/dist/cjs/langchain/prompts.cjs.map +1 -0
  32. package/dist/cjs/langchain/runnables.cjs +19 -0
  33. package/dist/cjs/langchain/runnables.cjs.map +1 -0
  34. package/dist/cjs/langchain/tools.cjs +23 -0
  35. package/dist/cjs/langchain/tools.cjs.map +1 -0
  36. package/dist/cjs/langchain/utils/env.cjs +11 -0
  37. package/dist/cjs/langchain/utils/env.cjs.map +1 -0
  38. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +5 -1
  39. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  40. package/dist/cjs/llm/bedrock/cacheSupport.cjs +55 -0
  41. package/dist/cjs/llm/bedrock/cacheSupport.cjs.map +1 -0
  42. package/dist/cjs/llm/bedrock/index.cjs +61 -33
  43. package/dist/cjs/llm/bedrock/index.cjs.map +1 -1
  44. package/dist/cjs/llm/openai/index.cjs +0 -3
  45. package/dist/cjs/llm/openai/index.cjs.map +1 -1
  46. package/dist/cjs/llm/openai/utils/index.cjs +27 -10
  47. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -1
  48. package/dist/cjs/main.cjs +178 -127
  49. package/dist/cjs/main.cjs.map +1 -1
  50. package/dist/cjs/messages/cache.cjs +89 -0
  51. package/dist/cjs/messages/cache.cjs.map +1 -1
  52. package/dist/cjs/messages/contextPruning.cjs +156 -0
  53. package/dist/cjs/messages/contextPruning.cjs.map +1 -0
  54. package/dist/cjs/messages/contextPruningSettings.cjs +53 -0
  55. package/dist/cjs/messages/contextPruningSettings.cjs.map +1 -0
  56. package/dist/cjs/messages/format.cjs +144 -20
  57. package/dist/cjs/messages/format.cjs.map +1 -1
  58. package/dist/cjs/messages/prune.cjs +505 -4
  59. package/dist/cjs/messages/prune.cjs.map +1 -1
  60. package/dist/cjs/run.cjs +141 -1
  61. package/dist/cjs/run.cjs.map +1 -1
  62. package/dist/cjs/tools/BashExecutor.cjs +235 -0
  63. package/dist/cjs/tools/BashExecutor.cjs.map +1 -0
  64. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs +297 -0
  65. package/dist/cjs/tools/BashProgrammaticToolCalling.cjs.map +1 -0
  66. package/dist/cjs/tools/CodeExecutor.cjs +44 -47
  67. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -1
  68. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +16 -11
  69. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -1
  70. package/dist/cjs/tools/ReadFile.cjs +44 -0
  71. package/dist/cjs/tools/ReadFile.cjs.map +1 -0
  72. package/dist/cjs/tools/SkillTool.cjs +51 -0
  73. package/dist/cjs/tools/SkillTool.cjs.map +1 -0
  74. package/dist/cjs/tools/SubagentTool.cjs +93 -0
  75. package/dist/cjs/tools/SubagentTool.cjs.map +1 -0
  76. package/dist/cjs/tools/ToolNode.cjs +450 -24
  77. package/dist/cjs/tools/ToolNode.cjs.map +1 -1
  78. package/dist/cjs/tools/search/search.cjs +11 -3
  79. package/dist/cjs/tools/search/search.cjs.map +1 -1
  80. package/dist/cjs/tools/search/tavily-scraper.cjs +189 -0
  81. package/dist/cjs/tools/search/tavily-scraper.cjs.map +1 -0
  82. package/dist/cjs/tools/search/tavily-search.cjs +372 -0
  83. package/dist/cjs/tools/search/tavily-search.cjs.map +1 -0
  84. package/dist/cjs/tools/search/tool.cjs +28 -4
  85. package/dist/cjs/tools/search/tool.cjs.map +1 -1
  86. package/dist/cjs/tools/search/utils.cjs +10 -3
  87. package/dist/cjs/tools/search/utils.cjs.map +1 -1
  88. package/dist/cjs/tools/skillCatalog.cjs +84 -0
  89. package/dist/cjs/tools/skillCatalog.cjs.map +1 -0
  90. package/dist/cjs/tools/subagent/SubagentExecutor.cjs +512 -0
  91. package/dist/cjs/tools/subagent/SubagentExecutor.cjs.map +1 -0
  92. package/dist/cjs/tools/toolOutputReferences.cjs +670 -0
  93. package/dist/cjs/tools/toolOutputReferences.cjs.map +1 -0
  94. package/dist/cjs/types/agent-cache.cjs +53 -0
  95. package/dist/cjs/types/agent-cache.cjs.map +1 -0
  96. package/dist/cjs/types/graph.cjs.map +1 -1
  97. package/dist/cjs/utils/truncation.cjs +135 -0
  98. package/dist/cjs/utils/truncation.cjs.map +1 -0
  99. package/dist/esm/agents/AgentContext.mjs +274 -67
  100. package/dist/esm/agents/AgentContext.mjs.map +1 -1
  101. package/dist/esm/common/enum.mjs +44 -12
  102. package/dist/esm/common/enum.mjs.map +1 -1
  103. package/dist/esm/graphs/Graph.mjs +182 -5
  104. package/dist/esm/graphs/Graph.mjs.map +1 -1
  105. package/dist/esm/graphs/MultiAgentGraph.mjs +155 -1170
  106. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -1
  107. package/dist/esm/hooks/HookRegistry.mjs +160 -0
  108. package/dist/esm/hooks/HookRegistry.mjs.map +1 -0
  109. package/dist/esm/hooks/executeHooks.mjs +273 -0
  110. package/dist/esm/hooks/executeHooks.mjs.map +1 -0
  111. package/dist/esm/hooks/matchers.mjs +251 -0
  112. package/dist/esm/hooks/matchers.mjs.map +1 -0
  113. package/dist/esm/hooks/types.mjs +25 -0
  114. package/dist/esm/hooks/types.mjs.map +1 -0
  115. package/dist/esm/langchain/google-common.mjs +2 -0
  116. package/dist/esm/langchain/google-common.mjs.map +1 -0
  117. package/dist/esm/langchain/index.mjs +5 -0
  118. package/dist/esm/langchain/language_models/chat_models.mjs +2 -0
  119. package/dist/esm/langchain/language_models/chat_models.mjs.map +1 -0
  120. package/dist/esm/langchain/messages/tool.mjs +2 -0
  121. package/dist/esm/langchain/messages/tool.mjs.map +1 -0
  122. package/dist/esm/langchain/messages.mjs +2 -0
  123. package/dist/esm/langchain/messages.mjs.map +1 -0
  124. package/dist/esm/langchain/openai.mjs +2 -0
  125. package/dist/esm/langchain/openai.mjs.map +1 -0
  126. package/dist/esm/langchain/prompts.mjs +2 -0
  127. package/dist/esm/langchain/prompts.mjs.map +1 -0
  128. package/dist/esm/langchain/runnables.mjs +2 -0
  129. package/dist/esm/langchain/runnables.mjs.map +1 -0
  130. package/dist/esm/langchain/tools.mjs +2 -0
  131. package/dist/esm/langchain/tools.mjs.map +1 -0
  132. package/dist/esm/langchain/utils/env.mjs +2 -0
  133. package/dist/esm/langchain/utils/env.mjs.map +1 -0
  134. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +5 -1
  135. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  136. package/dist/esm/llm/bedrock/cacheSupport.mjs +52 -0
  137. package/dist/esm/llm/bedrock/cacheSupport.mjs.map +1 -0
  138. package/dist/esm/llm/bedrock/index.mjs +61 -34
  139. package/dist/esm/llm/bedrock/index.mjs.map +1 -1
  140. package/dist/esm/llm/openai/index.mjs +0 -3
  141. package/dist/esm/llm/openai/index.mjs.map +1 -1
  142. package/dist/esm/llm/openai/utils/index.mjs +27 -10
  143. package/dist/esm/llm/openai/utils/index.mjs.map +1 -1
  144. package/dist/esm/main.mjs +21 -27
  145. package/dist/esm/main.mjs.map +1 -1
  146. package/dist/esm/messages/cache.mjs +89 -0
  147. package/dist/esm/messages/cache.mjs.map +1 -1
  148. package/dist/esm/messages/contextPruning.mjs +154 -0
  149. package/dist/esm/messages/contextPruning.mjs.map +1 -0
  150. package/dist/esm/messages/contextPruningSettings.mjs +50 -0
  151. package/dist/esm/messages/contextPruningSettings.mjs.map +1 -0
  152. package/dist/esm/messages/format.mjs +136 -12
  153. package/dist/esm/messages/format.mjs.map +1 -1
  154. package/dist/esm/messages/prune.mjs +504 -7
  155. package/dist/esm/messages/prune.mjs.map +1 -1
  156. package/dist/esm/run.mjs +141 -1
  157. package/dist/esm/run.mjs.map +1 -1
  158. package/dist/esm/tools/BashExecutor.mjs +227 -0
  159. package/dist/esm/tools/BashExecutor.mjs.map +1 -0
  160. package/dist/esm/tools/BashProgrammaticToolCalling.mjs +288 -0
  161. package/dist/esm/tools/BashProgrammaticToolCalling.mjs.map +1 -0
  162. package/dist/esm/tools/CodeExecutor.mjs +44 -48
  163. package/dist/esm/tools/CodeExecutor.mjs.map +1 -1
  164. package/dist/esm/tools/ProgrammaticToolCalling.mjs +17 -12
  165. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -1
  166. package/dist/esm/tools/ReadFile.mjs +39 -0
  167. package/dist/esm/tools/ReadFile.mjs.map +1 -0
  168. package/dist/esm/tools/SkillTool.mjs +46 -0
  169. package/dist/esm/tools/SkillTool.mjs.map +1 -0
  170. package/dist/esm/tools/SubagentTool.mjs +86 -0
  171. package/dist/esm/tools/SubagentTool.mjs.map +1 -0
  172. package/dist/esm/tools/ToolNode.mjs +452 -26
  173. package/dist/esm/tools/ToolNode.mjs.map +1 -1
  174. package/dist/esm/tools/search/search.mjs +11 -3
  175. package/dist/esm/tools/search/search.mjs.map +1 -1
  176. package/dist/esm/tools/search/tavily-scraper.mjs +186 -0
  177. package/dist/esm/tools/search/tavily-scraper.mjs.map +1 -0
  178. package/dist/esm/tools/search/tavily-search.mjs +370 -0
  179. package/dist/esm/tools/search/tavily-search.mjs.map +1 -0
  180. package/dist/esm/tools/search/tool.mjs +28 -4
  181. package/dist/esm/tools/search/tool.mjs.map +1 -1
  182. package/dist/esm/tools/search/utils.mjs +10 -3
  183. package/dist/esm/tools/search/utils.mjs.map +1 -1
  184. package/dist/esm/tools/skillCatalog.mjs +82 -0
  185. package/dist/esm/tools/skillCatalog.mjs.map +1 -0
  186. package/dist/esm/tools/subagent/SubagentExecutor.mjs +506 -0
  187. package/dist/esm/tools/subagent/SubagentExecutor.mjs.map +1 -0
  188. package/dist/esm/tools/toolOutputReferences.mjs +662 -0
  189. package/dist/esm/tools/toolOutputReferences.mjs.map +1 -0
  190. package/dist/esm/types/agent-cache.mjs +51 -0
  191. package/dist/esm/types/agent-cache.mjs.map +1 -0
  192. package/dist/esm/types/graph.mjs.map +1 -1
  193. package/dist/esm/utils/truncation.mjs +128 -0
  194. package/dist/esm/utils/truncation.mjs.map +1 -0
  195. package/dist/types/agents/AgentContext.d.ts +101 -8
  196. package/dist/types/common/enum.d.ts +39 -12
  197. package/dist/types/common/index.d.ts +0 -1
  198. package/dist/types/graphs/Graph.d.ts +43 -0
  199. package/dist/types/graphs/MultiAgentGraph.d.ts +26 -150
  200. package/dist/types/graphs/index.d.ts +0 -1
  201. package/dist/types/hooks/HookRegistry.d.ts +56 -0
  202. package/dist/types/hooks/executeHooks.d.ts +79 -0
  203. package/dist/types/hooks/index.d.ts +6 -0
  204. package/dist/types/hooks/matchers.d.ts +95 -0
  205. package/dist/types/hooks/types.d.ts +320 -0
  206. package/dist/types/index.d.ts +9 -9
  207. package/dist/types/langchain/google-common.d.ts +1 -0
  208. package/dist/types/langchain/index.d.ts +8 -0
  209. package/dist/types/langchain/language_models/chat_models.d.ts +1 -0
  210. package/dist/types/langchain/messages/tool.d.ts +1 -0
  211. package/dist/types/langchain/messages.d.ts +2 -0
  212. package/dist/types/langchain/openai.d.ts +1 -0
  213. package/dist/types/langchain/prompts.d.ts +1 -0
  214. package/dist/types/langchain/runnables.d.ts +2 -0
  215. package/dist/types/langchain/tools.d.ts +2 -0
  216. package/dist/types/langchain/utils/env.d.ts +1 -0
  217. package/dist/types/llm/bedrock/cacheSupport.d.ts +35 -0
  218. package/dist/types/llm/bedrock/index.d.ts +54 -1
  219. package/dist/types/messages/contextPruning.d.ts +42 -0
  220. package/dist/types/messages/contextPruningSettings.d.ts +44 -0
  221. package/dist/types/messages/format.d.ts +9 -1
  222. package/dist/types/messages/index.d.ts +2 -0
  223. package/dist/types/messages/prune.d.ts +91 -1
  224. package/dist/types/run.d.ts +2 -0
  225. package/dist/types/tools/BashExecutor.d.ts +76 -0
  226. package/dist/types/tools/BashProgrammaticToolCalling.d.ts +72 -0
  227. package/dist/types/tools/CodeExecutor.d.ts +8 -26
  228. package/dist/types/tools/ReadFile.d.ts +28 -0
  229. package/dist/types/tools/SkillTool.d.ts +40 -0
  230. package/dist/types/tools/SubagentTool.d.ts +36 -0
  231. package/dist/types/tools/ToolNode.d.ts +77 -5
  232. package/dist/types/tools/search/tavily-scraper.d.ts +19 -0
  233. package/dist/types/tools/search/tavily-search.d.ts +4 -0
  234. package/dist/types/tools/search/types.d.ts +99 -5
  235. package/dist/types/tools/search/utils.d.ts +2 -2
  236. package/dist/types/tools/skillCatalog.d.ts +19 -0
  237. package/dist/types/tools/subagent/SubagentExecutor.d.ts +137 -0
  238. package/dist/types/tools/subagent/index.d.ts +2 -0
  239. package/dist/types/tools/subagent/types.d.ts +84 -0
  240. package/dist/types/tools/toolOutputReferences.d.ts +236 -0
  241. package/dist/types/types/agent-cache.d.ts +70 -0
  242. package/dist/types/types/graph.d.ts +162 -22
  243. package/dist/types/types/index.d.ts +3 -0
  244. package/dist/types/types/messages.d.ts +26 -0
  245. package/dist/types/types/run.d.ts +22 -0
  246. package/dist/types/types/skill.d.ts +9 -0
  247. package/dist/types/types/tools.d.ts +111 -0
  248. package/dist/types/utils/index.d.ts +1 -3
  249. package/dist/types/utils/truncation.d.ts +70 -0
  250. package/package.json +57 -17
  251. package/src/agents/AgentContext.js.map +1 -0
  252. package/src/agents/AgentContext.test.js.map +1 -0
  253. package/src/agents/AgentContext.ts +321 -78
  254. package/src/agents/__tests__/AgentContext.cacheTtl.live.test.ts +259 -0
  255. package/src/agents/__tests__/AgentContext.crossAgentTier1.live.test.ts +264 -0
  256. package/src/agents/__tests__/AgentContext.crossUserCache.live.test.ts +342 -0
  257. package/src/agents/__tests__/AgentContext.test.js.map +1 -0
  258. package/src/agents/__tests__/AgentContext.test.ts +632 -0
  259. package/src/agents/__tests__/resolveStructuredOutputMode.test.js.map +1 -0
  260. package/src/common/__tests__/enum.test.ts +7 -17
  261. package/src/common/enum.js.map +1 -0
  262. package/src/common/enum.ts +43 -12
  263. package/src/common/index.js.map +1 -0
  264. package/src/common/index.ts +0 -1
  265. package/src/events.js.map +1 -0
  266. package/src/graphs/Graph.js.map +1 -0
  267. package/src/graphs/Graph.ts +222 -2
  268. package/src/graphs/MultiAgentGraph.js.map +1 -0
  269. package/src/graphs/MultiAgentGraph.ts +154 -1466
  270. package/src/graphs/__tests__/MultiAgentGraph.test.ts +91 -0
  271. package/src/graphs/__tests__/structured-output.integration.test.js.map +1 -0
  272. package/src/graphs/__tests__/structured-output.test.js.map +1 -0
  273. package/src/graphs/contextManagement.e2e.test.js.map +1 -0
  274. package/src/graphs/contextManagement.test.js.map +1 -0
  275. package/src/graphs/handoffValidation.test.js.map +1 -0
  276. package/src/graphs/index.js.map +1 -0
  277. package/src/graphs/index.ts +0 -1
  278. package/src/hooks/HookRegistry.ts +208 -0
  279. package/src/hooks/__tests__/HookRegistry.test.ts +190 -0
  280. package/src/hooks/__tests__/compactHooks.test.ts +214 -0
  281. package/src/hooks/__tests__/executeHooks.test.ts +1013 -0
  282. package/src/hooks/__tests__/integration.test.ts +337 -0
  283. package/src/hooks/__tests__/matchers.test.ts +238 -0
  284. package/src/hooks/__tests__/toolHooks.test.ts +665 -0
  285. package/src/hooks/executeHooks.ts +375 -0
  286. package/src/hooks/index.ts +57 -0
  287. package/src/hooks/matchers.ts +280 -0
  288. package/src/hooks/types.ts +404 -0
  289. package/src/index.js.map +1 -0
  290. package/src/index.ts +15 -24
  291. package/src/instrumentation.js.map +1 -0
  292. package/src/langchain/google-common.ts +1 -0
  293. package/src/langchain/index.ts +8 -0
  294. package/src/langchain/language_models/chat_models.ts +1 -0
  295. package/src/langchain/messages/tool.ts +5 -0
  296. package/src/langchain/messages.ts +21 -0
  297. package/src/langchain/openai.ts +1 -0
  298. package/src/langchain/prompts.ts +1 -0
  299. package/src/langchain/runnables.ts +7 -0
  300. package/src/langchain/tools.ts +8 -0
  301. package/src/langchain/utils/env.ts +1 -0
  302. package/src/llm/anthropic/index.js.map +1 -0
  303. package/src/llm/anthropic/types.js.map +1 -0
  304. package/src/llm/anthropic/utils/message_inputs.js.map +1 -0
  305. package/src/llm/anthropic/utils/message_inputs.ts +10 -1
  306. package/src/llm/anthropic/utils/message_outputs.js.map +1 -0
  307. package/src/llm/anthropic/utils/output_parsers.js.map +1 -0
  308. package/src/llm/anthropic/utils/server-tool-inputs.test.ts +436 -0
  309. package/src/llm/anthropic/utils/tools.js.map +1 -0
  310. package/src/llm/bedrock/__tests__/bedrock-caching.test.js.map +1 -0
  311. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +166 -18
  312. package/src/llm/bedrock/cacheSupport.test.ts +99 -0
  313. package/src/llm/bedrock/cacheSupport.ts +53 -0
  314. package/src/llm/bedrock/index.js.map +1 -0
  315. package/src/llm/bedrock/index.ts +116 -41
  316. package/src/llm/bedrock/types.js.map +1 -0
  317. package/src/llm/bedrock/utils/index.js.map +1 -0
  318. package/src/llm/bedrock/utils/message_inputs.js.map +1 -0
  319. package/src/llm/bedrock/utils/message_outputs.js.map +1 -0
  320. package/src/llm/fake.js.map +1 -0
  321. package/src/llm/google/index.js.map +1 -0
  322. package/src/llm/google/types.js.map +1 -0
  323. package/src/llm/google/utils/common.js.map +1 -0
  324. package/src/llm/google/utils/tools.js.map +1 -0
  325. package/src/llm/google/utils/zod_to_genai_parameters.js.map +1 -0
  326. package/src/llm/openai/index.js.map +1 -0
  327. package/src/llm/openai/types.js.map +1 -0
  328. package/src/llm/openai/utils/index.js.map +1 -0
  329. package/src/llm/openai/utils/index.ts +31 -14
  330. package/src/llm/openai/utils/isReasoningModel.test.js.map +1 -0
  331. package/src/llm/openrouter/index.js.map +1 -0
  332. package/src/llm/openrouter/reasoning.test.js.map +1 -0
  333. package/src/llm/providers.js.map +1 -0
  334. package/src/llm/text.js.map +1 -0
  335. package/src/llm/vertexai/index.js.map +1 -0
  336. package/src/messages/__tests__/contextPruning.test.ts +228 -0
  337. package/src/messages/__tests__/tools.test.js.map +1 -0
  338. package/src/messages/cache.js.map +1 -0
  339. package/src/messages/cache.test.js.map +1 -0
  340. package/src/messages/cache.test.ts +62 -24
  341. package/src/messages/cache.ts +112 -0
  342. package/src/messages/content.js.map +1 -0
  343. package/src/messages/content.test.js.map +1 -0
  344. package/src/messages/contextPruning.ts +191 -0
  345. package/src/messages/contextPruningSettings.ts +90 -0
  346. package/src/messages/core.js.map +1 -0
  347. package/src/messages/ensureThinkingBlock.test.js.map +1 -0
  348. package/src/messages/format.js.map +1 -0
  349. package/src/messages/format.ts +164 -12
  350. package/src/messages/formatAgentMessages.skills.test.ts +413 -0
  351. package/src/messages/formatAgentMessages.test.js.map +1 -0
  352. package/src/messages/formatAgentMessages.tools.test.js.map +1 -0
  353. package/src/messages/formatMessage.test.js.map +1 -0
  354. package/src/messages/ids.js.map +1 -0
  355. package/src/messages/index.js.map +1 -0
  356. package/src/messages/index.ts +2 -0
  357. package/src/messages/labelContentByAgent.test.js.map +1 -0
  358. package/src/messages/prune.js.map +1 -0
  359. package/src/messages/prune.ts +661 -4
  360. package/src/messages/reducer.js.map +1 -0
  361. package/src/messages/shiftIndexTokenCountMap.test.js.map +1 -0
  362. package/src/messages/summarize.js.map +1 -0
  363. package/src/messages/summarize.test.js.map +1 -0
  364. package/src/messages/tools.js.map +1 -0
  365. package/src/mockStream.js.map +1 -0
  366. package/src/prompts/collab.js.map +1 -0
  367. package/src/prompts/index.js.map +1 -0
  368. package/src/prompts/taskmanager.js.map +1 -0
  369. package/src/run.js.map +1 -0
  370. package/src/run.ts +155 -1
  371. package/src/schemas/index.js.map +1 -0
  372. package/src/schemas/schema-preparation.test.js.map +1 -0
  373. package/src/schemas/validate.js.map +1 -0
  374. package/src/schemas/validate.test.js.map +1 -0
  375. package/src/scripts/abort.js.map +1 -0
  376. package/src/scripts/ant_web_search.js.map +1 -0
  377. package/src/scripts/ant_web_search_edge_case.js.map +1 -0
  378. package/src/scripts/ant_web_search_error_edge_case.js.map +1 -0
  379. package/src/scripts/args.js.map +1 -0
  380. package/src/scripts/bedrock-cache-debug.js.map +1 -0
  381. package/src/scripts/bedrock-content-aggregation-test.js.map +1 -0
  382. package/src/scripts/bedrock-merge-test.js.map +1 -0
  383. package/src/scripts/bedrock-parallel-tools-test.js.map +1 -0
  384. package/src/scripts/caching.js.map +1 -0
  385. package/src/scripts/cli.js.map +1 -0
  386. package/src/scripts/cli2.js.map +1 -0
  387. package/src/scripts/cli3.js.map +1 -0
  388. package/src/scripts/cli4.js.map +1 -0
  389. package/src/scripts/cli5.js.map +1 -0
  390. package/src/scripts/code_exec.js.map +1 -0
  391. package/src/scripts/code_exec_files.js.map +1 -0
  392. package/src/scripts/code_exec_multi_session.js.map +1 -0
  393. package/src/scripts/code_exec_ptc.js.map +1 -0
  394. package/src/scripts/code_exec_session.js.map +1 -0
  395. package/src/scripts/code_exec_simple.js.map +1 -0
  396. package/src/scripts/content.js.map +1 -0
  397. package/src/scripts/empty_input.js.map +1 -0
  398. package/src/scripts/handoff-test.js.map +1 -0
  399. package/src/scripts/image.js.map +1 -0
  400. package/src/scripts/memory.js.map +1 -0
  401. package/src/scripts/multi-agent-chain.js.map +1 -0
  402. package/src/scripts/multi-agent-chain.ts +2 -2
  403. package/src/scripts/multi-agent-conditional.js.map +1 -0
  404. package/src/scripts/multi-agent-document-review-chain.js.map +1 -0
  405. package/src/scripts/multi-agent-document-review-chain.ts +2 -2
  406. package/src/scripts/multi-agent-hybrid-flow.js.map +1 -0
  407. package/src/scripts/multi-agent-hybrid-flow.ts +4 -4
  408. package/src/scripts/multi-agent-parallel-start.js.map +1 -0
  409. package/src/scripts/multi-agent-parallel.js.map +1 -0
  410. package/src/scripts/multi-agent-parallel.ts +3 -3
  411. package/src/scripts/multi-agent-sequence.js.map +1 -0
  412. package/src/scripts/multi-agent-sequence.ts +3 -3
  413. package/src/scripts/multi-agent-subagent.ts +246 -0
  414. package/src/scripts/multi-agent-supervisor.js.map +1 -0
  415. package/src/scripts/multi-agent-supervisor.ts +5 -5
  416. package/src/scripts/multi-agent-test.js.map +1 -0
  417. package/src/scripts/parallel-asymmetric-tools-test.js.map +1 -0
  418. package/src/scripts/parallel-full-metadata-test.js.map +1 -0
  419. package/src/scripts/parallel-tools-test.js.map +1 -0
  420. package/src/scripts/poc-multi-agent-comprehensive.ts +8 -8
  421. package/src/scripts/programmatic_exec.js.map +1 -0
  422. package/src/scripts/programmatic_exec_agent.js.map +1 -0
  423. package/src/scripts/search.js.map +1 -0
  424. package/src/scripts/sequential-full-metadata-test.js.map +1 -0
  425. package/src/scripts/sequential-full-metadata-test.ts +2 -2
  426. package/src/scripts/simple.js.map +1 -0
  427. package/src/scripts/single-agent-metadata-test.js.map +1 -0
  428. package/src/scripts/stream.js.map +1 -0
  429. package/src/scripts/subagent-event-driven-debug.ts +190 -0
  430. package/src/scripts/subagent-tools-debug.ts +160 -0
  431. package/src/scripts/test-custom-prompt-key.js.map +1 -0
  432. package/src/scripts/test-custom-prompt-key.ts +3 -3
  433. package/src/scripts/test-handoff-input.js.map +1 -0
  434. package/src/scripts/test-handoff-input.ts +1 -1
  435. package/src/scripts/test-handoff-preamble.js.map +1 -0
  436. package/src/scripts/test-handoff-steering.js.map +1 -0
  437. package/src/scripts/test-handoff-steering.ts +3 -3
  438. package/src/scripts/test-multi-agent-list-handoff.js.map +1 -0
  439. package/src/scripts/test-multi-agent-list-handoff.ts +1 -1
  440. package/src/scripts/test-parallel-agent-labeling.js.map +1 -0
  441. package/src/scripts/test-parallel-agent-labeling.ts +3 -3
  442. package/src/scripts/test-parallel-handoffs.js.map +1 -0
  443. package/src/scripts/test-parallel-handoffs.ts +2 -2
  444. package/src/scripts/test-thinking-handoff-bedrock.js.map +1 -0
  445. package/src/scripts/test-thinking-handoff-bedrock.ts +1 -1
  446. package/src/scripts/test-thinking-handoff.js.map +1 -0
  447. package/src/scripts/test-thinking-handoff.ts +1 -1
  448. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.js.map +1 -0
  449. package/src/scripts/test-thinking-to-thinking-handoff-bedrock.ts +1 -1
  450. package/src/scripts/test-tool-before-handoff-role-order.js.map +1 -0
  451. package/src/scripts/test-tool-before-handoff-role-order.ts +1 -1
  452. package/src/scripts/test-tools-before-handoff.js.map +1 -0
  453. package/src/scripts/test-tools-before-handoff.ts +1 -1
  454. package/src/scripts/test_code_api.js.map +1 -0
  455. package/src/scripts/thinking-bedrock.js.map +1 -0
  456. package/src/scripts/thinking-vertexai.js.map +1 -0
  457. package/src/scripts/thinking.js.map +1 -0
  458. package/src/scripts/tool_search.js.map +1 -0
  459. package/src/scripts/tools.js.map +1 -0
  460. package/src/specs/agent-handoffs-bedrock.integration.test.js.map +1 -0
  461. package/src/specs/agent-handoffs.test.js.map +1 -0
  462. package/src/specs/agent-handoffs.test.ts +26 -483
  463. package/src/specs/anthropic.simple.test.js.map +1 -0
  464. package/src/specs/anthropic.simple.test.ts +61 -0
  465. package/src/specs/azure.simple.test.js.map +1 -0
  466. package/src/specs/cache.simple.test.js.map +1 -0
  467. package/src/specs/custom-event-await.test.js.map +1 -0
  468. package/src/specs/deepseek.simple.test.js.map +1 -0
  469. package/src/specs/emergency-prune.test.js.map +1 -0
  470. package/src/specs/moonshot.simple.test.js.map +1 -0
  471. package/src/specs/multi-agent-summarization.test.ts +396 -0
  472. package/src/specs/observability.integration.test.js.map +1 -0
  473. package/src/specs/openai.simple.test.js.map +1 -0
  474. package/src/specs/openrouter.simple.test.js.map +1 -0
  475. package/src/specs/prune.orphans.test.ts +248 -0
  476. package/src/specs/prune.test.js.map +1 -0
  477. package/src/specs/prune.test.ts +104 -16
  478. package/src/specs/reasoning.test.js.map +1 -0
  479. package/src/specs/spec.utils.js.map +1 -0
  480. package/src/specs/thinking-handoff.test.js.map +1 -0
  481. package/src/specs/thinking-handoff.test.ts +19 -19
  482. package/src/specs/thinking-prune.test.js.map +1 -0
  483. package/src/specs/token-distribution-edge-case.test.js.map +1 -0
  484. package/src/specs/token-memoization.test.js.map +1 -0
  485. package/src/specs/tokens.test.js.map +1 -0
  486. package/src/specs/tool-error.test.js.map +1 -0
  487. package/src/splitStream.js.map +1 -0
  488. package/src/splitStream.test.js.map +1 -0
  489. package/src/stream.js.map +1 -0
  490. package/src/stream.test.js.map +1 -0
  491. package/src/test/mockTools.js.map +1 -0
  492. package/src/tools/BashExecutor.ts +281 -0
  493. package/src/tools/BashProgrammaticToolCalling.ts +397 -0
  494. package/src/tools/BrowserTools.js.map +1 -0
  495. package/src/tools/Calculator.js.map +1 -0
  496. package/src/tools/Calculator.test.js.map +1 -0
  497. package/src/tools/CodeExecutor.js.map +1 -0
  498. package/src/tools/CodeExecutor.ts +62 -54
  499. package/src/tools/ProgrammaticToolCalling.js.map +1 -0
  500. package/src/tools/ProgrammaticToolCalling.ts +29 -14
  501. package/src/tools/ReadFile.ts +39 -0
  502. package/src/tools/SkillTool.ts +46 -0
  503. package/src/tools/StreamingToolCallBuffer.js.map +1 -0
  504. package/src/tools/SubagentTool.ts +100 -0
  505. package/src/tools/ToolNode.js.map +1 -0
  506. package/src/tools/ToolNode.ts +548 -26
  507. package/src/tools/ToolSearch.js.map +1 -0
  508. package/src/tools/__tests__/BashExecutor.test.ts +49 -0
  509. package/src/tools/__tests__/BrowserTools.test.js.map +1 -0
  510. package/src/tools/__tests__/CodeExecutor.test.ts +37 -36
  511. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.js.map +1 -0
  512. package/src/tools/__tests__/ProgrammaticToolCalling.test.js.map +1 -0
  513. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +60 -0
  514. package/src/tools/__tests__/ReadFile.test.ts +44 -0
  515. package/src/tools/__tests__/SkillTool.test.ts +442 -0
  516. package/src/tools/__tests__/StreamingToolCallBuffer.test.js.map +1 -0
  517. package/src/tools/__tests__/SubagentExecutor.test.ts +1148 -0
  518. package/src/tools/__tests__/SubagentTool.test.ts +149 -0
  519. package/src/tools/__tests__/ToolApproval.test.js.map +1 -0
  520. package/src/tools/__tests__/ToolNode.outputReferences.test.ts +1438 -0
  521. package/src/tools/__tests__/ToolNode.recovery.test.js.map +1 -0
  522. package/src/tools/__tests__/ToolNode.session.test.js.map +1 -0
  523. package/src/tools/__tests__/ToolSearch.integration.test.js.map +1 -0
  524. package/src/tools/__tests__/ToolSearch.test.js.map +1 -0
  525. package/src/tools/__tests__/annotateMessagesForLLM.test.ts +479 -0
  526. package/src/tools/__tests__/handlers.test.js.map +1 -0
  527. package/src/tools/__tests__/skillCatalog.test.ts +161 -0
  528. package/src/tools/__tests__/subagentHooks.test.ts +210 -0
  529. package/src/tools/__tests__/toolOutputReferences.test.ts +415 -0
  530. package/src/tools/__tests__/truncation-recovery.integration.test.js.map +1 -0
  531. package/src/tools/handlers.js.map +1 -0
  532. package/src/tools/schema.js.map +1 -0
  533. package/src/tools/search/anthropic.js.map +1 -0
  534. package/src/tools/search/content.js.map +1 -0
  535. package/src/tools/search/content.test.js.map +1 -0
  536. package/src/tools/search/firecrawl.js.map +1 -0
  537. package/src/tools/search/format.js.map +1 -0
  538. package/src/tools/search/highlights.js.map +1 -0
  539. package/src/tools/search/index.js.map +1 -0
  540. package/src/tools/search/jina-reranker.test.js.map +1 -0
  541. package/src/tools/search/rerankers.js.map +1 -0
  542. package/src/tools/search/schema.js.map +1 -0
  543. package/src/tools/search/search.js.map +1 -0
  544. package/src/tools/search/search.ts +12 -2
  545. package/src/tools/search/serper-scraper.js.map +1 -0
  546. package/src/tools/search/tavily-scraper.ts +235 -0
  547. package/src/tools/search/tavily-search.ts +424 -0
  548. package/src/tools/search/tavily.test.ts +965 -0
  549. package/src/tools/search/test.js.map +1 -0
  550. package/src/tools/search/tool.js.map +1 -0
  551. package/src/tools/search/tool.ts +36 -2
  552. package/src/tools/search/types.js.map +1 -0
  553. package/src/tools/search/types.ts +133 -8
  554. package/src/tools/search/utils.js.map +1 -0
  555. package/src/tools/search/utils.ts +13 -5
  556. package/src/tools/skillCatalog.ts +126 -0
  557. package/src/tools/subagent/SubagentExecutor.ts +676 -0
  558. package/src/tools/subagent/index.ts +13 -0
  559. package/src/tools/subagent/types.test.ts +70 -0
  560. package/src/tools/subagent/types.ts +115 -0
  561. package/src/tools/toolOutputReferences.ts +825 -0
  562. package/src/types/agent-cache.ts +73 -0
  563. package/src/types/graph.js.map +1 -0
  564. package/src/types/graph.test.js.map +1 -0
  565. package/src/types/graph.ts +171 -20
  566. package/src/types/index.js.map +1 -0
  567. package/src/types/index.ts +3 -0
  568. package/src/types/llm.js.map +1 -0
  569. package/src/types/messages.js.map +1 -0
  570. package/src/types/messages.ts +27 -0
  571. package/src/types/run.js.map +1 -0
  572. package/src/types/run.ts +22 -0
  573. package/src/types/skill.ts +11 -0
  574. package/src/types/stream.js.map +1 -0
  575. package/src/types/tools.js.map +1 -0
  576. package/src/types/tools.ts +118 -0
  577. package/src/utils/__tests__/truncation.test.ts +66 -0
  578. package/src/utils/contextAnalytics.js.map +1 -0
  579. package/src/utils/contextAnalytics.test.js.map +1 -0
  580. package/src/utils/events.js.map +1 -0
  581. package/src/utils/graph.js.map +1 -0
  582. package/src/utils/handlers.js.map +1 -0
  583. package/src/utils/index.js.map +1 -0
  584. package/src/utils/index.ts +1 -3
  585. package/src/utils/llm.js.map +1 -0
  586. package/src/utils/llmConfig.js.map +1 -0
  587. package/src/utils/logging.js.map +1 -0
  588. package/src/utils/misc.js.map +1 -0
  589. package/src/utils/run.js.map +1 -0
  590. package/src/utils/schema.js.map +1 -0
  591. package/src/utils/title.js.map +1 -0
  592. package/src/utils/tokens.js.map +1 -0
  593. package/src/utils/toonFormat.js.map +1 -0
  594. package/src/utils/truncation.ts +154 -0
  595. package/dist/cjs/common/spawnPath.cjs +0 -104
  596. package/dist/cjs/common/spawnPath.cjs.map +0 -1
  597. package/dist/cjs/content/ArtifactStore.cjs +0 -579
  598. package/dist/cjs/content/ArtifactStore.cjs.map +0 -1
  599. package/dist/cjs/content/ContentStore.cjs +0 -638
  600. package/dist/cjs/content/ContentStore.cjs.map +0 -1
  601. package/dist/cjs/content/contentAnalyzer.cjs +0 -91
  602. package/dist/cjs/content/contentAnalyzer.cjs.map +0 -1
  603. package/dist/cjs/content/index.cjs +0 -20
  604. package/dist/cjs/content/index.cjs.map +0 -1
  605. package/dist/cjs/content/mcpAutoCache.cjs +0 -115
  606. package/dist/cjs/content/mcpAutoCache.cjs.map +0 -1
  607. package/dist/cjs/graphs/HandoffRegistry.cjs +0 -143
  608. package/dist/cjs/graphs/HandoffRegistry.cjs.map +0 -1
  609. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs +0 -288
  610. package/dist/cjs/providers/a2a/A2ACapabilityProvider.cjs.map +0 -1
  611. package/dist/cjs/providers/a2a/client.cjs +0 -92
  612. package/dist/cjs/providers/a2a/client.cjs.map +0 -1
  613. package/dist/cjs/providers/a2a/config.cjs +0 -38
  614. package/dist/cjs/providers/a2a/config.cjs.map +0 -1
  615. package/dist/cjs/providers/capabilityNaming.cjs +0 -43
  616. package/dist/cjs/providers/capabilityNaming.cjs.map +0 -1
  617. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs +0 -244
  618. package/dist/cjs/providers/mcp/MCPCapabilityProvider.cjs.map +0 -1
  619. package/dist/cjs/providers/mcp/config.cjs +0 -42
  620. package/dist/cjs/providers/mcp/config.cjs.map +0 -1
  621. package/dist/cjs/providers/mcp/transport.cjs +0 -65
  622. package/dist/cjs/providers/mcp/transport.cjs.map +0 -1
  623. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs +0 -128
  624. package/dist/cjs/providers/tools-server/ToolsServerCapabilityProvider.cjs.map +0 -1
  625. package/dist/cjs/providers/types.cjs +0 -51
  626. package/dist/cjs/providers/types.cjs.map +0 -1
  627. package/dist/cjs/tools/artifacts/schema.cjs +0 -86
  628. package/dist/cjs/tools/artifacts/schema.cjs.map +0 -1
  629. package/dist/cjs/tools/artifacts/tool.cjs +0 -219
  630. package/dist/cjs/tools/artifacts/tool.cjs.map +0 -1
  631. package/dist/cjs/tools/fileSearch/formatter.cjs +0 -93
  632. package/dist/cjs/tools/fileSearch/formatter.cjs.map +0 -1
  633. package/dist/cjs/tools/fileSearch/ragClient.cjs +0 -102
  634. package/dist/cjs/tools/fileSearch/ragClient.cjs.map +0 -1
  635. package/dist/cjs/tools/fileSearch/schema.cjs +0 -18
  636. package/dist/cjs/tools/fileSearch/schema.cjs.map +0 -1
  637. package/dist/cjs/tools/fileSearch/tool.cjs +0 -155
  638. package/dist/cjs/tools/fileSearch/tool.cjs.map +0 -1
  639. package/dist/cjs/tools/proxyTool.cjs +0 -102
  640. package/dist/cjs/tools/proxyTool.cjs.map +0 -1
  641. package/dist/cjs/utils/childAgentContext.cjs +0 -242
  642. package/dist/cjs/utils/childAgentContext.cjs.map +0 -1
  643. package/dist/cjs/utils/credentials.cjs +0 -142
  644. package/dist/cjs/utils/credentials.cjs.map +0 -1
  645. package/dist/cjs/utils/httpClient.cjs +0 -74
  646. package/dist/cjs/utils/httpClient.cjs.map +0 -1
  647. package/dist/cjs/utils/toolManifest.cjs +0 -100
  648. package/dist/cjs/utils/toolManifest.cjs.map +0 -1
  649. package/dist/esm/common/spawnPath.mjs +0 -95
  650. package/dist/esm/common/spawnPath.mjs.map +0 -1
  651. package/dist/esm/content/ArtifactStore.mjs +0 -576
  652. package/dist/esm/content/ArtifactStore.mjs.map +0 -1
  653. package/dist/esm/content/ContentStore.mjs +0 -635
  654. package/dist/esm/content/ContentStore.mjs.map +0 -1
  655. package/dist/esm/content/contentAnalyzer.mjs +0 -87
  656. package/dist/esm/content/contentAnalyzer.mjs.map +0 -1
  657. package/dist/esm/content/index.mjs +0 -5
  658. package/dist/esm/content/mcpAutoCache.mjs +0 -111
  659. package/dist/esm/content/mcpAutoCache.mjs.map +0 -1
  660. package/dist/esm/graphs/HandoffRegistry.mjs +0 -141
  661. package/dist/esm/graphs/HandoffRegistry.mjs.map +0 -1
  662. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs +0 -281
  663. package/dist/esm/providers/a2a/A2ACapabilityProvider.mjs.map +0 -1
  664. package/dist/esm/providers/a2a/client.mjs +0 -88
  665. package/dist/esm/providers/a2a/client.mjs.map +0 -1
  666. package/dist/esm/providers/a2a/config.mjs +0 -35
  667. package/dist/esm/providers/a2a/config.mjs.map +0 -1
  668. package/dist/esm/providers/capabilityNaming.mjs +0 -39
  669. package/dist/esm/providers/capabilityNaming.mjs.map +0 -1
  670. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs +0 -240
  671. package/dist/esm/providers/mcp/MCPCapabilityProvider.mjs.map +0 -1
  672. package/dist/esm/providers/mcp/config.mjs +0 -39
  673. package/dist/esm/providers/mcp/config.mjs.map +0 -1
  674. package/dist/esm/providers/mcp/transport.mjs +0 -63
  675. package/dist/esm/providers/mcp/transport.mjs.map +0 -1
  676. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs +0 -126
  677. package/dist/esm/providers/tools-server/ToolsServerCapabilityProvider.mjs.map +0 -1
  678. package/dist/esm/providers/types.mjs +0 -51
  679. package/dist/esm/providers/types.mjs.map +0 -1
  680. package/dist/esm/tools/artifacts/schema.mjs +0 -79
  681. package/dist/esm/tools/artifacts/schema.mjs.map +0 -1
  682. package/dist/esm/tools/artifacts/tool.mjs +0 -213
  683. package/dist/esm/tools/artifacts/tool.mjs.map +0 -1
  684. package/dist/esm/tools/fileSearch/formatter.mjs +0 -90
  685. package/dist/esm/tools/fileSearch/formatter.mjs.map +0 -1
  686. package/dist/esm/tools/fileSearch/ragClient.mjs +0 -98
  687. package/dist/esm/tools/fileSearch/ragClient.mjs.map +0 -1
  688. package/dist/esm/tools/fileSearch/schema.mjs +0 -15
  689. package/dist/esm/tools/fileSearch/schema.mjs.map +0 -1
  690. package/dist/esm/tools/fileSearch/tool.mjs +0 -152
  691. package/dist/esm/tools/fileSearch/tool.mjs.map +0 -1
  692. package/dist/esm/tools/proxyTool.mjs +0 -100
  693. package/dist/esm/tools/proxyTool.mjs.map +0 -1
  694. package/dist/esm/utils/childAgentContext.mjs +0 -237
  695. package/dist/esm/utils/childAgentContext.mjs.map +0 -1
  696. package/dist/esm/utils/credentials.mjs +0 -135
  697. package/dist/esm/utils/credentials.mjs.map +0 -1
  698. package/dist/esm/utils/httpClient.mjs +0 -70
  699. package/dist/esm/utils/httpClient.mjs.map +0 -1
  700. package/dist/esm/utils/toolManifest.mjs +0 -96
  701. package/dist/esm/utils/toolManifest.mjs.map +0 -1
  702. package/dist/types/common/spawnPath.d.ts +0 -59
  703. package/dist/types/content/ArtifactStore.d.ts +0 -223
  704. package/dist/types/content/ContentStore.d.ts +0 -140
  705. package/dist/types/content/contentAnalyzer.d.ts +0 -38
  706. package/dist/types/content/index.d.ts +0 -24
  707. package/dist/types/content/mcpAutoCache.d.ts +0 -89
  708. package/dist/types/content/types.d.ts +0 -75
  709. package/dist/types/graphs/HandoffRegistry.d.ts +0 -97
  710. package/dist/types/providers/a2a/A2ACapabilityProvider.d.ts +0 -89
  711. package/dist/types/providers/a2a/client.d.ts +0 -47
  712. package/dist/types/providers/a2a/config.d.ts +0 -18
  713. package/dist/types/providers/a2a/index.d.ts +0 -6
  714. package/dist/types/providers/a2a/types.d.ts +0 -173
  715. package/dist/types/providers/capabilityNaming.d.ts +0 -25
  716. package/dist/types/providers/index.d.ts +0 -12
  717. package/dist/types/providers/mcp/MCPCapabilityProvider.d.ts +0 -54
  718. package/dist/types/providers/mcp/config.d.ts +0 -20
  719. package/dist/types/providers/mcp/index.d.ts +0 -5
  720. package/dist/types/providers/mcp/transport.d.ts +0 -18
  721. package/dist/types/providers/mcp/types.d.ts +0 -112
  722. package/dist/types/providers/tools-server/ToolsServerCapabilityProvider.d.ts +0 -59
  723. package/dist/types/providers/tools-server/index.d.ts +0 -1
  724. package/dist/types/providers/types.d.ts +0 -184
  725. package/dist/types/tools/artifacts/index.d.ts +0 -3
  726. package/dist/types/tools/artifacts/schema.d.ts +0 -63
  727. package/dist/types/tools/artifacts/tool.d.ts +0 -16
  728. package/dist/types/tools/artifacts/types.d.ts +0 -127
  729. package/dist/types/tools/fileSearch/formatter.d.ts +0 -25
  730. package/dist/types/tools/fileSearch/index.d.ts +0 -5
  731. package/dist/types/tools/fileSearch/ragClient.d.ts +0 -32
  732. package/dist/types/tools/fileSearch/schema.d.ts +0 -13
  733. package/dist/types/tools/fileSearch/tool.d.ts +0 -18
  734. package/dist/types/tools/fileSearch/types.d.ts +0 -139
  735. package/dist/types/tools/proxyTool.d.ts +0 -62
  736. package/dist/types/utils/childAgentContext.d.ts +0 -99
  737. package/dist/types/utils/credentials.d.ts +0 -77
  738. package/dist/types/utils/httpClient.d.ts +0 -46
  739. package/dist/types/utils/toolManifest.d.ts +0 -49
  740. package/src/common/__tests__/spawnPath.test.ts +0 -110
  741. package/src/common/spawnPath.ts +0 -101
  742. package/src/content/ArtifactStore.ts +0 -782
  743. package/src/content/ContentStore.ts +0 -753
  744. package/src/content/contentAnalyzer.ts +0 -105
  745. package/src/content/index.ts +0 -51
  746. package/src/content/mcpAutoCache.ts +0 -185
  747. package/src/content/types.ts +0 -82
  748. package/src/graphs/HandoffRegistry.ts +0 -199
  749. package/src/graphs/__tests__/HandoffRegistry.test.ts +0 -410
  750. package/src/graphs/__tests__/multi-agent-delegate.test.ts +0 -458
  751. package/src/graphs/__tests__/multi-agent-edges.test.ts +0 -276
  752. package/src/graphs/__tests__/multi-agent-nested-subgraph.test.ts +0 -221
  753. package/src/graphs/handoffValidation.test.ts +0 -353
  754. package/src/providers/__tests__/ToolsServerCapabilityProvider.integration.spec.ts +0 -79
  755. package/src/providers/__tests__/ToolsServerCapabilityProvider.test.ts +0 -271
  756. package/src/providers/__tests__/types.test.ts +0 -64
  757. package/src/providers/a2a/A2ACapabilityProvider.ts +0 -384
  758. package/src/providers/a2a/__tests__/A2ACapabilityProvider.integration.spec.ts +0 -345
  759. package/src/providers/a2a/__tests__/A2ACapabilityProvider.test.ts +0 -460
  760. package/src/providers/a2a/client.ts +0 -115
  761. package/src/providers/a2a/config.ts +0 -40
  762. package/src/providers/a2a/index.ts +0 -29
  763. package/src/providers/a2a/types.ts +0 -191
  764. package/src/providers/capabilityNaming.ts +0 -42
  765. package/src/providers/index.ts +0 -68
  766. package/src/providers/mcp/MCPCapabilityProvider.ts +0 -345
  767. package/src/providers/mcp/__tests__/MCPCapabilityProvider.integration.spec.ts +0 -386
  768. package/src/providers/mcp/__tests__/MCPCapabilityProvider.test.ts +0 -371
  769. package/src/providers/mcp/config.ts +0 -45
  770. package/src/providers/mcp/index.ts +0 -21
  771. package/src/providers/mcp/transport.ts +0 -76
  772. package/src/providers/mcp/types.ts +0 -139
  773. package/src/providers/tools-server/ToolsServerCapabilityProvider.ts +0 -249
  774. package/src/providers/tools-server/index.ts +0 -1
  775. package/src/providers/types.ts +0 -204
  776. package/src/scripts/test-bedrock-handoff-autonomous.ts +0 -267
  777. package/src/scripts/test-handoff-preamble.ts +0 -278
  778. package/src/specs/agent-handoffs-bedrock.integration.test.ts +0 -415
  779. package/src/tools/artifacts/__tests__/tool.test.ts +0 -259
  780. package/src/tools/artifacts/index.ts +0 -33
  781. package/src/tools/artifacts/schema.ts +0 -99
  782. package/src/tools/artifacts/tool.ts +0 -289
  783. package/src/tools/artifacts/types.ts +0 -162
  784. package/src/tools/fileSearch/__tests__/tool.test.ts +0 -261
  785. package/src/tools/fileSearch/formatter.ts +0 -129
  786. package/src/tools/fileSearch/index.ts +0 -23
  787. package/src/tools/fileSearch/ragClient.ts +0 -137
  788. package/src/tools/fileSearch/schema.ts +0 -19
  789. package/src/tools/fileSearch/tool.ts +0 -207
  790. package/src/tools/fileSearch/types.ts +0 -149
  791. package/src/tools/proxyTool.ts +0 -166
  792. package/src/utils/__tests__/childAgentContext.test.ts +0 -217
  793. package/src/utils/__tests__/credentials.test.ts +0 -130
  794. package/src/utils/__tests__/httpClient.test.ts +0 -75
  795. package/src/utils/__tests__/toolManifest.test.ts +0 -116
  796. package/src/utils/childAgentContext.ts +0 -259
  797. package/src/utils/credentials.ts +0 -157
  798. package/src/utils/httpClient.ts +0 -92
  799. package/src/utils/toolManifest.ts +0 -109
  800. /package/dist/esm/{content → langchain}/index.mjs.map +0 -0
@@ -0,0 +1,372 @@
1
+ 'use strict';
2
+
3
+ var axios = require('axios');
4
+
5
+ const DEFAULT_TAVILY_TIMEOUT = 15000;
6
+ const TAVILY_COUNTRY_ALIASES = {
7
+ ba: 'bosnia and herzegovina',
8
+ cg: 'congo',
9
+ cz: 'czech republic',
10
+ gb: 'united kingdom',
11
+ mm: 'myanmar',
12
+ tr: 'turkey',
13
+ tt: 'trinidad and tobago',
14
+ uk: 'united kingdom',
15
+ };
16
+ const TAVILY_SUPPORTED_COUNTRIES = new Set([
17
+ 'afghanistan',
18
+ 'albania',
19
+ 'algeria',
20
+ 'andorra',
21
+ 'angola',
22
+ 'argentina',
23
+ 'armenia',
24
+ 'australia',
25
+ 'austria',
26
+ 'azerbaijan',
27
+ 'bahamas',
28
+ 'bahrain',
29
+ 'bangladesh',
30
+ 'barbados',
31
+ 'belarus',
32
+ 'belgium',
33
+ 'belize',
34
+ 'benin',
35
+ 'bhutan',
36
+ 'bolivia',
37
+ 'bosnia and herzegovina',
38
+ 'botswana',
39
+ 'brazil',
40
+ 'brunei',
41
+ 'bulgaria',
42
+ 'burkina faso',
43
+ 'burundi',
44
+ 'cambodia',
45
+ 'cameroon',
46
+ 'canada',
47
+ 'cape verde',
48
+ 'central african republic',
49
+ 'chad',
50
+ 'chile',
51
+ 'china',
52
+ 'colombia',
53
+ 'comoros',
54
+ 'congo',
55
+ 'costa rica',
56
+ 'croatia',
57
+ 'cuba',
58
+ 'cyprus',
59
+ 'czech republic',
60
+ 'denmark',
61
+ 'djibouti',
62
+ 'dominican republic',
63
+ 'ecuador',
64
+ 'egypt',
65
+ 'el salvador',
66
+ 'equatorial guinea',
67
+ 'eritrea',
68
+ 'estonia',
69
+ 'ethiopia',
70
+ 'fiji',
71
+ 'finland',
72
+ 'france',
73
+ 'gabon',
74
+ 'gambia',
75
+ 'georgia',
76
+ 'germany',
77
+ 'ghana',
78
+ 'greece',
79
+ 'guatemala',
80
+ 'guinea',
81
+ 'haiti',
82
+ 'honduras',
83
+ 'hungary',
84
+ 'iceland',
85
+ 'india',
86
+ 'indonesia',
87
+ 'iran',
88
+ 'iraq',
89
+ 'ireland',
90
+ 'israel',
91
+ 'italy',
92
+ 'jamaica',
93
+ 'japan',
94
+ 'jordan',
95
+ 'kazakhstan',
96
+ 'kenya',
97
+ 'kuwait',
98
+ 'kyrgyzstan',
99
+ 'latvia',
100
+ 'lebanon',
101
+ 'lesotho',
102
+ 'liberia',
103
+ 'libya',
104
+ 'liechtenstein',
105
+ 'lithuania',
106
+ 'luxembourg',
107
+ 'madagascar',
108
+ 'malawi',
109
+ 'malaysia',
110
+ 'maldives',
111
+ 'mali',
112
+ 'malta',
113
+ 'mauritania',
114
+ 'mauritius',
115
+ 'mexico',
116
+ 'moldova',
117
+ 'monaco',
118
+ 'mongolia',
119
+ 'montenegro',
120
+ 'morocco',
121
+ 'mozambique',
122
+ 'myanmar',
123
+ 'namibia',
124
+ 'nepal',
125
+ 'netherlands',
126
+ 'new zealand',
127
+ 'nicaragua',
128
+ 'niger',
129
+ 'nigeria',
130
+ 'north korea',
131
+ 'north macedonia',
132
+ 'norway',
133
+ 'oman',
134
+ 'pakistan',
135
+ 'panama',
136
+ 'papua new guinea',
137
+ 'paraguay',
138
+ 'peru',
139
+ 'philippines',
140
+ 'poland',
141
+ 'portugal',
142
+ 'qatar',
143
+ 'romania',
144
+ 'russia',
145
+ 'rwanda',
146
+ 'saudi arabia',
147
+ 'senegal',
148
+ 'serbia',
149
+ 'singapore',
150
+ 'slovakia',
151
+ 'slovenia',
152
+ 'somalia',
153
+ 'south africa',
154
+ 'south korea',
155
+ 'south sudan',
156
+ 'spain',
157
+ 'sri lanka',
158
+ 'sudan',
159
+ 'sweden',
160
+ 'switzerland',
161
+ 'syria',
162
+ 'taiwan',
163
+ 'tajikistan',
164
+ 'tanzania',
165
+ 'thailand',
166
+ 'togo',
167
+ 'trinidad and tobago',
168
+ 'tunisia',
169
+ 'turkey',
170
+ 'turkmenistan',
171
+ 'uganda',
172
+ 'ukraine',
173
+ 'united arab emirates',
174
+ 'united kingdom',
175
+ 'united states',
176
+ 'uruguay',
177
+ 'uzbekistan',
178
+ 'venezuela',
179
+ 'vietnam',
180
+ 'yemen',
181
+ 'zambia',
182
+ 'zimbabwe',
183
+ ]);
184
+ const TAVILY_REGION_NAMES = new Intl.DisplayNames(['en'], {
185
+ type: 'region',
186
+ });
187
+ const normalizeTavilyCountryName = (country) => country
188
+ .toLowerCase()
189
+ .replace(/\s*\([^)]*\)/g, '')
190
+ .replace(/\s*&\s*/g, ' and ')
191
+ .normalize('NFD')
192
+ .replace(/\p{Diacritic}/gu, '');
193
+ const normalizeTavilyCountry = (country) => {
194
+ const normalizedCountry = country?.trim().toLowerCase();
195
+ if (normalizedCountry == null || normalizedCountry === '') {
196
+ return undefined;
197
+ }
198
+ const countryAlias = TAVILY_COUNTRY_ALIASES[normalizedCountry];
199
+ if (countryAlias != null) {
200
+ return TAVILY_SUPPORTED_COUNTRIES.has(countryAlias)
201
+ ? countryAlias
202
+ : undefined;
203
+ }
204
+ if (/^[a-z]{2}$/.test(normalizedCountry)) {
205
+ const regionName = TAVILY_REGION_NAMES.of(normalizedCountry.toUpperCase());
206
+ if (regionName == null) {
207
+ return undefined;
208
+ }
209
+ const countryName = normalizeTavilyCountryName(regionName);
210
+ return TAVILY_SUPPORTED_COUNTRIES.has(countryName)
211
+ ? countryName
212
+ : undefined;
213
+ }
214
+ const countryName = normalizeTavilyCountryName(normalizedCountry);
215
+ return TAVILY_SUPPORTED_COUNTRIES.has(countryName) ? countryName : undefined;
216
+ };
217
+ const normalizeTavilyTimeRange = (timeRange) => {
218
+ switch (timeRange) {
219
+ case 'h':
220
+ case 'd':
221
+ return 'day';
222
+ case 'w':
223
+ return 'week';
224
+ case 'm':
225
+ return 'month';
226
+ case 'y':
227
+ return 'year';
228
+ case 'day':
229
+ case 'week':
230
+ case 'month':
231
+ case 'year':
232
+ return timeRange;
233
+ default:
234
+ return undefined;
235
+ }
236
+ };
237
+ const getHostname = (link) => {
238
+ try {
239
+ return new URL(link).hostname;
240
+ }
241
+ catch {
242
+ return link;
243
+ }
244
+ };
245
+ const createTavilyAPI = (apiKey, apiUrl, options) => {
246
+ const config = {
247
+ apiKey: apiKey ?? process.env.TAVILY_API_KEY,
248
+ apiUrl: apiUrl ??
249
+ process.env.TAVILY_SEARCH_URL ??
250
+ 'https://api.tavily.com/search',
251
+ timeout: options?.timeout ?? DEFAULT_TAVILY_TIMEOUT,
252
+ };
253
+ if (config.apiKey == null || config.apiKey === '') {
254
+ throw new Error('TAVILY_API_KEY is required for Tavily API');
255
+ }
256
+ const getSources = async ({ query, date, country, numResults = 8, type, news, }) => {
257
+ if (!query.trim()) {
258
+ return { success: false, error: 'Query cannot be empty' };
259
+ }
260
+ try {
261
+ const timeRange = normalizeTavilyTimeRange(options?.timeRange) ??
262
+ (date != null ? (normalizeTavilyTimeRange(date) ?? 'day') : undefined);
263
+ const topic = news === true || type === 'news'
264
+ ? 'news'
265
+ : (options?.topic ?? 'general');
266
+ const maxResults = options?.maxResults ?? numResults;
267
+ const searchDepth = options?.searchDepth ?? 'basic';
268
+ const payload = {
269
+ query,
270
+ search_depth: searchDepth,
271
+ topic,
272
+ max_results: Math.min(Math.max(1, maxResults), 20),
273
+ };
274
+ if (options?.safeSearch != null &&
275
+ searchDepth !== 'fast' &&
276
+ searchDepth !== 'ultra-fast') {
277
+ payload.safe_search = options.safeSearch;
278
+ }
279
+ if (timeRange != null) {
280
+ payload.time_range = timeRange;
281
+ }
282
+ const tavilyCountry = topic === 'general' ? normalizeTavilyCountry(country) : undefined;
283
+ if (tavilyCountry != null) {
284
+ payload.country = tavilyCountry;
285
+ }
286
+ if (type === 'images' || options?.includeImages) {
287
+ payload.include_images = true;
288
+ }
289
+ if (options?.includeAnswer != null) {
290
+ payload.include_answer = options.includeAnswer;
291
+ }
292
+ if (options?.includeRawContent != null) {
293
+ payload.include_raw_content = options.includeRawContent;
294
+ }
295
+ if (options?.includeDomains != null &&
296
+ options.includeDomains.length > 0) {
297
+ payload.include_domains = options.includeDomains;
298
+ }
299
+ if (options?.excludeDomains != null &&
300
+ options.excludeDomains.length > 0) {
301
+ payload.exclude_domains = options.excludeDomains;
302
+ }
303
+ if (options?.includeImageDescriptions != null) {
304
+ payload.include_image_descriptions = options.includeImageDescriptions;
305
+ }
306
+ if (options?.includeFavicon != null) {
307
+ payload.include_favicon = options.includeFavicon;
308
+ }
309
+ if (options?.chunksPerSource != null && searchDepth === 'advanced') {
310
+ payload.chunks_per_source = options.chunksPerSource;
311
+ }
312
+ const response = await axios.post(config.apiUrl, payload, {
313
+ headers: {
314
+ Authorization: `Bearer ${config.apiKey}`,
315
+ 'Content-Type': 'application/json',
316
+ },
317
+ timeout: config.timeout,
318
+ });
319
+ const data = response.data;
320
+ const organicResults = (data.results ?? []).map((result) => ({
321
+ title: result.title ?? '',
322
+ link: result.url ?? '',
323
+ snippet: result.content ?? '',
324
+ date: result.published_date,
325
+ }));
326
+ const imageResults = Array.isArray(data.images)
327
+ ? data.images.slice(0, 6).reduce((acc, image) => {
328
+ const imageUrl = typeof image === 'string' ? image : image.url;
329
+ if (imageUrl == null || imageUrl === '') {
330
+ return acc;
331
+ }
332
+ acc.push({
333
+ imageUrl,
334
+ title: typeof image === 'string' ? undefined : image.description,
335
+ position: acc.length + 1,
336
+ });
337
+ return acc;
338
+ }, [])
339
+ : [];
340
+ const newsResults = topic === 'news'
341
+ ? organicResults.map((r) => ({
342
+ title: r.title,
343
+ link: r.link,
344
+ snippet: r.snippet,
345
+ date: r.date,
346
+ source: getHostname(r.link),
347
+ }))
348
+ : [];
349
+ const results = {
350
+ organic: organicResults,
351
+ images: imageResults,
352
+ topStories: [],
353
+ videos: [],
354
+ news: newsResults,
355
+ answerBox: data.answer != null ? { snippet: data.answer } : undefined,
356
+ relatedSearches: [],
357
+ };
358
+ return { success: true, data: results };
359
+ }
360
+ catch (error) {
361
+ const errorMessage = error instanceof Error ? error.message : String(error);
362
+ return {
363
+ success: false,
364
+ error: `Tavily API request failed: ${errorMessage}`,
365
+ };
366
+ }
367
+ };
368
+ return { getSources };
369
+ };
370
+
371
+ exports.createTavilyAPI = createTavilyAPI;
372
+ //# sourceMappingURL=tavily-search.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tavily-search.cjs","sources":["../../../../src/tools/search/tavily-search.ts"],"sourcesContent":["import axios from 'axios';\nimport type * as t from './types';\n\nconst DEFAULT_TAVILY_TIMEOUT = 15000;\n\nconst TAVILY_COUNTRY_ALIASES: Record<string, string> = {\n ba: 'bosnia and herzegovina',\n cg: 'congo',\n cz: 'czech republic',\n gb: 'united kingdom',\n mm: 'myanmar',\n tr: 'turkey',\n tt: 'trinidad and tobago',\n uk: 'united kingdom',\n};\n\nconst TAVILY_SUPPORTED_COUNTRIES = new Set([\n 'afghanistan',\n 'albania',\n 'algeria',\n 'andorra',\n 'angola',\n 'argentina',\n 'armenia',\n 'australia',\n 'austria',\n 'azerbaijan',\n 'bahamas',\n 'bahrain',\n 'bangladesh',\n 'barbados',\n 'belarus',\n 'belgium',\n 'belize',\n 'benin',\n 'bhutan',\n 'bolivia',\n 'bosnia and herzegovina',\n 'botswana',\n 'brazil',\n 'brunei',\n 'bulgaria',\n 'burkina faso',\n 'burundi',\n 'cambodia',\n 'cameroon',\n 'canada',\n 'cape verde',\n 'central african republic',\n 'chad',\n 'chile',\n 'china',\n 'colombia',\n 'comoros',\n 'congo',\n 'costa rica',\n 'croatia',\n 'cuba',\n 'cyprus',\n 'czech republic',\n 'denmark',\n 'djibouti',\n 'dominican republic',\n 'ecuador',\n 'egypt',\n 'el salvador',\n 'equatorial guinea',\n 'eritrea',\n 'estonia',\n 'ethiopia',\n 'fiji',\n 'finland',\n 'france',\n 'gabon',\n 'gambia',\n 'georgia',\n 'germany',\n 'ghana',\n 'greece',\n 'guatemala',\n 'guinea',\n 'haiti',\n 'honduras',\n 'hungary',\n 'iceland',\n 'india',\n 'indonesia',\n 'iran',\n 'iraq',\n 'ireland',\n 'israel',\n 'italy',\n 'jamaica',\n 'japan',\n 'jordan',\n 'kazakhstan',\n 'kenya',\n 'kuwait',\n 'kyrgyzstan',\n 'latvia',\n 'lebanon',\n 'lesotho',\n 'liberia',\n 'libya',\n 'liechtenstein',\n 'lithuania',\n 'luxembourg',\n 'madagascar',\n 'malawi',\n 'malaysia',\n 'maldives',\n 'mali',\n 'malta',\n 'mauritania',\n 'mauritius',\n 'mexico',\n 'moldova',\n 'monaco',\n 'mongolia',\n 'montenegro',\n 'morocco',\n 'mozambique',\n 'myanmar',\n 'namibia',\n 'nepal',\n 'netherlands',\n 'new zealand',\n 'nicaragua',\n 'niger',\n 'nigeria',\n 'north korea',\n 'north macedonia',\n 'norway',\n 'oman',\n 'pakistan',\n 'panama',\n 'papua new guinea',\n 'paraguay',\n 'peru',\n 'philippines',\n 'poland',\n 'portugal',\n 'qatar',\n 'romania',\n 'russia',\n 'rwanda',\n 'saudi arabia',\n 'senegal',\n 'serbia',\n 'singapore',\n 'slovakia',\n 'slovenia',\n 'somalia',\n 'south africa',\n 'south korea',\n 'south sudan',\n 'spain',\n 'sri lanka',\n 'sudan',\n 'sweden',\n 'switzerland',\n 'syria',\n 'taiwan',\n 'tajikistan',\n 'tanzania',\n 'thailand',\n 'togo',\n 'trinidad and tobago',\n 'tunisia',\n 'turkey',\n 'turkmenistan',\n 'uganda',\n 'ukraine',\n 'united arab emirates',\n 'united kingdom',\n 'united states',\n 'uruguay',\n 'uzbekistan',\n 'venezuela',\n 'vietnam',\n 'yemen',\n 'zambia',\n 'zimbabwe',\n]);\n\nconst TAVILY_REGION_NAMES = new Intl.DisplayNames(['en'], {\n type: 'region',\n});\n\nconst normalizeTavilyCountryName = (country: string): string =>\n country\n .toLowerCase()\n .replace(/\\s*\\([^)]*\\)/g, '')\n .replace(/\\s*&\\s*/g, ' and ')\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '');\n\nconst normalizeTavilyCountry = (country?: string): string | undefined => {\n const normalizedCountry = country?.trim().toLowerCase();\n if (normalizedCountry == null || normalizedCountry === '') {\n return undefined;\n }\n\n const countryAlias = TAVILY_COUNTRY_ALIASES[normalizedCountry];\n if (countryAlias != null) {\n return TAVILY_SUPPORTED_COUNTRIES.has(countryAlias)\n ? countryAlias\n : undefined;\n }\n\n if (/^[a-z]{2}$/.test(normalizedCountry)) {\n const regionName = TAVILY_REGION_NAMES.of(normalizedCountry.toUpperCase());\n if (regionName == null) {\n return undefined;\n }\n const countryName = normalizeTavilyCountryName(regionName);\n return TAVILY_SUPPORTED_COUNTRIES.has(countryName)\n ? countryName\n : undefined;\n }\n\n const countryName = normalizeTavilyCountryName(normalizedCountry);\n return TAVILY_SUPPORTED_COUNTRIES.has(countryName) ? countryName : undefined;\n};\n\nconst normalizeTavilyTimeRange = (\n timeRange?: t.TavilyTimeRangeInput\n): t.TavilyTimeRange | undefined => {\n switch (timeRange) {\n case 'h':\n case 'd':\n return 'day';\n case 'w':\n return 'week';\n case 'm':\n return 'month';\n case 'y':\n return 'year';\n case 'day':\n case 'week':\n case 'month':\n case 'year':\n return timeRange;\n default:\n return undefined;\n }\n};\n\nconst getHostname = (link: string): string => {\n try {\n return new URL(link).hostname;\n } catch {\n return link;\n }\n};\n\nexport const createTavilyAPI = (\n apiKey?: string,\n apiUrl?: string,\n options?: t.TavilySearchOptions\n): {\n getSources: (params: t.GetSourcesParams) => Promise<t.SearchResult>;\n} => {\n const config = {\n apiKey: apiKey ?? process.env.TAVILY_API_KEY,\n apiUrl:\n apiUrl ??\n process.env.TAVILY_SEARCH_URL ??\n 'https://api.tavily.com/search',\n timeout: options?.timeout ?? DEFAULT_TAVILY_TIMEOUT,\n };\n\n if (config.apiKey == null || config.apiKey === '') {\n throw new Error('TAVILY_API_KEY is required for Tavily API');\n }\n\n const getSources = async ({\n query,\n date,\n country,\n numResults = 8,\n type,\n news,\n }: t.GetSourcesParams): Promise<t.SearchResult> => {\n if (!query.trim()) {\n return { success: false, error: 'Query cannot be empty' };\n }\n\n try {\n const timeRange =\n normalizeTavilyTimeRange(options?.timeRange) ??\n (date != null ? (normalizeTavilyTimeRange(date) ?? 'day') : undefined);\n const topic =\n news === true || type === 'news'\n ? 'news'\n : (options?.topic ?? 'general');\n const maxResults = options?.maxResults ?? numResults;\n const searchDepth = options?.searchDepth ?? 'basic';\n\n const payload: t.TavilySearchPayload = {\n query,\n search_depth: searchDepth,\n topic,\n max_results: Math.min(Math.max(1, maxResults), 20),\n };\n\n if (\n options?.safeSearch != null &&\n searchDepth !== 'fast' &&\n searchDepth !== 'ultra-fast'\n ) {\n payload.safe_search = options.safeSearch;\n }\n if (timeRange != null) {\n payload.time_range = timeRange;\n }\n const tavilyCountry =\n topic === 'general' ? normalizeTavilyCountry(country) : undefined;\n if (tavilyCountry != null) {\n payload.country = tavilyCountry;\n }\n if (type === 'images' || options?.includeImages) {\n payload.include_images = true;\n }\n if (options?.includeAnswer != null) {\n payload.include_answer = options.includeAnswer;\n }\n if (options?.includeRawContent != null) {\n payload.include_raw_content = options.includeRawContent;\n }\n if (\n options?.includeDomains != null &&\n options.includeDomains.length > 0\n ) {\n payload.include_domains = options.includeDomains;\n }\n if (\n options?.excludeDomains != null &&\n options.excludeDomains.length > 0\n ) {\n payload.exclude_domains = options.excludeDomains;\n }\n if (options?.includeImageDescriptions != null) {\n payload.include_image_descriptions = options.includeImageDescriptions;\n }\n if (options?.includeFavicon != null) {\n payload.include_favicon = options.includeFavicon;\n }\n if (options?.chunksPerSource != null && searchDepth === 'advanced') {\n payload.chunks_per_source = options.chunksPerSource;\n }\n\n const response = await axios.post<t.TavilySearchResponse>(\n config.apiUrl,\n payload,\n {\n headers: {\n Authorization: `Bearer ${config.apiKey}`,\n 'Content-Type': 'application/json',\n },\n timeout: config.timeout,\n }\n );\n\n const data = response.data;\n\n const organicResults: t.OrganicResult[] = (data.results ?? []).map(\n (result: t.TavilySearchResult) => ({\n title: result.title ?? '',\n link: result.url ?? '',\n snippet: result.content ?? '',\n date: result.published_date,\n })\n );\n\n const imageResults: t.ImageResult[] = Array.isArray(data.images)\n ? data.images.slice(0, 6).reduce<t.ImageResult[]>((acc, image) => {\n const imageUrl = typeof image === 'string' ? image : image.url;\n if (imageUrl == null || imageUrl === '') {\n return acc;\n }\n acc.push({\n imageUrl,\n title: typeof image === 'string' ? undefined : image.description,\n position: acc.length + 1,\n });\n return acc;\n }, [])\n : [];\n\n const newsResults: t.NewsResult[] =\n topic === 'news'\n ? organicResults.map((r) => ({\n title: r.title,\n link: r.link,\n snippet: r.snippet,\n date: r.date,\n source: getHostname(r.link),\n }))\n : [];\n\n const results: t.SearchResultData = {\n organic: organicResults,\n images: imageResults,\n topStories: [],\n videos: [],\n news: newsResults,\n answerBox: data.answer != null ? { snippet: data.answer } : undefined,\n relatedSearches: [],\n };\n\n return { success: true, data: results };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n return {\n success: false,\n error: `Tavily API request failed: ${errorMessage}`,\n };\n }\n };\n\n return { getSources };\n};\n"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ var tools = require('@langchain/core/tools');
4
4
  var schema = require('./schema.cjs');
5
5
  var search = require('./search.cjs');
6
6
  var serperScraper = require('./serper-scraper.cjs');
7
+ var tavilyScraper = require('./tavily-scraper.cjs');
7
8
  var firecrawl = require('./firecrawl.cjs');
8
9
  var highlights = require('./highlights.cjs');
9
10
  var format = require('./format.cjs');
@@ -243,7 +244,7 @@ async function executeParallelSearches({ searchAPI, query, date, country, safeSe
243
244
  });
244
245
  return { success: true, data: mergedResults };
245
246
  }
246
- function createSearchProcessor({ searchAPI, safeSearch, sourceProcessor, scraper, onGetHighlights, logger, }) {
247
+ function createSearchProcessor({ searchAPI, safeSearch, supportsVideos, sourceProcessor, scraper, onGetHighlights, logger, }) {
247
248
  return async function ({ query, date, country, proMode = true, maxSources = 5, onSearchResults, images = false, videos = false, news = false, }) {
248
249
  try {
249
250
  // Check if query contains direct URLs for extraction
@@ -268,7 +269,7 @@ function createSearchProcessor({ searchAPI, safeSearch, sourceProcessor, scraper
268
269
  country,
269
270
  safeSearch,
270
271
  images,
271
- videos,
272
+ videos: supportsVideos && videos,
272
273
  news,
273
274
  logger,
274
275
  });
@@ -379,8 +380,16 @@ Use anchor marker(s) immediately after the statement:
379
380
  });
380
381
  }
381
382
  const createSearchTool = (config = {}) => {
382
- const { searchProvider = 'serper', serperApiKey, searxngInstanceUrl, searxngApiKey, domainBlocklist, countryBlocklist, rerankerType = 'cohere', topResults = 5, strategies = ['no_extraction'], filterContent = true, safeSearch = 1, scraperProvider = 'firecrawl', firecrawlApiKey, firecrawlApiUrl, firecrawlVersion, firecrawlOptions, serperScraperOptions, scraperTimeout, jinaApiKey, jinaApiUrl, cohereApiKey, onSearchResults: _onSearchResults, onGetHighlights, } = config;
383
+ const { searchProvider = 'serper', serperApiKey, searxngInstanceUrl, searxngApiKey, tavilyApiKey, tavilySearchUrl, tavilyExtractUrl, tavilySearchOptions, domainBlocklist, countryBlocklist, rerankerType = 'cohere', topResults = 5, strategies = ['no_extraction'], filterContent = true, safeSearch = 1, scraperProvider = 'firecrawl', firecrawlApiKey, firecrawlApiUrl, firecrawlVersion, firecrawlOptions, serperScraperOptions, tavilyScraperOptions, scraperTimeout, jinaApiKey, jinaApiUrl, cohereApiKey, onSearchResults: _onSearchResults, onGetHighlights, } = config;
383
384
  const logger = config.logger || utils.createDefaultLogger();
385
+ /* Tavily search API exposes a `safe_search` boolean derived from the
386
+ * tool's existing safeSearch level (0 = off, ≥1 = on). Bridge the two. */
387
+ const effectiveTavilySearchOptions = searchProvider === 'tavily' && config.safeSearch != null
388
+ ? {
389
+ ...tavilySearchOptions,
390
+ safeSearch: config.safeSearch !== 0,
391
+ }
392
+ : tavilySearchOptions;
384
393
  const schemaProperties = {
385
394
  query: schema.querySchema,
386
395
  date: schema.dateSchema,
@@ -388,7 +397,7 @@ const createSearchTool = (config = {}) => {
388
397
  videos: schema.videosSchema,
389
398
  news: schema.newsSchema,
390
399
  };
391
- if (searchProvider === 'serper') {
400
+ if (searchProvider === 'serper' || searchProvider === 'tavily') {
392
401
  schemaProperties.country = schema.countrySchema;
393
402
  }
394
403
  const toolSchema = {
@@ -401,6 +410,9 @@ const createSearchTool = (config = {}) => {
401
410
  serperApiKey,
402
411
  searxngInstanceUrl,
403
412
  searxngApiKey,
413
+ tavilyApiKey,
414
+ tavilySearchUrl,
415
+ tavilySearchOptions: effectiveTavilySearchOptions,
404
416
  domainBlocklist,
405
417
  countryBlocklist,
406
418
  });
@@ -414,6 +426,17 @@ const createSearchTool = (config = {}) => {
414
426
  logger,
415
427
  });
416
428
  }
429
+ else if (scraperProvider === 'tavily') {
430
+ scraperInstance = tavilyScraper.createTavilyScraper({
431
+ ...tavilyScraperOptions,
432
+ apiKey: tavilyScraperOptions?.apiKey ??
433
+ tavilyApiKey ??
434
+ process.env.TAVILY_API_KEY,
435
+ apiUrl: tavilyScraperOptions?.apiUrl ?? tavilyExtractUrl,
436
+ timeout: scraperTimeout ?? tavilyScraperOptions?.timeout,
437
+ logger,
438
+ });
439
+ }
417
440
  else {
418
441
  scraperInstance = firecrawl.createFirecrawlScraper({
419
442
  ...firecrawlOptions,
@@ -443,6 +466,7 @@ const createSearchTool = (config = {}) => {
443
466
  const search$1 = createSearchProcessor({
444
467
  searchAPI,
445
468
  safeSearch,
469
+ supportsVideos: searchProvider !== 'tavily',
446
470
  sourceProcessor,
447
471
  scraper: scraperInstance,
448
472
  onGetHighlights,
@@ -1 +1 @@
1
- {"version":3,"file":"tool.cjs","sources":["../../../../src/tools/search/tool.ts"],"sourcesContent":["import { tool, DynamicStructuredTool } from '@langchain/core/tools';\nimport type { RunnableConfig } from '@langchain/core/runnables';\nimport type * as t from './types';\nimport {\n countrySchema,\n imagesSchema,\n videosSchema,\n querySchema,\n dateSchema,\n newsSchema,\n DATE_RANGE,\n} from './schema';\nimport { createSearchAPI, createSourceProcessor } from './search';\nimport { createSerperScraper } from './serper-scraper';\nimport { createFirecrawlScraper } from './firecrawl';\nimport { expandHighlights } from './highlights';\nimport { formatResultsForLLM } from './format';\nimport { createDefaultLogger } from './utils';\nimport { createReranker } from './rerankers';\nimport { Constants } from '@/common';\n\n/**\n * URL regex pattern to detect direct URLs in query\n */\nconst URL_PATTERN = /https?:\\/\\/[^\\s<>\"{}|\\\\^`[\\]]+/gi;\n\n/**\n * Extracts URLs from a query string\n * @param query - The search query\n * @returns Array of URLs found in the query\n */\nfunction extractUrlsFromQuery(query: string): string[] {\n const matches = query.match(URL_PATTERN);\n return matches ?? [];\n}\n\n/**\n * Checks if the query is primarily a URL request (contains URL and minimal other text)\n * @param query - The search query\n * @returns True if the query appears to be a direct URL request\n */\nfunction isDirectUrlRequest(query: string): boolean {\n const urls = extractUrlsFromQuery(query);\n if (urls.length === 0) {\n return false;\n }\n\n // Remove URLs from query and check remaining text\n let remainingText = query;\n for (const url of urls) {\n remainingText = remainingText.replace(url, '');\n }\n\n // Clean up and check if remaining text is minimal (just filler words or questions about the URL)\n remainingText = remainingText.trim().toLowerCase();\n\n // If very little text remains, it's likely a direct URL request\n if (remainingText.length < 50) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Directly extracts content from URLs using the scraper\n * @param urls - URLs to extract content from\n * @param scraper - The scraper instance to use\n * @param logger - Logger instance\n * @returns Search result with extracted content\n */\nasync function extractDirectUrlContent({\n urls,\n scraper,\n logger,\n}: {\n urls: string[];\n scraper: t.BaseScraper;\n logger: t.Logger;\n}): Promise<t.SearchResult> {\n try {\n const results: t.ProcessedOrganic[] = [];\n\n for (const url of urls) {\n try {\n logger.debug(`Direct URL extraction: ${url}`);\n const [, response] = await scraper.scrapeUrl(url);\n\n if (response.success && response.data) {\n const [content, references] = scraper.extractContent(response);\n const metadata = scraper.extractMetadata(response);\n\n // Helper to safely extract string from metadata\n const getString = (value: unknown): string | undefined => {\n return typeof value === 'string' ? value : undefined;\n };\n\n results.push({\n position: results.length + 1,\n title:\n getString(metadata.title) ?? getString(metadata.ogTitle) ?? url,\n link: url,\n snippet:\n getString(metadata.description) ??\n getString(metadata.ogDescription) ??\n '',\n content: content,\n references: references,\n processed: true,\n });\n } else {\n logger.warn(\n `Failed to extract content from ${url}: ${response.error}`\n );\n // Still add the URL as a result, but without content\n results.push({\n position: results.length + 1,\n title: url,\n link: url,\n snippet: response.error ?? 'Failed to extract content',\n processed: false,\n });\n }\n } catch (error) {\n logger.error(`Error extracting URL ${url}:`, error);\n results.push({\n position: results.length + 1,\n title: url,\n link: url,\n snippet: error instanceof Error ? error.message : String(error),\n processed: false,\n });\n }\n }\n\n return {\n success: true,\n data: {\n organic: results,\n topStories: [],\n images: [],\n videos: [],\n relatedSearches: [],\n },\n };\n } catch (error) {\n logger.error('Error in direct URL extraction:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Executes parallel searches and merges the results\n */\nasync function executeParallelSearches({\n searchAPI,\n query,\n date,\n country,\n safeSearch,\n images,\n videos,\n news,\n logger,\n}: {\n searchAPI: ReturnType<typeof createSearchAPI>;\n query: string;\n date?: DATE_RANGE;\n country?: string;\n safeSearch: t.SearchToolConfig['safeSearch'];\n images: boolean;\n videos: boolean;\n news: boolean;\n logger: t.Logger;\n}): Promise<t.SearchResult> {\n // Prepare all search tasks to run in parallel\n const searchTasks: Promise<t.SearchResult>[] = [\n // Main search\n searchAPI.getSources({\n query,\n date,\n country,\n safeSearch,\n }),\n ];\n\n if (images) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'images',\n })\n .catch((error) => {\n logger.error('Error fetching images:', error);\n return {\n success: false,\n error: `Images search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n if (videos) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'videos',\n })\n .catch((error) => {\n logger.error('Error fetching videos:', error);\n return {\n success: false,\n error: `Videos search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n if (news) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'news',\n })\n .catch((error) => {\n logger.error('Error fetching news:', error);\n return {\n success: false,\n error: `News search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n\n // Run all searches in parallel\n const results = await Promise.all(searchTasks);\n\n // Get the main search result (first result)\n const mainResult = results[0];\n if (!mainResult.success) {\n throw new Error(mainResult.error ?? 'Search failed');\n }\n\n // Merge additional results with the main results\n const mergedResults = { ...mainResult.data };\n\n // Convert existing news to topStories if present\n if (mergedResults.news !== undefined && mergedResults.news.length > 0) {\n const existingNewsAsTopStories = mergedResults.news\n .filter((newsItem) => newsItem.link !== undefined && newsItem.link !== '')\n .map((newsItem) => ({\n title: newsItem.title ?? '',\n link: newsItem.link ?? '',\n source: newsItem.source ?? '',\n date: newsItem.date ?? '',\n imageUrl: newsItem.imageUrl ?? '',\n processed: false,\n }));\n mergedResults.topStories = [\n ...(mergedResults.topStories ?? []),\n ...existingNewsAsTopStories,\n ];\n delete mergedResults.news;\n }\n\n results.slice(1).forEach((result) => {\n if (result.success && result.data !== undefined) {\n if (result.data.images !== undefined && result.data.images.length > 0) {\n mergedResults.images = [\n ...(mergedResults.images ?? []),\n ...result.data.images,\n ];\n }\n if (result.data.videos !== undefined && result.data.videos.length > 0) {\n mergedResults.videos = [\n ...(mergedResults.videos ?? []),\n ...result.data.videos,\n ];\n }\n if (result.data.news !== undefined && result.data.news.length > 0) {\n const newsAsTopStories = result.data.news.map((newsItem) => ({\n ...newsItem,\n link: newsItem.link ?? '',\n }));\n mergedResults.topStories = [\n ...(mergedResults.topStories ?? []),\n ...newsAsTopStories,\n ];\n }\n }\n });\n\n return { success: true, data: mergedResults };\n}\n\nfunction createSearchProcessor({\n searchAPI,\n safeSearch,\n sourceProcessor,\n scraper,\n onGetHighlights,\n logger,\n}: {\n safeSearch: t.SearchToolConfig['safeSearch'];\n searchAPI: ReturnType<typeof createSearchAPI>;\n sourceProcessor: ReturnType<typeof createSourceProcessor>;\n scraper: t.BaseScraper;\n onGetHighlights: t.SearchToolConfig['onGetHighlights'];\n logger: t.Logger;\n}) {\n return async function ({\n query,\n date,\n country,\n proMode = true,\n maxSources = 5,\n onSearchResults,\n images = false,\n videos = false,\n news = false,\n }: {\n query: string;\n country?: string;\n date?: DATE_RANGE;\n proMode?: boolean;\n maxSources?: number;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n images?: boolean;\n videos?: boolean;\n news?: boolean;\n }): Promise<t.SearchResultData> {\n try {\n // Check if query contains direct URLs for extraction\n const urls = extractUrlsFromQuery(query);\n const isDirectUrl = isDirectUrlRequest(query);\n\n let searchResult: t.SearchResult;\n\n if (isDirectUrl && urls.length > 0) {\n // Direct URL extraction mode - skip search API and extract directly\n logger.debug(`Direct URL extraction mode for: ${urls.join(', ')}`);\n searchResult = await extractDirectUrlContent({\n urls,\n scraper,\n logger,\n });\n } else {\n // Normal search mode - execute parallel searches and merge results\n searchResult = await executeParallelSearches({\n searchAPI,\n query,\n date,\n country,\n safeSearch,\n images,\n videos,\n news,\n logger,\n });\n }\n\n onSearchResults?.(searchResult);\n\n const processedSources = await sourceProcessor.processSources({\n query,\n news,\n result: searchResult,\n proMode,\n onGetHighlights,\n numElements: maxSources,\n // Skip additional scraping if we already extracted content directly\n skipScraping: isDirectUrl,\n });\n\n return expandHighlights(processedSources);\n } catch (error) {\n logger.error('Error in search:', error);\n return {\n organic: [],\n topStories: [],\n images: [],\n videos: [],\n news: [],\n relatedSearches: [],\n error: error instanceof Error ? error.message : String(error),\n };\n }\n };\n}\n\nfunction createOnSearchResults({\n runnableConfig,\n onSearchResults,\n}: {\n runnableConfig: RunnableConfig;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n}) {\n return function (results: t.SearchResult): void {\n if (!onSearchResults) {\n return;\n }\n onSearchResults(results, runnableConfig);\n };\n}\n\nfunction createTool({\n schema,\n search,\n onSearchResults: _onSearchResults,\n}: {\n schema: Record<string, unknown>;\n search: ReturnType<typeof createSearchProcessor>;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n}): DynamicStructuredTool {\n return tool(\n async (rawParams, runnableConfig) => {\n const params = rawParams as SearchToolParams;\n const { query, date, country: _c, images, videos, news } = params;\n const country = typeof _c === 'string' && _c ? _c : undefined;\n\n // Log the incoming query for debugging URL detection\n const toolLogger = createDefaultLogger();\n toolLogger.debug(`[web_search] Received query: \"${query}\"`);\n const detectedUrls = extractUrlsFromQuery(query);\n if (detectedUrls.length > 0) {\n toolLogger.debug(\n `[web_search] Detected URLs in query: ${detectedUrls.join(', ')}`\n );\n }\n\n const searchResult = await search({\n query,\n date,\n country,\n images,\n videos,\n news,\n onSearchResults: createOnSearchResults({\n runnableConfig,\n onSearchResults: _onSearchResults,\n }),\n });\n const turn = runnableConfig.toolCall?.turn ?? 0;\n const { output, references } = formatResultsForLLM(turn, searchResult);\n const data: t.SearchResultData = { turn, ...searchResult, references };\n return [output, { [Constants.WEB_SEARCH]: data }];\n },\n {\n name: Constants.WEB_SEARCH,\n description:\n `Real-time web search and direct URL content extraction. Results have required citation anchors.\n\n**CAPABILITIES:**\n- Search: Query the web for information on any topic\n- Direct URL: Fetch and extract content from a specific URL for summarization or analysis\n\n**CRITICAL - URL HANDLING:**\nWhen user provides a URL (e.g., \"summarize https://example.com/article\"), you MUST include the FULL URL in the query parameter.\n- CORRECT: query = \"https://example.com/article\" or \"summarize https://example.com/article\"\n- WRONG: query = \"example article summary\" (do NOT convert URLs to search terms)\n\n**USAGE:**\n- For search: Use concise search terms as query\n- For URL extraction: Pass the complete URL in the query field\n\nNote: Use ONCE per reply unless instructed otherwise.\n\nAnchors:\n- \\\\ue202turnXtypeY\n- X = turn idx, type = 'search' | 'news' | 'image' | 'ref', Y = item idx\n\nSpecial Markers:\n- \\\\ue203...\\\\ue204 — highlight start/end of cited text (for Standalone or Group citations)\n- \\\\ue200...\\\\ue201 — group block (e.g. \\\\ue200\\\\ue202turn0search1\\\\ue202turn0news2\\\\ue201)\n\n**CITE EVERY NON-OBVIOUS FACT/QUOTE:**\nUse anchor marker(s) immediately after the statement:\n- Standalone: \"Pure functions produce same output. \\\\ue202turn0search0\"\n- Standalone (multiple): \"Today's News \\\\ue202turn0search0\\\\ue202turn0news0\"\n- Highlight: \"\\\\ue203Highlight text.\\\\ue204\\\\ue202turn0news1\"\n- Group: \"Sources. \\\\ue200\\\\ue202turn0search0\\\\ue202turn0news1\\\\ue201\"\n- Group Highlight: \"\\\\ue203Highlight for group.\\\\ue204 \\\\ue200\\\\ue202turn0search0\\\\ue202turn0news1\\\\ue201\"\n- Image: \"See photo \\\\ue202turn0image0.\"\n\n**NEVER use markdown links, [1], or footnotes. CITE ONLY with anchors provided.**\n`.trim(),\n schema: schema,\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\n/**\n * Creates a search tool with a schema that dynamically includes the country field\n * only when the searchProvider is 'serper'.\n *\n * Supports multiple scraper providers:\n * - Firecrawl (default): Full-featured web scraping with multiple formats\n * - Serper: Lightweight scraping using Serper's scrape API\n *\n * @example\n * ```typescript\n * // Using Firecrawl scraper (default)\n * const searchTool = createSearchTool({\n * searchProvider: 'serper',\n * scraperProvider: 'firecrawl',\n * firecrawlApiKey: 'your-firecrawl-key'\n * });\n *\n * // Using Serper scraper\n * const searchTool = createSearchTool({\n * searchProvider: 'serper',\n * scraperProvider: 'serper',\n * serperApiKey: 'your-serper-key'\n * });\n * ```\n *\n * @param config - The search tool configuration\n * @returns A DynamicStructuredTool with a schema that depends on the searchProvider\n */\n/** Input params type for search tool */\ninterface SearchToolParams {\n query: string;\n date?: DATE_RANGE;\n country?: string;\n images?: boolean;\n videos?: boolean;\n news?: boolean;\n}\n\nexport const createSearchTool = (\n config: t.SearchToolConfig = {}\n): DynamicStructuredTool => {\n const {\n searchProvider = 'serper',\n serperApiKey,\n searxngInstanceUrl,\n searxngApiKey,\n domainBlocklist,\n countryBlocklist,\n rerankerType = 'cohere',\n topResults = 5,\n strategies = ['no_extraction'],\n filterContent = true,\n safeSearch = 1,\n scraperProvider = 'firecrawl',\n firecrawlApiKey,\n firecrawlApiUrl,\n firecrawlVersion,\n firecrawlOptions,\n serperScraperOptions,\n scraperTimeout,\n jinaApiKey,\n jinaApiUrl,\n cohereApiKey,\n onSearchResults: _onSearchResults,\n onGetHighlights,\n } = config;\n\n const logger = config.logger || createDefaultLogger();\n\n const schemaProperties: Record<string, unknown> = {\n query: querySchema,\n date: dateSchema,\n images: imagesSchema,\n videos: videosSchema,\n news: newsSchema,\n };\n\n if (searchProvider === 'serper') {\n schemaProperties.country = countrySchema;\n }\n\n const toolSchema = {\n type: 'object',\n properties: schemaProperties,\n required: ['query'],\n };\n\n const searchAPI = createSearchAPI({\n searchProvider,\n serperApiKey,\n searxngInstanceUrl,\n searxngApiKey,\n domainBlocklist,\n countryBlocklist,\n });\n\n /** Create scraper based on scraperProvider */\n let scraperInstance: t.BaseScraper;\n\n if (scraperProvider === 'serper') {\n scraperInstance = createSerperScraper({\n ...serperScraperOptions,\n apiKey: serperApiKey,\n timeout: scraperTimeout ?? serperScraperOptions?.timeout,\n logger,\n });\n } else {\n scraperInstance = createFirecrawlScraper({\n ...firecrawlOptions,\n apiKey: firecrawlApiKey ?? process.env.FIRECRAWL_API_KEY,\n apiUrl: firecrawlApiUrl,\n version: firecrawlVersion,\n timeout: scraperTimeout ?? firecrawlOptions?.timeout,\n formats: firecrawlOptions?.formats ?? ['markdown', 'rawHtml'],\n logger,\n });\n }\n\n const selectedReranker = createReranker({\n rerankerType,\n jinaApiKey,\n jinaApiUrl,\n cohereApiKey,\n logger,\n });\n\n if (!selectedReranker) {\n logger.warn('No reranker selected. Using default ranking.');\n }\n\n const sourceProcessor = createSourceProcessor(\n {\n reranker: selectedReranker,\n topResults,\n strategies,\n filterContent,\n logger,\n },\n scraperInstance\n );\n\n const search = createSearchProcessor({\n searchAPI,\n safeSearch,\n sourceProcessor,\n scraper: scraperInstance,\n onGetHighlights,\n logger,\n });\n\n return createTool({\n search,\n schema: toolSchema,\n onSearchResults: _onSearchResults,\n });\n};\n"],"names":["expandHighlights","tool","createDefaultLogger","formatResultsForLLM","Constants","querySchema","dateSchema","imagesSchema","videosSchema","newsSchema","countrySchema","createSearchAPI","createSerperScraper","createFirecrawlScraper","createReranker","createSourceProcessor","search"],"mappings":"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"}
1
+ {"version":3,"file":"tool.cjs","sources":["../../../../src/tools/search/tool.ts"],"sourcesContent":["import { tool, DynamicStructuredTool } from '@langchain/core/tools';\nimport type { RunnableConfig } from '@langchain/core/runnables';\nimport type * as t from './types';\nimport {\n countrySchema,\n imagesSchema,\n videosSchema,\n querySchema,\n dateSchema,\n newsSchema,\n DATE_RANGE,\n} from './schema';\nimport { createSearchAPI, createSourceProcessor } from './search';\nimport { createSerperScraper } from './serper-scraper';\nimport { createTavilyScraper } from './tavily-scraper';\nimport { createFirecrawlScraper } from './firecrawl';\nimport { expandHighlights } from './highlights';\nimport { formatResultsForLLM } from './format';\nimport { createDefaultLogger } from './utils';\nimport { createReranker } from './rerankers';\nimport { Constants } from '@/common';\n\n/**\n * URL regex pattern to detect direct URLs in query\n */\nconst URL_PATTERN = /https?:\\/\\/[^\\s<>\"{}|\\\\^`[\\]]+/gi;\n\n/**\n * Extracts URLs from a query string\n * @param query - The search query\n * @returns Array of URLs found in the query\n */\nfunction extractUrlsFromQuery(query: string): string[] {\n const matches = query.match(URL_PATTERN);\n return matches ?? [];\n}\n\n/**\n * Checks if the query is primarily a URL request (contains URL and minimal other text)\n * @param query - The search query\n * @returns True if the query appears to be a direct URL request\n */\nfunction isDirectUrlRequest(query: string): boolean {\n const urls = extractUrlsFromQuery(query);\n if (urls.length === 0) {\n return false;\n }\n\n // Remove URLs from query and check remaining text\n let remainingText = query;\n for (const url of urls) {\n remainingText = remainingText.replace(url, '');\n }\n\n // Clean up and check if remaining text is minimal (just filler words or questions about the URL)\n remainingText = remainingText.trim().toLowerCase();\n\n // If very little text remains, it's likely a direct URL request\n if (remainingText.length < 50) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Directly extracts content from URLs using the scraper\n * @param urls - URLs to extract content from\n * @param scraper - The scraper instance to use\n * @param logger - Logger instance\n * @returns Search result with extracted content\n */\nasync function extractDirectUrlContent({\n urls,\n scraper,\n logger,\n}: {\n urls: string[];\n scraper: t.BaseScraper;\n logger: t.Logger;\n}): Promise<t.SearchResult> {\n try {\n const results: t.ProcessedOrganic[] = [];\n\n for (const url of urls) {\n try {\n logger.debug(`Direct URL extraction: ${url}`);\n const [, response] = await scraper.scrapeUrl(url);\n\n if (response.success && response.data) {\n const [content, references] = scraper.extractContent(response);\n const metadata = scraper.extractMetadata(response);\n\n // Helper to safely extract string from metadata\n const getString = (value: unknown): string | undefined => {\n return typeof value === 'string' ? value : undefined;\n };\n\n results.push({\n position: results.length + 1,\n title:\n getString(metadata.title) ?? getString(metadata.ogTitle) ?? url,\n link: url,\n snippet:\n getString(metadata.description) ??\n getString(metadata.ogDescription) ??\n '',\n content: content,\n references: references,\n processed: true,\n });\n } else {\n logger.warn(\n `Failed to extract content from ${url}: ${response.error}`\n );\n // Still add the URL as a result, but without content\n results.push({\n position: results.length + 1,\n title: url,\n link: url,\n snippet: response.error ?? 'Failed to extract content',\n processed: false,\n });\n }\n } catch (error) {\n logger.error(`Error extracting URL ${url}:`, error);\n results.push({\n position: results.length + 1,\n title: url,\n link: url,\n snippet: error instanceof Error ? error.message : String(error),\n processed: false,\n });\n }\n }\n\n return {\n success: true,\n data: {\n organic: results,\n topStories: [],\n images: [],\n videos: [],\n relatedSearches: [],\n },\n };\n } catch (error) {\n logger.error('Error in direct URL extraction:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Executes parallel searches and merges the results\n */\nasync function executeParallelSearches({\n searchAPI,\n query,\n date,\n country,\n safeSearch,\n images,\n videos,\n news,\n logger,\n}: {\n searchAPI: ReturnType<typeof createSearchAPI>;\n query: string;\n date?: DATE_RANGE;\n country?: string;\n safeSearch: t.SearchToolConfig['safeSearch'];\n images: boolean;\n videos: boolean;\n news: boolean;\n logger: t.Logger;\n}): Promise<t.SearchResult> {\n // Prepare all search tasks to run in parallel\n const searchTasks: Promise<t.SearchResult>[] = [\n // Main search\n searchAPI.getSources({\n query,\n date,\n country,\n safeSearch,\n }),\n ];\n\n if (images) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'images',\n })\n .catch((error) => {\n logger.error('Error fetching images:', error);\n return {\n success: false,\n error: `Images search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n if (videos) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'videos',\n })\n .catch((error) => {\n logger.error('Error fetching videos:', error);\n return {\n success: false,\n error: `Videos search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n if (news) {\n searchTasks.push(\n searchAPI\n .getSources({\n query,\n date,\n country,\n safeSearch,\n type: 'news',\n })\n .catch((error) => {\n logger.error('Error fetching news:', error);\n return {\n success: false,\n error: `News search failed: ${error instanceof Error ? error.message : String(error)}`,\n };\n })\n );\n }\n\n // Run all searches in parallel\n const results = await Promise.all(searchTasks);\n\n // Get the main search result (first result)\n const mainResult = results[0];\n if (!mainResult.success) {\n throw new Error(mainResult.error ?? 'Search failed');\n }\n\n // Merge additional results with the main results\n const mergedResults = { ...mainResult.data };\n\n // Convert existing news to topStories if present\n if (mergedResults.news !== undefined && mergedResults.news.length > 0) {\n const existingNewsAsTopStories = mergedResults.news\n .filter((newsItem) => newsItem.link !== undefined && newsItem.link !== '')\n .map((newsItem) => ({\n title: newsItem.title ?? '',\n link: newsItem.link ?? '',\n source: newsItem.source ?? '',\n date: newsItem.date ?? '',\n imageUrl: newsItem.imageUrl ?? '',\n processed: false,\n }));\n mergedResults.topStories = [\n ...(mergedResults.topStories ?? []),\n ...existingNewsAsTopStories,\n ];\n delete mergedResults.news;\n }\n\n results.slice(1).forEach((result) => {\n if (result.success && result.data !== undefined) {\n if (result.data.images !== undefined && result.data.images.length > 0) {\n mergedResults.images = [\n ...(mergedResults.images ?? []),\n ...result.data.images,\n ];\n }\n if (result.data.videos !== undefined && result.data.videos.length > 0) {\n mergedResults.videos = [\n ...(mergedResults.videos ?? []),\n ...result.data.videos,\n ];\n }\n if (result.data.news !== undefined && result.data.news.length > 0) {\n const newsAsTopStories = result.data.news.map((newsItem) => ({\n ...newsItem,\n link: newsItem.link ?? '',\n }));\n mergedResults.topStories = [\n ...(mergedResults.topStories ?? []),\n ...newsAsTopStories,\n ];\n }\n }\n });\n\n return { success: true, data: mergedResults };\n}\n\nfunction createSearchProcessor({\n searchAPI,\n safeSearch,\n supportsVideos,\n sourceProcessor,\n scraper,\n onGetHighlights,\n logger,\n}: {\n safeSearch: t.SearchToolConfig['safeSearch'];\n /* Tavily search API does not return videos. Other providers (Serper)\n * do — this flag short-circuits the videos request when unsupported. */\n supportsVideos: boolean;\n searchAPI: ReturnType<typeof createSearchAPI>;\n sourceProcessor: ReturnType<typeof createSourceProcessor>;\n scraper: t.BaseScraper;\n onGetHighlights: t.SearchToolConfig['onGetHighlights'];\n logger: t.Logger;\n}) {\n return async function ({\n query,\n date,\n country,\n proMode = true,\n maxSources = 5,\n onSearchResults,\n images = false,\n videos = false,\n news = false,\n }: {\n query: string;\n country?: string;\n date?: DATE_RANGE;\n proMode?: boolean;\n maxSources?: number;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n images?: boolean;\n videos?: boolean;\n news?: boolean;\n }): Promise<t.SearchResultData> {\n try {\n // Check if query contains direct URLs for extraction\n const urls = extractUrlsFromQuery(query);\n const isDirectUrl = isDirectUrlRequest(query);\n\n let searchResult: t.SearchResult;\n\n if (isDirectUrl && urls.length > 0) {\n // Direct URL extraction mode - skip search API and extract directly\n logger.debug(`Direct URL extraction mode for: ${urls.join(', ')}`);\n searchResult = await extractDirectUrlContent({\n urls,\n scraper,\n logger,\n });\n } else {\n // Normal search mode - execute parallel searches and merge results\n searchResult = await executeParallelSearches({\n searchAPI,\n query,\n date,\n country,\n safeSearch,\n images,\n videos: supportsVideos && videos,\n news,\n logger,\n });\n }\n\n onSearchResults?.(searchResult);\n\n const processedSources = await sourceProcessor.processSources({\n query,\n news,\n result: searchResult,\n proMode,\n onGetHighlights,\n numElements: maxSources,\n // Skip additional scraping if we already extracted content directly\n skipScraping: isDirectUrl,\n });\n\n return expandHighlights(processedSources);\n } catch (error) {\n logger.error('Error in search:', error);\n return {\n organic: [],\n topStories: [],\n images: [],\n videos: [],\n news: [],\n relatedSearches: [],\n error: error instanceof Error ? error.message : String(error),\n };\n }\n };\n}\n\nfunction createOnSearchResults({\n runnableConfig,\n onSearchResults,\n}: {\n runnableConfig: RunnableConfig;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n}) {\n return function (results: t.SearchResult): void {\n if (!onSearchResults) {\n return;\n }\n onSearchResults(results, runnableConfig);\n };\n}\n\nfunction createTool({\n schema,\n search,\n onSearchResults: _onSearchResults,\n}: {\n schema: Record<string, unknown>;\n search: ReturnType<typeof createSearchProcessor>;\n onSearchResults: t.SearchToolConfig['onSearchResults'];\n}): DynamicStructuredTool {\n return tool(\n async (rawParams, runnableConfig) => {\n const params = rawParams as SearchToolParams;\n const { query, date, country: _c, images, videos, news } = params;\n const country = typeof _c === 'string' && _c ? _c : undefined;\n\n // Log the incoming query for debugging URL detection\n const toolLogger = createDefaultLogger();\n toolLogger.debug(`[web_search] Received query: \"${query}\"`);\n const detectedUrls = extractUrlsFromQuery(query);\n if (detectedUrls.length > 0) {\n toolLogger.debug(\n `[web_search] Detected URLs in query: ${detectedUrls.join(', ')}`\n );\n }\n\n const searchResult = await search({\n query,\n date,\n country,\n images,\n videos,\n news,\n onSearchResults: createOnSearchResults({\n runnableConfig,\n onSearchResults: _onSearchResults,\n }),\n });\n const turn = runnableConfig.toolCall?.turn ?? 0;\n const { output, references } = formatResultsForLLM(turn, searchResult);\n const data: t.SearchResultData = { turn, ...searchResult, references };\n return [output, { [Constants.WEB_SEARCH]: data }];\n },\n {\n name: Constants.WEB_SEARCH,\n description:\n `Real-time web search and direct URL content extraction. Results have required citation anchors.\n\n**CAPABILITIES:**\n- Search: Query the web for information on any topic\n- Direct URL: Fetch and extract content from a specific URL for summarization or analysis\n\n**CRITICAL - URL HANDLING:**\nWhen user provides a URL (e.g., \"summarize https://example.com/article\"), you MUST include the FULL URL in the query parameter.\n- CORRECT: query = \"https://example.com/article\" or \"summarize https://example.com/article\"\n- WRONG: query = \"example article summary\" (do NOT convert URLs to search terms)\n\n**USAGE:**\n- For search: Use concise search terms as query\n- For URL extraction: Pass the complete URL in the query field\n\nNote: Use ONCE per reply unless instructed otherwise.\n\nAnchors:\n- \\\\ue202turnXtypeY\n- X = turn idx, type = 'search' | 'news' | 'image' | 'ref', Y = item idx\n\nSpecial Markers:\n- \\\\ue203...\\\\ue204 — highlight start/end of cited text (for Standalone or Group citations)\n- \\\\ue200...\\\\ue201 — group block (e.g. \\\\ue200\\\\ue202turn0search1\\\\ue202turn0news2\\\\ue201)\n\n**CITE EVERY NON-OBVIOUS FACT/QUOTE:**\nUse anchor marker(s) immediately after the statement:\n- Standalone: \"Pure functions produce same output. \\\\ue202turn0search0\"\n- Standalone (multiple): \"Today's News \\\\ue202turn0search0\\\\ue202turn0news0\"\n- Highlight: \"\\\\ue203Highlight text.\\\\ue204\\\\ue202turn0news1\"\n- Group: \"Sources. \\\\ue200\\\\ue202turn0search0\\\\ue202turn0news1\\\\ue201\"\n- Group Highlight: \"\\\\ue203Highlight for group.\\\\ue204 \\\\ue200\\\\ue202turn0search0\\\\ue202turn0news1\\\\ue201\"\n- Image: \"See photo \\\\ue202turn0image0.\"\n\n**NEVER use markdown links, [1], or footnotes. CITE ONLY with anchors provided.**\n`.trim(),\n schema: schema,\n responseFormat: Constants.CONTENT_AND_ARTIFACT,\n }\n );\n}\n\n/**\n * Creates a search tool with a schema that dynamically includes the country field\n * only when the searchProvider is 'serper'.\n *\n * Supports multiple scraper providers:\n * - Firecrawl (default): Full-featured web scraping with multiple formats\n * - Serper: Lightweight scraping using Serper's scrape API\n *\n * @example\n * ```typescript\n * // Using Firecrawl scraper (default)\n * const searchTool = createSearchTool({\n * searchProvider: 'serper',\n * scraperProvider: 'firecrawl',\n * firecrawlApiKey: 'your-firecrawl-key'\n * });\n *\n * // Using Serper scraper\n * const searchTool = createSearchTool({\n * searchProvider: 'serper',\n * scraperProvider: 'serper',\n * serperApiKey: 'your-serper-key'\n * });\n * ```\n *\n * @param config - The search tool configuration\n * @returns A DynamicStructuredTool with a schema that depends on the searchProvider\n */\n/** Input params type for search tool */\ninterface SearchToolParams {\n query: string;\n date?: DATE_RANGE;\n country?: string;\n images?: boolean;\n videos?: boolean;\n news?: boolean;\n}\n\nexport const createSearchTool = (\n config: t.SearchToolConfig = {}\n): DynamicStructuredTool => {\n const {\n searchProvider = 'serper',\n serperApiKey,\n searxngInstanceUrl,\n searxngApiKey,\n tavilyApiKey,\n tavilySearchUrl,\n tavilyExtractUrl,\n tavilySearchOptions,\n domainBlocklist,\n countryBlocklist,\n rerankerType = 'cohere',\n topResults = 5,\n strategies = ['no_extraction'],\n filterContent = true,\n safeSearch = 1,\n scraperProvider = 'firecrawl',\n firecrawlApiKey,\n firecrawlApiUrl,\n firecrawlVersion,\n firecrawlOptions,\n serperScraperOptions,\n tavilyScraperOptions,\n scraperTimeout,\n jinaApiKey,\n jinaApiUrl,\n cohereApiKey,\n onSearchResults: _onSearchResults,\n onGetHighlights,\n } = config;\n\n const logger = config.logger || createDefaultLogger();\n /* Tavily search API exposes a `safe_search` boolean derived from the\n * tool's existing safeSearch level (0 = off, ≥1 = on). Bridge the two. */\n const effectiveTavilySearchOptions =\n searchProvider === 'tavily' && config.safeSearch != null\n ? {\n ...tavilySearchOptions,\n safeSearch: config.safeSearch !== 0,\n }\n : tavilySearchOptions;\n\n const schemaProperties: Record<string, unknown> = {\n query: querySchema,\n date: dateSchema,\n images: imagesSchema,\n videos: videosSchema,\n news: newsSchema,\n };\n\n if (searchProvider === 'serper' || searchProvider === 'tavily') {\n schemaProperties.country = countrySchema;\n }\n\n const toolSchema = {\n type: 'object',\n properties: schemaProperties,\n required: ['query'],\n };\n\n const searchAPI = createSearchAPI({\n searchProvider,\n serperApiKey,\n searxngInstanceUrl,\n searxngApiKey,\n tavilyApiKey,\n tavilySearchUrl,\n tavilySearchOptions: effectiveTavilySearchOptions,\n domainBlocklist,\n countryBlocklist,\n });\n\n /** Create scraper based on scraperProvider */\n let scraperInstance: t.BaseScraper;\n\n if (scraperProvider === 'serper') {\n scraperInstance = createSerperScraper({\n ...serperScraperOptions,\n apiKey: serperApiKey,\n timeout: scraperTimeout ?? serperScraperOptions?.timeout,\n logger,\n });\n } else if (scraperProvider === 'tavily') {\n scraperInstance = createTavilyScraper({\n ...tavilyScraperOptions,\n apiKey:\n tavilyScraperOptions?.apiKey ??\n tavilyApiKey ??\n process.env.TAVILY_API_KEY,\n apiUrl: tavilyScraperOptions?.apiUrl ?? tavilyExtractUrl,\n timeout: scraperTimeout ?? tavilyScraperOptions?.timeout,\n logger,\n });\n } else {\n scraperInstance = createFirecrawlScraper({\n ...firecrawlOptions,\n apiKey: firecrawlApiKey ?? process.env.FIRECRAWL_API_KEY,\n apiUrl: firecrawlApiUrl,\n version: firecrawlVersion,\n timeout: scraperTimeout ?? firecrawlOptions?.timeout,\n formats: firecrawlOptions?.formats ?? ['markdown', 'rawHtml'],\n logger,\n });\n }\n\n const selectedReranker = createReranker({\n rerankerType,\n jinaApiKey,\n jinaApiUrl,\n cohereApiKey,\n logger,\n });\n\n if (!selectedReranker) {\n logger.warn('No reranker selected. Using default ranking.');\n }\n\n const sourceProcessor = createSourceProcessor(\n {\n reranker: selectedReranker,\n topResults,\n strategies,\n filterContent,\n logger,\n },\n scraperInstance\n );\n\n const search = createSearchProcessor({\n searchAPI,\n safeSearch,\n supportsVideos: searchProvider !== 'tavily',\n sourceProcessor,\n scraper: scraperInstance,\n onGetHighlights,\n logger,\n });\n\n return createTool({\n search,\n schema: toolSchema,\n onSearchResults: _onSearchResults,\n });\n};\n"],"names":["expandHighlights","tool","createDefaultLogger","formatResultsForLLM","Constants","querySchema","dateSchema","imagesSchema","videosSchema","newsSchema","countrySchema","createSearchAPI","createSerperScraper","createTavilyScraper","createFirecrawlScraper","createReranker","createSourceProcessor","search"],"mappings":"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"}