beeai-framework 0.1.3 → 0.1.5

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 (451) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/amazon-bedrock/backend/chat.cjs.map +1 -1
  3. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +1 -1
  4. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +1 -1
  5. package/dist/adapters/amazon-bedrock/backend/chat.js.map +1 -1
  6. package/dist/adapters/amazon-bedrock/backend/client.cjs.map +1 -1
  7. package/dist/adapters/amazon-bedrock/backend/client.js.map +1 -1
  8. package/dist/adapters/amazon-bedrock/backend/embedding.cjs.map +1 -1
  9. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +1 -1
  10. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +1 -1
  11. package/dist/adapters/amazon-bedrock/backend/embedding.js.map +1 -1
  12. package/dist/adapters/anthropic/backend/chat.cjs.map +1 -1
  13. package/dist/adapters/anthropic/backend/chat.d.cts +1 -1
  14. package/dist/adapters/anthropic/backend/chat.d.ts +1 -1
  15. package/dist/adapters/anthropic/backend/chat.js.map +1 -1
  16. package/dist/adapters/anthropic/backend/client.cjs.map +1 -1
  17. package/dist/adapters/anthropic/backend/client.js.map +1 -1
  18. package/dist/adapters/anthropic/backend/embedding.cjs.map +1 -1
  19. package/dist/adapters/anthropic/backend/embedding.d.cts +1 -1
  20. package/dist/adapters/anthropic/backend/embedding.d.ts +1 -1
  21. package/dist/adapters/anthropic/backend/embedding.js.map +1 -1
  22. package/dist/adapters/azure-openai/backend/chat.cjs.map +1 -1
  23. package/dist/adapters/azure-openai/backend/chat.d.cts +2 -2
  24. package/dist/adapters/azure-openai/backend/chat.d.ts +2 -2
  25. package/dist/adapters/azure-openai/backend/chat.js.map +1 -1
  26. package/dist/adapters/azure-openai/backend/client.cjs.map +1 -1
  27. package/dist/adapters/azure-openai/backend/client.js.map +1 -1
  28. package/dist/adapters/azure-openai/backend/embedding.cjs.map +1 -1
  29. package/dist/adapters/azure-openai/backend/embedding.d.cts +1 -1
  30. package/dist/adapters/azure-openai/backend/embedding.d.ts +1 -1
  31. package/dist/adapters/azure-openai/backend/embedding.js.map +1 -1
  32. package/dist/adapters/dummy/backend/chat.cjs.map +1 -1
  33. package/dist/adapters/dummy/backend/chat.d.cts +1 -1
  34. package/dist/adapters/dummy/backend/chat.d.ts +1 -1
  35. package/dist/adapters/dummy/backend/chat.js.map +1 -1
  36. package/dist/adapters/dummy/backend/embedding.cjs.map +1 -1
  37. package/dist/adapters/dummy/backend/embedding.d.cts +1 -1
  38. package/dist/adapters/dummy/backend/embedding.d.ts +1 -1
  39. package/dist/adapters/dummy/backend/embedding.js.map +1 -1
  40. package/dist/adapters/google-vertex/backend/chat.cjs.map +1 -1
  41. package/dist/adapters/google-vertex/backend/chat.d.cts +1 -1
  42. package/dist/adapters/google-vertex/backend/chat.d.ts +1 -1
  43. package/dist/adapters/google-vertex/backend/chat.js.map +1 -1
  44. package/dist/adapters/google-vertex/backend/client.cjs.map +1 -1
  45. package/dist/adapters/google-vertex/backend/client.js.map +1 -1
  46. package/dist/adapters/google-vertex/backend/embedding.cjs.map +1 -1
  47. package/dist/adapters/google-vertex/backend/embedding.d.cts +1 -1
  48. package/dist/adapters/google-vertex/backend/embedding.d.ts +1 -1
  49. package/dist/adapters/google-vertex/backend/embedding.js.map +1 -1
  50. package/dist/adapters/groq/backend/chat.cjs.map +1 -1
  51. package/dist/adapters/groq/backend/chat.d.cts +1 -1
  52. package/dist/adapters/groq/backend/chat.d.ts +1 -1
  53. package/dist/adapters/groq/backend/chat.js.map +1 -1
  54. package/dist/adapters/groq/backend/client.cjs.map +1 -1
  55. package/dist/adapters/groq/backend/client.js.map +1 -1
  56. package/dist/adapters/groq/backend/embedding.cjs.map +1 -1
  57. package/dist/adapters/groq/backend/embedding.d.cts +1 -1
  58. package/dist/adapters/groq/backend/embedding.d.ts +1 -1
  59. package/dist/adapters/groq/backend/embedding.js.map +1 -1
  60. package/dist/adapters/langchain/backend/chat.cjs.map +1 -1
  61. package/dist/adapters/langchain/backend/chat.d.cts +1 -1
  62. package/dist/adapters/langchain/backend/chat.d.ts +1 -1
  63. package/dist/adapters/langchain/backend/chat.js.map +1 -1
  64. package/dist/adapters/langchain/backend/embedding.cjs.map +1 -1
  65. package/dist/adapters/langchain/backend/embedding.d.cts +1 -1
  66. package/dist/adapters/langchain/backend/embedding.d.ts +1 -1
  67. package/dist/adapters/langchain/backend/embedding.js.map +1 -1
  68. package/dist/adapters/langchain/tools.cjs.map +1 -1
  69. package/dist/adapters/langchain/tools.d.cts +1 -1
  70. package/dist/adapters/langchain/tools.d.ts +1 -1
  71. package/dist/adapters/langchain/tools.js.map +1 -1
  72. package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
  73. package/dist/adapters/ollama/backend/chat.d.cts +1 -1
  74. package/dist/adapters/ollama/backend/chat.d.ts +1 -1
  75. package/dist/adapters/ollama/backend/chat.js.map +1 -1
  76. package/dist/adapters/ollama/backend/client.cjs.map +1 -1
  77. package/dist/adapters/ollama/backend/client.js.map +1 -1
  78. package/dist/adapters/ollama/backend/embedding.cjs.map +1 -1
  79. package/dist/adapters/ollama/backend/embedding.d.cts +1 -1
  80. package/dist/adapters/ollama/backend/embedding.d.ts +1 -1
  81. package/dist/adapters/ollama/backend/embedding.js.map +1 -1
  82. package/dist/adapters/openai/backend/chat.cjs.map +1 -1
  83. package/dist/adapters/openai/backend/chat.d.cts +1 -1
  84. package/dist/adapters/openai/backend/chat.d.ts +1 -1
  85. package/dist/adapters/openai/backend/chat.js.map +1 -1
  86. package/dist/adapters/openai/backend/client.cjs.map +1 -1
  87. package/dist/adapters/openai/backend/client.js.map +1 -1
  88. package/dist/adapters/openai/backend/embedding.cjs.map +1 -1
  89. package/dist/adapters/openai/backend/embedding.d.cts +2 -2
  90. package/dist/adapters/openai/backend/embedding.d.ts +2 -2
  91. package/dist/adapters/openai/backend/embedding.js.map +1 -1
  92. package/dist/adapters/vercel/backend/chat.cjs +2 -2
  93. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  94. package/dist/adapters/vercel/backend/chat.d.cts +1 -1
  95. package/dist/adapters/vercel/backend/chat.d.ts +1 -1
  96. package/dist/adapters/vercel/backend/chat.js +2 -2
  97. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  98. package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
  99. package/dist/adapters/vercel/backend/embedding.d.cts +5 -5
  100. package/dist/adapters/vercel/backend/embedding.d.ts +5 -5
  101. package/dist/adapters/vercel/backend/embedding.js.map +1 -1
  102. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  103. package/dist/adapters/watsonx/backend/chat.d.cts +1 -1
  104. package/dist/adapters/watsonx/backend/chat.d.ts +1 -1
  105. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  106. package/dist/adapters/watsonx/backend/client.cjs.map +1 -1
  107. package/dist/adapters/watsonx/backend/client.js.map +1 -1
  108. package/dist/adapters/watsonx/backend/embedding.cjs.map +1 -1
  109. package/dist/adapters/watsonx/backend/embedding.d.cts +1 -1
  110. package/dist/adapters/watsonx/backend/embedding.d.ts +1 -1
  111. package/dist/adapters/watsonx/backend/embedding.js.map +1 -1
  112. package/dist/{agent-D9gpIPf2.d.ts → agent-DNfflu8t.d.ts} +4 -4
  113. package/dist/{agent-xmwFrFrh.d.cts → agent-wkCuP7e1.d.cts} +4 -4
  114. package/dist/agents/base.cjs +1 -1
  115. package/dist/agents/base.cjs.map +1 -1
  116. package/dist/agents/base.d.cts +2 -2
  117. package/dist/agents/base.d.ts +2 -2
  118. package/dist/agents/base.js +1 -1
  119. package/dist/agents/base.js.map +1 -1
  120. package/dist/agents/bee/agent.cjs.map +1 -1
  121. package/dist/agents/bee/agent.d.cts +3 -3
  122. package/dist/agents/bee/agent.d.ts +3 -3
  123. package/dist/agents/bee/agent.js.map +1 -1
  124. package/dist/agents/bee/prompts.cjs.map +1 -1
  125. package/dist/agents/bee/prompts.js.map +1 -1
  126. package/dist/agents/bee/runners/base.cjs.map +1 -1
  127. package/dist/agents/bee/runners/base.d.cts +3 -3
  128. package/dist/agents/bee/runners/base.d.ts +3 -3
  129. package/dist/agents/bee/runners/base.js.map +1 -1
  130. package/dist/agents/bee/runners/deep-think/prompts.cjs.map +1 -1
  131. package/dist/agents/bee/runners/deep-think/prompts.js.map +1 -1
  132. package/dist/agents/bee/runners/deep-think/runner.cjs +11 -11
  133. package/dist/agents/bee/runners/deep-think/runner.cjs.map +1 -1
  134. package/dist/agents/bee/runners/deep-think/runner.d.cts +3 -3
  135. package/dist/agents/bee/runners/deep-think/runner.d.ts +3 -3
  136. package/dist/agents/bee/runners/deep-think/runner.js +2 -2
  137. package/dist/agents/bee/runners/deep-think/runner.js.map +1 -1
  138. package/dist/agents/bee/runners/default/runner.cjs.map +1 -1
  139. package/dist/agents/bee/runners/default/runner.d.cts +3 -3
  140. package/dist/agents/bee/runners/default/runner.d.ts +3 -3
  141. package/dist/agents/bee/runners/default/runner.js +1 -1
  142. package/dist/agents/bee/runners/default/runner.js.map +1 -1
  143. package/dist/agents/bee/runners/default/runner.spec.cjs.map +1 -1
  144. package/dist/agents/bee/runners/default/runner.spec.js.map +1 -1
  145. package/dist/agents/bee/runners/granite/prompts.cjs.map +1 -1
  146. package/dist/agents/bee/runners/granite/prompts.js.map +1 -1
  147. package/dist/agents/bee/runners/granite/runner.cjs +11 -11
  148. package/dist/agents/bee/runners/granite/runner.cjs.map +1 -1
  149. package/dist/agents/bee/runners/granite/runner.d.cts +3 -3
  150. package/dist/agents/bee/runners/granite/runner.d.ts +3 -3
  151. package/dist/agents/bee/runners/granite/runner.js +2 -2
  152. package/dist/agents/bee/runners/granite/runner.js.map +1 -1
  153. package/dist/agents/bee/types.d.cts +1 -1
  154. package/dist/agents/bee/types.d.ts +1 -1
  155. package/dist/agents/experimental/replan/agent.cjs.map +1 -1
  156. package/dist/agents/experimental/replan/agent.d.cts +2 -2
  157. package/dist/agents/experimental/replan/agent.d.ts +2 -2
  158. package/dist/agents/experimental/replan/agent.js.map +1 -1
  159. package/dist/agents/experimental/replan/prompts.cjs.map +1 -1
  160. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  161. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  162. package/dist/agents/experimental/replan/prompts.js.map +1 -1
  163. package/dist/agents/experimental/streamlit/agent.cjs.map +1 -1
  164. package/dist/agents/experimental/streamlit/agent.d.cts +2 -2
  165. package/dist/agents/experimental/streamlit/agent.d.ts +2 -2
  166. package/dist/agents/experimental/streamlit/agent.js.map +1 -1
  167. package/dist/agents/experimental/streamlit/prompts.cjs.map +1 -1
  168. package/dist/agents/experimental/streamlit/prompts.js.map +1 -1
  169. package/dist/agents/types.d.cts +2 -2
  170. package/dist/agents/types.d.ts +2 -2
  171. package/dist/backend/backend.cjs.map +1 -1
  172. package/dist/backend/backend.d.cts +1 -1
  173. package/dist/backend/backend.d.ts +1 -1
  174. package/dist/backend/backend.js.map +1 -1
  175. package/dist/backend/chat.cjs +1 -1
  176. package/dist/backend/chat.cjs.map +1 -1
  177. package/dist/backend/chat.d.cts +1 -1
  178. package/dist/backend/chat.d.ts +1 -1
  179. package/dist/backend/chat.js +1 -1
  180. package/dist/backend/chat.js.map +1 -1
  181. package/dist/backend/client.cjs.map +1 -1
  182. package/dist/backend/client.js.map +1 -1
  183. package/dist/backend/constants.cjs.map +1 -1
  184. package/dist/backend/constants.js.map +1 -1
  185. package/dist/backend/core.d.cts +1 -1
  186. package/dist/backend/core.d.ts +1 -1
  187. package/dist/backend/embedding.cjs +1 -1
  188. package/dist/backend/embedding.cjs.map +1 -1
  189. package/dist/backend/embedding.d.cts +1 -1
  190. package/dist/backend/embedding.d.ts +1 -1
  191. package/dist/backend/embedding.js +1 -1
  192. package/dist/backend/embedding.js.map +1 -1
  193. package/dist/backend/errors.cjs.map +1 -1
  194. package/dist/backend/errors.js.map +1 -1
  195. package/dist/backend/message.cjs.map +1 -1
  196. package/dist/backend/message.js.map +1 -1
  197. package/dist/backend/utils.cjs +2 -1
  198. package/dist/backend/utils.cjs.map +1 -1
  199. package/dist/backend/utils.js +2 -1
  200. package/dist/backend/utils.js.map +1 -1
  201. package/dist/{base-daM6fHUP.d.cts → base-Csr9guq2.d.cts} +1 -1
  202. package/dist/{base-mmG-8Pk9.d.ts → base-DHhpWHQm.d.ts} +1 -1
  203. package/dist/cache/base.cjs.map +1 -1
  204. package/dist/cache/base.js.map +1 -1
  205. package/dist/cache/decoratorCache.cjs.map +1 -1
  206. package/dist/cache/decoratorCache.js.map +1 -1
  207. package/dist/cache/fileCache.cjs.map +1 -1
  208. package/dist/cache/fileCache.js.map +1 -1
  209. package/dist/cache/nullCache.cjs.map +1 -1
  210. package/dist/cache/nullCache.js.map +1 -1
  211. package/dist/cache/slidingCache.cjs.map +1 -1
  212. package/dist/cache/slidingCache.js.map +1 -1
  213. package/dist/cache/unconstrainedCache.cjs.map +1 -1
  214. package/dist/cache/unconstrainedCache.js.map +1 -1
  215. package/dist/context.cjs.map +1 -1
  216. package/dist/context.d.cts +1 -1
  217. package/dist/context.d.ts +1 -1
  218. package/dist/context.js.map +1 -1
  219. package/dist/emitter/emitter.cjs.map +1 -1
  220. package/dist/emitter/emitter.d.cts +1 -1
  221. package/dist/emitter/emitter.d.ts +1 -1
  222. package/dist/emitter/emitter.js.map +1 -1
  223. package/dist/emitter/errors.cjs.map +1 -1
  224. package/dist/emitter/errors.js.map +1 -1
  225. package/dist/emitter/types.d.cts +1 -1
  226. package/dist/emitter/types.d.ts +1 -1
  227. package/dist/emitter/utils.cjs.map +1 -1
  228. package/dist/emitter/utils.js.map +1 -1
  229. package/dist/errors.cjs +4 -4
  230. package/dist/errors.cjs.map +1 -1
  231. package/dist/errors.js +4 -4
  232. package/dist/errors.js.map +1 -1
  233. package/dist/index.d.cts +2 -2
  234. package/dist/index.d.ts +2 -2
  235. package/dist/instrumentation/config.cjs.map +1 -1
  236. package/dist/instrumentation/config.js.map +1 -1
  237. package/dist/instrumentation/create-telemetry-middleware.cjs +1 -1
  238. package/dist/instrumentation/create-telemetry-middleware.cjs.map +1 -1
  239. package/dist/instrumentation/create-telemetry-middleware.d.cts +1 -1
  240. package/dist/instrumentation/create-telemetry-middleware.d.ts +1 -1
  241. package/dist/instrumentation/create-telemetry-middleware.js +1 -1
  242. package/dist/instrumentation/create-telemetry-middleware.js.map +1 -1
  243. package/dist/instrumentation/helpers/create-span.cjs.map +1 -1
  244. package/dist/instrumentation/helpers/create-span.js.map +1 -1
  245. package/dist/instrumentation/helpers/get-error-safe.cjs.map +1 -1
  246. package/dist/instrumentation/helpers/get-error-safe.js.map +1 -1
  247. package/dist/instrumentation/helpers/get-serialized-object-safe.cjs.map +1 -1
  248. package/dist/instrumentation/helpers/get-serialized-object-safe.js.map +1 -1
  249. package/dist/instrumentation/helpers/id-name-manager.cjs.map +1 -1
  250. package/dist/instrumentation/helpers/id-name-manager.js.map +1 -1
  251. package/dist/instrumentation/helpers/trace-serializer.cjs.map +1 -1
  252. package/dist/instrumentation/helpers/trace-serializer.js.map +1 -1
  253. package/dist/instrumentation/helpers/utils.cjs.map +1 -1
  254. package/dist/instrumentation/helpers/utils.d.cts +1 -1
  255. package/dist/instrumentation/helpers/utils.d.ts +1 -1
  256. package/dist/instrumentation/helpers/utils.js.map +1 -1
  257. package/dist/instrumentation/logger.cjs.map +1 -1
  258. package/dist/instrumentation/logger.js.map +1 -1
  259. package/dist/instrumentation/tracer.cjs.map +1 -1
  260. package/dist/instrumentation/tracer.js.map +1 -1
  261. package/dist/internals/env.cjs +2 -2
  262. package/dist/internals/env.cjs.map +1 -1
  263. package/dist/internals/env.js +2 -2
  264. package/dist/internals/env.js.map +1 -1
  265. package/dist/internals/fetcher.cjs.map +1 -1
  266. package/dist/internals/fetcher.d.cts +1 -1
  267. package/dist/internals/fetcher.d.ts +1 -1
  268. package/dist/internals/fetcher.js.map +1 -1
  269. package/dist/internals/helpers/array.cjs.map +1 -1
  270. package/dist/internals/helpers/array.js.map +1 -1
  271. package/dist/internals/helpers/cancellation.cjs.map +1 -1
  272. package/dist/internals/helpers/cancellation.js.map +1 -1
  273. package/dist/internals/helpers/counter.cjs.map +1 -1
  274. package/dist/internals/helpers/counter.js.map +1 -1
  275. package/dist/internals/helpers/general.cjs.map +1 -1
  276. package/dist/internals/helpers/general.js.map +1 -1
  277. package/dist/internals/helpers/guards.cjs.map +1 -1
  278. package/dist/internals/helpers/guards.js.map +1 -1
  279. package/dist/internals/helpers/hash.cjs.map +1 -1
  280. package/dist/internals/helpers/hash.js.map +1 -1
  281. package/dist/internals/helpers/map.cjs.map +1 -1
  282. package/dist/internals/helpers/map.js.map +1 -1
  283. package/dist/internals/helpers/math.cjs.map +1 -1
  284. package/dist/internals/helpers/math.js.map +1 -1
  285. package/dist/internals/helpers/number.cjs.map +1 -1
  286. package/dist/internals/helpers/number.js.map +1 -1
  287. package/dist/internals/helpers/object.cjs.map +1 -1
  288. package/dist/internals/helpers/object.js.map +1 -1
  289. package/dist/internals/helpers/paginate.cjs.map +1 -1
  290. package/dist/internals/helpers/paginate.js.map +1 -1
  291. package/dist/internals/helpers/promise.cjs.map +1 -1
  292. package/dist/internals/helpers/promise.js.map +1 -1
  293. package/dist/internals/helpers/prototype.cjs.map +1 -1
  294. package/dist/internals/helpers/prototype.js.map +1 -1
  295. package/dist/internals/helpers/retry.cjs.map +1 -1
  296. package/dist/internals/helpers/retry.js.map +1 -1
  297. package/dist/internals/helpers/retryable.cjs.map +1 -1
  298. package/dist/internals/helpers/retryable.js.map +1 -1
  299. package/dist/internals/helpers/schema.cjs.map +1 -1
  300. package/dist/internals/helpers/schema.d.cts +1 -1
  301. package/dist/internals/helpers/schema.d.ts +1 -1
  302. package/dist/internals/helpers/schema.js.map +1 -1
  303. package/dist/internals/helpers/stream.cjs.map +1 -1
  304. package/dist/internals/helpers/stream.js.map +1 -1
  305. package/dist/internals/helpers/string.cjs.map +1 -1
  306. package/dist/internals/helpers/string.js.map +1 -1
  307. package/dist/internals/helpers/weakRef.cjs.map +1 -1
  308. package/dist/internals/helpers/weakRef.js.map +1 -1
  309. package/dist/internals/serializable.cjs.map +1 -1
  310. package/dist/internals/serializable.js.map +1 -1
  311. package/dist/internals/types.cjs.map +1 -1
  312. package/dist/internals/types.js.map +1 -1
  313. package/dist/logger/logger.cjs.map +1 -1
  314. package/dist/logger/logger.js.map +1 -1
  315. package/dist/logger/pretty.cjs.map +1 -1
  316. package/dist/logger/pretty.js.map +1 -1
  317. package/dist/memory/base.cjs.map +1 -1
  318. package/dist/memory/base.js.map +1 -1
  319. package/dist/memory/slidingMemory.cjs.map +1 -1
  320. package/dist/memory/slidingMemory.js.map +1 -1
  321. package/dist/memory/summarizeMemory.cjs.map +1 -1
  322. package/dist/memory/summarizeMemory.d.cts +1 -1
  323. package/dist/memory/summarizeMemory.d.ts +1 -1
  324. package/dist/memory/summarizeMemory.js.map +1 -1
  325. package/dist/memory/tokenMemory.cjs.map +1 -1
  326. package/dist/memory/tokenMemory.js.map +1 -1
  327. package/dist/memory/unconstrainedMemory.cjs.map +1 -1
  328. package/dist/memory/unconstrainedMemory.js.map +1 -1
  329. package/dist/parsers/errors.cjs.map +1 -1
  330. package/dist/parsers/errors.js.map +1 -1
  331. package/dist/parsers/field.cjs.map +1 -1
  332. package/dist/parsers/field.js.map +1 -1
  333. package/dist/parsers/linePrefix.cjs.map +1 -1
  334. package/dist/parsers/linePrefix.d.cts +1 -1
  335. package/dist/parsers/linePrefix.d.ts +1 -1
  336. package/dist/parsers/linePrefix.js.map +1 -1
  337. package/dist/serializer/error.cjs.map +1 -1
  338. package/dist/serializer/error.js.map +1 -1
  339. package/dist/serializer/serializer.cjs +3 -3
  340. package/dist/serializer/serializer.cjs.map +1 -1
  341. package/dist/serializer/serializer.js +2 -2
  342. package/dist/serializer/serializer.js.map +1 -1
  343. package/dist/serializer/utils.cjs.map +1 -1
  344. package/dist/serializer/utils.js.map +1 -1
  345. package/dist/template.cjs.map +1 -1
  346. package/dist/template.d.cts +1 -1
  347. package/dist/template.d.ts +1 -1
  348. package/dist/template.js.map +1 -1
  349. package/dist/tools/arxiv.cjs.map +1 -1
  350. package/dist/tools/arxiv.d.cts +2 -2
  351. package/dist/tools/arxiv.d.ts +2 -2
  352. package/dist/tools/arxiv.js.map +1 -1
  353. package/dist/tools/base.cjs.map +1 -1
  354. package/dist/tools/base.d.cts +2 -2
  355. package/dist/tools/base.d.ts +2 -2
  356. package/dist/tools/base.js.map +1 -1
  357. package/dist/tools/calculator.cjs.map +1 -1
  358. package/dist/tools/calculator.d.cts +1 -1
  359. package/dist/tools/calculator.d.ts +1 -1
  360. package/dist/tools/calculator.js.map +1 -1
  361. package/dist/tools/custom.cjs.map +1 -1
  362. package/dist/tools/custom.d.cts +1 -1
  363. package/dist/tools/custom.d.ts +1 -1
  364. package/dist/tools/custom.js.map +1 -1
  365. package/dist/tools/database/elasticsearch.cjs.map +1 -1
  366. package/dist/tools/database/elasticsearch.d.cts +1 -1
  367. package/dist/tools/database/elasticsearch.d.ts +1 -1
  368. package/dist/tools/database/elasticsearch.js.map +1 -1
  369. package/dist/tools/database/metadata.cjs.map +1 -1
  370. package/dist/tools/database/metadata.js.map +1 -1
  371. package/dist/tools/database/milvus.cjs.map +1 -1
  372. package/dist/tools/database/milvus.d.cts +1 -1
  373. package/dist/tools/database/milvus.d.ts +1 -1
  374. package/dist/tools/database/milvus.js.map +1 -1
  375. package/dist/tools/database/sql.cjs.map +1 -1
  376. package/dist/tools/database/sql.d.cts +3 -3
  377. package/dist/tools/database/sql.d.ts +3 -3
  378. package/dist/tools/database/sql.js.map +1 -1
  379. package/dist/tools/llm.cjs.map +1 -1
  380. package/dist/tools/llm.d.cts +1 -1
  381. package/dist/tools/llm.d.ts +1 -1
  382. package/dist/tools/llm.js +1 -1
  383. package/dist/tools/llm.js.map +1 -1
  384. package/dist/tools/mcp.cjs.map +1 -1
  385. package/dist/tools/mcp.d.cts +1 -1
  386. package/dist/tools/mcp.d.ts +1 -1
  387. package/dist/tools/mcp.js.map +1 -1
  388. package/dist/tools/openapi.cjs.map +1 -1
  389. package/dist/tools/openapi.d.cts +1 -1
  390. package/dist/tools/openapi.d.ts +1 -1
  391. package/dist/tools/openapi.js +1 -1
  392. package/dist/tools/openapi.js.map +1 -1
  393. package/dist/tools/python/output.cjs.map +1 -1
  394. package/dist/tools/python/output.d.cts +1 -1
  395. package/dist/tools/python/output.d.ts +1 -1
  396. package/dist/tools/python/output.js.map +1 -1
  397. package/dist/tools/python/python.cjs.map +1 -1
  398. package/dist/tools/python/python.d.cts +1 -1
  399. package/dist/tools/python/python.d.ts +1 -1
  400. package/dist/tools/python/python.js.map +1 -1
  401. package/dist/tools/python/storage.cjs.map +1 -1
  402. package/dist/tools/python/storage.js.map +1 -1
  403. package/dist/tools/search/base.cjs.map +1 -1
  404. package/dist/tools/search/base.d.cts +1 -1
  405. package/dist/tools/search/base.d.ts +1 -1
  406. package/dist/tools/search/base.js.map +1 -1
  407. package/dist/tools/search/duckDuckGoSearch.cjs +19 -19
  408. package/dist/tools/search/duckDuckGoSearch.cjs.map +1 -1
  409. package/dist/tools/search/duckDuckGoSearch.d.cts +2 -4
  410. package/dist/tools/search/duckDuckGoSearch.d.ts +2 -4
  411. package/dist/tools/search/duckDuckGoSearch.js +17 -13
  412. package/dist/tools/search/duckDuckGoSearch.js.map +1 -1
  413. package/dist/tools/search/googleSearch.cjs.map +1 -1
  414. package/dist/tools/search/googleSearch.d.cts +1 -1
  415. package/dist/tools/search/googleSearch.d.ts +1 -1
  416. package/dist/tools/search/googleSearch.js.map +1 -1
  417. package/dist/tools/search/searXNGSearch.cjs.map +1 -1
  418. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  419. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  420. package/dist/tools/search/searXNGSearch.js.map +1 -1
  421. package/dist/tools/search/wikipedia.cjs.map +1 -1
  422. package/dist/tools/search/wikipedia.d.cts +1 -1
  423. package/dist/tools/search/wikipedia.d.ts +1 -1
  424. package/dist/tools/search/wikipedia.js.map +1 -1
  425. package/dist/tools/similarity.cjs.map +1 -1
  426. package/dist/tools/similarity.d.cts +2 -2
  427. package/dist/tools/similarity.d.ts +2 -2
  428. package/dist/tools/similarity.js.map +1 -1
  429. package/dist/tools/weather/openMeteo.cjs.map +1 -1
  430. package/dist/tools/weather/openMeteo.d.cts +2 -2
  431. package/dist/tools/weather/openMeteo.d.ts +2 -2
  432. package/dist/tools/weather/openMeteo.js.map +1 -1
  433. package/dist/tools/web/webCrawler.cjs.map +1 -1
  434. package/dist/tools/web/webCrawler.d.cts +2 -2
  435. package/dist/tools/web/webCrawler.d.ts +2 -2
  436. package/dist/tools/web/webCrawler.js.map +1 -1
  437. package/dist/version.cjs +1 -1
  438. package/dist/version.cjs.map +1 -1
  439. package/dist/version.js +1 -1
  440. package/dist/version.js.map +1 -1
  441. package/dist/workflows/agent.cjs.map +1 -1
  442. package/dist/workflows/agent.d.cts +2 -2
  443. package/dist/workflows/agent.d.ts +2 -2
  444. package/dist/workflows/agent.js.map +1 -1
  445. package/dist/workflows/workflow.cjs.map +1 -1
  446. package/dist/workflows/workflow.d.cts +1 -1
  447. package/dist/workflows/workflow.d.ts +1 -1
  448. package/dist/workflows/workflow.js.map +1 -1
  449. package/package.json +28 -20
  450. package/dist/{emitter-C9EN5B0j.d.cts → emitter-BWtGHYn0.d.cts} +1 -1
  451. package/dist/{emitter-BxVxGBbJ.d.ts → emitter-l0W9gC1A.d.ts} +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/search/wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","constructor","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","inputSchema","z","object","query","string","min","max","config","Emitter","root","child","namespace","creator","_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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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":["wikipedia.ts"],"names":["wiki","default","setLang","WikipediaToolOutput","SearchToolOutput","constructor","results","maxSerializedLength","register","getTextContent","isEmpty","target","length","response","JSON","stringify","Infinity","substring","createSnapshot","loadSnapshot","snapshot","Object","assign","WikipediaTool","Tool","name","description","emitter","inputSchema","z","object","query","string","min","max","config","Emitter","root","child","namespace","creator","_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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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 +1 @@
1
- {"version":3,"sources":["../../src/tools/similarity.ts"],"names":["documentSchema","z","object","text","string","passthrough","SimilarityToolOutput","JSONToolOutput","SimilarityTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","query","documents","array","register","_run","options","run","pipe","provider","map","score","idx","documentIndex","filter","minScore","sortBy","prop","take","maxResults","Infinity","data","document","index"],"mappings":";;;;;;;;;AA6BA,MAAMA,cAAAA,GAAiBC,MAAEC,MAAO,CAAA;AAAEC,EAAAA,IAAAA,EAAMC,UAAAA;AAAS,CAAA,EAAGC,WAAW,EAAA;AAgCxD,MAAMC,6BAA6BC,uBAAAA,CAAAA;EA7D1C;;;AA6DkF;AAE3E,MAAMC,uBAAyCC,aAAAA,CAAAA;EA/DtD;;;EAoEEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,8CAAA;EAEEC,OAA8DC,GAAAA,mBAAAA,CAAQC,KAAKC,KAAM,CAAA;IAC/FC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA;;IACpBC,OAAS,EAAA;GACX,CAAA;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOjB,MAAEC,MAAO,CAAA;AAAEiB,MAAAA,KAAAA,EAAOlB,MAAEG,MAAM,EAAA;MAAIgB,SAAWnB,EAAAA,KAAAA,CAAEoB,MAAMrB,cAAAA;KAAgB,CAAA;AAC1E;EAEA;AACE,IAAA,IAAA,CAAKsB,QAAQ,EAAA;AACf;AAEA,EAAA,MAAgBC,KACd,EAAEJ,KAAAA,EAAOC,SAAS,EAAA,EAClBI,SACAC,GACA,EAAA;AACA,IAAA,OAAOC,WACL,CAAA,MAAM,IAAKF,CAAAA,OAAAA,CAAQG,QACjB,CAAA;AACER,MAAAA,KAAAA;AACAC,MAAAA;KAEFI,EAAAA,OAAAA,EAASG,UACTF,GAAAA,CAAAA,EAEFG,WAAI,CAAC,EAAEC,KAAK,EAAA,EAAIC,GAAS,MAAA;MACvBC,aAAeD,EAAAA,GAAAA;AACfD,MAAAA;KACF,CAAA,CAAA,EACAG,aAAO,CAAA,CAAC,EAAEH,KAAAA,EAAYA,KAAAA,KAAAA,KAAUL,OAAQS,CAAAA,QAAAA,IAAY,CAAQ,QAAA,CAAA,CAAA,EAC5DC,aAAO,CAAA;AAACC,MAAAA,WAAAA,CAAK,OAAA,CAAA;AAAU,MAAA;AAAO,KAAA,CAAA,EAC9BC,YAAKZ,OAASa,EAAAA,UAAAA,IAAc,KAAKb,OAAQa,CAAAA,UAAAA,IAAcC,QAAAA,CACvD,EAAA,CAACC,IACC,KAAA,IAAIjC,qBACFiC,IAAKX,CAAAA,GAAAA,CAAI,CAAC,EAAEG,aAAAA,EAAeF,OAAa,MAAA;AACtCW,MAAAA,QAAAA,EAAUpB,UAAUW,aAAAA,CAAAA;MACpBU,KAAOV,EAAAA,aAAAA;AACPF,MAAAA;AACF,KAAA,CAAA,CAAA,CAAA,CAAA;AAGR;AACF","file":"similarity.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolInput,\n} from \"./base.js\";\nimport { string, z } from \"zod\";\nimport { RunContext } from \"@/context.js\";\nimport { filter, map, pipe, prop, sortBy, take } from \"remeda\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nconst documentSchema = z.object({ text: string() }).passthrough();\n\ntype Document = z.infer<typeof documentSchema>;\n\ninterface ProviderInput {\n query: string;\n documents: Document[];\n}\n\ntype Provider<TProviderOptions> = (\n input: ProviderInput,\n options: TProviderOptions | undefined,\n run: RunContext<SimilarityTool<TProviderOptions>>,\n) => Promise<{ score: number }[]>;\n\nexport interface SimilarityToolOptions<TProviderOptions = unknown> extends BaseToolOptions {\n provider: Provider<TProviderOptions>;\n maxResults?: number;\n}\n\nexport interface SimilarityToolRunOptions<TProviderOptions = unknown> extends BaseToolRunOptions {\n provider?: TProviderOptions;\n maxResults?: number;\n minScore?: number;\n}\n\nexport interface SimilarityToolResult {\n document: Document;\n index: number;\n score: number;\n}\n\nexport class SimilarityToolOutput extends JSONToolOutput<SimilarityToolResult[]> {}\n\nexport class SimilarityTool<TProviderOptions> extends Tool<\n SimilarityToolOutput,\n SimilarityToolOptions<TProviderOptions>,\n SimilarityToolRunOptions<TProviderOptions>\n> {\n name = \"Similarity\";\n description = \"Extract relevant information from documents.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SimilarityToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"similarity\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({ query: z.string(), documents: z.array(documentSchema) });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query, documents }: ToolInput<this>,\n options: Partial<SimilarityToolRunOptions<TProviderOptions>>,\n run: RunContext<this>,\n ) {\n return pipe(\n await this.options.provider(\n {\n query,\n documents,\n },\n options?.provider,\n run,\n ),\n map(({ score }, idx) => ({\n documentIndex: idx,\n score,\n })),\n filter(({ score }) => score >= (options.minScore ?? -Infinity)),\n sortBy([prop(\"score\"), \"desc\"]),\n take(options?.maxResults ?? this.options.maxResults ?? Infinity),\n (data) =>\n new SimilarityToolOutput(\n data.map(({ documentIndex, score }) => ({\n document: documents[documentIndex],\n index: documentIndex,\n score,\n })),\n ),\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["similarity.ts"],"names":["documentSchema","z","object","text","string","passthrough","SimilarityToolOutput","JSONToolOutput","SimilarityTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","query","documents","array","register","_run","options","run","pipe","provider","map","score","idx","documentIndex","filter","minScore","sortBy","prop","take","maxResults","Infinity","data","document","index"],"mappings":";;;;;;;;;AA6BA,MAAMA,cAAAA,GAAiBC,MAAEC,MAAO,CAAA;AAAEC,EAAAA,IAAAA,EAAMC,UAAAA;AAAS,CAAA,EAAGC,WAAW,EAAA;AAgCxD,MAAMC,6BAA6BC,uBAAAA,CAAAA;EA7D1C;;;AA6DkF;AAE3E,MAAMC,uBAAyCC,aAAAA,CAAAA;EA/DtD;;;EAoEEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,8CAAA;EAEEC,OAA8DC,GAAAA,mBAAAA,CAAQC,KAAKC,KAAM,CAAA;IAC/FC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA;;IACpBC,OAAS,EAAA;GACX,CAAA;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOjB,MAAEC,MAAO,CAAA;AAAEiB,MAAAA,KAAAA,EAAOlB,MAAEG,MAAM,EAAA;MAAIgB,SAAWnB,EAAAA,KAAAA,CAAEoB,MAAMrB,cAAAA;KAAgB,CAAA;AAC1E;EAEA;AACE,IAAA,IAAA,CAAKsB,QAAQ,EAAA;AACf;AAEA,EAAA,MAAgBC,KACd,EAAEJ,KAAAA,EAAOC,SAAS,EAAA,EAClBI,SACAC,GACA,EAAA;AACA,IAAA,OAAOC,WACL,CAAA,MAAM,IAAKF,CAAAA,OAAAA,CAAQG,QACjB,CAAA;AACER,MAAAA,KAAAA;AACAC,MAAAA;KAEFI,EAAAA,OAAAA,EAASG,UACTF,GAAAA,CAAAA,EAEFG,WAAI,CAAC,EAAEC,KAAK,EAAA,EAAIC,GAAS,MAAA;MACvBC,aAAeD,EAAAA,GAAAA;AACfD,MAAAA;KACF,CAAA,CAAA,EACAG,aAAO,CAAA,CAAC,EAAEH,KAAAA,EAAYA,KAAAA,KAAAA,KAAUL,OAAQS,CAAAA,QAAAA,IAAY,CAAQ,QAAA,CAAA,CAAA,EAC5DC,aAAO,CAAA;AAACC,MAAAA,WAAAA,CAAK,OAAA,CAAA;AAAU,MAAA;AAAO,KAAA,CAAA,EAC9BC,YAAKZ,OAASa,EAAAA,UAAAA,IAAc,KAAKb,OAAQa,CAAAA,UAAAA,IAAcC,QAAAA,CACvD,EAAA,CAACC,IACC,KAAA,IAAIjC,qBACFiC,IAAKX,CAAAA,GAAAA,CAAI,CAAC,EAAEG,aAAAA,EAAeF,OAAa,MAAA;AACtCW,MAAAA,QAAAA,EAAUpB,UAAUW,aAAAA,CAAAA;MACpBU,KAAOV,EAAAA,aAAAA;AACPF,MAAAA;AACF,KAAA,CAAA,CAAA,CAAA,CAAA;AAGR;AACF","file":"similarity.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolInput,\n} from \"./base.js\";\nimport { string, z } from \"zod\";\nimport { RunContext } from \"@/context.js\";\nimport { filter, map, pipe, prop, sortBy, take } from \"remeda\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nconst documentSchema = z.object({ text: string() }).passthrough();\n\ntype Document = z.infer<typeof documentSchema>;\n\ninterface ProviderInput {\n query: string;\n documents: Document[];\n}\n\ntype Provider<TProviderOptions> = (\n input: ProviderInput,\n options: TProviderOptions | undefined,\n run: RunContext<SimilarityTool<TProviderOptions>>,\n) => Promise<{ score: number }[]>;\n\nexport interface SimilarityToolOptions<TProviderOptions = unknown> extends BaseToolOptions {\n provider: Provider<TProviderOptions>;\n maxResults?: number;\n}\n\nexport interface SimilarityToolRunOptions<TProviderOptions = unknown> extends BaseToolRunOptions {\n provider?: TProviderOptions;\n maxResults?: number;\n minScore?: number;\n}\n\nexport interface SimilarityToolResult {\n document: Document;\n index: number;\n score: number;\n}\n\nexport class SimilarityToolOutput extends JSONToolOutput<SimilarityToolResult[]> {}\n\nexport class SimilarityTool<TProviderOptions> extends Tool<\n SimilarityToolOutput,\n SimilarityToolOptions<TProviderOptions>,\n SimilarityToolRunOptions<TProviderOptions>\n> {\n name = \"Similarity\";\n description = \"Extract relevant information from documents.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SimilarityToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"similarity\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({ query: z.string(), documents: z.array(documentSchema) });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query, documents }: ToolInput<this>,\n options: Partial<SimilarityToolRunOptions<TProviderOptions>>,\n run: RunContext<this>,\n ) {\n return pipe(\n await this.options.provider(\n {\n query,\n documents,\n },\n options?.provider,\n run,\n ),\n map(({ score }, idx) => ({\n documentIndex: idx,\n score,\n })),\n filter(({ score }) => score >= (options.minScore ?? -Infinity)),\n sortBy([prop(\"score\"), \"desc\"]),\n take(options?.maxResults ?? this.options.maxResults ?? Infinity),\n (data) =>\n new SimilarityToolOutput(\n data.map(({ documentIndex, score }) => ({\n document: documents[documentIndex],\n index: documentIndex,\n score,\n })),\n ),\n );\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { BaseToolOptions, BaseToolRunOptions, JSONToolOutput, Tool, ToolEmitter, ToolInput } from './base.cjs';
1
+ import { BaseToolOptions, Tool, JSONToolOutput, BaseToolRunOptions, ToolEmitter, ToolInput } from './base.cjs';
2
2
  import { z } from 'zod';
3
3
  import { RunContext } from '../context.cjs';
4
4
  import 'ajv';
@@ -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-C9EN5B0j.cjs';
13
+ import '../emitter-BWtGHYn0.cjs';
14
14
  import '../internals/helpers/promise.cjs';
15
15
 
16
16
  /**
@@ -1,4 +1,4 @@
1
- import { BaseToolOptions, BaseToolRunOptions, JSONToolOutput, Tool, ToolEmitter, ToolInput } from './base.js';
1
+ import { BaseToolOptions, Tool, JSONToolOutput, BaseToolRunOptions, ToolEmitter, ToolInput } from './base.js';
2
2
  import { z } from 'zod';
3
3
  import { RunContext } from '../context.js';
4
4
  import 'ajv';
@@ -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-BxVxGBbJ.js';
13
+ import '../emitter-l0W9gC1A.js';
14
14
  import '../internals/helpers/promise.js';
15
15
 
16
16
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tools/similarity.ts"],"names":["documentSchema","z","object","text","string","passthrough","SimilarityToolOutput","JSONToolOutput","SimilarityTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","query","documents","array","register","_run","options","run","pipe","provider","map","score","idx","documentIndex","filter","minScore","sortBy","prop","take","maxResults","Infinity","data","document","index"],"mappings":";;;;;;;AA6BA,MAAMA,cAAAA,GAAiBC,EAAEC,MAAO,CAAA;AAAEC,EAAAA,IAAAA,EAAMC,MAAAA;AAAS,CAAA,EAAGC,WAAW,EAAA;AAgCxD,MAAMC,6BAA6BC,cAAAA,CAAAA;EA7D1C;;;AA6DkF;AAE3E,MAAMC,uBAAyCC,IAAAA,CAAAA;EA/DtD;;;EAoEEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,8CAAA;EAEEC,OAA8DC,GAAAA,OAAAA,CAAQC,KAAKC,KAAM,CAAA;IAC/FC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA;;IACpBC,OAAS,EAAA;GACX,CAAA;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOjB,EAAEC,MAAO,CAAA;AAAEiB,MAAAA,KAAAA,EAAOlB,EAAEG,MAAM,EAAA;MAAIgB,SAAWnB,EAAAA,CAAAA,CAAEoB,MAAMrB,cAAAA;KAAgB,CAAA;AAC1E;EAEA;AACE,IAAA,IAAA,CAAKsB,QAAQ,EAAA;AACf;AAEA,EAAA,MAAgBC,KACd,EAAEJ,KAAAA,EAAOC,SAAS,EAAA,EAClBI,SACAC,GACA,EAAA;AACA,IAAA,OAAOC,IACL,CAAA,MAAM,IAAKF,CAAAA,OAAAA,CAAQG,QACjB,CAAA;AACER,MAAAA,KAAAA;AACAC,MAAAA;KAEFI,EAAAA,OAAAA,EAASG,UACTF,GAAAA,CAAAA,EAEFG,IAAI,CAAC,EAAEC,KAAK,EAAA,EAAIC,GAAS,MAAA;MACvBC,aAAeD,EAAAA,GAAAA;AACfD,MAAAA;KACF,CAAA,CAAA,EACAG,MAAO,CAAA,CAAC,EAAEH,KAAAA,EAAYA,KAAAA,KAAAA,KAAUL,OAAQS,CAAAA,QAAAA,IAAY,CAAQ,QAAA,CAAA,CAAA,EAC5DC,MAAO,CAAA;AAACC,MAAAA,IAAAA,CAAK,OAAA,CAAA;AAAU,MAAA;AAAO,KAAA,CAAA,EAC9BC,KAAKZ,OAASa,EAAAA,UAAAA,IAAc,KAAKb,OAAQa,CAAAA,UAAAA,IAAcC,QAAAA,CACvD,EAAA,CAACC,IACC,KAAA,IAAIjC,qBACFiC,IAAKX,CAAAA,GAAAA,CAAI,CAAC,EAAEG,aAAAA,EAAeF,OAAa,MAAA;AACtCW,MAAAA,QAAAA,EAAUpB,UAAUW,aAAAA,CAAAA;MACpBU,KAAOV,EAAAA,aAAAA;AACPF,MAAAA;AACF,KAAA,CAAA,CAAA,CAAA,CAAA;AAGR;AACF","file":"similarity.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolInput,\n} from \"./base.js\";\nimport { string, z } from \"zod\";\nimport { RunContext } from \"@/context.js\";\nimport { filter, map, pipe, prop, sortBy, take } from \"remeda\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nconst documentSchema = z.object({ text: string() }).passthrough();\n\ntype Document = z.infer<typeof documentSchema>;\n\ninterface ProviderInput {\n query: string;\n documents: Document[];\n}\n\ntype Provider<TProviderOptions> = (\n input: ProviderInput,\n options: TProviderOptions | undefined,\n run: RunContext<SimilarityTool<TProviderOptions>>,\n) => Promise<{ score: number }[]>;\n\nexport interface SimilarityToolOptions<TProviderOptions = unknown> extends BaseToolOptions {\n provider: Provider<TProviderOptions>;\n maxResults?: number;\n}\n\nexport interface SimilarityToolRunOptions<TProviderOptions = unknown> extends BaseToolRunOptions {\n provider?: TProviderOptions;\n maxResults?: number;\n minScore?: number;\n}\n\nexport interface SimilarityToolResult {\n document: Document;\n index: number;\n score: number;\n}\n\nexport class SimilarityToolOutput extends JSONToolOutput<SimilarityToolResult[]> {}\n\nexport class SimilarityTool<TProviderOptions> extends Tool<\n SimilarityToolOutput,\n SimilarityToolOptions<TProviderOptions>,\n SimilarityToolRunOptions<TProviderOptions>\n> {\n name = \"Similarity\";\n description = \"Extract relevant information from documents.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SimilarityToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"similarity\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({ query: z.string(), documents: z.array(documentSchema) });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query, documents }: ToolInput<this>,\n options: Partial<SimilarityToolRunOptions<TProviderOptions>>,\n run: RunContext<this>,\n ) {\n return pipe(\n await this.options.provider(\n {\n query,\n documents,\n },\n options?.provider,\n run,\n ),\n map(({ score }, idx) => ({\n documentIndex: idx,\n score,\n })),\n filter(({ score }) => score >= (options.minScore ?? -Infinity)),\n sortBy([prop(\"score\"), \"desc\"]),\n take(options?.maxResults ?? this.options.maxResults ?? Infinity),\n (data) =>\n new SimilarityToolOutput(\n data.map(({ documentIndex, score }) => ({\n document: documents[documentIndex],\n index: documentIndex,\n score,\n })),\n ),\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["similarity.ts"],"names":["documentSchema","z","object","text","string","passthrough","SimilarityToolOutput","JSONToolOutput","SimilarityTool","Tool","name","description","emitter","Emitter","root","child","namespace","creator","inputSchema","query","documents","array","register","_run","options","run","pipe","provider","map","score","idx","documentIndex","filter","minScore","sortBy","prop","take","maxResults","Infinity","data","document","index"],"mappings":";;;;;;;AA6BA,MAAMA,cAAAA,GAAiBC,EAAEC,MAAO,CAAA;AAAEC,EAAAA,IAAAA,EAAMC,MAAAA;AAAS,CAAA,EAAGC,WAAW,EAAA;AAgCxD,MAAMC,6BAA6BC,cAAAA,CAAAA;EA7D1C;;;AA6DkF;AAE3E,MAAMC,uBAAyCC,IAAAA,CAAAA;EA/DtD;;;EAoEEC,IAAO,GAAA,YAAA;EACPC,WAAc,GAAA,8CAAA;EAEEC,OAA8DC,GAAAA,OAAAA,CAAQC,KAAKC,KAAM,CAAA;IAC/FC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA;;IACpBC,OAAS,EAAA;GACX,CAAA;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOjB,EAAEC,MAAO,CAAA;AAAEiB,MAAAA,KAAAA,EAAOlB,EAAEG,MAAM,EAAA;MAAIgB,SAAWnB,EAAAA,CAAAA,CAAEoB,MAAMrB,cAAAA;KAAgB,CAAA;AAC1E;EAEA;AACE,IAAA,IAAA,CAAKsB,QAAQ,EAAA;AACf;AAEA,EAAA,MAAgBC,KACd,EAAEJ,KAAAA,EAAOC,SAAS,EAAA,EAClBI,SACAC,GACA,EAAA;AACA,IAAA,OAAOC,IACL,CAAA,MAAM,IAAKF,CAAAA,OAAAA,CAAQG,QACjB,CAAA;AACER,MAAAA,KAAAA;AACAC,MAAAA;KAEFI,EAAAA,OAAAA,EAASG,UACTF,GAAAA,CAAAA,EAEFG,IAAI,CAAC,EAAEC,KAAK,EAAA,EAAIC,GAAS,MAAA;MACvBC,aAAeD,EAAAA,GAAAA;AACfD,MAAAA;KACF,CAAA,CAAA,EACAG,MAAO,CAAA,CAAC,EAAEH,KAAAA,EAAYA,KAAAA,KAAAA,KAAUL,OAAQS,CAAAA,QAAAA,IAAY,CAAQ,QAAA,CAAA,CAAA,EAC5DC,MAAO,CAAA;AAACC,MAAAA,IAAAA,CAAK,OAAA,CAAA;AAAU,MAAA;AAAO,KAAA,CAAA,EAC9BC,KAAKZ,OAASa,EAAAA,UAAAA,IAAc,KAAKb,OAAQa,CAAAA,UAAAA,IAAcC,QAAAA,CACvD,EAAA,CAACC,IACC,KAAA,IAAIjC,qBACFiC,IAAKX,CAAAA,GAAAA,CAAI,CAAC,EAAEG,aAAAA,EAAeF,OAAa,MAAA;AACtCW,MAAAA,QAAAA,EAAUpB,UAAUW,aAAAA,CAAAA;MACpBU,KAAOV,EAAAA,aAAAA;AACPF,MAAAA;AACF,KAAA,CAAA,CAAA,CAAA,CAAA;AAGR;AACF","file":"similarity.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n ToolEmitter,\n JSONToolOutput,\n Tool,\n ToolInput,\n} from \"./base.js\";\nimport { string, z } from \"zod\";\nimport { RunContext } from \"@/context.js\";\nimport { filter, map, pipe, prop, sortBy, take } from \"remeda\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\nconst documentSchema = z.object({ text: string() }).passthrough();\n\ntype Document = z.infer<typeof documentSchema>;\n\ninterface ProviderInput {\n query: string;\n documents: Document[];\n}\n\ntype Provider<TProviderOptions> = (\n input: ProviderInput,\n options: TProviderOptions | undefined,\n run: RunContext<SimilarityTool<TProviderOptions>>,\n) => Promise<{ score: number }[]>;\n\nexport interface SimilarityToolOptions<TProviderOptions = unknown> extends BaseToolOptions {\n provider: Provider<TProviderOptions>;\n maxResults?: number;\n}\n\nexport interface SimilarityToolRunOptions<TProviderOptions = unknown> extends BaseToolRunOptions {\n provider?: TProviderOptions;\n maxResults?: number;\n minScore?: number;\n}\n\nexport interface SimilarityToolResult {\n document: Document;\n index: number;\n score: number;\n}\n\nexport class SimilarityToolOutput extends JSONToolOutput<SimilarityToolResult[]> {}\n\nexport class SimilarityTool<TProviderOptions> extends Tool<\n SimilarityToolOutput,\n SimilarityToolOptions<TProviderOptions>,\n SimilarityToolRunOptions<TProviderOptions>\n> {\n name = \"Similarity\";\n description = \"Extract relevant information from documents.\";\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SimilarityToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"similarity\"],\n creator: this,\n });\n\n inputSchema() {\n return z.object({ query: z.string(), documents: z.array(documentSchema) });\n }\n\n static {\n this.register();\n }\n\n protected async _run(\n { query, documents }: ToolInput<this>,\n options: Partial<SimilarityToolRunOptions<TProviderOptions>>,\n run: RunContext<this>,\n ) {\n return pipe(\n await this.options.provider(\n {\n query,\n documents,\n },\n options?.provider,\n run,\n ),\n map(({ score }, idx) => ({\n documentIndex: idx,\n score,\n })),\n filter(({ score }) => score >= (options.minScore ?? -Infinity)),\n sortBy([prop(\"score\"), \"desc\"]),\n take(options?.maxResults ?? this.options.maxResults ?? Infinity),\n (data) =>\n new SimilarityToolOutput(\n data.map(({ documentIndex, score }) => ({\n document: documents[documentIndex],\n index: documentIndex,\n score,\n })),\n ),\n );\n }\n}\n"]}
@@ -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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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":["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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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,4 +1,4 @@
1
- import { JSONToolOutput, Tool, ToolEmitter, ToolInput, BaseToolRunOptions, BaseToolOptions } from '../base.cjs';
1
+ import { JSONToolOutput, Tool, BaseToolOptions, BaseToolRunOptions, ToolEmitter, ToolInput } from '../base.cjs';
2
2
  import { z } from 'zod';
3
3
  import { RunContext } from '../../context.cjs';
4
4
  import 'ajv';
@@ -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-C9EN5B0j.cjs';
13
+ import '../../emitter-BWtGHYn0.cjs';
14
14
  import '../../internals/helpers/promise.cjs';
15
15
 
16
16
  /**
@@ -1,4 +1,4 @@
1
- import { JSONToolOutput, Tool, ToolEmitter, ToolInput, BaseToolRunOptions, BaseToolOptions } from '../base.js';
1
+ import { JSONToolOutput, Tool, BaseToolOptions, BaseToolRunOptions, ToolEmitter, ToolInput } from '../base.js';
2
2
  import { z } from 'zod';
3
3
  import { RunContext } from '../../context.js';
4
4
  import 'ajv';
@@ -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-BxVxGBbJ.js';
13
+ import '../../emitter-l0W9gC1A.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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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":["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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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 +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","constructor","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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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":["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","constructor","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 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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,9 +1,9 @@
1
1
  import { BaseCache } from '../../cache/base.cjs';
2
2
  import * as promise_based_task from 'promise-based-task';
3
- import { JSONToolOutput, Tool, ToolEmitter, ToolInput, BaseToolRunOptions, BaseToolOptions } from '../base.cjs';
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-C9EN5B0j.cjs';
6
+ import { E as Emitter } from '../../emitter-BWtGHYn0.cjs';
7
7
  import '../../internals/serializable.cjs';
8
8
  import '../../internals/types.cjs';
9
9
  import '../../internals/helpers/guards.cjs';
@@ -1,9 +1,9 @@
1
1
  import { BaseCache } from '../../cache/base.js';
2
2
  import * as promise_based_task from 'promise-based-task';
3
- import { JSONToolOutput, Tool, ToolEmitter, ToolInput, BaseToolRunOptions, BaseToolOptions } from '../base.js';
3
+ import { JSONToolOutput, Tool, BaseToolOptions, ToolEmitter, ToolInput, BaseToolRunOptions } from '../base.js';
4
4
  import { z } from 'zod';
5
5
  import { RunContext } from '../../context.js';
6
- import { E as Emitter } from '../../emitter-BxVxGBbJ.js';
6
+ import { E as Emitter } from '../../emitter-l0W9gC1A.js';
7
7
  import '../../internals/serializable.js';
8
8
  import '../../internals/types.js';
9
9
  import '../../internals/helpers/guards.js';
@@ -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","constructor","options","fetch","_run","_options","run","redirect","request","signal","status","createSnapshot","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"webCrawler.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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":["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","constructor","options","fetch","_run","_options","run","redirect","request","signal","status","createSnapshot","loadSnapshot","snapshot","Object","assign"],"mappings":"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","file":"webCrawler.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\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"]}
package/dist/version.cjs CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports.Version = "0.0.0";
4
4
  try {
5
- exports.Version = "0.1.3";
5
+ exports.Version = "0.1.5";
6
6
  } catch {
7
7
  }
8
8
  //# sourceMappingURL=version.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"names":["Version","__LIBRARY_VERSION"],"mappings":";;AAkBIA,eAAU,GAAA;AACd,IAAI;AACFA,EAAUC,eAAAA,GAAAA,OAAAA;AACZ,CAAQ,CAAA,MAAA;AAER","file":"version.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const __LIBRARY_VERSION: string;\n\nlet Version = \"0.0.0\";\ntry {\n Version = __LIBRARY_VERSION;\n} catch {\n /* empty */\n}\n\nexport { Version };\n"]}
1
+ {"version":3,"sources":["version.ts"],"names":["Version","__LIBRARY_VERSION"],"mappings":";;AAkBIA,eAAU,GAAA;AACd,IAAI;AACFA,EAAUC,eAAAA,GAAAA,OAAAA;AACZ,CAAQ,CAAA,MAAA;AAER","file":"version.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const __LIBRARY_VERSION: string;\n\nlet Version = \"0.0.0\";\ntry {\n Version = __LIBRARY_VERSION;\n} catch {\n /* empty */\n}\n\nexport { Version };\n"]}
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
1
  let Version = "0.0.0";
2
2
  try {
3
- Version = "0.1.3";
3
+ Version = "0.1.5";
4
4
  } catch {
5
5
  }
6
6
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts"],"names":["Version","__LIBRARY_VERSION"],"mappings":"AAkBA,IAAIA,OAAU,GAAA;AACd,IAAI;AACFA,EAAUC,OAAAA,GAAAA,OAAAA;AACZ,CAAQ,CAAA,MAAA;AAER","file":"version.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const __LIBRARY_VERSION: string;\n\nlet Version = \"0.0.0\";\ntry {\n Version = __LIBRARY_VERSION;\n} catch {\n /* empty */\n}\n\nexport { Version };\n"]}
1
+ {"version":3,"sources":["version.ts"],"names":["Version","__LIBRARY_VERSION"],"mappings":"AAkBA,IAAIA,OAAU,GAAA;AACd,IAAI;AACFA,EAAUC,OAAAA,GAAAA,OAAAA;AACZ,CAAQ,CAAA,MAAA;AAER","file":"version.js","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const __LIBRARY_VERSION: string;\n\nlet Version = \"0.0.0\";\ntry {\n Version = __LIBRARY_VERSION;\n} catch {\n /* empty */\n}\n\nexport { Version };\n"]}