ai 0.0.0-156c9f7b-20250115085202 → 0.0.0-677c097b-20250505090413
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 +774 -2
- package/README.md +22 -9
- package/dist/index.d.mts +3081 -1016
- package/dist/index.d.ts +3081 -1016
- package/dist/index.js +3120 -975
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3060 -931
- package/dist/index.mjs.map +1 -1
- package/mcp-stdio/dist/index.d.mts +169 -0
- package/mcp-stdio/dist/index.d.ts +169 -0
- package/mcp-stdio/dist/index.js +352 -0
- package/mcp-stdio/dist/index.js.map +1 -0
- package/mcp-stdio/dist/index.mjs +337 -0
- package/mcp-stdio/dist/index.mjs.map +1 -0
- package/package.json +15 -11
- package/react/dist/index.d.mts +13 -1
- package/react/dist/index.d.ts +13 -1
- package/react/dist/index.js.map +1 -1
- package/react/dist/index.mjs.map +1 -1
- package/rsc/dist/index.d.ts +108 -18
- package/rsc/dist/rsc-server.d.mts +108 -18
- package/rsc/dist/rsc-server.mjs +603 -274
- package/rsc/dist/rsc-server.mjs.map +1 -1
- package/rsc/dist/rsc-shared.mjs +1 -3
- package/rsc/dist/rsc-shared.mjs.map +1 -1
- package/test/dist/index.d.mts +2 -4
- package/test/dist/index.d.ts +2 -4
- package/test/dist/index.js +4 -14
- package/test/dist/index.js.map +1 -1
- package/test/dist/index.mjs +7 -14
- package/test/dist/index.mjs.map +1 -1
@@ -0,0 +1 @@
|
|
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 function createChildProcess(\n config: StdioConfig,\n signal: AbortSignal,\n): 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((resolve, reject) => {\n try {\n const process = 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":["import_zod","import_provider","name","_a","_a","_b"]}
|
@@ -0,0 +1,337 @@
|
|
1
|
+
// core/tool/mcp/json-rpc-message.ts
|
2
|
+
import { z as z2 } from "zod";
|
3
|
+
|
4
|
+
// core/tool/mcp/types.ts
|
5
|
+
import { z } from "zod";
|
6
|
+
var ClientOrServerImplementationSchema = z.object({
|
7
|
+
name: z.string(),
|
8
|
+
version: z.string()
|
9
|
+
}).passthrough();
|
10
|
+
var BaseParamsSchema = z.object({
|
11
|
+
_meta: z.optional(z.object({}).passthrough())
|
12
|
+
}).passthrough();
|
13
|
+
var ResultSchema = BaseParamsSchema;
|
14
|
+
var RequestSchema = z.object({
|
15
|
+
method: z.string(),
|
16
|
+
params: z.optional(BaseParamsSchema)
|
17
|
+
});
|
18
|
+
var ServerCapabilitiesSchema = z.object({
|
19
|
+
experimental: z.optional(z.object({}).passthrough()),
|
20
|
+
logging: z.optional(z.object({}).passthrough()),
|
21
|
+
prompts: z.optional(
|
22
|
+
z.object({
|
23
|
+
listChanged: z.optional(z.boolean())
|
24
|
+
}).passthrough()
|
25
|
+
),
|
26
|
+
resources: z.optional(
|
27
|
+
z.object({
|
28
|
+
subscribe: z.optional(z.boolean()),
|
29
|
+
listChanged: z.optional(z.boolean())
|
30
|
+
}).passthrough()
|
31
|
+
),
|
32
|
+
tools: z.optional(
|
33
|
+
z.object({
|
34
|
+
listChanged: z.optional(z.boolean())
|
35
|
+
}).passthrough()
|
36
|
+
)
|
37
|
+
}).passthrough();
|
38
|
+
var InitializeResultSchema = ResultSchema.extend({
|
39
|
+
protocolVersion: z.string(),
|
40
|
+
capabilities: ServerCapabilitiesSchema,
|
41
|
+
serverInfo: ClientOrServerImplementationSchema,
|
42
|
+
instructions: z.optional(z.string())
|
43
|
+
});
|
44
|
+
var PaginatedResultSchema = ResultSchema.extend({
|
45
|
+
nextCursor: z.optional(z.string())
|
46
|
+
});
|
47
|
+
var ToolSchema = z.object({
|
48
|
+
name: z.string(),
|
49
|
+
description: z.optional(z.string()),
|
50
|
+
inputSchema: z.object({
|
51
|
+
type: z.literal("object"),
|
52
|
+
properties: z.optional(z.object({}).passthrough())
|
53
|
+
}).passthrough()
|
54
|
+
}).passthrough();
|
55
|
+
var ListToolsResultSchema = PaginatedResultSchema.extend({
|
56
|
+
tools: z.array(ToolSchema)
|
57
|
+
});
|
58
|
+
var TextContentSchema = z.object({
|
59
|
+
type: z.literal("text"),
|
60
|
+
text: z.string()
|
61
|
+
}).passthrough();
|
62
|
+
var ImageContentSchema = z.object({
|
63
|
+
type: z.literal("image"),
|
64
|
+
data: z.string().base64(),
|
65
|
+
mimeType: z.string()
|
66
|
+
}).passthrough();
|
67
|
+
var ResourceContentsSchema = z.object({
|
68
|
+
/**
|
69
|
+
* The URI of this resource.
|
70
|
+
*/
|
71
|
+
uri: z.string(),
|
72
|
+
/**
|
73
|
+
* The MIME type of this resource, if known.
|
74
|
+
*/
|
75
|
+
mimeType: z.optional(z.string())
|
76
|
+
}).passthrough();
|
77
|
+
var TextResourceContentsSchema = ResourceContentsSchema.extend({
|
78
|
+
text: z.string()
|
79
|
+
});
|
80
|
+
var BlobResourceContentsSchema = ResourceContentsSchema.extend({
|
81
|
+
blob: z.string().base64()
|
82
|
+
});
|
83
|
+
var EmbeddedResourceSchema = z.object({
|
84
|
+
type: z.literal("resource"),
|
85
|
+
resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema])
|
86
|
+
}).passthrough();
|
87
|
+
var CallToolResultSchema = ResultSchema.extend({
|
88
|
+
content: z.array(
|
89
|
+
z.union([TextContentSchema, ImageContentSchema, EmbeddedResourceSchema])
|
90
|
+
),
|
91
|
+
isError: z.boolean().default(false).optional()
|
92
|
+
}).or(
|
93
|
+
ResultSchema.extend({
|
94
|
+
toolResult: z.unknown()
|
95
|
+
})
|
96
|
+
);
|
97
|
+
|
98
|
+
// core/tool/mcp/json-rpc-message.ts
|
99
|
+
var JSONRPC_VERSION = "2.0";
|
100
|
+
var JSONRPCRequestSchema = z2.object({
|
101
|
+
jsonrpc: z2.literal(JSONRPC_VERSION),
|
102
|
+
id: z2.union([z2.string(), z2.number().int()])
|
103
|
+
}).merge(RequestSchema).strict();
|
104
|
+
var JSONRPCResponseSchema = z2.object({
|
105
|
+
jsonrpc: z2.literal(JSONRPC_VERSION),
|
106
|
+
id: z2.union([z2.string(), z2.number().int()]),
|
107
|
+
result: ResultSchema
|
108
|
+
}).strict();
|
109
|
+
var JSONRPCErrorSchema = z2.object({
|
110
|
+
jsonrpc: z2.literal(JSONRPC_VERSION),
|
111
|
+
id: z2.union([z2.string(), z2.number().int()]),
|
112
|
+
error: z2.object({
|
113
|
+
code: z2.number().int(),
|
114
|
+
message: z2.string(),
|
115
|
+
data: z2.optional(z2.unknown())
|
116
|
+
})
|
117
|
+
}).strict();
|
118
|
+
var JSONRPCNotificationSchema = z2.object({
|
119
|
+
jsonrpc: z2.literal(JSONRPC_VERSION)
|
120
|
+
}).merge(
|
121
|
+
z2.object({
|
122
|
+
method: z2.string(),
|
123
|
+
params: z2.optional(BaseParamsSchema)
|
124
|
+
})
|
125
|
+
).strict();
|
126
|
+
var JSONRPCMessageSchema = z2.union([
|
127
|
+
JSONRPCRequestSchema,
|
128
|
+
JSONRPCNotificationSchema,
|
129
|
+
JSONRPCResponseSchema,
|
130
|
+
JSONRPCErrorSchema
|
131
|
+
]);
|
132
|
+
|
133
|
+
// errors/index.ts
|
134
|
+
import {
|
135
|
+
AISDKError as AISDKError2,
|
136
|
+
APICallError,
|
137
|
+
EmptyResponseBodyError,
|
138
|
+
InvalidPromptError,
|
139
|
+
InvalidResponseDataError,
|
140
|
+
JSONParseError,
|
141
|
+
LoadAPIKeyError,
|
142
|
+
NoContentGeneratedError,
|
143
|
+
NoSuchModelError,
|
144
|
+
TypeValidationError,
|
145
|
+
UnsupportedFunctionalityError
|
146
|
+
} from "@ai-sdk/provider";
|
147
|
+
|
148
|
+
// errors/mcp-client-error.ts
|
149
|
+
import { AISDKError } from "@ai-sdk/provider";
|
150
|
+
var name = "AI_MCPClientError";
|
151
|
+
var marker = `vercel.ai.error.${name}`;
|
152
|
+
var symbol = Symbol.for(marker);
|
153
|
+
var _a;
|
154
|
+
var MCPClientError = class extends AISDKError {
|
155
|
+
constructor({
|
156
|
+
name: name2 = "MCPClientError",
|
157
|
+
message,
|
158
|
+
cause
|
159
|
+
}) {
|
160
|
+
super({ name: name2, message, cause });
|
161
|
+
this[_a] = true;
|
162
|
+
}
|
163
|
+
static isInstance(error) {
|
164
|
+
return AISDKError.hasMarker(error, marker);
|
165
|
+
}
|
166
|
+
};
|
167
|
+
_a = symbol;
|
168
|
+
|
169
|
+
// mcp-stdio/create-child-process.ts
|
170
|
+
import { spawn } from "child_process";
|
171
|
+
|
172
|
+
// mcp-stdio/get-environment.ts
|
173
|
+
function getEnvironment(customEnv) {
|
174
|
+
const DEFAULT_INHERITED_ENV_VARS = globalThis.process.platform === "win32" ? [
|
175
|
+
"APPDATA",
|
176
|
+
"HOMEDRIVE",
|
177
|
+
"HOMEPATH",
|
178
|
+
"LOCALAPPDATA",
|
179
|
+
"PATH",
|
180
|
+
"PROCESSOR_ARCHITECTURE",
|
181
|
+
"SYSTEMDRIVE",
|
182
|
+
"SYSTEMROOT",
|
183
|
+
"TEMP",
|
184
|
+
"USERNAME",
|
185
|
+
"USERPROFILE"
|
186
|
+
] : ["HOME", "LOGNAME", "PATH", "SHELL", "TERM", "USER"];
|
187
|
+
const env = customEnv ? { ...customEnv } : {};
|
188
|
+
for (const key of DEFAULT_INHERITED_ENV_VARS) {
|
189
|
+
const value = globalThis.process.env[key];
|
190
|
+
if (value === void 0) {
|
191
|
+
continue;
|
192
|
+
}
|
193
|
+
if (value.startsWith("()")) {
|
194
|
+
continue;
|
195
|
+
}
|
196
|
+
env[key] = value;
|
197
|
+
}
|
198
|
+
return env;
|
199
|
+
}
|
200
|
+
|
201
|
+
// mcp-stdio/create-child-process.ts
|
202
|
+
function createChildProcess(config, signal) {
|
203
|
+
var _a2, _b;
|
204
|
+
return spawn(config.command, (_a2 = config.args) != null ? _a2 : [], {
|
205
|
+
env: getEnvironment(config.env),
|
206
|
+
stdio: ["pipe", "pipe", (_b = config.stderr) != null ? _b : "inherit"],
|
207
|
+
shell: false,
|
208
|
+
signal,
|
209
|
+
windowsHide: globalThis.process.platform === "win32" && isElectron(),
|
210
|
+
cwd: config.cwd
|
211
|
+
});
|
212
|
+
}
|
213
|
+
function isElectron() {
|
214
|
+
return "type" in globalThis.process;
|
215
|
+
}
|
216
|
+
|
217
|
+
// mcp-stdio/mcp-stdio-transport.ts
|
218
|
+
var StdioMCPTransport = class {
|
219
|
+
constructor(server) {
|
220
|
+
this.abortController = new AbortController();
|
221
|
+
this.readBuffer = new ReadBuffer();
|
222
|
+
this.serverParams = server;
|
223
|
+
}
|
224
|
+
async start() {
|
225
|
+
if (this.process) {
|
226
|
+
throw new MCPClientError({
|
227
|
+
message: "StdioMCPTransport already started."
|
228
|
+
});
|
229
|
+
}
|
230
|
+
return new Promise((resolve, reject) => {
|
231
|
+
var _a2, _b, _c, _d;
|
232
|
+
try {
|
233
|
+
const process = createChildProcess(
|
234
|
+
this.serverParams,
|
235
|
+
this.abortController.signal
|
236
|
+
);
|
237
|
+
this.process = process;
|
238
|
+
this.process.on("error", (error) => {
|
239
|
+
var _a3, _b2;
|
240
|
+
if (error.name === "AbortError") {
|
241
|
+
(_a3 = this.onclose) == null ? void 0 : _a3.call(this);
|
242
|
+
return;
|
243
|
+
}
|
244
|
+
reject(error);
|
245
|
+
(_b2 = this.onerror) == null ? void 0 : _b2.call(this, error);
|
246
|
+
});
|
247
|
+
this.process.on("spawn", () => {
|
248
|
+
resolve();
|
249
|
+
});
|
250
|
+
this.process.on("close", (_code) => {
|
251
|
+
var _a3;
|
252
|
+
this.process = void 0;
|
253
|
+
(_a3 = this.onclose) == null ? void 0 : _a3.call(this);
|
254
|
+
});
|
255
|
+
(_a2 = this.process.stdin) == null ? void 0 : _a2.on("error", (error) => {
|
256
|
+
var _a3;
|
257
|
+
(_a3 = this.onerror) == null ? void 0 : _a3.call(this, error);
|
258
|
+
});
|
259
|
+
(_b = this.process.stdout) == null ? void 0 : _b.on("data", (chunk) => {
|
260
|
+
this.readBuffer.append(chunk);
|
261
|
+
this.processReadBuffer();
|
262
|
+
});
|
263
|
+
(_c = this.process.stdout) == null ? void 0 : _c.on("error", (error) => {
|
264
|
+
var _a3;
|
265
|
+
(_a3 = this.onerror) == null ? void 0 : _a3.call(this, error);
|
266
|
+
});
|
267
|
+
} catch (error) {
|
268
|
+
reject(error);
|
269
|
+
(_d = this.onerror) == null ? void 0 : _d.call(this, error);
|
270
|
+
}
|
271
|
+
});
|
272
|
+
}
|
273
|
+
processReadBuffer() {
|
274
|
+
var _a2, _b;
|
275
|
+
while (true) {
|
276
|
+
try {
|
277
|
+
const message = this.readBuffer.readMessage();
|
278
|
+
if (message === null) {
|
279
|
+
break;
|
280
|
+
}
|
281
|
+
(_a2 = this.onmessage) == null ? void 0 : _a2.call(this, message);
|
282
|
+
} catch (error) {
|
283
|
+
(_b = this.onerror) == null ? void 0 : _b.call(this, error);
|
284
|
+
}
|
285
|
+
}
|
286
|
+
}
|
287
|
+
async close() {
|
288
|
+
this.abortController.abort();
|
289
|
+
this.process = void 0;
|
290
|
+
this.readBuffer.clear();
|
291
|
+
}
|
292
|
+
send(message) {
|
293
|
+
return new Promise((resolve) => {
|
294
|
+
var _a2;
|
295
|
+
if (!((_a2 = this.process) == null ? void 0 : _a2.stdin)) {
|
296
|
+
throw new MCPClientError({
|
297
|
+
message: "StdioClientTransport not connected"
|
298
|
+
});
|
299
|
+
}
|
300
|
+
const json = serializeMessage(message);
|
301
|
+
if (this.process.stdin.write(json)) {
|
302
|
+
resolve();
|
303
|
+
} else {
|
304
|
+
this.process.stdin.once("drain", resolve);
|
305
|
+
}
|
306
|
+
});
|
307
|
+
}
|
308
|
+
};
|
309
|
+
var ReadBuffer = class {
|
310
|
+
append(chunk) {
|
311
|
+
this.buffer = this.buffer ? Buffer.concat([this.buffer, chunk]) : chunk;
|
312
|
+
}
|
313
|
+
readMessage() {
|
314
|
+
if (!this.buffer)
|
315
|
+
return null;
|
316
|
+
const index = this.buffer.indexOf("\n");
|
317
|
+
if (index === -1) {
|
318
|
+
return null;
|
319
|
+
}
|
320
|
+
const line = this.buffer.toString("utf8", 0, index);
|
321
|
+
this.buffer = this.buffer.subarray(index + 1);
|
322
|
+
return deserializeMessage(line);
|
323
|
+
}
|
324
|
+
clear() {
|
325
|
+
this.buffer = void 0;
|
326
|
+
}
|
327
|
+
};
|
328
|
+
function serializeMessage(message) {
|
329
|
+
return JSON.stringify(message) + "\n";
|
330
|
+
}
|
331
|
+
function deserializeMessage(line) {
|
332
|
+
return JSONRPCMessageSchema.parse(JSON.parse(line));
|
333
|
+
}
|
334
|
+
export {
|
335
|
+
StdioMCPTransport as Experimental_StdioMCPTransport
|
336
|
+
};
|
337
|
+
//# sourceMappingURL=index.mjs.map
|
@@ -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","../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 function createChildProcess(\n config: StdioConfig,\n signal: AbortSignal,\n): 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((resolve, reject) => {\n try {\n const process = 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"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "ai",
|
3
|
-
"version": "0.0.0-
|
3
|
+
"version": "0.0.0-677c097b-20250505090413",
|
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,6 +9,7 @@
|
|
9
9
|
"types": "./dist/index.d.ts",
|
10
10
|
"files": [
|
11
11
|
"dist/**/*",
|
12
|
+
"mcp-stdio/dist/**/*",
|
12
13
|
"react/dist/**/*",
|
13
14
|
"rsc/dist/**/*",
|
14
15
|
"test/dist/**/*",
|
@@ -37,19 +38,24 @@
|
|
37
38
|
"react-server": "./react/dist/index.server.mjs",
|
38
39
|
"import": "./react/dist/index.mjs",
|
39
40
|
"require": "./react/dist/index.js"
|
41
|
+
},
|
42
|
+
"./mcp-stdio": {
|
43
|
+
"types": "./mcp-stdio/dist/index.d.ts",
|
44
|
+
"import": "./mcp-stdio/dist/index.mjs",
|
45
|
+
"require": "./mcp-stdio/dist/index.js"
|
40
46
|
}
|
41
47
|
},
|
42
48
|
"dependencies": {
|
43
|
-
"@ai-sdk/provider": "1.
|
44
|
-
"@ai-sdk/provider-utils": "2.
|
45
|
-
"@ai-sdk/react": "1.
|
46
|
-
"@ai-sdk/ui-utils": "1.
|
49
|
+
"@ai-sdk/provider": "1.1.3",
|
50
|
+
"@ai-sdk/provider-utils": "2.2.7",
|
51
|
+
"@ai-sdk/react": "1.2.11",
|
52
|
+
"@ai-sdk/ui-utils": "1.2.10",
|
47
53
|
"@opentelemetry/api": "1.9.0",
|
48
54
|
"jsondiffpatch": "0.6.0"
|
49
55
|
},
|
50
56
|
"devDependencies": {
|
51
57
|
"@edge-runtime/vm": "^5.0.0",
|
52
|
-
"@types/node": "
|
58
|
+
"@types/node": "20.17.24",
|
53
59
|
"@types/react": "^18",
|
54
60
|
"@types/react-dom": "^18",
|
55
61
|
"@vitejs/plugin-react": "4.3.3",
|
@@ -64,14 +70,11 @@
|
|
64
70
|
},
|
65
71
|
"peerDependencies": {
|
66
72
|
"react": "^18 || ^19 || ^19.0.0-rc",
|
67
|
-
"zod": "^3.
|
73
|
+
"zod": "^3.23.8"
|
68
74
|
},
|
69
75
|
"peerDependenciesMeta": {
|
70
76
|
"react": {
|
71
77
|
"optional": true
|
72
|
-
},
|
73
|
-
"zod": {
|
74
|
-
"optional": true
|
75
78
|
}
|
76
79
|
},
|
77
80
|
"engines": {
|
@@ -80,7 +83,7 @@
|
|
80
83
|
"publishConfig": {
|
81
84
|
"access": "public"
|
82
85
|
},
|
83
|
-
"homepage": "https://sdk.
|
86
|
+
"homepage": "https://ai-sdk.dev/docs",
|
84
87
|
"repository": {
|
85
88
|
"type": "git",
|
86
89
|
"url": "git+https://github.com/vercel/ai.git"
|
@@ -109,6 +112,7 @@
|
|
109
112
|
"test:node": "vitest --config vitest.node.config.js --run",
|
110
113
|
"test:node:watch": "vitest --config vitest.node.config.js",
|
111
114
|
"test:node:core": "pnpm vitest --config vitest.node.config.js --run ./core/",
|
115
|
+
"test:node:core:watch": "pnpm vitest --config vitest.node.config.js ./core/",
|
112
116
|
"test:node:util": "pnpm vitest --config vitest.node.config.js --run ./util/",
|
113
117
|
"test:ui": "pnpm test:ui:react",
|
114
118
|
"test:ui:react": "vitest --config vitest.ui.react.config.js --run",
|
package/react/dist/index.d.mts
CHANGED
@@ -2,9 +2,21 @@ import * as _ai_sdk_react from '@ai-sdk/react';
|
|
2
2
|
import { useChat as useChat$1, useCompletion as useCompletion$1, useAssistant as useAssistant$1 } from '@ai-sdk/react';
|
3
3
|
export { CreateMessage, Message, UseChatHelpers, UseChatOptions } from '@ai-sdk/react';
|
4
4
|
|
5
|
+
/**
|
6
|
+
* @deprecated Use `@ai-sdk/react` instead.
|
7
|
+
*/
|
5
8
|
declare const useChat: typeof useChat$1;
|
9
|
+
/**
|
10
|
+
* @deprecated Use `@ai-sdk/react` instead.
|
11
|
+
*/
|
6
12
|
declare const useCompletion: typeof useCompletion$1;
|
13
|
+
/**
|
14
|
+
* @deprecated Use `@ai-sdk/react` instead.
|
15
|
+
*/
|
7
16
|
declare const useAssistant: typeof useAssistant$1;
|
8
|
-
|
17
|
+
/**
|
18
|
+
* @deprecated Use `@ai-sdk/react` instead.
|
19
|
+
*/
|
20
|
+
declare const experimental_useObject: <RESULT, INPUT = any>({ api, id, schema, initialValue, fetch, onError, onFinish, headers, credentials, }: _ai_sdk_react.Experimental_UseObjectOptions<RESULT>) => _ai_sdk_react.Experimental_UseObjectHelpers<RESULT, INPUT>;
|
9
21
|
|
10
22
|
export { experimental_useObject, useAssistant, useChat, useCompletion };
|
package/react/dist/index.d.ts
CHANGED
@@ -2,9 +2,21 @@ import * as _ai_sdk_react from '@ai-sdk/react';
|
|
2
2
|
import { useChat as useChat$1, useCompletion as useCompletion$1, useAssistant as useAssistant$1 } from '@ai-sdk/react';
|
3
3
|
export { CreateMessage, Message, UseChatHelpers, UseChatOptions } from '@ai-sdk/react';
|
4
4
|
|
5
|
+
/**
|
6
|
+
* @deprecated Use `@ai-sdk/react` instead.
|
7
|
+
*/
|
5
8
|
declare const useChat: typeof useChat$1;
|
9
|
+
/**
|
10
|
+
* @deprecated Use `@ai-sdk/react` instead.
|
11
|
+
*/
|
6
12
|
declare const useCompletion: typeof useCompletion$1;
|
13
|
+
/**
|
14
|
+
* @deprecated Use `@ai-sdk/react` instead.
|
15
|
+
*/
|
7
16
|
declare const useAssistant: typeof useAssistant$1;
|
8
|
-
|
17
|
+
/**
|
18
|
+
* @deprecated Use `@ai-sdk/react` instead.
|
19
|
+
*/
|
20
|
+
declare const experimental_useObject: <RESULT, INPUT = any>({ api, id, schema, initialValue, fetch, onError, onFinish, headers, credentials, }: _ai_sdk_react.Experimental_UseObjectOptions<RESULT>) => _ai_sdk_react.Experimental_UseObjectHelpers<RESULT, INPUT>;
|
9
21
|
|
10
22
|
export { experimental_useObject, useAssistant, useChat, useCompletion };
|
package/react/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"sourcesContent":["import {\n useChat as useChatReact,\n useCompletion as useCompletionReact,\n useAssistant as useAssistantReact,\n experimental_useObject as experimental_useObjectReact,\n} from '@ai-sdk/react';\n\nexport const useChat = useChatReact;\nexport const useCompletion = useCompletionReact;\nexport const useAssistant = useAssistantReact;\nexport const experimental_useObject = experimental_useObjectReact;\nexport type {\n CreateMessage,\n Message,\n UseChatOptions,\n UseChatHelpers,\n} from '@ai-sdk/react';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKO;
|
1
|
+
{"version":3,"sources":["../index.ts"],"sourcesContent":["import {\n useChat as useChatReact,\n useCompletion as useCompletionReact,\n useAssistant as useAssistantReact,\n experimental_useObject as experimental_useObjectReact,\n} from '@ai-sdk/react';\n\n/**\n * @deprecated Use `@ai-sdk/react` instead.\n */\nexport const useChat = useChatReact;\n\n/**\n * @deprecated Use `@ai-sdk/react` instead.\n */\nexport const useCompletion = useCompletionReact;\n\n/**\n * @deprecated Use `@ai-sdk/react` instead.\n */\nexport const useAssistant = useAssistantReact;\n\n/**\n * @deprecated Use `@ai-sdk/react` instead.\n */\nexport const experimental_useObject = experimental_useObjectReact;\n\nexport type {\n /**\n * @deprecated Use `@ai-sdk/react` instead.\n */\n CreateMessage,\n\n /**\n * @deprecated Use `@ai-sdk/react` instead.\n */\n Message,\n\n /**\n * @deprecated Use `@ai-sdk/react` instead.\n */\n UseChatOptions,\n\n /**\n * @deprecated Use `@ai-sdk/react` instead.\n */\n UseChatHelpers,\n} from '@ai-sdk/react';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAKO;AAKA,IAAM,UAAU,aAAAA;AAKhB,IAAM,gBAAgB,aAAAC;AAKtB,IAAM,eAAe,aAAAC;AAKrB,IAAM,yBAAyB,aAAAC;","names":["useChatReact","useCompletionReact","useAssistantReact","experimental_useObjectReact"]}
|
package/react/dist/index.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../index.ts"],"sourcesContent":["import {\n useChat as useChatReact,\n useCompletion as useCompletionReact,\n useAssistant as useAssistantReact,\n experimental_useObject as experimental_useObjectReact,\n} from '@ai-sdk/react';\n\nexport const useChat = useChatReact;\nexport const useCompletion = useCompletionReact;\nexport const useAssistant = useAssistantReact;\nexport const experimental_useObject = experimental_useObjectReact;\nexport type {\n CreateMessage,\n Message,\n UseChatOptions,\n UseChatHelpers,\n} from '@ai-sdk/react';\n"],"mappings":";;;AAAA;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,0BAA0B;AAAA,OACrB;
|
1
|
+
{"version":3,"sources":["../index.ts"],"sourcesContent":["import {\n useChat as useChatReact,\n useCompletion as useCompletionReact,\n useAssistant as useAssistantReact,\n experimental_useObject as experimental_useObjectReact,\n} from '@ai-sdk/react';\n\n/**\n * @deprecated Use `@ai-sdk/react` instead.\n */\nexport const useChat = useChatReact;\n\n/**\n * @deprecated Use `@ai-sdk/react` instead.\n */\nexport const useCompletion = useCompletionReact;\n\n/**\n * @deprecated Use `@ai-sdk/react` instead.\n */\nexport const useAssistant = useAssistantReact;\n\n/**\n * @deprecated Use `@ai-sdk/react` instead.\n */\nexport const experimental_useObject = experimental_useObjectReact;\n\nexport type {\n /**\n * @deprecated Use `@ai-sdk/react` instead.\n */\n CreateMessage,\n\n /**\n * @deprecated Use `@ai-sdk/react` instead.\n */\n Message,\n\n /**\n * @deprecated Use `@ai-sdk/react` instead.\n */\n UseChatOptions,\n\n /**\n * @deprecated Use `@ai-sdk/react` instead.\n */\n UseChatHelpers,\n} from '@ai-sdk/react';\n"],"mappings":";;;AAAA;AAAA,EACE,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,0BAA0B;AAAA,OACrB;AAKA,IAAM,UAAU;AAKhB,IAAM,gBAAgB;AAKtB,IAAM,eAAe;AAKrB,IAAM,yBAAyB;","names":[]}
|