beeai-framework 0.1.19 → 0.1.21

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 (375) hide show
  1. package/dist/adapters/a2a/agents/agent.cjs +4 -4
  2. package/dist/adapters/a2a/agents/agent.cjs.map +1 -1
  3. package/dist/adapters/a2a/agents/agent.d.cts +2 -2
  4. package/dist/adapters/a2a/agents/agent.d.ts +2 -2
  5. package/dist/adapters/a2a/agents/agent.js +4 -4
  6. package/dist/adapters/a2a/agents/agent.js.map +1 -1
  7. package/dist/adapters/a2a/agents/events.d.cts +1 -1
  8. package/dist/adapters/a2a/agents/events.d.ts +1 -1
  9. package/dist/adapters/a2a/agents/types.d.cts +2 -2
  10. package/dist/adapters/a2a/agents/types.d.ts +2 -2
  11. package/dist/adapters/a2a/agents/utils.cjs +2 -2
  12. package/dist/adapters/a2a/agents/utils.cjs.map +1 -1
  13. package/dist/adapters/a2a/agents/utils.js +2 -2
  14. package/dist/adapters/a2a/agents/utils.js.map +1 -1
  15. package/dist/adapters/a2a/serve/agent_executor.cjs +1 -3
  16. package/dist/adapters/a2a/serve/agent_executor.cjs.map +1 -1
  17. package/dist/adapters/a2a/serve/agent_executor.d.cts +4 -3
  18. package/dist/adapters/a2a/serve/agent_executor.d.ts +4 -3
  19. package/dist/adapters/a2a/serve/agent_executor.js +1 -3
  20. package/dist/adapters/a2a/serve/agent_executor.js.map +1 -1
  21. package/dist/adapters/a2a/serve/server.cjs +15 -0
  22. package/dist/adapters/a2a/serve/server.cjs.map +1 -1
  23. package/dist/adapters/a2a/serve/server.d.cts +4 -2
  24. package/dist/adapters/a2a/serve/server.d.ts +4 -2
  25. package/dist/adapters/a2a/serve/server.js +15 -0
  26. package/dist/adapters/a2a/serve/server.js.map +1 -1
  27. package/dist/adapters/acp/agents/agent.d.cts +2 -2
  28. package/dist/adapters/acp/agents/agent.d.ts +2 -2
  29. package/dist/adapters/acp/agents/events.d.cts +1 -1
  30. package/dist/adapters/acp/agents/events.d.ts +1 -1
  31. package/dist/adapters/{beeai_platform → agentstack}/agents/agent.cjs +4 -4
  32. package/dist/adapters/agentstack/agents/agent.cjs.map +1 -0
  33. package/dist/adapters/{beeai_platform → agentstack}/agents/agent.d.cts +12 -12
  34. package/dist/adapters/{beeai_platform → agentstack}/agents/agent.d.ts +12 -12
  35. package/dist/adapters/{beeai_platform → agentstack}/agents/agent.js +4 -4
  36. package/dist/adapters/agentstack/agents/agent.js.map +1 -0
  37. package/dist/adapters/agentstack/agents/events.d.cts +23 -0
  38. package/dist/adapters/agentstack/agents/events.d.ts +23 -0
  39. package/dist/adapters/{beeai_platform → agentstack}/agents/types.d.cts +4 -4
  40. package/dist/adapters/{beeai_platform → agentstack}/agents/types.d.ts +4 -4
  41. package/dist/adapters/amazon-bedrock/backend/chat.cjs +3 -2
  42. package/dist/adapters/amazon-bedrock/backend/chat.cjs.map +1 -1
  43. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +5 -6
  44. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +5 -6
  45. package/dist/adapters/amazon-bedrock/backend/chat.js +3 -2
  46. package/dist/adapters/amazon-bedrock/backend/chat.js.map +1 -1
  47. package/dist/adapters/amazon-bedrock/backend/embedding.cjs +2 -2
  48. package/dist/adapters/amazon-bedrock/backend/embedding.cjs.map +1 -1
  49. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +4 -4
  50. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +4 -4
  51. package/dist/adapters/amazon-bedrock/backend/embedding.js +2 -2
  52. package/dist/adapters/amazon-bedrock/backend/embedding.js.map +1 -1
  53. package/dist/adapters/anthropic/backend/chat.cjs +3 -2
  54. package/dist/adapters/anthropic/backend/chat.cjs.map +1 -1
  55. package/dist/adapters/anthropic/backend/chat.d.cts +5 -6
  56. package/dist/adapters/anthropic/backend/chat.d.ts +5 -6
  57. package/dist/adapters/anthropic/backend/chat.js +3 -2
  58. package/dist/adapters/anthropic/backend/chat.js.map +1 -1
  59. package/dist/adapters/anthropic/backend/embedding.d.cts +2 -2
  60. package/dist/adapters/anthropic/backend/embedding.d.ts +2 -2
  61. package/dist/adapters/azure-openai/backend/chat.cjs +3 -2
  62. package/dist/adapters/azure-openai/backend/chat.cjs.map +1 -1
  63. package/dist/adapters/azure-openai/backend/chat.d.cts +5 -6
  64. package/dist/adapters/azure-openai/backend/chat.d.ts +5 -6
  65. package/dist/adapters/azure-openai/backend/chat.js +3 -2
  66. package/dist/adapters/azure-openai/backend/chat.js.map +1 -1
  67. package/dist/adapters/azure-openai/backend/embedding.cjs +2 -2
  68. package/dist/adapters/azure-openai/backend/embedding.cjs.map +1 -1
  69. package/dist/adapters/azure-openai/backend/embedding.d.cts +3 -3
  70. package/dist/adapters/azure-openai/backend/embedding.d.ts +3 -3
  71. package/dist/adapters/azure-openai/backend/embedding.js +2 -2
  72. package/dist/adapters/azure-openai/backend/embedding.js.map +1 -1
  73. package/dist/adapters/dummy/backend/chat.d.cts +2 -2
  74. package/dist/adapters/dummy/backend/chat.d.ts +2 -2
  75. package/dist/adapters/dummy/backend/embedding.d.cts +2 -2
  76. package/dist/adapters/dummy/backend/embedding.d.ts +2 -2
  77. package/dist/adapters/google-vertex/backend/chat.cjs +3 -2
  78. package/dist/adapters/google-vertex/backend/chat.cjs.map +1 -1
  79. package/dist/adapters/google-vertex/backend/chat.d.cts +5 -6
  80. package/dist/adapters/google-vertex/backend/chat.d.ts +5 -6
  81. package/dist/adapters/google-vertex/backend/chat.js +3 -2
  82. package/dist/adapters/google-vertex/backend/chat.js.map +1 -1
  83. package/dist/adapters/google-vertex/backend/embedding.d.cts +2 -2
  84. package/dist/adapters/google-vertex/backend/embedding.d.ts +2 -2
  85. package/dist/adapters/groq/backend/chat.cjs +3 -2
  86. package/dist/adapters/groq/backend/chat.cjs.map +1 -1
  87. package/dist/adapters/groq/backend/chat.d.cts +5 -6
  88. package/dist/adapters/groq/backend/chat.d.ts +5 -6
  89. package/dist/adapters/groq/backend/chat.js +3 -2
  90. package/dist/adapters/groq/backend/chat.js.map +1 -1
  91. package/dist/adapters/groq/backend/embedding.d.cts +2 -2
  92. package/dist/adapters/groq/backend/embedding.d.ts +2 -2
  93. package/dist/adapters/langchain/backend/chat.cjs +6 -5
  94. package/dist/adapters/langchain/backend/chat.cjs.map +1 -1
  95. package/dist/adapters/langchain/backend/chat.d.cts +2 -2
  96. package/dist/adapters/langchain/backend/chat.d.ts +2 -2
  97. package/dist/adapters/langchain/backend/chat.js +6 -5
  98. package/dist/adapters/langchain/backend/chat.js.map +1 -1
  99. package/dist/adapters/langchain/backend/embedding.d.cts +3 -3
  100. package/dist/adapters/langchain/backend/embedding.d.ts +3 -3
  101. package/dist/adapters/langchain/tools.d.cts +1 -1
  102. package/dist/adapters/langchain/tools.d.ts +1 -1
  103. package/dist/adapters/mcp/serve/server.cjs +12 -4
  104. package/dist/adapters/mcp/serve/server.cjs.map +1 -1
  105. package/dist/adapters/mcp/serve/server.d.cts +1 -1
  106. package/dist/adapters/mcp/serve/server.d.ts +1 -1
  107. package/dist/adapters/mcp/serve/server.js +12 -4
  108. package/dist/adapters/mcp/serve/server.js.map +1 -1
  109. package/dist/adapters/ollama/backend/chat.cjs +1 -4
  110. package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
  111. package/dist/adapters/ollama/backend/chat.d.cts +4 -4
  112. package/dist/adapters/ollama/backend/chat.d.ts +4 -4
  113. package/dist/adapters/ollama/backend/chat.js +1 -4
  114. package/dist/adapters/ollama/backend/chat.js.map +1 -1
  115. package/dist/adapters/ollama/backend/client.cjs +2 -2
  116. package/dist/adapters/ollama/backend/client.cjs.map +1 -1
  117. package/dist/adapters/ollama/backend/client.d.cts +1 -1
  118. package/dist/adapters/ollama/backend/client.d.ts +1 -1
  119. package/dist/adapters/ollama/backend/client.js +1 -1
  120. package/dist/adapters/ollama/backend/client.js.map +1 -1
  121. package/dist/adapters/ollama/backend/embedding.cjs.map +1 -1
  122. package/dist/adapters/ollama/backend/embedding.d.cts +3 -3
  123. package/dist/adapters/ollama/backend/embedding.d.ts +3 -3
  124. package/dist/adapters/ollama/backend/embedding.js.map +1 -1
  125. package/dist/adapters/openai/backend/chat.cjs +3 -2
  126. package/dist/adapters/openai/backend/chat.cjs.map +1 -1
  127. package/dist/adapters/openai/backend/chat.d.cts +5 -6
  128. package/dist/adapters/openai/backend/chat.d.ts +5 -6
  129. package/dist/adapters/openai/backend/chat.js +3 -2
  130. package/dist/adapters/openai/backend/chat.js.map +1 -1
  131. package/dist/adapters/openai/backend/client.cjs +2 -11
  132. package/dist/adapters/openai/backend/client.cjs.map +1 -1
  133. package/dist/adapters/openai/backend/client.js +3 -12
  134. package/dist/adapters/openai/backend/client.js.map +1 -1
  135. package/dist/adapters/openai/backend/embedding.cjs +2 -2
  136. package/dist/adapters/openai/backend/embedding.cjs.map +1 -1
  137. package/dist/adapters/openai/backend/embedding.d.cts +4 -4
  138. package/dist/adapters/openai/backend/embedding.d.ts +4 -4
  139. package/dist/adapters/openai/backend/embedding.js +2 -2
  140. package/dist/adapters/openai/backend/embedding.js.map +1 -1
  141. package/dist/adapters/vercel/backend/chat.cjs +26 -21
  142. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  143. package/dist/adapters/vercel/backend/chat.d.cts +6 -4
  144. package/dist/adapters/vercel/backend/chat.d.ts +6 -4
  145. package/dist/adapters/vercel/backend/chat.js +27 -22
  146. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  147. package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
  148. package/dist/adapters/vercel/backend/embedding.d.cts +3 -3
  149. package/dist/adapters/vercel/backend/embedding.d.ts +3 -3
  150. package/dist/adapters/vercel/backend/embedding.js.map +1 -1
  151. package/dist/adapters/vercel/backend/utils.cjs +11 -0
  152. package/dist/adapters/vercel/backend/utils.cjs.map +1 -1
  153. package/dist/adapters/vercel/backend/utils.d.cts +19 -2
  154. package/dist/adapters/vercel/backend/utils.d.ts +19 -2
  155. package/dist/adapters/vercel/backend/utils.js +11 -1
  156. package/dist/adapters/vercel/backend/utils.js.map +1 -1
  157. package/dist/adapters/watsonx/backend/chat.cjs +10 -4
  158. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  159. package/dist/adapters/watsonx/backend/chat.d.cts +2 -2
  160. package/dist/adapters/watsonx/backend/chat.d.ts +2 -2
  161. package/dist/adapters/watsonx/backend/chat.js +10 -4
  162. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  163. package/dist/adapters/watsonx/backend/embedding.d.cts +2 -2
  164. package/dist/adapters/watsonx/backend/embedding.d.ts +2 -2
  165. package/dist/adapters/xai/backend/chat.cjs +3 -2
  166. package/dist/adapters/xai/backend/chat.cjs.map +1 -1
  167. package/dist/adapters/xai/backend/chat.d.cts +5 -6
  168. package/dist/adapters/xai/backend/chat.d.ts +5 -6
  169. package/dist/adapters/xai/backend/chat.js +3 -2
  170. package/dist/adapters/xai/backend/chat.js.map +1 -1
  171. package/dist/{agent-7NzfPC6d.d.ts → agent-CHebzsQB.d.ts} +4 -4
  172. package/dist/{agent-B6pOfx0K.d.cts → agent-DvvVGvLr.d.cts} +4 -4
  173. package/dist/agents/base.d.cts +2 -2
  174. package/dist/agents/base.d.ts +2 -2
  175. package/dist/agents/experimental/replan/agent.d.cts +3 -3
  176. package/dist/agents/experimental/replan/agent.d.ts +3 -3
  177. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  178. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  179. package/dist/agents/experimental/streamlit/agent.d.cts +3 -3
  180. package/dist/agents/experimental/streamlit/agent.d.ts +3 -3
  181. package/dist/agents/react/agent.d.cts +5 -4
  182. package/dist/agents/react/agent.d.ts +5 -4
  183. package/dist/agents/react/prompts.d.cts +1 -1
  184. package/dist/agents/react/prompts.d.ts +1 -1
  185. package/dist/agents/react/runners/base.cjs.map +1 -1
  186. package/dist/agents/react/runners/base.d.cts +5 -4
  187. package/dist/agents/react/runners/base.d.ts +5 -4
  188. package/dist/agents/react/runners/base.js.map +1 -1
  189. package/dist/agents/react/runners/deep-think/prompts.d.cts +1 -1
  190. package/dist/agents/react/runners/deep-think/prompts.d.ts +1 -1
  191. package/dist/agents/react/runners/deep-think/runner.d.cts +6 -5
  192. package/dist/agents/react/runners/deep-think/runner.d.ts +6 -5
  193. package/dist/agents/react/runners/default/runner.cjs.map +1 -1
  194. package/dist/agents/react/runners/default/runner.d.cts +6 -5
  195. package/dist/agents/react/runners/default/runner.d.ts +6 -5
  196. package/dist/agents/react/runners/default/runner.js.map +1 -1
  197. package/dist/agents/react/runners/granite/prompts.d.cts +1 -1
  198. package/dist/agents/react/runners/granite/prompts.d.ts +1 -1
  199. package/dist/agents/react/runners/granite/runner.cjs +4 -2
  200. package/dist/agents/react/runners/granite/runner.cjs.map +1 -1
  201. package/dist/agents/react/runners/granite/runner.d.cts +6 -5
  202. package/dist/agents/react/runners/granite/runner.d.ts +6 -5
  203. package/dist/agents/react/runners/granite/runner.js +4 -2
  204. package/dist/agents/react/runners/granite/runner.js.map +1 -1
  205. package/dist/agents/react/types.d.cts +3 -2
  206. package/dist/agents/react/types.d.ts +3 -2
  207. package/dist/agents/toolCalling/agent.cjs +9 -5
  208. package/dist/agents/toolCalling/agent.cjs.map +1 -1
  209. package/dist/agents/toolCalling/agent.d.cts +3 -3
  210. package/dist/agents/toolCalling/agent.d.ts +3 -3
  211. package/dist/agents/toolCalling/agent.js +9 -5
  212. package/dist/agents/toolCalling/agent.js.map +1 -1
  213. package/dist/agents/toolCalling/types.d.cts +1 -1
  214. package/dist/agents/toolCalling/types.d.ts +1 -1
  215. package/dist/agents/types.d.cts +2 -2
  216. package/dist/agents/types.d.ts +2 -2
  217. package/dist/backend/backend.d.cts +2 -2
  218. package/dist/backend/backend.d.ts +2 -2
  219. package/dist/backend/chat.cjs +1 -1
  220. package/dist/backend/chat.cjs.map +1 -1
  221. package/dist/backend/chat.d.cts +2 -2
  222. package/dist/backend/chat.d.ts +2 -2
  223. package/dist/backend/chat.js +1 -1
  224. package/dist/backend/chat.js.map +1 -1
  225. package/dist/backend/core.d.cts +2 -2
  226. package/dist/backend/core.d.ts +2 -2
  227. package/dist/backend/embedding.d.cts +2 -2
  228. package/dist/backend/embedding.d.ts +2 -2
  229. package/dist/backend/message.cjs +59 -3
  230. package/dist/backend/message.cjs.map +1 -1
  231. package/dist/backend/message.d.cts +3 -0
  232. package/dist/backend/message.d.ts +3 -0
  233. package/dist/backend/message.js +59 -3
  234. package/dist/backend/message.js.map +1 -1
  235. package/dist/backend/utils.d.cts +2 -2
  236. package/dist/backend/utils.d.ts +2 -2
  237. package/dist/{base-Bguef5Dg.d.ts → base-BQgDlcGa.d.ts} +1 -1
  238. package/dist/{base-C1hO5EJe.d.cts → base-CwcxwybB.d.cts} +1 -1
  239. package/dist/cache/fileCache.cjs.map +1 -1
  240. package/dist/cache/fileCache.js.map +1 -1
  241. package/dist/{chat-BBoOSvzm.d.ts → chat-C0s-o6ll.d.ts} +4 -2
  242. package/dist/{chat-BZ55YQab.d.cts → chat-CRb3vUVg.d.cts} +4 -2
  243. package/dist/context.d.cts +1 -1
  244. package/dist/context.d.ts +1 -1
  245. package/dist/emitter/emitter.d.cts +1 -1
  246. package/dist/emitter/emitter.d.ts +1 -1
  247. package/dist/emitter/types.d.cts +1 -1
  248. package/dist/emitter/types.d.ts +1 -1
  249. package/dist/{emitter-BqpLJQVb.d.ts → emitter-CZFbzlUi.d.ts} +3 -3
  250. package/dist/{emitter-pJzHC_AM.d.cts → emitter-DpqUYjXH.d.cts} +3 -3
  251. package/dist/index.d.cts +3 -3
  252. package/dist/index.d.ts +3 -3
  253. package/dist/internals/fetcher.d.cts +1 -1
  254. package/dist/internals/fetcher.d.ts +1 -1
  255. package/dist/internals/helpers/array.cjs +35 -0
  256. package/dist/internals/helpers/array.cjs.map +1 -1
  257. package/dist/internals/helpers/array.d.cts +6 -1
  258. package/dist/internals/helpers/array.d.ts +6 -1
  259. package/dist/internals/helpers/array.js +35 -1
  260. package/dist/internals/helpers/array.js.map +1 -1
  261. package/dist/internals/helpers/object.cjs +30 -5
  262. package/dist/internals/helpers/object.cjs.map +1 -1
  263. package/dist/internals/helpers/object.d.cts +3 -2
  264. package/dist/internals/helpers/object.d.ts +3 -2
  265. package/dist/internals/helpers/object.js +29 -5
  266. package/dist/internals/helpers/object.js.map +1 -1
  267. package/dist/logger/logger.cjs +8 -4
  268. package/dist/logger/logger.cjs.map +1 -1
  269. package/dist/logger/logger.d.cts +21 -15
  270. package/dist/logger/logger.d.ts +21 -15
  271. package/dist/logger/logger.js +6 -3
  272. package/dist/logger/logger.js.map +1 -1
  273. package/dist/logger/pretty.cjs +2 -2
  274. package/dist/logger/pretty.cjs.map +1 -1
  275. package/dist/logger/pretty.js +2 -2
  276. package/dist/logger/pretty.js.map +1 -1
  277. package/dist/memory/summarizeMemory.d.cts +2 -2
  278. package/dist/memory/summarizeMemory.d.ts +2 -2
  279. package/dist/parsers/linePrefix.cjs.map +1 -1
  280. package/dist/parsers/linePrefix.d.cts +4 -8
  281. package/dist/parsers/linePrefix.d.ts +4 -8
  282. package/dist/parsers/linePrefix.js.map +1 -1
  283. package/dist/serializer/utils.cjs.map +1 -1
  284. package/dist/serializer/utils.js.map +1 -1
  285. package/dist/tools/arxiv.cjs.map +1 -1
  286. package/dist/tools/arxiv.d.cts +1 -1
  287. package/dist/tools/arxiv.d.ts +1 -1
  288. package/dist/tools/arxiv.js.map +1 -1
  289. package/dist/tools/base.cjs.map +1 -1
  290. package/dist/tools/base.d.cts +1 -1
  291. package/dist/tools/base.d.ts +1 -1
  292. package/dist/tools/base.js.map +1 -1
  293. package/dist/tools/calculator.d.cts +1 -1
  294. package/dist/tools/calculator.d.ts +1 -1
  295. package/dist/tools/custom.d.cts +2 -2
  296. package/dist/tools/custom.d.ts +2 -2
  297. package/dist/tools/database/elasticsearch.cjs.map +1 -1
  298. package/dist/tools/database/elasticsearch.d.cts +1 -1
  299. package/dist/tools/database/elasticsearch.d.ts +1 -1
  300. package/dist/tools/database/elasticsearch.js.map +1 -1
  301. package/dist/tools/database/milvus.cjs +3 -3
  302. package/dist/tools/database/milvus.cjs.map +1 -1
  303. package/dist/tools/database/milvus.d.cts +1 -1
  304. package/dist/tools/database/milvus.d.ts +1 -1
  305. package/dist/tools/database/milvus.js +3 -3
  306. package/dist/tools/database/milvus.js.map +1 -1
  307. package/dist/tools/database/qdrant.cjs +2 -2
  308. package/dist/tools/database/qdrant.cjs.map +1 -1
  309. package/dist/tools/database/qdrant.d.cts +1 -1
  310. package/dist/tools/database/qdrant.d.ts +1 -1
  311. package/dist/tools/database/qdrant.js +2 -2
  312. package/dist/tools/database/qdrant.js.map +1 -1
  313. package/dist/tools/database/sql.cjs.map +1 -1
  314. package/dist/tools/database/sql.d.cts +1 -1
  315. package/dist/tools/database/sql.d.ts +1 -1
  316. package/dist/tools/database/sql.js.map +1 -1
  317. package/dist/tools/llm.d.cts +2 -2
  318. package/dist/tools/llm.d.ts +2 -2
  319. package/dist/tools/mcp.d.cts +1 -1
  320. package/dist/tools/mcp.d.ts +1 -1
  321. package/dist/tools/openapi.d.cts +1 -1
  322. package/dist/tools/openapi.d.ts +1 -1
  323. package/dist/tools/python/output.d.cts +1 -1
  324. package/dist/tools/python/output.d.ts +1 -1
  325. package/dist/tools/python/python.d.cts +2 -2
  326. package/dist/tools/python/python.d.ts +2 -2
  327. package/dist/tools/search/base.cjs.map +1 -1
  328. package/dist/tools/search/base.d.cts +1 -1
  329. package/dist/tools/search/base.d.ts +1 -1
  330. package/dist/tools/search/base.js.map +1 -1
  331. package/dist/tools/search/duckDuckGoSearch.cjs.map +1 -1
  332. package/dist/tools/search/duckDuckGoSearch.d.cts +1 -1
  333. package/dist/tools/search/duckDuckGoSearch.d.ts +1 -1
  334. package/dist/tools/search/duckDuckGoSearch.js.map +1 -1
  335. package/dist/tools/search/googleSearch.cjs.map +1 -1
  336. package/dist/tools/search/googleSearch.d.cts +1 -1
  337. package/dist/tools/search/googleSearch.d.ts +1 -1
  338. package/dist/tools/search/googleSearch.js.map +1 -1
  339. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  340. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  341. package/dist/tools/search/wikipedia.cjs +25 -0
  342. package/dist/tools/search/wikipedia.cjs.map +1 -1
  343. package/dist/tools/search/wikipedia.d.cts +2 -3
  344. package/dist/tools/search/wikipedia.d.ts +2 -3
  345. package/dist/tools/search/wikipedia.js +23 -0
  346. package/dist/tools/search/wikipedia.js.map +1 -1
  347. package/dist/tools/similarity.d.cts +1 -1
  348. package/dist/tools/similarity.d.ts +1 -1
  349. package/dist/tools/weather/openMeteo.cjs.map +1 -1
  350. package/dist/tools/weather/openMeteo.d.cts +1 -1
  351. package/dist/tools/weather/openMeteo.d.ts +1 -1
  352. package/dist/tools/weather/openMeteo.js.map +1 -1
  353. package/dist/tools/web/webCrawler.cjs.map +1 -1
  354. package/dist/tools/web/webCrawler.d.cts +1 -1
  355. package/dist/tools/web/webCrawler.d.ts +1 -1
  356. package/dist/tools/web/webCrawler.js.map +1 -1
  357. package/dist/version.cjs +1 -1
  358. package/dist/version.js +1 -1
  359. package/dist/workflows/agent.d.cts +3 -3
  360. package/dist/workflows/agent.d.ts +3 -3
  361. package/dist/workflows/workflow.d.cts +1 -1
  362. package/dist/workflows/workflow.d.ts +1 -1
  363. package/package.json +68 -67
  364. package/dist/adapters/beeai_platform/agents/agent.cjs.map +0 -1
  365. package/dist/adapters/beeai_platform/agents/agent.js.map +0 -1
  366. package/dist/adapters/beeai_platform/agents/events.d.cts +0 -23
  367. package/dist/adapters/beeai_platform/agents/events.d.ts +0 -23
  368. /package/dist/adapters/{beeai_platform → agentstack}/agents/events.cjs +0 -0
  369. /package/dist/adapters/{beeai_platform → agentstack}/agents/events.cjs.map +0 -0
  370. /package/dist/adapters/{beeai_platform → agentstack}/agents/events.js +0 -0
  371. /package/dist/adapters/{beeai_platform → agentstack}/agents/events.js.map +0 -0
  372. /package/dist/adapters/{beeai_platform → agentstack}/agents/types.cjs +0 -0
  373. /package/dist/adapters/{beeai_platform → agentstack}/agents/types.cjs.map +0 -0
  374. /package/dist/adapters/{beeai_platform → agentstack}/agents/types.js +0 -0
  375. /package/dist/adapters/{beeai_platform → agentstack}/agents/types.js.map +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/search/wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","max","config","_mappers","categories","page","content","html","markdown","runOptions","then","result","url","URL","fullurl","base","protocol","hostname","port","filter","Boolean","join","replace","service","Turndown","use","turndownPlugin","gfm","remove","node","extraction","fields","turndown","images","intro","infobox","links","coordinates","langLinks","references","related","summary","tables","_defaultRunOptions","unwrapTags","Set","unwrapTagsSelector","Array","from","values","ignoredTags","ignoredClasses","ignoredRoles","ignoredSelector","map","cls","role","transform","output","tagName","toLowerCase","has","className","trim","split","table","querySelectorAll","colspan","parseInt","getAttribute","insertAdjacentHTML","removeAttribute","ignoredTargets","childNode","unwrapTargets","reverse","push","outerHTML","innerHTML","filters","minPageNameSimilarity","excludeOthersOnExactMatch","search","limit","suggestion","maxDescriptionLength","_createRunOptions","overrides","baseKeys","R","pipe","mergeDeep","pick","options","_run","input","_options","searchRawResults","bestCandidates","extractBestCandidates","Promise","all","pageId","redirect","preload","keys","key","asyncProperties","title","resolve","mapValues","value","catch","undefined","candidates","normalize","text","stringComparison","jaccardIndex","sortMatch","candidate","index","pageid","score","rating","sort","a","b","at","enumerable"],"mappings":"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","file":"wikipedia.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Page, pageFunctions, searchOptions } from \"wikipedia\";\nimport wiki from \"wikipedia\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport * as R from \"remeda\";\nimport { keys, mapValues } from \"remeda\";\nimport { ArrayKeys, Common } from \"@/internals/types.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { asyncProperties } from \"@/internals/helpers/promise.js\";\nimport { z } from \"zod\";\nimport { Tool, ToolEmitter, ToolInput } from \"@/tools/base.js\";\nimport Turndown from \"turndown\";\n// @ts-expect-error missing types\nimport turndownPlugin from \"joplin-turndown-plugin-gfm\";\nimport stringComparison from \"string-comparison\";\nimport { pageResult } from \"wikipedia/dist/resultTypes.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nwiki.default.setLang(\"en\");\n\nexport interface SearchOptions extends searchOptions {}\n\nexport interface FilterOptions {\n excludeOthersOnExactMatch?: boolean;\n minPageNameSimilarity?: number;\n}\n\nexport type PageFunctions = Record<\n pageFunctions,\n {\n transform?: <T>(output: T) => T;\n }\n> & {\n markdown: {\n transform?: (output: string) => string;\n filter?: (node: HTMLElement) => boolean;\n };\n};\n\nexport interface ExtractionOptions {\n fields?: Partial<PageFunctions>;\n}\n\nexport interface OutputOptions {\n maxSerializedLength?: number;\n maxDescriptionLength?: number;\n}\n\nexport interface WikipediaToolOptions extends SearchToolOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\nexport interface WikipediaToolRunOptions extends SearchToolRunOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\ntype PageWithMarkdown = Page & { markdown: () => Promise<string> };\n\ntype ResultFields = { [K in keyof PageFunctions]: Awaited<ReturnType<PageWithMarkdown[K]>> };\n\nexport interface WikipediaToolResult extends SearchToolResult {\n fields: Partial<ResultFields>;\n}\n\nexport class WikipediaToolOutput extends SearchToolOutput<WikipediaToolResult> {\n constructor(\n public readonly results: WikipediaToolResult[],\n protected readonly maxSerializedLength: number,\n ) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n getTextContent(): string {\n if (this.isEmpty()) {\n return `No results were found. Try to reformat your query.`;\n }\n\n const target = this.results.length === 1 ? this.results[0] : this.results;\n const response = JSON.stringify(target);\n\n return this.maxSerializedLength < Infinity\n ? response.substring(0, this.maxSerializedLength)\n : response;\n }\n\n createSnapshot() {\n return {\n results: this.results,\n maxSerializedLength: this.maxSerializedLength,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\ninterface SearchResponse {\n results: Pick<pageResult, \"title\" | \"pageid\">[];\n suggestion: string;\n}\n\nexport class WikipediaTool extends Tool<\n WikipediaToolOutput,\n WikipediaToolOptions,\n WikipediaToolRunOptions\n> {\n name = \"Wikipedia\";\n description =\n \"Search factual and historical information, including biography, history, politics, geography, society, culture, science, technology, people, animal species, mathematics, and other subjects.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WikipediaToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"search\", \"wikipedia\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z\n .string({ description: `Name of the wikipedia page, for example 'New York'` })\n .min(1)\n .max(128),\n });\n }\n\n public constructor(public readonly config: WikipediaToolOptions = {}) {\n super(config);\n }\n\n static {\n this.register();\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _mappers(): Record<\n keyof PageFunctions,\n (page: Page, runOptions: WikipediaToolRunOptions) => Promise<any>\n > {\n return {\n categories: (page) => page.categories(),\n content: (page) => page.content(),\n html: (page) => page.html(),\n markdown: async (page, runOptions) => {\n const html = await page.html().then((result) => {\n const url = new URL(page.fullurl);\n const base = `${url.protocol}//${[url.hostname, url.port].filter(Boolean).join(\":\")}`;\n return (\n result\n // Missing a protocol\n .replace(/(<img .*src=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n .replace(/(<a .*href=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n\n // Missing a hostname\n .replace(/(<img .*src=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n .replace(/(<a .*href=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n );\n });\n\n const service = new Turndown();\n service.use(turndownPlugin.gfm);\n return service\n .remove((node) => runOptions.extraction?.fields?.markdown?.filter?.(node) === false)\n .turndown(html);\n },\n images: (page) => page.images(),\n intro: (page) => page.intro(),\n infobox: (page) => page.infobox(),\n links: (page) => page.links(),\n coordinates: (page) => page.coordinates(),\n langLinks: (page) => page.langLinks(),\n references: (page) => page.references(),\n related: (page) => page.related(),\n summary: (page) => page.summary(),\n tables: (page) => page.tables(),\n };\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _defaultRunOptions(): WikipediaToolRunOptions {\n const unwrapTags = new Set([\"a\", \"small\", \"sup\"]);\n const unwrapTagsSelector = Array.from(unwrapTags.values()).join(\",\");\n\n const ignoredTags = new Set([\n \"img\",\n \"link\",\n \"style\",\n \"abbr\",\n \"cite\",\n \"input\",\n \"sup\",\n \"bdi\",\n \"q\",\n \"figure\",\n \"audio\",\n \"track\",\n \"figcaption\",\n ]);\n const ignoredClasses = new Set([\n \"toc\",\n \"reflist\",\n \"mw-references-wrap\",\n \"box-More_footnotes_needed\",\n \"navbox\",\n \"navbox-styles\",\n \"mw-editsection\",\n \"sistersitebox\",\n \"navbox-inner\",\n \"refbegin\",\n \"notpageimage\",\n \"mw-file-element\",\n \"box-Unreferenced_section\",\n \"navigation-not-searchable\",\n \"noexcerpt\",\n \"infobox-image\",\n \"mw-tmh-player\",\n \"printfooter\",\n \"ambox\",\n \"infobox\",\n ]);\n const ignoredRoles = new Set([\"navigation\"]);\n\n const ignoredSelector = [\n ...ignoredTags.values(),\n Array.from(ignoredClasses.values()).map((cls) => `.${cls}`),\n Array.from(ignoredRoles.values()).map((role) => `[role=\"${role}\"]`),\n \"table>caption\",\n ].join(\",\");\n\n return {\n extraction: {\n fields: {\n markdown: {\n transform: (output: string) => output.replace(/([^\\\\])(\\$)/g, `$1\\\\$2`),\n filter: (node) => {\n const tagName = node.tagName.toLowerCase();\n if (ignoredTags.has(tagName) || ignoredRoles.has(node.role ?? \"\")) {\n return false;\n }\n\n for (const cls of node.className.trim().split(\" \").filter(Boolean)) {\n if (ignoredClasses.has(cls)) {\n return false;\n }\n }\n\n for (const table of Array.from(node.querySelectorAll(\"table tr>th\"))) {\n let colspan = parseInt(table.getAttribute(\"colspan\") || \"1\");\n while (colspan > 1) {\n table.insertAdjacentHTML(\"afterend\", `<th>&nbsp;</th>`);\n colspan--;\n }\n table.removeAttribute(\"colspan\");\n }\n\n const ignoredTargets = Array.from(\n ignoredSelector ? node.querySelectorAll(ignoredSelector) : [],\n );\n for (const childNode of ignoredTargets) {\n childNode.remove();\n }\n\n const unwrapTargets = Array.from(\n unwrapTagsSelector ? node.querySelectorAll(unwrapTagsSelector) : [],\n ).reverse();\n if (unwrapTags.has(tagName)) {\n unwrapTargets.push(node);\n }\n for (const childNode of unwrapTargets) {\n childNode.outerHTML = childNode.innerHTML;\n }\n\n return true;\n },\n },\n },\n },\n filters: {\n minPageNameSimilarity: 0.5,\n excludeOthersOnExactMatch: true,\n },\n search: {\n limit: 3,\n suggestion: true,\n },\n output: {\n maxSerializedLength: 25_000,\n maxDescriptionLength: 250,\n },\n };\n }\n\n protected _createRunOptions(overrides?: WikipediaToolRunOptions): WikipediaToolRunOptions {\n const baseKeys: ArrayKeys<Common<WikipediaToolRunOptions, WikipediaToolOptions>> = [\n \"filters\",\n \"search\",\n \"extraction\",\n \"retryOptions\",\n \"output\",\n ];\n\n return R.pipe(\n { ...this._defaultRunOptions },\n R.mergeDeep(R.pick(this.options ?? {}, baseKeys)),\n R.mergeDeep({ ...overrides }),\n );\n }\n\n protected async _run(\n { query: input }: ToolInput<WikipediaTool>,\n _options?: WikipediaToolRunOptions,\n ): Promise<WikipediaToolOutput> {\n const runOptions = this._createRunOptions(_options);\n\n const { results: searchRawResults, suggestion }: SearchResponse = await wiki.default.search(\n input,\n {\n suggestion: Boolean(_options?.search?.suggestion),\n ...runOptions.search,\n },\n );\n\n if (searchRawResults.length === 0 && suggestion && runOptions.search?.suggestion) {\n return await this._run({ query: suggestion }, _options);\n }\n\n const bestCandidates = this.extractBestCandidates(\n input,\n searchRawResults,\n runOptions?.filters ?? {},\n );\n\n const results = await Promise.all(\n bestCandidates.map(async ({ pageId }) => {\n // @ts-expect-error wrong library's typing, passing a string would lead to a classic text search instead of a concrete page retrieval\n const page = await wiki.default.page(pageId, {\n redirect: true,\n preload: false,\n fields: keys(runOptions.extraction?.fields ?? {}).filter((key) => key !== \"markdown\"),\n });\n\n return asyncProperties({\n title: page.title,\n description: ((): Promise<string> => {\n const length = runOptions?.output?.maxDescriptionLength ?? 0;\n return length <= 0\n ? Promise.resolve(\"\")\n : page.content().then((content) => content.substring(0, length));\n })(),\n url: page.fullurl,\n fields: asyncProperties(\n mapValues(runOptions?.extraction?.fields ?? {}, (value, key) =>\n this._mappers[key](page, runOptions)\n .then((response) => (value.transform ? value.transform(response) : response))\n .catch(() => undefined),\n ),\n ),\n });\n }),\n );\n return new WikipediaToolOutput(results, runOptions.output?.maxSerializedLength ?? Infinity);\n }\n\n protected extractBestCandidates(\n query: string,\n candidates: SearchResponse[\"results\"],\n options: FilterOptions,\n ) {\n const normalize = (text: string) =>\n text\n .normalize(\"NFKD\")\n .replace(/[^\\w| ]/g, \"\") // remove diacritics and special characters (except whitespace)\n .replace(/\\s\\s+/g, \" \") // collapse multiple whitespaces into one\n .trim();\n\n const bestCandidates = stringComparison.jaccardIndex\n .sortMatch(\n normalize(query),\n candidates.map((candidate) => normalize(candidate.title)),\n )\n .map((result) => ({\n pageId: candidates[result.index].pageid,\n score: result.rating,\n }))\n .filter((result) => result.score >= (options.minPageNameSimilarity ?? 0))\n .sort((a, b) => b.score - a.score);\n\n if (bestCandidates.at(0)?.score === 1 && options.excludeOthersOnExactMatch) {\n bestCandidates.length = 1;\n }\n\n return bestCandidates;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n config: this.config,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../node_modules/tsup/assets/cjs_shims.js","../../../src/tools/search/wikipedia.ts"],"names":["getImportMetaUrl","document","URL","__filename","href","currentScript","tagName","toUpperCase","src","baseURI","importMetaUrl","wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","max","config","_mappers","categories","page","content","html","markdown","runOptions","then","result","url","fullurl","base","protocol","hostname","port","filter","Boolean","join","replace","service","Turndown","use","turndownPlugin","gfm","remove","node","extraction","fields","turndown","images","intro","infobox","links","coordinates","langLinks","references","related","summary","tables","_defaultRunOptions","unwrapTags","Set","unwrapTagsSelector","Array","from","values","ignoredTags","ignoredClasses","ignoredRoles","ignoredSelector","map","cls","role","transform","output","toLowerCase","has","className","trim","split","table","querySelectorAll","colspan","parseInt","getAttribute","insertAdjacentHTML","removeAttribute","ignoredTargets","childNode","unwrapTargets","reverse","push","outerHTML","innerHTML","filters","minPageNameSimilarity","excludeOthersOnExactMatch","search","limit","suggestion","maxDescriptionLength","_createRunOptions","overrides","baseKeys","R","pipe","mergeDeep","pick","options","_run","input","_options","patchAxiosUserAgent","searchRawResults","bestCandidates","extractBestCandidates","Promise","all","pageId","redirect","preload","keys","key","asyncProperties","title","resolve","mapValues","value","catch","undefined","candidates","normalize","text","stringComparison","jaccardIndex","sortMatch","candidate","index","pageid","score","rating","sort","a","b","at","enumerable","patched","doPatch","entry","defaults","headers","common","axios","createRequire","require","axiosCjs"],"mappings":"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","file":"wikipedia.cjs","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Page, pageFunctions, searchOptions } from \"wikipedia\";\nimport wiki from \"wikipedia\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport * as R from \"remeda\";\nimport { keys, mapValues } from \"remeda\";\nimport { ArrayKeys, Common } from \"@/internals/types.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { asyncProperties } from \"@/internals/helpers/promise.js\";\nimport { z } from \"zod\";\nimport { Tool, ToolEmitter, ToolInput } from \"@/tools/base.js\";\nimport Turndown from \"turndown\";\n// @ts-expect-error missing types\nimport turndownPlugin from \"joplin-turndown-plugin-gfm\";\nimport stringComparison from \"string-comparison\";\nimport type { pageResult } from \"wikipedia\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nwiki.default.setLang(\"en\");\n\nexport interface SearchOptions extends searchOptions {}\n\nexport interface FilterOptions {\n excludeOthersOnExactMatch?: boolean;\n minPageNameSimilarity?: number;\n}\n\nexport type PageFunctions = Record<\n pageFunctions,\n {\n transform?: <T>(output: T) => T;\n }\n> & {\n markdown: {\n transform?: (output: string) => string;\n filter?: (node: HTMLElement) => boolean;\n };\n};\n\nexport interface ExtractionOptions {\n fields?: Partial<PageFunctions>;\n}\n\nexport interface OutputOptions {\n maxSerializedLength?: number;\n maxDescriptionLength?: number;\n}\n\nexport interface WikipediaToolOptions extends SearchToolOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\nexport interface WikipediaToolRunOptions extends SearchToolRunOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\ntype PageWithMarkdown = Page & { markdown: () => Promise<string> };\n\ntype ResultFields = { [K in keyof PageFunctions]: Awaited<ReturnType<PageWithMarkdown[K]>> };\n\nexport interface WikipediaToolResult extends SearchToolResult {\n fields: Partial<ResultFields>;\n}\n\nexport class WikipediaToolOutput extends SearchToolOutput<WikipediaToolResult> {\n constructor(\n public readonly results: WikipediaToolResult[],\n protected readonly maxSerializedLength: number,\n ) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n getTextContent(): string {\n if (this.isEmpty()) {\n return `No results were found. Try to reformat your query.`;\n }\n\n const target = this.results.length === 1 ? this.results[0] : this.results;\n const response = JSON.stringify(target);\n\n return this.maxSerializedLength < Infinity\n ? response.substring(0, this.maxSerializedLength)\n : response;\n }\n\n createSnapshot() {\n return {\n results: this.results,\n maxSerializedLength: this.maxSerializedLength,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\ninterface SearchResponse {\n results: Pick<pageResult, \"title\" | \"pageid\">[];\n suggestion: string;\n}\n\nexport class WikipediaTool extends Tool<\n WikipediaToolOutput,\n WikipediaToolOptions,\n WikipediaToolRunOptions\n> {\n name = \"Wikipedia\";\n description =\n \"Search factual and historical information, including biography, history, politics, geography, society, culture, science, technology, people, animal species, mathematics, and other subjects.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WikipediaToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"search\", \"wikipedia\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z\n .string({ description: `Name of the wikipedia page, for example 'New York'` })\n .min(1)\n .max(128),\n });\n }\n\n public constructor(public readonly config: WikipediaToolOptions = {}) {\n super(config);\n }\n\n static {\n this.register();\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _mappers(): Record<\n keyof PageFunctions,\n (page: Page, runOptions: WikipediaToolRunOptions) => Promise<any>\n > {\n return {\n categories: (page) => page.categories(),\n content: (page) => page.content(),\n html: (page) => page.html(),\n markdown: async (page, runOptions) => {\n const html = await page.html().then((result) => {\n const url = new URL(page.fullurl);\n const base = `${url.protocol}//${[url.hostname, url.port].filter(Boolean).join(\":\")}`;\n return (\n result\n // Missing a protocol\n .replace(/(<img .*src=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n .replace(/(<a .*href=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n\n // Missing a hostname\n .replace(/(<img .*src=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n .replace(/(<a .*href=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n );\n });\n\n const service = new Turndown();\n service.use(turndownPlugin.gfm);\n return service\n .remove((node) => runOptions.extraction?.fields?.markdown?.filter?.(node) === false)\n .turndown(html);\n },\n images: (page) => page.images(),\n intro: (page) => page.intro(),\n infobox: (page) => page.infobox(),\n links: (page) => page.links(),\n coordinates: (page) => page.coordinates(),\n langLinks: (page) => page.langLinks(),\n references: (page) => page.references(),\n related: (page) => page.related(),\n summary: (page) => page.summary(),\n tables: (page) => page.tables(),\n };\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _defaultRunOptions(): WikipediaToolRunOptions {\n const unwrapTags = new Set([\"a\", \"small\", \"sup\"]);\n const unwrapTagsSelector = Array.from(unwrapTags.values()).join(\",\");\n\n const ignoredTags = new Set([\n \"img\",\n \"link\",\n \"style\",\n \"abbr\",\n \"cite\",\n \"input\",\n \"sup\",\n \"bdi\",\n \"q\",\n \"figure\",\n \"audio\",\n \"track\",\n \"figcaption\",\n ]);\n const ignoredClasses = new Set([\n \"toc\",\n \"reflist\",\n \"mw-references-wrap\",\n \"box-More_footnotes_needed\",\n \"navbox\",\n \"navbox-styles\",\n \"mw-editsection\",\n \"sistersitebox\",\n \"navbox-inner\",\n \"refbegin\",\n \"notpageimage\",\n \"mw-file-element\",\n \"box-Unreferenced_section\",\n \"navigation-not-searchable\",\n \"noexcerpt\",\n \"infobox-image\",\n \"mw-tmh-player\",\n \"printfooter\",\n \"ambox\",\n \"infobox\",\n ]);\n const ignoredRoles = new Set([\"navigation\"]);\n\n const ignoredSelector = [\n ...ignoredTags.values(),\n Array.from(ignoredClasses.values()).map((cls) => `.${cls}`),\n Array.from(ignoredRoles.values()).map((role) => `[role=\"${role}\"]`),\n \"table>caption\",\n ].join(\",\");\n\n return {\n extraction: {\n fields: {\n markdown: {\n transform: (output: string) => output.replace(/([^\\\\])(\\$)/g, `$1\\\\$2`),\n filter: (node) => {\n const tagName = node.tagName.toLowerCase();\n if (ignoredTags.has(tagName) || ignoredRoles.has(node.role ?? \"\")) {\n return false;\n }\n\n for (const cls of node.className.trim().split(\" \").filter(Boolean)) {\n if (ignoredClasses.has(cls)) {\n return false;\n }\n }\n\n for (const table of Array.from(node.querySelectorAll(\"table tr>th\"))) {\n let colspan = parseInt(table.getAttribute(\"colspan\") || \"1\");\n while (colspan > 1) {\n table.insertAdjacentHTML(\"afterend\", `<th>&nbsp;</th>`);\n colspan--;\n }\n table.removeAttribute(\"colspan\");\n }\n\n const ignoredTargets = Array.from(\n ignoredSelector ? node.querySelectorAll(ignoredSelector) : [],\n );\n for (const childNode of ignoredTargets) {\n childNode.remove();\n }\n\n const unwrapTargets = Array.from(\n unwrapTagsSelector ? node.querySelectorAll(unwrapTagsSelector) : [],\n ).reverse();\n if (unwrapTags.has(tagName)) {\n unwrapTargets.push(node);\n }\n for (const childNode of unwrapTargets) {\n childNode.outerHTML = childNode.innerHTML;\n }\n\n return true;\n },\n },\n },\n },\n filters: {\n minPageNameSimilarity: 0.5,\n excludeOthersOnExactMatch: true,\n },\n search: {\n limit: 3,\n suggestion: true,\n },\n output: {\n maxSerializedLength: 25_000,\n maxDescriptionLength: 250,\n },\n };\n }\n\n protected _createRunOptions(overrides?: WikipediaToolRunOptions): WikipediaToolRunOptions {\n const baseKeys: ArrayKeys<Common<WikipediaToolRunOptions, WikipediaToolOptions>> = [\n \"filters\",\n \"search\",\n \"extraction\",\n \"retryOptions\",\n \"output\",\n ];\n\n return R.pipe(\n { ...this._defaultRunOptions },\n R.mergeDeep(R.pick(this.options ?? {}, baseKeys)),\n R.mergeDeep({ ...overrides }),\n );\n }\n\n protected async _run(\n { query: input }: ToolInput<WikipediaTool>,\n _options?: WikipediaToolRunOptions,\n ): Promise<WikipediaToolOutput> {\n await patchAxiosUserAgent();\n\n const runOptions = this._createRunOptions(_options);\n\n const { results: searchRawResults, suggestion }: SearchResponse = await wiki.default.search(\n input,\n {\n suggestion: Boolean(_options?.search?.suggestion),\n ...runOptions.search,\n },\n );\n\n if (searchRawResults.length === 0 && suggestion && runOptions.search?.suggestion) {\n return await this._run({ query: suggestion }, _options);\n }\n\n const bestCandidates = this.extractBestCandidates(\n input,\n searchRawResults,\n runOptions?.filters ?? {},\n );\n\n const results = await Promise.all(\n bestCandidates.map(async ({ pageId }) => {\n // @ts-expect-error wrong library's typing, passing a string would lead to a classic text search instead of a concrete page retrieval\n const page = await wiki.default.page(pageId, {\n redirect: true,\n preload: false,\n fields: keys(runOptions.extraction?.fields ?? {}).filter((key) => key !== \"markdown\"),\n });\n\n return asyncProperties({\n title: page.title,\n description: ((): Promise<string> => {\n const length = runOptions?.output?.maxDescriptionLength ?? 0;\n return length <= 0\n ? Promise.resolve(\"\")\n : page.content().then((content) => content.substring(0, length));\n })(),\n url: page.fullurl,\n fields: asyncProperties(\n mapValues(runOptions?.extraction?.fields ?? {}, (value, key) =>\n this._mappers[key](page, runOptions)\n .then((response) => (value.transform ? value.transform(response) : response))\n .catch(() => undefined),\n ),\n ),\n });\n }),\n );\n return new WikipediaToolOutput(results, runOptions.output?.maxSerializedLength ?? Infinity);\n }\n\n protected extractBestCandidates(\n query: string,\n candidates: SearchResponse[\"results\"],\n options: FilterOptions,\n ) {\n const normalize = (text: string) =>\n text\n .normalize(\"NFKD\")\n .replace(/[^\\w| ]/g, \"\") // remove diacritics and special characters (except whitespace)\n .replace(/\\s\\s+/g, \" \") // collapse multiple whitespaces into one\n .trim();\n\n const bestCandidates = stringComparison.jaccardIndex\n .sortMatch(\n normalize(query),\n candidates.map((candidate) => normalize(candidate.title)),\n )\n .map((result) => ({\n pageId: candidates[result.index].pageid,\n score: result.rating,\n }))\n .filter((result) => result.score >= (options.minPageNameSimilarity ?? 0))\n .sort((a, b) => b.score - a.score);\n\n if (bestCandidates.at(0)?.score === 1 && options.excludeOthersOnExactMatch) {\n bestCandidates.length = 1;\n }\n\n return bestCandidates;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n config: this.config,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n }\n}\n\nasync function patchAxiosUserAgent() {\n if (patchAxiosUserAgent.patched) {\n return;\n }\n patchAxiosUserAgent.patched = true;\n\n const doPatch = (entry: any) => {\n entry.defaults.headers.common[\"User-Agent\"] = \"BeeAI Framework\";\n };\n\n const { default: axios } = await import(\"axios\");\n doPatch(axios);\n\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const { default: axiosCjs } = await require(\"axios\");\n if (axiosCjs !== axios) {\n doPatch(axiosCjs);\n }\n } catch {\n /* empty */\n }\n}\npatchAxiosUserAgent.patched = false;\n"]}
@@ -1,11 +1,10 @@
1
1
  import { BaseCache } from '../../cache/base.cjs';
2
2
  import * as promise_based_task from 'promise-based-task';
3
- import { searchOptions, pageFunctions, Page } from 'wikipedia';
3
+ import { searchOptions, pageFunctions, Page, pageResult } from 'wikipedia';
4
4
  import { SearchToolOptions, SearchToolRunOptions, SearchToolResult, SearchToolOutput } from './base.cjs';
5
5
  import { z } from 'zod';
6
6
  import { Tool, ToolEmitter, ToolInput } from '../base.cjs';
7
- import { pageResult } from 'wikipedia/dist/resultTypes.js';
8
- import { E as Emitter } from '../../emitter-pJzHC_AM.cjs';
7
+ import { E as Emitter } from '../../emitter-DpqUYjXH.cjs';
9
8
  import '../../internals/serializable.cjs';
10
9
  import '../../internals/types.cjs';
11
10
  import '../../internals/helpers/guards.cjs';
@@ -1,11 +1,10 @@
1
1
  import { BaseCache } from '../../cache/base.js';
2
2
  import * as promise_based_task from 'promise-based-task';
3
- import { searchOptions, pageFunctions, Page } from 'wikipedia';
3
+ import { searchOptions, pageFunctions, Page, pageResult } from 'wikipedia';
4
4
  import { SearchToolOptions, SearchToolRunOptions, SearchToolResult, SearchToolOutput } from './base.js';
5
5
  import { z } from 'zod';
6
6
  import { Tool, ToolEmitter, ToolInput } from '../base.js';
7
- import { pageResult } from 'wikipedia/dist/resultTypes.js';
8
- import { E as Emitter } from '../../emitter-BqpLJQVb.js';
7
+ import { E as Emitter } from '../../emitter-CZFbzlUi.js';
9
8
  import '../../internals/serializable.js';
10
9
  import '../../internals/types.js';
11
10
  import '../../internals/helpers/guards.js';
@@ -240,6 +240,7 @@ class WikipediaTool extends Tool {
240
240
  }));
241
241
  }
242
242
  async _run({ query: input }, _options) {
243
+ await patchAxiosUserAgent();
243
244
  const runOptions = this._createRunOptions(_options);
244
245
  const { results: searchRawResults, suggestion } = await wiki.default.search(input, {
245
246
  suggestion: Boolean(_options?.search?.suggestion),
@@ -304,6 +305,28 @@ _ts_decorate([
304
305
  _ts_metadata("design:type", typeof WikipediaToolRunOptions === "undefined" ? Object : WikipediaToolRunOptions),
305
306
  _ts_metadata("design:paramtypes", [])
306
307
  ], WikipediaTool.prototype, "_defaultRunOptions", null);
308
+ async function patchAxiosUserAgent() {
309
+ if (patchAxiosUserAgent.patched) {
310
+ return;
311
+ }
312
+ patchAxiosUserAgent.patched = true;
313
+ const doPatch = /* @__PURE__ */ __name((entry) => {
314
+ entry.defaults.headers.common["User-Agent"] = "BeeAI Framework";
315
+ }, "doPatch");
316
+ const { default: axios } = await import('axios');
317
+ doPatch(axios);
318
+ try {
319
+ const { createRequire } = await import('node:module');
320
+ const require2 = createRequire(import.meta.url);
321
+ const { default: axiosCjs } = await require2("axios");
322
+ if (axiosCjs !== axios) {
323
+ doPatch(axiosCjs);
324
+ }
325
+ } catch {
326
+ }
327
+ }
328
+ __name(patchAxiosUserAgent, "patchAxiosUserAgent");
329
+ patchAxiosUserAgent.patched = false;
307
330
 
308
331
  export { WikipediaTool, WikipediaToolOutput };
309
332
  //# sourceMappingURL=wikipedia.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/search/wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","max","config","_mappers","categories","page","content","html","markdown","runOptions","then","result","url","URL","fullurl","base","protocol","hostname","port","filter","Boolean","join","replace","service","Turndown","use","turndownPlugin","gfm","remove","node","extraction","fields","turndown","images","intro","infobox","links","coordinates","langLinks","references","related","summary","tables","_defaultRunOptions","unwrapTags","Set","unwrapTagsSelector","Array","from","values","ignoredTags","ignoredClasses","ignoredRoles","ignoredSelector","map","cls","role","transform","output","tagName","toLowerCase","has","className","trim","split","table","querySelectorAll","colspan","parseInt","getAttribute","insertAdjacentHTML","removeAttribute","ignoredTargets","childNode","unwrapTargets","reverse","push","outerHTML","innerHTML","filters","minPageNameSimilarity","excludeOthersOnExactMatch","search","limit","suggestion","maxDescriptionLength","_createRunOptions","overrides","baseKeys","R","pipe","mergeDeep","pick","options","_run","input","_options","searchRawResults","bestCandidates","extractBestCandidates","Promise","all","pageId","redirect","preload","keys","key","asyncProperties","title","resolve","mapValues","value","catch","undefined","candidates","normalize","text","stringComparison","jaccardIndex","sortMatch","candidate","index","pageid","score","rating","sort","a","b","at","enumerable"],"mappings":"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","file":"wikipedia.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Page, pageFunctions, searchOptions } from \"wikipedia\";\nimport wiki from \"wikipedia\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport * as R from \"remeda\";\nimport { keys, mapValues } from \"remeda\";\nimport { ArrayKeys, Common } from \"@/internals/types.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { asyncProperties } from \"@/internals/helpers/promise.js\";\nimport { z } from \"zod\";\nimport { Tool, ToolEmitter, ToolInput } from \"@/tools/base.js\";\nimport Turndown from \"turndown\";\n// @ts-expect-error missing types\nimport turndownPlugin from \"joplin-turndown-plugin-gfm\";\nimport stringComparison from \"string-comparison\";\nimport { pageResult } from \"wikipedia/dist/resultTypes.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nwiki.default.setLang(\"en\");\n\nexport interface SearchOptions extends searchOptions {}\n\nexport interface FilterOptions {\n excludeOthersOnExactMatch?: boolean;\n minPageNameSimilarity?: number;\n}\n\nexport type PageFunctions = Record<\n pageFunctions,\n {\n transform?: <T>(output: T) => T;\n }\n> & {\n markdown: {\n transform?: (output: string) => string;\n filter?: (node: HTMLElement) => boolean;\n };\n};\n\nexport interface ExtractionOptions {\n fields?: Partial<PageFunctions>;\n}\n\nexport interface OutputOptions {\n maxSerializedLength?: number;\n maxDescriptionLength?: number;\n}\n\nexport interface WikipediaToolOptions extends SearchToolOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\nexport interface WikipediaToolRunOptions extends SearchToolRunOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\ntype PageWithMarkdown = Page & { markdown: () => Promise<string> };\n\ntype ResultFields = { [K in keyof PageFunctions]: Awaited<ReturnType<PageWithMarkdown[K]>> };\n\nexport interface WikipediaToolResult extends SearchToolResult {\n fields: Partial<ResultFields>;\n}\n\nexport class WikipediaToolOutput extends SearchToolOutput<WikipediaToolResult> {\n constructor(\n public readonly results: WikipediaToolResult[],\n protected readonly maxSerializedLength: number,\n ) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n getTextContent(): string {\n if (this.isEmpty()) {\n return `No results were found. Try to reformat your query.`;\n }\n\n const target = this.results.length === 1 ? this.results[0] : this.results;\n const response = JSON.stringify(target);\n\n return this.maxSerializedLength < Infinity\n ? response.substring(0, this.maxSerializedLength)\n : response;\n }\n\n createSnapshot() {\n return {\n results: this.results,\n maxSerializedLength: this.maxSerializedLength,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\ninterface SearchResponse {\n results: Pick<pageResult, \"title\" | \"pageid\">[];\n suggestion: string;\n}\n\nexport class WikipediaTool extends Tool<\n WikipediaToolOutput,\n WikipediaToolOptions,\n WikipediaToolRunOptions\n> {\n name = \"Wikipedia\";\n description =\n \"Search factual and historical information, including biography, history, politics, geography, society, culture, science, technology, people, animal species, mathematics, and other subjects.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WikipediaToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"search\", \"wikipedia\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z\n .string({ description: `Name of the wikipedia page, for example 'New York'` })\n .min(1)\n .max(128),\n });\n }\n\n public constructor(public readonly config: WikipediaToolOptions = {}) {\n super(config);\n }\n\n static {\n this.register();\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _mappers(): Record<\n keyof PageFunctions,\n (page: Page, runOptions: WikipediaToolRunOptions) => Promise<any>\n > {\n return {\n categories: (page) => page.categories(),\n content: (page) => page.content(),\n html: (page) => page.html(),\n markdown: async (page, runOptions) => {\n const html = await page.html().then((result) => {\n const url = new URL(page.fullurl);\n const base = `${url.protocol}//${[url.hostname, url.port].filter(Boolean).join(\":\")}`;\n return (\n result\n // Missing a protocol\n .replace(/(<img .*src=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n .replace(/(<a .*href=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n\n // Missing a hostname\n .replace(/(<img .*src=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n .replace(/(<a .*href=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n );\n });\n\n const service = new Turndown();\n service.use(turndownPlugin.gfm);\n return service\n .remove((node) => runOptions.extraction?.fields?.markdown?.filter?.(node) === false)\n .turndown(html);\n },\n images: (page) => page.images(),\n intro: (page) => page.intro(),\n infobox: (page) => page.infobox(),\n links: (page) => page.links(),\n coordinates: (page) => page.coordinates(),\n langLinks: (page) => page.langLinks(),\n references: (page) => page.references(),\n related: (page) => page.related(),\n summary: (page) => page.summary(),\n tables: (page) => page.tables(),\n };\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _defaultRunOptions(): WikipediaToolRunOptions {\n const unwrapTags = new Set([\"a\", \"small\", \"sup\"]);\n const unwrapTagsSelector = Array.from(unwrapTags.values()).join(\",\");\n\n const ignoredTags = new Set([\n \"img\",\n \"link\",\n \"style\",\n \"abbr\",\n \"cite\",\n \"input\",\n \"sup\",\n \"bdi\",\n \"q\",\n \"figure\",\n \"audio\",\n \"track\",\n \"figcaption\",\n ]);\n const ignoredClasses = new Set([\n \"toc\",\n \"reflist\",\n \"mw-references-wrap\",\n \"box-More_footnotes_needed\",\n \"navbox\",\n \"navbox-styles\",\n \"mw-editsection\",\n \"sistersitebox\",\n \"navbox-inner\",\n \"refbegin\",\n \"notpageimage\",\n \"mw-file-element\",\n \"box-Unreferenced_section\",\n \"navigation-not-searchable\",\n \"noexcerpt\",\n \"infobox-image\",\n \"mw-tmh-player\",\n \"printfooter\",\n \"ambox\",\n \"infobox\",\n ]);\n const ignoredRoles = new Set([\"navigation\"]);\n\n const ignoredSelector = [\n ...ignoredTags.values(),\n Array.from(ignoredClasses.values()).map((cls) => `.${cls}`),\n Array.from(ignoredRoles.values()).map((role) => `[role=\"${role}\"]`),\n \"table>caption\",\n ].join(\",\");\n\n return {\n extraction: {\n fields: {\n markdown: {\n transform: (output: string) => output.replace(/([^\\\\])(\\$)/g, `$1\\\\$2`),\n filter: (node) => {\n const tagName = node.tagName.toLowerCase();\n if (ignoredTags.has(tagName) || ignoredRoles.has(node.role ?? \"\")) {\n return false;\n }\n\n for (const cls of node.className.trim().split(\" \").filter(Boolean)) {\n if (ignoredClasses.has(cls)) {\n return false;\n }\n }\n\n for (const table of Array.from(node.querySelectorAll(\"table tr>th\"))) {\n let colspan = parseInt(table.getAttribute(\"colspan\") || \"1\");\n while (colspan > 1) {\n table.insertAdjacentHTML(\"afterend\", `<th>&nbsp;</th>`);\n colspan--;\n }\n table.removeAttribute(\"colspan\");\n }\n\n const ignoredTargets = Array.from(\n ignoredSelector ? node.querySelectorAll(ignoredSelector) : [],\n );\n for (const childNode of ignoredTargets) {\n childNode.remove();\n }\n\n const unwrapTargets = Array.from(\n unwrapTagsSelector ? node.querySelectorAll(unwrapTagsSelector) : [],\n ).reverse();\n if (unwrapTags.has(tagName)) {\n unwrapTargets.push(node);\n }\n for (const childNode of unwrapTargets) {\n childNode.outerHTML = childNode.innerHTML;\n }\n\n return true;\n },\n },\n },\n },\n filters: {\n minPageNameSimilarity: 0.5,\n excludeOthersOnExactMatch: true,\n },\n search: {\n limit: 3,\n suggestion: true,\n },\n output: {\n maxSerializedLength: 25_000,\n maxDescriptionLength: 250,\n },\n };\n }\n\n protected _createRunOptions(overrides?: WikipediaToolRunOptions): WikipediaToolRunOptions {\n const baseKeys: ArrayKeys<Common<WikipediaToolRunOptions, WikipediaToolOptions>> = [\n \"filters\",\n \"search\",\n \"extraction\",\n \"retryOptions\",\n \"output\",\n ];\n\n return R.pipe(\n { ...this._defaultRunOptions },\n R.mergeDeep(R.pick(this.options ?? {}, baseKeys)),\n R.mergeDeep({ ...overrides }),\n );\n }\n\n protected async _run(\n { query: input }: ToolInput<WikipediaTool>,\n _options?: WikipediaToolRunOptions,\n ): Promise<WikipediaToolOutput> {\n const runOptions = this._createRunOptions(_options);\n\n const { results: searchRawResults, suggestion }: SearchResponse = await wiki.default.search(\n input,\n {\n suggestion: Boolean(_options?.search?.suggestion),\n ...runOptions.search,\n },\n );\n\n if (searchRawResults.length === 0 && suggestion && runOptions.search?.suggestion) {\n return await this._run({ query: suggestion }, _options);\n }\n\n const bestCandidates = this.extractBestCandidates(\n input,\n searchRawResults,\n runOptions?.filters ?? {},\n );\n\n const results = await Promise.all(\n bestCandidates.map(async ({ pageId }) => {\n // @ts-expect-error wrong library's typing, passing a string would lead to a classic text search instead of a concrete page retrieval\n const page = await wiki.default.page(pageId, {\n redirect: true,\n preload: false,\n fields: keys(runOptions.extraction?.fields ?? {}).filter((key) => key !== \"markdown\"),\n });\n\n return asyncProperties({\n title: page.title,\n description: ((): Promise<string> => {\n const length = runOptions?.output?.maxDescriptionLength ?? 0;\n return length <= 0\n ? Promise.resolve(\"\")\n : page.content().then((content) => content.substring(0, length));\n })(),\n url: page.fullurl,\n fields: asyncProperties(\n mapValues(runOptions?.extraction?.fields ?? {}, (value, key) =>\n this._mappers[key](page, runOptions)\n .then((response) => (value.transform ? value.transform(response) : response))\n .catch(() => undefined),\n ),\n ),\n });\n }),\n );\n return new WikipediaToolOutput(results, runOptions.output?.maxSerializedLength ?? Infinity);\n }\n\n protected extractBestCandidates(\n query: string,\n candidates: SearchResponse[\"results\"],\n options: FilterOptions,\n ) {\n const normalize = (text: string) =>\n text\n .normalize(\"NFKD\")\n .replace(/[^\\w| ]/g, \"\") // remove diacritics and special characters (except whitespace)\n .replace(/\\s\\s+/g, \" \") // collapse multiple whitespaces into one\n .trim();\n\n const bestCandidates = stringComparison.jaccardIndex\n .sortMatch(\n normalize(query),\n candidates.map((candidate) => normalize(candidate.title)),\n )\n .map((result) => ({\n pageId: candidates[result.index].pageid,\n score: result.rating,\n }))\n .filter((result) => result.score >= (options.minPageNameSimilarity ?? 0))\n .sort((a, b) => b.score - a.score);\n\n if (bestCandidates.at(0)?.score === 1 && options.excludeOthersOnExactMatch) {\n bestCandidates.length = 1;\n }\n\n return bestCandidates;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n config: this.config,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/tools/search/wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","z","object","query","string","min","max","config","_mappers","categories","page","content","html","markdown","runOptions","then","result","url","URL","fullurl","base","protocol","hostname","port","filter","Boolean","join","replace","service","Turndown","use","turndownPlugin","gfm","remove","node","extraction","fields","turndown","images","intro","infobox","links","coordinates","langLinks","references","related","summary","tables","_defaultRunOptions","unwrapTags","Set","unwrapTagsSelector","Array","from","values","ignoredTags","ignoredClasses","ignoredRoles","ignoredSelector","map","cls","role","transform","output","tagName","toLowerCase","has","className","trim","split","table","querySelectorAll","colspan","parseInt","getAttribute","insertAdjacentHTML","removeAttribute","ignoredTargets","childNode","unwrapTargets","reverse","push","outerHTML","innerHTML","filters","minPageNameSimilarity","excludeOthersOnExactMatch","search","limit","suggestion","maxDescriptionLength","_createRunOptions","overrides","baseKeys","R","pipe","mergeDeep","pick","options","_run","input","_options","patchAxiosUserAgent","searchRawResults","bestCandidates","extractBestCandidates","Promise","all","pageId","redirect","preload","keys","key","asyncProperties","title","resolve","mapValues","value","catch","undefined","candidates","normalize","text","stringComparison","jaccardIndex","sortMatch","candidate","index","pageid","score","rating","sort","a","b","at","enumerable","patched","doPatch","entry","defaults","headers","common","axios","createRequire","require","axiosCjs"],"mappings":"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","file":"wikipedia.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { Page, pageFunctions, searchOptions } from \"wikipedia\";\nimport wiki from \"wikipedia\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport * as R from \"remeda\";\nimport { keys, mapValues } from \"remeda\";\nimport { ArrayKeys, Common } from \"@/internals/types.js\";\nimport {\n SearchToolOptions,\n SearchToolOutput,\n SearchToolResult,\n SearchToolRunOptions,\n} from \"./base.js\";\nimport { asyncProperties } from \"@/internals/helpers/promise.js\";\nimport { z } from \"zod\";\nimport { Tool, ToolEmitter, ToolInput } from \"@/tools/base.js\";\nimport Turndown from \"turndown\";\n// @ts-expect-error missing types\nimport turndownPlugin from \"joplin-turndown-plugin-gfm\";\nimport stringComparison from \"string-comparison\";\nimport type { pageResult } from \"wikipedia\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nwiki.default.setLang(\"en\");\n\nexport interface SearchOptions extends searchOptions {}\n\nexport interface FilterOptions {\n excludeOthersOnExactMatch?: boolean;\n minPageNameSimilarity?: number;\n}\n\nexport type PageFunctions = Record<\n pageFunctions,\n {\n transform?: <T>(output: T) => T;\n }\n> & {\n markdown: {\n transform?: (output: string) => string;\n filter?: (node: HTMLElement) => boolean;\n };\n};\n\nexport interface ExtractionOptions {\n fields?: Partial<PageFunctions>;\n}\n\nexport interface OutputOptions {\n maxSerializedLength?: number;\n maxDescriptionLength?: number;\n}\n\nexport interface WikipediaToolOptions extends SearchToolOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\nexport interface WikipediaToolRunOptions extends SearchToolRunOptions {\n filters?: FilterOptions;\n search?: SearchOptions;\n extraction?: ExtractionOptions;\n output?: OutputOptions;\n}\n\ntype PageWithMarkdown = Page & { markdown: () => Promise<string> };\n\ntype ResultFields = { [K in keyof PageFunctions]: Awaited<ReturnType<PageWithMarkdown[K]>> };\n\nexport interface WikipediaToolResult extends SearchToolResult {\n fields: Partial<ResultFields>;\n}\n\nexport class WikipediaToolOutput extends SearchToolOutput<WikipediaToolResult> {\n constructor(\n public readonly results: WikipediaToolResult[],\n protected readonly maxSerializedLength: number,\n ) {\n super(results);\n }\n\n static {\n this.register();\n }\n\n @Cache()\n getTextContent(): string {\n if (this.isEmpty()) {\n return `No results were found. Try to reformat your query.`;\n }\n\n const target = this.results.length === 1 ? this.results[0] : this.results;\n const response = JSON.stringify(target);\n\n return this.maxSerializedLength < Infinity\n ? response.substring(0, this.maxSerializedLength)\n : response;\n }\n\n createSnapshot() {\n return {\n results: this.results,\n maxSerializedLength: this.maxSerializedLength,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n\ninterface SearchResponse {\n results: Pick<pageResult, \"title\" | \"pageid\">[];\n suggestion: string;\n}\n\nexport class WikipediaTool extends Tool<\n WikipediaToolOutput,\n WikipediaToolOptions,\n WikipediaToolRunOptions\n> {\n name = \"Wikipedia\";\n description =\n \"Search factual and historical information, including biography, history, politics, geography, society, culture, science, technology, people, animal species, mathematics, and other subjects.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WikipediaToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"search\", \"wikipedia\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({\n query: z\n .string({ description: `Name of the wikipedia page, for example 'New York'` })\n .min(1)\n .max(128),\n });\n }\n\n public constructor(public readonly config: WikipediaToolOptions = {}) {\n super(config);\n }\n\n static {\n this.register();\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _mappers(): Record<\n keyof PageFunctions,\n (page: Page, runOptions: WikipediaToolRunOptions) => Promise<any>\n > {\n return {\n categories: (page) => page.categories(),\n content: (page) => page.content(),\n html: (page) => page.html(),\n markdown: async (page, runOptions) => {\n const html = await page.html().then((result) => {\n const url = new URL(page.fullurl);\n const base = `${url.protocol}//${[url.hostname, url.port].filter(Boolean).join(\":\")}`;\n return (\n result\n // Missing a protocol\n .replace(/(<img .*src=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n .replace(/(<a .*href=)\"(\\/\\/.*)\"/gm, `$1\"${url.protocol}$2\"`)\n\n // Missing a hostname\n .replace(/(<img .*src=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n .replace(/(<a .*href=)\"(\\/.*)\"/gm, `$1\"${base}$2\"`)\n );\n });\n\n const service = new Turndown();\n service.use(turndownPlugin.gfm);\n return service\n .remove((node) => runOptions.extraction?.fields?.markdown?.filter?.(node) === false)\n .turndown(html);\n },\n images: (page) => page.images(),\n intro: (page) => page.intro(),\n infobox: (page) => page.infobox(),\n links: (page) => page.links(),\n coordinates: (page) => page.coordinates(),\n langLinks: (page) => page.langLinks(),\n references: (page) => page.references(),\n related: (page) => page.related(),\n summary: (page) => page.summary(),\n tables: (page) => page.tables(),\n };\n }\n\n @Cache({\n enumerable: false,\n })\n protected get _defaultRunOptions(): WikipediaToolRunOptions {\n const unwrapTags = new Set([\"a\", \"small\", \"sup\"]);\n const unwrapTagsSelector = Array.from(unwrapTags.values()).join(\",\");\n\n const ignoredTags = new Set([\n \"img\",\n \"link\",\n \"style\",\n \"abbr\",\n \"cite\",\n \"input\",\n \"sup\",\n \"bdi\",\n \"q\",\n \"figure\",\n \"audio\",\n \"track\",\n \"figcaption\",\n ]);\n const ignoredClasses = new Set([\n \"toc\",\n \"reflist\",\n \"mw-references-wrap\",\n \"box-More_footnotes_needed\",\n \"navbox\",\n \"navbox-styles\",\n \"mw-editsection\",\n \"sistersitebox\",\n \"navbox-inner\",\n \"refbegin\",\n \"notpageimage\",\n \"mw-file-element\",\n \"box-Unreferenced_section\",\n \"navigation-not-searchable\",\n \"noexcerpt\",\n \"infobox-image\",\n \"mw-tmh-player\",\n \"printfooter\",\n \"ambox\",\n \"infobox\",\n ]);\n const ignoredRoles = new Set([\"navigation\"]);\n\n const ignoredSelector = [\n ...ignoredTags.values(),\n Array.from(ignoredClasses.values()).map((cls) => `.${cls}`),\n Array.from(ignoredRoles.values()).map((role) => `[role=\"${role}\"]`),\n \"table>caption\",\n ].join(\",\");\n\n return {\n extraction: {\n fields: {\n markdown: {\n transform: (output: string) => output.replace(/([^\\\\])(\\$)/g, `$1\\\\$2`),\n filter: (node) => {\n const tagName = node.tagName.toLowerCase();\n if (ignoredTags.has(tagName) || ignoredRoles.has(node.role ?? \"\")) {\n return false;\n }\n\n for (const cls of node.className.trim().split(\" \").filter(Boolean)) {\n if (ignoredClasses.has(cls)) {\n return false;\n }\n }\n\n for (const table of Array.from(node.querySelectorAll(\"table tr>th\"))) {\n let colspan = parseInt(table.getAttribute(\"colspan\") || \"1\");\n while (colspan > 1) {\n table.insertAdjacentHTML(\"afterend\", `<th>&nbsp;</th>`);\n colspan--;\n }\n table.removeAttribute(\"colspan\");\n }\n\n const ignoredTargets = Array.from(\n ignoredSelector ? node.querySelectorAll(ignoredSelector) : [],\n );\n for (const childNode of ignoredTargets) {\n childNode.remove();\n }\n\n const unwrapTargets = Array.from(\n unwrapTagsSelector ? node.querySelectorAll(unwrapTagsSelector) : [],\n ).reverse();\n if (unwrapTags.has(tagName)) {\n unwrapTargets.push(node);\n }\n for (const childNode of unwrapTargets) {\n childNode.outerHTML = childNode.innerHTML;\n }\n\n return true;\n },\n },\n },\n },\n filters: {\n minPageNameSimilarity: 0.5,\n excludeOthersOnExactMatch: true,\n },\n search: {\n limit: 3,\n suggestion: true,\n },\n output: {\n maxSerializedLength: 25_000,\n maxDescriptionLength: 250,\n },\n };\n }\n\n protected _createRunOptions(overrides?: WikipediaToolRunOptions): WikipediaToolRunOptions {\n const baseKeys: ArrayKeys<Common<WikipediaToolRunOptions, WikipediaToolOptions>> = [\n \"filters\",\n \"search\",\n \"extraction\",\n \"retryOptions\",\n \"output\",\n ];\n\n return R.pipe(\n { ...this._defaultRunOptions },\n R.mergeDeep(R.pick(this.options ?? {}, baseKeys)),\n R.mergeDeep({ ...overrides }),\n );\n }\n\n protected async _run(\n { query: input }: ToolInput<WikipediaTool>,\n _options?: WikipediaToolRunOptions,\n ): Promise<WikipediaToolOutput> {\n await patchAxiosUserAgent();\n\n const runOptions = this._createRunOptions(_options);\n\n const { results: searchRawResults, suggestion }: SearchResponse = await wiki.default.search(\n input,\n {\n suggestion: Boolean(_options?.search?.suggestion),\n ...runOptions.search,\n },\n );\n\n if (searchRawResults.length === 0 && suggestion && runOptions.search?.suggestion) {\n return await this._run({ query: suggestion }, _options);\n }\n\n const bestCandidates = this.extractBestCandidates(\n input,\n searchRawResults,\n runOptions?.filters ?? {},\n );\n\n const results = await Promise.all(\n bestCandidates.map(async ({ pageId }) => {\n // @ts-expect-error wrong library's typing, passing a string would lead to a classic text search instead of a concrete page retrieval\n const page = await wiki.default.page(pageId, {\n redirect: true,\n preload: false,\n fields: keys(runOptions.extraction?.fields ?? {}).filter((key) => key !== \"markdown\"),\n });\n\n return asyncProperties({\n title: page.title,\n description: ((): Promise<string> => {\n const length = runOptions?.output?.maxDescriptionLength ?? 0;\n return length <= 0\n ? Promise.resolve(\"\")\n : page.content().then((content) => content.substring(0, length));\n })(),\n url: page.fullurl,\n fields: asyncProperties(\n mapValues(runOptions?.extraction?.fields ?? {}, (value, key) =>\n this._mappers[key](page, runOptions)\n .then((response) => (value.transform ? value.transform(response) : response))\n .catch(() => undefined),\n ),\n ),\n });\n }),\n );\n return new WikipediaToolOutput(results, runOptions.output?.maxSerializedLength ?? Infinity);\n }\n\n protected extractBestCandidates(\n query: string,\n candidates: SearchResponse[\"results\"],\n options: FilterOptions,\n ) {\n const normalize = (text: string) =>\n text\n .normalize(\"NFKD\")\n .replace(/[^\\w| ]/g, \"\") // remove diacritics and special characters (except whitespace)\n .replace(/\\s\\s+/g, \" \") // collapse multiple whitespaces into one\n .trim();\n\n const bestCandidates = stringComparison.jaccardIndex\n .sortMatch(\n normalize(query),\n candidates.map((candidate) => normalize(candidate.title)),\n )\n .map((result) => ({\n pageId: candidates[result.index].pageid,\n score: result.rating,\n }))\n .filter((result) => result.score >= (options.minPageNameSimilarity ?? 0))\n .sort((a, b) => b.score - a.score);\n\n if (bestCandidates.at(0)?.score === 1 && options.excludeOthersOnExactMatch) {\n bestCandidates.length = 1;\n }\n\n return bestCandidates;\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n config: this.config,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n }\n}\n\nasync function patchAxiosUserAgent() {\n if (patchAxiosUserAgent.patched) {\n return;\n }\n patchAxiosUserAgent.patched = true;\n\n const doPatch = (entry: any) => {\n entry.defaults.headers.common[\"User-Agent\"] = \"BeeAI Framework\";\n };\n\n const { default: axios } = await import(\"axios\");\n doPatch(axios);\n\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const { default: axiosCjs } = await require(\"axios\");\n if (axiosCjs !== axios) {\n doPatch(axiosCjs);\n }\n } catch {\n /* empty */\n }\n}\npatchAxiosUserAgent.patched = false;\n"]}
@@ -10,7 +10,7 @@ import 'promise-based-task';
10
10
  import '../cache/base.cjs';
11
11
  import '../internals/helpers/schema.cjs';
12
12
  import 'zod-to-json-schema';
13
- import '../emitter-pJzHC_AM.cjs';
13
+ import '../emitter-DpqUYjXH.cjs';
14
14
  import '../internals/helpers/promise.cjs';
15
15
 
16
16
  /**
@@ -10,7 +10,7 @@ import 'promise-based-task';
10
10
  import '../cache/base.js';
11
11
  import '../internals/helpers/schema.js';
12
12
  import 'zod-to-json-schema';
13
- import '../emitter-BqpLJQVb.js';
13
+ import '../emitter-CZFbzlUi.js';
14
14
  import '../internals/helpers/promise.js';
15
15
 
16
16
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/weather/openMeteo.ts"],"names":["OpenMeteoToolOutput","JSONToolOutput","OpenMeteoTool","Tool","name","description","inputSchema","z","object","location","union","string","min","country","optional","language","default","strip","latitude","coerce","number","longitude","start_date","date","describe","end_date","temperature_unit","enum","emitter","Emitter","root","child","namespace","creator","register","options","responseFilter","excludedKeys","preprocessInput","rawInput","fixDate","key","value","getProp","setProp","substring","_run","startDate","endDate","input","_options","run","apiKey","prepareParams","extractLocation","response","_geocode","signal","pick","validateAndSetDates","startDateStr","endDateStr","now","Date","start","UTC","getFullYear","getMonth","getDate","end","ToolInputValidationError","toDateString","toISOString","split","createURLParams","pickBy","v","isNullish","current","daily","hourly","timezone","params","fetch","headers","Authorization","ok","ToolError","Error","text","data","json","omit","format","count","results","length"],"mappings":"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","file":"openMeteo.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolError,\n ToolInput,\n ToolInputValidationError,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { createURLParams } from \"@/internals/fetcher.js\";\nimport { isNullish, omit, pick, pickBy } from \"remeda\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { RunContext } from \"@/context.js\";\nimport { getProp, setProp } from \"@/internals/helpers/object.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface ResponseFilter {\n excludedKeys: (keyof OpenMeteoToolResponse)[];\n}\n\ninterface ToolOptions extends BaseToolOptions {\n apiKey?: string;\n responseFilter?: ResponseFilter;\n}\n\ntype ToolRunOptions = BaseToolRunOptions;\n\ninterface Location {\n latitude: number;\n longitude: number;\n}\n\ninterface LocationSearch {\n name: string;\n country?: string;\n language?: string;\n}\n\nexport interface OpenMeteoToolResponse {\n latitude?: number;\n longitude?: number;\n generationtime_ms?: number;\n utc_offset_seconds?: number;\n timezone?: string;\n timezone_abbreviation?: string;\n elevation?: number;\n current_units?: Record<string, string>;\n current?: Record<string, string>;\n hourly_units?: Record<string, string>;\n hourly?: Record<string, any[]>;\n daily_units?: Record<string, string>;\n daily?: Record<string, any[]>;\n}\n\nexport class OpenMeteoToolOutput extends JSONToolOutput<OpenMeteoToolResponse> {}\n\nexport class OpenMeteoTool extends Tool<OpenMeteoToolOutput, ToolOptions, ToolRunOptions> {\n name = \"OpenMeteo\";\n description = `Retrieve current, past, or future weather forecasts for a location.`;\n\n inputSchema() {\n return z\n .object({\n location: z.union([\n z\n .object({\n name: z.string().min(1),\n country: z.string().optional(),\n language: z.string().default(\"English\"),\n })\n .strip(),\n z\n .object({\n latitude: z.coerce.number(),\n longitude: z.coerce.number(),\n })\n .strip(),\n ]),\n start_date: z\n .string()\n .date()\n .describe(\"Start date for the weather forecast in the format YYYY-MM-DD (UTC)\"),\n end_date: z\n .string()\n .date()\n .describe(\"End date for the weather forecast in the format YYYY-MM-DD (UTC)\")\n .optional(),\n temperature_unit: z.enum([\"celsius\", \"fahrenheit\"]).default(\"celsius\"),\n })\n .strip();\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, OpenMeteoToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"weather\", \"openMeteo\"],\n creator: this,\n });\n\n static {\n this.register();\n }\n\n public constructor(options: Partial<ToolOptions> = {}) {\n super({\n ...options,\n responseFilter: options?.responseFilter ?? {\n excludedKeys: [\n \"latitude\",\n \"longitude\",\n \"generationtime_ms\",\n \"utc_offset_seconds\",\n \"timezone\",\n \"timezone_abbreviation\",\n \"elevation\",\n \"hourly\",\n \"hourly_units\",\n ],\n },\n });\n }\n\n protected preprocessInput(rawInput: unknown) {\n super.preprocessInput(rawInput);\n\n const fixDate = (key: keyof ToolInput<this>) => {\n const value = getProp(rawInput, [key]);\n if (value) {\n setProp(rawInput, [key], value.substring(0, 10));\n }\n };\n\n fixDate(\"start_date\");\n fixDate(\"end_date\");\n }\n\n protected async _run(\n { location, start_date: startDate, end_date: endDate, ...input }: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: RunContext<this>,\n ) {\n const { apiKey } = this.options;\n\n const prepareParams = async () => {\n const extractLocation = async (): Promise<Location> => {\n if (\"name\" in location) {\n const response = await this._geocode(location, run.signal);\n return pick(response, [\"latitude\", \"longitude\"]);\n }\n return location;\n };\n\n function validateAndSetDates(\n startDateStr: string,\n endDateStr?: string,\n ): { start: Date; end: Date } {\n const now = new Date();\n const start = startDateStr\n ? new Date(startDateStr)\n : new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));\n\n if (endDateStr) {\n const end = new Date(endDateStr);\n if (end < start) {\n throw new ToolInputValidationError(\n `The 'end_date' (${endDateStr}) has to occur on or after the 'start_date' (${startDateStr}).`,\n );\n }\n return { start: start, end: end };\n } else {\n // If endDate is undefined, set it to the start date\n return { start: start, end: new Date(start) };\n }\n }\n\n const { start, end } = validateAndSetDates(startDate, endDate);\n\n const toDateString = (date: Date) => date.toISOString().split(\"T\")[0];\n\n return createURLParams({\n ...pickBy(input, (v) => !isNullish(v) && v !== \"\"),\n ...(await extractLocation()),\n start_date: toDateString(start),\n end_date: toDateString(end),\n current: [\"temperature_2m\", \"rain\", \"relative_humidity_2m\", \"wind_speed_10m\"],\n daily: [\"temperature_2m_max\", \"temperature_2m_min\", \"rain_sum\"],\n hourly: [\"temperature_2m\", \"relative_humidity_2m\", \"rain\"],\n timezone: \"UTC\",\n });\n };\n\n const params = await prepareParams();\n const response = await fetch(`https://api.open-meteo.com/v1/forecast?${params}`, {\n headers: {\n ...(apiKey && {\n Authorization: `Bearer ${apiKey}`,\n }),\n },\n signal: run.signal,\n });\n\n if (!response.ok) {\n throw new ToolError(\"Request to OpenMeteo API has failed!\", [\n new Error(await response.text()),\n ]);\n }\n\n let data: OpenMeteoToolResponse = await response.json();\n\n if (this.options?.responseFilter?.excludedKeys) {\n data = omit(data, this.options.responseFilter.excludedKeys);\n }\n\n return new OpenMeteoToolOutput(data);\n }\n\n @Cache()\n protected async _geocode(location: LocationSearch, signal: AbortSignal) {\n const { apiKey } = this.options;\n\n const params = createURLParams({\n name: location.name,\n language: location.language,\n country: location.country,\n format: \"json\",\n count: 1,\n });\n const response = await fetch(`https://geocoding-api.open-meteo.com/v1/search?${params}`, {\n headers: {\n ...(apiKey && {\n Authorization: `Bearer ${apiKey}`,\n }),\n },\n signal,\n });\n if (!response.ok) {\n throw new ToolError(`Failed to GeoCode provided location (${location.name}).`, [\n new Error(await response.text()),\n ]);\n }\n\n const { results } = await response.json();\n if (!results || results.length === 0) {\n throw new ToolError(`Location '${location.name}' was not found.`);\n }\n return results[0];\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/tools/weather/openMeteo.ts"],"names":["OpenMeteoToolOutput","JSONToolOutput","OpenMeteoTool","Tool","name","description","inputSchema","z","object","location","union","string","min","country","optional","language","default","strip","latitude","coerce","number","longitude","start_date","date","describe","end_date","temperature_unit","enum","emitter","Emitter","root","child","namespace","creator","register","options","responseFilter","excludedKeys","preprocessInput","rawInput","fixDate","key","value","getProp","setProp","substring","_run","startDate","endDate","input","_options","run","apiKey","prepareParams","extractLocation","response","_geocode","signal","pick","validateAndSetDates","startDateStr","endDateStr","now","Date","start","UTC","getFullYear","getMonth","getDate","end","ToolInputValidationError","toDateString","toISOString","split","createURLParams","pickBy","v","isNullish","current","daily","hourly","timezone","params","fetch","headers","Authorization","ok","ToolError","Error","text","data","json","omit","format","count","results","length"],"mappings":"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","file":"openMeteo.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolError,\n ToolInput,\n ToolInputValidationError,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { createURLParams } from \"@/internals/fetcher.js\";\nimport { isNullish, omit, pick, pickBy } from \"remeda\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { RunContext } from \"@/context.js\";\nimport { getProp, setProp } from \"@/internals/helpers/object.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface ResponseFilter {\n excludedKeys: (keyof OpenMeteoToolResponse)[];\n}\n\ninterface ToolOptions extends BaseToolOptions {\n apiKey?: string;\n responseFilter?: ResponseFilter;\n}\n\ntype ToolRunOptions = BaseToolRunOptions;\n\ninterface Location {\n latitude: number;\n longitude: number;\n}\n\ninterface LocationSearch {\n name: string;\n country?: string;\n language?: string;\n}\n\nexport interface OpenMeteoToolResponse {\n latitude?: number;\n longitude?: number;\n generationtime_ms?: number;\n utc_offset_seconds?: number;\n timezone?: string;\n timezone_abbreviation?: string;\n elevation?: number;\n current_units?: Record<string, string>;\n current?: Record<string, string>;\n hourly_units?: Record<string, string>;\n hourly?: Record<string, any[]>;\n daily_units?: Record<string, string>;\n daily?: Record<string, any[]>;\n}\n\nexport class OpenMeteoToolOutput extends JSONToolOutput<OpenMeteoToolResponse> {}\n\nexport class OpenMeteoTool extends Tool<OpenMeteoToolOutput, ToolOptions, ToolRunOptions> {\n name = \"OpenMeteo\";\n description = `Retrieve current, past, or future weather forecasts for a location.`;\n\n inputSchema() {\n return z\n .object({\n location: z.union([\n z\n .object({\n name: z.string().min(1),\n country: z.string().optional(),\n language: z.string().default(\"English\"),\n })\n .strip(),\n z\n .object({\n latitude: z.coerce.number(),\n longitude: z.coerce.number(),\n })\n .strip(),\n ]),\n start_date: z\n .string()\n .date()\n .describe(\"Start date for the weather forecast in the format YYYY-MM-DD (UTC)\"),\n end_date: z\n .string()\n .date()\n .describe(\"End date for the weather forecast in the format YYYY-MM-DD (UTC)\")\n .optional(),\n temperature_unit: z.enum([\"celsius\", \"fahrenheit\"]).default(\"celsius\"),\n })\n .strip();\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, OpenMeteoToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"weather\", \"openMeteo\"],\n creator: this,\n });\n\n static {\n this.register();\n }\n\n public constructor(options: Partial<ToolOptions> = {}) {\n super({\n ...options,\n responseFilter: options?.responseFilter ?? {\n excludedKeys: [\n \"latitude\",\n \"longitude\",\n \"generationtime_ms\",\n \"utc_offset_seconds\",\n \"timezone\",\n \"timezone_abbreviation\",\n \"elevation\",\n \"hourly\",\n \"hourly_units\",\n ],\n },\n });\n }\n\n protected preprocessInput(rawInput: unknown) {\n super.preprocessInput(rawInput);\n\n const fixDate = (key: keyof ToolInput<this>) => {\n const value = getProp(rawInput, [key]);\n if (value) {\n setProp(rawInput, [key], value.substring(0, 10));\n }\n };\n\n fixDate(\"start_date\");\n fixDate(\"end_date\");\n }\n\n protected async _run(\n { location, start_date: startDate, end_date: endDate, ...input }: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: RunContext<this>,\n ) {\n const { apiKey } = this.options;\n\n const prepareParams = async () => {\n const extractLocation = async (): Promise<Location> => {\n if (\"name\" in location) {\n const response = await this._geocode(location, run.signal);\n return pick(response, [\"latitude\", \"longitude\"]) as Location;\n }\n return location;\n };\n\n function validateAndSetDates(\n startDateStr: string,\n endDateStr?: string,\n ): { start: Date; end: Date } {\n const now = new Date();\n const start = startDateStr\n ? new Date(startDateStr)\n : new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));\n\n if (endDateStr) {\n const end = new Date(endDateStr);\n if (end < start) {\n throw new ToolInputValidationError(\n `The 'end_date' (${endDateStr}) has to occur on or after the 'start_date' (${startDateStr}).`,\n );\n }\n return { start: start, end: end };\n } else {\n // If endDate is undefined, set it to the start date\n return { start: start, end: new Date(start) };\n }\n }\n\n const { start, end } = validateAndSetDates(startDate, endDate);\n\n const toDateString = (date: Date) => date.toISOString().split(\"T\")[0];\n\n return createURLParams({\n ...pickBy(input, (v) => !isNullish(v) && v !== \"\"),\n ...(await extractLocation()),\n start_date: toDateString(start),\n end_date: toDateString(end),\n current: [\"temperature_2m\", \"rain\", \"relative_humidity_2m\", \"wind_speed_10m\"],\n daily: [\"temperature_2m_max\", \"temperature_2m_min\", \"rain_sum\"],\n hourly: [\"temperature_2m\", \"relative_humidity_2m\", \"rain\"],\n timezone: \"UTC\",\n });\n };\n\n const params = await prepareParams();\n const response = await fetch(`https://api.open-meteo.com/v1/forecast?${params}`, {\n headers: {\n ...(apiKey && {\n Authorization: `Bearer ${apiKey}`,\n }),\n },\n signal: run.signal,\n });\n\n if (!response.ok) {\n throw new ToolError(\"Request to OpenMeteo API has failed!\", [\n new Error(await response.text()),\n ]);\n }\n\n let data: OpenMeteoToolResponse = await response.json();\n\n if (this.options?.responseFilter?.excludedKeys) {\n data = omit(data, this.options.responseFilter.excludedKeys);\n }\n\n return new OpenMeteoToolOutput(data);\n }\n\n @Cache()\n protected async _geocode(location: LocationSearch, signal: AbortSignal) {\n const { apiKey } = this.options;\n\n const params = createURLParams({\n name: location.name,\n language: location.language,\n country: location.country,\n format: \"json\",\n count: 1,\n });\n const response = await fetch(`https://geocoding-api.open-meteo.com/v1/search?${params}`, {\n headers: {\n ...(apiKey && {\n Authorization: `Bearer ${apiKey}`,\n }),\n },\n signal,\n });\n if (!response.ok) {\n throw new ToolError(`Failed to GeoCode provided location (${location.name}).`, [\n new Error(await response.text()),\n ]);\n }\n\n const { results } = await response.json();\n if (!results || results.length === 0) {\n throw new ToolError(`Location '${location.name}' was not found.`);\n }\n return results[0];\n }\n}\n"]}
@@ -10,7 +10,7 @@ import 'promise-based-task';
10
10
  import '../../cache/base.cjs';
11
11
  import '../../internals/helpers/schema.cjs';
12
12
  import 'zod-to-json-schema';
13
- import '../../emitter-pJzHC_AM.cjs';
13
+ import '../../emitter-DpqUYjXH.cjs';
14
14
  import '../../internals/helpers/promise.cjs';
15
15
 
16
16
  /**
@@ -10,7 +10,7 @@ import 'promise-based-task';
10
10
  import '../../cache/base.js';
11
11
  import '../../internals/helpers/schema.js';
12
12
  import 'zod-to-json-schema';
13
- import '../../emitter-BqpLJQVb.js';
13
+ import '../../emitter-CZFbzlUi.js';
14
14
  import '../../internals/helpers/promise.js';
15
15
 
16
16
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/weather/openMeteo.ts"],"names":["OpenMeteoToolOutput","JSONToolOutput","OpenMeteoTool","Tool","name","description","inputSchema","z","object","location","union","string","min","country","optional","language","default","strip","latitude","coerce","number","longitude","start_date","date","describe","end_date","temperature_unit","enum","emitter","Emitter","root","child","namespace","creator","register","options","responseFilter","excludedKeys","preprocessInput","rawInput","fixDate","key","value","getProp","setProp","substring","_run","startDate","endDate","input","_options","run","apiKey","prepareParams","extractLocation","response","_geocode","signal","pick","validateAndSetDates","startDateStr","endDateStr","now","Date","start","UTC","getFullYear","getMonth","getDate","end","ToolInputValidationError","toDateString","toISOString","split","createURLParams","pickBy","v","isNullish","current","daily","hourly","timezone","params","fetch","headers","Authorization","ok","ToolError","Error","text","data","json","omit","format","count","results","length"],"mappings":"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","file":"openMeteo.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolError,\n ToolInput,\n ToolInputValidationError,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { createURLParams } from \"@/internals/fetcher.js\";\nimport { isNullish, omit, pick, pickBy } from \"remeda\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { RunContext } from \"@/context.js\";\nimport { getProp, setProp } from \"@/internals/helpers/object.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface ResponseFilter {\n excludedKeys: (keyof OpenMeteoToolResponse)[];\n}\n\ninterface ToolOptions extends BaseToolOptions {\n apiKey?: string;\n responseFilter?: ResponseFilter;\n}\n\ntype ToolRunOptions = BaseToolRunOptions;\n\ninterface Location {\n latitude: number;\n longitude: number;\n}\n\ninterface LocationSearch {\n name: string;\n country?: string;\n language?: string;\n}\n\nexport interface OpenMeteoToolResponse {\n latitude?: number;\n longitude?: number;\n generationtime_ms?: number;\n utc_offset_seconds?: number;\n timezone?: string;\n timezone_abbreviation?: string;\n elevation?: number;\n current_units?: Record<string, string>;\n current?: Record<string, string>;\n hourly_units?: Record<string, string>;\n hourly?: Record<string, any[]>;\n daily_units?: Record<string, string>;\n daily?: Record<string, any[]>;\n}\n\nexport class OpenMeteoToolOutput extends JSONToolOutput<OpenMeteoToolResponse> {}\n\nexport class OpenMeteoTool extends Tool<OpenMeteoToolOutput, ToolOptions, ToolRunOptions> {\n name = \"OpenMeteo\";\n description = `Retrieve current, past, or future weather forecasts for a location.`;\n\n inputSchema() {\n return z\n .object({\n location: z.union([\n z\n .object({\n name: z.string().min(1),\n country: z.string().optional(),\n language: z.string().default(\"English\"),\n })\n .strip(),\n z\n .object({\n latitude: z.coerce.number(),\n longitude: z.coerce.number(),\n })\n .strip(),\n ]),\n start_date: z\n .string()\n .date()\n .describe(\"Start date for the weather forecast in the format YYYY-MM-DD (UTC)\"),\n end_date: z\n .string()\n .date()\n .describe(\"End date for the weather forecast in the format YYYY-MM-DD (UTC)\")\n .optional(),\n temperature_unit: z.enum([\"celsius\", \"fahrenheit\"]).default(\"celsius\"),\n })\n .strip();\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, OpenMeteoToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"weather\", \"openMeteo\"],\n creator: this,\n });\n\n static {\n this.register();\n }\n\n public constructor(options: Partial<ToolOptions> = {}) {\n super({\n ...options,\n responseFilter: options?.responseFilter ?? {\n excludedKeys: [\n \"latitude\",\n \"longitude\",\n \"generationtime_ms\",\n \"utc_offset_seconds\",\n \"timezone\",\n \"timezone_abbreviation\",\n \"elevation\",\n \"hourly\",\n \"hourly_units\",\n ],\n },\n });\n }\n\n protected preprocessInput(rawInput: unknown) {\n super.preprocessInput(rawInput);\n\n const fixDate = (key: keyof ToolInput<this>) => {\n const value = getProp(rawInput, [key]);\n if (value) {\n setProp(rawInput, [key], value.substring(0, 10));\n }\n };\n\n fixDate(\"start_date\");\n fixDate(\"end_date\");\n }\n\n protected async _run(\n { location, start_date: startDate, end_date: endDate, ...input }: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: RunContext<this>,\n ) {\n const { apiKey } = this.options;\n\n const prepareParams = async () => {\n const extractLocation = async (): Promise<Location> => {\n if (\"name\" in location) {\n const response = await this._geocode(location, run.signal);\n return pick(response, [\"latitude\", \"longitude\"]);\n }\n return location;\n };\n\n function validateAndSetDates(\n startDateStr: string,\n endDateStr?: string,\n ): { start: Date; end: Date } {\n const now = new Date();\n const start = startDateStr\n ? new Date(startDateStr)\n : new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));\n\n if (endDateStr) {\n const end = new Date(endDateStr);\n if (end < start) {\n throw new ToolInputValidationError(\n `The 'end_date' (${endDateStr}) has to occur on or after the 'start_date' (${startDateStr}).`,\n );\n }\n return { start: start, end: end };\n } else {\n // If endDate is undefined, set it to the start date\n return { start: start, end: new Date(start) };\n }\n }\n\n const { start, end } = validateAndSetDates(startDate, endDate);\n\n const toDateString = (date: Date) => date.toISOString().split(\"T\")[0];\n\n return createURLParams({\n ...pickBy(input, (v) => !isNullish(v) && v !== \"\"),\n ...(await extractLocation()),\n start_date: toDateString(start),\n end_date: toDateString(end),\n current: [\"temperature_2m\", \"rain\", \"relative_humidity_2m\", \"wind_speed_10m\"],\n daily: [\"temperature_2m_max\", \"temperature_2m_min\", \"rain_sum\"],\n hourly: [\"temperature_2m\", \"relative_humidity_2m\", \"rain\"],\n timezone: \"UTC\",\n });\n };\n\n const params = await prepareParams();\n const response = await fetch(`https://api.open-meteo.com/v1/forecast?${params}`, {\n headers: {\n ...(apiKey && {\n Authorization: `Bearer ${apiKey}`,\n }),\n },\n signal: run.signal,\n });\n\n if (!response.ok) {\n throw new ToolError(\"Request to OpenMeteo API has failed!\", [\n new Error(await response.text()),\n ]);\n }\n\n let data: OpenMeteoToolResponse = await response.json();\n\n if (this.options?.responseFilter?.excludedKeys) {\n data = omit(data, this.options.responseFilter.excludedKeys);\n }\n\n return new OpenMeteoToolOutput(data);\n }\n\n @Cache()\n protected async _geocode(location: LocationSearch, signal: AbortSignal) {\n const { apiKey } = this.options;\n\n const params = createURLParams({\n name: location.name,\n language: location.language,\n country: location.country,\n format: \"json\",\n count: 1,\n });\n const response = await fetch(`https://geocoding-api.open-meteo.com/v1/search?${params}`, {\n headers: {\n ...(apiKey && {\n Authorization: `Bearer ${apiKey}`,\n }),\n },\n signal,\n });\n if (!response.ok) {\n throw new ToolError(`Failed to GeoCode provided location (${location.name}).`, [\n new Error(await response.text()),\n ]);\n }\n\n const { results } = await response.json();\n if (!results || results.length === 0) {\n throw new ToolError(`Location '${location.name}' was not found.`);\n }\n return results[0];\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/tools/weather/openMeteo.ts"],"names":["OpenMeteoToolOutput","JSONToolOutput","OpenMeteoTool","Tool","name","description","inputSchema","z","object","location","union","string","min","country","optional","language","default","strip","latitude","coerce","number","longitude","start_date","date","describe","end_date","temperature_unit","enum","emitter","Emitter","root","child","namespace","creator","register","options","responseFilter","excludedKeys","preprocessInput","rawInput","fixDate","key","value","getProp","setProp","substring","_run","startDate","endDate","input","_options","run","apiKey","prepareParams","extractLocation","response","_geocode","signal","pick","validateAndSetDates","startDateStr","endDateStr","now","Date","start","UTC","getFullYear","getMonth","getDate","end","ToolInputValidationError","toDateString","toISOString","split","createURLParams","pickBy","v","isNullish","current","daily","hourly","timezone","params","fetch","headers","Authorization","ok","ToolError","Error","text","data","json","omit","format","count","results","length"],"mappings":"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","file":"openMeteo.js","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolError,\n ToolInput,\n ToolInputValidationError,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { createURLParams } from \"@/internals/fetcher.js\";\nimport { isNullish, omit, pick, pickBy } from \"remeda\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { RunContext } from \"@/context.js\";\nimport { getProp, setProp } from \"@/internals/helpers/object.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nexport interface ResponseFilter {\n excludedKeys: (keyof OpenMeteoToolResponse)[];\n}\n\ninterface ToolOptions extends BaseToolOptions {\n apiKey?: string;\n responseFilter?: ResponseFilter;\n}\n\ntype ToolRunOptions = BaseToolRunOptions;\n\ninterface Location {\n latitude: number;\n longitude: number;\n}\n\ninterface LocationSearch {\n name: string;\n country?: string;\n language?: string;\n}\n\nexport interface OpenMeteoToolResponse {\n latitude?: number;\n longitude?: number;\n generationtime_ms?: number;\n utc_offset_seconds?: number;\n timezone?: string;\n timezone_abbreviation?: string;\n elevation?: number;\n current_units?: Record<string, string>;\n current?: Record<string, string>;\n hourly_units?: Record<string, string>;\n hourly?: Record<string, any[]>;\n daily_units?: Record<string, string>;\n daily?: Record<string, any[]>;\n}\n\nexport class OpenMeteoToolOutput extends JSONToolOutput<OpenMeteoToolResponse> {}\n\nexport class OpenMeteoTool extends Tool<OpenMeteoToolOutput, ToolOptions, ToolRunOptions> {\n name = \"OpenMeteo\";\n description = `Retrieve current, past, or future weather forecasts for a location.`;\n\n inputSchema() {\n return z\n .object({\n location: z.union([\n z\n .object({\n name: z.string().min(1),\n country: z.string().optional(),\n language: z.string().default(\"English\"),\n })\n .strip(),\n z\n .object({\n latitude: z.coerce.number(),\n longitude: z.coerce.number(),\n })\n .strip(),\n ]),\n start_date: z\n .string()\n .date()\n .describe(\"Start date for the weather forecast in the format YYYY-MM-DD (UTC)\"),\n end_date: z\n .string()\n .date()\n .describe(\"End date for the weather forecast in the format YYYY-MM-DD (UTC)\")\n .optional(),\n temperature_unit: z.enum([\"celsius\", \"fahrenheit\"]).default(\"celsius\"),\n })\n .strip();\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, OpenMeteoToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"weather\", \"openMeteo\"],\n creator: this,\n });\n\n static {\n this.register();\n }\n\n public constructor(options: Partial<ToolOptions> = {}) {\n super({\n ...options,\n responseFilter: options?.responseFilter ?? {\n excludedKeys: [\n \"latitude\",\n \"longitude\",\n \"generationtime_ms\",\n \"utc_offset_seconds\",\n \"timezone\",\n \"timezone_abbreviation\",\n \"elevation\",\n \"hourly\",\n \"hourly_units\",\n ],\n },\n });\n }\n\n protected preprocessInput(rawInput: unknown) {\n super.preprocessInput(rawInput);\n\n const fixDate = (key: keyof ToolInput<this>) => {\n const value = getProp(rawInput, [key]);\n if (value) {\n setProp(rawInput, [key], value.substring(0, 10));\n }\n };\n\n fixDate(\"start_date\");\n fixDate(\"end_date\");\n }\n\n protected async _run(\n { location, start_date: startDate, end_date: endDate, ...input }: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: RunContext<this>,\n ) {\n const { apiKey } = this.options;\n\n const prepareParams = async () => {\n const extractLocation = async (): Promise<Location> => {\n if (\"name\" in location) {\n const response = await this._geocode(location, run.signal);\n return pick(response, [\"latitude\", \"longitude\"]) as Location;\n }\n return location;\n };\n\n function validateAndSetDates(\n startDateStr: string,\n endDateStr?: string,\n ): { start: Date; end: Date } {\n const now = new Date();\n const start = startDateStr\n ? new Date(startDateStr)\n : new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));\n\n if (endDateStr) {\n const end = new Date(endDateStr);\n if (end < start) {\n throw new ToolInputValidationError(\n `The 'end_date' (${endDateStr}) has to occur on or after the 'start_date' (${startDateStr}).`,\n );\n }\n return { start: start, end: end };\n } else {\n // If endDate is undefined, set it to the start date\n return { start: start, end: new Date(start) };\n }\n }\n\n const { start, end } = validateAndSetDates(startDate, endDate);\n\n const toDateString = (date: Date) => date.toISOString().split(\"T\")[0];\n\n return createURLParams({\n ...pickBy(input, (v) => !isNullish(v) && v !== \"\"),\n ...(await extractLocation()),\n start_date: toDateString(start),\n end_date: toDateString(end),\n current: [\"temperature_2m\", \"rain\", \"relative_humidity_2m\", \"wind_speed_10m\"],\n daily: [\"temperature_2m_max\", \"temperature_2m_min\", \"rain_sum\"],\n hourly: [\"temperature_2m\", \"relative_humidity_2m\", \"rain\"],\n timezone: \"UTC\",\n });\n };\n\n const params = await prepareParams();\n const response = await fetch(`https://api.open-meteo.com/v1/forecast?${params}`, {\n headers: {\n ...(apiKey && {\n Authorization: `Bearer ${apiKey}`,\n }),\n },\n signal: run.signal,\n });\n\n if (!response.ok) {\n throw new ToolError(\"Request to OpenMeteo API has failed!\", [\n new Error(await response.text()),\n ]);\n }\n\n let data: OpenMeteoToolResponse = await response.json();\n\n if (this.options?.responseFilter?.excludedKeys) {\n data = omit(data, this.options.responseFilter.excludedKeys);\n }\n\n return new OpenMeteoToolOutput(data);\n }\n\n @Cache()\n protected async _geocode(location: LocationSearch, signal: AbortSignal) {\n const { apiKey } = this.options;\n\n const params = createURLParams({\n name: location.name,\n language: location.language,\n country: location.country,\n format: \"json\",\n count: 1,\n });\n const response = await fetch(`https://geocoding-api.open-meteo.com/v1/search?${params}`, {\n headers: {\n ...(apiKey && {\n Authorization: `Bearer ${apiKey}`,\n }),\n },\n signal,\n });\n if (!response.ok) {\n throw new ToolError(`Failed to GeoCode provided location (${location.name}).`, [\n new Error(await response.text()),\n ]);\n }\n\n const { results } = await response.json();\n if (!results || results.length === 0) {\n throw new ToolError(`Location '${location.name}' was not found.`);\n }\n return results[0];\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/web/webCrawler.ts"],"names":["WebCrawlerToolOutput","JSONToolOutput","getTextContent","result","url","statusCode","statusText","contentType","content","join","defaultParser","response","text","headers","get","includes","stripHtml","WebCrawlerTool","Tool","name","description","inputSchema","z","object","string","describe","client","parser","emitter","Emitter","root","child","namespace","creator","options","fetch","_run","_options","run","redirect","request","signal","status","createSnapshot","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"webCrawler.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolInput,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { stripHtml } from \"string-strip-html\";\nimport { RunContext } from \"@/context.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\ninterface CrawlerOutput {\n url: string;\n statusCode: number;\n statusText: string;\n contentType: string;\n content: string;\n}\n\nexport class WebCrawlerToolOutput extends JSONToolOutput<CrawlerOutput> {\n @Cache()\n getTextContent(): string {\n return [\n `URL: ${this.result.url}`,\n `STATUS: ${this.result.statusCode} (${this.result.statusText})`,\n `CONTENT-TYPE: ${this.result.contentType}`,\n `CONTENT: ${this.result.content}`,\n ].join(\"\\n\");\n }\n}\n\nexport type HttpClient = (url: string, options?: RequestInit) => Promise<HttpClientResponse>;\ninterface HttpClientResponse {\n status: number;\n statusText: string;\n headers: Headers;\n text(): Promise<string>;\n}\n\ntype Parser = (response: HttpClientResponse) => Promise<string>;\ninterface WebsiteCrawlerToolOptions extends BaseToolOptions {\n client?: HttpClient;\n parser?: Parser;\n request?: RequestInit;\n}\n\nasync function defaultParser(response: HttpClientResponse) {\n const text = await response.text();\n if (text) {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"text/html\")) {\n return stripHtml(text).result;\n }\n }\n return text || \"No Content\";\n}\n\nexport class WebCrawlerTool extends Tool<WebCrawlerToolOutput, WebsiteCrawlerToolOptions> {\n name = \"WebCrawler\";\n description = `Retrieves content of an arbitrary website.`;\n inputSchema() {\n return z.object({\n url: z.string().url().describe(\"Website URL\"),\n });\n }\n\n protected client: HttpClient;\n protected parser: Parser;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WebCrawlerToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"webCrawler\"],\n creator: this,\n });\n\n constructor({ client, parser, ...options }: WebsiteCrawlerToolOptions = {}) {\n super(options);\n this.client = client ?? fetch;\n this.parser = parser ?? defaultParser;\n }\n\n protected async _run(\n { url }: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: RunContext<this>,\n ) {\n const response = await this.client(url, {\n redirect: \"follow\",\n ...this.options.request,\n signal: run.signal,\n });\n\n const content = await this.parser(response);\n return new WebCrawlerToolOutput({\n url,\n statusCode: response.status,\n statusText: response.statusText,\n contentType: response.headers.get(\"content-type\") ?? \"unknown\",\n content,\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n client: this.client,\n parser: this.parser,\n };\n }\n\n loadSnapshot({ client, parser, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n Object.assign(this, {\n client: client ?? fetch,\n parser: parser ?? defaultParser,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/tools/web/webCrawler.ts"],"names":["WebCrawlerToolOutput","JSONToolOutput","getTextContent","result","url","statusCode","statusText","contentType","content","join","defaultParser","response","text","headers","get","includes","stripHtml","WebCrawlerTool","Tool","name","description","inputSchema","z","object","string","describe","client","parser","emitter","Emitter","root","child","namespace","creator","options","fetch","_run","_options","run","redirect","request","signal","status","createSnapshot","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"webCrawler.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolInput,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { stripHtml } from \"string-strip-html\";\nimport { RunContext } from \"@/context.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\ninterface CrawlerOutput {\n url: string;\n statusCode: number;\n statusText: string;\n contentType: string;\n content: string;\n}\n\nexport class WebCrawlerToolOutput extends JSONToolOutput<CrawlerOutput> {\n @Cache()\n getTextContent(): string {\n return [\n `URL: ${this.result.url}`,\n `STATUS: ${this.result.statusCode} (${this.result.statusText})`,\n `CONTENT-TYPE: ${this.result.contentType}`,\n `CONTENT: ${this.result.content}`,\n ].join(\"\\n\");\n }\n}\n\nexport type HttpClient = (url: string, options?: RequestInit) => Promise<HttpClientResponse>;\ninterface HttpClientResponse {\n status: number;\n statusText: string;\n headers: Headers;\n text(): Promise<string>;\n}\n\ntype Parser = (response: HttpClientResponse) => Promise<string>;\ninterface WebsiteCrawlerToolOptions extends BaseToolOptions {\n client?: HttpClient;\n parser?: Parser;\n request?: RequestInit;\n}\n\nasync function defaultParser(response: HttpClientResponse) {\n const text = await response.text();\n if (text) {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"text/html\")) {\n return stripHtml(text).result;\n }\n }\n return text || \"No Content\";\n}\n\nexport class WebCrawlerTool extends Tool<WebCrawlerToolOutput, WebsiteCrawlerToolOptions> {\n name = \"WebCrawler\";\n description = `Retrieves content of an arbitrary website.`;\n inputSchema() {\n return z.object({\n url: z.string().url().describe(\"Website URL\"),\n });\n }\n\n protected client: HttpClient;\n protected parser: Parser;\n\n public readonly emitter: ToolEmitter<ToolInput<this>, WebCrawlerToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"webCrawler\"],\n creator: this,\n });\n\n constructor({ client, parser, ...options }: WebsiteCrawlerToolOptions = {}) {\n super(options);\n this.client = client ?? fetch;\n this.parser = parser ?? defaultParser;\n }\n\n protected async _run(\n { url }: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: RunContext<this>,\n ) {\n const response = await this.client(url, {\n redirect: \"follow\",\n ...this.options.request,\n signal: run.signal,\n });\n\n const content = await this.parser(response);\n return new WebCrawlerToolOutput({\n url,\n statusCode: response.status,\n statusText: response.statusText,\n contentType: response.headers.get(\"content-type\") ?? \"unknown\",\n content,\n });\n }\n\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n client: this.client,\n parser: this.parser,\n };\n }\n\n loadSnapshot({ client, parser, ...snapshot }: ReturnType<typeof this.createSnapshot>) {\n super.loadSnapshot(snapshot);\n Object.assign(this, {\n client: client ?? fetch,\n parser: parser ?? defaultParser,\n });\n }\n}\n"]}
@@ -3,7 +3,7 @@ import * as promise_based_task from 'promise-based-task';
3
3
  import { JSONToolOutput, Tool, BaseToolOptions, ToolEmitter, ToolInput, BaseToolRunOptions } from '../base.cjs';
4
4
  import { z } from 'zod';
5
5
  import { RunContext } from '../../context.cjs';
6
- import { E as Emitter } from '../../emitter-pJzHC_AM.cjs';
6
+ import { E as Emitter } from '../../emitter-DpqUYjXH.cjs';
7
7
  import '../../internals/serializable.cjs';
8
8
  import '../../internals/types.cjs';
9
9
  import '../../internals/helpers/guards.cjs';