beeai-framework 0.1.3 → 0.1.4

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 (436) hide show
  1. package/dist/adapters/amazon-bedrock/backend/chat.cjs.map +1 -1
  2. package/dist/adapters/amazon-bedrock/backend/chat.d.cts +1 -1
  3. package/dist/adapters/amazon-bedrock/backend/chat.d.ts +1 -1
  4. package/dist/adapters/amazon-bedrock/backend/chat.js.map +1 -1
  5. package/dist/adapters/amazon-bedrock/backend/client.cjs.map +1 -1
  6. package/dist/adapters/amazon-bedrock/backend/client.js.map +1 -1
  7. package/dist/adapters/amazon-bedrock/backend/embedding.cjs.map +1 -1
  8. package/dist/adapters/amazon-bedrock/backend/embedding.d.cts +1 -1
  9. package/dist/adapters/amazon-bedrock/backend/embedding.d.ts +1 -1
  10. package/dist/adapters/amazon-bedrock/backend/embedding.js.map +1 -1
  11. package/dist/adapters/anthropic/backend/chat.cjs.map +1 -1
  12. package/dist/adapters/anthropic/backend/chat.d.cts +1 -1
  13. package/dist/adapters/anthropic/backend/chat.d.ts +1 -1
  14. package/dist/adapters/anthropic/backend/chat.js.map +1 -1
  15. package/dist/adapters/anthropic/backend/client.cjs.map +1 -1
  16. package/dist/adapters/anthropic/backend/client.js.map +1 -1
  17. package/dist/adapters/anthropic/backend/embedding.cjs.map +1 -1
  18. package/dist/adapters/anthropic/backend/embedding.d.cts +1 -1
  19. package/dist/adapters/anthropic/backend/embedding.d.ts +1 -1
  20. package/dist/adapters/anthropic/backend/embedding.js.map +1 -1
  21. package/dist/adapters/azure-openai/backend/chat.cjs.map +1 -1
  22. package/dist/adapters/azure-openai/backend/chat.d.cts +2 -2
  23. package/dist/adapters/azure-openai/backend/chat.d.ts +2 -2
  24. package/dist/adapters/azure-openai/backend/chat.js.map +1 -1
  25. package/dist/adapters/azure-openai/backend/client.cjs.map +1 -1
  26. package/dist/adapters/azure-openai/backend/client.js.map +1 -1
  27. package/dist/adapters/azure-openai/backend/embedding.cjs.map +1 -1
  28. package/dist/adapters/azure-openai/backend/embedding.d.cts +1 -1
  29. package/dist/adapters/azure-openai/backend/embedding.d.ts +1 -1
  30. package/dist/adapters/azure-openai/backend/embedding.js.map +1 -1
  31. package/dist/adapters/dummy/backend/chat.cjs.map +1 -1
  32. package/dist/adapters/dummy/backend/chat.d.cts +1 -1
  33. package/dist/adapters/dummy/backend/chat.d.ts +1 -1
  34. package/dist/adapters/dummy/backend/chat.js.map +1 -1
  35. package/dist/adapters/dummy/backend/embedding.cjs.map +1 -1
  36. package/dist/adapters/dummy/backend/embedding.d.cts +1 -1
  37. package/dist/adapters/dummy/backend/embedding.d.ts +1 -1
  38. package/dist/adapters/dummy/backend/embedding.js.map +1 -1
  39. package/dist/adapters/google-vertex/backend/chat.cjs.map +1 -1
  40. package/dist/adapters/google-vertex/backend/chat.d.cts +1 -1
  41. package/dist/adapters/google-vertex/backend/chat.d.ts +1 -1
  42. package/dist/adapters/google-vertex/backend/chat.js.map +1 -1
  43. package/dist/adapters/google-vertex/backend/client.cjs.map +1 -1
  44. package/dist/adapters/google-vertex/backend/client.js.map +1 -1
  45. package/dist/adapters/google-vertex/backend/embedding.cjs.map +1 -1
  46. package/dist/adapters/google-vertex/backend/embedding.d.cts +1 -1
  47. package/dist/adapters/google-vertex/backend/embedding.d.ts +1 -1
  48. package/dist/adapters/google-vertex/backend/embedding.js.map +1 -1
  49. package/dist/adapters/groq/backend/chat.cjs.map +1 -1
  50. package/dist/adapters/groq/backend/chat.d.cts +1 -1
  51. package/dist/adapters/groq/backend/chat.d.ts +1 -1
  52. package/dist/adapters/groq/backend/chat.js.map +1 -1
  53. package/dist/adapters/groq/backend/client.cjs.map +1 -1
  54. package/dist/adapters/groq/backend/client.js.map +1 -1
  55. package/dist/adapters/groq/backend/embedding.cjs.map +1 -1
  56. package/dist/adapters/groq/backend/embedding.d.cts +1 -1
  57. package/dist/adapters/groq/backend/embedding.d.ts +1 -1
  58. package/dist/adapters/groq/backend/embedding.js.map +1 -1
  59. package/dist/adapters/langchain/backend/chat.cjs.map +1 -1
  60. package/dist/adapters/langchain/backend/chat.d.cts +1 -1
  61. package/dist/adapters/langchain/backend/chat.d.ts +1 -1
  62. package/dist/adapters/langchain/backend/chat.js.map +1 -1
  63. package/dist/adapters/langchain/backend/embedding.cjs.map +1 -1
  64. package/dist/adapters/langchain/backend/embedding.d.cts +1 -1
  65. package/dist/adapters/langchain/backend/embedding.d.ts +1 -1
  66. package/dist/adapters/langchain/backend/embedding.js.map +1 -1
  67. package/dist/adapters/langchain/tools.cjs.map +1 -1
  68. package/dist/adapters/langchain/tools.d.cts +1 -1
  69. package/dist/adapters/langchain/tools.d.ts +1 -1
  70. package/dist/adapters/langchain/tools.js.map +1 -1
  71. package/dist/adapters/ollama/backend/chat.cjs.map +1 -1
  72. package/dist/adapters/ollama/backend/chat.d.cts +1 -1
  73. package/dist/adapters/ollama/backend/chat.d.ts +1 -1
  74. package/dist/adapters/ollama/backend/chat.js.map +1 -1
  75. package/dist/adapters/ollama/backend/client.cjs.map +1 -1
  76. package/dist/adapters/ollama/backend/client.js.map +1 -1
  77. package/dist/adapters/ollama/backend/embedding.cjs.map +1 -1
  78. package/dist/adapters/ollama/backend/embedding.d.cts +1 -1
  79. package/dist/adapters/ollama/backend/embedding.d.ts +1 -1
  80. package/dist/adapters/ollama/backend/embedding.js.map +1 -1
  81. package/dist/adapters/openai/backend/chat.cjs.map +1 -1
  82. package/dist/adapters/openai/backend/chat.d.cts +1 -1
  83. package/dist/adapters/openai/backend/chat.d.ts +1 -1
  84. package/dist/adapters/openai/backend/chat.js.map +1 -1
  85. package/dist/adapters/openai/backend/client.cjs.map +1 -1
  86. package/dist/adapters/openai/backend/client.js.map +1 -1
  87. package/dist/adapters/openai/backend/embedding.cjs.map +1 -1
  88. package/dist/adapters/openai/backend/embedding.d.cts +2 -2
  89. package/dist/adapters/openai/backend/embedding.d.ts +2 -2
  90. package/dist/adapters/openai/backend/embedding.js.map +1 -1
  91. package/dist/adapters/vercel/backend/chat.cjs +2 -2
  92. package/dist/adapters/vercel/backend/chat.cjs.map +1 -1
  93. package/dist/adapters/vercel/backend/chat.d.cts +1 -1
  94. package/dist/adapters/vercel/backend/chat.d.ts +1 -1
  95. package/dist/adapters/vercel/backend/chat.js +2 -2
  96. package/dist/adapters/vercel/backend/chat.js.map +1 -1
  97. package/dist/adapters/vercel/backend/embedding.cjs.map +1 -1
  98. package/dist/adapters/vercel/backend/embedding.d.cts +5 -5
  99. package/dist/adapters/vercel/backend/embedding.d.ts +5 -5
  100. package/dist/adapters/vercel/backend/embedding.js.map +1 -1
  101. package/dist/adapters/watsonx/backend/chat.cjs.map +1 -1
  102. package/dist/adapters/watsonx/backend/chat.d.cts +1 -1
  103. package/dist/adapters/watsonx/backend/chat.d.ts +1 -1
  104. package/dist/adapters/watsonx/backend/chat.js.map +1 -1
  105. package/dist/adapters/watsonx/backend/client.cjs.map +1 -1
  106. package/dist/adapters/watsonx/backend/client.js.map +1 -1
  107. package/dist/adapters/watsonx/backend/embedding.cjs.map +1 -1
  108. package/dist/adapters/watsonx/backend/embedding.d.cts +1 -1
  109. package/dist/adapters/watsonx/backend/embedding.d.ts +1 -1
  110. package/dist/adapters/watsonx/backend/embedding.js.map +1 -1
  111. package/dist/{agent-xmwFrFrh.d.cts → agent-CtPtFtGb.d.cts} +3 -3
  112. package/dist/{agent-D9gpIPf2.d.ts → agent-CxoSeic0.d.ts} +3 -3
  113. package/dist/agents/base.cjs.map +1 -1
  114. package/dist/agents/base.d.cts +2 -2
  115. package/dist/agents/base.d.ts +2 -2
  116. package/dist/agents/base.js.map +1 -1
  117. package/dist/agents/bee/agent.cjs.map +1 -1
  118. package/dist/agents/bee/agent.d.cts +3 -3
  119. package/dist/agents/bee/agent.d.ts +3 -3
  120. package/dist/agents/bee/agent.js.map +1 -1
  121. package/dist/agents/bee/prompts.cjs.map +1 -1
  122. package/dist/agents/bee/prompts.js.map +1 -1
  123. package/dist/agents/bee/runners/base.cjs.map +1 -1
  124. package/dist/agents/bee/runners/base.d.cts +3 -3
  125. package/dist/agents/bee/runners/base.d.ts +3 -3
  126. package/dist/agents/bee/runners/base.js.map +1 -1
  127. package/dist/agents/bee/runners/deep-think/prompts.cjs.map +1 -1
  128. package/dist/agents/bee/runners/deep-think/prompts.js.map +1 -1
  129. package/dist/agents/bee/runners/deep-think/runner.cjs +11 -11
  130. package/dist/agents/bee/runners/deep-think/runner.cjs.map +1 -1
  131. package/dist/agents/bee/runners/deep-think/runner.d.cts +3 -3
  132. package/dist/agents/bee/runners/deep-think/runner.d.ts +3 -3
  133. package/dist/agents/bee/runners/deep-think/runner.js +2 -2
  134. package/dist/agents/bee/runners/deep-think/runner.js.map +1 -1
  135. package/dist/agents/bee/runners/default/runner.cjs.map +1 -1
  136. package/dist/agents/bee/runners/default/runner.d.cts +3 -3
  137. package/dist/agents/bee/runners/default/runner.d.ts +3 -3
  138. package/dist/agents/bee/runners/default/runner.js +1 -1
  139. package/dist/agents/bee/runners/default/runner.js.map +1 -1
  140. package/dist/agents/bee/runners/default/runner.spec.cjs.map +1 -1
  141. package/dist/agents/bee/runners/default/runner.spec.js.map +1 -1
  142. package/dist/agents/bee/runners/granite/prompts.cjs.map +1 -1
  143. package/dist/agents/bee/runners/granite/prompts.js.map +1 -1
  144. package/dist/agents/bee/runners/granite/runner.cjs +11 -11
  145. package/dist/agents/bee/runners/granite/runner.cjs.map +1 -1
  146. package/dist/agents/bee/runners/granite/runner.d.cts +3 -3
  147. package/dist/agents/bee/runners/granite/runner.d.ts +3 -3
  148. package/dist/agents/bee/runners/granite/runner.js +2 -2
  149. package/dist/agents/bee/runners/granite/runner.js.map +1 -1
  150. package/dist/agents/bee/types.d.cts +1 -1
  151. package/dist/agents/bee/types.d.ts +1 -1
  152. package/dist/agents/experimental/replan/agent.cjs.map +1 -1
  153. package/dist/agents/experimental/replan/agent.d.cts +2 -2
  154. package/dist/agents/experimental/replan/agent.d.ts +2 -2
  155. package/dist/agents/experimental/replan/agent.js.map +1 -1
  156. package/dist/agents/experimental/replan/prompts.cjs.map +1 -1
  157. package/dist/agents/experimental/replan/prompts.d.cts +1 -1
  158. package/dist/agents/experimental/replan/prompts.d.ts +1 -1
  159. package/dist/agents/experimental/replan/prompts.js.map +1 -1
  160. package/dist/agents/experimental/streamlit/agent.cjs.map +1 -1
  161. package/dist/agents/experimental/streamlit/agent.d.cts +2 -2
  162. package/dist/agents/experimental/streamlit/agent.d.ts +2 -2
  163. package/dist/agents/experimental/streamlit/agent.js.map +1 -1
  164. package/dist/agents/experimental/streamlit/prompts.cjs.map +1 -1
  165. package/dist/agents/experimental/streamlit/prompts.js.map +1 -1
  166. package/dist/agents/types.d.cts +2 -2
  167. package/dist/agents/types.d.ts +2 -2
  168. package/dist/backend/backend.cjs.map +1 -1
  169. package/dist/backend/backend.d.cts +1 -1
  170. package/dist/backend/backend.d.ts +1 -1
  171. package/dist/backend/backend.js.map +1 -1
  172. package/dist/backend/chat.cjs.map +1 -1
  173. package/dist/backend/chat.d.cts +1 -1
  174. package/dist/backend/chat.d.ts +1 -1
  175. package/dist/backend/chat.js.map +1 -1
  176. package/dist/backend/client.cjs.map +1 -1
  177. package/dist/backend/client.js.map +1 -1
  178. package/dist/backend/constants.cjs.map +1 -1
  179. package/dist/backend/constants.js.map +1 -1
  180. package/dist/backend/core.d.cts +1 -1
  181. package/dist/backend/core.d.ts +1 -1
  182. package/dist/backend/embedding.cjs.map +1 -1
  183. package/dist/backend/embedding.d.cts +1 -1
  184. package/dist/backend/embedding.d.ts +1 -1
  185. package/dist/backend/embedding.js.map +1 -1
  186. package/dist/backend/errors.cjs.map +1 -1
  187. package/dist/backend/errors.js.map +1 -1
  188. package/dist/backend/message.cjs.map +1 -1
  189. package/dist/backend/message.js.map +1 -1
  190. package/dist/backend/utils.cjs.map +1 -1
  191. package/dist/backend/utils.js.map +1 -1
  192. package/dist/{base-daM6fHUP.d.cts → base-Csr9guq2.d.cts} +1 -1
  193. package/dist/{base-mmG-8Pk9.d.ts → base-DHhpWHQm.d.ts} +1 -1
  194. package/dist/cache/base.cjs.map +1 -1
  195. package/dist/cache/base.js.map +1 -1
  196. package/dist/cache/decoratorCache.cjs.map +1 -1
  197. package/dist/cache/decoratorCache.js.map +1 -1
  198. package/dist/cache/fileCache.cjs.map +1 -1
  199. package/dist/cache/fileCache.js.map +1 -1
  200. package/dist/cache/nullCache.cjs.map +1 -1
  201. package/dist/cache/nullCache.js.map +1 -1
  202. package/dist/cache/slidingCache.cjs.map +1 -1
  203. package/dist/cache/slidingCache.js.map +1 -1
  204. package/dist/cache/unconstrainedCache.cjs.map +1 -1
  205. package/dist/cache/unconstrainedCache.js.map +1 -1
  206. package/dist/context.cjs.map +1 -1
  207. package/dist/context.d.cts +1 -1
  208. package/dist/context.d.ts +1 -1
  209. package/dist/context.js.map +1 -1
  210. package/dist/emitter/emitter.cjs.map +1 -1
  211. package/dist/emitter/emitter.d.cts +1 -1
  212. package/dist/emitter/emitter.d.ts +1 -1
  213. package/dist/emitter/emitter.js.map +1 -1
  214. package/dist/emitter/errors.cjs.map +1 -1
  215. package/dist/emitter/errors.js.map +1 -1
  216. package/dist/emitter/types.d.cts +1 -1
  217. package/dist/emitter/types.d.ts +1 -1
  218. package/dist/emitter/utils.cjs.map +1 -1
  219. package/dist/emitter/utils.js.map +1 -1
  220. package/dist/errors.cjs.map +1 -1
  221. package/dist/errors.js.map +1 -1
  222. package/dist/index.d.cts +2 -2
  223. package/dist/index.d.ts +2 -2
  224. package/dist/instrumentation/config.cjs.map +1 -1
  225. package/dist/instrumentation/config.js.map +1 -1
  226. package/dist/instrumentation/create-telemetry-middleware.cjs.map +1 -1
  227. package/dist/instrumentation/create-telemetry-middleware.d.cts +1 -1
  228. package/dist/instrumentation/create-telemetry-middleware.d.ts +1 -1
  229. package/dist/instrumentation/create-telemetry-middleware.js.map +1 -1
  230. package/dist/instrumentation/helpers/create-span.cjs.map +1 -1
  231. package/dist/instrumentation/helpers/create-span.js.map +1 -1
  232. package/dist/instrumentation/helpers/get-error-safe.cjs.map +1 -1
  233. package/dist/instrumentation/helpers/get-error-safe.js.map +1 -1
  234. package/dist/instrumentation/helpers/get-serialized-object-safe.cjs.map +1 -1
  235. package/dist/instrumentation/helpers/get-serialized-object-safe.js.map +1 -1
  236. package/dist/instrumentation/helpers/id-name-manager.cjs.map +1 -1
  237. package/dist/instrumentation/helpers/id-name-manager.js.map +1 -1
  238. package/dist/instrumentation/helpers/trace-serializer.cjs.map +1 -1
  239. package/dist/instrumentation/helpers/trace-serializer.js.map +1 -1
  240. package/dist/instrumentation/helpers/utils.cjs.map +1 -1
  241. package/dist/instrumentation/helpers/utils.d.cts +1 -1
  242. package/dist/instrumentation/helpers/utils.d.ts +1 -1
  243. package/dist/instrumentation/helpers/utils.js.map +1 -1
  244. package/dist/instrumentation/logger.cjs.map +1 -1
  245. package/dist/instrumentation/logger.js.map +1 -1
  246. package/dist/instrumentation/tracer.cjs.map +1 -1
  247. package/dist/instrumentation/tracer.js.map +1 -1
  248. package/dist/internals/env.cjs.map +1 -1
  249. package/dist/internals/env.js.map +1 -1
  250. package/dist/internals/fetcher.cjs.map +1 -1
  251. package/dist/internals/fetcher.d.cts +1 -1
  252. package/dist/internals/fetcher.d.ts +1 -1
  253. package/dist/internals/fetcher.js.map +1 -1
  254. package/dist/internals/helpers/array.cjs.map +1 -1
  255. package/dist/internals/helpers/array.js.map +1 -1
  256. package/dist/internals/helpers/cancellation.cjs.map +1 -1
  257. package/dist/internals/helpers/cancellation.js.map +1 -1
  258. package/dist/internals/helpers/counter.cjs.map +1 -1
  259. package/dist/internals/helpers/counter.js.map +1 -1
  260. package/dist/internals/helpers/general.cjs.map +1 -1
  261. package/dist/internals/helpers/general.js.map +1 -1
  262. package/dist/internals/helpers/guards.cjs.map +1 -1
  263. package/dist/internals/helpers/guards.js.map +1 -1
  264. package/dist/internals/helpers/hash.cjs.map +1 -1
  265. package/dist/internals/helpers/hash.js.map +1 -1
  266. package/dist/internals/helpers/map.cjs.map +1 -1
  267. package/dist/internals/helpers/map.js.map +1 -1
  268. package/dist/internals/helpers/math.cjs.map +1 -1
  269. package/dist/internals/helpers/math.js.map +1 -1
  270. package/dist/internals/helpers/number.cjs.map +1 -1
  271. package/dist/internals/helpers/number.js.map +1 -1
  272. package/dist/internals/helpers/object.cjs.map +1 -1
  273. package/dist/internals/helpers/object.js.map +1 -1
  274. package/dist/internals/helpers/paginate.cjs.map +1 -1
  275. package/dist/internals/helpers/paginate.js.map +1 -1
  276. package/dist/internals/helpers/promise.cjs.map +1 -1
  277. package/dist/internals/helpers/promise.js.map +1 -1
  278. package/dist/internals/helpers/prototype.cjs.map +1 -1
  279. package/dist/internals/helpers/prototype.js.map +1 -1
  280. package/dist/internals/helpers/retry.cjs.map +1 -1
  281. package/dist/internals/helpers/retry.js.map +1 -1
  282. package/dist/internals/helpers/retryable.cjs.map +1 -1
  283. package/dist/internals/helpers/retryable.js.map +1 -1
  284. package/dist/internals/helpers/schema.cjs.map +1 -1
  285. package/dist/internals/helpers/schema.d.cts +1 -1
  286. package/dist/internals/helpers/schema.d.ts +1 -1
  287. package/dist/internals/helpers/schema.js.map +1 -1
  288. package/dist/internals/helpers/stream.cjs.map +1 -1
  289. package/dist/internals/helpers/stream.js.map +1 -1
  290. package/dist/internals/helpers/string.cjs.map +1 -1
  291. package/dist/internals/helpers/string.js.map +1 -1
  292. package/dist/internals/helpers/weakRef.cjs.map +1 -1
  293. package/dist/internals/helpers/weakRef.js.map +1 -1
  294. package/dist/internals/serializable.cjs.map +1 -1
  295. package/dist/internals/serializable.js.map +1 -1
  296. package/dist/internals/types.cjs.map +1 -1
  297. package/dist/internals/types.js.map +1 -1
  298. package/dist/logger/logger.cjs.map +1 -1
  299. package/dist/logger/logger.js.map +1 -1
  300. package/dist/logger/pretty.cjs.map +1 -1
  301. package/dist/logger/pretty.js.map +1 -1
  302. package/dist/memory/base.cjs.map +1 -1
  303. package/dist/memory/base.js.map +1 -1
  304. package/dist/memory/slidingMemory.cjs.map +1 -1
  305. package/dist/memory/slidingMemory.js.map +1 -1
  306. package/dist/memory/summarizeMemory.cjs.map +1 -1
  307. package/dist/memory/summarizeMemory.d.cts +1 -1
  308. package/dist/memory/summarizeMemory.d.ts +1 -1
  309. package/dist/memory/summarizeMemory.js.map +1 -1
  310. package/dist/memory/tokenMemory.cjs.map +1 -1
  311. package/dist/memory/tokenMemory.js.map +1 -1
  312. package/dist/memory/unconstrainedMemory.cjs.map +1 -1
  313. package/dist/memory/unconstrainedMemory.js.map +1 -1
  314. package/dist/parsers/errors.cjs.map +1 -1
  315. package/dist/parsers/errors.js.map +1 -1
  316. package/dist/parsers/field.cjs.map +1 -1
  317. package/dist/parsers/field.js.map +1 -1
  318. package/dist/parsers/linePrefix.cjs.map +1 -1
  319. package/dist/parsers/linePrefix.d.cts +1 -1
  320. package/dist/parsers/linePrefix.d.ts +1 -1
  321. package/dist/parsers/linePrefix.js.map +1 -1
  322. package/dist/serializer/error.cjs.map +1 -1
  323. package/dist/serializer/error.js.map +1 -1
  324. package/dist/serializer/serializer.cjs +3 -3
  325. package/dist/serializer/serializer.cjs.map +1 -1
  326. package/dist/serializer/serializer.js +2 -2
  327. package/dist/serializer/serializer.js.map +1 -1
  328. package/dist/serializer/utils.cjs.map +1 -1
  329. package/dist/serializer/utils.js.map +1 -1
  330. package/dist/template.cjs.map +1 -1
  331. package/dist/template.d.cts +1 -1
  332. package/dist/template.d.ts +1 -1
  333. package/dist/template.js.map +1 -1
  334. package/dist/tools/arxiv.cjs.map +1 -1
  335. package/dist/tools/arxiv.d.cts +2 -2
  336. package/dist/tools/arxiv.d.ts +2 -2
  337. package/dist/tools/arxiv.js.map +1 -1
  338. package/dist/tools/base.cjs.map +1 -1
  339. package/dist/tools/base.d.cts +2 -2
  340. package/dist/tools/base.d.ts +2 -2
  341. package/dist/tools/base.js.map +1 -1
  342. package/dist/tools/calculator.cjs.map +1 -1
  343. package/dist/tools/calculator.d.cts +1 -1
  344. package/dist/tools/calculator.d.ts +1 -1
  345. package/dist/tools/calculator.js.map +1 -1
  346. package/dist/tools/custom.cjs.map +1 -1
  347. package/dist/tools/custom.d.cts +1 -1
  348. package/dist/tools/custom.d.ts +1 -1
  349. package/dist/tools/custom.js.map +1 -1
  350. package/dist/tools/database/elasticsearch.cjs.map +1 -1
  351. package/dist/tools/database/elasticsearch.d.cts +1 -1
  352. package/dist/tools/database/elasticsearch.d.ts +1 -1
  353. package/dist/tools/database/elasticsearch.js.map +1 -1
  354. package/dist/tools/database/metadata.cjs.map +1 -1
  355. package/dist/tools/database/metadata.js.map +1 -1
  356. package/dist/tools/database/milvus.cjs.map +1 -1
  357. package/dist/tools/database/milvus.d.cts +1 -1
  358. package/dist/tools/database/milvus.d.ts +1 -1
  359. package/dist/tools/database/milvus.js.map +1 -1
  360. package/dist/tools/database/sql.cjs.map +1 -1
  361. package/dist/tools/database/sql.d.cts +3 -3
  362. package/dist/tools/database/sql.d.ts +3 -3
  363. package/dist/tools/database/sql.js.map +1 -1
  364. package/dist/tools/llm.cjs.map +1 -1
  365. package/dist/tools/llm.d.cts +1 -1
  366. package/dist/tools/llm.d.ts +1 -1
  367. package/dist/tools/llm.js +1 -1
  368. package/dist/tools/llm.js.map +1 -1
  369. package/dist/tools/mcp.cjs.map +1 -1
  370. package/dist/tools/mcp.d.cts +1 -1
  371. package/dist/tools/mcp.d.ts +1 -1
  372. package/dist/tools/mcp.js.map +1 -1
  373. package/dist/tools/openapi.cjs.map +1 -1
  374. package/dist/tools/openapi.d.cts +1 -1
  375. package/dist/tools/openapi.d.ts +1 -1
  376. package/dist/tools/openapi.js +1 -1
  377. package/dist/tools/openapi.js.map +1 -1
  378. package/dist/tools/python/output.cjs.map +1 -1
  379. package/dist/tools/python/output.d.cts +1 -1
  380. package/dist/tools/python/output.d.ts +1 -1
  381. package/dist/tools/python/output.js.map +1 -1
  382. package/dist/tools/python/python.cjs.map +1 -1
  383. package/dist/tools/python/python.d.cts +1 -1
  384. package/dist/tools/python/python.d.ts +1 -1
  385. package/dist/tools/python/python.js.map +1 -1
  386. package/dist/tools/python/storage.cjs.map +1 -1
  387. package/dist/tools/python/storage.js.map +1 -1
  388. package/dist/tools/search/base.cjs.map +1 -1
  389. package/dist/tools/search/base.d.cts +1 -1
  390. package/dist/tools/search/base.d.ts +1 -1
  391. package/dist/tools/search/base.js.map +1 -1
  392. package/dist/tools/search/duckDuckGoSearch.cjs +19 -19
  393. package/dist/tools/search/duckDuckGoSearch.cjs.map +1 -1
  394. package/dist/tools/search/duckDuckGoSearch.d.cts +2 -4
  395. package/dist/tools/search/duckDuckGoSearch.d.ts +2 -4
  396. package/dist/tools/search/duckDuckGoSearch.js +17 -13
  397. package/dist/tools/search/duckDuckGoSearch.js.map +1 -1
  398. package/dist/tools/search/googleSearch.cjs.map +1 -1
  399. package/dist/tools/search/googleSearch.d.cts +1 -1
  400. package/dist/tools/search/googleSearch.d.ts +1 -1
  401. package/dist/tools/search/googleSearch.js.map +1 -1
  402. package/dist/tools/search/searXNGSearch.cjs.map +1 -1
  403. package/dist/tools/search/searXNGSearch.d.cts +1 -1
  404. package/dist/tools/search/searXNGSearch.d.ts +1 -1
  405. package/dist/tools/search/searXNGSearch.js.map +1 -1
  406. package/dist/tools/search/wikipedia.cjs.map +1 -1
  407. package/dist/tools/search/wikipedia.d.cts +1 -1
  408. package/dist/tools/search/wikipedia.d.ts +1 -1
  409. package/dist/tools/search/wikipedia.js.map +1 -1
  410. package/dist/tools/similarity.cjs.map +1 -1
  411. package/dist/tools/similarity.d.cts +2 -2
  412. package/dist/tools/similarity.d.ts +2 -2
  413. package/dist/tools/similarity.js.map +1 -1
  414. package/dist/tools/weather/openMeteo.cjs.map +1 -1
  415. package/dist/tools/weather/openMeteo.d.cts +2 -2
  416. package/dist/tools/weather/openMeteo.d.ts +2 -2
  417. package/dist/tools/weather/openMeteo.js.map +1 -1
  418. package/dist/tools/web/webCrawler.cjs.map +1 -1
  419. package/dist/tools/web/webCrawler.d.cts +2 -2
  420. package/dist/tools/web/webCrawler.d.ts +2 -2
  421. package/dist/tools/web/webCrawler.js.map +1 -1
  422. package/dist/version.cjs +1 -1
  423. package/dist/version.cjs.map +1 -1
  424. package/dist/version.js +1 -1
  425. package/dist/version.js.map +1 -1
  426. package/dist/workflows/agent.cjs.map +1 -1
  427. package/dist/workflows/agent.d.cts +10 -10
  428. package/dist/workflows/agent.d.ts +10 -10
  429. package/dist/workflows/agent.js.map +1 -1
  430. package/dist/workflows/workflow.cjs.map +1 -1
  431. package/dist/workflows/workflow.d.cts +1 -1
  432. package/dist/workflows/workflow.d.ts +1 -1
  433. package/dist/workflows/workflow.js.map +1 -1
  434. package/package.json +20 -20
  435. package/dist/{emitter-C9EN5B0j.d.cts → emitter-BWtGHYn0.d.cts} +1 -1
  436. package/dist/{emitter-BxVxGBbJ.d.ts → emitter-l0W9gC1A.d.ts} +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/database/sql.ts"],"names":["SQLToolAction","GetMetadata","Query","SQLToolOutput","JSONToolOutput","SQLTool","Tool","name","description","inputSchema","z","object","action","nativeEnum","describe","query","string","optional","emitter","Emitter","root","child","namespace","creator","options","connection","dialect","ValidationError","message","propertyName","schema","provider","storage","validateInput","input","ToolInputValidationError","register","sequelize","Sequelize","authenticate","error","ToolError","isRetryable","isFatal","_run","_options","metadata","getMetadata","executeQuery","isReadOnlyQuery","success","results","Array","isArray","length","schemaHint","errorMessage","normalizedQuery","trim","toUpperCase","startsWith","destroy","cache","Cache","getInstance","entry","get","clear","data","close"],"mappings":"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","file":"sql.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 Tool,\n ToolInput,\n ToolError,\n BaseToolOptions,\n BaseToolRunOptions,\n JSONToolOutput,\n ToolInputValidationError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Sequelize, Options } from \"sequelize\";\nimport { Provider, getMetadata } from \"@/tools/database/metadata.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ValidationError } from \"ajv\";\nimport { AnyToolSchemaLike } from \"@/internals/helpers/schema.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\ninterface ToolOptions extends BaseToolOptions {\n provider: Provider;\n connection: Options;\n}\n\ntype ToolRunOptions = BaseToolRunOptions;\n\nexport const SQLToolAction = {\n GetMetadata: \"GET_METADATA\",\n Query: \"QUERY\",\n} as const;\n\nexport class SQLToolOutput extends JSONToolOutput<any> {}\n\nexport class SQLTool extends Tool<SQLToolOutput, ToolOptions, ToolRunOptions> {\n name = \"SQLTool\";\n\n description = `Converts natural language to SQL query and executes it. IMPORTANT: strictly follow this order of actions:\n 1. ${SQLToolAction.GetMetadata} - get database tables structure (metadata)\n 2. ${SQLToolAction.Query} - execute the generated SQL query`;\n\n inputSchema() {\n return z.object({\n action: z\n .nativeEnum(SQLToolAction)\n .describe(\n `The action to perform. ${SQLToolAction.GetMetadata} get database tables structure, ${SQLToolAction.Query} execute the SQL query`,\n ),\n query: z\n .string()\n .optional()\n .describe(`The SQL query to be executed, required for ${SQLToolAction.Query} action`),\n });\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SQLToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"database\", \"sql\"],\n creator: this,\n });\n\n public constructor(options: ToolOptions) {\n super(options);\n if (!options.connection.dialect) {\n throw new ValidationError([\n {\n message: \"Property is required\",\n propertyName: \"connection.dialect\",\n },\n ]);\n }\n if (\n !options.connection.schema &&\n (options.provider === \"oracle\" || options.provider === \"db2\")\n ) {\n throw new ValidationError([\n {\n message: `Property is required for ${options.provider}`,\n propertyName: \"connection.schema\",\n },\n ]);\n }\n if (!options.connection.storage && options.provider === \"sqlite\") {\n throw new ValidationError([\n {\n message: `Property is required for ${options.provider}`,\n propertyName: \"connection.storage\",\n },\n ]);\n }\n }\n\n protected validateInput(\n schema: AnyToolSchemaLike,\n input: unknown,\n ): asserts input is ToolInput<this> {\n super.validateInput(schema, input);\n if (input.action === SQLToolAction.Query && !input.query) {\n throw new ToolInputValidationError(\n `SQL Query is required for ${SQLToolAction.Query} action.`,\n );\n }\n }\n\n static {\n this.register();\n }\n\n @Cache()\n protected async connection(): Promise<Sequelize> {\n try {\n const sequelize = new Sequelize(this.options.connection);\n\n await sequelize.authenticate();\n return sequelize;\n } catch (error) {\n throw new ToolError(`Unable to connect to database: ${error}`, [], {\n isRetryable: false,\n isFatal: true,\n });\n }\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<ToolRunOptions>,\n ): Promise<SQLToolOutput> {\n const { provider, connection } = this.options;\n const { schema } = connection;\n\n if (input.action === SQLToolAction.GetMetadata) {\n const sequelize = await this.connection();\n const metadata = await getMetadata(sequelize, provider, schema);\n return new SQLToolOutput(metadata);\n }\n\n if (input.action === SQLToolAction.Query) {\n return await this.executeQuery(input.query!, provider, schema);\n }\n\n throw new ToolError(`Invalid action specified: ${input.action}`);\n }\n\n protected async executeQuery(\n query: string,\n provider: Provider,\n schema: string | undefined,\n ): Promise<SQLToolOutput> {\n if (!this.isReadOnlyQuery(query)) {\n return new JSONToolOutput({\n success: false,\n error: \"Invalid query. Only SELECT queries are allowed.\",\n });\n }\n\n try {\n const sequelize = await this.connection();\n const [results] = await sequelize.query(query);\n if (Array.isArray(results) && results.length > 0) {\n return new JSONToolOutput({ success: true, results });\n }\n\n return new JSONToolOutput({\n success: false,\n message: `No rows selected`,\n });\n } catch (error) {\n const schemaHint = schema\n ? `Fully qualify the table names by appending the schema name \"${schema}\" as a prefix, for example: ${schema}.table_name`\n : \"\";\n const errorMessage = `Generate a correct query that retrieves data using the appropriate ${provider} dialect.\n ${schemaHint}\n The original request was: ${query}, and the error was: ${error.message}.`;\n throw new ToolError(errorMessage);\n }\n }\n\n private isReadOnlyQuery(query: string): boolean {\n const normalizedQuery = query.trim().toUpperCase();\n return (\n normalizedQuery.startsWith(\"SELECT\") ||\n normalizedQuery.startsWith(\"SHOW\") ||\n normalizedQuery.startsWith(\"DESC\")\n );\n }\n\n public async destroy(): Promise<void> {\n // @ts-expect-error protected property\n const cache = Cache.getInstance(this, \"connection\");\n const entry = cache.get();\n\n if (entry) {\n cache.clear();\n\n try {\n await entry.data.close();\n } catch (error) {\n throw new ToolError(`Failed to close the database connection`, [error]);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["sql.ts"],"names":["SQLToolAction","GetMetadata","Query","SQLToolOutput","JSONToolOutput","SQLTool","Tool","name","description","inputSchema","z","object","action","nativeEnum","describe","query","string","optional","emitter","Emitter","root","child","namespace","creator","options","connection","dialect","ValidationError","message","propertyName","schema","provider","storage","validateInput","input","ToolInputValidationError","register","sequelize","Sequelize","authenticate","error","ToolError","isRetryable","isFatal","_run","_options","metadata","getMetadata","executeQuery","isReadOnlyQuery","success","results","Array","isArray","length","schemaHint","errorMessage","normalizedQuery","trim","toUpperCase","startsWith","destroy","cache","Cache","getInstance","entry","get","clear","data","close"],"mappings":";;;;;;;;;;;;AAcC,SAAA,YAAA,CAAA,UAAA,EAAA,MAAA,EAAA,GAAA,EAAA,IAAA,EAAA;;;;;;AAAA,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;;;;;AA2BM,MAAMA,aAAgB,GAAA;EAC3BC,WAAa,EAAA,cAAA;EACbC,KAAO,EAAA;AACT;AAEO,MAAMC,sBAAsBC,uBAAAA,CAAAA;EA9CnC;;;AA8CwD;AAEjD,MAAMC,gBAAgBC,aAAAA,CAAAA;EAhD7B;;;EAiDEC,IAAO,GAAA,SAAA;EAEPC,WAAc,GAAA,CAAA;AACRR,MAAAA,EAAAA,aAAAA,CAAcC,WAAW,CAAA;AACzBD,MAAAA,EAAAA,aAAAA,CAAcE,KAAK,CAAA,kCAAA,CAAA;EAEzBO,WAAc,GAAA;AACZ,IAAA,OAAOC,MAAEC,MAAO,CAAA;MACdC,MAAQF,EAAAA,KAAAA,CACLG,UAAWb,CAAAA,aAAAA,CACXc,CAAAA,QAAAA,CACC,CAA0Bd,uBAAAA,EAAAA,aAAAA,CAAcC,WAAW,CAAA,gCAAA,EAAmCD,aAAcE,CAAAA,KAAK,CAAwB,sBAAA,CAAA,CAAA;MAErIa,KAAOL,EAAAA,KAAAA,CACJM,QACAC,CAAAA,QAAAA,GACAH,QAAS,CAAA,CAAA,2CAAA,EAA8Cd,aAAcE,CAAAA,KAAK,CAAS,OAAA,CAAA;KACxF,CAAA;AACF;EAEgBgB,OAAuDC,GAAAA,mBAAAA,CAAQC,KAAKC,KAAM,CAAA;IACxFC,SAAW,EAAA;AAAC,MAAA,MAAA;AAAQ,MAAA,UAAA;AAAY,MAAA;;IAChCC,OAAS,EAAA;GACX,CAAA;AAEA,EAAA,WAAA,CAAmBC,OAAsB,EAAA;AACvC,IAAA,KAAA,CAAMA,OAAAA,CAAAA;AACN,IAAI,IAAA,CAACA,OAAQC,CAAAA,UAAAA,CAAWC,OAAS,EAAA;AAC/B,MAAA,MAAM,IAAIC,mBAAgB,CAAA;AACxB,QAAA;UACEC,OAAS,EAAA,sBAAA;UACTC,YAAc,EAAA;AAChB;AACD,OAAA,CAAA;AACH;AACA,IACE,IAAA,CAACL,QAAQC,UAAWK,CAAAA,MAAAA,KACnBN,QAAQO,QAAa,KAAA,QAAA,IAAYP,OAAQO,CAAAA,QAAAA,KAAa,KACvD,CAAA,EAAA;AACA,MAAA,MAAM,IAAIJ,mBAAgB,CAAA;AACxB,QAAA;UACEC,OAAS,EAAA,CAAA,yBAAA,EAA4BJ,QAAQO,QAAQ,CAAA,CAAA;UACrDF,YAAc,EAAA;AAChB;AACD,OAAA,CAAA;AACH;AACA,IAAA,IAAI,CAACL,OAAQC,CAAAA,UAAAA,CAAWO,OAAWR,IAAAA,OAAAA,CAAQO,aAAa,QAAU,EAAA;AAChE,MAAA,MAAM,IAAIJ,mBAAgB,CAAA;AACxB,QAAA;UACEC,OAAS,EAAA,CAAA,yBAAA,EAA4BJ,QAAQO,QAAQ,CAAA,CAAA;UACrDF,YAAc,EAAA;AAChB;AACD,OAAA,CAAA;AACH;AACF;AAEUI,EAAAA,aAAAA,CACRH,QACAI,KACkC,EAAA;AAClC,IAAMD,KAAAA,CAAAA,aAAAA,CAAcH,QAAQI,KAAAA,CAAAA;AAC5B,IAAA,IAAIA,MAAMtB,MAAWZ,KAAAA,aAAAA,CAAcE,KAAS,IAAA,CAACgC,MAAMnB,KAAO,EAAA;AACxD,MAAA,MAAM,IAAIoB,iCAAAA,CACR,CAA6BnC,0BAAAA,EAAAA,aAAAA,CAAcE,KAAK,CAAU,QAAA,CAAA,CAAA;AAE9D;AACF;EAEA;AACE,IAAA,IAAA,CAAKkC,QAAQ,EAAA;AACf;AAEA,EAAA,MACgBX,UAAiC,GAAA;AAC/C,IAAI,IAAA;AACF,MAAA,MAAMY,WAAY,GAAA,IAAIC,mBAAU,CAAA,IAAA,CAAKd,QAAQC,UAAU,CAAA;AAEvD,MAAA,MAAMY,YAAUE,YAAY,EAAA;AAC5B,MAAOF,OAAAA,WAAAA;AACT,KAAA,CAAA,OAASG,KAAO,EAAA;AACd,MAAA,MAAM,IAAIC,kBAAU,CAAA,CAAA,+BAAA,EAAkCD,KAAAA,CAAAA,CAAAA,EAAS,EAAI,EAAA;QACjEE,WAAa,EAAA,KAAA;QACbC,OAAS,EAAA;OACX,CAAA;AACF;AACF;EAEA,MAAgBC,IAAAA,CACdV,OACAW,QACwB,EAAA;AACxB,IAAA,MAAM,EAAEd,QAAAA,EAAUN,UAAU,EAAA,GAAK,IAAKD,CAAAA,OAAAA;AACtC,IAAM,MAAA,EAAEM,QAAWL,GAAAA,UAAAA;AAEnB,IAAIS,IAAAA,KAAAA,CAAMtB,MAAWZ,KAAAA,aAAAA,CAAcC,WAAa,EAAA;AAC9C,MAAMoC,MAAAA,SAAAA,GAAY,MAAM,IAAA,CAAKZ,UAAU,EAAA;AACvC,MAAA,MAAMqB,QAAW,GAAA,MAAMC,wBAAYV,CAAAA,SAAAA,EAAWN,UAAUD,MAAAA,CAAAA;AACxD,MAAO,OAAA,IAAI3B,cAAc2C,QAAAA,CAAAA;AAC3B;AAEA,IAAIZ,IAAAA,KAAAA,CAAMtB,MAAWZ,KAAAA,aAAAA,CAAcE,KAAO,EAAA;AACxC,MAAA,OAAO,MAAM,IAAK8C,CAAAA,YAAAA,CAAad,KAAMnB,CAAAA,KAAAA,EAAQgB,UAAUD,MAAAA,CAAAA;AACzD;AAEA,IAAA,MAAM,IAAIW,kBAAAA,CAAU,CAA6BP,0BAAAA,EAAAA,KAAAA,CAAMtB,MAAM,CAAE,CAAA,CAAA;AACjE;EAEA,MAAgBoC,YAAAA,CACdjC,KACAgB,EAAAA,QAAAA,EACAD,MACwB,EAAA;AACxB,IAAA,IAAI,CAAC,IAAA,CAAKmB,eAAgBlC,CAAAA,KAAAA,CAAQ,EAAA;AAChC,MAAA,OAAO,IAAIX,uBAAe,CAAA;QACxB8C,OAAS,EAAA,KAAA;QACTV,KAAO,EAAA;OACT,CAAA;AACF;AAEA,IAAI,IAAA;AACF,MAAMH,MAAAA,SAAAA,GAAY,MAAM,IAAA,CAAKZ,UAAU,EAAA;AACvC,MAAA,MAAM,CAAC0B,OAAAA,CAAAA,GAAW,MAAMd,SAAAA,CAAUtB,MAAMA,KAAAA,CAAAA;AACxC,MAAA,IAAIqC,MAAMC,OAAQF,CAAAA,OAAAA,CAAYA,IAAAA,OAAAA,CAAQG,SAAS,CAAG,EAAA;AAChD,QAAA,OAAO,IAAIlD,uBAAe,CAAA;UAAE8C,OAAS,EAAA,IAAA;AAAMC,UAAAA;SAAQ,CAAA;AACrD;AAEA,MAAA,OAAO,IAAI/C,uBAAe,CAAA;QACxB8C,OAAS,EAAA,KAAA;QACTtB,OAAS,EAAA,CAAA,gBAAA;OACX,CAAA;AACF,KAAA,CAAA,OAASY,KAAO,EAAA;AACd,MAAA,MAAMe,aAAazB,MACf,GAAA,CAAA,4DAAA,EAA+DA,MAAAA,CAAAA,4BAAAA,EAAqCA,MAAAA,CACpG,WAAA,CAAA,GAAA,EAAA;AACJ,MAAM0B,MAAAA,YAAAA,GAAe,sEAAsEzB,QAAAA,CAAAA;QACzFwB,UAAAA;kCAC0BxC,KAAAA,CAAAA,qBAAAA,EAA6ByB,MAAMZ,OAAO,CAAA,CAAA,CAAA;AACtE,MAAM,MAAA,IAAIa,mBAAUe,YAAAA,CAAAA;AACtB;AACF;AAEQP,EAAAA,eAAAA,CAAgBlC,KAAwB,EAAA;AAC9C,IAAA,MAAM0C,eAAkB1C,GAAAA,KAAAA,CAAM2C,IAAI,EAAA,CAAGC,WAAW,EAAA;AAChD,IACEF,OAAAA,eAAAA,CAAgBG,UAAW,CAAA,QAAA,CAC3BH,IAAAA,eAAAA,CAAgBG,WAAW,MAAA,CAAA,IAC3BH,eAAgBG,CAAAA,UAAAA,CAAW,MAAA,CAAA;AAE/B;AAEA,EAAA,MAAaC,OAAyB,GAAA;AAEpC,IAAA,MAAMC,KAAQC,GAAAA,wBAAAA,CAAMC,WAAY,CAAA,IAAA,EAAM,YAAA,CAAA;AACtC,IAAMC,MAAAA,KAAAA,GAAQH,MAAMI,GAAG,EAAA;AAEvB,IAAA,IAAID,KAAO,EAAA;AACTH,MAAAA,KAAAA,CAAMK,KAAK,EAAA;AAEX,MAAI,IAAA;AACF,QAAMF,MAAAA,KAAAA,CAAMG,KAAKC,KAAK,EAAA;AACxB,OAAA,CAAA,OAAS7B,KAAO,EAAA;AACd,QAAM,MAAA,IAAIC,mBAAU,CAA2C,uCAAA,CAAA,EAAA;AAACD,UAAAA;AAAM,SAAA,CAAA;AACxE;AACF;AACF;AACF","file":"sql.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 Tool,\n ToolInput,\n ToolError,\n BaseToolOptions,\n BaseToolRunOptions,\n JSONToolOutput,\n ToolInputValidationError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Sequelize, Options } from \"sequelize\";\nimport { Provider, getMetadata } from \"@/tools/database/metadata.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ValidationError } from \"ajv\";\nimport { AnyToolSchemaLike } from \"@/internals/helpers/schema.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\ninterface ToolOptions extends BaseToolOptions {\n provider: Provider;\n connection: Options;\n}\n\ntype ToolRunOptions = BaseToolRunOptions;\n\nexport const SQLToolAction = {\n GetMetadata: \"GET_METADATA\",\n Query: \"QUERY\",\n} as const;\n\nexport class SQLToolOutput extends JSONToolOutput<any> {}\n\nexport class SQLTool extends Tool<SQLToolOutput, ToolOptions, ToolRunOptions> {\n name = \"SQLTool\";\n\n description = `Converts natural language to SQL query and executes it. IMPORTANT: strictly follow this order of actions:\n 1. ${SQLToolAction.GetMetadata} - get database tables structure (metadata)\n 2. ${SQLToolAction.Query} - execute the generated SQL query`;\n\n inputSchema() {\n return z.object({\n action: z\n .nativeEnum(SQLToolAction)\n .describe(\n `The action to perform. ${SQLToolAction.GetMetadata} get database tables structure, ${SQLToolAction.Query} execute the SQL query`,\n ),\n query: z\n .string()\n .optional()\n .describe(`The SQL query to be executed, required for ${SQLToolAction.Query} action`),\n });\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SQLToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"database\", \"sql\"],\n creator: this,\n });\n\n public constructor(options: ToolOptions) {\n super(options);\n if (!options.connection.dialect) {\n throw new ValidationError([\n {\n message: \"Property is required\",\n propertyName: \"connection.dialect\",\n },\n ]);\n }\n if (\n !options.connection.schema &&\n (options.provider === \"oracle\" || options.provider === \"db2\")\n ) {\n throw new ValidationError([\n {\n message: `Property is required for ${options.provider}`,\n propertyName: \"connection.schema\",\n },\n ]);\n }\n if (!options.connection.storage && options.provider === \"sqlite\") {\n throw new ValidationError([\n {\n message: `Property is required for ${options.provider}`,\n propertyName: \"connection.storage\",\n },\n ]);\n }\n }\n\n protected validateInput(\n schema: AnyToolSchemaLike,\n input: unknown,\n ): asserts input is ToolInput<this> {\n super.validateInput(schema, input);\n if (input.action === SQLToolAction.Query && !input.query) {\n throw new ToolInputValidationError(\n `SQL Query is required for ${SQLToolAction.Query} action.`,\n );\n }\n }\n\n static {\n this.register();\n }\n\n @Cache()\n protected async connection(): Promise<Sequelize> {\n try {\n const sequelize = new Sequelize(this.options.connection);\n\n await sequelize.authenticate();\n return sequelize;\n } catch (error) {\n throw new ToolError(`Unable to connect to database: ${error}`, [], {\n isRetryable: false,\n isFatal: true,\n });\n }\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<ToolRunOptions>,\n ): Promise<SQLToolOutput> {\n const { provider, connection } = this.options;\n const { schema } = connection;\n\n if (input.action === SQLToolAction.GetMetadata) {\n const sequelize = await this.connection();\n const metadata = await getMetadata(sequelize, provider, schema);\n return new SQLToolOutput(metadata);\n }\n\n if (input.action === SQLToolAction.Query) {\n return await this.executeQuery(input.query!, provider, schema);\n }\n\n throw new ToolError(`Invalid action specified: ${input.action}`);\n }\n\n protected async executeQuery(\n query: string,\n provider: Provider,\n schema: string | undefined,\n ): Promise<SQLToolOutput> {\n if (!this.isReadOnlyQuery(query)) {\n return new JSONToolOutput({\n success: false,\n error: \"Invalid query. Only SELECT queries are allowed.\",\n });\n }\n\n try {\n const sequelize = await this.connection();\n const [results] = await sequelize.query(query);\n if (Array.isArray(results) && results.length > 0) {\n return new JSONToolOutput({ success: true, results });\n }\n\n return new JSONToolOutput({\n success: false,\n message: `No rows selected`,\n });\n } catch (error) {\n const schemaHint = schema\n ? `Fully qualify the table names by appending the schema name \"${schema}\" as a prefix, for example: ${schema}.table_name`\n : \"\";\n const errorMessage = `Generate a correct query that retrieves data using the appropriate ${provider} dialect.\n ${schemaHint}\n The original request was: ${query}, and the error was: ${error.message}.`;\n throw new ToolError(errorMessage);\n }\n }\n\n private isReadOnlyQuery(query: string): boolean {\n const normalizedQuery = query.trim().toUpperCase();\n return (\n normalizedQuery.startsWith(\"SELECT\") ||\n normalizedQuery.startsWith(\"SHOW\") ||\n normalizedQuery.startsWith(\"DESC\")\n );\n }\n\n public async destroy(): Promise<void> {\n // @ts-expect-error protected property\n const cache = Cache.getInstance(this, \"connection\");\n const entry = cache.get();\n\n if (entry) {\n cache.clear();\n\n try {\n await entry.data.close();\n } catch (error) {\n throw new ToolError(`Failed to close the database connection`, [error]);\n }\n }\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
- import { JSONToolOutput, Tool, ToolEmitter, ToolInput, BaseToolOptions, BaseToolRunOptions } from '../base.cjs';
1
+ import { JSONToolOutput, Tool, BaseToolOptions, BaseToolRunOptions, ToolEmitter, ToolInput } from '../base.cjs';
2
2
  import { z } from 'zod';
3
- import { Sequelize, Options } from 'sequelize';
3
+ import { Options, Sequelize } from 'sequelize';
4
4
  import { Provider } from './metadata.cjs';
5
5
  import { AnyToolSchemaLike } from '../../internals/helpers/schema.cjs';
6
6
  import 'ajv';
7
7
  import '../../context.cjs';
8
- import '../../emitter-C9EN5B0j.cjs';
8
+ import '../../emitter-BWtGHYn0.cjs';
9
9
  import '../../internals/types.cjs';
10
10
  import '../../internals/helpers/guards.cjs';
11
11
  import '../../internals/serializable.cjs';
@@ -1,11 +1,11 @@
1
- import { JSONToolOutput, Tool, ToolEmitter, ToolInput, BaseToolOptions, BaseToolRunOptions } from '../base.js';
1
+ import { JSONToolOutput, Tool, BaseToolOptions, BaseToolRunOptions, ToolEmitter, ToolInput } from '../base.js';
2
2
  import { z } from 'zod';
3
- import { Sequelize, Options } from 'sequelize';
3
+ import { Options, Sequelize } from 'sequelize';
4
4
  import { Provider } from './metadata.js';
5
5
  import { AnyToolSchemaLike } from '../../internals/helpers/schema.js';
6
6
  import 'ajv';
7
7
  import '../../context.js';
8
- import '../../emitter-BxVxGBbJ.js';
8
+ import '../../emitter-l0W9gC1A.js';
9
9
  import '../../internals/types.js';
10
10
  import '../../internals/helpers/guards.js';
11
11
  import '../../internals/serializable.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/database/sql.ts"],"names":["SQLToolAction","GetMetadata","Query","SQLToolOutput","JSONToolOutput","SQLTool","Tool","name","description","inputSchema","z","object","action","nativeEnum","describe","query","string","optional","emitter","Emitter","root","child","namespace","creator","options","connection","dialect","ValidationError","message","propertyName","schema","provider","storage","validateInput","input","ToolInputValidationError","register","sequelize","Sequelize","authenticate","error","ToolError","isRetryable","isFatal","_run","_options","metadata","getMetadata","executeQuery","isReadOnlyQuery","success","results","Array","isArray","length","schemaHint","errorMessage","normalizedQuery","trim","toUpperCase","startsWith","destroy","cache","Cache","getInstance","entry","get","clear","data","close"],"mappings":"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","file":"sql.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 Tool,\n ToolInput,\n ToolError,\n BaseToolOptions,\n BaseToolRunOptions,\n JSONToolOutput,\n ToolInputValidationError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Sequelize, Options } from \"sequelize\";\nimport { Provider, getMetadata } from \"@/tools/database/metadata.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ValidationError } from \"ajv\";\nimport { AnyToolSchemaLike } from \"@/internals/helpers/schema.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\ninterface ToolOptions extends BaseToolOptions {\n provider: Provider;\n connection: Options;\n}\n\ntype ToolRunOptions = BaseToolRunOptions;\n\nexport const SQLToolAction = {\n GetMetadata: \"GET_METADATA\",\n Query: \"QUERY\",\n} as const;\n\nexport class SQLToolOutput extends JSONToolOutput<any> {}\n\nexport class SQLTool extends Tool<SQLToolOutput, ToolOptions, ToolRunOptions> {\n name = \"SQLTool\";\n\n description = `Converts natural language to SQL query and executes it. IMPORTANT: strictly follow this order of actions:\n 1. ${SQLToolAction.GetMetadata} - get database tables structure (metadata)\n 2. ${SQLToolAction.Query} - execute the generated SQL query`;\n\n inputSchema() {\n return z.object({\n action: z\n .nativeEnum(SQLToolAction)\n .describe(\n `The action to perform. ${SQLToolAction.GetMetadata} get database tables structure, ${SQLToolAction.Query} execute the SQL query`,\n ),\n query: z\n .string()\n .optional()\n .describe(`The SQL query to be executed, required for ${SQLToolAction.Query} action`),\n });\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SQLToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"database\", \"sql\"],\n creator: this,\n });\n\n public constructor(options: ToolOptions) {\n super(options);\n if (!options.connection.dialect) {\n throw new ValidationError([\n {\n message: \"Property is required\",\n propertyName: \"connection.dialect\",\n },\n ]);\n }\n if (\n !options.connection.schema &&\n (options.provider === \"oracle\" || options.provider === \"db2\")\n ) {\n throw new ValidationError([\n {\n message: `Property is required for ${options.provider}`,\n propertyName: \"connection.schema\",\n },\n ]);\n }\n if (!options.connection.storage && options.provider === \"sqlite\") {\n throw new ValidationError([\n {\n message: `Property is required for ${options.provider}`,\n propertyName: \"connection.storage\",\n },\n ]);\n }\n }\n\n protected validateInput(\n schema: AnyToolSchemaLike,\n input: unknown,\n ): asserts input is ToolInput<this> {\n super.validateInput(schema, input);\n if (input.action === SQLToolAction.Query && !input.query) {\n throw new ToolInputValidationError(\n `SQL Query is required for ${SQLToolAction.Query} action.`,\n );\n }\n }\n\n static {\n this.register();\n }\n\n @Cache()\n protected async connection(): Promise<Sequelize> {\n try {\n const sequelize = new Sequelize(this.options.connection);\n\n await sequelize.authenticate();\n return sequelize;\n } catch (error) {\n throw new ToolError(`Unable to connect to database: ${error}`, [], {\n isRetryable: false,\n isFatal: true,\n });\n }\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<ToolRunOptions>,\n ): Promise<SQLToolOutput> {\n const { provider, connection } = this.options;\n const { schema } = connection;\n\n if (input.action === SQLToolAction.GetMetadata) {\n const sequelize = await this.connection();\n const metadata = await getMetadata(sequelize, provider, schema);\n return new SQLToolOutput(metadata);\n }\n\n if (input.action === SQLToolAction.Query) {\n return await this.executeQuery(input.query!, provider, schema);\n }\n\n throw new ToolError(`Invalid action specified: ${input.action}`);\n }\n\n protected async executeQuery(\n query: string,\n provider: Provider,\n schema: string | undefined,\n ): Promise<SQLToolOutput> {\n if (!this.isReadOnlyQuery(query)) {\n return new JSONToolOutput({\n success: false,\n error: \"Invalid query. Only SELECT queries are allowed.\",\n });\n }\n\n try {\n const sequelize = await this.connection();\n const [results] = await sequelize.query(query);\n if (Array.isArray(results) && results.length > 0) {\n return new JSONToolOutput({ success: true, results });\n }\n\n return new JSONToolOutput({\n success: false,\n message: `No rows selected`,\n });\n } catch (error) {\n const schemaHint = schema\n ? `Fully qualify the table names by appending the schema name \"${schema}\" as a prefix, for example: ${schema}.table_name`\n : \"\";\n const errorMessage = `Generate a correct query that retrieves data using the appropriate ${provider} dialect.\n ${schemaHint}\n The original request was: ${query}, and the error was: ${error.message}.`;\n throw new ToolError(errorMessage);\n }\n }\n\n private isReadOnlyQuery(query: string): boolean {\n const normalizedQuery = query.trim().toUpperCase();\n return (\n normalizedQuery.startsWith(\"SELECT\") ||\n normalizedQuery.startsWith(\"SHOW\") ||\n normalizedQuery.startsWith(\"DESC\")\n );\n }\n\n public async destroy(): Promise<void> {\n // @ts-expect-error protected property\n const cache = Cache.getInstance(this, \"connection\");\n const entry = cache.get();\n\n if (entry) {\n cache.clear();\n\n try {\n await entry.data.close();\n } catch (error) {\n throw new ToolError(`Failed to close the database connection`, [error]);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["sql.ts"],"names":["SQLToolAction","GetMetadata","Query","SQLToolOutput","JSONToolOutput","SQLTool","Tool","name","description","inputSchema","z","object","action","nativeEnum","describe","query","string","optional","emitter","Emitter","root","child","namespace","creator","options","connection","dialect","ValidationError","message","propertyName","schema","provider","storage","validateInput","input","ToolInputValidationError","register","sequelize","Sequelize","authenticate","error","ToolError","isRetryable","isFatal","_run","_options","metadata","getMetadata","executeQuery","isReadOnlyQuery","success","results","Array","isArray","length","schemaHint","errorMessage","normalizedQuery","trim","toUpperCase","startsWith","destroy","cache","Cache","getInstance","entry","get","clear","data","close"],"mappings":"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","file":"sql.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 Tool,\n ToolInput,\n ToolError,\n BaseToolOptions,\n BaseToolRunOptions,\n JSONToolOutput,\n ToolInputValidationError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { Sequelize, Options } from \"sequelize\";\nimport { Provider, getMetadata } from \"@/tools/database/metadata.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { ValidationError } from \"ajv\";\nimport { AnyToolSchemaLike } from \"@/internals/helpers/schema.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\n\ninterface ToolOptions extends BaseToolOptions {\n provider: Provider;\n connection: Options;\n}\n\ntype ToolRunOptions = BaseToolRunOptions;\n\nexport const SQLToolAction = {\n GetMetadata: \"GET_METADATA\",\n Query: \"QUERY\",\n} as const;\n\nexport class SQLToolOutput extends JSONToolOutput<any> {}\n\nexport class SQLTool extends Tool<SQLToolOutput, ToolOptions, ToolRunOptions> {\n name = \"SQLTool\";\n\n description = `Converts natural language to SQL query and executes it. IMPORTANT: strictly follow this order of actions:\n 1. ${SQLToolAction.GetMetadata} - get database tables structure (metadata)\n 2. ${SQLToolAction.Query} - execute the generated SQL query`;\n\n inputSchema() {\n return z.object({\n action: z\n .nativeEnum(SQLToolAction)\n .describe(\n `The action to perform. ${SQLToolAction.GetMetadata} get database tables structure, ${SQLToolAction.Query} execute the SQL query`,\n ),\n query: z\n .string()\n .optional()\n .describe(`The SQL query to be executed, required for ${SQLToolAction.Query} action`),\n });\n }\n\n public readonly emitter: ToolEmitter<ToolInput<this>, SQLToolOutput> = Emitter.root.child({\n namespace: [\"tool\", \"database\", \"sql\"],\n creator: this,\n });\n\n public constructor(options: ToolOptions) {\n super(options);\n if (!options.connection.dialect) {\n throw new ValidationError([\n {\n message: \"Property is required\",\n propertyName: \"connection.dialect\",\n },\n ]);\n }\n if (\n !options.connection.schema &&\n (options.provider === \"oracle\" || options.provider === \"db2\")\n ) {\n throw new ValidationError([\n {\n message: `Property is required for ${options.provider}`,\n propertyName: \"connection.schema\",\n },\n ]);\n }\n if (!options.connection.storage && options.provider === \"sqlite\") {\n throw new ValidationError([\n {\n message: `Property is required for ${options.provider}`,\n propertyName: \"connection.storage\",\n },\n ]);\n }\n }\n\n protected validateInput(\n schema: AnyToolSchemaLike,\n input: unknown,\n ): asserts input is ToolInput<this> {\n super.validateInput(schema, input);\n if (input.action === SQLToolAction.Query && !input.query) {\n throw new ToolInputValidationError(\n `SQL Query is required for ${SQLToolAction.Query} action.`,\n );\n }\n }\n\n static {\n this.register();\n }\n\n @Cache()\n protected async connection(): Promise<Sequelize> {\n try {\n const sequelize = new Sequelize(this.options.connection);\n\n await sequelize.authenticate();\n return sequelize;\n } catch (error) {\n throw new ToolError(`Unable to connect to database: ${error}`, [], {\n isRetryable: false,\n isFatal: true,\n });\n }\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<ToolRunOptions>,\n ): Promise<SQLToolOutput> {\n const { provider, connection } = this.options;\n const { schema } = connection;\n\n if (input.action === SQLToolAction.GetMetadata) {\n const sequelize = await this.connection();\n const metadata = await getMetadata(sequelize, provider, schema);\n return new SQLToolOutput(metadata);\n }\n\n if (input.action === SQLToolAction.Query) {\n return await this.executeQuery(input.query!, provider, schema);\n }\n\n throw new ToolError(`Invalid action specified: ${input.action}`);\n }\n\n protected async executeQuery(\n query: string,\n provider: Provider,\n schema: string | undefined,\n ): Promise<SQLToolOutput> {\n if (!this.isReadOnlyQuery(query)) {\n return new JSONToolOutput({\n success: false,\n error: \"Invalid query. Only SELECT queries are allowed.\",\n });\n }\n\n try {\n const sequelize = await this.connection();\n const [results] = await sequelize.query(query);\n if (Array.isArray(results) && results.length > 0) {\n return new JSONToolOutput({ success: true, results });\n }\n\n return new JSONToolOutput({\n success: false,\n message: `No rows selected`,\n });\n } catch (error) {\n const schemaHint = schema\n ? `Fully qualify the table names by appending the schema name \"${schema}\" as a prefix, for example: ${schema}.table_name`\n : \"\";\n const errorMessage = `Generate a correct query that retrieves data using the appropriate ${provider} dialect.\n ${schemaHint}\n The original request was: ${query}, and the error was: ${error.message}.`;\n throw new ToolError(errorMessage);\n }\n }\n\n private isReadOnlyQuery(query: string): boolean {\n const normalizedQuery = query.trim().toUpperCase();\n return (\n normalizedQuery.startsWith(\"SELECT\") ||\n normalizedQuery.startsWith(\"SHOW\") ||\n normalizedQuery.startsWith(\"DESC\")\n );\n }\n\n public async destroy(): Promise<void> {\n // @ts-expect-error protected property\n const cache = Cache.getInstance(this, \"connection\");\n const entry = cache.get();\n\n if (entry) {\n cache.clear();\n\n try {\n await entry.data.close();\n } catch (error) {\n throw new ToolError(`Failed to close the database connection`, [error]);\n }\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tools/llm.ts"],"names":["LLMTool","Tool","name","description","constructor","input","emitter","Emitter","root","child","namespace","toCamelCase","filter","Boolean","creator","inputSchema","z","object","task","string","min","describe","template","PromptTemplate","schema","_run","_options","run","memory","getProp","context","contextKeys","Memory","ToolError","isFatal","isRetryable","options","output","llm","create","messages","SystemMessage","render","msg","role","Role","SYSTEM","UserMessage","StringToolOutput","getTextContent"],"mappings":";;;;;;;;;;;;AA0CO,MAAMA,gBAAgBC,aAAAA,CAAAA;EA1C7B;;;;AA2CEC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AAIAC,EAAAA,WAAAA,CAA+BC,KAAqB,EAAA;AAClD,IAAMA,KAAAA,CAAAA,KAAAA,GAAAA,IADuBA,CAAAA,KAAAA,GAAAA,OAAAA,IAL/BH,CAAAA,IAAAA,GAAO,KAAA,EAAA,IAAA,CACPC,WACE,GAAA,wHAAA;AAKA,IAAKD,IAAAA,CAAAA,IAAAA,GAAOG,KAAOH,EAAAA,IAAAA,IAAQ,IAAKA,CAAAA,IAAAA;AAChC,IAAKC,IAAAA,CAAAA,WAAAA,GAAcE,KAAOF,EAAAA,WAAAA,IAAe,IAAKA,CAAAA,WAAAA;AAC9C,IAAKG,IAAAA,CAAAA,OAAAA,GAAUC,mBAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,KAAA;QAAOC,kBAAYN,CAAAA,KAAAA,EAAOH,QAAQ,EAAA;AAAKU,OAAAA,CAAAA,MAAAA,CAAOC,OAAAA,CAAAA;MAClEC,OAAS,EAAA;KACX,CAAA;AACF;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOC,MAAEC,MAAO,CAAA;AACdC,MAAAA,IAAAA,EAAMF,MAAEG,MAAM,EAAA,CAAGC,IAAI,CAAA,CAAA,CAAGC,SAAS,iDAAA;KACnC,CAAA;AACF;EAEA,OAAgBC,QAAAA,GAAW,IAAIC,2BAAe,CAAA;AAC5CC,IAAAA,MAAAA,EAAQR,MAAEC,MAAO,CAAA;AACfC,MAAAA,IAAAA,EAAMF,MAAEG,MAAM;KAChB,CAAA;IACAG,QAAU,EAAA,CAAA;;;GAGZ,CAAA;EAEA,MAAgBG,IAAAA,CACdpB,KACAqB,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAMC,MAAAA,MAAAA,GAASC,kBAAQF,CAAAA,GAAAA,CAAIG,OAAS,EAAA;AAAC7B,MAAAA,aAAAA,CAAK8B,WAAYC,CAAAA;AAAO,KAAA,CAAA;AAC7D,IAAA,IAAI,CAACJ,MAAQ,EAAA;AACX,MAAA,MAAM,IAAIK,kBAAAA,CAAU,CAAiC,6BAAA,CAAA,EAAA,EAAI,EAAA;QACvDC,OAAS,EAAA,IAAA;QACTC,WAAa,EAAA;OACf,CAAA;AACF;AAEA,IAAA,MAAMb,QAAW,GAAA,IAAA,CAAKc,OAASd,EAAAA,QAAAA,IAAYtB,OAAQsB,CAAAA,QAAAA;AACnD,IAAA,MAAMe,MAAS,GAAA,MAAM,IAAKhC,CAAAA,KAAAA,CAAMiC,IAAIC,MAAO,CAAA;MACzCC,QAAU,EAAA;QACR,IAAIC,yBAAAA,CACFnB,SAASoB,MAAO,CAAA;AACdxB,UAAAA,IAAAA,EAAMb,KAAMa,CAAAA;AACd,SAAA,CAAA,CAAA;AAECU,QAAAA,GAAAA,MAAAA,CAAOY,SAAS5B,MAAO,CAAA,CAAC+B,QAAQA,GAAIC,CAAAA,IAAAA,KAASC,iBAAKC,MAAM,CAAA;QAC3D,IAAIC,uBAAAA,CACFzB,SAASoB,MAAO,CAAA;AACdxB,UAAAA,IAAAA,EAAMb,KAAMa,CAAAA;AACd,SAAA,CAAA;;KAGN,CAAA;AAEA,IAAA,OAAO,IAAI8B,yBAAAA,CAAiBX,MAAOY,CAAAA,cAAAA,EAAc,CAAA;AACnD;AACF","file":"llm.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 StringToolOutput,\n Tool,\n ToolEmitter,\n ToolError,\n ToolInput,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport type { BaseMemory } from \"@/memory/base.js\";\nimport { toCamelCase } from \"remeda\";\nimport { Role, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport { ChatModel } from \"@/backend/chat.js\";\n\nexport interface LLMToolInput extends BaseToolOptions {\n llm: ChatModel;\n name?: string;\n description?: string;\n template?: typeof LLMTool.template;\n}\n\nexport class LLMTool extends Tool<StringToolOutput, LLMToolInput> {\n name = \"LLM\";\n description =\n \"Uses expert LLM to work with data in the existing conversation (classification, entity extraction, summarization, ...)\";\n declare readonly emitter: ToolEmitter<ToolInput<this>, StringToolOutput>;\n\n constructor(protected readonly input: LLMToolInput) {\n super(input);\n this.name = input?.name || this.name;\n this.description = input?.description || this.description;\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"llm\", toCamelCase(input?.name ?? \"\")].filter(Boolean),\n creator: this,\n });\n }\n\n inputSchema() {\n return z.object({\n task: z.string().min(1).describe(\"A clearly defined task for the LLM to complete.\"),\n });\n }\n\n static readonly template = new PromptTemplate({\n schema: z.object({\n task: z.string(),\n }),\n template: `You have to accomplish a task by using Using common sense and the information contained in the conversation up to this point, complete the following task. Do not follow any previously used formats or structures.\n\nThe Task: {{task}}`,\n });\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: GetRunContext<this>,\n ) {\n const memory = getProp(run.context, [Tool.contextKeys.Memory]) as BaseMemory;\n if (!memory) {\n throw new ToolError(`No context has been provided!`, [], {\n isFatal: true,\n isRetryable: false,\n });\n }\n\n const template = this.options?.template ?? LLMTool.template;\n const output = await this.input.llm.create({\n messages: [\n new SystemMessage(\n template.render({\n task: input.task,\n }),\n ),\n ...memory.messages.filter((msg) => msg.role !== Role.SYSTEM),\n new UserMessage(\n template.render({\n task: input.task,\n }),\n ),\n ],\n });\n\n return new StringToolOutput(output.getTextContent());\n }\n}\n"]}
1
+ {"version":3,"sources":["llm.ts"],"names":["LLMTool","Tool","name","description","constructor","input","emitter","Emitter","root","child","namespace","toCamelCase","filter","Boolean","creator","inputSchema","z","object","task","string","min","describe","template","PromptTemplate","schema","_run","_options","run","memory","getProp","context","contextKeys","Memory","ToolError","isFatal","isRetryable","options","output","llm","create","messages","SystemMessage","render","msg","role","Role","SYSTEM","UserMessage","StringToolOutput","getTextContent"],"mappings":";;;;;;;;;;;;AA0CO,MAAMA,gBAAgBC,aAAAA,CAAAA;EA1C7B;;;;AA2CEC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AAIAC,EAAAA,WAAAA,CAA+BC,KAAqB,EAAA;AAClD,IAAMA,KAAAA,CAAAA,KAAAA,GAAAA,IADuBA,CAAAA,KAAAA,GAAAA,OAAAA,IAL/BH,CAAAA,IAAAA,GAAO,KAAA,EAAA,IAAA,CACPC,WACE,GAAA,wHAAA;AAKA,IAAKD,IAAAA,CAAAA,IAAAA,GAAOG,KAAOH,EAAAA,IAAAA,IAAQ,IAAKA,CAAAA,IAAAA;AAChC,IAAKC,IAAAA,CAAAA,WAAAA,GAAcE,KAAOF,EAAAA,WAAAA,IAAe,IAAKA,CAAAA,WAAAA;AAC9C,IAAKG,IAAAA,CAAAA,OAAAA,GAAUC,mBAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,KAAA;QAAOC,kBAAYN,CAAAA,KAAAA,EAAOH,QAAQ,EAAA;AAAKU,OAAAA,CAAAA,MAAAA,CAAOC,OAAAA,CAAAA;MAClEC,OAAS,EAAA;KACX,CAAA;AACF;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOC,MAAEC,MAAO,CAAA;AACdC,MAAAA,IAAAA,EAAMF,MAAEG,MAAM,EAAA,CAAGC,IAAI,CAAA,CAAA,CAAGC,SAAS,iDAAA;KACnC,CAAA;AACF;EAEA,OAAgBC,QAAAA,GAAW,IAAIC,2BAAe,CAAA;AAC5CC,IAAAA,MAAAA,EAAQR,MAAEC,MAAO,CAAA;AACfC,MAAAA,IAAAA,EAAMF,MAAEG,MAAM;KAChB,CAAA;IACAG,QAAU,EAAA,CAAA;;;GAGZ,CAAA;EAEA,MAAgBG,IAAAA,CACdpB,KACAqB,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAMC,MAAAA,MAAAA,GAASC,kBAAQF,CAAAA,GAAAA,CAAIG,OAAS,EAAA;AAAC7B,MAAAA,aAAAA,CAAK8B,WAAYC,CAAAA;AAAO,KAAA,CAAA;AAC7D,IAAA,IAAI,CAACJ,MAAQ,EAAA;AACX,MAAA,MAAM,IAAIK,kBAAAA,CAAU,CAAiC,6BAAA,CAAA,EAAA,EAAI,EAAA;QACvDC,OAAS,EAAA,IAAA;QACTC,WAAa,EAAA;OACf,CAAA;AACF;AAEA,IAAA,MAAMb,QAAW,GAAA,IAAA,CAAKc,OAASd,EAAAA,QAAAA,IAAYtB,OAAQsB,CAAAA,QAAAA;AACnD,IAAA,MAAMe,MAAS,GAAA,MAAM,IAAKhC,CAAAA,KAAAA,CAAMiC,IAAIC,MAAO,CAAA;MACzCC,QAAU,EAAA;QACR,IAAIC,yBAAAA,CACFnB,SAASoB,MAAO,CAAA;AACdxB,UAAAA,IAAAA,EAAMb,KAAMa,CAAAA;AACd,SAAA,CAAA,CAAA;AAECU,QAAAA,GAAAA,MAAAA,CAAOY,SAAS5B,MAAO,CAAA,CAAC+B,QAAQA,GAAIC,CAAAA,IAAAA,KAASC,iBAAKC,MAAM,CAAA;QAC3D,IAAIC,uBAAAA,CACFzB,SAASoB,MAAO,CAAA;AACdxB,UAAAA,IAAAA,EAAMb,KAAMa,CAAAA;AACd,SAAA,CAAA;;KAGN,CAAA;AAEA,IAAA,OAAO,IAAI8B,yBAAAA,CAAiBX,MAAOY,CAAAA,cAAAA,EAAc,CAAA;AACnD;AACF","file":"llm.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 StringToolOutput,\n Tool,\n ToolEmitter,\n ToolError,\n ToolInput,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport type { BaseMemory } from \"@/memory/base.js\";\nimport { toCamelCase } from \"remeda\";\nimport { Role, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport { ChatModel } from \"@/backend/chat.js\";\n\nexport interface LLMToolInput extends BaseToolOptions {\n llm: ChatModel;\n name?: string;\n description?: string;\n template?: typeof LLMTool.template;\n}\n\nexport class LLMTool extends Tool<StringToolOutput, LLMToolInput> {\n name = \"LLM\";\n description =\n \"Uses expert LLM to work with data in the existing conversation (classification, entity extraction, summarization, ...)\";\n declare readonly emitter: ToolEmitter<ToolInput<this>, StringToolOutput>;\n\n constructor(protected readonly input: LLMToolInput) {\n super(input);\n this.name = input?.name || this.name;\n this.description = input?.description || this.description;\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"llm\", toCamelCase(input?.name ?? \"\")].filter(Boolean),\n creator: this,\n });\n }\n\n inputSchema() {\n return z.object({\n task: z.string().min(1).describe(\"A clearly defined task for the LLM to complete.\"),\n });\n }\n\n static readonly template = new PromptTemplate({\n schema: z.object({\n task: z.string(),\n }),\n template: `You have to accomplish a task by using Using common sense and the information contained in the conversation up to this point, complete the following task. Do not follow any previously used formats or structures.\n\nThe Task: {{task}}`,\n });\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: GetRunContext<this>,\n ) {\n const memory = getProp(run.context, [Tool.contextKeys.Memory]) as BaseMemory;\n if (!memory) {\n throw new ToolError(`No context has been provided!`, [], {\n isFatal: true,\n isRetryable: false,\n });\n }\n\n const template = this.options?.template ?? LLMTool.template;\n const output = await this.input.llm.create({\n messages: [\n new SystemMessage(\n template.render({\n task: input.task,\n }),\n ),\n ...memory.messages.filter((msg) => msg.role !== Role.SYSTEM),\n new UserMessage(\n template.render({\n task: input.task,\n }),\n ),\n ],\n });\n\n return new StringToolOutput(output.getTextContent());\n }\n}\n"]}
@@ -12,7 +12,7 @@ import 'promise-based-task';
12
12
  import '../cache/base.cjs';
13
13
  import '../internals/helpers/schema.cjs';
14
14
  import 'zod-to-json-schema';
15
- import '../emitter-C9EN5B0j.cjs';
15
+ import '../emitter-BWtGHYn0.cjs';
16
16
  import '../internals/helpers/promise.cjs';
17
17
  import '../backend/message.cjs';
18
18
  import 'ai';
@@ -12,7 +12,7 @@ import 'promise-based-task';
12
12
  import '../cache/base.js';
13
13
  import '../internals/helpers/schema.js';
14
14
  import 'zod-to-json-schema';
15
- import '../emitter-BxVxGBbJ.js';
15
+ import '../emitter-l0W9gC1A.js';
16
16
  import '../internals/helpers/promise.js';
17
17
  import '../backend/message.js';
18
18
  import 'ai';
package/dist/tools/llm.js CHANGED
@@ -4,7 +4,7 @@ import { Emitter } from '../emitter/emitter.js';
4
4
  import { PromptTemplate } from '../template.js';
5
5
  import { getProp } from '../internals/helpers/object.js';
6
6
  import { toCamelCase } from 'remeda';
7
- import { SystemMessage, Role, UserMessage } from '../backend/message.js';
7
+ import { SystemMessage, UserMessage, Role } from '../backend/message.js';
8
8
 
9
9
  var __defProp = Object.defineProperty;
10
10
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tools/llm.ts"],"names":["LLMTool","Tool","name","description","constructor","input","emitter","Emitter","root","child","namespace","toCamelCase","filter","Boolean","creator","inputSchema","z","object","task","string","min","describe","template","PromptTemplate","schema","_run","_options","run","memory","getProp","context","contextKeys","Memory","ToolError","isFatal","isRetryable","options","output","llm","create","messages","SystemMessage","render","msg","role","Role","SYSTEM","UserMessage","StringToolOutput","getTextContent"],"mappings":";;;;;;;;;;AA0CO,MAAMA,gBAAgBC,IAAAA,CAAAA;EA1C7B;;;;AA2CEC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AAIAC,EAAAA,WAAAA,CAA+BC,KAAqB,EAAA;AAClD,IAAMA,KAAAA,CAAAA,KAAAA,GAAAA,IADuBA,CAAAA,KAAAA,GAAAA,OAAAA,IAL/BH,CAAAA,IAAAA,GAAO,KAAA,EAAA,IAAA,CACPC,WACE,GAAA,wHAAA;AAKA,IAAKD,IAAAA,CAAAA,IAAAA,GAAOG,KAAOH,EAAAA,IAAAA,IAAQ,IAAKA,CAAAA,IAAAA;AAChC,IAAKC,IAAAA,CAAAA,WAAAA,GAAcE,KAAOF,EAAAA,WAAAA,IAAe,IAAKA,CAAAA,WAAAA;AAC9C,IAAKG,IAAAA,CAAAA,OAAAA,GAAUC,OAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,KAAA;QAAOC,WAAYN,CAAAA,KAAAA,EAAOH,QAAQ,EAAA;AAAKU,OAAAA,CAAAA,MAAAA,CAAOC,OAAAA,CAAAA;MAClEC,OAAS,EAAA;KACX,CAAA;AACF;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOC,EAAEC,MAAO,CAAA;AACdC,MAAAA,IAAAA,EAAMF,EAAEG,MAAM,EAAA,CAAGC,IAAI,CAAA,CAAA,CAAGC,SAAS,iDAAA;KACnC,CAAA;AACF;EAEA,OAAgBC,QAAAA,GAAW,IAAIC,cAAe,CAAA;AAC5CC,IAAAA,MAAAA,EAAQR,EAAEC,MAAO,CAAA;AACfC,MAAAA,IAAAA,EAAMF,EAAEG,MAAM;KAChB,CAAA;IACAG,QAAU,EAAA,CAAA;;;GAGZ,CAAA;EAEA,MAAgBG,IAAAA,CACdpB,KACAqB,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAMC,MAAAA,MAAAA,GAASC,OAAQF,CAAAA,GAAAA,CAAIG,OAAS,EAAA;AAAC7B,MAAAA,IAAAA,CAAK8B,WAAYC,CAAAA;AAAO,KAAA,CAAA;AAC7D,IAAA,IAAI,CAACJ,MAAQ,EAAA;AACX,MAAA,MAAM,IAAIK,SAAAA,CAAU,CAAiC,6BAAA,CAAA,EAAA,EAAI,EAAA;QACvDC,OAAS,EAAA,IAAA;QACTC,WAAa,EAAA;OACf,CAAA;AACF;AAEA,IAAA,MAAMb,QAAW,GAAA,IAAA,CAAKc,OAASd,EAAAA,QAAAA,IAAYtB,OAAQsB,CAAAA,QAAAA;AACnD,IAAA,MAAMe,MAAS,GAAA,MAAM,IAAKhC,CAAAA,KAAAA,CAAMiC,IAAIC,MAAO,CAAA;MACzCC,QAAU,EAAA;QACR,IAAIC,aAAAA,CACFnB,SAASoB,MAAO,CAAA;AACdxB,UAAAA,IAAAA,EAAMb,KAAMa,CAAAA;AACd,SAAA,CAAA,CAAA;AAECU,QAAAA,GAAAA,MAAAA,CAAOY,SAAS5B,MAAO,CAAA,CAAC+B,QAAQA,GAAIC,CAAAA,IAAAA,KAASC,KAAKC,MAAM,CAAA;QAC3D,IAAIC,WAAAA,CACFzB,SAASoB,MAAO,CAAA;AACdxB,UAAAA,IAAAA,EAAMb,KAAMa,CAAAA;AACd,SAAA,CAAA;;KAGN,CAAA;AAEA,IAAA,OAAO,IAAI8B,gBAAAA,CAAiBX,MAAOY,CAAAA,cAAAA,EAAc,CAAA;AACnD;AACF","file":"llm.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 StringToolOutput,\n Tool,\n ToolEmitter,\n ToolError,\n ToolInput,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport type { BaseMemory } from \"@/memory/base.js\";\nimport { toCamelCase } from \"remeda\";\nimport { Role, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport { ChatModel } from \"@/backend/chat.js\";\n\nexport interface LLMToolInput extends BaseToolOptions {\n llm: ChatModel;\n name?: string;\n description?: string;\n template?: typeof LLMTool.template;\n}\n\nexport class LLMTool extends Tool<StringToolOutput, LLMToolInput> {\n name = \"LLM\";\n description =\n \"Uses expert LLM to work with data in the existing conversation (classification, entity extraction, summarization, ...)\";\n declare readonly emitter: ToolEmitter<ToolInput<this>, StringToolOutput>;\n\n constructor(protected readonly input: LLMToolInput) {\n super(input);\n this.name = input?.name || this.name;\n this.description = input?.description || this.description;\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"llm\", toCamelCase(input?.name ?? \"\")].filter(Boolean),\n creator: this,\n });\n }\n\n inputSchema() {\n return z.object({\n task: z.string().min(1).describe(\"A clearly defined task for the LLM to complete.\"),\n });\n }\n\n static readonly template = new PromptTemplate({\n schema: z.object({\n task: z.string(),\n }),\n template: `You have to accomplish a task by using Using common sense and the information contained in the conversation up to this point, complete the following task. Do not follow any previously used formats or structures.\n\nThe Task: {{task}}`,\n });\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: GetRunContext<this>,\n ) {\n const memory = getProp(run.context, [Tool.contextKeys.Memory]) as BaseMemory;\n if (!memory) {\n throw new ToolError(`No context has been provided!`, [], {\n isFatal: true,\n isRetryable: false,\n });\n }\n\n const template = this.options?.template ?? LLMTool.template;\n const output = await this.input.llm.create({\n messages: [\n new SystemMessage(\n template.render({\n task: input.task,\n }),\n ),\n ...memory.messages.filter((msg) => msg.role !== Role.SYSTEM),\n new UserMessage(\n template.render({\n task: input.task,\n }),\n ),\n ],\n });\n\n return new StringToolOutput(output.getTextContent());\n }\n}\n"]}
1
+ {"version":3,"sources":["llm.ts"],"names":["LLMTool","Tool","name","description","constructor","input","emitter","Emitter","root","child","namespace","toCamelCase","filter","Boolean","creator","inputSchema","z","object","task","string","min","describe","template","PromptTemplate","schema","_run","_options","run","memory","getProp","context","contextKeys","Memory","ToolError","isFatal","isRetryable","options","output","llm","create","messages","SystemMessage","render","msg","role","Role","SYSTEM","UserMessage","StringToolOutput","getTextContent"],"mappings":";;;;;;;;;;AA0CO,MAAMA,gBAAgBC,IAAAA,CAAAA;EA1C7B;;;;AA2CEC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AAIAC,EAAAA,WAAAA,CAA+BC,KAAqB,EAAA;AAClD,IAAMA,KAAAA,CAAAA,KAAAA,GAAAA,IADuBA,CAAAA,KAAAA,GAAAA,OAAAA,IAL/BH,CAAAA,IAAAA,GAAO,KAAA,EAAA,IAAA,CACPC,WACE,GAAA,wHAAA;AAKA,IAAKD,IAAAA,CAAAA,IAAAA,GAAOG,KAAOH,EAAAA,IAAAA,IAAQ,IAAKA,CAAAA,IAAAA;AAChC,IAAKC,IAAAA,CAAAA,WAAAA,GAAcE,KAAOF,EAAAA,WAAAA,IAAe,IAAKA,CAAAA,WAAAA;AAC9C,IAAKG,IAAAA,CAAAA,OAAAA,GAAUC,OAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,KAAA;QAAOC,WAAYN,CAAAA,KAAAA,EAAOH,QAAQ,EAAA;AAAKU,OAAAA,CAAAA,MAAAA,CAAOC,OAAAA,CAAAA;MAClEC,OAAS,EAAA;KACX,CAAA;AACF;EAEAC,WAAc,GAAA;AACZ,IAAA,OAAOC,EAAEC,MAAO,CAAA;AACdC,MAAAA,IAAAA,EAAMF,EAAEG,MAAM,EAAA,CAAGC,IAAI,CAAA,CAAA,CAAGC,SAAS,iDAAA;KACnC,CAAA;AACF;EAEA,OAAgBC,QAAAA,GAAW,IAAIC,cAAe,CAAA;AAC5CC,IAAAA,MAAAA,EAAQR,EAAEC,MAAO,CAAA;AACfC,MAAAA,IAAAA,EAAMF,EAAEG,MAAM;KAChB,CAAA;IACAG,QAAU,EAAA,CAAA;;;GAGZ,CAAA;EAEA,MAAgBG,IAAAA,CACdpB,KACAqB,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAMC,MAAAA,MAAAA,GAASC,OAAQF,CAAAA,GAAAA,CAAIG,OAAS,EAAA;AAAC7B,MAAAA,IAAAA,CAAK8B,WAAYC,CAAAA;AAAO,KAAA,CAAA;AAC7D,IAAA,IAAI,CAACJ,MAAQ,EAAA;AACX,MAAA,MAAM,IAAIK,SAAAA,CAAU,CAAiC,6BAAA,CAAA,EAAA,EAAI,EAAA;QACvDC,OAAS,EAAA,IAAA;QACTC,WAAa,EAAA;OACf,CAAA;AACF;AAEA,IAAA,MAAMb,QAAW,GAAA,IAAA,CAAKc,OAASd,EAAAA,QAAAA,IAAYtB,OAAQsB,CAAAA,QAAAA;AACnD,IAAA,MAAMe,MAAS,GAAA,MAAM,IAAKhC,CAAAA,KAAAA,CAAMiC,IAAIC,MAAO,CAAA;MACzCC,QAAU,EAAA;QACR,IAAIC,aAAAA,CACFnB,SAASoB,MAAO,CAAA;AACdxB,UAAAA,IAAAA,EAAMb,KAAMa,CAAAA;AACd,SAAA,CAAA,CAAA;AAECU,QAAAA,GAAAA,MAAAA,CAAOY,SAAS5B,MAAO,CAAA,CAAC+B,QAAQA,GAAIC,CAAAA,IAAAA,KAASC,KAAKC,MAAM,CAAA;QAC3D,IAAIC,WAAAA,CACFzB,SAASoB,MAAO,CAAA;AACdxB,UAAAA,IAAAA,EAAMb,KAAMa,CAAAA;AACd,SAAA,CAAA;;KAGN,CAAA;AAEA,IAAA,OAAO,IAAI8B,gBAAAA,CAAiBX,MAAOY,CAAAA,cAAAA,EAAc,CAAA;AACnD;AACF","file":"llm.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 StringToolOutput,\n Tool,\n ToolEmitter,\n ToolError,\n ToolInput,\n} from \"@/tools/base.js\";\nimport { z } from \"zod\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { getProp } from \"@/internals/helpers/object.js\";\nimport type { BaseMemory } from \"@/memory/base.js\";\nimport { toCamelCase } from \"remeda\";\nimport { Role, SystemMessage, UserMessage } from \"@/backend/message.js\";\nimport { ChatModel } from \"@/backend/chat.js\";\n\nexport interface LLMToolInput extends BaseToolOptions {\n llm: ChatModel;\n name?: string;\n description?: string;\n template?: typeof LLMTool.template;\n}\n\nexport class LLMTool extends Tool<StringToolOutput, LLMToolInput> {\n name = \"LLM\";\n description =\n \"Uses expert LLM to work with data in the existing conversation (classification, entity extraction, summarization, ...)\";\n declare readonly emitter: ToolEmitter<ToolInput<this>, StringToolOutput>;\n\n constructor(protected readonly input: LLMToolInput) {\n super(input);\n this.name = input?.name || this.name;\n this.description = input?.description || this.description;\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"llm\", toCamelCase(input?.name ?? \"\")].filter(Boolean),\n creator: this,\n });\n }\n\n inputSchema() {\n return z.object({\n task: z.string().min(1).describe(\"A clearly defined task for the LLM to complete.\"),\n });\n }\n\n static readonly template = new PromptTemplate({\n schema: z.object({\n task: z.string(),\n }),\n template: `You have to accomplish a task by using Using common sense and the information contained in the conversation up to this point, complete the following task. Do not follow any previously used formats or structures.\n\nThe Task: {{task}}`,\n });\n\n protected async _run(\n input: ToolInput<this>,\n _options: Partial<BaseToolRunOptions>,\n run: GetRunContext<this>,\n ) {\n const memory = getProp(run.context, [Tool.contextKeys.Memory]) as BaseMemory;\n if (!memory) {\n throw new ToolError(`No context has been provided!`, [], {\n isFatal: true,\n isRetryable: false,\n });\n }\n\n const template = this.options?.template ?? LLMTool.template;\n const output = await this.input.llm.create({\n messages: [\n new SystemMessage(\n template.render({\n task: input.task,\n }),\n ),\n ...memory.messages.filter((msg) => msg.role !== Role.SYSTEM),\n new UserMessage(\n template.render({\n task: input.task,\n }),\n ),\n ],\n });\n\n return new StringToolOutput(output.getTextContent());\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tools/mcp.ts"],"names":["MCPToolOutput","JSONToolOutput","MCPTool","Tool","name","description","emitter","client","tool","options","Emitter","root","child","namespace","creator","inputSchema","_run","input","_options","run","result","callTool","arguments","undefined","signal","fromClient","tools","paginate","size","Infinity","handler","cursor","nextCursor","listTools","data","map"],"mappings":";;;;;;;;AA6BO,MAAMA,sBAAsBC,uBAAAA,CAAAA;EA7BnC;;;AA6BwD;AAEjD,MAAMC,gBAAgBC,aAAAA,CAAAA;EA/B7B;;;AAgCkBC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AACAC,EAAAA,OAAAA;AAEAC,EAAAA,MAAAA;AACCC,EAAAA,IAAAA;AAEjB,EAAA,WAAA,CAAmB,EAAED,MAAAA,EAAQC,IAAM,EAAA,GAAGC,SAAyB,EAAA;AAC7D,IAAA,KAAA,CAAMA,OAAAA,CAAAA;AACN,IAAA,IAAA,CAAKF,MAASA,GAAAA,MAAAA;AACd,IAAA,IAAA,CAAKC,IAAOA,GAAAA,IAAAA;AACZ,IAAA,IAAA,CAAKJ,OAAOI,IAAKJ,CAAAA,IAAAA;AACjB,IAAKC,IAAAA,CAAAA,WAAAA,GACHG,KAAKH,WAAe,IAAA,sEAAA;AACtB,IAAKC,IAAAA,CAAAA,OAAAA,GAAUI,mBAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,KAAA;QAAO,IAAKT,CAAAA;;MAChCU,OAAS,EAAA;KACX,CAAA;AACF;EAEOC,WAAc,GAAA;AACnB,IAAA,OAAO,KAAKP,IAAKO,CAAAA,WAAAA;AACnB;EAEA,MAAgBC,IAAAA,CACdC,KACAC,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAA,MAAMC,MAAS,GAAA,MAAM,IAAKb,CAAAA,MAAAA,CAAOc,QAAS,CAAA;AAAEjB,MAAAA,IAAAA,EAAM,IAAKA,CAAAA,IAAAA;MAAMkB,SAAWL,EAAAA;AAAM,KAAA,EAAGM,KAAW,CAAA,EAAA;AAC1FC,MAAAA,MAAAA,EAAQL,GAAIK,CAAAA;KACd,CAAA;AACA,IAAO,OAAA,IAAIxB,cAAcoB,MAAAA,CAAAA;AAC3B;AAEA,EAAA,aAAoBK,WAAWlB,MAAuC,EAAA;AACpE,IAAMmB,MAAAA,KAAAA,GAAQ,MAAMC,qBAAS,CAAA;MAC3BC,IAAMC,EAAAA,QAAAA;MACNC,OAAS,kBAAA,MAAA,CAAA,OAAO,EAAEC,MAAAA,EAA6B,KAAA;AAC7C,QAAA,MAAM,EAAEL,KAAAA,EAAAA,MAAAA,EAAOM,YAAe,GAAA,MAAMzB,OAAO0B,SAAU,CAAA;AAAEF,UAAAA;SAAO,CAAA;AAC9D,QAAO,OAAA;UAAEG,IAAMR,EAAAA,MAAAA;AAAOM,UAAAA;AAAW,SAAA;OAF1B,EAAA,SAAA;KAIX,CAAA;AACA,IAAA,OAAON,KAAMS,CAAAA,GAAAA,CAAI,CAAC3B,IAAAA,KAAS,IAAIN,OAAQ,CAAA;AAAEK,MAAAA,MAAAA;AAAQC,MAAAA;AAAK,KAAA,CAAA,CAAA;AACxD;AACF","file":"mcp.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 { BaseToolRunOptions, ToolEmitter, ToolInput, JSONToolOutput, Tool } from \"@/tools/base.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Client as MCPClient } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { ListToolsResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { SchemaObject } from \"ajv\";\nimport { paginate } from \"@/internals/helpers/paginate.js\";\n\nexport interface MCPToolInput {\n client: MCPClient;\n tool: ListToolsResult[\"tools\"][number];\n}\n\nexport class MCPToolOutput extends JSONToolOutput<any> {}\n\nexport class MCPTool extends Tool<MCPToolOutput> {\n public readonly name: string;\n public readonly description: string;\n public readonly emitter: ToolEmitter<ToolInput<this>, MCPToolOutput>;\n\n public readonly client: MCPClient;\n private readonly tool: ListToolsResult[\"tools\"][number];\n\n public constructor({ client, tool, ...options }: MCPToolInput) {\n super(options);\n this.client = client;\n this.tool = tool;\n this.name = tool.name;\n this.description =\n tool.description ?? \"No available description, use the tool based on its name and schema.\";\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"mcp\", this.name],\n creator: this,\n });\n }\n\n public inputSchema() {\n return this.tool.inputSchema as SchemaObject;\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: BaseToolRunOptions,\n run: GetRunContext<typeof this>,\n ) {\n const result = await this.client.callTool({ name: this.name, arguments: input }, undefined, {\n signal: run.signal,\n });\n return new MCPToolOutput(result);\n }\n\n public static async fromClient(client: MCPClient): Promise<MCPTool[]> {\n const tools = await paginate({\n size: Infinity,\n handler: async ({ cursor }: { cursor?: string }) => {\n const { tools, nextCursor } = await client.listTools({ cursor });\n return { data: tools, nextCursor } as const;\n },\n });\n return tools.map((tool) => new MCPTool({ client, tool }));\n }\n}\n"]}
1
+ {"version":3,"sources":["mcp.ts"],"names":["MCPToolOutput","JSONToolOutput","MCPTool","Tool","name","description","emitter","client","tool","options","Emitter","root","child","namespace","creator","inputSchema","_run","input","_options","run","result","callTool","arguments","undefined","signal","fromClient","tools","paginate","size","Infinity","handler","cursor","nextCursor","listTools","data","map"],"mappings":";;;;;;;;AA6BO,MAAMA,sBAAsBC,uBAAAA,CAAAA;EA7BnC;;;AA6BwD;AAEjD,MAAMC,gBAAgBC,aAAAA,CAAAA;EA/B7B;;;AAgCkBC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AACAC,EAAAA,OAAAA;AAEAC,EAAAA,MAAAA;AACCC,EAAAA,IAAAA;AAEjB,EAAA,WAAA,CAAmB,EAAED,MAAAA,EAAQC,IAAM,EAAA,GAAGC,SAAyB,EAAA;AAC7D,IAAA,KAAA,CAAMA,OAAAA,CAAAA;AACN,IAAA,IAAA,CAAKF,MAASA,GAAAA,MAAAA;AACd,IAAA,IAAA,CAAKC,IAAOA,GAAAA,IAAAA;AACZ,IAAA,IAAA,CAAKJ,OAAOI,IAAKJ,CAAAA,IAAAA;AACjB,IAAKC,IAAAA,CAAAA,WAAAA,GACHG,KAAKH,WAAe,IAAA,sEAAA;AACtB,IAAKC,IAAAA,CAAAA,OAAAA,GAAUI,mBAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,KAAA;QAAO,IAAKT,CAAAA;;MAChCU,OAAS,EAAA;KACX,CAAA;AACF;EAEOC,WAAc,GAAA;AACnB,IAAA,OAAO,KAAKP,IAAKO,CAAAA,WAAAA;AACnB;EAEA,MAAgBC,IAAAA,CACdC,KACAC,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAA,MAAMC,MAAS,GAAA,MAAM,IAAKb,CAAAA,MAAAA,CAAOc,QAAS,CAAA;AAAEjB,MAAAA,IAAAA,EAAM,IAAKA,CAAAA,IAAAA;MAAMkB,SAAWL,EAAAA;AAAM,KAAA,EAAGM,MAAW,EAAA;AAC1FC,MAAAA,MAAAA,EAAQL,GAAIK,CAAAA;KACd,CAAA;AACA,IAAO,OAAA,IAAIxB,cAAcoB,MAAAA,CAAAA;AAC3B;AAEA,EAAA,aAAoBK,WAAWlB,MAAuC,EAAA;AACpE,IAAMmB,MAAAA,KAAAA,GAAQ,MAAMC,qBAAS,CAAA;MAC3BC,IAAMC,EAAAA,QAAAA;MACNC,OAAS,kBAAA,MAAA,CAAA,OAAO,EAAEC,MAAAA,EAA6B,KAAA;AAC7C,QAAA,MAAM,EAAEL,KAAAA,EAAAA,MAAAA,EAAOM,YAAe,GAAA,MAAMzB,OAAO0B,SAAU,CAAA;AAAEF,UAAAA;SAAO,CAAA;AAC9D,QAAO,OAAA;UAAEG,IAAMR,EAAAA,MAAAA;AAAOM,UAAAA;AAAW,SAAA;OAF1B,EAAA,SAAA;KAIX,CAAA;AACA,IAAA,OAAON,KAAMS,CAAAA,GAAAA,CAAI,CAAC3B,IAAAA,KAAS,IAAIN,OAAQ,CAAA;AAAEK,MAAAA,MAAAA;AAAQC,MAAAA;AAAK,KAAA,CAAA,CAAA;AACxD;AACF","file":"mcp.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 { BaseToolRunOptions, ToolEmitter, ToolInput, JSONToolOutput, Tool } from \"@/tools/base.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Client as MCPClient } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { ListToolsResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { SchemaObject } from \"ajv\";\nimport { paginate } from \"@/internals/helpers/paginate.js\";\n\nexport interface MCPToolInput {\n client: MCPClient;\n tool: ListToolsResult[\"tools\"][number];\n}\n\nexport class MCPToolOutput extends JSONToolOutput<any> {}\n\nexport class MCPTool extends Tool<MCPToolOutput> {\n public readonly name: string;\n public readonly description: string;\n public readonly emitter: ToolEmitter<ToolInput<this>, MCPToolOutput>;\n\n public readonly client: MCPClient;\n private readonly tool: ListToolsResult[\"tools\"][number];\n\n public constructor({ client, tool, ...options }: MCPToolInput) {\n super(options);\n this.client = client;\n this.tool = tool;\n this.name = tool.name;\n this.description =\n tool.description ?? \"No available description, use the tool based on its name and schema.\";\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"mcp\", this.name],\n creator: this,\n });\n }\n\n public inputSchema() {\n return this.tool.inputSchema as SchemaObject;\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: BaseToolRunOptions,\n run: GetRunContext<typeof this>,\n ) {\n const result = await this.client.callTool({ name: this.name, arguments: input }, undefined, {\n signal: run.signal,\n });\n return new MCPToolOutput(result);\n }\n\n public static async fromClient(client: MCPClient): Promise<MCPTool[]> {\n const tools = await paginate({\n size: Infinity,\n handler: async ({ cursor }: { cursor?: string }) => {\n const { tools, nextCursor } = await client.listTools({ cursor });\n return { data: tools, nextCursor } as const;\n },\n });\n return tools.map((tool) => new MCPTool({ client, tool }));\n }\n}\n"]}
@@ -12,7 +12,7 @@ import '../cache/base.cjs';
12
12
  import '../internals/helpers/schema.cjs';
13
13
  import 'zod';
14
14
  import 'zod-to-json-schema';
15
- import '../emitter-C9EN5B0j.cjs';
15
+ import '../emitter-BWtGHYn0.cjs';
16
16
  import '../internals/helpers/promise.cjs';
17
17
 
18
18
  /**
@@ -12,7 +12,7 @@ import '../cache/base.js';
12
12
  import '../internals/helpers/schema.js';
13
13
  import 'zod';
14
14
  import 'zod-to-json-schema';
15
- import '../emitter-BxVxGBbJ.js';
15
+ import '../emitter-l0W9gC1A.js';
16
16
  import '../internals/helpers/promise.js';
17
17
 
18
18
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tools/mcp.ts"],"names":["MCPToolOutput","JSONToolOutput","MCPTool","Tool","name","description","emitter","client","tool","options","Emitter","root","child","namespace","creator","inputSchema","_run","input","_options","run","result","callTool","arguments","undefined","signal","fromClient","tools","paginate","size","Infinity","handler","cursor","nextCursor","listTools","data","map"],"mappings":";;;;;;AA6BO,MAAMA,sBAAsBC,cAAAA,CAAAA;EA7BnC;;;AA6BwD;AAEjD,MAAMC,gBAAgBC,IAAAA,CAAAA;EA/B7B;;;AAgCkBC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AACAC,EAAAA,OAAAA;AAEAC,EAAAA,MAAAA;AACCC,EAAAA,IAAAA;AAEjB,EAAA,WAAA,CAAmB,EAAED,MAAAA,EAAQC,IAAM,EAAA,GAAGC,SAAyB,EAAA;AAC7D,IAAA,KAAA,CAAMA,OAAAA,CAAAA;AACN,IAAA,IAAA,CAAKF,MAASA,GAAAA,MAAAA;AACd,IAAA,IAAA,CAAKC,IAAOA,GAAAA,IAAAA;AACZ,IAAA,IAAA,CAAKJ,OAAOI,IAAKJ,CAAAA,IAAAA;AACjB,IAAKC,IAAAA,CAAAA,WAAAA,GACHG,KAAKH,WAAe,IAAA,sEAAA;AACtB,IAAKC,IAAAA,CAAAA,OAAAA,GAAUI,OAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,KAAA;QAAO,IAAKT,CAAAA;;MAChCU,OAAS,EAAA;KACX,CAAA;AACF;EAEOC,WAAc,GAAA;AACnB,IAAA,OAAO,KAAKP,IAAKO,CAAAA,WAAAA;AACnB;EAEA,MAAgBC,IAAAA,CACdC,KACAC,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAA,MAAMC,MAAS,GAAA,MAAM,IAAKb,CAAAA,MAAAA,CAAOc,QAAS,CAAA;AAAEjB,MAAAA,IAAAA,EAAM,IAAKA,CAAAA,IAAAA;MAAMkB,SAAWL,EAAAA;AAAM,KAAA,EAAGM,KAAW,CAAA,EAAA;AAC1FC,MAAAA,MAAAA,EAAQL,GAAIK,CAAAA;KACd,CAAA;AACA,IAAO,OAAA,IAAIxB,cAAcoB,MAAAA,CAAAA;AAC3B;AAEA,EAAA,aAAoBK,WAAWlB,MAAuC,EAAA;AACpE,IAAMmB,MAAAA,KAAAA,GAAQ,MAAMC,QAAS,CAAA;MAC3BC,IAAMC,EAAAA,QAAAA;MACNC,OAAS,kBAAA,MAAA,CAAA,OAAO,EAAEC,MAAAA,EAA6B,KAAA;AAC7C,QAAA,MAAM,EAAEL,KAAAA,EAAAA,MAAAA,EAAOM,YAAe,GAAA,MAAMzB,OAAO0B,SAAU,CAAA;AAAEF,UAAAA;SAAO,CAAA;AAC9D,QAAO,OAAA;UAAEG,IAAMR,EAAAA,MAAAA;AAAOM,UAAAA;AAAW,SAAA;OAF1B,EAAA,SAAA;KAIX,CAAA;AACA,IAAA,OAAON,KAAMS,CAAAA,GAAAA,CAAI,CAAC3B,IAAAA,KAAS,IAAIN,OAAQ,CAAA;AAAEK,MAAAA,MAAAA;AAAQC,MAAAA;AAAK,KAAA,CAAA,CAAA;AACxD;AACF","file":"mcp.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 { BaseToolRunOptions, ToolEmitter, ToolInput, JSONToolOutput, Tool } from \"@/tools/base.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Client as MCPClient } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { ListToolsResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { SchemaObject } from \"ajv\";\nimport { paginate } from \"@/internals/helpers/paginate.js\";\n\nexport interface MCPToolInput {\n client: MCPClient;\n tool: ListToolsResult[\"tools\"][number];\n}\n\nexport class MCPToolOutput extends JSONToolOutput<any> {}\n\nexport class MCPTool extends Tool<MCPToolOutput> {\n public readonly name: string;\n public readonly description: string;\n public readonly emitter: ToolEmitter<ToolInput<this>, MCPToolOutput>;\n\n public readonly client: MCPClient;\n private readonly tool: ListToolsResult[\"tools\"][number];\n\n public constructor({ client, tool, ...options }: MCPToolInput) {\n super(options);\n this.client = client;\n this.tool = tool;\n this.name = tool.name;\n this.description =\n tool.description ?? \"No available description, use the tool based on its name and schema.\";\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"mcp\", this.name],\n creator: this,\n });\n }\n\n public inputSchema() {\n return this.tool.inputSchema as SchemaObject;\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: BaseToolRunOptions,\n run: GetRunContext<typeof this>,\n ) {\n const result = await this.client.callTool({ name: this.name, arguments: input }, undefined, {\n signal: run.signal,\n });\n return new MCPToolOutput(result);\n }\n\n public static async fromClient(client: MCPClient): Promise<MCPTool[]> {\n const tools = await paginate({\n size: Infinity,\n handler: async ({ cursor }: { cursor?: string }) => {\n const { tools, nextCursor } = await client.listTools({ cursor });\n return { data: tools, nextCursor } as const;\n },\n });\n return tools.map((tool) => new MCPTool({ client, tool }));\n }\n}\n"]}
1
+ {"version":3,"sources":["mcp.ts"],"names":["MCPToolOutput","JSONToolOutput","MCPTool","Tool","name","description","emitter","client","tool","options","Emitter","root","child","namespace","creator","inputSchema","_run","input","_options","run","result","callTool","arguments","undefined","signal","fromClient","tools","paginate","size","Infinity","handler","cursor","nextCursor","listTools","data","map"],"mappings":";;;;;;AA6BO,MAAMA,sBAAsBC,cAAAA,CAAAA;EA7BnC;;;AA6BwD;AAEjD,MAAMC,gBAAgBC,IAAAA,CAAAA;EA/B7B;;;AAgCkBC,EAAAA,IAAAA;AACAC,EAAAA,WAAAA;AACAC,EAAAA,OAAAA;AAEAC,EAAAA,MAAAA;AACCC,EAAAA,IAAAA;AAEjB,EAAA,WAAA,CAAmB,EAAED,MAAAA,EAAQC,IAAM,EAAA,GAAGC,SAAyB,EAAA;AAC7D,IAAA,KAAA,CAAMA,OAAAA,CAAAA;AACN,IAAA,IAAA,CAAKF,MAASA,GAAAA,MAAAA;AACd,IAAA,IAAA,CAAKC,IAAOA,GAAAA,IAAAA;AACZ,IAAA,IAAA,CAAKJ,OAAOI,IAAKJ,CAAAA,IAAAA;AACjB,IAAKC,IAAAA,CAAAA,WAAAA,GACHG,KAAKH,WAAe,IAAA,sEAAA;AACtB,IAAKC,IAAAA,CAAAA,OAAAA,GAAUI,OAAQC,CAAAA,IAAAA,CAAKC,KAAM,CAAA;MAChCC,SAAW,EAAA;AAAC,QAAA,MAAA;AAAQ,QAAA,KAAA;QAAO,IAAKT,CAAAA;;MAChCU,OAAS,EAAA;KACX,CAAA;AACF;EAEOC,WAAc,GAAA;AACnB,IAAA,OAAO,KAAKP,IAAKO,CAAAA,WAAAA;AACnB;EAEA,MAAgBC,IAAAA,CACdC,KACAC,EAAAA,QAAAA,EACAC,GACA,EAAA;AACA,IAAA,MAAMC,MAAS,GAAA,MAAM,IAAKb,CAAAA,MAAAA,CAAOc,QAAS,CAAA;AAAEjB,MAAAA,IAAAA,EAAM,IAAKA,CAAAA,IAAAA;MAAMkB,SAAWL,EAAAA;AAAM,KAAA,EAAGM,MAAW,EAAA;AAC1FC,MAAAA,MAAAA,EAAQL,GAAIK,CAAAA;KACd,CAAA;AACA,IAAO,OAAA,IAAIxB,cAAcoB,MAAAA,CAAAA;AAC3B;AAEA,EAAA,aAAoBK,WAAWlB,MAAuC,EAAA;AACpE,IAAMmB,MAAAA,KAAAA,GAAQ,MAAMC,QAAS,CAAA;MAC3BC,IAAMC,EAAAA,QAAAA;MACNC,OAAS,kBAAA,MAAA,CAAA,OAAO,EAAEC,MAAAA,EAA6B,KAAA;AAC7C,QAAA,MAAM,EAAEL,KAAAA,EAAAA,MAAAA,EAAOM,YAAe,GAAA,MAAMzB,OAAO0B,SAAU,CAAA;AAAEF,UAAAA;SAAO,CAAA;AAC9D,QAAO,OAAA;UAAEG,IAAMR,EAAAA,MAAAA;AAAOM,UAAAA;AAAW,SAAA;OAF1B,EAAA,SAAA;KAIX,CAAA;AACA,IAAA,OAAON,KAAMS,CAAAA,GAAAA,CAAI,CAAC3B,IAAAA,KAAS,IAAIN,OAAQ,CAAA;AAAEK,MAAAA,MAAAA;AAAQC,MAAAA;AAAK,KAAA,CAAA,CAAA;AACxD;AACF","file":"mcp.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 { BaseToolRunOptions, ToolEmitter, ToolInput, JSONToolOutput, Tool } from \"@/tools/base.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Client as MCPClient } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { ListToolsResult } from \"@modelcontextprotocol/sdk/types.js\";\nimport { SchemaObject } from \"ajv\";\nimport { paginate } from \"@/internals/helpers/paginate.js\";\n\nexport interface MCPToolInput {\n client: MCPClient;\n tool: ListToolsResult[\"tools\"][number];\n}\n\nexport class MCPToolOutput extends JSONToolOutput<any> {}\n\nexport class MCPTool extends Tool<MCPToolOutput> {\n public readonly name: string;\n public readonly description: string;\n public readonly emitter: ToolEmitter<ToolInput<this>, MCPToolOutput>;\n\n public readonly client: MCPClient;\n private readonly tool: ListToolsResult[\"tools\"][number];\n\n public constructor({ client, tool, ...options }: MCPToolInput) {\n super(options);\n this.client = client;\n this.tool = tool;\n this.name = tool.name;\n this.description =\n tool.description ?? \"No available description, use the tool based on its name and schema.\";\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"mcp\", this.name],\n creator: this,\n });\n }\n\n public inputSchema() {\n return this.tool.inputSchema as SchemaObject;\n }\n\n protected async _run(\n input: ToolInput<this>,\n _options: BaseToolRunOptions,\n run: GetRunContext<typeof this>,\n ) {\n const result = await this.client.callTool({ name: this.name, arguments: input }, undefined, {\n signal: run.signal,\n });\n return new MCPToolOutput(result);\n }\n\n public static async fromClient(client: MCPClient): Promise<MCPTool[]> {\n const tools = await paginate({\n size: Infinity,\n handler: async ({ cursor }: { cursor?: string }) => {\n const { tools, nextCursor } = await client.listTools({ cursor });\n return { data: tools, nextCursor } as const;\n },\n });\n return tools.map((tool) => new MCPTool({ client, tool }));\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tools/openapi.ts"],"names":["OpenAPIToolOutput","StringToolOutput","constructor","status","statusText","result","OpenAPITool","Tool","name","description","url","openApiSchema","inputSchema","getReferencedObject","json","refPath","pathSegments","split","currentObject","segment","type","required","oneOf","Object","entries","paths","flatMap","path","pathSpec","map","method","methodSpec","additionalProperties","properties","const","summary","requestBody","content","schema","body","parameters","filter","p","reduce","acc","$ref","emitter","register","options","parse","servers","find","s","ValueError","info","title","trim","Emitter","root","child","namespace","toCamelCase","creator","_run","input","_options","run","URL","keys","forEach","key","value","newPath","replace","searchParams","append","pathname","join","fetchOptions","signal","AbortSignal","any","isTruthy","isEmpty","undefined","toLowerCase","headers","Accept","emit","response","fetch","toString","text","output","data","err","ToolError","createSnapshot","clone"],"mappings":"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","file":"openapi.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 { join } from \"path\";\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n StringToolOutput,\n Tool,\n ToolError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { Callback, Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { SchemaObject } from \"ajv\";\nimport { parse } from \"yaml\";\nimport { isEmpty, isTruthy, clone, toCamelCase } from \"remeda\";\n\nexport interface OpenAPIToolOptions extends BaseToolOptions {\n name?: string;\n description?: string;\n openApiSchema: any;\n url?: string;\n fetchOptions?: RequestInit;\n}\n\nexport interface OpenAPIEvents {\n beforeFetch: Callback<{ options: RequestInit; url: URL }>;\n afterFetch: Callback<{ data: OpenAPIToolOutput; url: URL }>;\n}\n\nexport class OpenAPIToolOutput extends StringToolOutput {\n constructor(\n public readonly status: number,\n public readonly statusText: string,\n public readonly result = \"\",\n ) {\n super();\n this.status = status;\n this.statusText = statusText;\n this.result = result ?? \"\";\n }\n}\n\nexport class OpenAPITool extends Tool<OpenAPIToolOutput, OpenAPIToolOptions> {\n public readonly name: string;\n public readonly description: string;\n public readonly url: string;\n\n public readonly openApiSchema: any;\n\n inputSchema(): SchemaObject {\n const getReferencedObject = (json: any, refPath: string) => {\n const pathSegments = refPath.split(\"/\");\n let currentObject = json;\n for (const segment of pathSegments) {\n if (segment === \"#\") {\n continue;\n }\n currentObject = currentObject[segment];\n }\n return currentObject;\n };\n\n return {\n type: \"object\",\n required: [\"path\", \"method\"],\n oneOf: Object.entries(this.openApiSchema.paths).flatMap(([path, pathSpec]: [string, any]) =>\n Object.entries(pathSpec).map(([method, methodSpec]: [string, any]) => ({\n additionalProperties: false,\n properties: {\n path: {\n const: path,\n description:\n \"Do not replace variables in path, instead of, put them to the parameters object.\",\n },\n method: { const: method, description: methodSpec.summary || methodSpec.description },\n ...(methodSpec.requestBody?.content?.[\"application/json\"]?.schema\n ? {\n body: methodSpec.requestBody?.content?.[\"application/json\"]?.schema,\n }\n : {}),\n ...(methodSpec.parameters\n ? {\n parameters: {\n type: \"object\",\n additionalProperties: false,\n required: methodSpec.parameters\n .filter((p: any) => p.required === true)\n .map((p: any) => p.name),\n properties: methodSpec.parameters.reduce(\n (acc: any, p: any) =>\n !p.$ref\n ? { ...acc, [p.name]: { ...p.schema, description: p.name } }\n : {\n ...acc,\n [getReferencedObject(this.openApiSchema, p.$ref)?.name]: {\n ...getReferencedObject(this.openApiSchema, p.$ref)?.schema,\n description: getReferencedObject(this.openApiSchema, p.$ref)?.name,\n },\n },\n {},\n ),\n },\n }\n : {}),\n },\n })),\n ),\n } as const satisfies SchemaObject;\n }\n\n public readonly emitter: ToolEmitter<Record<string, any>, OpenAPIToolOutput, OpenAPIEvents>;\n\n static {\n this.register();\n }\n\n public constructor(options: OpenAPIToolOptions) {\n super(options);\n\n this.openApiSchema = parse(options.openApiSchema);\n\n this.url = this.options.url || this.openApiSchema.servers?.find((s: any) => s?.url)?.url;\n if (!this.url) {\n throw new ValueError(\n \"OpenAPI schema hasn't any server with url specified. Pass it manually.\",\n );\n }\n\n this.name = options.name ?? this.openApiSchema?.info?.title?.trim();\n if (!this.name) {\n throw new ValueError(\"OpenAPI schema hasn't 'name' specified. Pass it manually.\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"web\", \"openAPI\", toCamelCase(this.name)],\n creator: this,\n });\n\n this.description =\n options.description ||\n this.openApiSchema?.info?.description ||\n \"Performs REST API requests to the servers and retrieves the response. The server API interfaces are defined in OpenAPI schema. \\n\" +\n \"Only use the OpenAPI tool if you need to communicate to external servers.\";\n\n if (!this.description) {\n throw new ValueError(\"OpenAPI schema hasn't 'description' specified. Pass it manually.\");\n }\n }\n\n protected async _run(\n input: Record<string, any>,\n _options: Partial<BaseToolRunOptions>,\n run: GetRunContext<typeof this>,\n ) {\n let path: string = input.path || \"\";\n const url = new URL(this.url);\n Object.keys(input.parameters ?? {}).forEach((key) => {\n const value = input.parameters[key];\n const newPath = path.replace(`{${key}}`, value);\n if (newPath == path) {\n url.searchParams.append(key, value);\n } else {\n path = newPath;\n }\n });\n url.pathname = join(url.pathname, path);\n const options: RequestInit = {\n ...this.options.fetchOptions,\n signal: AbortSignal.any([run.signal, this.options.fetchOptions?.signal].filter(isTruthy)),\n body: !isEmpty(input.body) ? input.body : undefined,\n method: input.method.toLowerCase(),\n headers: { Accept: \"application/json\", ...this.options.fetchOptions?.headers },\n };\n await run.emitter.emit(\"beforeFetch\", { options: options, url: url });\n try {\n const response = await fetch(url.toString(), options);\n const text = await response.text();\n const output = new OpenAPIToolOutput(response.status, response.statusText, text);\n await run.emitter.emit(\"afterFetch\", { data: output, url });\n return output;\n } catch (err) {\n throw new ToolError(`Request to ${url} has failed.`, [err]);\n }\n }\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n openApiSchema: clone(this.openApiSchema),\n name: this.name,\n description: this.description,\n url: this.url,\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["openapi.ts"],"names":["OpenAPIToolOutput","StringToolOutput","constructor","status","statusText","result","OpenAPITool","Tool","name","description","url","openApiSchema","inputSchema","getReferencedObject","json","refPath","pathSegments","split","currentObject","segment","type","required","oneOf","Object","entries","paths","flatMap","path","pathSpec","map","method","methodSpec","additionalProperties","properties","const","summary","requestBody","content","schema","body","parameters","filter","p","reduce","acc","$ref","emitter","register","options","parse","servers","find","s","ValueError","info","title","trim","Emitter","root","child","namespace","toCamelCase","creator","_run","input","_options","run","URL","keys","forEach","key","value","newPath","replace","searchParams","append","pathname","join","fetchOptions","signal","AbortSignal","any","isTruthy","isEmpty","undefined","toLowerCase","headers","Accept","emit","response","fetch","toString","text","output","data","err","ToolError","createSnapshot","clone"],"mappings":"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","file":"openapi.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 { join } from \"path\";\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n StringToolOutput,\n Tool,\n ToolError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { Callback, Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { SchemaObject } from \"ajv\";\nimport { parse } from \"yaml\";\nimport { isEmpty, isTruthy, clone, toCamelCase } from \"remeda\";\n\nexport interface OpenAPIToolOptions extends BaseToolOptions {\n name?: string;\n description?: string;\n openApiSchema: any;\n url?: string;\n fetchOptions?: RequestInit;\n}\n\nexport interface OpenAPIEvents {\n beforeFetch: Callback<{ options: RequestInit; url: URL }>;\n afterFetch: Callback<{ data: OpenAPIToolOutput; url: URL }>;\n}\n\nexport class OpenAPIToolOutput extends StringToolOutput {\n constructor(\n public readonly status: number,\n public readonly statusText: string,\n public readonly result = \"\",\n ) {\n super();\n this.status = status;\n this.statusText = statusText;\n this.result = result ?? \"\";\n }\n}\n\nexport class OpenAPITool extends Tool<OpenAPIToolOutput, OpenAPIToolOptions> {\n public readonly name: string;\n public readonly description: string;\n public readonly url: string;\n\n public readonly openApiSchema: any;\n\n inputSchema(): SchemaObject {\n const getReferencedObject = (json: any, refPath: string) => {\n const pathSegments = refPath.split(\"/\");\n let currentObject = json;\n for (const segment of pathSegments) {\n if (segment === \"#\") {\n continue;\n }\n currentObject = currentObject[segment];\n }\n return currentObject;\n };\n\n return {\n type: \"object\",\n required: [\"path\", \"method\"],\n oneOf: Object.entries(this.openApiSchema.paths).flatMap(([path, pathSpec]: [string, any]) =>\n Object.entries(pathSpec).map(([method, methodSpec]: [string, any]) => ({\n additionalProperties: false,\n properties: {\n path: {\n const: path,\n description:\n \"Do not replace variables in path, instead of, put them to the parameters object.\",\n },\n method: { const: method, description: methodSpec.summary || methodSpec.description },\n ...(methodSpec.requestBody?.content?.[\"application/json\"]?.schema\n ? {\n body: methodSpec.requestBody?.content?.[\"application/json\"]?.schema,\n }\n : {}),\n ...(methodSpec.parameters\n ? {\n parameters: {\n type: \"object\",\n additionalProperties: false,\n required: methodSpec.parameters\n .filter((p: any) => p.required === true)\n .map((p: any) => p.name),\n properties: methodSpec.parameters.reduce(\n (acc: any, p: any) =>\n !p.$ref\n ? { ...acc, [p.name]: { ...p.schema, description: p.name } }\n : {\n ...acc,\n [getReferencedObject(this.openApiSchema, p.$ref)?.name]: {\n ...getReferencedObject(this.openApiSchema, p.$ref)?.schema,\n description: getReferencedObject(this.openApiSchema, p.$ref)?.name,\n },\n },\n {},\n ),\n },\n }\n : {}),\n },\n })),\n ),\n } as const satisfies SchemaObject;\n }\n\n public readonly emitter: ToolEmitter<Record<string, any>, OpenAPIToolOutput, OpenAPIEvents>;\n\n static {\n this.register();\n }\n\n public constructor(options: OpenAPIToolOptions) {\n super(options);\n\n this.openApiSchema = parse(options.openApiSchema);\n\n this.url = this.options.url || this.openApiSchema.servers?.find((s: any) => s?.url)?.url;\n if (!this.url) {\n throw new ValueError(\n \"OpenAPI schema hasn't any server with url specified. Pass it manually.\",\n );\n }\n\n this.name = options.name ?? this.openApiSchema?.info?.title?.trim();\n if (!this.name) {\n throw new ValueError(\"OpenAPI schema hasn't 'name' specified. Pass it manually.\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"web\", \"openAPI\", toCamelCase(this.name)],\n creator: this,\n });\n\n this.description =\n options.description ||\n this.openApiSchema?.info?.description ||\n \"Performs REST API requests to the servers and retrieves the response. The server API interfaces are defined in OpenAPI schema. \\n\" +\n \"Only use the OpenAPI tool if you need to communicate to external servers.\";\n\n if (!this.description) {\n throw new ValueError(\"OpenAPI schema hasn't 'description' specified. Pass it manually.\");\n }\n }\n\n protected async _run(\n input: Record<string, any>,\n _options: Partial<BaseToolRunOptions>,\n run: GetRunContext<typeof this>,\n ) {\n let path: string = input.path || \"\";\n const url = new URL(this.url);\n Object.keys(input.parameters ?? {}).forEach((key) => {\n const value = input.parameters[key];\n const newPath = path.replace(`{${key}}`, value);\n if (newPath == path) {\n url.searchParams.append(key, value);\n } else {\n path = newPath;\n }\n });\n url.pathname = join(url.pathname, path);\n const options: RequestInit = {\n ...this.options.fetchOptions,\n signal: AbortSignal.any([run.signal, this.options.fetchOptions?.signal].filter(isTruthy)),\n body: !isEmpty(input.body) ? input.body : undefined,\n method: input.method.toLowerCase(),\n headers: { Accept: \"application/json\", ...this.options.fetchOptions?.headers },\n };\n await run.emitter.emit(\"beforeFetch\", { options: options, url: url });\n try {\n const response = await fetch(url.toString(), options);\n const text = await response.text();\n const output = new OpenAPIToolOutput(response.status, response.statusText, text);\n await run.emitter.emit(\"afterFetch\", { data: output, url });\n return output;\n } catch (err) {\n throw new ToolError(`Request to ${url} has failed.`, [err]);\n }\n }\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n openApiSchema: clone(this.openApiSchema),\n name: this.name,\n description: this.description,\n url: this.url,\n };\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { BaseCache } from '../cache/base.cjs';
2
2
  import * as promise_based_task from 'promise-based-task';
3
3
  import { BaseToolOptions, StringToolOutput, Tool, ToolEmitter, BaseToolRunOptions } from './base.cjs';
4
- import { C as Callback, E as Emitter } from '../emitter-C9EN5B0j.cjs';
4
+ import { C as Callback, E as Emitter } from '../emitter-BWtGHYn0.cjs';
5
5
  import { GetRunContext } from '../context.cjs';
6
6
  import { SchemaObject } from 'ajv';
7
7
  import '../internals/serializable.cjs';
@@ -1,7 +1,7 @@
1
1
  import { BaseCache } from '../cache/base.js';
2
2
  import * as promise_based_task from 'promise-based-task';
3
3
  import { BaseToolOptions, StringToolOutput, Tool, ToolEmitter, BaseToolRunOptions } from './base.js';
4
- import { C as Callback, E as Emitter } from '../emitter-BxVxGBbJ.js';
4
+ import { C as Callback, E as Emitter } from '../emitter-l0W9gC1A.js';
5
5
  import { GetRunContext } from '../context.js';
6
6
  import { SchemaObject } from 'ajv';
7
7
  import '../internals/serializable.js';
@@ -3,7 +3,7 @@ import { StringToolOutput, Tool, ToolError } from './base.js';
3
3
  import { Emitter } from '../emitter/emitter.js';
4
4
  import { ValueError } from '../errors.js';
5
5
  import { parse } from 'yaml';
6
- import { toCamelCase, isTruthy, isEmpty, clone } from 'remeda';
6
+ import { toCamelCase, isEmpty, isTruthy, clone } from 'remeda';
7
7
 
8
8
  var __defProp = Object.defineProperty;
9
9
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tools/openapi.ts"],"names":["OpenAPIToolOutput","StringToolOutput","constructor","status","statusText","result","OpenAPITool","Tool","name","description","url","openApiSchema","inputSchema","getReferencedObject","json","refPath","pathSegments","split","currentObject","segment","type","required","oneOf","Object","entries","paths","flatMap","path","pathSpec","map","method","methodSpec","additionalProperties","properties","const","summary","requestBody","content","schema","body","parameters","filter","p","reduce","acc","$ref","emitter","register","options","parse","servers","find","s","ValueError","info","title","trim","Emitter","root","child","namespace","toCamelCase","creator","_run","input","_options","run","URL","keys","forEach","key","value","newPath","replace","searchParams","append","pathname","join","fetchOptions","signal","AbortSignal","any","isTruthy","isEmpty","undefined","toLowerCase","headers","Accept","emit","response","fetch","toString","text","output","data","err","ToolError","createSnapshot","clone"],"mappings":"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","file":"openapi.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 { join } from \"path\";\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n StringToolOutput,\n Tool,\n ToolError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { Callback, Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { SchemaObject } from \"ajv\";\nimport { parse } from \"yaml\";\nimport { isEmpty, isTruthy, clone, toCamelCase } from \"remeda\";\n\nexport interface OpenAPIToolOptions extends BaseToolOptions {\n name?: string;\n description?: string;\n openApiSchema: any;\n url?: string;\n fetchOptions?: RequestInit;\n}\n\nexport interface OpenAPIEvents {\n beforeFetch: Callback<{ options: RequestInit; url: URL }>;\n afterFetch: Callback<{ data: OpenAPIToolOutput; url: URL }>;\n}\n\nexport class OpenAPIToolOutput extends StringToolOutput {\n constructor(\n public readonly status: number,\n public readonly statusText: string,\n public readonly result = \"\",\n ) {\n super();\n this.status = status;\n this.statusText = statusText;\n this.result = result ?? \"\";\n }\n}\n\nexport class OpenAPITool extends Tool<OpenAPIToolOutput, OpenAPIToolOptions> {\n public readonly name: string;\n public readonly description: string;\n public readonly url: string;\n\n public readonly openApiSchema: any;\n\n inputSchema(): SchemaObject {\n const getReferencedObject = (json: any, refPath: string) => {\n const pathSegments = refPath.split(\"/\");\n let currentObject = json;\n for (const segment of pathSegments) {\n if (segment === \"#\") {\n continue;\n }\n currentObject = currentObject[segment];\n }\n return currentObject;\n };\n\n return {\n type: \"object\",\n required: [\"path\", \"method\"],\n oneOf: Object.entries(this.openApiSchema.paths).flatMap(([path, pathSpec]: [string, any]) =>\n Object.entries(pathSpec).map(([method, methodSpec]: [string, any]) => ({\n additionalProperties: false,\n properties: {\n path: {\n const: path,\n description:\n \"Do not replace variables in path, instead of, put them to the parameters object.\",\n },\n method: { const: method, description: methodSpec.summary || methodSpec.description },\n ...(methodSpec.requestBody?.content?.[\"application/json\"]?.schema\n ? {\n body: methodSpec.requestBody?.content?.[\"application/json\"]?.schema,\n }\n : {}),\n ...(methodSpec.parameters\n ? {\n parameters: {\n type: \"object\",\n additionalProperties: false,\n required: methodSpec.parameters\n .filter((p: any) => p.required === true)\n .map((p: any) => p.name),\n properties: methodSpec.parameters.reduce(\n (acc: any, p: any) =>\n !p.$ref\n ? { ...acc, [p.name]: { ...p.schema, description: p.name } }\n : {\n ...acc,\n [getReferencedObject(this.openApiSchema, p.$ref)?.name]: {\n ...getReferencedObject(this.openApiSchema, p.$ref)?.schema,\n description: getReferencedObject(this.openApiSchema, p.$ref)?.name,\n },\n },\n {},\n ),\n },\n }\n : {}),\n },\n })),\n ),\n } as const satisfies SchemaObject;\n }\n\n public readonly emitter: ToolEmitter<Record<string, any>, OpenAPIToolOutput, OpenAPIEvents>;\n\n static {\n this.register();\n }\n\n public constructor(options: OpenAPIToolOptions) {\n super(options);\n\n this.openApiSchema = parse(options.openApiSchema);\n\n this.url = this.options.url || this.openApiSchema.servers?.find((s: any) => s?.url)?.url;\n if (!this.url) {\n throw new ValueError(\n \"OpenAPI schema hasn't any server with url specified. Pass it manually.\",\n );\n }\n\n this.name = options.name ?? this.openApiSchema?.info?.title?.trim();\n if (!this.name) {\n throw new ValueError(\"OpenAPI schema hasn't 'name' specified. Pass it manually.\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"web\", \"openAPI\", toCamelCase(this.name)],\n creator: this,\n });\n\n this.description =\n options.description ||\n this.openApiSchema?.info?.description ||\n \"Performs REST API requests to the servers and retrieves the response. The server API interfaces are defined in OpenAPI schema. \\n\" +\n \"Only use the OpenAPI tool if you need to communicate to external servers.\";\n\n if (!this.description) {\n throw new ValueError(\"OpenAPI schema hasn't 'description' specified. Pass it manually.\");\n }\n }\n\n protected async _run(\n input: Record<string, any>,\n _options: Partial<BaseToolRunOptions>,\n run: GetRunContext<typeof this>,\n ) {\n let path: string = input.path || \"\";\n const url = new URL(this.url);\n Object.keys(input.parameters ?? {}).forEach((key) => {\n const value = input.parameters[key];\n const newPath = path.replace(`{${key}}`, value);\n if (newPath == path) {\n url.searchParams.append(key, value);\n } else {\n path = newPath;\n }\n });\n url.pathname = join(url.pathname, path);\n const options: RequestInit = {\n ...this.options.fetchOptions,\n signal: AbortSignal.any([run.signal, this.options.fetchOptions?.signal].filter(isTruthy)),\n body: !isEmpty(input.body) ? input.body : undefined,\n method: input.method.toLowerCase(),\n headers: { Accept: \"application/json\", ...this.options.fetchOptions?.headers },\n };\n await run.emitter.emit(\"beforeFetch\", { options: options, url: url });\n try {\n const response = await fetch(url.toString(), options);\n const text = await response.text();\n const output = new OpenAPIToolOutput(response.status, response.statusText, text);\n await run.emitter.emit(\"afterFetch\", { data: output, url });\n return output;\n } catch (err) {\n throw new ToolError(`Request to ${url} has failed.`, [err]);\n }\n }\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n openApiSchema: clone(this.openApiSchema),\n name: this.name,\n description: this.description,\n url: this.url,\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["openapi.ts"],"names":["OpenAPIToolOutput","StringToolOutput","constructor","status","statusText","result","OpenAPITool","Tool","name","description","url","openApiSchema","inputSchema","getReferencedObject","json","refPath","pathSegments","split","currentObject","segment","type","required","oneOf","Object","entries","paths","flatMap","path","pathSpec","map","method","methodSpec","additionalProperties","properties","const","summary","requestBody","content","schema","body","parameters","filter","p","reduce","acc","$ref","emitter","register","options","parse","servers","find","s","ValueError","info","title","trim","Emitter","root","child","namespace","toCamelCase","creator","_run","input","_options","run","URL","keys","forEach","key","value","newPath","replace","searchParams","append","pathname","join","fetchOptions","signal","AbortSignal","any","isTruthy","isEmpty","undefined","toLowerCase","headers","Accept","emit","response","fetch","toString","text","output","data","err","ToolError","createSnapshot","clone"],"mappings":"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","file":"openapi.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 { join } from \"path\";\n\nimport {\n BaseToolOptions,\n BaseToolRunOptions,\n StringToolOutput,\n Tool,\n ToolError,\n ToolEmitter,\n} from \"@/tools/base.js\";\nimport { Callback, Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext } from \"@/context.js\";\nimport { ValueError } from \"@/errors.js\";\nimport { SchemaObject } from \"ajv\";\nimport { parse } from \"yaml\";\nimport { isEmpty, isTruthy, clone, toCamelCase } from \"remeda\";\n\nexport interface OpenAPIToolOptions extends BaseToolOptions {\n name?: string;\n description?: string;\n openApiSchema: any;\n url?: string;\n fetchOptions?: RequestInit;\n}\n\nexport interface OpenAPIEvents {\n beforeFetch: Callback<{ options: RequestInit; url: URL }>;\n afterFetch: Callback<{ data: OpenAPIToolOutput; url: URL }>;\n}\n\nexport class OpenAPIToolOutput extends StringToolOutput {\n constructor(\n public readonly status: number,\n public readonly statusText: string,\n public readonly result = \"\",\n ) {\n super();\n this.status = status;\n this.statusText = statusText;\n this.result = result ?? \"\";\n }\n}\n\nexport class OpenAPITool extends Tool<OpenAPIToolOutput, OpenAPIToolOptions> {\n public readonly name: string;\n public readonly description: string;\n public readonly url: string;\n\n public readonly openApiSchema: any;\n\n inputSchema(): SchemaObject {\n const getReferencedObject = (json: any, refPath: string) => {\n const pathSegments = refPath.split(\"/\");\n let currentObject = json;\n for (const segment of pathSegments) {\n if (segment === \"#\") {\n continue;\n }\n currentObject = currentObject[segment];\n }\n return currentObject;\n };\n\n return {\n type: \"object\",\n required: [\"path\", \"method\"],\n oneOf: Object.entries(this.openApiSchema.paths).flatMap(([path, pathSpec]: [string, any]) =>\n Object.entries(pathSpec).map(([method, methodSpec]: [string, any]) => ({\n additionalProperties: false,\n properties: {\n path: {\n const: path,\n description:\n \"Do not replace variables in path, instead of, put them to the parameters object.\",\n },\n method: { const: method, description: methodSpec.summary || methodSpec.description },\n ...(methodSpec.requestBody?.content?.[\"application/json\"]?.schema\n ? {\n body: methodSpec.requestBody?.content?.[\"application/json\"]?.schema,\n }\n : {}),\n ...(methodSpec.parameters\n ? {\n parameters: {\n type: \"object\",\n additionalProperties: false,\n required: methodSpec.parameters\n .filter((p: any) => p.required === true)\n .map((p: any) => p.name),\n properties: methodSpec.parameters.reduce(\n (acc: any, p: any) =>\n !p.$ref\n ? { ...acc, [p.name]: { ...p.schema, description: p.name } }\n : {\n ...acc,\n [getReferencedObject(this.openApiSchema, p.$ref)?.name]: {\n ...getReferencedObject(this.openApiSchema, p.$ref)?.schema,\n description: getReferencedObject(this.openApiSchema, p.$ref)?.name,\n },\n },\n {},\n ),\n },\n }\n : {}),\n },\n })),\n ),\n } as const satisfies SchemaObject;\n }\n\n public readonly emitter: ToolEmitter<Record<string, any>, OpenAPIToolOutput, OpenAPIEvents>;\n\n static {\n this.register();\n }\n\n public constructor(options: OpenAPIToolOptions) {\n super(options);\n\n this.openApiSchema = parse(options.openApiSchema);\n\n this.url = this.options.url || this.openApiSchema.servers?.find((s: any) => s?.url)?.url;\n if (!this.url) {\n throw new ValueError(\n \"OpenAPI schema hasn't any server with url specified. Pass it manually.\",\n );\n }\n\n this.name = options.name ?? this.openApiSchema?.info?.title?.trim();\n if (!this.name) {\n throw new ValueError(\"OpenAPI schema hasn't 'name' specified. Pass it manually.\");\n }\n this.emitter = Emitter.root.child({\n namespace: [\"tool\", \"web\", \"openAPI\", toCamelCase(this.name)],\n creator: this,\n });\n\n this.description =\n options.description ||\n this.openApiSchema?.info?.description ||\n \"Performs REST API requests to the servers and retrieves the response. The server API interfaces are defined in OpenAPI schema. \\n\" +\n \"Only use the OpenAPI tool if you need to communicate to external servers.\";\n\n if (!this.description) {\n throw new ValueError(\"OpenAPI schema hasn't 'description' specified. Pass it manually.\");\n }\n }\n\n protected async _run(\n input: Record<string, any>,\n _options: Partial<BaseToolRunOptions>,\n run: GetRunContext<typeof this>,\n ) {\n let path: string = input.path || \"\";\n const url = new URL(this.url);\n Object.keys(input.parameters ?? {}).forEach((key) => {\n const value = input.parameters[key];\n const newPath = path.replace(`{${key}}`, value);\n if (newPath == path) {\n url.searchParams.append(key, value);\n } else {\n path = newPath;\n }\n });\n url.pathname = join(url.pathname, path);\n const options: RequestInit = {\n ...this.options.fetchOptions,\n signal: AbortSignal.any([run.signal, this.options.fetchOptions?.signal].filter(isTruthy)),\n body: !isEmpty(input.body) ? input.body : undefined,\n method: input.method.toLowerCase(),\n headers: { Accept: \"application/json\", ...this.options.fetchOptions?.headers },\n };\n await run.emitter.emit(\"beforeFetch\", { options: options, url: url });\n try {\n const response = await fetch(url.toString(), options);\n const text = await response.text();\n const output = new OpenAPIToolOutput(response.status, response.statusText, text);\n await run.emitter.emit(\"afterFetch\", { data: output, url });\n return output;\n } catch (err) {\n throw new ToolError(`Request to ${url} has failed.`, [err]);\n }\n }\n createSnapshot() {\n return {\n ...super.createSnapshot(),\n openApiSchema: clone(this.openApiSchema),\n name: this.name,\n description: this.description,\n url: this.url,\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tools/python/output.ts"],"names":["PythonToolOutput","ToolOutput","FILE_PREFIX","constructor","stdout","stderr","exitCode","outputFiles","register","isEmpty","getTextContent","executionStatus","trim","isImage","filename","some","ext","toLowerCase","endsWith","files","length","map","file","id","join","filter","Boolean","createSnapshot","loadSnapshot","snapshot","Object","assign"],"mappings":";;;;;;AAmBO,MAAMA,yBAAyBC,mBAAAA,CAAAA;EAnBtC;;;;;;;AAoBE,EAAA,OAAOC,WAAc,GAAA,cAAA;AAErBC,EAAAA,WAAAA,CACkBC,MACAC,EAAAA,MAAAA,EACAC,QACAC,EAAAA,WAAAA,GAA4B,EAC5C,EAAA;AACA,IAAK,KAAA,EAAA,EAAA,IALWH,CAAAA,MAAAA,GAAAA,MAAAA,EAAAA,IAAAA,CACAC,MAAAA,GAAAA,MAAAA,EAAAA,IACAC,CAAAA,QAAAA,GAAAA,QAAAA,EAAAA,IAAAA,CACAC,WAAAA,GAAAA,WAAAA;AAGlB;EAEA;AACE,IAAA,IAAA,CAAKC,QAAQ,EAAA;AACf;EAEAC,OAAU,GAAA;AACR,IAAO,OAAA,KAAA;AACT;EAEAC,cAAiB,GAAA;AACf,IAAA,MAAMC,kBACJ,IAAKL,CAAAA,QAAAA,KAAa,IACd,iCACA,GAAA,CAAA,gCAAA,EAAmC,KAAKA,QAAQ,CAAA,CAAA,CAAA;AACtD,IAAA,MAAMF,MAAS,GAAA,IAAA,CAAKA,MAAOQ,CAAAA,IAAAA,EAAS,GAAA,CAAA;;AAA8B,EAAA,IAAA,CAAKR,MAAM;AAAa,MAAA,CAAA,GAAA,IAAA;AAC1F,IAAA,MAAMC,MAAS,GAAA,IAAA,CAAKA,MAAOO,CAAAA,IAAAA,EAAS,GAAA,CAAA;;AAA2B,EAAA,IAAA,CAAKP,MAAM;AAAa,MAAA,CAAA,GAAA,IAAA;AACvF,IAAMQ,MAAAA,OAAAA,2BAAWC,QACf,KAAA;AAAC,MAAA,MAAA;AAAQ,MAAA,MAAA;AAAQ,MAAA,OAAA;AAAS,MAAA,MAAA;AAAQ,MAAA;MAAQC,IAAK,CAAA,CAACC,QAAQF,QAASG,CAAAA,WAAAA,GAAcC,QAASF,CAAAA,GAAAA,CAAAA,CAD1E,EAAA,SAAA,CAAA;AAEhB,IAAA,MAAMG,KAAQ,GAAA,IAAA,CAAKZ,WAAYa,CAAAA,MAAAA,GAC3B,oJACA,GAAA,IAAA,CAAKb,WACFc,CAAAA,GAAAA,CACC,CAACC,IAAAA,KACC,CAAGT,EAAAA,OAAAA,CAAQS,KAAKR,QAAQ,CAAA,GAAI,GAAM,GAAA,EAAA,CAAMQ,CAAAA,EAAAA,IAAAA,CAAKR,QAAQ,CAAA,EAAA,EAAKd,gBAAiBE,CAAAA,WAAW,CAAIoB,CAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA,CAAA,CAAG,CAEvGC,CAAAA,IAAAA,CAAK,IAAA,CACR,GAAA,IAAA;AAEJ,IAAO,OAAA;AAACb,MAAAA,eAAAA;AAAiBP,MAAAA,MAAAA;AAAQC,MAAAA,MAAAA;AAAQc,MAAAA;MAAOM,MAAOC,CAAAA,OAAAA,CAASF,CAAAA,IAAAA,CAAK,IAAA,CAAA;AACvE;EAEAG,cAAiB,GAAA;AACf,IAAO,OAAA;AACLvB,MAAAA,MAAAA,EAAQ,IAAKA,CAAAA,MAAAA;AACbC,MAAAA,MAAAA,EAAQ,IAAKA,CAAAA,MAAAA;AACbC,MAAAA,QAAAA,EAAU,IAAKA,CAAAA,QAAAA;AACfC,MAAAA,WAAAA,EAAa,IAAKA,CAAAA;AACpB,KAAA;AACF;AAEAqB,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF","file":"output.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 { ToolOutput } from \"@/tools/base.js\";\nimport { PythonFile } from \"@/tools/python/storage.js\";\n\nexport class PythonToolOutput extends ToolOutput {\n static FILE_PREFIX = \"urn:bee:file\";\n\n constructor(\n public readonly stdout: string,\n public readonly stderr: string,\n public readonly exitCode?: number,\n public readonly outputFiles: PythonFile[] = [],\n ) {\n super();\n }\n\n static {\n this.register();\n }\n\n isEmpty() {\n return false;\n }\n\n getTextContent() {\n const executionStatus =\n this.exitCode === 0\n ? \"The code executed successfully.\"\n : `The code exited with error code ${this.exitCode}.`;\n const stdout = this.stdout.trim() ? `Standard output: \\n\\`\\`\\`\\n${this.stdout}\\n\\`\\`\\`` : null;\n const stderr = this.stderr.trim() ? `Error output: \\n\\`\\`\\`\\n${this.stderr}\\n\\`\\`\\`` : null;\n const isImage = (filename: string) =>\n [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"].some((ext) => filename.toLowerCase().endsWith(ext));\n const files = this.outputFiles.length\n ? \"The following files were created or modified. The user does not see them yet. To present a file to the user, send them the link below, verbatim:\\n\" +\n this.outputFiles\n .map(\n (file) =>\n `${isImage(file.filename) ? \"!\" : \"\"}[${file.filename}](${PythonToolOutput.FILE_PREFIX}:${file.id})`,\n )\n .join(\"\\n\")\n : null;\n\n return [executionStatus, stdout, stderr, files].filter(Boolean).join(\"\\n\");\n }\n\n createSnapshot() {\n return {\n stdout: this.stdout,\n stderr: this.stderr,\n exitCode: this.exitCode,\n outputFiles: this.outputFiles,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
1
+ {"version":3,"sources":["output.ts"],"names":["PythonToolOutput","ToolOutput","FILE_PREFIX","constructor","stdout","stderr","exitCode","outputFiles","register","isEmpty","getTextContent","executionStatus","trim","isImage","filename","some","ext","toLowerCase","endsWith","files","length","map","file","id","join","filter","Boolean","createSnapshot","loadSnapshot","snapshot","Object","assign"],"mappings":";;;;;;AAmBO,MAAMA,yBAAyBC,mBAAAA,CAAAA;EAnBtC;;;;;;;AAoBE,EAAA,OAAOC,WAAc,GAAA,cAAA;AAErBC,EAAAA,WAAAA,CACkBC,MACAC,EAAAA,MAAAA,EACAC,QACAC,EAAAA,WAAAA,GAA4B,EAC5C,EAAA;AACA,IAAK,KAAA,EAAA,EAAA,IALWH,CAAAA,MAAAA,GAAAA,MAAAA,EAAAA,IAAAA,CACAC,MAAAA,GAAAA,MAAAA,EAAAA,IACAC,CAAAA,QAAAA,GAAAA,QAAAA,EAAAA,IAAAA,CACAC,WAAAA,GAAAA,WAAAA;AAGlB;EAEA;AACE,IAAA,IAAA,CAAKC,QAAQ,EAAA;AACf;EAEAC,OAAU,GAAA;AACR,IAAO,OAAA,KAAA;AACT;EAEAC,cAAiB,GAAA;AACf,IAAA,MAAMC,kBACJ,IAAKL,CAAAA,QAAAA,KAAa,IACd,iCACA,GAAA,CAAA,gCAAA,EAAmC,KAAKA,QAAQ,CAAA,CAAA,CAAA;AACtD,IAAA,MAAMF,MAAS,GAAA,IAAA,CAAKA,MAAOQ,CAAAA,IAAAA,EAAS,GAAA,CAAA;;AAA8B,EAAA,IAAA,CAAKR,MAAM;AAAa,MAAA,CAAA,GAAA,IAAA;AAC1F,IAAA,MAAMC,MAAS,GAAA,IAAA,CAAKA,MAAOO,CAAAA,IAAAA,EAAS,GAAA,CAAA;;AAA2B,EAAA,IAAA,CAAKP,MAAM;AAAa,MAAA,CAAA,GAAA,IAAA;AACvF,IAAMQ,MAAAA,OAAAA,2BAAWC,QACf,KAAA;AAAC,MAAA,MAAA;AAAQ,MAAA,MAAA;AAAQ,MAAA,OAAA;AAAS,MAAA,MAAA;AAAQ,MAAA;MAAQC,IAAK,CAAA,CAACC,QAAQF,QAASG,CAAAA,WAAAA,GAAcC,QAASF,CAAAA,GAAAA,CAAAA,CAD1E,EAAA,SAAA,CAAA;AAEhB,IAAA,MAAMG,KAAQ,GAAA,IAAA,CAAKZ,WAAYa,CAAAA,MAAAA,GAC3B,oJACA,GAAA,IAAA,CAAKb,WACFc,CAAAA,GAAAA,CACC,CAACC,IAAAA,KACC,CAAGT,EAAAA,OAAAA,CAAQS,KAAKR,QAAQ,CAAA,GAAI,GAAM,GAAA,EAAA,CAAMQ,CAAAA,EAAAA,IAAAA,CAAKR,QAAQ,CAAA,EAAA,EAAKd,gBAAiBE,CAAAA,WAAW,CAAIoB,CAAAA,EAAAA,IAAAA,CAAKC,EAAE,CAAA,CAAA,CAAG,CAEvGC,CAAAA,IAAAA,CAAK,IAAA,CACR,GAAA,IAAA;AAEJ,IAAO,OAAA;AAACb,MAAAA,eAAAA;AAAiBP,MAAAA,MAAAA;AAAQC,MAAAA,MAAAA;AAAQc,MAAAA;MAAOM,MAAOC,CAAAA,OAAAA,CAASF,CAAAA,IAAAA,CAAK,IAAA,CAAA;AACvE;EAEAG,cAAiB,GAAA;AACf,IAAO,OAAA;AACLvB,MAAAA,MAAAA,EAAQ,IAAKA,CAAAA,MAAAA;AACbC,MAAAA,MAAAA,EAAQ,IAAKA,CAAAA,MAAAA;AACbC,MAAAA,QAAAA,EAAU,IAAKA,CAAAA,QAAAA;AACfC,MAAAA,WAAAA,EAAa,IAAKA,CAAAA;AACpB,KAAA;AACF;AAEAqB,EAAAA,YAAAA,CAAaC,QAAkD,EAAA;AAC7DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,QAAAA,CAAAA;AACtB;AACF","file":"output.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 { ToolOutput } from \"@/tools/base.js\";\nimport { PythonFile } from \"@/tools/python/storage.js\";\n\nexport class PythonToolOutput extends ToolOutput {\n static FILE_PREFIX = \"urn:bee:file\";\n\n constructor(\n public readonly stdout: string,\n public readonly stderr: string,\n public readonly exitCode?: number,\n public readonly outputFiles: PythonFile[] = [],\n ) {\n super();\n }\n\n static {\n this.register();\n }\n\n isEmpty() {\n return false;\n }\n\n getTextContent() {\n const executionStatus =\n this.exitCode === 0\n ? \"The code executed successfully.\"\n : `The code exited with error code ${this.exitCode}.`;\n const stdout = this.stdout.trim() ? `Standard output: \\n\\`\\`\\`\\n${this.stdout}\\n\\`\\`\\`` : null;\n const stderr = this.stderr.trim() ? `Error output: \\n\\`\\`\\`\\n${this.stderr}\\n\\`\\`\\`` : null;\n const isImage = (filename: string) =>\n [\".png\", \".jpg\", \".jpeg\", \".gif\", \".bmp\"].some((ext) => filename.toLowerCase().endsWith(ext));\n const files = this.outputFiles.length\n ? \"The following files were created or modified. The user does not see them yet. To present a file to the user, send them the link below, verbatim:\\n\" +\n this.outputFiles\n .map(\n (file) =>\n `${isImage(file.filename) ? \"!\" : \"\"}[${file.filename}](${PythonToolOutput.FILE_PREFIX}:${file.id})`,\n )\n .join(\"\\n\")\n : null;\n\n return [executionStatus, stdout, stderr, files].filter(Boolean).join(\"\\n\");\n }\n\n createSnapshot() {\n return {\n stdout: this.stdout,\n stderr: this.stderr,\n exitCode: this.exitCode,\n outputFiles: this.outputFiles,\n };\n }\n\n loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n Object.assign(this, snapshot);\n }\n}\n"]}
@@ -2,7 +2,7 @@ import { ToolOutput } from '../base.cjs';
2
2
  import { PythonFile } from './storage.cjs';
3
3
  import 'ajv';
4
4
  import '../../context.cjs';
5
- import '../../emitter-C9EN5B0j.cjs';
5
+ import '../../emitter-BWtGHYn0.cjs';
6
6
  import '../../internals/types.cjs';
7
7
  import '../../internals/helpers/guards.cjs';
8
8
  import '../../internals/serializable.cjs';
@@ -2,7 +2,7 @@ import { ToolOutput } from '../base.js';
2
2
  import { PythonFile } from './storage.js';
3
3
  import 'ajv';
4
4
  import '../../context.js';
5
- import '../../emitter-BxVxGBbJ.js';
5
+ import '../../emitter-l0W9gC1A.js';
6
6
  import '../../internals/types.js';
7
7
  import '../../internals/helpers/guards.js';
8
8
  import '../../internals/serializable.js';