ai 5.0.0-canary.5 → 5.0.0-canary.7
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.
- package/CHANGELOG.md +28 -0
- package/dist/index.d.mts +168 -448
- package/dist/index.d.ts +168 -448
- package/dist/index.js +289 -303
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +205 -219
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +259 -311
- package/dist/internal/index.d.ts +259 -311
- package/dist/internal/index.js +139 -155
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +129 -145
- package/dist/internal/index.mjs.map +1 -1
- package/dist/mcp-stdio/index.js.map +1 -0
- package/dist/mcp-stdio/index.mjs.map +1 -0
- package/dist/test/index.js.map +1 -0
- package/dist/test/index.mjs.map +1 -0
- package/package.json +15 -18
- package/mcp-stdio/create-child-process.test.ts +0 -92
- package/mcp-stdio/create-child-process.ts +0 -21
- package/mcp-stdio/dist/index.js.map +0 -1
- package/mcp-stdio/dist/index.mjs.map +0 -1
- package/mcp-stdio/get-environment.test.ts +0 -13
- package/mcp-stdio/get-environment.ts +0 -43
- package/mcp-stdio/index.ts +0 -4
- package/mcp-stdio/mcp-stdio-transport.test.ts +0 -262
- package/mcp-stdio/mcp-stdio-transport.ts +0 -157
- package/test/dist/index.js.map +0 -1
- package/test/dist/index.mjs.map +0 -1
- /package/{mcp-stdio/dist → dist/mcp-stdio}/index.d.mts +0 -0
- /package/{mcp-stdio/dist → dist/mcp-stdio}/index.d.ts +0 -0
- /package/{mcp-stdio/dist → dist/mcp-stdio}/index.js +0 -0
- /package/{mcp-stdio/dist → dist/mcp-stdio}/index.mjs +0 -0
- /package/{test/dist → dist/test}/index.d.mts +0 -0
- /package/{test/dist → dist/test}/index.d.ts +0 -0
- /package/{test/dist → dist/test}/index.js +0 -0
- /package/{test/dist → dist/test}/index.mjs +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../core/tool/mcp/json-rpc-message.ts","../../core/tool/mcp/types.ts","../../errors/index.ts","../../errors/mcp-client-error.ts","../../mcp-stdio/create-child-process.ts","../../mcp-stdio/get-environment.ts","../../mcp-stdio/mcp-stdio-transport.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseParamsSchema, RequestSchema, ResultSchema } from './types';\n\nconst JSONRPC_VERSION = '2.0';\n\nconst JSONRPCRequestSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n })\n .merge(RequestSchema)\n .strict();\n\nexport type JSONRPCRequest = z.infer<typeof JSONRPCRequestSchema>;\n\nconst JSONRPCResponseSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n result: ResultSchema,\n })\n .strict();\n\nexport type JSONRPCResponse = z.infer<typeof JSONRPCResponseSchema>;\n\nconst JSONRPCErrorSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n error: z.object({\n code: z.number().int(),\n message: z.string(),\n data: z.optional(z.unknown()),\n }),\n })\n .strict();\n\nexport type JSONRPCError = z.infer<typeof JSONRPCErrorSchema>;\n\nconst JSONRPCNotificationSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n })\n .merge(\n z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n }),\n )\n .strict();\n\nexport type JSONRPCNotification = z.infer<typeof JSONRPCNotificationSchema>;\n\nexport const JSONRPCMessageSchema = z.union([\n JSONRPCRequestSchema,\n JSONRPCNotificationSchema,\n JSONRPCResponseSchema,\n JSONRPCErrorSchema,\n]);\n\nexport type JSONRPCMessage = z.infer<typeof JSONRPCMessageSchema>;\n","import { z } from 'zod';\nimport { MappedTool, Tool, ToolParameters } from '../tool';\nimport { JSONObject } from '@ai-sdk/provider';\n\nexport const LATEST_PROTOCOL_VERSION = '2024-11-05';\nexport const SUPPORTED_PROTOCOL_VERSIONS = [\n LATEST_PROTOCOL_VERSION,\n '2024-10-07',\n];\n\nexport type ToolSchemas =\n | Record<string, { parameters: ToolParameters<JSONObject | unknown> }>\n | 'automatic'\n | undefined;\n\nexport type McpToolSet<TOOL_SCHEMAS extends ToolSchemas = 'automatic'> =\n TOOL_SCHEMAS extends Record<string, { parameters: ToolParameters<any> }>\n ? {\n [K in keyof TOOL_SCHEMAS]: MappedTool<TOOL_SCHEMAS[K], CallToolResult> &\n Required<\n Pick<MappedTool<TOOL_SCHEMAS[K], CallToolResult>, 'execute'>\n >;\n }\n : McpToolSet<Record<string, { parameters: ToolParameters<unknown> }>>;\n\nconst ClientOrServerImplementationSchema = z\n .object({\n name: z.string(),\n version: z.string(),\n })\n .passthrough();\nexport type Configuration = z.infer<typeof ClientOrServerImplementationSchema>;\n\nexport const BaseParamsSchema = z\n .object({\n _meta: z.optional(z.object({}).passthrough()),\n })\n .passthrough();\ntype BaseParams = z.infer<typeof BaseParamsSchema>;\nexport const ResultSchema = BaseParamsSchema;\n\nexport const RequestSchema = z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n});\nexport type Request = z.infer<typeof RequestSchema>;\nexport type RequestOptions = {\n signal?: AbortSignal;\n timeout?: number;\n maxTotalTimeout?: number;\n};\n\nexport type Notification = z.infer<typeof RequestSchema>;\n\nconst ServerCapabilitiesSchema = z\n .object({\n experimental: z.optional(z.object({}).passthrough()),\n logging: z.optional(z.object({}).passthrough()),\n prompts: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n resources: z.optional(\n z\n .object({\n subscribe: z.optional(z.boolean()),\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n tools: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n })\n .passthrough();\nexport type ServerCapabilities = z.infer<typeof ServerCapabilitiesSchema>;\n\nexport const InitializeResultSchema = ResultSchema.extend({\n protocolVersion: z.string(),\n capabilities: ServerCapabilitiesSchema,\n serverInfo: ClientOrServerImplementationSchema,\n instructions: z.optional(z.string()),\n});\nexport type InitializeResult = z.infer<typeof InitializeResultSchema>;\n\nexport type PaginatedRequest = Request & {\n params?: BaseParams & {\n cursor?: string;\n };\n};\n\nconst PaginatedResultSchema = ResultSchema.extend({\n nextCursor: z.optional(z.string()),\n});\n\nconst ToolSchema = z\n .object({\n name: z.string(),\n description: z.optional(z.string()),\n inputSchema: z\n .object({\n type: z.literal('object'),\n properties: z.optional(z.object({}).passthrough()),\n })\n .passthrough(),\n })\n .passthrough();\nexport type MCPTool = z.infer<typeof ToolSchema>;\nexport const ListToolsResultSchema = PaginatedResultSchema.extend({\n tools: z.array(ToolSchema),\n});\nexport type ListToolsResult = z.infer<typeof ListToolsResultSchema>;\n\nconst TextContentSchema = z\n .object({\n type: z.literal('text'),\n text: z.string(),\n })\n .passthrough();\nconst ImageContentSchema = z\n .object({\n type: z.literal('image'),\n data: z.string().base64(),\n mimeType: z.string(),\n })\n .passthrough();\nconst ResourceContentsSchema = z\n .object({\n /**\n * The URI of this resource.\n */\n uri: z.string(),\n /**\n * The MIME type of this resource, if known.\n */\n mimeType: z.optional(z.string()),\n })\n .passthrough();\nconst TextResourceContentsSchema = ResourceContentsSchema.extend({\n text: z.string(),\n});\nconst BlobResourceContentsSchema = ResourceContentsSchema.extend({\n blob: z.string().base64(),\n});\nconst EmbeddedResourceSchema = z\n .object({\n type: z.literal('resource'),\n resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n })\n .passthrough();\n\nexport const CallToolResultSchema = ResultSchema.extend({\n content: z.array(\n z.union([TextContentSchema, ImageContentSchema, EmbeddedResourceSchema]),\n ),\n isError: z.boolean().default(false).optional(),\n}).or(\n ResultSchema.extend({\n toolResult: z.unknown(),\n }),\n);\nexport type CallToolResult = z.infer<typeof CallToolResultSchema>;\n","export {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n NoContentGeneratedError,\n NoSuchModelError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport { InvalidArgumentError } from './invalid-argument-error';\nexport { InvalidStreamPartError } from './invalid-stream-part-error';\nexport { InvalidToolArgumentsError } from './invalid-tool-arguments-error';\nexport { NoImageGeneratedError } from './no-image-generated-error';\nexport { NoObjectGeneratedError } from './no-object-generated-error';\nexport { NoOutputSpecifiedError } from './no-output-specified-error';\nexport { NoSuchToolError } from './no-such-tool-error';\nexport { ToolCallRepairError } from './tool-call-repair-error';\nexport { ToolExecutionError } from './tool-execution-error';\nexport { MCPClientError } from './mcp-client-error';\n\nexport { InvalidDataContentError } from '../core/prompt/invalid-data-content-error';\nexport { InvalidMessageRoleError } from '../core/prompt/invalid-message-role-error';\nexport { MessageConversionError } from '../core/prompt/message-conversion-error';\nexport { DownloadError } from '../util/download-error';\nexport { RetryError } from '../util/retry-error';\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_MCPClientError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * An error occurred with the MCP client.\n */\nexport class MCPClientError extends AISDKError {\n private readonly [symbol] = true;\n\n constructor({\n name = 'MCPClientError',\n message,\n cause,\n }: {\n name?: string;\n message: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n }\n\n static isInstance(error: unknown): error is MCPClientError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { ChildProcess, spawn } from 'node:child_process';\nimport { getEnvironment } from './get-environment';\nimport { StdioConfig } from './mcp-stdio-transport';\n\nexport async function createChildProcess(\n config: StdioConfig,\n signal: AbortSignal,\n): Promise<ChildProcess> {\n return spawn(config.command, config.args ?? [], {\n env: getEnvironment(config.env),\n stdio: ['pipe', 'pipe', config.stderr ?? 'inherit'],\n shell: false,\n signal,\n windowsHide: globalThis.process.platform === 'win32' && isElectron(),\n cwd: config.cwd,\n });\n}\n\nfunction isElectron() {\n return 'type' in globalThis.process;\n}\n","/**\n * Constructs the environment variables for the child process.\n *\n * @param customEnv - Custom environment variables to merge with default environment variables.\n * @returns The environment variables for the child process.\n */\nexport function getEnvironment(\n customEnv?: Record<string, string>,\n): Record<string, string> {\n const DEFAULT_INHERITED_ENV_VARS =\n globalThis.process.platform === 'win32'\n ? [\n 'APPDATA',\n 'HOMEDRIVE',\n 'HOMEPATH',\n 'LOCALAPPDATA',\n 'PATH',\n 'PROCESSOR_ARCHITECTURE',\n 'SYSTEMDRIVE',\n 'SYSTEMROOT',\n 'TEMP',\n 'USERNAME',\n 'USERPROFILE',\n ]\n : ['HOME', 'LOGNAME', 'PATH', 'SHELL', 'TERM', 'USER'];\n\n const env: Record<string, string> = customEnv ? { ...customEnv } : {};\n\n for (const key of DEFAULT_INHERITED_ENV_VARS) {\n const value = globalThis.process.env[key];\n if (value === undefined) {\n continue;\n }\n\n if (value.startsWith('()')) {\n continue;\n }\n\n env[key] = value;\n }\n\n return env;\n}\n","import type { ChildProcess, IOType } from 'node:child_process';\nimport { Stream } from 'node:stream';\nimport {\n JSONRPCMessage,\n JSONRPCMessageSchema,\n} from '../core/tool/mcp/json-rpc-message';\nimport { MCPTransport } from '../core/tool/mcp/mcp-transport';\nimport { MCPClientError } from '../errors';\nimport { createChildProcess } from './create-child-process';\n\nexport interface StdioConfig {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n stderr?: IOType | Stream | number;\n cwd?: string;\n}\n\nexport class StdioMCPTransport implements MCPTransport {\n private process?: ChildProcess;\n private abortController: AbortController = new AbortController();\n private readBuffer: ReadBuffer = new ReadBuffer();\n private serverParams: StdioConfig;\n\n onclose?: () => void;\n onerror?: (error: unknown) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(server: StdioConfig) {\n this.serverParams = server;\n }\n\n async start(): Promise<void> {\n if (this.process) {\n throw new MCPClientError({\n message: 'StdioMCPTransport already started.',\n });\n }\n\n return new Promise(async (resolve, reject) => {\n try {\n const process = await createChildProcess(\n this.serverParams,\n this.abortController.signal,\n );\n\n this.process = process;\n\n this.process.on('error', error => {\n if (error.name === 'AbortError') {\n this.onclose?.();\n return;\n }\n\n reject(error);\n this.onerror?.(error);\n });\n\n this.process.on('spawn', () => {\n resolve();\n });\n\n this.process.on('close', _code => {\n this.process = undefined;\n this.onclose?.();\n });\n\n this.process.stdin?.on('error', error => {\n this.onerror?.(error);\n });\n\n this.process.stdout?.on('data', chunk => {\n this.readBuffer.append(chunk);\n this.processReadBuffer();\n });\n\n this.process.stdout?.on('error', error => {\n this.onerror?.(error);\n });\n } catch (error) {\n reject(error);\n this.onerror?.(error);\n }\n });\n }\n\n private processReadBuffer() {\n while (true) {\n try {\n const message = this.readBuffer.readMessage();\n if (message === null) {\n break;\n }\n\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(error as Error);\n }\n }\n }\n\n async close(): Promise<void> {\n this.abortController.abort();\n this.process = undefined;\n this.readBuffer.clear();\n }\n\n send(message: JSONRPCMessage): Promise<void> {\n return new Promise(resolve => {\n if (!this.process?.stdin) {\n throw new MCPClientError({\n message: 'StdioClientTransport not connected',\n });\n }\n\n const json = serializeMessage(message);\n if (this.process.stdin.write(json)) {\n resolve();\n } else {\n this.process.stdin.once('drain', resolve);\n }\n });\n }\n}\n\nclass ReadBuffer {\n private buffer?: Buffer;\n\n append(chunk: Buffer): void {\n this.buffer = this.buffer ? Buffer.concat([this.buffer, chunk]) : chunk;\n }\n\n readMessage(): JSONRPCMessage | null {\n if (!this.buffer) return null;\n\n const index = this.buffer.indexOf('\\n');\n if (index === -1) {\n return null;\n }\n\n const line = this.buffer.toString('utf8', 0, index);\n this.buffer = this.buffer.subarray(index + 1);\n return deserializeMessage(line);\n }\n\n clear(): void {\n this.buffer = undefined;\n }\n}\n\nfunction serializeMessage(message: JSONRPCMessage): string {\n return JSON.stringify(message) + '\\n';\n}\n\nexport function deserializeMessage(line: string): JSONRPCMessage {\n return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\n"],"mappings":"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","names":["z","z","AISDKError","name","_a","_a","_b"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../test/index.ts","../../core/test/not-implemented.ts","../../core/test/mock-embedding-model-v1.ts","../../core/test/mock-language-model-v1.ts","../../core/test/mock-values.ts","../../core/util/simulate-readable-stream.ts"],"sourcesContent":["export {\n convertArrayToReadableStream,\n mockId,\n} from '@ai-sdk/provider-utils/test';\nexport { MockEmbeddingModelV1 } from '../core/test/mock-embedding-model-v1';\nexport { MockLanguageModelV2 } from '../core/test/mock-language-model-v1';\nexport { mockValues } from '../core/test/mock-values';\n\nimport { simulateReadableStream as originalSimulateReadableStream } from '../core/util/simulate-readable-stream';\n\n/**\n * @deprecated Use `simulateReadableStream` from `ai` instead.\n */\nexport const simulateReadableStream = originalSimulateReadableStream;\n","export function notImplemented(): never {\n throw new Error('Not implemented');\n}\n","import { EmbeddingModelV1 } from '@ai-sdk/provider';\nimport { Embedding } from '../types';\nimport { EmbeddingModelUsage } from '../types/usage';\nimport { notImplemented } from './not-implemented';\n\nexport class MockEmbeddingModelV1<VALUE> implements EmbeddingModelV1<VALUE> {\n readonly specificationVersion = 'v1';\n\n readonly provider: EmbeddingModelV1<VALUE>['provider'];\n readonly modelId: EmbeddingModelV1<VALUE>['modelId'];\n readonly maxEmbeddingsPerCall: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'];\n readonly supportsParallelCalls: EmbeddingModelV1<VALUE>['supportsParallelCalls'];\n\n doEmbed: EmbeddingModelV1<VALUE>['doEmbed'];\n\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n maxEmbeddingsPerCall = 1,\n supportsParallelCalls = false,\n doEmbed = notImplemented,\n }: {\n provider?: EmbeddingModelV1<VALUE>['provider'];\n modelId?: EmbeddingModelV1<VALUE>['modelId'];\n maxEmbeddingsPerCall?:\n | EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall']\n | null;\n supportsParallelCalls?: EmbeddingModelV1<VALUE>['supportsParallelCalls'];\n doEmbed?: EmbeddingModelV1<VALUE>['doEmbed'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;\n this.supportsParallelCalls = supportsParallelCalls;\n this.doEmbed = doEmbed;\n }\n}\n\nexport function mockEmbed<VALUE>(\n expectedValues: Array<VALUE>,\n embeddings: Array<Embedding>,\n usage?: EmbeddingModelUsage,\n): EmbeddingModelV1<VALUE>['doEmbed'] {\n return async ({ values }) => {\n assert.deepStrictEqual(expectedValues, values);\n return { embeddings, usage };\n };\n}\n","import { LanguageModelV2 } from '@ai-sdk/provider';\nimport { notImplemented } from './not-implemented';\n\nexport class MockLanguageModelV2 implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n\n readonly provider: LanguageModelV2['provider'];\n readonly modelId: LanguageModelV2['modelId'];\n\n supportsUrl: LanguageModelV2['supportsUrl'];\n doGenerate: LanguageModelV2['doGenerate'];\n doStream: LanguageModelV2['doStream'];\n\n readonly defaultObjectGenerationMode: LanguageModelV2['defaultObjectGenerationMode'];\n readonly supportsStructuredOutputs: LanguageModelV2['supportsStructuredOutputs'];\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n supportsUrl = undefined,\n doGenerate = notImplemented,\n doStream = notImplemented,\n defaultObjectGenerationMode = undefined,\n supportsStructuredOutputs = undefined,\n }: {\n provider?: LanguageModelV2['provider'];\n modelId?: LanguageModelV2['modelId'];\n supportsUrl?: LanguageModelV2['supportsUrl'];\n doGenerate?: LanguageModelV2['doGenerate'];\n doStream?: LanguageModelV2['doStream'];\n defaultObjectGenerationMode?: LanguageModelV2['defaultObjectGenerationMode'];\n supportsStructuredOutputs?: LanguageModelV2['supportsStructuredOutputs'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.doGenerate = doGenerate;\n this.doStream = doStream;\n this.supportsUrl = supportsUrl;\n\n this.defaultObjectGenerationMode = defaultObjectGenerationMode;\n this.supportsStructuredOutputs = supportsStructuredOutputs;\n }\n}\n","export function mockValues<T>(...values: T[]): () => T {\n let counter = 0;\n return () => values[counter++] ?? values[values.length - 1];\n}\n","import { delay as delayFunction } from '@ai-sdk/provider-utils';\n\n/**\n * Creates a ReadableStream that emits the provided values with an optional delay between each value.\n *\n * @param options - The configuration options\n * @param options.chunks - Array of values to be emitted by the stream\n * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @returns A ReadableStream that emits the provided values\n */\nexport function simulateReadableStream<T>({\n chunks,\n initialDelayInMs = 0,\n chunkDelayInMs = 0,\n _internal,\n}: {\n chunks: T[];\n initialDelayInMs?: number | null;\n chunkDelayInMs?: number | null;\n _internal?: {\n delay?: (ms: number | null) => Promise<void>;\n };\n}): ReadableStream<T> {\n const delay = _internal?.delay ?? delayFunction;\n\n let index = 0;\n\n return new ReadableStream({\n async pull(controller) {\n if (index < chunks.length) {\n await delay(index === 0 ? initialDelayInMs : chunkDelayInMs);\n controller.enqueue(chunks[index++]);\n } else {\n controller.close();\n }\n },\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAA;AAAA;AAAA;AAAA,kBAGO;;;ACHA,SAAS,iBAAwB;AACtC,QAAM,IAAI,MAAM,iBAAiB;AACnC;;;ACGO,IAAM,uBAAN,MAAqE;AAAA,EAU1E,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,UAAU;AAAA,EACZ,IAQI,CAAC,GAAG;AAvBR,SAAS,uBAAuB;AAwB9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,uBAAuB,sDAAwB;AACpD,SAAK,wBAAwB;AAC7B,SAAK,UAAU;AAAA,EACjB;AACF;;;ACjCO,IAAM,sBAAN,MAAqD;AAAA,EAY1D,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,EAC9B,IAQI,CAAC,GAAG;AA3BR,SAAS,uBAAuB;AA4B9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,cAAc;AAEnB,SAAK,8BAA8B;AACnC,SAAK,4BAA4B;AAAA,EACnC;AACF;;;ACzCO,SAAS,cAAiB,QAAsB;AACrD,MAAI,UAAU;AACd,SAAO,MAAG;AAFZ;AAEe,wBAAO,SAAS,MAAhB,YAAqB,OAAO,OAAO,SAAS,CAAC;AAAA;AAC5D;;;ACHA,4BAAuC;AAWhC,SAAS,uBAA0B;AAAA,EACxC;AAAA,EACA,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB;AACF,GAOsB;AAvBtB;AAwBE,QAAM,SAAQ,4CAAW,UAAX,YAAoB,sBAAAC;AAElC,MAAI,QAAQ;AAEZ,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,KAAK,YAAY;AACrB,UAAI,QAAQ,OAAO,QAAQ;AACzB,cAAM,MAAM,UAAU,IAAI,mBAAmB,cAAc;AAC3D,mBAAW,QAAQ,OAAO,OAAO,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ALzBO,IAAMC,0BAAyB;","names":["simulateReadableStream","delayFunction","simulateReadableStream"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../test/index.ts","../../core/test/not-implemented.ts","../../core/test/mock-embedding-model-v1.ts","../../core/test/mock-language-model-v1.ts","../../core/test/mock-values.ts","../../core/util/simulate-readable-stream.ts"],"sourcesContent":["export {\n convertArrayToReadableStream,\n mockId,\n} from '@ai-sdk/provider-utils/test';\nexport { MockEmbeddingModelV1 } from '../core/test/mock-embedding-model-v1';\nexport { MockLanguageModelV2 } from '../core/test/mock-language-model-v1';\nexport { mockValues } from '../core/test/mock-values';\n\nimport { simulateReadableStream as originalSimulateReadableStream } from '../core/util/simulate-readable-stream';\n\n/**\n * @deprecated Use `simulateReadableStream` from `ai` instead.\n */\nexport const simulateReadableStream = originalSimulateReadableStream;\n","export function notImplemented(): never {\n throw new Error('Not implemented');\n}\n","import { EmbeddingModelV1 } from '@ai-sdk/provider';\nimport { Embedding } from '../types';\nimport { EmbeddingModelUsage } from '../types/usage';\nimport { notImplemented } from './not-implemented';\n\nexport class MockEmbeddingModelV1<VALUE> implements EmbeddingModelV1<VALUE> {\n readonly specificationVersion = 'v1';\n\n readonly provider: EmbeddingModelV1<VALUE>['provider'];\n readonly modelId: EmbeddingModelV1<VALUE>['modelId'];\n readonly maxEmbeddingsPerCall: EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall'];\n readonly supportsParallelCalls: EmbeddingModelV1<VALUE>['supportsParallelCalls'];\n\n doEmbed: EmbeddingModelV1<VALUE>['doEmbed'];\n\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n maxEmbeddingsPerCall = 1,\n supportsParallelCalls = false,\n doEmbed = notImplemented,\n }: {\n provider?: EmbeddingModelV1<VALUE>['provider'];\n modelId?: EmbeddingModelV1<VALUE>['modelId'];\n maxEmbeddingsPerCall?:\n | EmbeddingModelV1<VALUE>['maxEmbeddingsPerCall']\n | null;\n supportsParallelCalls?: EmbeddingModelV1<VALUE>['supportsParallelCalls'];\n doEmbed?: EmbeddingModelV1<VALUE>['doEmbed'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.maxEmbeddingsPerCall = maxEmbeddingsPerCall ?? undefined;\n this.supportsParallelCalls = supportsParallelCalls;\n this.doEmbed = doEmbed;\n }\n}\n\nexport function mockEmbed<VALUE>(\n expectedValues: Array<VALUE>,\n embeddings: Array<Embedding>,\n usage?: EmbeddingModelUsage,\n): EmbeddingModelV1<VALUE>['doEmbed'] {\n return async ({ values }) => {\n assert.deepStrictEqual(expectedValues, values);\n return { embeddings, usage };\n };\n}\n","import { LanguageModelV2 } from '@ai-sdk/provider';\nimport { notImplemented } from './not-implemented';\n\nexport class MockLanguageModelV2 implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\n\n readonly provider: LanguageModelV2['provider'];\n readonly modelId: LanguageModelV2['modelId'];\n\n supportsUrl: LanguageModelV2['supportsUrl'];\n doGenerate: LanguageModelV2['doGenerate'];\n doStream: LanguageModelV2['doStream'];\n\n readonly defaultObjectGenerationMode: LanguageModelV2['defaultObjectGenerationMode'];\n readonly supportsStructuredOutputs: LanguageModelV2['supportsStructuredOutputs'];\n constructor({\n provider = 'mock-provider',\n modelId = 'mock-model-id',\n supportsUrl = undefined,\n doGenerate = notImplemented,\n doStream = notImplemented,\n defaultObjectGenerationMode = undefined,\n supportsStructuredOutputs = undefined,\n }: {\n provider?: LanguageModelV2['provider'];\n modelId?: LanguageModelV2['modelId'];\n supportsUrl?: LanguageModelV2['supportsUrl'];\n doGenerate?: LanguageModelV2['doGenerate'];\n doStream?: LanguageModelV2['doStream'];\n defaultObjectGenerationMode?: LanguageModelV2['defaultObjectGenerationMode'];\n supportsStructuredOutputs?: LanguageModelV2['supportsStructuredOutputs'];\n } = {}) {\n this.provider = provider;\n this.modelId = modelId;\n this.doGenerate = doGenerate;\n this.doStream = doStream;\n this.supportsUrl = supportsUrl;\n\n this.defaultObjectGenerationMode = defaultObjectGenerationMode;\n this.supportsStructuredOutputs = supportsStructuredOutputs;\n }\n}\n","export function mockValues<T>(...values: T[]): () => T {\n let counter = 0;\n return () => values[counter++] ?? values[values.length - 1];\n}\n","import { delay as delayFunction } from '@ai-sdk/provider-utils';\n\n/**\n * Creates a ReadableStream that emits the provided values with an optional delay between each value.\n *\n * @param options - The configuration options\n * @param options.chunks - Array of values to be emitted by the stream\n * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @returns A ReadableStream that emits the provided values\n */\nexport function simulateReadableStream<T>({\n chunks,\n initialDelayInMs = 0,\n chunkDelayInMs = 0,\n _internal,\n}: {\n chunks: T[];\n initialDelayInMs?: number | null;\n chunkDelayInMs?: number | null;\n _internal?: {\n delay?: (ms: number | null) => Promise<void>;\n };\n}): ReadableStream<T> {\n const delay = _internal?.delay ?? delayFunction;\n\n let index = 0;\n\n return new ReadableStream({\n async pull(controller) {\n if (index < chunks.length) {\n await delay(index === 0 ? initialDelayInMs : chunkDelayInMs);\n controller.enqueue(chunks[index++]);\n } else {\n controller.close();\n }\n },\n });\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,OACK;;;ACHA,SAAS,iBAAwB;AACtC,QAAM,IAAI,MAAM,iBAAiB;AACnC;;;ACGO,IAAM,uBAAN,MAAqE;AAAA,EAU1E,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,UAAU;AAAA,EACZ,IAQI,CAAC,GAAG;AAvBR,SAAS,uBAAuB;AAwB9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,uBAAuB,sDAAwB;AACpD,SAAK,wBAAwB;AAC7B,SAAK,UAAU;AAAA,EACjB;AACF;;;ACjCO,IAAM,sBAAN,MAAqD;AAAA,EAY1D,YAAY;AAAA,IACV,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA,IACX,8BAA8B;AAAA,IAC9B,4BAA4B;AAAA,EAC9B,IAQI,CAAC,GAAG;AA3BR,SAAS,uBAAuB;AA4B9B,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,cAAc;AAEnB,SAAK,8BAA8B;AACnC,SAAK,4BAA4B;AAAA,EACnC;AACF;;;ACzCO,SAAS,cAAiB,QAAsB;AACrD,MAAI,UAAU;AACd,SAAO,MAAG;AAFZ;AAEe,wBAAO,SAAS,MAAhB,YAAqB,OAAO,OAAO,SAAS,CAAC;AAAA;AAC5D;;;ACHA,SAAS,SAAS,qBAAqB;AAWhC,SAAS,uBAA0B;AAAA,EACxC;AAAA,EACA,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB;AACF,GAOsB;AAvBtB;AAwBE,QAAM,SAAQ,4CAAW,UAAX,YAAoB;AAElC,MAAI,QAAQ;AAEZ,SAAO,IAAI,eAAe;AAAA,IACxB,MAAM,KAAK,YAAY;AACrB,UAAI,QAAQ,OAAO,QAAQ;AACzB,cAAM,MAAM,UAAU,IAAI,mBAAmB,cAAc;AAC3D,mBAAW,QAAQ,OAAO,OAAO,CAAC;AAAA,MACpC,OAAO;AACL,mBAAW,MAAM;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;ALzBO,IAAMA,0BAAyB;","names":["simulateReadableStream"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ai",
|
3
|
-
"version": "5.0.0-canary.
|
3
|
+
"version": "5.0.0-canary.7",
|
4
4
|
"description": "AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript",
|
5
5
|
"license": "Apache-2.0",
|
6
6
|
"sideEffects": false,
|
@@ -9,9 +9,6 @@
|
|
9
9
|
"types": "./dist/index.d.ts",
|
10
10
|
"files": [
|
11
11
|
"dist/**/*",
|
12
|
-
"mcp-stdio/**/*",
|
13
|
-
"rsc/dist/**/*",
|
14
|
-
"test/dist/**/*",
|
15
12
|
"CHANGELOG.md"
|
16
13
|
],
|
17
14
|
"exports": {
|
@@ -28,21 +25,21 @@
|
|
28
25
|
"require": "./dist/internal/index.js"
|
29
26
|
},
|
30
27
|
"./test": {
|
31
|
-
"types": "./test/
|
32
|
-
"import": "./test/
|
33
|
-
"module": "./test/
|
34
|
-
"require": "./test/
|
28
|
+
"types": "./dist/test/index.d.ts",
|
29
|
+
"import": "./dist/test/index.mjs",
|
30
|
+
"module": "./dist/test/index.mjs",
|
31
|
+
"require": "./dist/test/index.js"
|
35
32
|
},
|
36
33
|
"./mcp-stdio": {
|
37
|
-
"types": "./mcp-stdio/
|
38
|
-
"import": "./mcp-stdio/
|
39
|
-
"module": "./mcp-stdio/
|
40
|
-
"require": "./mcp-stdio/
|
34
|
+
"types": "./dist/mcp-stdio/index.d.ts",
|
35
|
+
"import": "./dist/mcp-stdio/index.mjs",
|
36
|
+
"module": "./dist/mcp-stdio/index.mjs",
|
37
|
+
"require": "./dist/mcp-stdio/index.js"
|
41
38
|
}
|
42
39
|
},
|
43
40
|
"dependencies": {
|
44
|
-
"@ai-sdk/provider": "2.0.0-canary.
|
45
|
-
"@ai-sdk/provider-utils": "3.0.0-canary.
|
41
|
+
"@ai-sdk/provider": "2.0.0-canary.5",
|
42
|
+
"@ai-sdk/provider-utils": "3.0.0-canary.6",
|
46
43
|
"@opentelemetry/api": "1.9.0",
|
47
44
|
"zod-to-json-schema": "^3.24.1"
|
48
45
|
},
|
@@ -81,11 +78,11 @@
|
|
81
78
|
"nextjs"
|
82
79
|
],
|
83
80
|
"scripts": {
|
84
|
-
"build": "tsup",
|
85
|
-
"build:watch": "tsup --watch",
|
86
|
-
"clean": "rm -rf dist
|
81
|
+
"build": "pnpm clean && tsup --tsconfig tsconfig.build.json",
|
82
|
+
"build:watch": "pnpm clean && tsup --watch",
|
83
|
+
"clean": "rm -rf dist *.tsbuildinfo",
|
87
84
|
"lint": "eslint \"./**/*.ts*\"",
|
88
|
-
"type-check": "tsc --
|
85
|
+
"type-check": "tsc --build",
|
89
86
|
"prettier-check": "prettier --check \"./**/*.ts*\"",
|
90
87
|
"test": "pnpm test:node && pnpm test:edge",
|
91
88
|
"test:edge": "vitest --config vitest.edge.config.js --run",
|
@@ -1,92 +0,0 @@
|
|
1
|
-
import { beforeEach, vi } from 'vitest';
|
2
|
-
import * as getEnvironmentModule from './get-environment';
|
3
|
-
|
4
|
-
const DEFAULT_ENV = {
|
5
|
-
PATH: 'path',
|
6
|
-
};
|
7
|
-
|
8
|
-
const mockGetEnvironment = vi
|
9
|
-
.fn()
|
10
|
-
.mockImplementation((customEnv?: Record<string, string>) => {
|
11
|
-
return {
|
12
|
-
...DEFAULT_ENV,
|
13
|
-
...customEnv,
|
14
|
-
};
|
15
|
-
});
|
16
|
-
vi.spyOn(getEnvironmentModule, 'getEnvironment').mockImplementation(
|
17
|
-
mockGetEnvironment,
|
18
|
-
);
|
19
|
-
|
20
|
-
// important: import after mocking getEnv
|
21
|
-
const { createChildProcess } = await import('./create-child-process');
|
22
|
-
|
23
|
-
describe('createChildProcess', () => {
|
24
|
-
beforeEach(() => {
|
25
|
-
vi.clearAllMocks();
|
26
|
-
});
|
27
|
-
|
28
|
-
it('should spawn a child process', async () => {
|
29
|
-
const childProcess = await createChildProcess(
|
30
|
-
{ command: process.execPath },
|
31
|
-
new AbortController().signal,
|
32
|
-
);
|
33
|
-
|
34
|
-
expect(childProcess.pid).toBeDefined();
|
35
|
-
expect(mockGetEnvironment).toHaveBeenCalledWith(undefined);
|
36
|
-
childProcess.kill();
|
37
|
-
});
|
38
|
-
|
39
|
-
it('should spawn a child process with custom env', async () => {
|
40
|
-
const customEnv = { FOO: 'bar' };
|
41
|
-
const childProcessWithCustomEnv = await createChildProcess(
|
42
|
-
{ command: process.execPath, env: customEnv },
|
43
|
-
new AbortController().signal,
|
44
|
-
);
|
45
|
-
|
46
|
-
expect(childProcessWithCustomEnv.pid).toBeDefined();
|
47
|
-
expect(mockGetEnvironment).toHaveBeenCalledWith(customEnv);
|
48
|
-
expect(mockGetEnvironment).toHaveReturnedWith({
|
49
|
-
...DEFAULT_ENV,
|
50
|
-
...customEnv,
|
51
|
-
});
|
52
|
-
childProcessWithCustomEnv.kill();
|
53
|
-
});
|
54
|
-
|
55
|
-
it('should spawn a child process with args', async () => {
|
56
|
-
const childProcessWithArgs = await createChildProcess(
|
57
|
-
{ command: process.execPath, args: ['-c', 'echo', 'test'] },
|
58
|
-
new AbortController().signal,
|
59
|
-
);
|
60
|
-
|
61
|
-
expect(childProcessWithArgs.pid).toBeDefined();
|
62
|
-
expect(childProcessWithArgs.spawnargs).toContain(process.execPath);
|
63
|
-
expect(childProcessWithArgs.spawnargs).toEqual([
|
64
|
-
process.execPath,
|
65
|
-
'-c',
|
66
|
-
'echo',
|
67
|
-
'test',
|
68
|
-
]);
|
69
|
-
childProcessWithArgs.kill();
|
70
|
-
});
|
71
|
-
|
72
|
-
it('should spawn a child process with cwd', async () => {
|
73
|
-
const childProcessWithCwd = await createChildProcess(
|
74
|
-
{ command: process.execPath, cwd: '/tmp' },
|
75
|
-
new AbortController().signal,
|
76
|
-
);
|
77
|
-
|
78
|
-
expect(childProcessWithCwd.pid).toBeDefined();
|
79
|
-
childProcessWithCwd.kill();
|
80
|
-
});
|
81
|
-
|
82
|
-
it('should spawn a child process with stderr', async () => {
|
83
|
-
const childProcessWithStderr = await createChildProcess(
|
84
|
-
{ command: process.execPath, stderr: 'pipe' },
|
85
|
-
new AbortController().signal,
|
86
|
-
);
|
87
|
-
|
88
|
-
expect(childProcessWithStderr.pid).toBeDefined();
|
89
|
-
expect(childProcessWithStderr.stderr).toBeDefined();
|
90
|
-
childProcessWithStderr.kill();
|
91
|
-
});
|
92
|
-
});
|
@@ -1,21 +0,0 @@
|
|
1
|
-
import { ChildProcess, spawn } from 'node:child_process';
|
2
|
-
import { getEnvironment } from './get-environment';
|
3
|
-
import { StdioConfig } from './mcp-stdio-transport';
|
4
|
-
|
5
|
-
export async function createChildProcess(
|
6
|
-
config: StdioConfig,
|
7
|
-
signal: AbortSignal,
|
8
|
-
): Promise<ChildProcess> {
|
9
|
-
return spawn(config.command, config.args ?? [], {
|
10
|
-
env: getEnvironment(config.env),
|
11
|
-
stdio: ['pipe', 'pipe', config.stderr ?? 'inherit'],
|
12
|
-
shell: false,
|
13
|
-
signal,
|
14
|
-
windowsHide: globalThis.process.platform === 'win32' && isElectron(),
|
15
|
-
cwd: config.cwd,
|
16
|
-
});
|
17
|
-
}
|
18
|
-
|
19
|
-
function isElectron() {
|
20
|
-
return 'type' in globalThis.process;
|
21
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../index.ts","../../core/tool/mcp/json-rpc-message.ts","../../core/tool/mcp/types.ts","../../errors/index.ts","../../errors/mcp-client-error.ts","../create-child-process.ts","../get-environment.ts","../mcp-stdio-transport.ts"],"sourcesContent":["export {\n StdioMCPTransport as Experimental_StdioMCPTransport,\n type StdioConfig,\n} from './mcp-stdio-transport';\n","import { z } from 'zod';\nimport { BaseParamsSchema, RequestSchema, ResultSchema } from './types';\n\nconst JSONRPC_VERSION = '2.0';\n\nconst JSONRPCRequestSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n })\n .merge(RequestSchema)\n .strict();\n\nexport type JSONRPCRequest = z.infer<typeof JSONRPCRequestSchema>;\n\nconst JSONRPCResponseSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n result: ResultSchema,\n })\n .strict();\n\nexport type JSONRPCResponse = z.infer<typeof JSONRPCResponseSchema>;\n\nconst JSONRPCErrorSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n error: z.object({\n code: z.number().int(),\n message: z.string(),\n data: z.optional(z.unknown()),\n }),\n })\n .strict();\n\nexport type JSONRPCError = z.infer<typeof JSONRPCErrorSchema>;\n\nconst JSONRPCNotificationSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n })\n .merge(\n z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n }),\n )\n .strict();\n\nexport type JSONRPCNotification = z.infer<typeof JSONRPCNotificationSchema>;\n\nexport const JSONRPCMessageSchema = z.union([\n JSONRPCRequestSchema,\n JSONRPCNotificationSchema,\n JSONRPCResponseSchema,\n JSONRPCErrorSchema,\n]);\n\nexport type JSONRPCMessage = z.infer<typeof JSONRPCMessageSchema>;\n","import { z } from 'zod';\nimport {\n inferParameters,\n Tool,\n ToolExecutionOptions,\n ToolParameters,\n} from '../tool';\n\nexport const LATEST_PROTOCOL_VERSION = '2024-11-05';\nexport const SUPPORTED_PROTOCOL_VERSIONS = [\n LATEST_PROTOCOL_VERSION,\n '2024-10-07',\n];\n\nexport type ToolSchemas =\n | Record<string, { parameters: ToolParameters }>\n | 'automatic'\n | undefined;\n\nexport type McpToolSet<TOOL_SCHEMAS extends ToolSchemas = 'automatic'> =\n TOOL_SCHEMAS extends Record<string, { parameters: ToolParameters }>\n ? {\n [K in keyof TOOL_SCHEMAS]: Tool<\n TOOL_SCHEMAS[K]['parameters'],\n CallToolResult\n > & {\n execute: (\n args: inferParameters<TOOL_SCHEMAS[K]['parameters']>,\n options: ToolExecutionOptions,\n ) => PromiseLike<CallToolResult>;\n };\n }\n : {\n [k: string]: Tool<z.ZodUnknown, CallToolResult> & {\n execute: (\n args: unknown,\n options: ToolExecutionOptions,\n ) => PromiseLike<CallToolResult>;\n };\n };\n\nconst ClientOrServerImplementationSchema = z\n .object({\n name: z.string(),\n version: z.string(),\n })\n .passthrough();\nexport type Configuration = z.infer<typeof ClientOrServerImplementationSchema>;\n\nexport const BaseParamsSchema = z\n .object({\n _meta: z.optional(z.object({}).passthrough()),\n })\n .passthrough();\ntype BaseParams = z.infer<typeof BaseParamsSchema>;\nexport const ResultSchema = BaseParamsSchema;\n\nexport const RequestSchema = z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n});\nexport type Request = z.infer<typeof RequestSchema>;\nexport type RequestOptions = {\n signal?: AbortSignal;\n timeout?: number;\n maxTotalTimeout?: number;\n};\n\nexport type Notification = z.infer<typeof RequestSchema>;\n\nconst ServerCapabilitiesSchema = z\n .object({\n experimental: z.optional(z.object({}).passthrough()),\n logging: z.optional(z.object({}).passthrough()),\n prompts: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n resources: z.optional(\n z\n .object({\n subscribe: z.optional(z.boolean()),\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n tools: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n })\n .passthrough();\nexport type ServerCapabilities = z.infer<typeof ServerCapabilitiesSchema>;\n\nexport const InitializeResultSchema = ResultSchema.extend({\n protocolVersion: z.string(),\n capabilities: ServerCapabilitiesSchema,\n serverInfo: ClientOrServerImplementationSchema,\n instructions: z.optional(z.string()),\n});\nexport type InitializeResult = z.infer<typeof InitializeResultSchema>;\n\nexport type PaginatedRequest = Request & {\n params?: BaseParams & {\n cursor?: string;\n };\n};\n\nconst PaginatedResultSchema = ResultSchema.extend({\n nextCursor: z.optional(z.string()),\n});\n\nconst ToolSchema = z\n .object({\n name: z.string(),\n description: z.optional(z.string()),\n inputSchema: z\n .object({\n type: z.literal('object'),\n properties: z.optional(z.object({}).passthrough()),\n })\n .passthrough(),\n })\n .passthrough();\nexport type MCPTool = z.infer<typeof ToolSchema>;\nexport const ListToolsResultSchema = PaginatedResultSchema.extend({\n tools: z.array(ToolSchema),\n});\nexport type ListToolsResult = z.infer<typeof ListToolsResultSchema>;\n\nconst TextContentSchema = z\n .object({\n type: z.literal('text'),\n text: z.string(),\n })\n .passthrough();\nconst ImageContentSchema = z\n .object({\n type: z.literal('image'),\n data: z.string().base64(),\n mimeType: z.string(),\n })\n .passthrough();\nconst ResourceContentsSchema = z\n .object({\n /**\n * The URI of this resource.\n */\n uri: z.string(),\n /**\n * The MIME type of this resource, if known.\n */\n mimeType: z.optional(z.string()),\n })\n .passthrough();\nconst TextResourceContentsSchema = ResourceContentsSchema.extend({\n text: z.string(),\n});\nconst BlobResourceContentsSchema = ResourceContentsSchema.extend({\n blob: z.string().base64(),\n});\nconst EmbeddedResourceSchema = z\n .object({\n type: z.literal('resource'),\n resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n })\n .passthrough();\n\nexport const CallToolResultSchema = ResultSchema.extend({\n content: z.array(\n z.union([TextContentSchema, ImageContentSchema, EmbeddedResourceSchema]),\n ),\n isError: z.boolean().default(false).optional(),\n}).or(\n ResultSchema.extend({\n toolResult: z.unknown(),\n }),\n);\nexport type CallToolResult = z.infer<typeof CallToolResultSchema>;\n","export {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n NoContentGeneratedError,\n NoSuchModelError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport { InvalidArgumentError } from './invalid-argument-error';\nexport { InvalidStreamPartError } from './invalid-stream-part-error';\nexport { InvalidToolArgumentsError } from './invalid-tool-arguments-error';\nexport { NoImageGeneratedError } from './no-image-generated-error';\nexport { NoObjectGeneratedError } from './no-object-generated-error';\nexport { NoOutputSpecifiedError } from './no-output-specified-error';\nexport { NoSuchToolError } from './no-such-tool-error';\nexport { ToolCallRepairError } from './tool-call-repair-error';\nexport { ToolExecutionError } from './tool-execution-error';\nexport { MCPClientError } from './mcp-client-error';\n\nexport { InvalidDataContentError } from '../core/prompt/invalid-data-content-error';\nexport { InvalidMessageRoleError } from '../core/prompt/invalid-message-role-error';\nexport { MessageConversionError } from '../core/prompt/message-conversion-error';\nexport { DownloadError } from '../util/download-error';\nexport { RetryError } from '../util/retry-error';\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_MCPClientError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * An error occurred with the MCP client.\n */\nexport class MCPClientError extends AISDKError {\n private readonly [symbol] = true;\n\n constructor({\n name = 'MCPClientError',\n message,\n cause,\n }: {\n name?: string;\n message: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n }\n\n static isInstance(error: unknown): error is MCPClientError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { ChildProcess, spawn } from 'node:child_process';\nimport { getEnvironment } from './get-environment';\nimport { StdioConfig } from './mcp-stdio-transport';\n\nexport async function createChildProcess(\n config: StdioConfig,\n signal: AbortSignal,\n): Promise<ChildProcess> {\n return spawn(config.command, config.args ?? [], {\n env: getEnvironment(config.env),\n stdio: ['pipe', 'pipe', config.stderr ?? 'inherit'],\n shell: false,\n signal,\n windowsHide: globalThis.process.platform === 'win32' && isElectron(),\n cwd: config.cwd,\n });\n}\n\nfunction isElectron() {\n return 'type' in globalThis.process;\n}\n","/**\n * Constructs the environment variables for the child process.\n *\n * @param customEnv - Custom environment variables to merge with default environment variables.\n * @returns The environment variables for the child process.\n */\nexport function getEnvironment(\n customEnv?: Record<string, string>,\n): Record<string, string> {\n const DEFAULT_INHERITED_ENV_VARS =\n globalThis.process.platform === 'win32'\n ? [\n 'APPDATA',\n 'HOMEDRIVE',\n 'HOMEPATH',\n 'LOCALAPPDATA',\n 'PATH',\n 'PROCESSOR_ARCHITECTURE',\n 'SYSTEMDRIVE',\n 'SYSTEMROOT',\n 'TEMP',\n 'USERNAME',\n 'USERPROFILE',\n ]\n : ['HOME', 'LOGNAME', 'PATH', 'SHELL', 'TERM', 'USER'];\n\n const env: Record<string, string> = customEnv ? { ...customEnv } : {};\n\n for (const key of DEFAULT_INHERITED_ENV_VARS) {\n const value = globalThis.process.env[key];\n if (value === undefined) {\n continue;\n }\n\n if (value.startsWith('()')) {\n continue;\n }\n\n env[key] = value;\n }\n\n return env;\n}\n","import type { ChildProcess, IOType } from 'node:child_process';\nimport { Stream } from 'node:stream';\nimport {\n JSONRPCMessage,\n JSONRPCMessageSchema,\n} from '../core/tool/mcp/json-rpc-message';\nimport { MCPTransport } from '../core/tool/mcp/mcp-transport';\nimport { MCPClientError } from '../errors';\nimport { createChildProcess } from './create-child-process';\n\nexport interface StdioConfig {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n stderr?: IOType | Stream | number;\n cwd?: string;\n}\n\nexport class StdioMCPTransport implements MCPTransport {\n private process?: ChildProcess;\n private abortController: AbortController = new AbortController();\n private readBuffer: ReadBuffer = new ReadBuffer();\n private serverParams: StdioConfig;\n\n onclose?: () => void;\n onerror?: (error: unknown) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(server: StdioConfig) {\n this.serverParams = server;\n }\n\n async start(): Promise<void> {\n if (this.process) {\n throw new MCPClientError({\n message: 'StdioMCPTransport already started.',\n });\n }\n\n return new Promise(async (resolve, reject) => {\n try {\n const process = await createChildProcess(\n this.serverParams,\n this.abortController.signal,\n );\n\n this.process = process;\n\n this.process.on('error', error => {\n if (error.name === 'AbortError') {\n this.onclose?.();\n return;\n }\n\n reject(error);\n this.onerror?.(error);\n });\n\n this.process.on('spawn', () => {\n resolve();\n });\n\n this.process.on('close', _code => {\n this.process = undefined;\n this.onclose?.();\n });\n\n this.process.stdin?.on('error', error => {\n this.onerror?.(error);\n });\n\n this.process.stdout?.on('data', chunk => {\n this.readBuffer.append(chunk);\n this.processReadBuffer();\n });\n\n this.process.stdout?.on('error', error => {\n this.onerror?.(error);\n });\n } catch (error) {\n reject(error);\n this.onerror?.(error);\n }\n });\n }\n\n private processReadBuffer() {\n while (true) {\n try {\n const message = this.readBuffer.readMessage();\n if (message === null) {\n break;\n }\n\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(error as Error);\n }\n }\n }\n\n async close(): Promise<void> {\n this.abortController.abort();\n this.process = undefined;\n this.readBuffer.clear();\n }\n\n send(message: JSONRPCMessage): Promise<void> {\n return new Promise(resolve => {\n if (!this.process?.stdin) {\n throw new MCPClientError({\n message: 'StdioClientTransport not connected',\n });\n }\n\n const json = serializeMessage(message);\n if (this.process.stdin.write(json)) {\n resolve();\n } else {\n this.process.stdin.once('drain', resolve);\n }\n });\n }\n}\n\nclass ReadBuffer {\n private buffer?: Buffer;\n\n append(chunk: Buffer): void {\n this.buffer = this.buffer ? Buffer.concat([this.buffer, chunk]) : chunk;\n }\n\n readMessage(): JSONRPCMessage | null {\n if (!this.buffer) return null;\n\n const index = this.buffer.indexOf('\\n');\n if (index === -1) {\n return null;\n }\n\n const line = this.buffer.toString('utf8', 0, index);\n this.buffer = this.buffer.subarray(index + 1);\n return deserializeMessage(line);\n }\n\n clear(): void {\n this.buffer = undefined;\n }\n}\n\nfunction serializeMessage(message: JSONRPCMessage): string {\n return JSON.stringify(message) + '\\n';\n}\n\nexport function deserializeMessage(line: string): JSONRPCMessage {\n return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,cAAkB;;;ACAlB,iBAAkB;AAyClB,IAAM,qCAAqC,aACxC,OAAO;AAAA,EACN,MAAM,aAAE,OAAO;AAAA,EACf,SAAS,aAAE,OAAO;AACpB,CAAC,EACA,YAAY;AAGR,IAAM,mBAAmB,aAC7B,OAAO;AAAA,EACN,OAAO,aAAE,SAAS,aAAE,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC;AAC9C,CAAC,EACA,YAAY;AAER,IAAM,eAAe;AAErB,IAAM,gBAAgB,aAAE,OAAO;AAAA,EACpC,QAAQ,aAAE,OAAO;AAAA,EACjB,QAAQ,aAAE,SAAS,gBAAgB;AACrC,CAAC;AAUD,IAAM,2BAA2B,aAC9B,OAAO;AAAA,EACN,cAAc,aAAE,SAAS,aAAE,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC;AAAA,EACnD,SAAS,aAAE,SAAS,aAAE,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC;AAAA,EAC9C,SAAS,aAAE;AAAA,IACT,aACG,OAAO;AAAA,MACN,aAAa,aAAE,SAAS,aAAE,QAAQ,CAAC;AAAA,IACrC,CAAC,EACA,YAAY;AAAA,EACjB;AAAA,EACA,WAAW,aAAE;AAAA,IACX,aACG,OAAO;AAAA,MACN,WAAW,aAAE,SAAS,aAAE,QAAQ,CAAC;AAAA,MACjC,aAAa,aAAE,SAAS,aAAE,QAAQ,CAAC;AAAA,IACrC,CAAC,EACA,YAAY;AAAA,EACjB;AAAA,EACA,OAAO,aAAE;AAAA,IACP,aACG,OAAO;AAAA,MACN,aAAa,aAAE,SAAS,aAAE,QAAQ,CAAC;AAAA,IACrC,CAAC,EACA,YAAY;AAAA,EACjB;AACF,CAAC,EACA,YAAY;AAGR,IAAM,yBAAyB,aAAa,OAAO;AAAA,EACxD,iBAAiB,aAAE,OAAO;AAAA,EAC1B,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc,aAAE,SAAS,aAAE,OAAO,CAAC;AACrC,CAAC;AASD,IAAM,wBAAwB,aAAa,OAAO;AAAA,EAChD,YAAY,aAAE,SAAS,aAAE,OAAO,CAAC;AACnC,CAAC;AAED,IAAM,aAAa,aAChB,OAAO;AAAA,EACN,MAAM,aAAE,OAAO;AAAA,EACf,aAAa,aAAE,SAAS,aAAE,OAAO,CAAC;AAAA,EAClC,aAAa,aACV,OAAO;AAAA,IACN,MAAM,aAAE,QAAQ,QAAQ;AAAA,IACxB,YAAY,aAAE,SAAS,aAAE,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC;AAAA,EACnD,CAAC,EACA,YAAY;AACjB,CAAC,EACA,YAAY;AAER,IAAM,wBAAwB,sBAAsB,OAAO;AAAA,EAChE,OAAO,aAAE,MAAM,UAAU;AAC3B,CAAC;AAGD,IAAM,oBAAoB,aACvB,OAAO;AAAA,EACN,MAAM,aAAE,QAAQ,MAAM;AAAA,EACtB,MAAM,aAAE,OAAO;AACjB,CAAC,EACA,YAAY;AACf,IAAM,qBAAqB,aACxB,OAAO;AAAA,EACN,MAAM,aAAE,QAAQ,OAAO;AAAA,EACvB,MAAM,aAAE,OAAO,EAAE,OAAO;AAAA,EACxB,UAAU,aAAE,OAAO;AACrB,CAAC,EACA,YAAY;AACf,IAAM,yBAAyB,aAC5B,OAAO;AAAA;AAAA;AAAA;AAAA,EAIN,KAAK,aAAE,OAAO;AAAA;AAAA;AAAA;AAAA,EAId,UAAU,aAAE,SAAS,aAAE,OAAO,CAAC;AACjC,CAAC,EACA,YAAY;AACf,IAAM,6BAA6B,uBAAuB,OAAO;AAAA,EAC/D,MAAM,aAAE,OAAO;AACjB,CAAC;AACD,IAAM,6BAA6B,uBAAuB,OAAO;AAAA,EAC/D,MAAM,aAAE,OAAO,EAAE,OAAO;AAC1B,CAAC;AACD,IAAM,yBAAyB,aAC5B,OAAO;AAAA,EACN,MAAM,aAAE,QAAQ,UAAU;AAAA,EAC1B,UAAU,aAAE,MAAM,CAAC,4BAA4B,0BAA0B,CAAC;AAC5E,CAAC,EACA,YAAY;AAER,IAAM,uBAAuB,aAAa,OAAO;AAAA,EACtD,SAAS,aAAE;AAAA,IACT,aAAE,MAAM,CAAC,mBAAmB,oBAAoB,sBAAsB,CAAC;AAAA,EACzE;AAAA,EACA,SAAS,aAAE,QAAQ,EAAE,QAAQ,KAAK,EAAE,SAAS;AAC/C,CAAC,EAAE;AAAA,EACD,aAAa,OAAO;AAAA,IAClB,YAAY,aAAE,QAAQ;AAAA,EACxB,CAAC;AACH;;;ADpLA,IAAM,kBAAkB;AAExB,IAAM,uBAAuB,cAC1B,OAAO;AAAA,EACN,SAAS,cAAE,QAAQ,eAAe;AAAA,EAClC,IAAI,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC,EACA,MAAM,aAAa,EACnB,OAAO;AAIV,IAAM,wBAAwB,cAC3B,OAAO;AAAA,EACN,SAAS,cAAE,QAAQ,eAAe;AAAA,EAClC,IAAI,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAAA,EAC1C,QAAQ;AACV,CAAC,EACA,OAAO;AAIV,IAAM,qBAAqB,cACxB,OAAO;AAAA,EACN,SAAS,cAAE,QAAQ,eAAe;AAAA,EAClC,IAAI,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAAA,EAC1C,OAAO,cAAE,OAAO;AAAA,IACd,MAAM,cAAE,OAAO,EAAE,IAAI;AAAA,IACrB,SAAS,cAAE,OAAO;AAAA,IAClB,MAAM,cAAE,SAAS,cAAE,QAAQ,CAAC;AAAA,EAC9B,CAAC;AACH,CAAC,EACA,OAAO;AAIV,IAAM,4BAA4B,cAC/B,OAAO;AAAA,EACN,SAAS,cAAE,QAAQ,eAAe;AACpC,CAAC,EACA;AAAA,EACC,cAAE,OAAO;AAAA,IACP,QAAQ,cAAE,OAAO;AAAA,IACjB,QAAQ,cAAE,SAAS,gBAAgB;AAAA,EACrC,CAAC;AACH,EACC,OAAO;AAIH,IAAM,uBAAuB,cAAE,MAAM;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;AE1DD,IAAAC,mBAYO;;;ACZP,sBAA2B;AAE3B,IAAM,OAAO;AACb,IAAM,SAAS,mBAAmB,IAAI;AACtC,IAAM,SAAS,OAAO,IAAI,MAAM;AAJhC;AASO,IAAM,iBAAN,cAA6B,2BAAW;AAAA,EAG7C,YAAY;AAAA,IACV,MAAAC,QAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF,GAIG;AACD,UAAM,EAAE,MAAAA,OAAM,SAAS,MAAM,CAAC;AAXhC,SAAkB,MAAU;AAAA,EAY5B;AAAA,EAEA,OAAO,WAAW,OAAyC;AACzD,WAAO,2BAAW,UAAU,OAAO,MAAM;AAAA,EAC3C;AACF;AAjBoB;;;ACVpB,gCAAoC;;;ACM7B,SAAS,eACd,WACwB;AACxB,QAAM,6BACJ,WAAW,QAAQ,aAAa,UAC5B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IACA,CAAC,QAAQ,WAAW,QAAQ,SAAS,QAAQ,MAAM;AAEzD,QAAM,MAA8B,YAAY,EAAE,GAAG,UAAU,IAAI,CAAC;AAEpE,aAAW,OAAO,4BAA4B;AAC5C,UAAM,QAAQ,WAAW,QAAQ,IAAI,GAAG;AACxC,QAAI,UAAU,QAAW;AACvB;AAAA,IACF;AAEA,QAAI,MAAM,WAAW,IAAI,GAAG;AAC1B;AAAA,IACF;AAEA,QAAI,GAAG,IAAI;AAAA,EACb;AAEA,SAAO;AACT;;;ADtCA,eAAsB,mBACpB,QACA,QACuB;AAPzB,MAAAC,KAAA;AAQE,aAAO,iCAAM,OAAO,UAASA,MAAA,OAAO,SAAP,OAAAA,MAAe,CAAC,GAAG;AAAA,IAC9C,KAAK,eAAe,OAAO,GAAG;AAAA,IAC9B,OAAO,CAAC,QAAQ,SAAQ,YAAO,WAAP,YAAiB,SAAS;AAAA,IAClD,OAAO;AAAA,IACP;AAAA,IACA,aAAa,WAAW,QAAQ,aAAa,WAAW,WAAW;AAAA,IACnE,KAAK,OAAO;AAAA,EACd,CAAC;AACH;AAEA,SAAS,aAAa;AACpB,SAAO,UAAU,WAAW;AAC9B;;;AEFO,IAAM,oBAAN,MAAgD;AAAA,EAUrD,YAAY,QAAqB;AARjC,SAAQ,kBAAmC,IAAI,gBAAgB;AAC/D,SAAQ,aAAyB,IAAI,WAAW;AAQ9C,SAAK,eAAe;AAAA,EACtB;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,SAAS;AAChB,YAAM,IAAI,eAAe;AAAA,QACvB,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAvClD,UAAAC,KAAA;AAwCM,UAAI;AACF,cAAM,UAAU,MAAM;AAAA,UACpB,KAAK;AAAA,UACL,KAAK,gBAAgB;AAAA,QACvB;AAEA,aAAK,UAAU;AAEf,aAAK,QAAQ,GAAG,SAAS,WAAS;AAhD1C,cAAAA,KAAAC;AAiDU,cAAI,MAAM,SAAS,cAAc;AAC/B,aAAAD,MAAA,KAAK,YAAL,gBAAAA,IAAA;AACA;AAAA,UACF;AAEA,iBAAO,KAAK;AACZ,WAAAC,MAAA,KAAK,YAAL,gBAAAA,IAAA,WAAe;AAAA,QACjB,CAAC;AAED,aAAK,QAAQ,GAAG,SAAS,MAAM;AAC7B,kBAAQ;AAAA,QACV,CAAC;AAED,aAAK,QAAQ,GAAG,SAAS,WAAS;AA9D1C,cAAAD;AA+DU,eAAK,UAAU;AACf,WAAAA,MAAA,KAAK,YAAL,gBAAAA,IAAA;AAAA,QACF,CAAC;AAED,SAAAA,MAAA,KAAK,QAAQ,UAAb,gBAAAA,IAAoB,GAAG,SAAS,WAAS;AAnEjD,cAAAA;AAoEU,WAAAA,MAAA,KAAK,YAAL,gBAAAA,IAAA,WAAe;AAAA,QACjB;AAEA,mBAAK,QAAQ,WAAb,mBAAqB,GAAG,QAAQ,WAAS;AACvC,eAAK,WAAW,OAAO,KAAK;AAC5B,eAAK,kBAAkB;AAAA,QACzB;AAEA,mBAAK,QAAQ,WAAb,mBAAqB,GAAG,SAAS,WAAS;AA5ElD,cAAAA;AA6EU,WAAAA,MAAA,KAAK,YAAL,gBAAAA,IAAA,WAAe;AAAA,QACjB;AAAA,MACF,SAAS,OAAO;AACd,eAAO,KAAK;AACZ,mBAAK,YAAL,8BAAe;AAAA,MACjB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEQ,oBAAoB;AAtF9B,QAAAA,KAAA;AAuFI,WAAO,MAAM;AACX,UAAI;AACF,cAAM,UAAU,KAAK,WAAW,YAAY;AAC5C,YAAI,YAAY,MAAM;AACpB;AAAA,QACF;AAEA,SAAAA,MAAA,KAAK,cAAL,gBAAAA,IAAA,WAAiB;AAAA,MACnB,SAAS,OAAO;AACd,mBAAK,YAAL,8BAAe;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,QAAuB;AAC3B,SAAK,gBAAgB,MAAM;AAC3B,SAAK,UAAU;AACf,SAAK,WAAW,MAAM;AAAA,EACxB;AAAA,EAEA,KAAK,SAAwC;AAC3C,WAAO,IAAI,QAAQ,aAAW;AA5GlC,UAAAA;AA6GM,UAAI,GAACA,MAAA,KAAK,YAAL,gBAAAA,IAAc,QAAO;AACxB,cAAM,IAAI,eAAe;AAAA,UACvB,SAAS;AAAA,QACX,CAAC;AAAA,MACH;AAEA,YAAM,OAAO,iBAAiB,OAAO;AACrC,UAAI,KAAK,QAAQ,MAAM,MAAM,IAAI,GAAG;AAClC,gBAAQ;AAAA,MACV,OAAO;AACL,aAAK,QAAQ,MAAM,KAAK,SAAS,OAAO;AAAA,MAC1C;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,aAAN,MAAiB;AAAA,EAGf,OAAO,OAAqB;AAC1B,SAAK,SAAS,KAAK,SAAS,OAAO,OAAO,CAAC,KAAK,QAAQ,KAAK,CAAC,IAAI;AAAA,EACpE;AAAA,EAEA,cAAqC;AACnC,QAAI,CAAC,KAAK;AAAQ,aAAO;AAEzB,UAAM,QAAQ,KAAK,OAAO,QAAQ,IAAI;AACtC,QAAI,UAAU,IAAI;AAChB,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,KAAK,OAAO,SAAS,QAAQ,GAAG,KAAK;AAClD,SAAK,SAAS,KAAK,OAAO,SAAS,QAAQ,CAAC;AAC5C,WAAO,mBAAmB,IAAI;AAAA,EAChC;AAAA,EAEA,QAAc;AACZ,SAAK,SAAS;AAAA,EAChB;AACF;AAEA,SAAS,iBAAiB,SAAiC;AACzD,SAAO,KAAK,UAAU,OAAO,IAAI;AACnC;AAEO,SAAS,mBAAmB,MAA8B;AAC/D,SAAO,qBAAqB,MAAM,KAAK,MAAM,IAAI,CAAC;AACpD;","names":["import_zod","import_provider","name","_a","_a","_b"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"sources":["../../core/tool/mcp/json-rpc-message.ts","../../core/tool/mcp/types.ts","../../errors/index.ts","../../errors/mcp-client-error.ts","../create-child-process.ts","../get-environment.ts","../mcp-stdio-transport.ts"],"sourcesContent":["import { z } from 'zod';\nimport { BaseParamsSchema, RequestSchema, ResultSchema } from './types';\n\nconst JSONRPC_VERSION = '2.0';\n\nconst JSONRPCRequestSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n })\n .merge(RequestSchema)\n .strict();\n\nexport type JSONRPCRequest = z.infer<typeof JSONRPCRequestSchema>;\n\nconst JSONRPCResponseSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n result: ResultSchema,\n })\n .strict();\n\nexport type JSONRPCResponse = z.infer<typeof JSONRPCResponseSchema>;\n\nconst JSONRPCErrorSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n error: z.object({\n code: z.number().int(),\n message: z.string(),\n data: z.optional(z.unknown()),\n }),\n })\n .strict();\n\nexport type JSONRPCError = z.infer<typeof JSONRPCErrorSchema>;\n\nconst JSONRPCNotificationSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n })\n .merge(\n z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n }),\n )\n .strict();\n\nexport type JSONRPCNotification = z.infer<typeof JSONRPCNotificationSchema>;\n\nexport const JSONRPCMessageSchema = z.union([\n JSONRPCRequestSchema,\n JSONRPCNotificationSchema,\n JSONRPCResponseSchema,\n JSONRPCErrorSchema,\n]);\n\nexport type JSONRPCMessage = z.infer<typeof JSONRPCMessageSchema>;\n","import { z } from 'zod';\nimport {\n inferParameters,\n Tool,\n ToolExecutionOptions,\n ToolParameters,\n} from '../tool';\n\nexport const LATEST_PROTOCOL_VERSION = '2024-11-05';\nexport const SUPPORTED_PROTOCOL_VERSIONS = [\n LATEST_PROTOCOL_VERSION,\n '2024-10-07',\n];\n\nexport type ToolSchemas =\n | Record<string, { parameters: ToolParameters }>\n | 'automatic'\n | undefined;\n\nexport type McpToolSet<TOOL_SCHEMAS extends ToolSchemas = 'automatic'> =\n TOOL_SCHEMAS extends Record<string, { parameters: ToolParameters }>\n ? {\n [K in keyof TOOL_SCHEMAS]: Tool<\n TOOL_SCHEMAS[K]['parameters'],\n CallToolResult\n > & {\n execute: (\n args: inferParameters<TOOL_SCHEMAS[K]['parameters']>,\n options: ToolExecutionOptions,\n ) => PromiseLike<CallToolResult>;\n };\n }\n : {\n [k: string]: Tool<z.ZodUnknown, CallToolResult> & {\n execute: (\n args: unknown,\n options: ToolExecutionOptions,\n ) => PromiseLike<CallToolResult>;\n };\n };\n\nconst ClientOrServerImplementationSchema = z\n .object({\n name: z.string(),\n version: z.string(),\n })\n .passthrough();\nexport type Configuration = z.infer<typeof ClientOrServerImplementationSchema>;\n\nexport const BaseParamsSchema = z\n .object({\n _meta: z.optional(z.object({}).passthrough()),\n })\n .passthrough();\ntype BaseParams = z.infer<typeof BaseParamsSchema>;\nexport const ResultSchema = BaseParamsSchema;\n\nexport const RequestSchema = z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n});\nexport type Request = z.infer<typeof RequestSchema>;\nexport type RequestOptions = {\n signal?: AbortSignal;\n timeout?: number;\n maxTotalTimeout?: number;\n};\n\nexport type Notification = z.infer<typeof RequestSchema>;\n\nconst ServerCapabilitiesSchema = z\n .object({\n experimental: z.optional(z.object({}).passthrough()),\n logging: z.optional(z.object({}).passthrough()),\n prompts: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n resources: z.optional(\n z\n .object({\n subscribe: z.optional(z.boolean()),\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n tools: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n })\n .passthrough();\nexport type ServerCapabilities = z.infer<typeof ServerCapabilitiesSchema>;\n\nexport const InitializeResultSchema = ResultSchema.extend({\n protocolVersion: z.string(),\n capabilities: ServerCapabilitiesSchema,\n serverInfo: ClientOrServerImplementationSchema,\n instructions: z.optional(z.string()),\n});\nexport type InitializeResult = z.infer<typeof InitializeResultSchema>;\n\nexport type PaginatedRequest = Request & {\n params?: BaseParams & {\n cursor?: string;\n };\n};\n\nconst PaginatedResultSchema = ResultSchema.extend({\n nextCursor: z.optional(z.string()),\n});\n\nconst ToolSchema = z\n .object({\n name: z.string(),\n description: z.optional(z.string()),\n inputSchema: z\n .object({\n type: z.literal('object'),\n properties: z.optional(z.object({}).passthrough()),\n })\n .passthrough(),\n })\n .passthrough();\nexport type MCPTool = z.infer<typeof ToolSchema>;\nexport const ListToolsResultSchema = PaginatedResultSchema.extend({\n tools: z.array(ToolSchema),\n});\nexport type ListToolsResult = z.infer<typeof ListToolsResultSchema>;\n\nconst TextContentSchema = z\n .object({\n type: z.literal('text'),\n text: z.string(),\n })\n .passthrough();\nconst ImageContentSchema = z\n .object({\n type: z.literal('image'),\n data: z.string().base64(),\n mimeType: z.string(),\n })\n .passthrough();\nconst ResourceContentsSchema = z\n .object({\n /**\n * The URI of this resource.\n */\n uri: z.string(),\n /**\n * The MIME type of this resource, if known.\n */\n mimeType: z.optional(z.string()),\n })\n .passthrough();\nconst TextResourceContentsSchema = ResourceContentsSchema.extend({\n text: z.string(),\n});\nconst BlobResourceContentsSchema = ResourceContentsSchema.extend({\n blob: z.string().base64(),\n});\nconst EmbeddedResourceSchema = z\n .object({\n type: z.literal('resource'),\n resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n })\n .passthrough();\n\nexport const CallToolResultSchema = ResultSchema.extend({\n content: z.array(\n z.union([TextContentSchema, ImageContentSchema, EmbeddedResourceSchema]),\n ),\n isError: z.boolean().default(false).optional(),\n}).or(\n ResultSchema.extend({\n toolResult: z.unknown(),\n }),\n);\nexport type CallToolResult = z.infer<typeof CallToolResultSchema>;\n","export {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n NoContentGeneratedError,\n NoSuchModelError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport { InvalidArgumentError } from './invalid-argument-error';\nexport { InvalidStreamPartError } from './invalid-stream-part-error';\nexport { InvalidToolArgumentsError } from './invalid-tool-arguments-error';\nexport { NoImageGeneratedError } from './no-image-generated-error';\nexport { NoObjectGeneratedError } from './no-object-generated-error';\nexport { NoOutputSpecifiedError } from './no-output-specified-error';\nexport { NoSuchToolError } from './no-such-tool-error';\nexport { ToolCallRepairError } from './tool-call-repair-error';\nexport { ToolExecutionError } from './tool-execution-error';\nexport { MCPClientError } from './mcp-client-error';\n\nexport { InvalidDataContentError } from '../core/prompt/invalid-data-content-error';\nexport { InvalidMessageRoleError } from '../core/prompt/invalid-message-role-error';\nexport { MessageConversionError } from '../core/prompt/message-conversion-error';\nexport { DownloadError } from '../util/download-error';\nexport { RetryError } from '../util/retry-error';\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_MCPClientError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * An error occurred with the MCP client.\n */\nexport class MCPClientError extends AISDKError {\n private readonly [symbol] = true;\n\n constructor({\n name = 'MCPClientError',\n message,\n cause,\n }: {\n name?: string;\n message: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n }\n\n static isInstance(error: unknown): error is MCPClientError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { ChildProcess, spawn } from 'node:child_process';\nimport { getEnvironment } from './get-environment';\nimport { StdioConfig } from './mcp-stdio-transport';\n\nexport async function createChildProcess(\n config: StdioConfig,\n signal: AbortSignal,\n): Promise<ChildProcess> {\n return spawn(config.command, config.args ?? [], {\n env: getEnvironment(config.env),\n stdio: ['pipe', 'pipe', config.stderr ?? 'inherit'],\n shell: false,\n signal,\n windowsHide: globalThis.process.platform === 'win32' && isElectron(),\n cwd: config.cwd,\n });\n}\n\nfunction isElectron() {\n return 'type' in globalThis.process;\n}\n","/**\n * Constructs the environment variables for the child process.\n *\n * @param customEnv - Custom environment variables to merge with default environment variables.\n * @returns The environment variables for the child process.\n */\nexport function getEnvironment(\n customEnv?: Record<string, string>,\n): Record<string, string> {\n const DEFAULT_INHERITED_ENV_VARS =\n globalThis.process.platform === 'win32'\n ? [\n 'APPDATA',\n 'HOMEDRIVE',\n 'HOMEPATH',\n 'LOCALAPPDATA',\n 'PATH',\n 'PROCESSOR_ARCHITECTURE',\n 'SYSTEMDRIVE',\n 'SYSTEMROOT',\n 'TEMP',\n 'USERNAME',\n 'USERPROFILE',\n ]\n : ['HOME', 'LOGNAME', 'PATH', 'SHELL', 'TERM', 'USER'];\n\n const env: Record<string, string> = customEnv ? { ...customEnv } : {};\n\n for (const key of DEFAULT_INHERITED_ENV_VARS) {\n const value = globalThis.process.env[key];\n if (value === undefined) {\n continue;\n }\n\n if (value.startsWith('()')) {\n continue;\n }\n\n env[key] = value;\n }\n\n return env;\n}\n","import type { ChildProcess, IOType } from 'node:child_process';\nimport { Stream } from 'node:stream';\nimport {\n JSONRPCMessage,\n JSONRPCMessageSchema,\n} from '../core/tool/mcp/json-rpc-message';\nimport { MCPTransport } from '../core/tool/mcp/mcp-transport';\nimport { MCPClientError } from '../errors';\nimport { createChildProcess } from './create-child-process';\n\nexport interface StdioConfig {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n stderr?: IOType | Stream | number;\n cwd?: string;\n}\n\nexport class StdioMCPTransport implements MCPTransport {\n private process?: ChildProcess;\n private abortController: AbortController = new AbortController();\n private readBuffer: ReadBuffer = new ReadBuffer();\n private serverParams: StdioConfig;\n\n onclose?: () => void;\n onerror?: (error: unknown) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor(server: StdioConfig) {\n this.serverParams = server;\n }\n\n async start(): Promise<void> {\n if (this.process) {\n throw new MCPClientError({\n message: 'StdioMCPTransport already started.',\n });\n }\n\n return new Promise(async (resolve, reject) => {\n try {\n const process = await createChildProcess(\n this.serverParams,\n this.abortController.signal,\n );\n\n this.process = process;\n\n this.process.on('error', error => {\n if (error.name === 'AbortError') {\n this.onclose?.();\n return;\n }\n\n reject(error);\n this.onerror?.(error);\n });\n\n this.process.on('spawn', () => {\n resolve();\n });\n\n this.process.on('close', _code => {\n this.process = undefined;\n this.onclose?.();\n });\n\n this.process.stdin?.on('error', error => {\n this.onerror?.(error);\n });\n\n this.process.stdout?.on('data', chunk => {\n this.readBuffer.append(chunk);\n this.processReadBuffer();\n });\n\n this.process.stdout?.on('error', error => {\n this.onerror?.(error);\n });\n } catch (error) {\n reject(error);\n this.onerror?.(error);\n }\n });\n }\n\n private processReadBuffer() {\n while (true) {\n try {\n const message = this.readBuffer.readMessage();\n if (message === null) {\n break;\n }\n\n this.onmessage?.(message);\n } catch (error) {\n this.onerror?.(error as Error);\n }\n }\n }\n\n async close(): Promise<void> {\n this.abortController.abort();\n this.process = undefined;\n this.readBuffer.clear();\n }\n\n send(message: JSONRPCMessage): Promise<void> {\n return new Promise(resolve => {\n if (!this.process?.stdin) {\n throw new MCPClientError({\n message: 'StdioClientTransport not connected',\n });\n }\n\n const json = serializeMessage(message);\n if (this.process.stdin.write(json)) {\n resolve();\n } else {\n this.process.stdin.once('drain', resolve);\n }\n });\n }\n}\n\nclass ReadBuffer {\n private buffer?: Buffer;\n\n append(chunk: Buffer): void {\n this.buffer = this.buffer ? Buffer.concat([this.buffer, chunk]) : chunk;\n }\n\n readMessage(): JSONRPCMessage | null {\n if (!this.buffer) return null;\n\n const index = this.buffer.indexOf('\\n');\n if (index === -1) {\n return null;\n }\n\n const line = this.buffer.toString('utf8', 0, index);\n this.buffer = this.buffer.subarray(index + 1);\n return deserializeMessage(line);\n }\n\n clear(): void {\n this.buffer = undefined;\n }\n}\n\nfunction serializeMessage(message: JSONRPCMessage): string {\n return JSON.stringify(message) + '\\n';\n}\n\nexport function deserializeMessage(line: string): JSONRPCMessage {\n return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\n"],"mappings":"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","names":["z","z","AISDKError","name","_a","_a","_b"]}
|
@@ -1,13 +0,0 @@
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
2
|
-
import { getEnvironment } from './get-environment';
|
3
|
-
|
4
|
-
describe('getEnvironment', () => {
|
5
|
-
it('should not mutate the original custom environment object', () => {
|
6
|
-
const customEnv = { CUSTOM_VAR: 'custom_value' };
|
7
|
-
|
8
|
-
const result = getEnvironment(customEnv);
|
9
|
-
|
10
|
-
expect(customEnv).toStrictEqual({ CUSTOM_VAR: 'custom_value' });
|
11
|
-
expect(result).not.toBe(customEnv);
|
12
|
-
});
|
13
|
-
});
|
@@ -1,43 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Constructs the environment variables for the child process.
|
3
|
-
*
|
4
|
-
* @param customEnv - Custom environment variables to merge with default environment variables.
|
5
|
-
* @returns The environment variables for the child process.
|
6
|
-
*/
|
7
|
-
export function getEnvironment(
|
8
|
-
customEnv?: Record<string, string>,
|
9
|
-
): Record<string, string> {
|
10
|
-
const DEFAULT_INHERITED_ENV_VARS =
|
11
|
-
globalThis.process.platform === 'win32'
|
12
|
-
? [
|
13
|
-
'APPDATA',
|
14
|
-
'HOMEDRIVE',
|
15
|
-
'HOMEPATH',
|
16
|
-
'LOCALAPPDATA',
|
17
|
-
'PATH',
|
18
|
-
'PROCESSOR_ARCHITECTURE',
|
19
|
-
'SYSTEMDRIVE',
|
20
|
-
'SYSTEMROOT',
|
21
|
-
'TEMP',
|
22
|
-
'USERNAME',
|
23
|
-
'USERPROFILE',
|
24
|
-
]
|
25
|
-
: ['HOME', 'LOGNAME', 'PATH', 'SHELL', 'TERM', 'USER'];
|
26
|
-
|
27
|
-
const env: Record<string, string> = customEnv ? { ...customEnv } : {};
|
28
|
-
|
29
|
-
for (const key of DEFAULT_INHERITED_ENV_VARS) {
|
30
|
-
const value = globalThis.process.env[key];
|
31
|
-
if (value === undefined) {
|
32
|
-
continue;
|
33
|
-
}
|
34
|
-
|
35
|
-
if (value.startsWith('()')) {
|
36
|
-
continue;
|
37
|
-
}
|
38
|
-
|
39
|
-
env[key] = value;
|
40
|
-
}
|
41
|
-
|
42
|
-
return env;
|
43
|
-
}
|
package/mcp-stdio/index.ts
DELETED