@rudderjs/ai 1.17.3 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/README.md +19 -1274
  2. package/dist/budget-orm/index.d.ts +1 -95
  3. package/dist/budget-orm/index.d.ts.map +1 -1
  4. package/dist/budget-orm/index.js +4 -176
  5. package/dist/budget-orm/index.js.map +1 -1
  6. package/dist/chat-mentions.d.ts +1 -58
  7. package/dist/chat-mentions.d.ts.map +1 -1
  8. package/dist/chat-mentions.js +4 -80
  9. package/dist/chat-mentions.js.map +1 -1
  10. package/dist/commands/ai-eval.d.ts +1 -92
  11. package/dist/commands/ai-eval.d.ts.map +1 -1
  12. package/dist/commands/ai-eval.js +4 -377
  13. package/dist/commands/ai-eval.js.map +1 -1
  14. package/dist/commands/make-agent.d.ts +1 -2
  15. package/dist/commands/make-agent.d.ts.map +1 -1
  16. package/dist/commands/make-agent.js +4 -22
  17. package/dist/commands/make-agent.js.map +1 -1
  18. package/dist/computer-use/index.d.ts +1 -52
  19. package/dist/computer-use/index.d.ts.map +1 -1
  20. package/dist/computer-use/index.js +4 -50
  21. package/dist/computer-use/index.js.map +1 -1
  22. package/dist/conversation-orm/index.d.ts +1 -108
  23. package/dist/conversation-orm/index.d.ts.map +1 -1
  24. package/dist/conversation-orm/index.js +4 -214
  25. package/dist/conversation-orm/index.js.map +1 -1
  26. package/dist/doctor.d.ts +1 -1
  27. package/dist/doctor.d.ts.map +1 -1
  28. package/dist/doctor.js +4 -65
  29. package/dist/doctor.js.map +1 -1
  30. package/dist/eval/index.d.ts +1 -270
  31. package/dist/eval/index.d.ts.map +1 -1
  32. package/dist/eval/index.js +4 -509
  33. package/dist/eval/index.js.map +1 -1
  34. package/dist/gateway/index.d.ts +1 -10
  35. package/dist/gateway/index.d.ts.map +1 -1
  36. package/dist/gateway/index.js +4 -10
  37. package/dist/gateway/index.js.map +1 -1
  38. package/dist/index.d.ts +1 -66
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +4 -78
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcp/index.d.ts +1 -15
  43. package/dist/mcp/index.d.ts.map +1 -1
  44. package/dist/mcp/index.js +4 -14
  45. package/dist/mcp/index.js.map +1 -1
  46. package/dist/memory-embedding/index.d.ts +1 -120
  47. package/dist/memory-embedding/index.d.ts.map +1 -1
  48. package/dist/memory-embedding/index.js +4 -228
  49. package/dist/memory-embedding/index.js.map +1 -1
  50. package/dist/memory-orm/index.d.ts +1 -117
  51. package/dist/memory-orm/index.d.ts.map +1 -1
  52. package/dist/memory-orm/index.js +4 -186
  53. package/dist/memory-orm/index.js.map +1 -1
  54. package/dist/node/index.d.ts +1 -2
  55. package/dist/node/index.d.ts.map +1 -1
  56. package/dist/node/index.js +4 -2
  57. package/dist/node/index.js.map +1 -1
  58. package/dist/observers.d.ts +1 -129
  59. package/dist/observers.d.ts.map +1 -1
  60. package/dist/observers.js +4 -39
  61. package/dist/observers.js.map +1 -1
  62. package/dist/react/index.d.ts +1 -15
  63. package/dist/react/index.d.ts.map +1 -1
  64. package/dist/react/index.js +4 -15
  65. package/dist/react/index.js.map +1 -1
  66. package/dist/server/index.d.ts +1 -1
  67. package/dist/server/index.d.ts.map +1 -1
  68. package/dist/server/index.js +4 -1
  69. package/dist/server/index.js.map +1 -1
  70. package/package.json +9 -13
  71. package/boost/guidelines.md +0 -260
  72. package/boost/skills/ai-agents/SKILL.md +0 -240
  73. package/boost/skills/ai-tools/SKILL.md +0 -260
  74. package/dist/agent-run-store.d.ts +0 -161
  75. package/dist/agent-run-store.d.ts.map +0 -1
  76. package/dist/agent-run-store.js +0 -98
  77. package/dist/agent-run-store.js.map +0 -1
  78. package/dist/agent-sse.d.ts +0 -153
  79. package/dist/agent-sse.d.ts.map +0 -1
  80. package/dist/agent-sse.js +0 -282
  81. package/dist/agent-sse.js.map +0 -1
  82. package/dist/agent.d.ts +0 -508
  83. package/dist/agent.d.ts.map +0 -1
  84. package/dist/agent.js +0 -1538
  85. package/dist/agent.js.map +0 -1
  86. package/dist/attachment.d.ts +0 -31
  87. package/dist/attachment.d.ts.map +0 -1
  88. package/dist/attachment.js +0 -89
  89. package/dist/attachment.js.map +0 -1
  90. package/dist/audio.d.ts +0 -45
  91. package/dist/audio.d.ts.map +0 -1
  92. package/dist/audio.js +0 -93
  93. package/dist/audio.js.map +0 -1
  94. package/dist/base64.d.ts +0 -7
  95. package/dist/base64.d.ts.map +0 -1
  96. package/dist/base64.js +0 -39
  97. package/dist/base64.js.map +0 -1
  98. package/dist/budget/pricing.d.ts +0 -124
  99. package/dist/budget/pricing.d.ts.map +0 -1
  100. package/dist/budget/pricing.js +0 -175
  101. package/dist/budget/pricing.js.map +0 -1
  102. package/dist/budget/storage.d.ts +0 -104
  103. package/dist/budget/storage.d.ts.map +0 -1
  104. package/dist/budget/storage.js +0 -0
  105. package/dist/budget/storage.js.map +0 -1
  106. package/dist/budget/with-budget.d.ts +0 -119
  107. package/dist/budget/with-budget.d.ts.map +0 -1
  108. package/dist/budget/with-budget.js +0 -175
  109. package/dist/budget/with-budget.js.map +0 -1
  110. package/dist/cached-embedding.d.ts +0 -14
  111. package/dist/cached-embedding.d.ts.map +0 -1
  112. package/dist/cached-embedding.js +0 -44
  113. package/dist/cached-embedding.js.map +0 -1
  114. package/dist/computer-use/actions.d.ts +0 -214
  115. package/dist/computer-use/actions.d.ts.map +0 -1
  116. package/dist/computer-use/actions.js +0 -48
  117. package/dist/computer-use/actions.js.map +0 -1
  118. package/dist/computer-use/errors.d.ts +0 -57
  119. package/dist/computer-use/errors.d.ts.map +0 -1
  120. package/dist/computer-use/errors.js +0 -76
  121. package/dist/computer-use/errors.js.map +0 -1
  122. package/dist/computer-use/playwright.d.ts +0 -76
  123. package/dist/computer-use/playwright.d.ts.map +0 -1
  124. package/dist/computer-use/playwright.js +0 -270
  125. package/dist/computer-use/playwright.js.map +0 -1
  126. package/dist/computer-use/tool.d.ts +0 -154
  127. package/dist/computer-use/tool.d.ts.map +0 -1
  128. package/dist/computer-use/tool.js +0 -210
  129. package/dist/computer-use/tool.js.map +0 -1
  130. package/dist/continuation-validation.d.ts +0 -85
  131. package/dist/continuation-validation.d.ts.map +0 -1
  132. package/dist/continuation-validation.js +0 -166
  133. package/dist/continuation-validation.js.map +0 -1
  134. package/dist/conversation-persistence.d.ts +0 -46
  135. package/dist/conversation-persistence.d.ts.map +0 -1
  136. package/dist/conversation-persistence.js +0 -176
  137. package/dist/conversation-persistence.js.map +0 -1
  138. package/dist/conversation.d.ts +0 -11
  139. package/dist/conversation.d.ts.map +0 -1
  140. package/dist/conversation.js +0 -55
  141. package/dist/conversation.js.map +0 -1
  142. package/dist/eval/fixtures.d.ts +0 -65
  143. package/dist/eval/fixtures.d.ts.map +0 -1
  144. package/dist/eval/fixtures.js +0 -110
  145. package/dist/eval/fixtures.js.map +0 -1
  146. package/dist/eval/html-reporter.d.ts +0 -25
  147. package/dist/eval/html-reporter.d.ts.map +0 -1
  148. package/dist/eval/html-reporter.js +0 -209
  149. package/dist/eval/html-reporter.js.map +0 -1
  150. package/dist/eval/json-reporter.d.ts +0 -43
  151. package/dist/eval/json-reporter.d.ts.map +0 -1
  152. package/dist/eval/json-reporter.js +0 -40
  153. package/dist/eval/json-reporter.js.map +0 -1
  154. package/dist/facade.d.ts +0 -96
  155. package/dist/facade.d.ts.map +0 -1
  156. package/dist/facade.js +0 -146
  157. package/dist/facade.js.map +0 -1
  158. package/dist/fake.d.ts +0 -201
  159. package/dist/fake.d.ts.map +0 -1
  160. package/dist/fake.js +0 -428
  161. package/dist/fake.js.map +0 -1
  162. package/dist/file-search.d.ts +0 -168
  163. package/dist/file-search.d.ts.map +0 -1
  164. package/dist/file-search.js +0 -158
  165. package/dist/file-search.js.map +0 -1
  166. package/dist/files.d.ts +0 -27
  167. package/dist/files.d.ts.map +0 -1
  168. package/dist/files.js +0 -44
  169. package/dist/files.js.map +0 -1
  170. package/dist/gateway/http-gateway-adapter.d.ts +0 -94
  171. package/dist/gateway/http-gateway-adapter.d.ts.map +0 -1
  172. package/dist/gateway/http-gateway-adapter.js +0 -106
  173. package/dist/gateway/http-gateway-adapter.js.map +0 -1
  174. package/dist/gateway/sse.d.ts +0 -28
  175. package/dist/gateway/sse.d.ts.map +0 -1
  176. package/dist/gateway/sse.js +0 -78
  177. package/dist/gateway/sse.js.map +0 -1
  178. package/dist/handoff.d.ts +0 -95
  179. package/dist/handoff.d.ts.map +0 -1
  180. package/dist/handoff.js +0 -78
  181. package/dist/handoff.js.map +0 -1
  182. package/dist/handoffs-driver.d.ts +0 -58
  183. package/dist/handoffs-driver.d.ts.map +0 -1
  184. package/dist/handoffs-driver.js +0 -103
  185. package/dist/handoffs-driver.js.map +0 -1
  186. package/dist/image.d.ts +0 -40
  187. package/dist/image.d.ts.map +0 -1
  188. package/dist/image.js +0 -109
  189. package/dist/image.js.map +0 -1
  190. package/dist/mcp/client-tools.d.ts +0 -39
  191. package/dist/mcp/client-tools.d.ts.map +0 -1
  192. package/dist/mcp/client-tools.js +0 -147
  193. package/dist/mcp/client-tools.js.map +0 -1
  194. package/dist/mcp/server-from-agent.d.ts +0 -24
  195. package/dist/mcp/server-from-agent.d.ts.map +0 -1
  196. package/dist/mcp/server-from-agent.js +0 -113
  197. package/dist/mcp/server-from-agent.js.map +0 -1
  198. package/dist/mcp/types.d.ts +0 -64
  199. package/dist/mcp/types.d.ts.map +0 -1
  200. package/dist/mcp/types.js +0 -6
  201. package/dist/mcp/types.js.map +0 -1
  202. package/dist/memory-extract.d.ts +0 -60
  203. package/dist/memory-extract.d.ts.map +0 -1
  204. package/dist/memory-extract.js +0 -163
  205. package/dist/memory-extract.js.map +0 -1
  206. package/dist/memory-inject.d.ts +0 -39
  207. package/dist/memory-inject.d.ts.map +0 -1
  208. package/dist/memory-inject.js +0 -135
  209. package/dist/memory-inject.js.map +0 -1
  210. package/dist/memory.d.ts +0 -55
  211. package/dist/memory.d.ts.map +0 -1
  212. package/dist/memory.js +0 -132
  213. package/dist/memory.js.map +0 -1
  214. package/dist/middleware.d.ts +0 -18
  215. package/dist/middleware.d.ts.map +0 -1
  216. package/dist/middleware.js +0 -72
  217. package/dist/middleware.js.map +0 -1
  218. package/dist/node/attachment.d.ts +0 -6
  219. package/dist/node/attachment.d.ts.map +0 -1
  220. package/dist/node/attachment.js +0 -35
  221. package/dist/node/attachment.js.map +0 -1
  222. package/dist/node/transcription.d.ts +0 -4
  223. package/dist/node/transcription.d.ts.map +0 -1
  224. package/dist/node/transcription.js +0 -8
  225. package/dist/node/transcription.js.map +0 -1
  226. package/dist/output.d.ts +0 -22
  227. package/dist/output.d.ts.map +0 -1
  228. package/dist/output.js +0 -60
  229. package/dist/output.js.map +0 -1
  230. package/dist/provider-tools.d.ts +0 -87
  231. package/dist/provider-tools.d.ts.map +0 -1
  232. package/dist/provider-tools.js +0 -189
  233. package/dist/provider-tools.js.map +0 -1
  234. package/dist/providers/anthropic.d.ts +0 -24
  235. package/dist/providers/anthropic.d.ts.map +0 -1
  236. package/dist/providers/anthropic.js +0 -405
  237. package/dist/providers/anthropic.js.map +0 -1
  238. package/dist/providers/azure.d.ts +0 -13
  239. package/dist/providers/azure.d.ts.map +0 -1
  240. package/dist/providers/azure.js +0 -15
  241. package/dist/providers/azure.js.map +0 -1
  242. package/dist/providers/bedrock.d.ts +0 -75
  243. package/dist/providers/bedrock.d.ts.map +0 -1
  244. package/dist/providers/bedrock.js +0 -181
  245. package/dist/providers/bedrock.js.map +0 -1
  246. package/dist/providers/cohere.d.ts +0 -13
  247. package/dist/providers/cohere.d.ts.map +0 -1
  248. package/dist/providers/cohere.js +0 -87
  249. package/dist/providers/cohere.js.map +0 -1
  250. package/dist/providers/deepseek.d.ts +0 -12
  251. package/dist/providers/deepseek.d.ts.map +0 -1
  252. package/dist/providers/deepseek.js +0 -15
  253. package/dist/providers/deepseek.js.map +0 -1
  254. package/dist/providers/elevenlabs.d.ts +0 -98
  255. package/dist/providers/elevenlabs.d.ts.map +0 -1
  256. package/dist/providers/elevenlabs.js +0 -229
  257. package/dist/providers/elevenlabs.js.map +0 -1
  258. package/dist/providers/google-cache-registry.d.ts +0 -132
  259. package/dist/providers/google-cache-registry.d.ts.map +0 -1
  260. package/dist/providers/google-cache-registry.js +0 -209
  261. package/dist/providers/google-cache-registry.js.map +0 -1
  262. package/dist/providers/google.d.ts +0 -38
  263. package/dist/providers/google.d.ts.map +0 -1
  264. package/dist/providers/google.js +0 -903
  265. package/dist/providers/google.js.map +0 -1
  266. package/dist/providers/groq.d.ts +0 -12
  267. package/dist/providers/groq.d.ts.map +0 -1
  268. package/dist/providers/groq.js +0 -15
  269. package/dist/providers/groq.js.map +0 -1
  270. package/dist/providers/jina.d.ts +0 -13
  271. package/dist/providers/jina.d.ts.map +0 -1
  272. package/dist/providers/jina.js +0 -90
  273. package/dist/providers/jina.js.map +0 -1
  274. package/dist/providers/mistral.d.ts +0 -13
  275. package/dist/providers/mistral.d.ts.map +0 -1
  276. package/dist/providers/mistral.js +0 -46
  277. package/dist/providers/mistral.js.map +0 -1
  278. package/dist/providers/ollama.d.ts +0 -11
  279. package/dist/providers/ollama.d.ts.map +0 -1
  280. package/dist/providers/ollama.js +0 -15
  281. package/dist/providers/ollama.js.map +0 -1
  282. package/dist/providers/openai.d.ts +0 -79
  283. package/dist/providers/openai.d.ts.map +0 -1
  284. package/dist/providers/openai.js +0 -792
  285. package/dist/providers/openai.js.map +0 -1
  286. package/dist/providers/openrouter.d.ts +0 -43
  287. package/dist/providers/openrouter.d.ts.map +0 -1
  288. package/dist/providers/openrouter.js +0 -21
  289. package/dist/providers/openrouter.js.map +0 -1
  290. package/dist/providers/voyage.d.ts +0 -91
  291. package/dist/providers/voyage.d.ts.map +0 -1
  292. package/dist/providers/voyage.js +0 -166
  293. package/dist/providers/voyage.js.map +0 -1
  294. package/dist/providers/xai.d.ts +0 -12
  295. package/dist/providers/xai.d.ts.map +0 -1
  296. package/dist/providers/xai.js +0 -15
  297. package/dist/providers/xai.js.map +0 -1
  298. package/dist/queue-job.d.ts +0 -100
  299. package/dist/queue-job.d.ts.map +0 -1
  300. package/dist/queue-job.js +0 -185
  301. package/dist/queue-job.js.map +0 -1
  302. package/dist/react/agent-run.d.ts +0 -111
  303. package/dist/react/agent-run.d.ts.map +0 -1
  304. package/dist/react/agent-run.js +0 -107
  305. package/dist/react/agent-run.js.map +0 -1
  306. package/dist/react/useAgentRun.d.ts +0 -68
  307. package/dist/react/useAgentRun.d.ts.map +0 -1
  308. package/dist/react/useAgentRun.js +0 -125
  309. package/dist/react/useAgentRun.js.map +0 -1
  310. package/dist/registry.d.ts +0 -45
  311. package/dist/registry.d.ts.map +0 -1
  312. package/dist/registry.js +0 -131
  313. package/dist/registry.js.map +0 -1
  314. package/dist/rerank.d.ts +0 -20
  315. package/dist/rerank.d.ts.map +0 -1
  316. package/dist/rerank.js +0 -40
  317. package/dist/rerank.js.map +0 -1
  318. package/dist/resume-approval.d.ts +0 -30
  319. package/dist/resume-approval.d.ts.map +0 -1
  320. package/dist/resume-approval.js +0 -147
  321. package/dist/resume-approval.js.map +0 -1
  322. package/dist/sanitize-conversation.d.ts +0 -43
  323. package/dist/sanitize-conversation.d.ts.map +0 -1
  324. package/dist/sanitize-conversation.js +0 -85
  325. package/dist/sanitize-conversation.js.map +0 -1
  326. package/dist/scoped-tool.d.ts +0 -98
  327. package/dist/scoped-tool.d.ts.map +0 -1
  328. package/dist/scoped-tool.js +0 -174
  329. package/dist/scoped-tool.js.map +0 -1
  330. package/dist/server/provider.d.ts +0 -22
  331. package/dist/server/provider.d.ts.map +0 -1
  332. package/dist/server/provider.js +0 -194
  333. package/dist/server/provider.js.map +0 -1
  334. package/dist/similarity-search.d.ts +0 -163
  335. package/dist/similarity-search.d.ts.map +0 -1
  336. package/dist/similarity-search.js +0 -147
  337. package/dist/similarity-search.js.map +0 -1
  338. package/dist/sub-agent-run-store.d.ts +0 -157
  339. package/dist/sub-agent-run-store.d.ts.map +0 -1
  340. package/dist/sub-agent-run-store.js +0 -87
  341. package/dist/sub-agent-run-store.js.map +0 -1
  342. package/dist/tool-execution.d.ts +0 -16
  343. package/dist/tool-execution.d.ts.map +0 -1
  344. package/dist/tool-execution.js +0 -498
  345. package/dist/tool-execution.js.map +0 -1
  346. package/dist/tool-helpers.d.ts +0 -77
  347. package/dist/tool-helpers.d.ts.map +0 -1
  348. package/dist/tool-helpers.js +0 -117
  349. package/dist/tool-helpers.js.map +0 -1
  350. package/dist/tool.d.ts +0 -216
  351. package/dist/tool.d.ts.map +0 -1
  352. package/dist/tool.js +0 -175
  353. package/dist/tool.js.map +0 -1
  354. package/dist/transcription.d.ts +0 -42
  355. package/dist/transcription.d.ts.map +0 -1
  356. package/dist/transcription.js +0 -77
  357. package/dist/transcription.js.map +0 -1
  358. package/dist/types.d.ts +0 -1020
  359. package/dist/types.d.ts.map +0 -1
  360. package/dist/types.js +0 -2
  361. package/dist/types.js.map +0 -1
  362. package/dist/util/hash.d.ts +0 -11
  363. package/dist/util/hash.d.ts.map +0 -1
  364. package/dist/util/hash.js +0 -23
  365. package/dist/util/hash.js.map +0 -1
  366. package/dist/vector-stores/index.d.ts +0 -96
  367. package/dist/vector-stores/index.d.ts.map +0 -1
  368. package/dist/vector-stores/index.js +0 -153
  369. package/dist/vector-stores/index.js.map +0 -1
  370. package/dist/vercel-protocol.d.ts +0 -18
  371. package/dist/vercel-protocol.d.ts.map +0 -1
  372. package/dist/vercel-protocol.js +0 -75
  373. package/dist/vercel-protocol.js.map +0 -1
  374. package/dist/zod-to-json-schema.d.ts +0 -16
  375. package/dist/zod-to-json-schema.d.ts.map +0 -1
  376. package/dist/zod-to-json-schema.js +0 -17
  377. package/dist/zod-to-json-schema.js.map +0 -1
package/dist/handoff.d.ts DELETED
@@ -1,95 +0,0 @@
1
- import { z } from 'zod';
2
- import type { ToolDefinitionOptions, ToolDefinitionSchema } from './types.js';
3
- import type { Agent } from './agent.js';
4
- /**
5
- * Symbol-tagged marker identifying a handoff tool. Looked up via
6
- * `Symbol.for(...)` so cross-bundle / cross-realm checks succeed even when
7
- * `@rudderjs/ai` is loaded twice (rare, but possible in monorepo + linked
8
- * setups).
9
- */
10
- export declare const HANDOFF_MARKER: unique symbol;
11
- /**
12
- * Internal spec attached to a handoff tool. The agent loop reads this when
13
- * it sees a tool call that lands on a `HandoffTool` — it does NOT execute
14
- * the tool's body (there isn't one). Instead it short-circuits the loop,
15
- * synthesizes a tool result, and pivots control to a new instance of
16
- * `AgentClass` for the rest of the conversation.
17
- */
18
- export interface HandoffSpec {
19
- readonly AgentClass: new (...args: unknown[]) => Agent;
20
- readonly name: string;
21
- readonly description: string;
22
- readonly inputSchema: z.ZodType;
23
- }
24
- /**
25
- * A tool returned by {@link handoff}. The loop recognizes it via the
26
- * `HANDOFF_MARKER` symbol property and treats it as a control-transfer,
27
- * not a normal server tool. Its `execute` is intentionally absent.
28
- */
29
- export interface HandoffTool {
30
- readonly [HANDOFF_MARKER]: true;
31
- readonly __handoffSpec: HandoffSpec;
32
- readonly definition: ToolDefinitionOptions;
33
- readonly execute?: undefined;
34
- toSchema(): ToolDefinitionSchema;
35
- }
36
- /**
37
- * Options for {@link handoff}. All fields optional — by default, a handoff
38
- * tool is named `handoffTo${AgentClass.name}` and accepts a single
39
- * `message: string` argument that becomes the transition prompt seen by
40
- * the new agent as its first user message.
41
- */
42
- export interface HandoffOptions<TInput extends z.ZodType = z.ZodType> {
43
- /** Override the tool name. Default: `handoffTo${AgentClass.name}`. */
44
- name?: string;
45
- /**
46
- * Trigger guidance — a short phrase appended to the description so the
47
- * model knows when to pick this handoff. Example: `'pricing or sales'`
48
- * → "Hand off the conversation to SalesAgent for pricing or sales."
49
- */
50
- when?: string;
51
- /** Override the entire description. If set, takes precedence over `when`. */
52
- description?: string;
53
- /**
54
- * Zod schema for the handoff payload. Defaults to
55
- * `z.object({ message: z.string() })` — the parent's model writes a
56
- * transition prompt that becomes the child's first user message.
57
- *
58
- * Custom schemas are supported but the loop reads `args.message` (string)
59
- * as the transition prompt. Schemas without a `message` string field will
60
- * pass an empty transition message; the carried conversation history is
61
- * still surfaced to the child.
62
- */
63
- inputSchema?: TInput;
64
- }
65
- /**
66
- * Define a handoff tool — a control-transfer tool the parent agent's model
67
- * can call to pivot the conversation to another agent. After the model
68
- * calls it, the parent's loop ends and the child agent runs from the same
69
- * message history with its own instructions, tools, and model.
70
- *
71
- * Distinct from {@link Agent.asTool} (which is call-and-return: the parent
72
- * resumes after the child finishes and incorporates the child's text as a
73
- * tool result). Handoffs do not return — the child owns the rest of the
74
- * conversation.
75
- *
76
- * @example
77
- * ```ts
78
- * class TriageAgent extends Agent {
79
- * tools() {
80
- * return [
81
- * handoff(SalesAgent, { when: 'pricing or sales questions' }),
82
- * handoff(SupportAgent, { when: 'bug reports or technical issues' }),
83
- * ]
84
- * }
85
- * }
86
- * ```
87
- */
88
- export declare function handoff(AgentClass: new (...args: never[]) => Agent, opts?: HandoffOptions): HandoffTool;
89
- /**
90
- * Structural typeguard. Used by the agent loop to detect handoff tools
91
- * without coupling to a class hierarchy — handoff tools are plain objects
92
- * tagged with the {@link HANDOFF_MARKER} symbol.
93
- */
94
- export declare function isHandoffTool(t: unknown): t is HandoffTool;
95
- //# sourceMappingURL=handoff.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,MAA0C,CAAA;AAE9E;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,KAAK,CAAA;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAA;CAChC;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,CAAA;IAC/B,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAA;IACnC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAA;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAA;IAC5B,QAAQ,IAAI,oBAAoB,CAAA;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;IAClE,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;;OASG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAQD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,EAC3C,IAAI,CAAC,EAAE,cAAc,GACpB,WAAW,CA0Bb;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAI1D"}
package/dist/handoff.js DELETED
@@ -1,78 +0,0 @@
1
- import { z } from 'zod';
2
- import { zodToJsonSchema } from './zod-to-json-schema.js';
3
- /**
4
- * Symbol-tagged marker identifying a handoff tool. Looked up via
5
- * `Symbol.for(...)` so cross-bundle / cross-realm checks succeed even when
6
- * `@rudderjs/ai` is loaded twice (rare, but possible in monorepo + linked
7
- * setups).
8
- */
9
- export const HANDOFF_MARKER = Symbol.for('rudderjs.ai.handoff');
10
- const DEFAULT_INPUT_SCHEMA = z.object({
11
- message: z
12
- .string()
13
- .describe('A short user-style prompt for the next agent describing what to do next.'),
14
- });
15
- /**
16
- * Define a handoff tool — a control-transfer tool the parent agent's model
17
- * can call to pivot the conversation to another agent. After the model
18
- * calls it, the parent's loop ends and the child agent runs from the same
19
- * message history with its own instructions, tools, and model.
20
- *
21
- * Distinct from {@link Agent.asTool} (which is call-and-return: the parent
22
- * resumes after the child finishes and incorporates the child's text as a
23
- * tool result). Handoffs do not return — the child owns the rest of the
24
- * conversation.
25
- *
26
- * @example
27
- * ```ts
28
- * class TriageAgent extends Agent {
29
- * tools() {
30
- * return [
31
- * handoff(SalesAgent, { when: 'pricing or sales questions' }),
32
- * handoff(SupportAgent, { when: 'bug reports or technical issues' }),
33
- * ]
34
- * }
35
- * }
36
- * ```
37
- */
38
- export function handoff(AgentClass, opts) {
39
- const name = opts?.name ?? `handoffTo${AgentClass.name}`;
40
- const description = opts?.description ?? buildDefaultDescription(AgentClass.name, opts?.when);
41
- const inputSchema = (opts?.inputSchema ?? DEFAULT_INPUT_SCHEMA);
42
- const spec = {
43
- AgentClass: AgentClass,
44
- name,
45
- description,
46
- inputSchema,
47
- };
48
- const definition = { name, description, inputSchema };
49
- const tool = {
50
- [HANDOFF_MARKER]: true,
51
- __handoffSpec: spec,
52
- definition,
53
- toSchema() {
54
- return {
55
- name,
56
- description,
57
- parameters: zodToJsonSchema(inputSchema, 'input'),
58
- };
59
- },
60
- };
61
- return tool;
62
- }
63
- function buildDefaultDescription(agentName, when) {
64
- const base = `Hand off the conversation to ${agentName}`;
65
- return when ? `${base} for ${when}.` : `${base}.`;
66
- }
67
- /**
68
- * Structural typeguard. Used by the agent loop to detect handoff tools
69
- * without coupling to a class hierarchy — handoff tools are plain objects
70
- * tagged with the {@link HANDOFF_MARKER} symbol.
71
- */
72
- export function isHandoffTool(t) {
73
- if (t === null || typeof t !== 'object')
74
- return false;
75
- const marker = t[HANDOFF_MARKER];
76
- return marker === true;
77
- }
78
- //# sourceMappingURL=handoff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../src/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAIzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAkB,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;AA2D9E,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,0EAA0E,CAAC;CACxF,CAAC,CAAA;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,OAAO,CACrB,UAA2C,EAC3C,IAAqB;IAErB,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,YAAY,UAAU,CAAC,IAAI,EAAE,CAAA;IACxD,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,uBAAuB,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;IAC7F,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,oBAAoB,CAAc,CAAA;IAE5E,MAAM,IAAI,GAAgB;QACxB,UAAU,EAAE,UAA0D;QACtE,IAAI;QACJ,WAAW;QACX,WAAW;KACZ,CAAA;IACD,MAAM,UAAU,GAA0B,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA;IAE5E,MAAM,IAAI,GAAgB;QACxB,CAAC,cAAc,CAAC,EAAE,IAAI;QACtB,aAAa,EAAE,IAAI;QACnB,UAAU;QACV,QAAQ;YACN,OAAO;gBACL,IAAI;gBACJ,WAAW;gBACX,UAAU,EAAE,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC;aAClD,CAAA;QACH,CAAC;KACF,CAAA;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAiB,EAAE,IAAa;IAC/D,MAAM,IAAI,GAAG,gCAAgC,SAAS,EAAE,CAAA;IACxD,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAA;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,MAAM,GAAI,CAAsC,CAAC,cAAc,CAAC,CAAA;IACtE,OAAO,MAAM,KAAK,IAAI,CAAA;AACxB,CAAC"}
@@ -1,58 +0,0 @@
1
- import type { Agent } from './agent.js';
2
- import type { HandoffSpec } from './handoff.js';
3
- import type { AgentPromptOptions, AgentResponse, AgentStep, AiMessage, TokenUsage } from './types.js';
4
- /**
5
- * Hard ceiling for the number of agent-to-agent handoffs in a single
6
- * `prompt()` / `stream()` call. Most workflows hop once or twice (triage →
7
- * specialist). Anything beyond this almost certainly means the agents are
8
- * cycling — surfacing a clear error beats silently looping until token
9
- * budgets explode.
10
- */
11
- export declare const MAX_HANDOFFS = 5;
12
- /**
13
- * Internal record of a pending handoff carried from the loop to the
14
- * handoff-aware wrapper. Not part of the public surface.
15
- */
16
- export interface PendingHandoff {
17
- spec: HandoffSpec;
18
- transitionMessage: string;
19
- parentToolCallId: string;
20
- }
21
- /**
22
- * Signature of `runAgentLoopOnce` from `agent.ts`, injected so this module
23
- * doesn't import its caller and create a runtime cycle.
24
- */
25
- export type RunOnce = (a: Agent, input: string, options?: AgentPromptOptions) => Promise<AgentResponse & {
26
- _pendingHandoff?: PendingHandoff;
27
- _carriedMessages?: AiMessage[];
28
- }>;
29
- /**
30
- * Iteratively drive pending handoffs, carrying steps + usage forward.
31
- * Used by the non-streaming path. (Streaming has its own iterative driver
32
- * inline so chunks can flow as each hop's loop runs.)
33
- */
34
- export declare function driveHandoffs(rootName: string, rootResult: AgentResponse & {
35
- _pendingHandoff?: PendingHandoff;
36
- _carriedMessages?: AiMessage[];
37
- }, pending: PendingHandoff, carriedMessages: AiMessage[], origOptions: AgentPromptOptions | undefined, startHopCount: number, runOnce: RunOnce): Promise<AgentResponse>;
38
- /** Merge the terminal hop's response with carried steps / usage / path. */
39
- export declare function mergeFinalHandoff(terminal: AgentResponse, mergedSteps: AgentStep[], mergedUsage: TokenUsage, pathPrefix: string[], terminalName: string): AgentResponse;
40
- /**
41
- * Build the {@link AgentPromptOptions} for a child agent invoked via
42
- * handoff. The parent's carried message log replaces the child's input
43
- * (so the child sees the full conversation up to the handoff point) but
44
- * the child still prepends its own `instructions()` as the system message
45
- * during initialization, so we drop the parent's leading system message
46
- * to avoid double-prefixing.
47
- *
48
- * Per-call options that make sense to carry across (signal, attachments,
49
- * tool/middleware overrides) are preserved; `messages` and `history` are
50
- * deliberately overridden.
51
- */
52
- export declare function buildHandoffChildOptions(parentOptions: AgentPromptOptions | undefined, carriedMessages: AiMessage[]): AgentPromptOptions;
53
- /** Strip the internal `_pendingHandoff` / `_carriedMessages` fields before surfacing the response to public callers. */
54
- export declare function stripInternal(r: AgentResponse & {
55
- _pendingHandoff?: PendingHandoff;
56
- _carriedMessages?: AiMessage[];
57
- }): AgentResponse;
58
- //# sourceMappingURL=handoffs-driver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handoffs-driver.d.ts","sourceRoot":"","sources":["../src/handoffs-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAErG;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,IAAI,CAAA;AAE7B;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAe,WAAW,CAAA;IAC9B,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAG,MAAM,CAAA;CAC1B;AAED;;;GAGG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAC1E,OAAO,CAAC,aAAa,GAAG;IAAE,eAAe,CAAC,EAAE,cAAc,CAAC;IAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,CAAC,CAAA;AAQ/F;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAS,MAAM,EACvB,UAAU,EAAO,aAAa,GAAG;IAAE,eAAe,CAAC,EAAE,cAAc,CAAC;IAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,EACrG,OAAO,EAAU,cAAc,EAC/B,eAAe,EAAE,SAAS,EAAE,EAC5B,WAAW,EAAM,kBAAkB,GAAG,SAAS,EAC/C,aAAa,EAAI,MAAM,EACvB,OAAO,EAAU,OAAO,GACvB,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAM,aAAa,EAC3B,WAAW,EAAG,SAAS,EAAE,EACzB,WAAW,EAAG,UAAU,EACxB,UAAU,EAAI,MAAM,EAAE,EACtB,YAAY,EAAE,MAAM,GACnB,aAAa,CAOf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAI,kBAAkB,GAAG,SAAS,EAC/C,eAAe,EAAE,SAAS,EAAE,GAC3B,kBAAkB,CAQpB;AAED,wHAAwH;AACxH,wBAAgB,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG;IAAE,eAAe,CAAC,EAAE,cAAc,CAAC;IAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,aAAa,CAapI"}
@@ -1,103 +0,0 @@
1
- /**
2
- * Hard ceiling for the number of agent-to-agent handoffs in a single
3
- * `prompt()` / `stream()` call. Most workflows hop once or twice (triage →
4
- * specialist). Anything beyond this almost certainly means the agents are
5
- * cycling — surfacing a clear error beats silently looping until token
6
- * budgets explode.
7
- */
8
- export const MAX_HANDOFFS = 5;
9
- function addUsage(total, step) {
10
- total.promptTokens += step.promptTokens;
11
- total.completionTokens += step.completionTokens;
12
- total.totalTokens += step.totalTokens;
13
- }
14
- /**
15
- * Iteratively drive pending handoffs, carrying steps + usage forward.
16
- * Used by the non-streaming path. (Streaming has its own iterative driver
17
- * inline so chunks can flow as each hop's loop runs.)
18
- */
19
- export async function driveHandoffs(rootName, rootResult, pending, carriedMessages, origOptions, startHopCount, runOnce) {
20
- const mergedSteps = [...rootResult.steps];
21
- const mergedUsage = { promptTokens: 0, completionTokens: 0, totalTokens: 0 };
22
- addUsage(mergedUsage, rootResult.usage);
23
- const handoffPath = [rootName];
24
- let currentPending = pending;
25
- let currentCarried = carriedMessages;
26
- let hopCount = startHopCount;
27
- for (;;) {
28
- if (hopCount >= MAX_HANDOFFS) {
29
- throw new Error(`[Rudder AI] Exceeded max handoffs (${MAX_HANDOFFS}). Likely a cycle between agents.`);
30
- }
31
- const ChildClass = currentPending.spec.AgentClass;
32
- handoffPath.push(ChildClass.name);
33
- const child = new ChildClass();
34
- const childOpts = buildHandoffChildOptions(origOptions, currentCarried);
35
- const childOnce = await runOnce(child, currentPending.transitionMessage, childOpts);
36
- mergedSteps.push(...childOnce.steps);
37
- addUsage(mergedUsage, childOnce.usage);
38
- if (childOnce._pendingHandoff) {
39
- currentPending = childOnce._pendingHandoff;
40
- currentCarried = childOnce._carriedMessages ?? [];
41
- hopCount++;
42
- continue;
43
- }
44
- return {
45
- ...stripInternal(childOnce),
46
- steps: mergedSteps,
47
- usage: mergedUsage,
48
- handoffPath,
49
- };
50
- }
51
- }
52
- /** Merge the terminal hop's response with carried steps / usage / path. */
53
- export function mergeFinalHandoff(terminal, mergedSteps, mergedUsage, pathPrefix, terminalName) {
54
- return {
55
- ...terminal,
56
- steps: mergedSteps,
57
- usage: mergedUsage,
58
- handoffPath: [...pathPrefix, terminalName],
59
- };
60
- }
61
- /**
62
- * Build the {@link AgentPromptOptions} for a child agent invoked via
63
- * handoff. The parent's carried message log replaces the child's input
64
- * (so the child sees the full conversation up to the handoff point) but
65
- * the child still prepends its own `instructions()` as the system message
66
- * during initialization, so we drop the parent's leading system message
67
- * to avoid double-prefixing.
68
- *
69
- * Per-call options that make sense to carry across (signal, attachments,
70
- * tool/middleware overrides) are preserved; `messages` and `history` are
71
- * deliberately overridden.
72
- */
73
- export function buildHandoffChildOptions(parentOptions, carriedMessages) {
74
- const stripped = carriedMessages.length > 0 && carriedMessages[0]?.role === 'system'
75
- ? carriedMessages.slice(1)
76
- : carriedMessages;
77
- return {
78
- ...(parentOptions ?? {}),
79
- messages: stripped,
80
- };
81
- }
82
- /** Strip the internal `_pendingHandoff` / `_carriedMessages` fields before surfacing the response to public callers. */
83
- export function stripInternal(r) {
84
- const out = {
85
- text: r.text,
86
- steps: r.steps,
87
- usage: r.usage,
88
- };
89
- if (r.conversationId !== undefined)
90
- out.conversationId = r.conversationId;
91
- if (r.finishReason !== undefined)
92
- out.finishReason = r.finishReason;
93
- if (r.pendingClientToolCalls !== undefined)
94
- out.pendingClientToolCalls = r.pendingClientToolCalls;
95
- if (r.pendingApprovalToolCall !== undefined)
96
- out.pendingApprovalToolCall = r.pendingApprovalToolCall;
97
- if (r.resumedToolMessages !== undefined)
98
- out.resumedToolMessages = r.resumedToolMessages;
99
- if (r.handoffPath !== undefined)
100
- out.handoffPath = r.handoffPath;
101
- return out;
102
- }
103
- //# sourceMappingURL=handoffs-driver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handoffs-driver.js","sourceRoot":"","sources":["../src/handoffs-driver.ts"],"names":[],"mappings":"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"}
package/dist/image.d.ts DELETED
@@ -1,40 +0,0 @@
1
- import type { ImageGenerationResult } from './types.js';
2
- /**
3
- * Fluent image generation facade.
4
- *
5
- * @example
6
- * const result = await ImageGenerator.of('A sunset over mountains').size('landscape').generate()
7
- * const path = await ImageGenerator.of('A logo').model('openai/dall-e-3').store('images/logo.png')
8
- *
9
- * @example Failover across providers
10
- * const result = await ImageGenerator.of('A donut')
11
- * .model('openai/dall-e-3')
12
- * .failover('google/imagen-3', 'azure/dall-e-3')
13
- * .generate()
14
- */
15
- export declare class ImageGenerator {
16
- private readonly _prompt;
17
- private _model;
18
- private _size;
19
- private _quality;
20
- private _style;
21
- private _n;
22
- private _failover;
23
- private constructor();
24
- static of(prompt: string): ImageGenerator;
25
- model(model: string): this;
26
- /**
27
- * Provider/model strings to try if the primary fails.
28
- * Tried in order; the first to succeed wins. Swallows individual errors,
29
- * surfaces only the last one if every candidate fails.
30
- */
31
- failover(...models: string[]): this;
32
- size(size: string): this;
33
- quality(quality: 'standard' | 'hd'): this;
34
- style(style: 'natural' | 'vivid'): this;
35
- count(n: number): this;
36
- generate(): Promise<ImageGenerationResult>;
37
- /** Generate and store the first image to storage. Requires @rudderjs/storage. */
38
- store(path: string): Promise<string>;
39
- }
40
- //# sourceMappingURL=image.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA0B,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAE/E;;;;;;;;;;;;GAYG;AACH,qBAAa,cAAc;IAQL,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP5C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,SAAS,CAAe;IAEhC,OAAO;IAEP,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc;IAIzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B;;;;OAIG;IACH,QAAQ,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxB,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI;IAKzC,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,GAAG,IAAI;IAKvC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKhB,QAAQ,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAyBhD,iFAAiF;IAC3E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAwB3C"}
package/dist/image.js DELETED
@@ -1,109 +0,0 @@
1
- import { AiRegistry, tryWithFailover } from './registry.js';
2
- import { fromBase64 } from './base64.js';
3
- /**
4
- * Fluent image generation facade.
5
- *
6
- * @example
7
- * const result = await ImageGenerator.of('A sunset over mountains').size('landscape').generate()
8
- * const path = await ImageGenerator.of('A logo').model('openai/dall-e-3').store('images/logo.png')
9
- *
10
- * @example Failover across providers
11
- * const result = await ImageGenerator.of('A donut')
12
- * .model('openai/dall-e-3')
13
- * .failover('google/imagen-3', 'azure/dall-e-3')
14
- * .generate()
15
- */
16
- export class ImageGenerator {
17
- _prompt;
18
- _model;
19
- _size;
20
- _quality;
21
- _style;
22
- _n;
23
- _failover = [];
24
- constructor(_prompt) {
25
- this._prompt = _prompt;
26
- }
27
- static of(prompt) {
28
- return new ImageGenerator(prompt);
29
- }
30
- model(model) {
31
- this._model = model;
32
- return this;
33
- }
34
- /**
35
- * Provider/model strings to try if the primary fails.
36
- * Tried in order; the first to succeed wins. Swallows individual errors,
37
- * surfaces only the last one if every candidate fails.
38
- */
39
- failover(...models) {
40
- this._failover = models;
41
- return this;
42
- }
43
- size(size) {
44
- this._size = size;
45
- return this;
46
- }
47
- quality(quality) {
48
- this._quality = quality;
49
- return this;
50
- }
51
- style(style) {
52
- this._style = style;
53
- return this;
54
- }
55
- count(n) {
56
- this._n = n;
57
- return this;
58
- }
59
- async generate() {
60
- const primary = this._model ?? AiRegistry.getDefault();
61
- return tryWithFailover(primary, this._failover, async (modelStr) => {
62
- const [providerName, modelName] = AiRegistry.parseModelString(modelStr);
63
- const factory = AiRegistry.getFactory(providerName);
64
- if (!factory.createImage) {
65
- throw new Error(`[Rudder AI] Provider "${providerName}" does not support image generation.`);
66
- }
67
- const adapter = factory.createImage(modelName);
68
- const options = {
69
- prompt: this._prompt,
70
- model: modelStr,
71
- };
72
- if (this._size !== undefined)
73
- options.size = this._size;
74
- if (this._quality !== undefined)
75
- options.quality = this._quality;
76
- if (this._style !== undefined)
77
- options.style = this._style;
78
- if (this._n !== undefined)
79
- options.n = this._n;
80
- return adapter.generate(options);
81
- });
82
- }
83
- /** Generate and store the first image to storage. Requires @rudderjs/storage. */
84
- async store(path) {
85
- const result = await this.generate();
86
- const image = result.images[0];
87
- if (!image)
88
- throw new Error('[Rudder AI] No image generated.');
89
- try {
90
- // eslint-disable-next-line @typescript-eslint/no-require-imports
91
- const mod = await import(/* @vite-ignore */ '@rudderjs/storage');
92
- const Storage = mod.Storage;
93
- if (image.base64) {
94
- const bytes = fromBase64(image.base64);
95
- await Storage.put(path, bytes);
96
- }
97
- else if (image.url) {
98
- const response = await fetch(image.url);
99
- const bytes = new Uint8Array(await response.arrayBuffer());
100
- await Storage.put(path, bytes);
101
- }
102
- return path;
103
- }
104
- catch {
105
- throw new Error('[Rudder AI] Image storage requires @rudderjs/storage to be installed.');
106
- }
107
- }
108
- }
109
- //# sourceMappingURL=image.js.map
package/dist/image.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"image.js","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import type { Tool } from '../types.js';
2
- import type { McpClientTransport, McpClientToolsOptions } from './types.js';
3
- /**
4
- * The result of `mcpClientTools()` — an array of `Tool`s that also carries a
5
- * `close()` method when this call owns the underlying client lifecycle.
6
- *
7
- * Spreading this into `tools()` works because the extra method is non-enumerable
8
- * (and only present when relevant) — the agent loop iterates with for-of which
9
- * skips it.
10
- */
11
- export interface McpClientToolsHandle extends ReadonlyArray<Tool> {
12
- /** Disconnect the underlying MCP client. No-op when an external client was passed in. */
13
- close?: () => Promise<void>;
14
- }
15
- /**
16
- * Connect to a remote MCP server and surface its tools as Rudder `Tool`s.
17
- *
18
- * Three transport shapes are accepted:
19
- *
20
- * ```ts
21
- * // (a) HTTP — string URL or URL instance
22
- * const t = await mcpClientTools('https://api.example.com/mcp')
23
- *
24
- * // (b) Local stdio subprocess
25
- * const t = await mcpClientTools({ command: 'npx', args: ['some-mcp-server'] })
26
- *
27
- * // (c) Already-connected SDK Client (caller owns lifecycle)
28
- * const t = await mcpClientTools(myClient)
29
- * ```
30
- *
31
- * The returned array exposes a `close()` method when this call owns the client
32
- * (cases a + b). Pass it back so the subprocess / HTTP session can shut down
33
- * cleanly when your agent is done.
34
- *
35
- * The remote server's `inputSchema` (JSON Schema) ships through to providers
36
- * via `ToolDefinitionOptions.jsonSchema` — no zod conversion in either direction.
37
- */
38
- export declare function mcpClientTools(transport: McpClientTransport, opts?: McpClientToolsOptions): Promise<McpClientToolsHandle>;
39
- //# sourceMappingURL=client-tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/client-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EACV,kBAAkB,EAAE,qBAAqB,EAC1C,MAAM,YAAY,CAAA;AAInB;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAqB,SAAQ,aAAa,CAAC,IAAI,CAAC;IAC/D,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,kBAAkB,EAC7B,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CA4B/B"}