@rudderjs/ai 1.4.0 → 1.6.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 (179) hide show
  1. package/README.md +484 -7
  2. package/boost/guidelines.md +62 -2
  3. package/boost/skills/ai-tools/SKILL.md +14 -5
  4. package/dist/agent.d.ts +66 -15
  5. package/dist/agent.d.ts.map +1 -1
  6. package/dist/agent.js +529 -58
  7. package/dist/agent.js.map +1 -1
  8. package/dist/budget/pricing.d.ts +124 -0
  9. package/dist/budget/pricing.d.ts.map +1 -0
  10. package/dist/budget/pricing.js +175 -0
  11. package/dist/budget/pricing.js.map +1 -0
  12. package/dist/budget/storage.d.ts +104 -0
  13. package/dist/budget/storage.d.ts.map +1 -0
  14. package/dist/budget/storage.js +0 -0
  15. package/dist/budget/storage.js.map +1 -0
  16. package/dist/budget/with-budget.d.ts +119 -0
  17. package/dist/budget/with-budget.d.ts.map +1 -0
  18. package/dist/budget/with-budget.js +175 -0
  19. package/dist/budget/with-budget.js.map +1 -0
  20. package/dist/budget-orm/index.d.ts +96 -0
  21. package/dist/budget-orm/index.d.ts.map +1 -0
  22. package/dist/budget-orm/index.js +177 -0
  23. package/dist/budget-orm/index.js.map +1 -0
  24. package/dist/commands/ai-eval.d.ts +93 -0
  25. package/dist/commands/ai-eval.d.ts.map +1 -0
  26. package/dist/commands/ai-eval.js +378 -0
  27. package/dist/commands/ai-eval.js.map +1 -0
  28. package/dist/computer-use/actions.d.ts +214 -0
  29. package/dist/computer-use/actions.d.ts.map +1 -0
  30. package/dist/computer-use/actions.js +48 -0
  31. package/dist/computer-use/actions.js.map +1 -0
  32. package/dist/computer-use/errors.d.ts +57 -0
  33. package/dist/computer-use/errors.d.ts.map +1 -0
  34. package/dist/computer-use/errors.js +76 -0
  35. package/dist/computer-use/errors.js.map +1 -0
  36. package/dist/computer-use/index.d.ts +53 -0
  37. package/dist/computer-use/index.d.ts.map +1 -0
  38. package/dist/computer-use/index.js +51 -0
  39. package/dist/computer-use/index.js.map +1 -0
  40. package/dist/computer-use/playwright.d.ts +76 -0
  41. package/dist/computer-use/playwright.d.ts.map +1 -0
  42. package/dist/computer-use/playwright.js +270 -0
  43. package/dist/computer-use/playwright.js.map +1 -0
  44. package/dist/computer-use/tool.d.ts +154 -0
  45. package/dist/computer-use/tool.d.ts.map +1 -0
  46. package/dist/computer-use/tool.js +210 -0
  47. package/dist/computer-use/tool.js.map +1 -0
  48. package/dist/eval/fixtures.d.ts +65 -0
  49. package/dist/eval/fixtures.d.ts.map +1 -0
  50. package/dist/eval/fixtures.js +110 -0
  51. package/dist/eval/fixtures.js.map +1 -0
  52. package/dist/eval/html-reporter.d.ts +25 -0
  53. package/dist/eval/html-reporter.d.ts.map +1 -0
  54. package/dist/eval/html-reporter.js +209 -0
  55. package/dist/eval/html-reporter.js.map +1 -0
  56. package/dist/eval/index.d.ts +271 -0
  57. package/dist/eval/index.d.ts.map +1 -0
  58. package/dist/eval/index.js +510 -0
  59. package/dist/eval/index.js.map +1 -0
  60. package/dist/eval/json-reporter.d.ts +43 -0
  61. package/dist/eval/json-reporter.d.ts.map +1 -0
  62. package/dist/eval/json-reporter.js +40 -0
  63. package/dist/eval/json-reporter.js.map +1 -0
  64. package/dist/fake.d.ts +36 -1
  65. package/dist/fake.d.ts.map +1 -1
  66. package/dist/fake.js +49 -2
  67. package/dist/fake.js.map +1 -1
  68. package/dist/file-search.d.ts +168 -0
  69. package/dist/file-search.d.ts.map +1 -0
  70. package/dist/file-search.js +158 -0
  71. package/dist/file-search.js.map +1 -0
  72. package/dist/handoff.d.ts +95 -0
  73. package/dist/handoff.d.ts.map +1 -0
  74. package/dist/handoff.js +78 -0
  75. package/dist/handoff.js.map +1 -0
  76. package/dist/index.d.ts +29 -5
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +22 -2
  79. package/dist/index.js.map +1 -1
  80. package/dist/mcp/client-tools.d.ts +39 -0
  81. package/dist/mcp/client-tools.d.ts.map +1 -0
  82. package/dist/mcp/client-tools.js +147 -0
  83. package/dist/mcp/client-tools.js.map +1 -0
  84. package/dist/mcp/index.d.ts +16 -0
  85. package/dist/mcp/index.d.ts.map +1 -0
  86. package/dist/mcp/index.js +15 -0
  87. package/dist/mcp/index.js.map +1 -0
  88. package/dist/mcp/server-from-agent.d.ts +24 -0
  89. package/dist/mcp/server-from-agent.d.ts.map +1 -0
  90. package/dist/mcp/server-from-agent.js +113 -0
  91. package/dist/mcp/server-from-agent.js.map +1 -0
  92. package/dist/mcp/types.d.ts +64 -0
  93. package/dist/mcp/types.d.ts.map +1 -0
  94. package/dist/mcp/types.js +6 -0
  95. package/dist/mcp/types.js.map +1 -0
  96. package/dist/memory-embedding/index.d.ts +121 -0
  97. package/dist/memory-embedding/index.d.ts.map +1 -0
  98. package/dist/memory-embedding/index.js +229 -0
  99. package/dist/memory-embedding/index.js.map +1 -0
  100. package/dist/memory-extract.d.ts +60 -0
  101. package/dist/memory-extract.d.ts.map +1 -0
  102. package/dist/memory-extract.js +163 -0
  103. package/dist/memory-extract.js.map +1 -0
  104. package/dist/memory-inject.d.ts +39 -0
  105. package/dist/memory-inject.d.ts.map +1 -0
  106. package/dist/memory-inject.js +135 -0
  107. package/dist/memory-inject.js.map +1 -0
  108. package/dist/memory-orm/index.d.ts +118 -0
  109. package/dist/memory-orm/index.d.ts.map +1 -0
  110. package/dist/memory-orm/index.js +187 -0
  111. package/dist/memory-orm/index.js.map +1 -0
  112. package/dist/memory.d.ts +55 -0
  113. package/dist/memory.d.ts.map +1 -0
  114. package/dist/memory.js +132 -0
  115. package/dist/memory.js.map +1 -0
  116. package/dist/observers.d.ts +22 -0
  117. package/dist/observers.d.ts.map +1 -1
  118. package/dist/observers.js.map +1 -1
  119. package/dist/provider-tools.d.ts +15 -1
  120. package/dist/provider-tools.d.ts.map +1 -1
  121. package/dist/provider-tools.js +21 -1
  122. package/dist/provider-tools.js.map +1 -1
  123. package/dist/providers/anthropic.d.ts +9 -1
  124. package/dist/providers/anthropic.d.ts.map +1 -1
  125. package/dist/providers/anthropic.js +66 -11
  126. package/dist/providers/anthropic.js.map +1 -1
  127. package/dist/providers/bedrock.d.ts +60 -0
  128. package/dist/providers/bedrock.d.ts.map +1 -0
  129. package/dist/providers/bedrock.js +167 -0
  130. package/dist/providers/bedrock.js.map +1 -0
  131. package/dist/providers/elevenlabs.d.ts +98 -0
  132. package/dist/providers/elevenlabs.d.ts.map +1 -0
  133. package/dist/providers/elevenlabs.js +229 -0
  134. package/dist/providers/elevenlabs.js.map +1 -0
  135. package/dist/providers/google.d.ts +83 -1
  136. package/dist/providers/google.d.ts.map +1 -1
  137. package/dist/providers/google.js +491 -8
  138. package/dist/providers/google.js.map +1 -1
  139. package/dist/providers/openai.d.ts +8 -1
  140. package/dist/providers/openai.d.ts.map +1 -1
  141. package/dist/providers/openai.js +215 -5
  142. package/dist/providers/openai.js.map +1 -1
  143. package/dist/providers/openrouter.d.ts +43 -0
  144. package/dist/providers/openrouter.d.ts.map +1 -0
  145. package/dist/providers/openrouter.js +21 -0
  146. package/dist/providers/openrouter.js.map +1 -0
  147. package/dist/providers/voyage.d.ts +91 -0
  148. package/dist/providers/voyage.d.ts.map +1 -0
  149. package/dist/providers/voyage.js +166 -0
  150. package/dist/providers/voyage.js.map +1 -0
  151. package/dist/queue-job.d.ts +69 -4
  152. package/dist/queue-job.d.ts.map +1 -1
  153. package/dist/queue-job.js +114 -11
  154. package/dist/queue-job.js.map +1 -1
  155. package/dist/registry.d.ts +3 -1
  156. package/dist/registry.d.ts.map +1 -1
  157. package/dist/registry.js +10 -0
  158. package/dist/registry.js.map +1 -1
  159. package/dist/server/provider.d.ts.map +1 -1
  160. package/dist/server/provider.js +38 -1
  161. package/dist/server/provider.js.map +1 -1
  162. package/dist/similarity-search.d.ts +163 -0
  163. package/dist/similarity-search.d.ts.map +1 -0
  164. package/dist/similarity-search.js +147 -0
  165. package/dist/similarity-search.js.map +1 -0
  166. package/dist/sub-agent-run-store.d.ts +40 -3
  167. package/dist/sub-agent-run-store.d.ts.map +1 -1
  168. package/dist/sub-agent-run-store.js.map +1 -1
  169. package/dist/tool.d.ts +59 -0
  170. package/dist/tool.d.ts.map +1 -1
  171. package/dist/tool.js +45 -4
  172. package/dist/tool.js.map +1 -1
  173. package/dist/types.d.ts +285 -1
  174. package/dist/types.d.ts.map +1 -1
  175. package/dist/vector-stores/index.d.ts +96 -0
  176. package/dist/vector-stores/index.d.ts.map +1 -0
  177. package/dist/vector-stores/index.js +153 -0
  178. package/dist/vector-stores/index.js.map +1 -0
  179. package/package.json +43 -4
@@ -0,0 +1,78 @@
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),
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
@@ -0,0 +1 @@
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,CAAC;aACzC,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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { DocumentAttachment as Document, ImageAttachment as Image, getMessageText, attachmentsToContentParts } from './attachment.js';
2
- export type { AgentPromptOptions, Attachment, AiMessage, ContentPart, AiConfig, AiModelConfig, AiProviderConfig, AiMiddleware, AgentResponse, AgentStep, AgentStreamResponse, AnyTool, BeforeToolCallResult, CacheableConfig, CacheableMarkers, ClientTool, ConversationStore, ConversationStoreMeta, FinishReason, HasMiddleware, HasMemory, HasStructuredOutput, HasTools, MiddlewareConfigResult, MiddlewareContext, PrepareStepResult, ProviderAdapter, ProviderFactory, ProviderRequestOptions, ProviderResponse, ServerTool, StopCondition, Tool, StreamChunk, TokenUsage, ToolCall, ToolCallContext, ToolChoice, ToolDefinitionOptions, ToolDefinitionSchema, ToolExecuteFn, ToolNeedsApproval, ToolResult, EmbeddingAdapter, EmbeddingResult, ImageGenerationAdapter, ImageGenerationOptions, ImageGenerationResult, TextToSpeechAdapter, TextToSpeechOptions, TextToSpeechResult, SpeechToTextAdapter, SpeechToTextOptions, SpeechToTextResult, RerankingAdapter, RerankingOptions, RerankingResult, FileAdapter, FileUploadOptions, FileUploadResult, FileListResult, FileContent, } from './types.js';
2
+ export type { AgentPromptOptions, Attachment, AiMessage, ContentPart, AiConfig, AiModelConfig, AiProviderConfig, AiMiddleware, AgentResponse, AgentStep, AgentStreamResponse, AnyTool, BeforeToolCallResult, CacheableConfig, CacheableMarkers, ClientTool, ConversationStore, ConversationStoreMeta, MemoryEntry, RemembersOverride, RemembersSpec, UserMemory, FinishReason, HasMiddleware, HasMemory, HasStructuredOutput, HasTools, MiddlewareConfigResult, MiddlewareContext, PrepareStepResult, ProviderAdapter, ProviderFactory, ProviderRequestOptions, ProviderResponse, ServerTool, StopCondition, Tool, StreamChunk, TokenUsage, ToolCall, ToolCallContext, ToolChoice, ToolDefinitionOptions, ToolDefinitionSchema, ToolExecuteFn, ToolNeedsApproval, ToolResult, EmbeddingAdapter, EmbeddingResult, ImageGenerationAdapter, ImageGenerationOptions, ImageGenerationResult, TextToSpeechAdapter, TextToSpeechOptions, TextToSpeechResult, SpeechToTextAdapter, SpeechToTextOptions, SpeechToTextResult, RerankingAdapter, RerankingOptions, RerankingResult, FileAdapter, FileUploadOptions, FileUploadResult, FileListResult, FileContent, SubAgentUpdate, } from './types.js';
3
3
  export { AiRegistry } from './registry.js';
4
4
  export { AnthropicProvider, type AnthropicConfig } from './providers/anthropic.js';
5
5
  export { OpenAIProvider, OpenAIAdapter, type OpenAIConfig } from './providers/openai.js';
@@ -12,16 +12,28 @@ export { MistralProvider, type MistralConfig } from './providers/mistral.js';
12
12
  export { AzureOpenAIProvider, type AzureOpenAIConfig } from './providers/azure.js';
13
13
  export { CohereProvider, type CohereConfig } from './providers/cohere.js';
14
14
  export { JinaProvider, type JinaConfig } from './providers/jina.js';
15
- export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, } from './tool.js';
16
- export type { PauseForClientToolsChunk } from './tool.js';
15
+ export { ElevenLabsProvider, type ElevenLabsConfig, DEFAULT_TTS_MODEL_ID, DEFAULT_VOICE_ID } from './providers/elevenlabs.js';
16
+ export { VoyageProvider, type VoyageConfig, type VoyageEmbedExtras } from './providers/voyage.js';
17
+ export { OpenRouterProvider, type OpenRouterConfig } from './providers/openrouter.js';
18
+ export { BedrockProvider, type BedrockConfig } from './providers/bedrock.js';
19
+ export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, pauseForApproval, isPauseForApprovalChunk, } from './tool.js';
20
+ export type { PauseForClientToolsChunk, PauseForApprovalChunk } from './tool.js';
17
21
  export { zodToJsonSchema } from './zod-to-json-schema.js';
18
- export { Agent, ConversableAgent, agent, stepCountIs, hasToolCall, setConversationStore } from './agent.js';
22
+ export { handoff, isHandoffTool } from './handoff.js';
23
+ export type { HandoffTool, HandoffOptions, HandoffSpec } from './handoff.js';
24
+ export { Agent, ConversableAgent, agent, stepCountIs, hasToolCall, setConversationStore, setUserMemory, resolveUserMemory } from './agent.js';
19
25
  export type { InvalidToolArgumentsError } from './agent.js';
20
26
  export { QueuedPromptBuilder } from './queue-job.js';
21
27
  export { runOnConfig, runOnChunk, runOnBeforeToolCall, runOnAfterToolCall, runSequential, runOnUsage, runOnAbort, runOnError } from './middleware.js';
22
28
  export { Output, type OutputWrapper } from './output.js';
23
29
  export { MemoryConversationStore } from './conversation.js';
24
- export { InMemorySubAgentRunStore, CachedSubAgentRunStore, type SubAgentRunStore, type SubAgentRunSnapshot, type CachedSubAgentRunStoreOptions, } from './sub-agent-run-store.js';
30
+ export { MemoryUserMemory, resolveRemembersSpec } from './memory.js';
31
+ export type { UserMemoryLookup } from './memory.js';
32
+ export { withMemoryInject } from './memory-inject.js';
33
+ export type { MemoryInjectOptions } from './memory-inject.js';
34
+ export { withMemoryExtract } from './memory-extract.js';
35
+ export type { MemoryExtractOptions } from './memory-extract.js';
36
+ export { InMemorySubAgentRunStore, CachedSubAgentRunStore, type SubAgentRunStore, type SubAgentRunSnapshot, type SubAgentPauseKind, type CachedSubAgentRunStoreOptions, } from './sub-agent-run-store.js';
25
37
  export { AI } from './facade.js';
26
38
  export { ImageGenerator } from './image.js';
27
39
  export { AudioGenerator } from './audio.js';
@@ -30,6 +42,18 @@ export { WebSearch, WebFetch, CodeExecution } from './provider-tools.js';
30
42
  export { toVercelDataStream, toVercelResponse } from './vercel-protocol.js';
31
43
  export { Reranker } from './rerank.js';
32
44
  export { FileManager } from './files.js';
45
+ export { VectorStores, VectorStore } from './vector-stores/index.js';
46
+ export type { VectorStoreAdapter, VectorStoreCreateOptions, VectorStoreInfo, VectorStoreFileInfo, VectorStoreAddOptions, VectorStoreListOptions, VectorStoreList, VectorStoreFileList, } from './types.js';
47
+ export { fileSearch, isFileSearchTool, FILE_SEARCH_MARKER, FILE_SEARCH_TOOL_NAME, normalizeWhere } from './file-search.js';
48
+ export type { FileSearchOptions, FileSearchTool, FileSearchFilter, FileSearchWhereSugar } from './file-search.js';
33
49
  export { CachedEmbeddingAdapter } from './cached-embedding.js';
50
+ export { similaritySearch } from './similarity-search.js';
51
+ export type { SimilaritySearchOptions, SimilarityHit, SimilaritySearchModel, SimilaritySearchQueryBuilder, } from './similarity-search.js';
52
+ export { ModelPricing, estimateCost, assertKnownModelPricing, UnknownModelPricingError, BudgetExceededError, } from './budget/pricing.js';
53
+ export type { ModelPriceEntry } from './budget/pricing.js';
54
+ export { memoryBudgetStorage, periodKey, } from './budget/storage.js';
55
+ export type { BudgetStorage, BudgetPeriod, BudgetCheckOptions, BudgetCheckResult, } from './budget/storage.js';
56
+ export { withBudget } from './budget/with-budget.js';
57
+ export type { WithBudgetOptions, BudgetCaps, BudgetExceededArgs, } from './budget/with-budget.js';
34
58
  export { AiFake } from './fake.js';
35
59
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,11 +15,17 @@ export { MistralProvider } from './providers/mistral.js';
15
15
  export { AzureOpenAIProvider } from './providers/azure.js';
16
16
  export { CohereProvider } from './providers/cohere.js';
17
17
  export { JinaProvider } from './providers/jina.js';
18
+ export { ElevenLabsProvider, DEFAULT_TTS_MODEL_ID, DEFAULT_VOICE_ID } from './providers/elevenlabs.js';
19
+ export { VoyageProvider } from './providers/voyage.js';
20
+ export { OpenRouterProvider } from './providers/openrouter.js';
21
+ export { BedrockProvider } from './providers/bedrock.js';
18
22
  // Tools
19
- export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, } from './tool.js';
23
+ export { toolDefinition, dynamicTool, ToolBuilder, toolToSchema, pauseForClientTools, isPauseForClientToolsChunk, pauseForApproval, isPauseForApprovalChunk, } from './tool.js';
20
24
  export { zodToJsonSchema } from './zod-to-json-schema.js';
25
+ // Handoffs
26
+ export { handoff, isHandoffTool } from './handoff.js';
21
27
  // Agent
22
- export { Agent, ConversableAgent, agent, stepCountIs, hasToolCall, setConversationStore } from './agent.js';
28
+ export { Agent, ConversableAgent, agent, stepCountIs, hasToolCall, setConversationStore, setUserMemory, resolveUserMemory } from './agent.js';
23
29
  export { QueuedPromptBuilder } from './queue-job.js';
24
30
  // Middleware
25
31
  export { runOnConfig, runOnChunk, runOnBeforeToolCall, runOnAfterToolCall, runSequential, runOnUsage, runOnAbort, runOnError } from './middleware.js';
@@ -27,6 +33,10 @@ export { runOnConfig, runOnChunk, runOnBeforeToolCall, runOnAfterToolCall, runSe
27
33
  export { Output } from './output.js';
28
34
  // Conversation
29
35
  export { MemoryConversationStore } from './conversation.js';
36
+ // User Memory (#A4)
37
+ export { MemoryUserMemory, resolveRemembersSpec } from './memory.js';
38
+ export { withMemoryInject } from './memory-inject.js';
39
+ export { withMemoryExtract } from './memory-extract.js';
30
40
  // Sub-agent run store (asTool streaming + suspend)
31
41
  export { InMemorySubAgentRunStore, CachedSubAgentRunStore, } from './sub-agent-run-store.js';
32
42
  // Facade
@@ -44,8 +54,18 @@ export { toVercelDataStream, toVercelResponse } from './vercel-protocol.js';
44
54
  export { Reranker } from './rerank.js';
45
55
  // File Management
46
56
  export { FileManager } from './files.js';
57
+ // Hosted Vector Stores (#B8 Phase 1)
58
+ export { VectorStores, VectorStore } from './vector-stores/index.js';
59
+ // File Search agent tool (#B8 Phase 2 — provider-native RAG)
60
+ export { fileSearch, isFileSearchTool, FILE_SEARCH_MARKER, FILE_SEARCH_TOOL_NAME, normalizeWhere } from './file-search.js';
47
61
  // Cached Embeddings
48
62
  export { CachedEmbeddingAdapter } from './cached-embedding.js';
63
+ // Similarity Search (#B7 Phase 2 — agent tool wrapping ORM vector primitives)
64
+ export { similaritySearch } from './similarity-search.js';
65
+ // Budget / pricing (#A6 — full pricing catalog + per-user spend caps)
66
+ export { ModelPricing, estimateCost, assertKnownModelPricing, UnknownModelPricingError, BudgetExceededError, } from './budget/pricing.js';
67
+ export { memoryBudgetStorage, periodKey, } from './budget/storage.js';
68
+ export { withBudget } from './budget/with-budget.js';
49
69
  // Testing
50
70
  export { AiFake } from './fake.js';
51
71
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,cAAc;AACd,OAAO,EAAE,kBAAkB,IAAI,QAAQ,EAAE,eAAe,IAAI,KAAK,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAoErI,WAAW;AACX,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,YAAY;AACZ,OAAO,EAAE,iBAAiB,EAAwB,MAAM,0BAA0B,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,aAAa,EAAqB,MAAM,uBAAuB,CAAA;AACxF,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,gBAAgB,EAAuB,MAAM,yBAAyB,CAAA;AAC/E,OAAO,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAA;AACnE,OAAO,EAAE,eAAe,EAAsB,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAA0B,MAAM,sBAAsB,CAAA;AAClF,OAAO,EAAE,cAAc,EAAqB,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAA;AAEnE,QAAQ;AACR,OAAO,EACL,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,WAAW,CAAA;AAElB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE3G,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,aAAa;AACb,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAErJ,oBAAoB;AACpB,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAA;AAExD,eAAe;AACf,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA;AAE3D,mDAAmD;AACnD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GAIvB,MAAM,0BAA0B,CAAA;AAEjC,SAAS;AACT,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAE3C,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,iBAAiB;AACjB,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExE,qBAAqB;AACrB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAE3E,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,oBAAoB;AACpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,UAAU;AACV,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
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 RudderJS `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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,147 @@
1
+ import { z } from 'zod';
2
+ import { dynamicTool } from '../tool.js';
3
+ const CLIENT_INFO = { name: 'rudderjs-ai-mcp-bridge', version: '1.0.0' };
4
+ /**
5
+ * Connect to a remote MCP server and surface its tools as RudderJS `Tool`s.
6
+ *
7
+ * Three transport shapes are accepted:
8
+ *
9
+ * ```ts
10
+ * // (a) HTTP — string URL or URL instance
11
+ * const t = await mcpClientTools('https://api.example.com/mcp')
12
+ *
13
+ * // (b) Local stdio subprocess
14
+ * const t = await mcpClientTools({ command: 'npx', args: ['some-mcp-server'] })
15
+ *
16
+ * // (c) Already-connected SDK Client (caller owns lifecycle)
17
+ * const t = await mcpClientTools(myClient)
18
+ * ```
19
+ *
20
+ * The returned array exposes a `close()` method when this call owns the client
21
+ * (cases a + b). Pass it back so the subprocess / HTTP session can shut down
22
+ * cleanly when your agent is done.
23
+ *
24
+ * The remote server's `inputSchema` (JSON Schema) ships through to providers
25
+ * via `ToolDefinitionOptions.jsonSchema` — no zod conversion in either direction.
26
+ */
27
+ export async function mcpClientTools(transport, opts = {}) {
28
+ const streaming = opts.streaming ?? true;
29
+ const namePrefix = opts.namePrefix ?? '';
30
+ const { client, ownsClient } = await resolveClient(transport);
31
+ let toolList;
32
+ try {
33
+ const listed = await client.listTools();
34
+ toolList = listed.tools.filter(t => opts.filter ? opts.filter(t.name) : true);
35
+ }
36
+ catch (err) {
37
+ if (ownsClient)
38
+ await safeClose(client);
39
+ throw err;
40
+ }
41
+ const tools = toolList.map(t => buildTool(client, t, namePrefix, streaming));
42
+ const handle = ownsClient
43
+ ? Object.defineProperty([...tools], 'close', {
44
+ value: () => safeClose(client),
45
+ enumerable: false,
46
+ writable: false,
47
+ })
48
+ : tools;
49
+ return handle;
50
+ }
51
+ async function resolveClient(transport) {
52
+ // Already a Client instance — duck-type check for `callTool` + `listTools`.
53
+ if (typeof transport === 'object' && transport !== null && 'callTool' in transport && 'listTools' in transport) {
54
+ return { client: transport, ownsClient: false };
55
+ }
56
+ // Lazy-load the SDK so apps that don't import @rudderjs/ai/mcp don't pay for it.
57
+ const { Client } = await import('@modelcontextprotocol/sdk/client/index.js');
58
+ const sdkTransport = await buildTransport(transport);
59
+ const client = new Client(CLIENT_INFO);
60
+ await client.connect(sdkTransport);
61
+ return { client, ownsClient: true };
62
+ }
63
+ async function buildTransport(transport) {
64
+ if (typeof transport === 'string' || transport instanceof URL) {
65
+ const url = transport instanceof URL ? transport : new URL(transport);
66
+ const { StreamableHTTPClientTransport } = await import('@modelcontextprotocol/sdk/client/streamableHttp.js');
67
+ return new StreamableHTTPClientTransport(url);
68
+ }
69
+ if (typeof transport === 'object' && transport !== null && 'command' in transport) {
70
+ const spawn = transport;
71
+ const { StdioClientTransport } = await import('@modelcontextprotocol/sdk/client/stdio.js');
72
+ return new StdioClientTransport({
73
+ command: spawn.command,
74
+ ...(spawn.args !== undefined ? { args: [...spawn.args] } : {}),
75
+ ...(spawn.env !== undefined ? { env: spawn.env } : {}),
76
+ ...(spawn.cwd !== undefined ? { cwd: spawn.cwd } : {}),
77
+ });
78
+ }
79
+ throw new Error(`mcpClientTools: unsupported transport shape: ${typeof transport}`);
80
+ }
81
+ async function safeClose(client) {
82
+ try {
83
+ await client.close();
84
+ }
85
+ catch { /* best-effort */ }
86
+ }
87
+ function buildTool(client, remote, namePrefix, streaming) {
88
+ const localName = namePrefix + remote.name;
89
+ const builder = dynamicTool({
90
+ name: localName,
91
+ description: remote.description ?? '',
92
+ inputSchema: z.unknown(), // placeholder — real shape lives in jsonSchema
93
+ jsonSchema: remote.inputSchema,
94
+ });
95
+ if (streaming) {
96
+ const built = builder.server(async function* (input, _ctx) {
97
+ const collected = [];
98
+ const result = await client.callTool({ name: remote.name, arguments: (input ?? {}) }, undefined, { onprogress: (p) => collected.push(p) });
99
+ // SDK delivers progress notifications synchronously into onprogress during
100
+ // the request lifetime, so by the time we're here all progress events have
101
+ // arrived. Yielding them before returning preserves the observable order
102
+ // (tool-update chunks land before tool-result).
103
+ for (const p of collected)
104
+ yield p;
105
+ return mcpContentToString(result);
106
+ });
107
+ return built;
108
+ }
109
+ const built = builder.server(async (input) => {
110
+ const result = await client.callTool({ name: remote.name, arguments: (input ?? {}) });
111
+ return mcpContentToString(result);
112
+ });
113
+ return built;
114
+ }
115
+ /**
116
+ * Flatten an MCP tool result into a string for the agent's `tool_result` slot.
117
+ * Text blocks concatenate; image / resource blocks become bracketed placeholders
118
+ * so the model knows something non-text was returned.
119
+ */
120
+ function mcpContentToString(result) {
121
+ const parts = [];
122
+ for (const block of result.content) {
123
+ if (typeof block !== 'object' || block === null)
124
+ continue;
125
+ const b = block;
126
+ if (b['type'] === 'text' && typeof b['text'] === 'string') {
127
+ parts.push(b['text']);
128
+ }
129
+ else if (b['type'] === 'image') {
130
+ parts.push(`[image: ${b['mimeType'] ?? 'unknown mime'}]`);
131
+ }
132
+ else if (b['type'] === 'resource' || b['type'] === 'resource_link') {
133
+ const ref = b['resource'] && typeof b['resource'] === 'object'
134
+ ? b['resource']['uri']
135
+ : b['uri'];
136
+ parts.push(`[resource: ${ref ?? 'unknown'}]`);
137
+ }
138
+ else if (b['type']) {
139
+ parts.push(`[${b['type']}]`);
140
+ }
141
+ }
142
+ const text = parts.join('\n').trim();
143
+ if (result.isError)
144
+ return `[error] ${text || 'Tool reported an error'}`;
145
+ return text || '(empty result)';
146
+ }
147
+ //# sourceMappingURL=client-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-tools.js","sourceRoot":"","sources":["../../src/mcp/client-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `@rudderjs/ai/mcp` — bridge between `@rudderjs/ai` Agents and Model Context
3
+ * Protocol servers. Two connectors:
4
+ *
5
+ * - {@link mcpClientTools} — consume a remote MCP server's tools as Agent tools
6
+ * - {@link mcpServerFromAgent} — expose an Agent as an MCP server external
7
+ * clients (Claude Desktop, Cursor, etc.) can call
8
+ *
9
+ * Requires `@modelcontextprotocol/sdk` at runtime — declared as an optional
10
+ * peer dependency. Apps that don't import this subpath aren't forced to
11
+ * install it.
12
+ */
13
+ export { mcpClientTools } from './client-tools.js';
14
+ export { mcpServerFromAgent } from './server-from-agent.js';
15
+ export type { McpClientTransport, McpClientToolsOptions, McpServerFromAgentOptions, StdioServerSpawn, } from './types.js';
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3D,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `@rudderjs/ai/mcp` — bridge between `@rudderjs/ai` Agents and Model Context
3
+ * Protocol servers. Two connectors:
4
+ *
5
+ * - {@link mcpClientTools} — consume a remote MCP server's tools as Agent tools
6
+ * - {@link mcpServerFromAgent} — expose an Agent as an MCP server external
7
+ * clients (Claude Desktop, Cursor, etc.) can call
8
+ *
9
+ * Requires `@modelcontextprotocol/sdk` at runtime — declared as an optional
10
+ * peer dependency. Apps that don't import this subpath aren't forced to
11
+ * install it.
12
+ */
13
+ export { mcpClientTools } from './client-tools.js';
14
+ export { mcpServerFromAgent } from './server-from-agent.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,24 @@
1
+ import type { Agent } from '../agent.js';
2
+ import type { McpServerFromAgentOptions } from './types.js';
3
+ /**
4
+ * Wrap an `Agent` class as an MCP server. External MCP clients (Claude Desktop,
5
+ * Cursor, etc.) can connect to it like any other MCP server.
6
+ *
7
+ * Returns an `McpServer` from `@modelcontextprotocol/sdk` — connect it with the
8
+ * SDK's stdio / HTTP transports:
9
+ *
10
+ * ```ts
11
+ * import { mcpServerFromAgent } from '@rudderjs/ai/mcp'
12
+ * import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
13
+ *
14
+ * const server = await mcpServerFromAgent(MyAgent)
15
+ * await server.connect(new StdioServerTransport())
16
+ * ```
17
+ *
18
+ * Three exposure modes via `opts.expose`:
19
+ * - `'tools'` (default) — one MCP tool per `agent.tools()` entry
20
+ * - `'agent'` — one MCP tool that runs the whole agent (`prompt(text) → text`)
21
+ * - `'both'` — expose individual tools and the agent prompt-tool side by side
22
+ */
23
+ export declare function mcpServerFromAgent(AgentClass: new () => Agent, opts?: McpServerFromAgentOptions): Promise<unknown>;
24
+ //# sourceMappingURL=server-from-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-from-agent.d.ts","sourceRoot":"","sources":["../../src/mcp/server-from-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,KAAK,EAC3B,IAAI,GAAE,yBAA8B,GACnC,OAAO,CAAC,OAAO,CAAC,CAiClB"}
@@ -0,0 +1,113 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Wrap an `Agent` class as an MCP server. External MCP clients (Claude Desktop,
4
+ * Cursor, etc.) can connect to it like any other MCP server.
5
+ *
6
+ * Returns an `McpServer` from `@modelcontextprotocol/sdk` — connect it with the
7
+ * SDK's stdio / HTTP transports:
8
+ *
9
+ * ```ts
10
+ * import { mcpServerFromAgent } from '@rudderjs/ai/mcp'
11
+ * import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
12
+ *
13
+ * const server = await mcpServerFromAgent(MyAgent)
14
+ * await server.connect(new StdioServerTransport())
15
+ * ```
16
+ *
17
+ * Three exposure modes via `opts.expose`:
18
+ * - `'tools'` (default) — one MCP tool per `agent.tools()` entry
19
+ * - `'agent'` — one MCP tool that runs the whole agent (`prompt(text) → text`)
20
+ * - `'both'` — expose individual tools and the agent prompt-tool side by side
21
+ */
22
+ export async function mcpServerFromAgent(AgentClass, opts = {}) {
23
+ const expose = opts.expose ?? 'tools';
24
+ const { McpServer } = await import('@modelcontextprotocol/sdk/server/mcp.js');
25
+ const agent = new AgentClass();
26
+ const instructions = opts.instructions ?? safeInstructions(agent);
27
+ const name = opts.name ?? `${AgentClass.name}Server`;
28
+ const version = opts.version ?? '1.0.0';
29
+ const server = new McpServer({ name, version }, instructions !== undefined ? { instructions } : {});
30
+ if (expose === 'tools' || expose === 'both') {
31
+ // `tools()` is opt-in via the HasTools interface — abstract `Agent` doesn't
32
+ // declare it. Cast and tolerate absence gracefully (subclass without tools()
33
+ // returns no tools but the agent prompt-tool path still works).
34
+ const hasTools = agent;
35
+ const toolList = typeof hasTools.tools === 'function' ? hasTools.tools() : [];
36
+ for (const tool of toolList) {
37
+ registerAgentToolOnServer(server, tool);
38
+ }
39
+ }
40
+ if (expose === 'agent' || expose === 'both') {
41
+ registerAgentPromptToolOnServer(server, AgentClass, opts.agentToolName ?? AgentClass.name);
42
+ }
43
+ return server;
44
+ }
45
+ function registerAgentToolOnServer(server, tool) {
46
+ const name = tool.definition.name;
47
+ const description = tool.definition.description;
48
+ // Pass the zod schema as a single AnySchema (the SDK's `inputSchema` field
49
+ // accepts either a ZodRawShape record or a single zod schema). The callback
50
+ // then receives `input: unknown` which is what the agent tool expects too.
51
+ server.registerTool(name, { description, inputSchema: tool.definition.inputSchema }, async (input) => {
52
+ const result = await runAgentTool(tool, input);
53
+ return { content: [{ type: 'text', text: stringifyResult(result) }] };
54
+ });
55
+ }
56
+ function registerAgentPromptToolOnServer(server, AgentClass, toolName) {
57
+ const promptShape = { prompt: z.string().describe('User message for the agent') };
58
+ server.registerTool(toolName, {
59
+ description: `Run the ${AgentClass.name} agent with a prompt and return its response`,
60
+ inputSchema: promptShape,
61
+ }, async (input) => {
62
+ const args = (input ?? {});
63
+ if (typeof args.prompt !== 'string') {
64
+ return { content: [{ type: 'text', text: '[error] Agent prompt-tool requires { prompt: string }' }] };
65
+ }
66
+ const agent = new AgentClass();
67
+ const response = await agent.prompt(args.prompt);
68
+ return { content: [{ type: 'text', text: response.text ?? '' }] };
69
+ });
70
+ }
71
+ async function runAgentTool(tool, input) {
72
+ if (!tool.execute) {
73
+ throw new Error(`mcpServerFromAgent: tool "${tool.definition.name}" has no execute fn (client-only tool — cannot be exposed via MCP)`);
74
+ }
75
+ const out = tool.execute(input);
76
+ if (out instanceof Promise)
77
+ return await out;
78
+ // Generator path — drain progress yields silently and return the final value.
79
+ // (MCP forwards progress via `notifications/progress`; the agent loop's
80
+ // tool-update chunks don't map cleanly without a progressToken from the
81
+ // caller, so we drop them in v1. Future enhancement: forward progress when
82
+ // the calling MCP client supplied a progressToken.)
83
+ const iter = out;
84
+ let next = await iter.next();
85
+ while (!next.done)
86
+ next = await iter.next();
87
+ return next.value;
88
+ }
89
+ function stringifyResult(result) {
90
+ if (typeof result === 'string')
91
+ return result;
92
+ if (result === undefined || result === null)
93
+ return '';
94
+ if (typeof result === 'object') {
95
+ try {
96
+ return JSON.stringify(result, null, 2);
97
+ }
98
+ catch {
99
+ return String(result);
100
+ }
101
+ }
102
+ return String(result);
103
+ }
104
+ function safeInstructions(agent) {
105
+ try {
106
+ const out = agent.instructions();
107
+ return typeof out === 'string' && out.length > 0 ? out : undefined;
108
+ }
109
+ catch {
110
+ return undefined;
111
+ }
112
+ }
113
+ //# sourceMappingURL=server-from-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-from-agent.js","sourceRoot":"","sources":["../../src/mcp/server-from-agent.ts"],"names":[],"mappings":"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"}