@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
@@ -1,98 +0,0 @@
1
- import { z } from 'zod';
2
- import { ServerToolBuilder } from './tool.js';
3
- import type { ToolCallContext, ToolNeedsApproval } from './types.js';
4
- /**
5
- * One capability branch of a scoped tool: a named sub-tool with its own
6
- * input shape + handler. Authored either inline in {@link scopedTool}'s
7
- * `capabilities` map or via the {@link capability} helper (which preserves
8
- * per-branch input inference for the handler signature).
9
- */
10
- export interface ScopedCapability<TInput extends z.ZodType = z.ZodType, TOutput = unknown, TUpdate = unknown> {
11
- /** Optional per-capability description, surfaced in the discriminator enum note. */
12
- description?: string;
13
- /** This branch's input schema. Validated in code before the handler runs. */
14
- input: TInput;
15
- /**
16
- * Branch handler. May be a plain async function (single return value) or
17
- * an `async function*` (yields `tool-update` chunks, returns the result) —
18
- * the same dual protocol `ToolBuilder.server` accepts.
19
- */
20
- handler: (input: z.infer<TInput>, ctx?: ToolCallContext) => TOutput | Promise<TOutput> | AsyncGenerator<TUpdate, TOutput, void>;
21
- }
22
- /**
23
- * Identity helper that infers a capability's input type at the definition
24
- * site, so its `handler` parameter is typed without an explicit annotation.
25
- *
26
- * @example
27
- * const web = capability({
28
- * input: z.object({ query: z.string() }),
29
- * handler: async ({ query }) => search(query), // `query` is `string`
30
- * })
31
- */
32
- export declare function capability<TInput extends z.ZodType, TOutput, TUpdate = unknown>(spec: ScopedCapability<TInput, TOutput, TUpdate>): ScopedCapability<TInput, TOutput, TUpdate>;
33
- export interface ScopedToolOptions {
34
- name: string;
35
- description: string;
36
- /** Discriminator field name added to the flat schema. Default `'sub_tool'`. */
37
- discriminator?: string;
38
- /** Named capability branches. Keys become the discriminator enum values. */
39
- capabilities: Record<string, ScopedCapability>;
40
- /**
41
- * Runtime allowlist — restrict callable capabilities to a subset of
42
- * `capabilities` keys (e.g. per-plan gating). Both the discriminator enum
43
- * and the runtime dispatch honor it. Defaults to every capability key.
44
- * Entries not present in `capabilities` throw at build time.
45
- */
46
- allow?: string[];
47
- /** Forwarded to the generated tool definition. */
48
- needsApproval?: ToolNeedsApproval | undefined;
49
- }
50
- /**
51
- * The shared flattening plan, computed once so the JSON-Schema render and the
52
- * runtime dispatch/validation cannot drift. Exported for adapters and tests.
53
- */
54
- export interface FlatPlan {
55
- discriminator: string;
56
- /** Allowed discriminator values, in declaration order. */
57
- values: string[];
58
- /** Merged JSON-Schema properties (discriminator included). */
59
- properties: Record<string, unknown>;
60
- /** Top-level required = discriminator + fields required by EVERY branch. */
61
- required: string[];
62
- /** Per-capability required field names, for in-code validation before dispatch. */
63
- requiredByCapability: Record<string, string[]>;
64
- /** For each non-discriminator field, which capabilities reference it. */
65
- owners: Record<string, string[]>;
66
- }
67
- /** Error thrown by a scoped tool's dispatch before any handler runs. */
68
- export declare class ScopedToolError extends Error {
69
- readonly name = "ScopedToolError";
70
- constructor(message: string);
71
- }
72
- /**
73
- * Collapse N capability branches into one flat function-call plan with a
74
- * discriminator enum. Function-calling APIs do not reliably honor a top-level
75
- * `oneOf`, so a discriminated union must flatten to a single object schema:
76
- * the union of all branches' fields, a top-level `required` containing only
77
- * fields required by EVERY branch, and per-branch requireds enforced in code.
78
- */
79
- export declare function flattenCapabilities(capabilities: Record<string, ScopedCapability>, discriminator?: string, allow?: string[]): FlatPlan;
80
- /**
81
- * Build a single function-call tool from a discriminated union of capability
82
- * branches. The branches collapse into one flat schema with a discriminator
83
- * enum (see {@link flattenCapabilities}); at call time the dispatch validates
84
- * the discriminator against the allowlist, validates the chosen branch's input
85
- * (enforcing its required fields), and runs that branch's handler.
86
- *
87
- * @example
88
- * const search = scopedTool({
89
- * name: 'search',
90
- * description: 'Run a search across one of several engines.',
91
- * capabilities: {
92
- * web: capability({ input: z.object({ query: z.string() }), handler: webSearch }),
93
- * images: capability({ input: z.object({ query: z.string(), safe: z.boolean() }), handler: imageSearch }),
94
- * },
95
- * })
96
- */
97
- export declare function scopedTool(options: ScopedToolOptions): ServerToolBuilder<Record<string, unknown>, unknown>;
98
- //# sourceMappingURL=scoped-tool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scoped-tool.d.ts","sourceRoot":"","sources":["../src/scoped-tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAG7C,OAAO,KAAK,EAAE,eAAe,EAAyB,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE3F;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB,CAC/B,MAAM,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EACpC,OAAO,GAAG,OAAO,EACjB,OAAO,GAAG,OAAO;IAEjB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;IACb;;;;OAIG;IACH,OAAO,EAAE,CACP,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EACtB,GAAG,CAAC,EAAE,eAAe,KAClB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;CACzE;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,EAC7E,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAC/C,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAE5C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC9C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,kDAAkD;IAClD,aAAa,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAA;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,mFAAmF;IACnF,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC9C,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CACjC;AAED,wEAAwE;AACxE,qBAAa,eAAgB,SAAQ,KAAK;IACxC,SAAkB,IAAI,qBAAoB;gBAC9B,OAAO,EAAE,MAAM;CAG5B;AAYD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC9C,aAAa,SAAa,EAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,QAAQ,CA8EV;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAoD1G"}
@@ -1,174 +0,0 @@
1
- import { z } from 'zod';
2
- import { ServerToolBuilder } from './tool.js';
3
- import { isAsyncGenerator } from './tool-helpers.js';
4
- import { zodToJsonSchema } from './zod-to-json-schema.js';
5
- /**
6
- * Identity helper that infers a capability's input type at the definition
7
- * site, so its `handler` parameter is typed without an explicit annotation.
8
- *
9
- * @example
10
- * const web = capability({
11
- * input: z.object({ query: z.string() }),
12
- * handler: async ({ query }) => search(query), // `query` is `string`
13
- * })
14
- */
15
- export function capability(spec) {
16
- return spec;
17
- }
18
- /** Error thrown by a scoped tool's dispatch before any handler runs. */
19
- export class ScopedToolError extends Error {
20
- name = 'ScopedToolError';
21
- constructor(message) {
22
- super(message);
23
- }
24
- }
25
- function jsonSchemaFor(schema) {
26
- const json = zodToJsonSchema(schema, 'input');
27
- const properties = (json.properties && typeof json.properties === 'object') ? json.properties : {};
28
- const required = Array.isArray(json.required) ? json.required.filter((r) => typeof r === 'string') : [];
29
- return { properties, required };
30
- }
31
- /**
32
- * Collapse N capability branches into one flat function-call plan with a
33
- * discriminator enum. Function-calling APIs do not reliably honor a top-level
34
- * `oneOf`, so a discriminated union must flatten to a single object schema:
35
- * the union of all branches' fields, a top-level `required` containing only
36
- * fields required by EVERY branch, and per-branch requireds enforced in code.
37
- */
38
- export function flattenCapabilities(capabilities, discriminator = 'sub_tool', allow) {
39
- const keys = Object.keys(capabilities);
40
- if (keys.length === 0) {
41
- throw new ScopedToolError('A scoped tool needs at least one capability.');
42
- }
43
- const values = allow ?? keys;
44
- for (const v of values) {
45
- if (!(v in capabilities)) {
46
- throw new ScopedToolError(`allow lists "${v}", which is not a declared capability.`);
47
- }
48
- }
49
- if (values.length === 0) {
50
- throw new ScopedToolError('A scoped tool needs at least one allowed capability.');
51
- }
52
- const properties = {};
53
- const owners = {};
54
- const requiredByCapability = {};
55
- // A field is top-level required iff every allowed branch requires it. Seed
56
- // with the first branch's requireds, then intersect down across the rest.
57
- let requiredByAll = null;
58
- for (const key of values) {
59
- if (key === discriminator) {
60
- throw new ScopedToolError(`Capability "${key}" collides with the discriminator field name "${discriminator}".`);
61
- }
62
- const { properties: props, required } = jsonSchemaFor(capabilities[key].input);
63
- requiredByCapability[key] = required;
64
- for (const [field, schema] of Object.entries(props)) {
65
- if (field === discriminator) {
66
- throw new ScopedToolError(`Capability "${key}" declares a field named "${discriminator}", which collides with the discriminator.`);
67
- }
68
- // First branch to declare a field owns its schema; later branches must
69
- // share the field name (the model fills one flat object), so we keep the
70
- // first shape and just record co-ownership for the field's note.
71
- if (!(field in properties))
72
- properties[field] = schema;
73
- (owners[field] ??= []).push(key);
74
- }
75
- requiredByAll = requiredByAll === null
76
- ? [...required]
77
- : requiredByAll.filter(f => required.includes(f));
78
- }
79
- // Annotate each non-universal field with the capabilities that use it, so
80
- // the model knows a field only applies to certain discriminator values.
81
- for (const [field, ownerKeys] of Object.entries(owners)) {
82
- if (ownerKeys.length === values.length)
83
- continue; // universal — no note
84
- const note = `Only for ${discriminator}: ${ownerKeys.join(', ')}.`;
85
- const schema = properties[field];
86
- if (schema && typeof schema === 'object') {
87
- const s = schema;
88
- s.description = typeof s.description === 'string' && s.description.length > 0
89
- ? `${s.description} ${note}`
90
- : note;
91
- }
92
- }
93
- const descParts = values.map(k => {
94
- const d = capabilities[k].description;
95
- return d ? `"${k}" (${d})` : `"${k}"`;
96
- });
97
- properties[discriminator] = {
98
- type: 'string',
99
- enum: values,
100
- description: `Which capability to invoke. One of: ${descParts.join(', ')}.`,
101
- };
102
- return {
103
- discriminator,
104
- values,
105
- properties,
106
- required: [discriminator, ...(requiredByAll ?? [])],
107
- requiredByCapability,
108
- owners,
109
- };
110
- }
111
- /**
112
- * Build a single function-call tool from a discriminated union of capability
113
- * branches. The branches collapse into one flat schema with a discriminator
114
- * enum (see {@link flattenCapabilities}); at call time the dispatch validates
115
- * the discriminator against the allowlist, validates the chosen branch's input
116
- * (enforcing its required fields), and runs that branch's handler.
117
- *
118
- * @example
119
- * const search = scopedTool({
120
- * name: 'search',
121
- * description: 'Run a search across one of several engines.',
122
- * capabilities: {
123
- * web: capability({ input: z.object({ query: z.string() }), handler: webSearch }),
124
- * images: capability({ input: z.object({ query: z.string(), safe: z.boolean() }), handler: imageSearch }),
125
- * },
126
- * })
127
- */
128
- export function scopedTool(options) {
129
- const discriminator = options.discriminator ?? 'sub_tool';
130
- const plan = flattenCapabilities(options.capabilities, discriminator, options.allow);
131
- const allowed = new Set(plan.values);
132
- const jsonSchema = {
133
- type: 'object',
134
- properties: plan.properties,
135
- required: plan.required,
136
- };
137
- const definition = {
138
- name: options.name,
139
- description: options.description,
140
- // Placeholder — the wire schema is `jsonSchema`; the loop's arg validation
141
- // passes the raw object through and our dispatch does per-branch checks.
142
- inputSchema: z.unknown(),
143
- jsonSchema,
144
- ...(options.needsApproval !== undefined ? { needsApproval: options.needsApproval } : {}),
145
- };
146
- async function* dispatch(input, ctx) {
147
- const raw = (input && typeof input === 'object') ? input : {};
148
- const which = raw[discriminator];
149
- if (typeof which !== 'string') {
150
- throw new ScopedToolError(`Missing or non-string "${discriminator}". Expected one of: ${plan.values.join(', ')}.`);
151
- }
152
- if (!allowed.has(which)) {
153
- throw new ScopedToolError(`Unknown ${discriminator} "${which}". Expected one of: ${plan.values.join(', ')}.`);
154
- }
155
- const branch = options.capabilities[which];
156
- // Strip the discriminator before validating against the branch's schema —
157
- // the branch never declares it, and a strict schema would reject it.
158
- const { [discriminator]: _omit, ...branchInput } = raw;
159
- const parsed = branch.input.safeParse(branchInput);
160
- if (!parsed.success) {
161
- const issues = parsed.error.issues
162
- .map(i => `${i.path.map(String).join('.') || '(root)'}: ${i.message}`)
163
- .join('; ');
164
- throw new ScopedToolError(`Invalid arguments for ${discriminator} "${which}": ${issues}`);
165
- }
166
- const result = branch.handler(parsed.data, ctx);
167
- if (isAsyncGenerator(result)) {
168
- return yield* result;
169
- }
170
- return await result;
171
- }
172
- return new ServerToolBuilder(definition, dispatch);
173
- }
174
- //# sourceMappingURL=scoped-tool.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scoped-tool.js","sourceRoot":"","sources":["../src/scoped-tool.ts"],"names":[],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import { ServiceProvider } from '@rudderjs/core';
2
- /**
3
- * AI ServiceProvider — reads config from `config('ai')`.
4
- *
5
- * @example
6
- * // bootstrap/providers.ts
7
- * import { AiProvider } from '@rudderjs/ai/server'
8
- * export default [AiProvider, ...]
9
- */
10
- export declare class AiProvider extends ServiceProvider {
11
- register(): void;
12
- boot(): Promise<void>;
13
- /**
14
- * Build a `GoogleCacheRegistry` for Gemini's `cachedContent` resources.
15
- * When `@rudderjs/cache` is installed and booted, the registered cache
16
- * adapter is plumbed in for cross-process / cross-restart persistence.
17
- * Otherwise the registry uses an in-process `Map` and warns once on
18
- * first use.
19
- */
20
- private buildGoogleCacheRegistry;
21
- }
22
- //# sourceMappingURL=provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/server/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAsB,MAAM,gBAAgB,CAAA;AAmHpE;;;;;;;GAOG;AACH,qBAAa,UAAW,SAAQ,eAAe;IAC7C,QAAQ,IAAI,IAAI;IAEV,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA4C3B;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;CAOjC"}
@@ -1,194 +0,0 @@
1
- import { ServiceProvider, config, bootNotice } from '@rudderjs/core';
2
- import { AiRegistry } from '../registry.js';
3
- import { setConversationStore, setUserMemory } from '../agent.js';
4
- import { GoogleCacheRegistry } from '../providers/google-cache-registry.js';
5
- /**
6
- * Return the configured `apiKey`, or `null` when missing/empty.
7
- *
8
- * The config type lets `apiKey` be undefined (some drivers — ollama, bedrock —
9
- * don't need one), so apiKey-requiring drivers use this gate. When the gate
10
- * returns `null` the driver factory bails to `null` and `AiProvider.boot()`
11
- * skips the provider with a warning instead of crashing — matches Laravel's
12
- * "drivers as data, missing credentials don't kill the framework" pattern.
13
- *
14
- * Use-site (`AI.use('anthropic')`) will surface the standard
15
- * "provider not registered" error so debugging stays actionable.
16
- */
17
- function requireKey(_name, cfg) {
18
- return cfg.apiKey || null;
19
- }
20
- const DRIVERS = {
21
- anthropic: async (name, cfg) => {
22
- const apiKey = requireKey(name, cfg);
23
- if (apiKey === null)
24
- return null;
25
- const { AnthropicProvider } = await import('../providers/anthropic.js');
26
- return new AnthropicProvider({ apiKey, baseUrl: cfg.baseUrl });
27
- },
28
- openai: async (name, cfg) => {
29
- const apiKey = requireKey(name, cfg);
30
- if (apiKey === null)
31
- return null;
32
- const { OpenAIProvider } = await import('../providers/openai.js');
33
- return new OpenAIProvider({
34
- apiKey,
35
- baseUrl: cfg.baseUrl,
36
- organization: cfg['organization'],
37
- });
38
- },
39
- google: async (name, cfg, { googleCacheRegistry }) => {
40
- const apiKey = requireKey(name, cfg);
41
- if (apiKey === null)
42
- return null;
43
- const { GoogleProvider } = await import('../providers/google.js');
44
- return new GoogleProvider({ apiKey }, googleCacheRegistry);
45
- },
46
- ollama: async (_name, cfg) => {
47
- const { OllamaProvider } = await import('../providers/ollama.js');
48
- return new OllamaProvider({ baseUrl: cfg.baseUrl });
49
- },
50
- deepseek: async (name, cfg) => {
51
- const apiKey = requireKey(name, cfg);
52
- if (apiKey === null)
53
- return null;
54
- const { DeepSeekProvider } = await import('../providers/deepseek.js');
55
- return new DeepSeekProvider({ apiKey, baseUrl: cfg.baseUrl });
56
- },
57
- xai: async (name, cfg) => {
58
- const apiKey = requireKey(name, cfg);
59
- if (apiKey === null)
60
- return null;
61
- const { XaiProvider } = await import('../providers/xai.js');
62
- return new XaiProvider({ apiKey, baseUrl: cfg.baseUrl });
63
- },
64
- groq: async (name, cfg) => {
65
- const apiKey = requireKey(name, cfg);
66
- if (apiKey === null)
67
- return null;
68
- const { GroqProvider } = await import('../providers/groq.js');
69
- return new GroqProvider({ apiKey, baseUrl: cfg.baseUrl });
70
- },
71
- mistral: async (name, cfg) => {
72
- const apiKey = requireKey(name, cfg);
73
- if (apiKey === null)
74
- return null;
75
- const { MistralProvider } = await import('../providers/mistral.js');
76
- return new MistralProvider({ apiKey, baseUrl: cfg.baseUrl });
77
- },
78
- azure: async (name, cfg) => {
79
- const apiKey = requireKey(name, cfg);
80
- if (apiKey === null)
81
- return null;
82
- if (!cfg.baseUrl) {
83
- throw new Error(`[Rudder AI] config('ai').providers.${name} is missing baseUrl (driver "azure" requires it).`);
84
- }
85
- const { AzureOpenAIProvider } = await import('../providers/azure.js');
86
- return new AzureOpenAIProvider({ apiKey, baseUrl: cfg.baseUrl });
87
- },
88
- openrouter: async (name, cfg) => {
89
- const apiKey = requireKey(name, cfg);
90
- if (apiKey === null)
91
- return null;
92
- const { OpenRouterProvider } = await import('../providers/openrouter.js');
93
- return new OpenRouterProvider({
94
- apiKey,
95
- baseUrl: cfg.baseUrl,
96
- siteUrl: cfg['siteUrl'],
97
- siteName: cfg['siteName'],
98
- });
99
- },
100
- bedrock: async (_name, cfg) => {
101
- const { BedrockProvider } = await import('../providers/bedrock.js');
102
- const region = cfg['region'] ?? 'us-east-1';
103
- const credentials = cfg['credentials'];
104
- return new BedrockProvider(credentials ? { region, credentials } : { region });
105
- },
106
- elevenlabs: async (name, cfg) => {
107
- const apiKey = requireKey(name, cfg);
108
- if (apiKey === null)
109
- return null;
110
- const { ElevenLabsProvider } = await import('../providers/elevenlabs.js');
111
- return new ElevenLabsProvider({
112
- apiKey,
113
- ...(cfg.baseUrl ? { baseUrl: cfg.baseUrl } : {}),
114
- ...(cfg['defaultTtsModelId'] ? { defaultTtsModelId: cfg['defaultTtsModelId'] } : {}),
115
- });
116
- },
117
- voyage: async (name, cfg) => {
118
- const apiKey = requireKey(name, cfg);
119
- if (apiKey === null)
120
- return null;
121
- const { VoyageProvider } = await import('../providers/voyage.js');
122
- return new VoyageProvider({
123
- apiKey,
124
- ...(cfg.baseUrl ? { baseUrl: cfg.baseUrl } : {}),
125
- ...(cfg['defaultInputType'] ? { defaultInputType: cfg['defaultInputType'] } : {}),
126
- });
127
- },
128
- };
129
- /**
130
- * AI ServiceProvider — reads config from `config('ai')`.
131
- *
132
- * @example
133
- * // bootstrap/providers.ts
134
- * import { AiProvider } from '@rudderjs/ai/server'
135
- * export default [AiProvider, ...]
136
- */
137
- export class AiProvider extends ServiceProvider {
138
- register() { }
139
- async boot() {
140
- const cfg = config('ai');
141
- const googleCacheRegistry = this.buildGoogleCacheRegistry();
142
- for (const [name, providerConfig] of Object.entries(cfg.providers)) {
143
- const driver = providerConfig.driver ?? name;
144
- const build = DRIVERS[driver];
145
- if (!build)
146
- continue;
147
- const instance = await build(name, providerConfig, { googleCacheRegistry });
148
- if (instance === null) {
149
- // Drivers that need an apiKey return null when it's missing/empty
150
- // (see requireKey). Skip with a grouped boot notice so the app boots
151
- // and `AI.use('${name}')` surfaces the standard "not registered"
152
- // error at the use-site with a clear hint to set the env var.
153
- bootNotice('ai', `${name} skipped, no API key (set it in .env)`);
154
- continue;
155
- }
156
- AiRegistry.register(instance);
157
- }
158
- AiRegistry.setDefault(cfg.default);
159
- AiRegistry.setModels(cfg.models ?? []);
160
- this.app.instance('ai.registry', AiRegistry);
161
- // Register conversation store if provided in config
162
- if (cfg.conversations) {
163
- setConversationStore(cfg.conversations);
164
- this.app.instance('ai.conversations', cfg.conversations);
165
- }
166
- // Register user-memory store if provided in config (#A4)
167
- if (cfg.memory) {
168
- setUserMemory(cfg.memory);
169
- this.app.instance('ai.memory', cfg.memory);
170
- }
171
- // Register make:agent scaffolder
172
- try {
173
- const { registerMakeSpecs } = await import('@rudderjs/console');
174
- const { makeAgentSpec } = await import('../commands/make-agent.js');
175
- registerMakeSpecs(makeAgentSpec);
176
- }
177
- catch { /* rudder not available */ }
178
- }
179
- /**
180
- * Build a `GoogleCacheRegistry` for Gemini's `cachedContent` resources.
181
- * When `@rudderjs/cache` is installed and booted, the registered cache
182
- * adapter is plumbed in for cross-process / cross-restart persistence.
183
- * Otherwise the registry uses an in-process `Map` and warns once on
184
- * first use.
185
- */
186
- buildGoogleCacheRegistry() {
187
- if (this.app.container.has('cache')) {
188
- const store = this.app.make('cache');
189
- return new GoogleCacheRegistry({ store });
190
- }
191
- return new GoogleCacheRegistry();
192
- }
193
- }
194
- //# sourceMappingURL=provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/server/provider.ts"],"names":[],"mappings":"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"}