@illuma-ai/agents 1.0.81

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 (558) hide show
  1. package/README.md +485 -0
  2. package/dist/cjs/agents/AgentContext.cjs +734 -0
  3. package/dist/cjs/agents/AgentContext.cjs.map +1 -0
  4. package/dist/cjs/common/enum.cjs +190 -0
  5. package/dist/cjs/common/enum.cjs.map +1 -0
  6. package/dist/cjs/events.cjs +172 -0
  7. package/dist/cjs/events.cjs.map +1 -0
  8. package/dist/cjs/graphs/Graph.cjs +1615 -0
  9. package/dist/cjs/graphs/Graph.cjs.map +1 -0
  10. package/dist/cjs/graphs/MultiAgentGraph.cjs +890 -0
  11. package/dist/cjs/graphs/MultiAgentGraph.cjs.map +1 -0
  12. package/dist/cjs/instrumentation.cjs +21 -0
  13. package/dist/cjs/instrumentation.cjs.map +1 -0
  14. package/dist/cjs/llm/anthropic/index.cjs +292 -0
  15. package/dist/cjs/llm/anthropic/index.cjs.map +1 -0
  16. package/dist/cjs/llm/anthropic/types.cjs +50 -0
  17. package/dist/cjs/llm/anthropic/types.cjs.map +1 -0
  18. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +630 -0
  19. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -0
  20. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +218 -0
  21. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -0
  22. package/dist/cjs/llm/anthropic/utils/tools.cjs +29 -0
  23. package/dist/cjs/llm/anthropic/utils/tools.cjs.map +1 -0
  24. package/dist/cjs/llm/bedrock/index.cjs +282 -0
  25. package/dist/cjs/llm/bedrock/index.cjs.map +1 -0
  26. package/dist/cjs/llm/fake.cjs +97 -0
  27. package/dist/cjs/llm/fake.cjs.map +1 -0
  28. package/dist/cjs/llm/google/index.cjs +216 -0
  29. package/dist/cjs/llm/google/index.cjs.map +1 -0
  30. package/dist/cjs/llm/google/utils/common.cjs +647 -0
  31. package/dist/cjs/llm/google/utils/common.cjs.map +1 -0
  32. package/dist/cjs/llm/openai/index.cjs +1028 -0
  33. package/dist/cjs/llm/openai/index.cjs.map +1 -0
  34. package/dist/cjs/llm/openai/utils/index.cjs +765 -0
  35. package/dist/cjs/llm/openai/utils/index.cjs.map +1 -0
  36. package/dist/cjs/llm/openrouter/index.cjs +212 -0
  37. package/dist/cjs/llm/openrouter/index.cjs.map +1 -0
  38. package/dist/cjs/llm/providers.cjs +43 -0
  39. package/dist/cjs/llm/providers.cjs.map +1 -0
  40. package/dist/cjs/llm/text.cjs +69 -0
  41. package/dist/cjs/llm/text.cjs.map +1 -0
  42. package/dist/cjs/llm/vertexai/index.cjs +329 -0
  43. package/dist/cjs/llm/vertexai/index.cjs.map +1 -0
  44. package/dist/cjs/main.cjs +240 -0
  45. package/dist/cjs/main.cjs.map +1 -0
  46. package/dist/cjs/messages/cache.cjs +387 -0
  47. package/dist/cjs/messages/cache.cjs.map +1 -0
  48. package/dist/cjs/messages/content.cjs +53 -0
  49. package/dist/cjs/messages/content.cjs.map +1 -0
  50. package/dist/cjs/messages/core.cjs +367 -0
  51. package/dist/cjs/messages/core.cjs.map +1 -0
  52. package/dist/cjs/messages/format.cjs +761 -0
  53. package/dist/cjs/messages/format.cjs.map +1 -0
  54. package/dist/cjs/messages/ids.cjs +23 -0
  55. package/dist/cjs/messages/ids.cjs.map +1 -0
  56. package/dist/cjs/messages/prune.cjs +398 -0
  57. package/dist/cjs/messages/prune.cjs.map +1 -0
  58. package/dist/cjs/messages/tools.cjs +96 -0
  59. package/dist/cjs/messages/tools.cjs.map +1 -0
  60. package/dist/cjs/run.cjs +328 -0
  61. package/dist/cjs/run.cjs.map +1 -0
  62. package/dist/cjs/schemas/validate.cjs +324 -0
  63. package/dist/cjs/schemas/validate.cjs.map +1 -0
  64. package/dist/cjs/splitStream.cjs +210 -0
  65. package/dist/cjs/splitStream.cjs.map +1 -0
  66. package/dist/cjs/stream.cjs +620 -0
  67. package/dist/cjs/stream.cjs.map +1 -0
  68. package/dist/cjs/tools/BrowserTools.cjs +248 -0
  69. package/dist/cjs/tools/BrowserTools.cjs.map +1 -0
  70. package/dist/cjs/tools/Calculator.cjs +66 -0
  71. package/dist/cjs/tools/Calculator.cjs.map +1 -0
  72. package/dist/cjs/tools/CodeExecutor.cjs +234 -0
  73. package/dist/cjs/tools/CodeExecutor.cjs.map +1 -0
  74. package/dist/cjs/tools/ProgrammaticToolCalling.cjs +636 -0
  75. package/dist/cjs/tools/ProgrammaticToolCalling.cjs.map +1 -0
  76. package/dist/cjs/tools/ToolNode.cjs +548 -0
  77. package/dist/cjs/tools/ToolNode.cjs.map +1 -0
  78. package/dist/cjs/tools/ToolSearch.cjs +909 -0
  79. package/dist/cjs/tools/ToolSearch.cjs.map +1 -0
  80. package/dist/cjs/tools/handlers.cjs +255 -0
  81. package/dist/cjs/tools/handlers.cjs.map +1 -0
  82. package/dist/cjs/tools/schema.cjs +31 -0
  83. package/dist/cjs/tools/schema.cjs.map +1 -0
  84. package/dist/cjs/tools/search/anthropic.cjs +40 -0
  85. package/dist/cjs/tools/search/anthropic.cjs.map +1 -0
  86. package/dist/cjs/tools/search/content.cjs +140 -0
  87. package/dist/cjs/tools/search/content.cjs.map +1 -0
  88. package/dist/cjs/tools/search/firecrawl.cjs +179 -0
  89. package/dist/cjs/tools/search/firecrawl.cjs.map +1 -0
  90. package/dist/cjs/tools/search/format.cjs +203 -0
  91. package/dist/cjs/tools/search/format.cjs.map +1 -0
  92. package/dist/cjs/tools/search/highlights.cjs +245 -0
  93. package/dist/cjs/tools/search/highlights.cjs.map +1 -0
  94. package/dist/cjs/tools/search/rerankers.cjs +174 -0
  95. package/dist/cjs/tools/search/rerankers.cjs.map +1 -0
  96. package/dist/cjs/tools/search/schema.cjs +117 -0
  97. package/dist/cjs/tools/search/schema.cjs.map +1 -0
  98. package/dist/cjs/tools/search/search.cjs +566 -0
  99. package/dist/cjs/tools/search/search.cjs.map +1 -0
  100. package/dist/cjs/tools/search/serper-scraper.cjs +132 -0
  101. package/dist/cjs/tools/search/serper-scraper.cjs.map +1 -0
  102. package/dist/cjs/tools/search/tool.cjs +456 -0
  103. package/dist/cjs/tools/search/tool.cjs.map +1 -0
  104. package/dist/cjs/tools/search/utils.cjs +66 -0
  105. package/dist/cjs/tools/search/utils.cjs.map +1 -0
  106. package/dist/cjs/types/graph.cjs +29 -0
  107. package/dist/cjs/types/graph.cjs.map +1 -0
  108. package/dist/cjs/utils/contextAnalytics.cjs +66 -0
  109. package/dist/cjs/utils/contextAnalytics.cjs.map +1 -0
  110. package/dist/cjs/utils/events.cjs +31 -0
  111. package/dist/cjs/utils/events.cjs.map +1 -0
  112. package/dist/cjs/utils/graph.cjs +16 -0
  113. package/dist/cjs/utils/graph.cjs.map +1 -0
  114. package/dist/cjs/utils/handlers.cjs +70 -0
  115. package/dist/cjs/utils/handlers.cjs.map +1 -0
  116. package/dist/cjs/utils/llm.cjs +27 -0
  117. package/dist/cjs/utils/llm.cjs.map +1 -0
  118. package/dist/cjs/utils/misc.cjs +56 -0
  119. package/dist/cjs/utils/misc.cjs.map +1 -0
  120. package/dist/cjs/utils/run.cjs +73 -0
  121. package/dist/cjs/utils/run.cjs.map +1 -0
  122. package/dist/cjs/utils/schema.cjs +27 -0
  123. package/dist/cjs/utils/schema.cjs.map +1 -0
  124. package/dist/cjs/utils/title.cjs +125 -0
  125. package/dist/cjs/utils/title.cjs.map +1 -0
  126. package/dist/cjs/utils/tokens.cjs +125 -0
  127. package/dist/cjs/utils/tokens.cjs.map +1 -0
  128. package/dist/cjs/utils/toonFormat.cjs +388 -0
  129. package/dist/cjs/utils/toonFormat.cjs.map +1 -0
  130. package/dist/esm/agents/AgentContext.mjs +732 -0
  131. package/dist/esm/agents/AgentContext.mjs.map +1 -0
  132. package/dist/esm/common/enum.mjs +190 -0
  133. package/dist/esm/common/enum.mjs.map +1 -0
  134. package/dist/esm/events.mjs +164 -0
  135. package/dist/esm/events.mjs.map +1 -0
  136. package/dist/esm/graphs/Graph.mjs +1612 -0
  137. package/dist/esm/graphs/Graph.mjs.map +1 -0
  138. package/dist/esm/graphs/MultiAgentGraph.mjs +888 -0
  139. package/dist/esm/graphs/MultiAgentGraph.mjs.map +1 -0
  140. package/dist/esm/instrumentation.mjs +19 -0
  141. package/dist/esm/instrumentation.mjs.map +1 -0
  142. package/dist/esm/llm/anthropic/index.mjs +290 -0
  143. package/dist/esm/llm/anthropic/index.mjs.map +1 -0
  144. package/dist/esm/llm/anthropic/types.mjs +48 -0
  145. package/dist/esm/llm/anthropic/types.mjs.map +1 -0
  146. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +627 -0
  147. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -0
  148. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +216 -0
  149. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -0
  150. package/dist/esm/llm/anthropic/utils/tools.mjs +27 -0
  151. package/dist/esm/llm/anthropic/utils/tools.mjs.map +1 -0
  152. package/dist/esm/llm/bedrock/index.mjs +280 -0
  153. package/dist/esm/llm/bedrock/index.mjs.map +1 -0
  154. package/dist/esm/llm/fake.mjs +94 -0
  155. package/dist/esm/llm/fake.mjs.map +1 -0
  156. package/dist/esm/llm/google/index.mjs +214 -0
  157. package/dist/esm/llm/google/index.mjs.map +1 -0
  158. package/dist/esm/llm/google/utils/common.mjs +638 -0
  159. package/dist/esm/llm/google/utils/common.mjs.map +1 -0
  160. package/dist/esm/llm/openai/index.mjs +1018 -0
  161. package/dist/esm/llm/openai/index.mjs.map +1 -0
  162. package/dist/esm/llm/openai/utils/index.mjs +759 -0
  163. package/dist/esm/llm/openai/utils/index.mjs.map +1 -0
  164. package/dist/esm/llm/openrouter/index.mjs +210 -0
  165. package/dist/esm/llm/openrouter/index.mjs.map +1 -0
  166. package/dist/esm/llm/providers.mjs +39 -0
  167. package/dist/esm/llm/providers.mjs.map +1 -0
  168. package/dist/esm/llm/text.mjs +67 -0
  169. package/dist/esm/llm/text.mjs.map +1 -0
  170. package/dist/esm/llm/vertexai/index.mjs +327 -0
  171. package/dist/esm/llm/vertexai/index.mjs.map +1 -0
  172. package/dist/esm/main.mjs +37 -0
  173. package/dist/esm/main.mjs.map +1 -0
  174. package/dist/esm/messages/cache.mjs +382 -0
  175. package/dist/esm/messages/cache.mjs.map +1 -0
  176. package/dist/esm/messages/content.mjs +51 -0
  177. package/dist/esm/messages/content.mjs.map +1 -0
  178. package/dist/esm/messages/core.mjs +359 -0
  179. package/dist/esm/messages/core.mjs.map +1 -0
  180. package/dist/esm/messages/format.mjs +752 -0
  181. package/dist/esm/messages/format.mjs.map +1 -0
  182. package/dist/esm/messages/ids.mjs +21 -0
  183. package/dist/esm/messages/ids.mjs.map +1 -0
  184. package/dist/esm/messages/prune.mjs +393 -0
  185. package/dist/esm/messages/prune.mjs.map +1 -0
  186. package/dist/esm/messages/tools.mjs +93 -0
  187. package/dist/esm/messages/tools.mjs.map +1 -0
  188. package/dist/esm/run.mjs +325 -0
  189. package/dist/esm/run.mjs.map +1 -0
  190. package/dist/esm/schemas/validate.mjs +317 -0
  191. package/dist/esm/schemas/validate.mjs.map +1 -0
  192. package/dist/esm/splitStream.mjs +207 -0
  193. package/dist/esm/splitStream.mjs.map +1 -0
  194. package/dist/esm/stream.mjs +616 -0
  195. package/dist/esm/stream.mjs.map +1 -0
  196. package/dist/esm/tools/BrowserTools.mjs +244 -0
  197. package/dist/esm/tools/BrowserTools.mjs.map +1 -0
  198. package/dist/esm/tools/Calculator.mjs +41 -0
  199. package/dist/esm/tools/Calculator.mjs.map +1 -0
  200. package/dist/esm/tools/CodeExecutor.mjs +226 -0
  201. package/dist/esm/tools/CodeExecutor.mjs.map +1 -0
  202. package/dist/esm/tools/ProgrammaticToolCalling.mjs +622 -0
  203. package/dist/esm/tools/ProgrammaticToolCalling.mjs.map +1 -0
  204. package/dist/esm/tools/ToolNode.mjs +545 -0
  205. package/dist/esm/tools/ToolNode.mjs.map +1 -0
  206. package/dist/esm/tools/ToolSearch.mjs +870 -0
  207. package/dist/esm/tools/ToolSearch.mjs.map +1 -0
  208. package/dist/esm/tools/handlers.mjs +250 -0
  209. package/dist/esm/tools/handlers.mjs.map +1 -0
  210. package/dist/esm/tools/schema.mjs +28 -0
  211. package/dist/esm/tools/schema.mjs.map +1 -0
  212. package/dist/esm/tools/search/anthropic.mjs +37 -0
  213. package/dist/esm/tools/search/anthropic.mjs.map +1 -0
  214. package/dist/esm/tools/search/content.mjs +119 -0
  215. package/dist/esm/tools/search/content.mjs.map +1 -0
  216. package/dist/esm/tools/search/firecrawl.mjs +176 -0
  217. package/dist/esm/tools/search/firecrawl.mjs.map +1 -0
  218. package/dist/esm/tools/search/format.mjs +201 -0
  219. package/dist/esm/tools/search/format.mjs.map +1 -0
  220. package/dist/esm/tools/search/highlights.mjs +243 -0
  221. package/dist/esm/tools/search/highlights.mjs.map +1 -0
  222. package/dist/esm/tools/search/rerankers.mjs +168 -0
  223. package/dist/esm/tools/search/rerankers.mjs.map +1 -0
  224. package/dist/esm/tools/search/schema.mjs +104 -0
  225. package/dist/esm/tools/search/schema.mjs.map +1 -0
  226. package/dist/esm/tools/search/search.mjs +563 -0
  227. package/dist/esm/tools/search/search.mjs.map +1 -0
  228. package/dist/esm/tools/search/serper-scraper.mjs +129 -0
  229. package/dist/esm/tools/search/serper-scraper.mjs.map +1 -0
  230. package/dist/esm/tools/search/tool.mjs +454 -0
  231. package/dist/esm/tools/search/tool.mjs.map +1 -0
  232. package/dist/esm/tools/search/utils.mjs +61 -0
  233. package/dist/esm/tools/search/utils.mjs.map +1 -0
  234. package/dist/esm/types/graph.mjs +26 -0
  235. package/dist/esm/types/graph.mjs.map +1 -0
  236. package/dist/esm/utils/contextAnalytics.mjs +64 -0
  237. package/dist/esm/utils/contextAnalytics.mjs.map +1 -0
  238. package/dist/esm/utils/events.mjs +29 -0
  239. package/dist/esm/utils/events.mjs.map +1 -0
  240. package/dist/esm/utils/graph.mjs +13 -0
  241. package/dist/esm/utils/graph.mjs.map +1 -0
  242. package/dist/esm/utils/handlers.mjs +68 -0
  243. package/dist/esm/utils/handlers.mjs.map +1 -0
  244. package/dist/esm/utils/llm.mjs +24 -0
  245. package/dist/esm/utils/llm.mjs.map +1 -0
  246. package/dist/esm/utils/misc.mjs +53 -0
  247. package/dist/esm/utils/misc.mjs.map +1 -0
  248. package/dist/esm/utils/run.mjs +70 -0
  249. package/dist/esm/utils/run.mjs.map +1 -0
  250. package/dist/esm/utils/schema.mjs +24 -0
  251. package/dist/esm/utils/schema.mjs.map +1 -0
  252. package/dist/esm/utils/title.mjs +122 -0
  253. package/dist/esm/utils/title.mjs.map +1 -0
  254. package/dist/esm/utils/tokens.mjs +121 -0
  255. package/dist/esm/utils/tokens.mjs.map +1 -0
  256. package/dist/esm/utils/toonFormat.mjs +381 -0
  257. package/dist/esm/utils/toonFormat.mjs.map +1 -0
  258. package/dist/types/agents/AgentContext.d.ts +293 -0
  259. package/dist/types/common/enum.d.ts +155 -0
  260. package/dist/types/common/index.d.ts +1 -0
  261. package/dist/types/events.d.ts +31 -0
  262. package/dist/types/graphs/Graph.d.ts +216 -0
  263. package/dist/types/graphs/MultiAgentGraph.d.ts +104 -0
  264. package/dist/types/graphs/index.d.ts +2 -0
  265. package/dist/types/index.d.ts +21 -0
  266. package/dist/types/instrumentation.d.ts +1 -0
  267. package/dist/types/llm/anthropic/index.d.ts +39 -0
  268. package/dist/types/llm/anthropic/types.d.ts +37 -0
  269. package/dist/types/llm/anthropic/utils/message_inputs.d.ts +14 -0
  270. package/dist/types/llm/anthropic/utils/message_outputs.d.ts +14 -0
  271. package/dist/types/llm/anthropic/utils/output_parsers.d.ts +22 -0
  272. package/dist/types/llm/anthropic/utils/tools.d.ts +3 -0
  273. package/dist/types/llm/bedrock/index.d.ts +141 -0
  274. package/dist/types/llm/bedrock/types.d.ts +27 -0
  275. package/dist/types/llm/bedrock/utils/index.d.ts +5 -0
  276. package/dist/types/llm/bedrock/utils/message_inputs.d.ts +31 -0
  277. package/dist/types/llm/bedrock/utils/message_outputs.d.ts +33 -0
  278. package/dist/types/llm/fake.d.ts +31 -0
  279. package/dist/types/llm/google/index.d.ts +24 -0
  280. package/dist/types/llm/google/types.d.ts +42 -0
  281. package/dist/types/llm/google/utils/common.d.ts +34 -0
  282. package/dist/types/llm/google/utils/tools.d.ts +10 -0
  283. package/dist/types/llm/google/utils/zod_to_genai_parameters.d.ts +14 -0
  284. package/dist/types/llm/openai/index.d.ts +127 -0
  285. package/dist/types/llm/openai/types.d.ts +10 -0
  286. package/dist/types/llm/openai/utils/index.d.ts +29 -0
  287. package/dist/types/llm/openrouter/index.d.ts +15 -0
  288. package/dist/types/llm/providers.d.ts +5 -0
  289. package/dist/types/llm/text.d.ts +21 -0
  290. package/dist/types/llm/vertexai/index.d.ts +293 -0
  291. package/dist/types/messages/cache.d.ts +54 -0
  292. package/dist/types/messages/content.d.ts +7 -0
  293. package/dist/types/messages/core.d.ts +14 -0
  294. package/dist/types/messages/format.d.ts +137 -0
  295. package/dist/types/messages/ids.d.ts +3 -0
  296. package/dist/types/messages/index.d.ts +7 -0
  297. package/dist/types/messages/prune.d.ts +52 -0
  298. package/dist/types/messages/reducer.d.ts +9 -0
  299. package/dist/types/messages/tools.d.ts +17 -0
  300. package/dist/types/mockStream.d.ts +32 -0
  301. package/dist/types/prompts/collab.d.ts +1 -0
  302. package/dist/types/prompts/index.d.ts +2 -0
  303. package/dist/types/prompts/taskmanager.d.ts +41 -0
  304. package/dist/types/run.d.ts +41 -0
  305. package/dist/types/schemas/index.d.ts +1 -0
  306. package/dist/types/schemas/validate.d.ts +59 -0
  307. package/dist/types/splitStream.d.ts +37 -0
  308. package/dist/types/stream.d.ts +15 -0
  309. package/dist/types/test/mockTools.d.ts +28 -0
  310. package/dist/types/tools/BrowserTools.d.ts +87 -0
  311. package/dist/types/tools/Calculator.d.ts +34 -0
  312. package/dist/types/tools/CodeExecutor.d.ts +57 -0
  313. package/dist/types/tools/ProgrammaticToolCalling.d.ts +138 -0
  314. package/dist/types/tools/ToolNode.d.ts +51 -0
  315. package/dist/types/tools/ToolSearch.d.ts +219 -0
  316. package/dist/types/tools/handlers.d.ts +22 -0
  317. package/dist/types/tools/schema.d.ts +12 -0
  318. package/dist/types/tools/search/anthropic.d.ts +16 -0
  319. package/dist/types/tools/search/content.d.ts +4 -0
  320. package/dist/types/tools/search/firecrawl.d.ts +54 -0
  321. package/dist/types/tools/search/format.d.ts +5 -0
  322. package/dist/types/tools/search/highlights.d.ts +13 -0
  323. package/dist/types/tools/search/index.d.ts +3 -0
  324. package/dist/types/tools/search/rerankers.d.ts +38 -0
  325. package/dist/types/tools/search/schema.d.ts +103 -0
  326. package/dist/types/tools/search/search.d.ts +8 -0
  327. package/dist/types/tools/search/serper-scraper.d.ts +59 -0
  328. package/dist/types/tools/search/test.d.ts +1 -0
  329. package/dist/types/tools/search/tool.d.ts +3 -0
  330. package/dist/types/tools/search/types.d.ts +575 -0
  331. package/dist/types/tools/search/utils.d.ts +10 -0
  332. package/dist/types/types/graph.d.ts +399 -0
  333. package/dist/types/types/index.d.ts +5 -0
  334. package/dist/types/types/llm.d.ts +105 -0
  335. package/dist/types/types/messages.d.ts +4 -0
  336. package/dist/types/types/run.d.ts +112 -0
  337. package/dist/types/types/stream.d.ts +308 -0
  338. package/dist/types/types/tools.d.ts +296 -0
  339. package/dist/types/utils/contextAnalytics.d.ts +37 -0
  340. package/dist/types/utils/events.d.ts +6 -0
  341. package/dist/types/utils/graph.d.ts +2 -0
  342. package/dist/types/utils/handlers.d.ts +34 -0
  343. package/dist/types/utils/index.d.ts +9 -0
  344. package/dist/types/utils/llm.d.ts +3 -0
  345. package/dist/types/utils/llmConfig.d.ts +3 -0
  346. package/dist/types/utils/logging.d.ts +1 -0
  347. package/dist/types/utils/misc.d.ts +7 -0
  348. package/dist/types/utils/run.d.ts +27 -0
  349. package/dist/types/utils/schema.d.ts +8 -0
  350. package/dist/types/utils/title.d.ts +4 -0
  351. package/dist/types/utils/tokens.d.ts +28 -0
  352. package/dist/types/utils/toonFormat.d.ts +111 -0
  353. package/package.json +190 -0
  354. package/src/agents/AgentContext.test.ts +458 -0
  355. package/src/agents/AgentContext.ts +972 -0
  356. package/src/agents/__tests__/AgentContext.test.ts +805 -0
  357. package/src/agents/__tests__/resolveStructuredOutputMode.test.ts +137 -0
  358. package/src/common/enum.ts +203 -0
  359. package/src/common/index.ts +2 -0
  360. package/src/events.ts +223 -0
  361. package/src/graphs/Graph.ts +2228 -0
  362. package/src/graphs/MultiAgentGraph.ts +1063 -0
  363. package/src/graphs/__tests__/structured-output.integration.test.ts +809 -0
  364. package/src/graphs/__tests__/structured-output.test.ts +183 -0
  365. package/src/graphs/index.ts +2 -0
  366. package/src/index.ts +34 -0
  367. package/src/instrumentation.ts +22 -0
  368. package/src/llm/anthropic/Jacob_Lee_Resume_2023.pdf +0 -0
  369. package/src/llm/anthropic/index.ts +413 -0
  370. package/src/llm/anthropic/llm.spec.ts +1442 -0
  371. package/src/llm/anthropic/types.ts +140 -0
  372. package/src/llm/anthropic/utils/message_inputs.ts +757 -0
  373. package/src/llm/anthropic/utils/message_outputs.ts +289 -0
  374. package/src/llm/anthropic/utils/output_parsers.ts +133 -0
  375. package/src/llm/anthropic/utils/tools.ts +29 -0
  376. package/src/llm/bedrock/__tests__/bedrock-caching.test.ts +495 -0
  377. package/src/llm/bedrock/index.ts +411 -0
  378. package/src/llm/bedrock/llm.spec.ts +616 -0
  379. package/src/llm/bedrock/types.ts +51 -0
  380. package/src/llm/bedrock/utils/index.ts +18 -0
  381. package/src/llm/bedrock/utils/message_inputs.ts +563 -0
  382. package/src/llm/bedrock/utils/message_outputs.ts +310 -0
  383. package/src/llm/fake.ts +133 -0
  384. package/src/llm/google/data/gettysburg10.wav +0 -0
  385. package/src/llm/google/data/hotdog.jpg +0 -0
  386. package/src/llm/google/index.ts +337 -0
  387. package/src/llm/google/llm.spec.ts +934 -0
  388. package/src/llm/google/types.ts +56 -0
  389. package/src/llm/google/utils/common.ts +873 -0
  390. package/src/llm/google/utils/tools.ts +160 -0
  391. package/src/llm/google/utils/zod_to_genai_parameters.ts +86 -0
  392. package/src/llm/openai/index.ts +1366 -0
  393. package/src/llm/openai/types.ts +24 -0
  394. package/src/llm/openai/utils/index.ts +1035 -0
  395. package/src/llm/openai/utils/isReasoningModel.test.ts +90 -0
  396. package/src/llm/openrouter/index.ts +291 -0
  397. package/src/llm/providers.ts +52 -0
  398. package/src/llm/text.ts +94 -0
  399. package/src/llm/vertexai/index.ts +359 -0
  400. package/src/messages/__tests__/tools.test.ts +473 -0
  401. package/src/messages/cache.test.ts +1261 -0
  402. package/src/messages/cache.ts +518 -0
  403. package/src/messages/content.test.ts +362 -0
  404. package/src/messages/content.ts +63 -0
  405. package/src/messages/core.ts +473 -0
  406. package/src/messages/ensureThinkingBlock.test.ts +468 -0
  407. package/src/messages/format.ts +1029 -0
  408. package/src/messages/formatAgentMessages.test.ts +1513 -0
  409. package/src/messages/formatAgentMessages.tools.test.ts +419 -0
  410. package/src/messages/formatMessage.test.ts +693 -0
  411. package/src/messages/ids.ts +26 -0
  412. package/src/messages/index.ts +7 -0
  413. package/src/messages/labelContentByAgent.test.ts +887 -0
  414. package/src/messages/prune.ts +568 -0
  415. package/src/messages/reducer.ts +80 -0
  416. package/src/messages/shiftIndexTokenCountMap.test.ts +81 -0
  417. package/src/messages/tools.ts +108 -0
  418. package/src/mockStream.ts +99 -0
  419. package/src/prompts/collab.ts +6 -0
  420. package/src/prompts/index.ts +2 -0
  421. package/src/prompts/taskmanager.ts +61 -0
  422. package/src/run.ts +467 -0
  423. package/src/schemas/index.ts +2 -0
  424. package/src/schemas/schema-preparation.test.ts +500 -0
  425. package/src/schemas/validate.test.ts +358 -0
  426. package/src/schemas/validate.ts +454 -0
  427. package/src/scripts/abort.ts +157 -0
  428. package/src/scripts/ant_web_search.ts +158 -0
  429. package/src/scripts/ant_web_search_edge_case.ts +162 -0
  430. package/src/scripts/ant_web_search_error_edge_case.ts +148 -0
  431. package/src/scripts/args.ts +48 -0
  432. package/src/scripts/caching.ts +132 -0
  433. package/src/scripts/cli.ts +172 -0
  434. package/src/scripts/cli2.ts +133 -0
  435. package/src/scripts/cli3.ts +184 -0
  436. package/src/scripts/cli4.ts +191 -0
  437. package/src/scripts/cli5.ts +191 -0
  438. package/src/scripts/code_exec.ts +213 -0
  439. package/src/scripts/code_exec_files.ts +236 -0
  440. package/src/scripts/code_exec_multi_session.ts +241 -0
  441. package/src/scripts/code_exec_ptc.ts +334 -0
  442. package/src/scripts/code_exec_session.ts +282 -0
  443. package/src/scripts/code_exec_simple.ts +147 -0
  444. package/src/scripts/content.ts +138 -0
  445. package/src/scripts/empty_input.ts +137 -0
  446. package/src/scripts/handoff-test.ts +135 -0
  447. package/src/scripts/image.ts +178 -0
  448. package/src/scripts/memory.ts +97 -0
  449. package/src/scripts/multi-agent-chain.ts +331 -0
  450. package/src/scripts/multi-agent-conditional.ts +221 -0
  451. package/src/scripts/multi-agent-document-review-chain.ts +197 -0
  452. package/src/scripts/multi-agent-hybrid-flow.ts +310 -0
  453. package/src/scripts/multi-agent-parallel-start.ts +265 -0
  454. package/src/scripts/multi-agent-parallel.ts +394 -0
  455. package/src/scripts/multi-agent-sequence.ts +217 -0
  456. package/src/scripts/multi-agent-supervisor.ts +365 -0
  457. package/src/scripts/multi-agent-test.ts +186 -0
  458. package/src/scripts/parallel-asymmetric-tools-test.ts +274 -0
  459. package/src/scripts/parallel-full-metadata-test.ts +240 -0
  460. package/src/scripts/parallel-tools-test.ts +340 -0
  461. package/src/scripts/programmatic_exec.ts +396 -0
  462. package/src/scripts/programmatic_exec_agent.ts +231 -0
  463. package/src/scripts/search.ts +146 -0
  464. package/src/scripts/sequential-full-metadata-test.ts +197 -0
  465. package/src/scripts/simple.ts +225 -0
  466. package/src/scripts/single-agent-metadata-test.ts +198 -0
  467. package/src/scripts/stream.ts +140 -0
  468. package/src/scripts/test-custom-prompt-key.ts +145 -0
  469. package/src/scripts/test-handoff-input.ts +170 -0
  470. package/src/scripts/test-handoff-preamble.ts +277 -0
  471. package/src/scripts/test-multi-agent-list-handoff.ts +417 -0
  472. package/src/scripts/test-parallel-agent-labeling.ts +325 -0
  473. package/src/scripts/test-parallel-handoffs.ts +291 -0
  474. package/src/scripts/test-thinking-handoff-bedrock.ts +153 -0
  475. package/src/scripts/test-thinking-handoff.ts +155 -0
  476. package/src/scripts/test-tools-before-handoff.ts +226 -0
  477. package/src/scripts/test_code_api.ts +361 -0
  478. package/src/scripts/thinking-bedrock.ts +159 -0
  479. package/src/scripts/thinking.ts +171 -0
  480. package/src/scripts/tool_search.ts +162 -0
  481. package/src/scripts/tools.ts +177 -0
  482. package/src/specs/agent-handoffs.test.ts +888 -0
  483. package/src/specs/anthropic.simple.test.ts +387 -0
  484. package/src/specs/azure.simple.test.ts +364 -0
  485. package/src/specs/cache.simple.test.ts +396 -0
  486. package/src/specs/deepseek.simple.test.ts +283 -0
  487. package/src/specs/emergency-prune.test.ts +407 -0
  488. package/src/specs/moonshot.simple.test.ts +358 -0
  489. package/src/specs/openai.simple.test.ts +311 -0
  490. package/src/specs/openrouter.simple.test.ts +107 -0
  491. package/src/specs/prune.test.ts +901 -0
  492. package/src/specs/reasoning.test.ts +201 -0
  493. package/src/specs/spec.utils.ts +3 -0
  494. package/src/specs/thinking-handoff.test.ts +620 -0
  495. package/src/specs/thinking-prune.test.ts +703 -0
  496. package/src/specs/token-distribution-edge-case.test.ts +316 -0
  497. package/src/specs/token-memoization.test.ts +32 -0
  498. package/src/specs/tool-error.test.ts +198 -0
  499. package/src/splitStream.test.ts +691 -0
  500. package/src/splitStream.ts +234 -0
  501. package/src/stream.test.ts +94 -0
  502. package/src/stream.ts +801 -0
  503. package/src/test/mockTools.ts +386 -0
  504. package/src/tools/BrowserTools.ts +393 -0
  505. package/src/tools/Calculator.test.ts +278 -0
  506. package/src/tools/Calculator.ts +46 -0
  507. package/src/tools/CodeExecutor.ts +270 -0
  508. package/src/tools/ProgrammaticToolCalling.ts +785 -0
  509. package/src/tools/ToolNode.ts +674 -0
  510. package/src/tools/ToolSearch.ts +1095 -0
  511. package/src/tools/__tests__/BrowserTools.test.ts +265 -0
  512. package/src/tools/__tests__/ProgrammaticToolCalling.integration.test.ts +319 -0
  513. package/src/tools/__tests__/ProgrammaticToolCalling.test.ts +1006 -0
  514. package/src/tools/__tests__/ToolSearch.integration.test.ts +162 -0
  515. package/src/tools/__tests__/ToolSearch.test.ts +1003 -0
  516. package/src/tools/handlers.ts +363 -0
  517. package/src/tools/schema.ts +37 -0
  518. package/src/tools/search/anthropic.ts +51 -0
  519. package/src/tools/search/content.test.ts +173 -0
  520. package/src/tools/search/content.ts +147 -0
  521. package/src/tools/search/firecrawl.ts +210 -0
  522. package/src/tools/search/format.ts +250 -0
  523. package/src/tools/search/highlights.ts +320 -0
  524. package/src/tools/search/index.ts +3 -0
  525. package/src/tools/search/jina-reranker.test.ts +130 -0
  526. package/src/tools/search/output.md +2775 -0
  527. package/src/tools/search/rerankers.ts +242 -0
  528. package/src/tools/search/schema.ts +113 -0
  529. package/src/tools/search/search.ts +768 -0
  530. package/src/tools/search/serper-scraper.ts +155 -0
  531. package/src/tools/search/test.html +884 -0
  532. package/src/tools/search/test.md +643 -0
  533. package/src/tools/search/test.ts +159 -0
  534. package/src/tools/search/tool.ts +657 -0
  535. package/src/tools/search/types.ts +665 -0
  536. package/src/tools/search/utils.ts +79 -0
  537. package/src/types/graph.test.ts +218 -0
  538. package/src/types/graph.ts +533 -0
  539. package/src/types/index.ts +6 -0
  540. package/src/types/llm.ts +140 -0
  541. package/src/types/messages.ts +4 -0
  542. package/src/types/run.ts +128 -0
  543. package/src/types/stream.ts +417 -0
  544. package/src/types/tools.ts +355 -0
  545. package/src/utils/contextAnalytics.ts +103 -0
  546. package/src/utils/events.ts +32 -0
  547. package/src/utils/graph.ts +11 -0
  548. package/src/utils/handlers.ts +107 -0
  549. package/src/utils/index.ts +9 -0
  550. package/src/utils/llm.ts +26 -0
  551. package/src/utils/llmConfig.ts +208 -0
  552. package/src/utils/logging.ts +48 -0
  553. package/src/utils/misc.ts +57 -0
  554. package/src/utils/run.ts +106 -0
  555. package/src/utils/schema.ts +35 -0
  556. package/src/utils/title.ts +177 -0
  557. package/src/utils/tokens.ts +142 -0
  558. package/src/utils/toonFormat.ts +475 -0
@@ -0,0 +1,147 @@
1
+ import * as cheerio from 'cheerio';
2
+ import type { References, MediaReference } from './types';
3
+
4
+ export function processContent(
5
+ html: string,
6
+ markdown: string
7
+ ): {
8
+ markdown: string;
9
+ } & References {
10
+ const linkMap = new Map<string, MediaReference>();
11
+ const imageMap = new Map<string, MediaReference>();
12
+ const videoMap = new Map<string, MediaReference>();
13
+ const iframeMap = new Map<string, MediaReference>();
14
+
15
+ const $ = cheerio.load(html, {
16
+ xmlMode: false,
17
+ });
18
+
19
+ // Extract all media references
20
+ $('a[href]').each((_, el) => {
21
+ const href = $(el).attr('href');
22
+ if (href != null && href) {
23
+ linkMap.set(href, {
24
+ originalUrl: href,
25
+ title: $(el).attr('title'),
26
+ text: $(el).text().trim(),
27
+ });
28
+ }
29
+ });
30
+
31
+ $('img[src]').each((_, el) => {
32
+ const src = $(el).attr('src');
33
+ if (src != null && src) {
34
+ imageMap.set(src, {
35
+ originalUrl: src,
36
+ title: $(el).attr('alt') ?? $(el).attr('title'),
37
+ });
38
+ }
39
+ });
40
+
41
+ // Handle videos (dedicated video elements and video platforms in iframes)
42
+ $('video[src], iframe[src*="youtube"], iframe[src*="vimeo"]').each(
43
+ (_, el) => {
44
+ const src = $(el).attr('src');
45
+ if (src != null && src) {
46
+ videoMap.set(src, {
47
+ originalUrl: src,
48
+ title: $(el).attr('title'),
49
+ });
50
+ }
51
+ }
52
+ );
53
+
54
+ // Handle all other generic iframes that aren't already captured as videos
55
+ $('iframe').each((_, el) => {
56
+ const src = $(el).attr('src');
57
+ if (
58
+ src != null &&
59
+ src &&
60
+ !src.includes('youtube') &&
61
+ !src.includes('vimeo')
62
+ ) {
63
+ iframeMap.set(src, {
64
+ originalUrl: src,
65
+ title: $(el).attr('title'),
66
+ });
67
+ }
68
+ });
69
+
70
+ // Create lookup maps with indices
71
+ const linkIndexMap = new Map<string, number>();
72
+ const imageIndexMap = new Map<string, number>();
73
+ const videoIndexMap = new Map<string, number>();
74
+ const iframeIndexMap = new Map<string, number>();
75
+
76
+ Array.from(linkMap.keys()).forEach((url, i) => linkIndexMap.set(url, i + 1));
77
+ Array.from(imageMap.keys()).forEach((url, i) =>
78
+ imageIndexMap.set(url, i + 1)
79
+ );
80
+ Array.from(videoMap.keys()).forEach((url, i) =>
81
+ videoIndexMap.set(url, i + 1)
82
+ );
83
+ Array.from(iframeMap.keys()).forEach((url, i) =>
84
+ iframeIndexMap.set(url, i + 1)
85
+ );
86
+
87
+ // Process the markdown
88
+ let result = markdown;
89
+
90
+ // Replace each URL one by one, starting with the longest URLs first to avoid partial matches
91
+ const allUrls = [
92
+ ...Array.from(imageMap.keys()).map((url) => ({
93
+ url,
94
+ type: 'image',
95
+ idx: imageIndexMap.get(url),
96
+ })),
97
+ ...Array.from(videoMap.keys()).map((url) => ({
98
+ url,
99
+ type: 'video',
100
+ idx: videoIndexMap.get(url),
101
+ })),
102
+ ...Array.from(iframeMap.keys()).map((url) => ({
103
+ url,
104
+ type: 'iframe',
105
+ idx: iframeIndexMap.get(url),
106
+ })),
107
+ ...Array.from(linkMap.keys()).map((url) => ({
108
+ url,
109
+ type: 'link',
110
+ idx: linkIndexMap.get(url),
111
+ })),
112
+ ].sort((a, b) => b.url.length - a.url.length);
113
+
114
+ // Create a function to escape special characters in URLs for regex
115
+ function escapeRegex(string: string): string {
116
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
117
+ }
118
+
119
+ // Replace each URL in the markdown
120
+ for (const { url, type, idx } of allUrls) {
121
+ // Create a regex that captures URLs in markdown links
122
+ const regex = new RegExp(`\\(${escapeRegex(url)}(?:\\s+"[^"]*")?\\)`, 'g');
123
+
124
+ result = result.replace(regex, (match) => {
125
+ // Keep any title attribute that might exist
126
+ const titleMatch = match.match(/\s+"([^"]*)"/);
127
+ const titlePart = titleMatch ? ` "${titleMatch[1]}"` : '';
128
+
129
+ return `(${type}#${idx}${titlePart})`;
130
+ });
131
+ }
132
+
133
+ iframeMap.clear();
134
+ const links = Array.from(linkMap.values());
135
+ linkMap.clear();
136
+ const images = Array.from(imageMap.values());
137
+ imageMap.clear();
138
+ const videos = Array.from(videoMap.values());
139
+ videoMap.clear();
140
+
141
+ return {
142
+ markdown: result,
143
+ links,
144
+ images,
145
+ videos,
146
+ };
147
+ }
@@ -0,0 +1,210 @@
1
+ import axios from 'axios';
2
+ import { processContent } from './content';
3
+ import type * as t from './types';
4
+ import { createDefaultLogger } from './utils';
5
+
6
+ /**
7
+ * Firecrawl scraper implementation
8
+ * Uses the Firecrawl API to scrape web pages
9
+ */
10
+ export class FirecrawlScraper implements t.BaseScraper {
11
+ private apiKey: string;
12
+ private apiUrl: string;
13
+ private version: string;
14
+ private defaultFormats: string[];
15
+ private timeout: number;
16
+ private logger: t.Logger;
17
+ private includeTags?: string[];
18
+ private excludeTags?: string[];
19
+ private waitFor?: number;
20
+ private maxAge?: number;
21
+ private mobile?: boolean;
22
+ private skipTlsVerification?: boolean;
23
+ private blockAds?: boolean;
24
+ private removeBase64Images?: boolean;
25
+ private parsePDF?: boolean;
26
+ private storeInCache?: boolean;
27
+ private zeroDataRetention?: boolean;
28
+ private headers?: Record<string, string>;
29
+ private location?: { country?: string; languages?: string[] };
30
+ private onlyMainContent?: boolean;
31
+ private changeTrackingOptions?: object;
32
+
33
+ constructor(config: t.FirecrawlScraperConfig = {}) {
34
+ this.apiKey = config.apiKey ?? process.env.FIRECRAWL_API_KEY ?? '';
35
+
36
+ this.version = config.version ?? 'v2';
37
+
38
+ const baseUrl =
39
+ config.apiUrl ??
40
+ process.env.FIRECRAWL_BASE_URL ??
41
+ 'https://api.firecrawl.dev';
42
+ this.apiUrl = `${baseUrl.replace(/\/+$/, '')}/${this.version}/scrape`;
43
+
44
+ this.defaultFormats = config.formats ?? ['markdown', 'rawHtml'];
45
+ this.timeout = config.timeout ?? 7500;
46
+
47
+ this.logger = config.logger || createDefaultLogger();
48
+
49
+ this.includeTags = config.includeTags;
50
+ this.excludeTags = config.excludeTags;
51
+ this.waitFor = config.waitFor;
52
+ this.maxAge = config.maxAge;
53
+ this.mobile = config.mobile;
54
+ this.skipTlsVerification = config.skipTlsVerification;
55
+ this.blockAds = config.blockAds;
56
+ this.removeBase64Images = config.removeBase64Images;
57
+ this.parsePDF = config.parsePDF;
58
+ this.storeInCache = config.storeInCache;
59
+ this.zeroDataRetention = config.zeroDataRetention;
60
+ this.headers = config.headers;
61
+ this.location = config.location;
62
+ this.onlyMainContent = config.onlyMainContent;
63
+ this.changeTrackingOptions = config.changeTrackingOptions;
64
+
65
+ if (!this.apiKey) {
66
+ this.logger.warn('FIRECRAWL_API_KEY is not set. Scraping will not work.');
67
+ }
68
+
69
+ this.logger.debug(
70
+ `Firecrawl scraper initialized with API URL: ${this.apiUrl}`
71
+ );
72
+ }
73
+
74
+ /**
75
+ * Scrape a single URL
76
+ * @param url URL to scrape
77
+ * @param options Scrape options
78
+ * @returns Scrape response
79
+ */
80
+ async scrapeUrl(
81
+ url: string,
82
+ options: t.FirecrawlScrapeOptions = {}
83
+ ): Promise<[string, t.FirecrawlScrapeResponse]> {
84
+ if (!this.apiKey) {
85
+ return [
86
+ url,
87
+ {
88
+ success: false,
89
+ error: 'FIRECRAWL_API_KEY is not set',
90
+ },
91
+ ];
92
+ }
93
+
94
+ try {
95
+ const payload = omitUndefined({
96
+ url,
97
+ formats: options.formats ?? this.defaultFormats,
98
+ includeTags: options.includeTags ?? this.includeTags,
99
+ excludeTags: options.excludeTags ?? this.excludeTags,
100
+ headers: options.headers ?? this.headers,
101
+ waitFor: options.waitFor ?? this.waitFor,
102
+ timeout: options.timeout ?? this.timeout,
103
+ onlyMainContent: options.onlyMainContent ?? this.onlyMainContent,
104
+ maxAge: options.maxAge ?? this.maxAge,
105
+ mobile: options.mobile ?? this.mobile,
106
+ skipTlsVerification:
107
+ options.skipTlsVerification ?? this.skipTlsVerification,
108
+ parsePDF: options.parsePDF ?? this.parsePDF,
109
+ location: options.location ?? this.location,
110
+ removeBase64Images:
111
+ options.removeBase64Images ?? this.removeBase64Images,
112
+ blockAds: options.blockAds ?? this.blockAds,
113
+ storeInCache: options.storeInCache ?? this.storeInCache,
114
+ zeroDataRetention: options.zeroDataRetention ?? this.zeroDataRetention,
115
+ changeTrackingOptions:
116
+ options.changeTrackingOptions ?? this.changeTrackingOptions,
117
+ });
118
+ const response = await axios.post(this.apiUrl, payload, {
119
+ headers: {
120
+ 'Content-Type': 'application/json',
121
+ Authorization: `Bearer ${this.apiKey}`,
122
+ },
123
+ timeout: this.timeout,
124
+ });
125
+
126
+ return [url, response.data];
127
+ } catch (error) {
128
+ const errorMessage =
129
+ error instanceof Error ? error.message : String(error);
130
+ return [
131
+ url,
132
+ {
133
+ success: false,
134
+ error: `Firecrawl API request failed: ${errorMessage}`,
135
+ },
136
+ ];
137
+ }
138
+ }
139
+
140
+ /**
141
+ * Extract content from scrape response
142
+ * @param response Scrape response
143
+ * @returns Extracted content or empty string if not available
144
+ */
145
+ extractContent(
146
+ response: t.FirecrawlScrapeResponse
147
+ ): [string, undefined | t.References] {
148
+ if (!response.success || !response.data) {
149
+ return ['', undefined];
150
+ }
151
+
152
+ if (response.data.markdown != null && response.data.html != null) {
153
+ try {
154
+ const { markdown, ...rest } = processContent(
155
+ response.data.html,
156
+ response.data.markdown
157
+ );
158
+ return [markdown, rest];
159
+ } catch (error) {
160
+ this.logger.error('Error processing content:', error);
161
+ return [response.data.markdown, undefined];
162
+ }
163
+ } else if (response.data.markdown != null) {
164
+ return [response.data.markdown, undefined];
165
+ }
166
+
167
+ // Fall back to HTML content
168
+ if (response.data.html != null) {
169
+ return [response.data.html, undefined];
170
+ }
171
+
172
+ // Fall back to raw HTML content
173
+ if (response.data.rawHtml != null) {
174
+ return [response.data.rawHtml, undefined];
175
+ }
176
+
177
+ return ['', undefined];
178
+ }
179
+
180
+ /**
181
+ * Extract metadata from scrape response
182
+ * @param response Scrape response
183
+ * @returns Metadata object
184
+ */
185
+ extractMetadata(response: t.FirecrawlScrapeResponse): t.ScrapeMetadata {
186
+ if (!response.success || !response.data || !response.data.metadata) {
187
+ return {};
188
+ }
189
+
190
+ return response.data.metadata;
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Create a Firecrawl scraper instance
196
+ * @param config Scraper configuration
197
+ * @returns Firecrawl scraper instance
198
+ */
199
+ export const createFirecrawlScraper = (
200
+ config: t.FirecrawlScraperConfig = {}
201
+ ): FirecrawlScraper => {
202
+ return new FirecrawlScraper(config);
203
+ };
204
+
205
+ // Helper function to clean up payload for firecrawl
206
+ function omitUndefined<T extends object>(obj: T): Partial<T> {
207
+ return Object.fromEntries(
208
+ Object.entries(obj).filter(([, v]) => v !== undefined)
209
+ ) as Partial<T>;
210
+ }
@@ -0,0 +1,250 @@
1
+ import type * as t from './types';
2
+ import { getDomainName, fileExtRegex } from './utils';
3
+
4
+ function addHighlightSection(): string[] {
5
+ return ['\n## Highlights', ''];
6
+ }
7
+
8
+ // Helper function to format a source (organic or top story)
9
+ function formatSource(
10
+ source: t.ValidSource,
11
+ index: number,
12
+ turn: number,
13
+ sourceType: 'search' | 'news',
14
+ references: t.ResultReference[]
15
+ ): string {
16
+ /** Array of all lines to include in the output */
17
+ const outputLines: string[] = [];
18
+
19
+ // Add the title
20
+ outputLines.push(
21
+ `# ${sourceType.charAt(0).toUpperCase() + sourceType.slice(1)} ${index}: ${source.title != null && source.title ? `"${source.title}"` : '(no title)'}`
22
+ );
23
+ outputLines.push(`\nAnchor: \\ue202turn${turn}${sourceType}${index}`);
24
+ outputLines.push(`URL: ${source.link}`);
25
+
26
+ // Add optional fields
27
+ if ('snippet' in source && source.snippet != null) {
28
+ outputLines.push(`Summary: ${source.snippet}`);
29
+ }
30
+
31
+ if (source.date != null) {
32
+ outputLines.push(`Date: ${source.date}`);
33
+ }
34
+
35
+ if (source.attribution != null) {
36
+ outputLines.push(`Source: ${source.attribution}`);
37
+ }
38
+
39
+ // Add highlight section or empty line
40
+ if ((source.highlights?.length ?? 0) > 0) {
41
+ outputLines.push(...addHighlightSection());
42
+ } else {
43
+ outputLines.push('');
44
+ }
45
+
46
+ // Process highlights if they exist
47
+ (source.highlights ?? [])
48
+ .filter((h) => h.text.trim().length > 0)
49
+ .forEach((h, hIndex) => {
50
+ outputLines.push(
51
+ `### Highlight ${hIndex + 1} [Relevance: ${h.score.toFixed(2)}]`
52
+ );
53
+ outputLines.push('');
54
+ outputLines.push('```text');
55
+ outputLines.push(h.text.trim());
56
+ outputLines.push('```');
57
+ outputLines.push('');
58
+
59
+ if (h.references != null && h.references.length) {
60
+ let hasHeader = false;
61
+ const refLines: string[] = [];
62
+
63
+ for (let j = 0; j < h.references.length; j++) {
64
+ const ref = h.references[j];
65
+ if (ref.reference.originalUrl.includes('mailto:')) {
66
+ continue;
67
+ }
68
+ if (ref.type !== 'link') {
69
+ continue;
70
+ }
71
+ if (fileExtRegex.test(ref.reference.originalUrl)) {
72
+ continue;
73
+ }
74
+ references.push({
75
+ type: ref.type,
76
+ link: ref.reference.originalUrl,
77
+ attribution: getDomainName(ref.reference.originalUrl),
78
+ title: (
79
+ ((ref.reference.title ?? '') || ref.reference.text) ??
80
+ ''
81
+ ).split('\n')[0],
82
+ });
83
+
84
+ if (!hasHeader) {
85
+ refLines.push('Core References:');
86
+ hasHeader = true;
87
+ }
88
+
89
+ refLines.push(
90
+ `- ${ref.type}#${ref.originalIndex + 1}: ${ref.reference.originalUrl}`
91
+ );
92
+ refLines.push(
93
+ `\t- Anchor: \\ue202turn${turn}ref${references.length - 1}`
94
+ );
95
+ }
96
+
97
+ if (hasHeader) {
98
+ outputLines.push(...refLines);
99
+ outputLines.push('');
100
+ }
101
+ }
102
+
103
+ if (hIndex < (source.highlights?.length ?? 0) - 1) {
104
+ outputLines.push('---');
105
+ outputLines.push('');
106
+ }
107
+ });
108
+
109
+ outputLines.push('');
110
+ return outputLines.join('\n');
111
+ }
112
+
113
+ export function formatResultsForLLM(
114
+ turn: number,
115
+ results: t.SearchResultData
116
+ ): { output: string; references: t.ResultReference[] } {
117
+ /** Array to collect all output lines */
118
+ const outputLines: string[] = [];
119
+
120
+ const addSection = (title: string): void => {
121
+ outputLines.push('');
122
+ outputLines.push(`=== ${title} ===`);
123
+ outputLines.push('');
124
+ };
125
+
126
+ const references: t.ResultReference[] = [];
127
+
128
+ // Organic (web) results
129
+ if (results.organic?.length != null && results.organic.length > 0) {
130
+ addSection(`Web Results, Turn ${turn}`);
131
+ for (let i = 0; i < results.organic.length; i++) {
132
+ const r = results.organic[i];
133
+ outputLines.push(formatSource(r, i, turn, 'search', references));
134
+ delete results.organic[i].highlights;
135
+ }
136
+ }
137
+
138
+ // Top stories (news)
139
+ const topStories = results.topStories ?? [];
140
+ if (topStories.length) {
141
+ addSection('News Results');
142
+ for (let i = 0; i < topStories.length; i++) {
143
+ const r = topStories[i];
144
+ outputLines.push(formatSource(r, i, turn, 'news', references));
145
+ if (results.topStories?.[i]?.highlights) {
146
+ delete results.topStories[i].highlights;
147
+ }
148
+ }
149
+ }
150
+
151
+ // // Images
152
+ // const images = results.images ?? [];
153
+ // if (images.length) {
154
+ // addSection('Image Results');
155
+ // const imageLines = images.map((img, i) => [
156
+ // `Anchor: \ue202turn0image${i}`,
157
+ // `Title: ${img.title ?? '(no title)'}`,
158
+ // `Image URL: ${img.imageUrl}`,
159
+ // ''
160
+ // ].join('\n'));
161
+ // outputLines.push(imageLines.join('\n'));
162
+ // }
163
+
164
+ // Knowledge Graph
165
+ if (results.knowledgeGraph != null) {
166
+ addSection('Knowledge Graph');
167
+ const kgLines = [
168
+ `**Title:** ${results.knowledgeGraph.title ?? '(no title)'}`,
169
+ results.knowledgeGraph.type != null
170
+ ? `**Type:** ${results.knowledgeGraph.type}`
171
+ : '',
172
+ results.knowledgeGraph.description != null
173
+ ? `**Description:** ${results.knowledgeGraph.description}`
174
+ : '',
175
+ results.knowledgeGraph.descriptionSource != null
176
+ ? `**Description Source:** ${results.knowledgeGraph.descriptionSource}`
177
+ : '',
178
+ results.knowledgeGraph.descriptionLink != null
179
+ ? `**Description Link:** ${results.knowledgeGraph.descriptionLink}`
180
+ : '',
181
+ results.knowledgeGraph.imageUrl != null
182
+ ? `**Image URL:** ${results.knowledgeGraph.imageUrl}`
183
+ : '',
184
+ results.knowledgeGraph.website != null
185
+ ? `**Website:** ${results.knowledgeGraph.website}`
186
+ : '',
187
+ results.knowledgeGraph.attributes != null
188
+ ? `**Attributes:**\n\`\`\`json\n${JSON.stringify(
189
+ results.knowledgeGraph.attributes,
190
+ null,
191
+ 2
192
+ )}\n\`\`\``
193
+ : '',
194
+ '',
195
+ ].filter(Boolean);
196
+
197
+ outputLines.push(kgLines.join('\n\n'));
198
+ }
199
+
200
+ // Answer Box
201
+ if (results.answerBox != null) {
202
+ addSection('Answer Box');
203
+ const abLines = [
204
+ results.answerBox.title != null
205
+ ? `**Title:** ${results.answerBox.title}`
206
+ : '',
207
+ results.answerBox.snippet != null
208
+ ? `**Snippet:** ${results.answerBox.snippet}`
209
+ : '',
210
+ results.answerBox.snippetHighlighted != null
211
+ ? `**Snippet Highlighted:** ${results.answerBox.snippetHighlighted
212
+ .map((s) => `\`${s}\``)
213
+ .join(' ')}`
214
+ : '',
215
+ results.answerBox.link != null
216
+ ? `**Link:** ${results.answerBox.link}`
217
+ : '',
218
+ '',
219
+ ].filter(Boolean);
220
+
221
+ outputLines.push(abLines.join('\n\n'));
222
+ }
223
+
224
+ // People also ask
225
+ const peopleAlsoAsk = results.peopleAlsoAsk ?? [];
226
+ if (peopleAlsoAsk.length) {
227
+ addSection('People Also Ask');
228
+
229
+ const paaLines: string[] = [];
230
+ peopleAlsoAsk.forEach((p, i) => {
231
+ const questionLines = [
232
+ `### Question ${i + 1}:`,
233
+ `"${p.question}"`,
234
+ `${p.snippet != null && p.snippet ? `Snippet: ${p.snippet}` : ''}`,
235
+ `${p.title != null && p.title ? `Title: ${p.title}` : ''}`,
236
+ `${p.link != null && p.link ? `Link: ${p.link}` : ''}`,
237
+ '',
238
+ ].filter(Boolean);
239
+
240
+ paaLines.push(questionLines.join('\n\n'));
241
+ });
242
+
243
+ outputLines.push(paaLines.join(''));
244
+ }
245
+
246
+ return {
247
+ output: outputLines.join('\n').trim(),
248
+ references,
249
+ };
250
+ }