@yourgpt/copilot-sdk 2.0.2-beta.1 → 2.0.2-beta.2
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/dist/{chunk-DVC63PGD.cjs → chunk-7K7HZMP4.cjs} +15 -5
- package/dist/chunk-7K7HZMP4.cjs.map +1 -0
- package/dist/{chunk-Z7PHGSJT.js → chunk-7XFFRV7D.js} +4 -4
- package/dist/{chunk-Z7PHGSJT.js.map → chunk-7XFFRV7D.js.map} +1 -1
- package/dist/{chunk-4WWWMNUA.js → chunk-BH7MNDWW.js} +15 -5
- package/dist/chunk-BH7MNDWW.js.map +1 -0
- package/dist/{chunk-J4OMGO5O.js → chunk-BKO7DSPU.js} +3 -2
- package/dist/chunk-BKO7DSPU.js.map +1 -0
- package/dist/{chunk-W74OTXXX.cjs → chunk-CEKAYA2Q.cjs} +3 -2
- package/dist/chunk-CEKAYA2Q.cjs.map +1 -0
- package/dist/{chunk-RBZXLBGI.cjs → chunk-H5XMKBBA.cjs} +30 -30
- package/dist/{chunk-RBZXLBGI.cjs.map → chunk-H5XMKBBA.cjs.map} +1 -1
- package/dist/{chunk-3YKHVLNP.js → chunk-IXFV6AW6.js} +4 -4
- package/dist/{chunk-3YKHVLNP.js.map → chunk-IXFV6AW6.js.map} +1 -1
- package/dist/{chunk-TX7CGITI.cjs → chunk-UIWFYMAO.cjs} +5 -5
- package/dist/{chunk-TX7CGITI.cjs.map → chunk-UIWFYMAO.cjs.map} +1 -1
- package/dist/{chunk-DUPNYVBP.cjs → chunk-UOWLKFXK.cjs} +23 -23
- package/dist/{chunk-DUPNYVBP.cjs.map → chunk-UOWLKFXK.cjs.map} +1 -1
- package/dist/{chunk-6BXQFCK3.js → chunk-ZPYQDMUX.js} +3 -3
- package/dist/{chunk-6BXQFCK3.js.map → chunk-ZPYQDMUX.js.map} +1 -1
- package/dist/core/index.cjs +80 -80
- package/dist/core/index.d.cts +3 -3
- package/dist/core/index.d.ts +3 -3
- package/dist/core/index.js +3 -3
- package/dist/{index-DOlhSb79.d.cts → index-2VtgKM8S.d.cts} +1 -1
- package/dist/{index-DBNh0jhE.d.ts → index-pWEH7pUE.d.ts} +1 -1
- package/dist/mcp/index.cjs +47 -47
- package/dist/mcp/index.d.cts +3 -3
- package/dist/mcp/index.d.ts +3 -3
- package/dist/mcp/index.js +2 -2
- package/dist/react/index.cjs +50 -50
- package/dist/react/index.d.cts +4 -4
- package/dist/react/index.d.ts +4 -4
- package/dist/react/index.js +5 -5
- package/dist/tools/anthropic/index.d.cts +1 -1
- package/dist/tools/anthropic/index.d.ts +1 -1
- package/dist/tools/brave/index.cjs +2 -2
- package/dist/tools/brave/index.d.cts +1 -1
- package/dist/tools/brave/index.d.ts +1 -1
- package/dist/tools/brave/index.js +1 -1
- package/dist/tools/exa/index.cjs +2 -2
- package/dist/tools/exa/index.d.cts +1 -1
- package/dist/tools/exa/index.d.ts +1 -1
- package/dist/tools/exa/index.js +1 -1
- package/dist/tools/google/index.cjs +2 -2
- package/dist/tools/google/index.d.cts +1 -1
- package/dist/tools/google/index.d.ts +1 -1
- package/dist/tools/google/index.js +1 -1
- package/dist/tools/openai/index.cjs +2 -2
- package/dist/tools/openai/index.d.cts +1 -1
- package/dist/tools/openai/index.d.ts +1 -1
- package/dist/tools/openai/index.js +1 -1
- package/dist/tools/searxng/index.cjs +2 -2
- package/dist/tools/searxng/index.d.cts +1 -1
- package/dist/tools/searxng/index.d.ts +1 -1
- package/dist/tools/searxng/index.js +1 -1
- package/dist/tools/serper/index.cjs +2 -2
- package/dist/tools/serper/index.d.cts +1 -1
- package/dist/tools/serper/index.d.ts +1 -1
- package/dist/tools/serper/index.js +1 -1
- package/dist/tools/tavily/index.cjs +2 -2
- package/dist/tools/tavily/index.d.cts +1 -1
- package/dist/tools/tavily/index.d.ts +1 -1
- package/dist/tools/tavily/index.js +1 -1
- package/dist/tools/web-search/index.cjs +3 -3
- package/dist/tools/web-search/index.d.cts +2 -2
- package/dist/tools/web-search/index.d.ts +2 -2
- package/dist/tools/web-search/index.js +2 -2
- package/dist/{tools-EiPWA9Ay.d.ts → tools-DDWrco4h.d.cts} +9 -0
- package/dist/{tools-EiPWA9Ay.d.cts → tools-DDWrco4h.d.ts} +9 -0
- package/dist/{types-iBkPICvQ.d.ts → types-Cizh9K_f.d.ts} +1 -1
- package/dist/{types-CKA6U74u.d.cts → types-DjSfYNKj.d.cts} +1 -1
- package/dist/ui/index.cjs +16 -12
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +12 -8
- package/dist/ui/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-4WWWMNUA.js.map +0 -1
- package/dist/chunk-DVC63PGD.cjs.map +0 -1
- package/dist/chunk-J4OMGO5O.js.map +0 -1
- package/dist/chunk-W74OTXXX.cjs.map +0 -1
|
@@ -732,11 +732,21 @@ var MCPToolAdapter = class {
|
|
|
732
732
|
});
|
|
733
733
|
break;
|
|
734
734
|
}
|
|
735
|
-
case "resource":
|
|
736
|
-
|
|
737
|
-
|
|
735
|
+
case "resource": {
|
|
736
|
+
const res = content.resource;
|
|
737
|
+
if (res.uri?.startsWith("ui://")) {
|
|
738
|
+
uiResources.push({
|
|
739
|
+
uri: res.uri,
|
|
740
|
+
mimeType: res.mimeType || "text/html",
|
|
741
|
+
content: res.text,
|
|
742
|
+
// MCP uses "text" field, normalize to "content"
|
|
743
|
+
blob: res.blob
|
|
744
|
+
});
|
|
745
|
+
} else if (res.text) {
|
|
746
|
+
textParts.push(res.text);
|
|
738
747
|
}
|
|
739
748
|
break;
|
|
749
|
+
}
|
|
740
750
|
case "ui": {
|
|
741
751
|
const uiContent = content;
|
|
742
752
|
uiResources.push({
|
|
@@ -1156,5 +1166,5 @@ exports.createToolCallParams = createToolCallParams;
|
|
|
1156
1166
|
exports.createToolsListParams = createToolsListParams;
|
|
1157
1167
|
exports.mcpToolToDefinition = mcpToolToDefinition;
|
|
1158
1168
|
exports.mcpToolsToDefinitions = mcpToolsToDefinitions;
|
|
1159
|
-
//# sourceMappingURL=chunk-
|
|
1160
|
-
//# sourceMappingURL=chunk-
|
|
1169
|
+
//# sourceMappingURL=chunk-7K7HZMP4.cjs.map
|
|
1170
|
+
//# sourceMappingURL=chunk-7K7HZMP4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/mcp/types.ts","../src/mcp/protocol/JsonRpcHandler.ts","../src/mcp/protocol/messages.ts","../src/mcp/transports/types.ts","../src/mcp/transports/HttpTransport.ts","../src/mcp/tools/MCPToolAdapter.ts","../src/mcp/client/MCPClient.ts"],"names":[],"mappings":"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","file":"chunk-7K7HZMP4.cjs","sourcesContent":["/**\n * MCP (Model Context Protocol) Type Definitions\n *\n * This module defines all types for MCP client integration,\n * following the MCP specification for JSON-RPC 2.0 communication.\n */\n\n// ============================================\n// Transport Types\n// ============================================\n\n/**\n * Supported MCP transport types\n */\nexport type MCPTransportType = \"http\" | \"sse\" | \"stdio\";\n\n/**\n * Base transport configuration\n */\nexport interface MCPTransportConfigBase {\n /** Transport type */\n type: MCPTransportType;\n}\n\n/**\n * HTTP Streamable transport configuration (recommended)\n */\nexport interface MCPHttpTransportConfig extends MCPTransportConfigBase {\n type: \"http\";\n /** Server URL endpoint */\n url: string;\n /** Custom headers for authentication */\n headers?: Record<string, string>;\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * SSE (Server-Sent Events) transport configuration\n */\nexport interface MCPSSETransportConfig extends MCPTransportConfigBase {\n type: \"sse\";\n /** Server URL endpoint */\n url: string;\n /** Custom headers for authentication */\n headers?: Record<string, string>;\n}\n\n/**\n * Stdio transport configuration (for local MCP servers)\n */\nexport interface MCPStdioTransportConfig extends MCPTransportConfigBase {\n type: \"stdio\";\n /** Command to execute */\n command: string;\n /** Command arguments */\n args?: string[];\n /** Environment variables */\n env?: Record<string, string>;\n /** Working directory */\n cwd?: string;\n}\n\n/**\n * Union of all transport configurations\n */\nexport type MCPTransportConfig =\n | MCPHttpTransportConfig\n | MCPSSETransportConfig\n | MCPStdioTransportConfig;\n\n// ============================================\n// JSON-RPC 2.0 Types\n// ============================================\n\n/**\n * JSON-RPC request\n */\nexport interface JsonRpcRequest {\n jsonrpc: \"2.0\";\n id: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\n/**\n * JSON-RPC notification (no response expected)\n */\nexport interface JsonRpcNotification {\n jsonrpc: \"2.0\";\n method: string;\n params?: Record<string, unknown>;\n}\n\n/**\n * JSON-RPC success response\n */\nexport interface JsonRpcSuccessResponse {\n jsonrpc: \"2.0\";\n id: string | number;\n result: unknown;\n}\n\n/**\n * JSON-RPC error response\n */\nexport interface JsonRpcErrorResponse {\n jsonrpc: \"2.0\";\n id: string | number | null;\n error: JsonRpcError;\n}\n\n/**\n * JSON-RPC error object\n */\nexport interface JsonRpcError {\n code: number;\n message: string;\n data?: unknown;\n}\n\n/**\n * JSON-RPC response (success or error)\n */\nexport type JsonRpcResponse = JsonRpcSuccessResponse | JsonRpcErrorResponse;\n\n/**\n * JSON-RPC message (request, notification, or response)\n */\nexport type JsonRpcMessage =\n | JsonRpcRequest\n | JsonRpcNotification\n | JsonRpcResponse;\n\n// Standard JSON-RPC error codes\nexport const JSON_RPC_ERROR_CODES = {\n PARSE_ERROR: -32700,\n INVALID_REQUEST: -32600,\n METHOD_NOT_FOUND: -32601,\n INVALID_PARAMS: -32602,\n INTERNAL_ERROR: -32603,\n} as const;\n\n// ============================================\n// MCP Protocol Types\n// ============================================\n\n/**\n * MCP Protocol Version\n *\n * The SDK supports multiple protocol versions:\n * - 2025-06-18: Latest protocol with full features\n * - 2025-03-26: Streamable HTTP transport\n * - 2024-11-05: Legacy HTTP+SSE transport (deprecated)\n */\nexport const MCP_PROTOCOL_VERSION = \"2025-06-18\";\n\n/**\n * Supported protocol versions for negotiation\n */\nexport const SUPPORTED_PROTOCOL_VERSIONS = [\n \"2025-06-18\",\n \"2025-03-26\",\n \"2024-11-05\",\n] as const;\n\n/**\n * MCP client capabilities\n */\nexport interface MCPClientCapabilities {\n /** Roots capability (file system access) */\n roots?: {\n listChanged?: boolean;\n };\n /** Sampling capability */\n sampling?: Record<string, never>;\n /** Experimental capabilities */\n experimental?: Record<string, unknown>;\n}\n\n/**\n * MCP server capabilities\n */\nexport interface MCPServerCapabilities {\n /** Tools capability */\n tools?: {\n listChanged?: boolean;\n };\n /** Resources capability */\n resources?: {\n subscribe?: boolean;\n listChanged?: boolean;\n };\n /** Prompts capability */\n prompts?: {\n listChanged?: boolean;\n };\n /** Logging capability */\n logging?: Record<string, never>;\n /** Experimental capabilities */\n experimental?: Record<string, unknown>;\n}\n\n/**\n * MCP client info\n */\nexport interface MCPClientInfo {\n name: string;\n version: string;\n}\n\n/**\n * MCP server info\n */\nexport interface MCPServerInfo {\n name: string;\n version: string;\n}\n\n/**\n * MCP initialization params\n */\nexport interface MCPInitializeParams {\n protocolVersion: string;\n capabilities: MCPClientCapabilities;\n clientInfo: MCPClientInfo;\n}\n\n/**\n * MCP initialization result\n */\nexport interface MCPInitializeResult {\n protocolVersion: string;\n capabilities: MCPServerCapabilities;\n serverInfo: MCPServerInfo;\n instructions?: string;\n}\n\n// ============================================\n// MCP Tool Types\n// ============================================\n\n/**\n * MCP tool definition (from server)\n */\nexport interface MCPToolDefinition {\n /** Tool name */\n name: string;\n /** Tool description */\n description?: string;\n /** JSON Schema for input parameters */\n inputSchema: MCPToolInputSchema;\n}\n\n/**\n * MCP tool input schema (JSON Schema format)\n */\nexport interface MCPToolInputSchema {\n type: \"object\";\n properties?: Record<string, MCPJsonSchemaProperty>;\n required?: string[];\n additionalProperties?: boolean;\n}\n\n/**\n * MCP JSON Schema property\n */\nexport interface MCPJsonSchemaProperty {\n type?: string | string[];\n description?: string;\n enum?: unknown[];\n items?: MCPJsonSchemaProperty;\n properties?: Record<string, MCPJsonSchemaProperty>;\n required?: string[];\n default?: unknown;\n // Additional JSON Schema validations\n minLength?: number;\n maxLength?: number;\n minimum?: number;\n maximum?: number;\n pattern?: string;\n format?: string;\n oneOf?: MCPJsonSchemaProperty[];\n anyOf?: MCPJsonSchemaProperty[];\n allOf?: MCPJsonSchemaProperty[];\n}\n\n/**\n * MCP tool call request params\n */\nexport interface MCPToolCallParams {\n name: string;\n arguments?: Record<string, unknown>;\n}\n\n/**\n * MCP UI content (for MCP-UI support)\n * @see https://github.com/idosal/mcp-ui\n */\nexport interface MCPUIContent {\n type: \"ui\";\n resource: {\n uri: string;\n mimeType:\n | \"text/html\"\n | \"text/uri-list\"\n | \"application/vnd.mcp-ui.remote-dom\";\n content?: string;\n blob?: string;\n metadata?: {\n title?: string;\n width?: string;\n height?: string;\n sandbox?: string[];\n className?: string;\n };\n };\n}\n\n/**\n * MCP tool call result content types\n */\nexport type MCPToolResultContent =\n | MCPTextContent\n | MCPImageContent\n | MCPResourceContent\n | MCPUIContent;\n\n/**\n * MCP text content\n */\nexport interface MCPTextContent {\n type: \"text\";\n text: string;\n}\n\n/**\n * MCP image content\n */\nexport interface MCPImageContent {\n type: \"image\";\n data: string;\n mimeType: string;\n}\n\n/**\n * MCP embedded resource content\n */\nexport interface MCPResourceContent {\n type: \"resource\";\n resource: {\n uri: string;\n mimeType?: string;\n text?: string;\n blob?: string;\n };\n}\n\n/**\n * MCP tool call result\n */\nexport interface MCPToolCallResult {\n content: MCPToolResultContent[];\n isError?: boolean;\n}\n\n/**\n * MCP tools list result\n */\nexport interface MCPToolsListResult {\n tools: MCPToolDefinition[];\n nextCursor?: string;\n}\n\n// ============================================\n// MCP Elicitation Types (Human-in-the-Loop)\n// ============================================\n\n/**\n * Elicitation request from MCP server\n */\nexport interface MCPElicitationRequest {\n /** Unique request ID */\n requestId: string;\n /** Elicitation mode */\n mode: \"form\" | \"confirm\" | \"select\";\n /** Message to display to user */\n message?: string;\n /** JSON Schema for form mode */\n schema?: MCPToolInputSchema;\n /** Options for select mode */\n options?: MCPElicitationOption[];\n /** Default values */\n defaults?: Record<string, unknown>;\n}\n\n/**\n * Elicitation option (for select mode)\n */\nexport interface MCPElicitationOption {\n value: string;\n label?: string;\n description?: string;\n}\n\n/**\n * Elicitation response to MCP server\n */\nexport interface MCPElicitationResponse {\n /** Request ID being responded to */\n requestId: string;\n /** Whether user accepted */\n accepted: boolean;\n /** User's form data (for form/select modes) */\n data?: Record<string, unknown>;\n /** Rejection reason (if not accepted) */\n reason?: string;\n}\n\n// ============================================\n// MCP Resource Types (for future use)\n// ============================================\n\n/**\n * MCP resource definition\n */\nexport interface MCPResource {\n uri: string;\n name: string;\n description?: string;\n mimeType?: string;\n}\n\n/**\n * MCP resources list result\n */\nexport interface MCPResourcesListResult {\n resources: MCPResource[];\n nextCursor?: string;\n}\n\n// ============================================\n// MCP Client Types\n// ============================================\n\n/**\n * MCP client connection state\n */\nexport type MCPConnectionState =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"error\";\n\n/**\n * MCP client configuration\n */\nexport interface MCPClientConfig {\n /** Unique name for this client/server connection */\n name: string;\n /** Transport type shorthand */\n transport: MCPTransportType;\n /** Server URL (for http/sse transports) */\n url?: string;\n /** Custom headers (for http/sse transports) */\n headers?: Record<string, string>;\n /** Request timeout in milliseconds (default: 30000) */\n timeout?: number;\n /** Command to execute (for stdio transport) */\n command?: string;\n /** Command arguments (for stdio transport) */\n args?: string[];\n /** Environment variables (for stdio transport) */\n env?: Record<string, string>;\n /** Working directory (for stdio transport) */\n cwd?: string;\n /** Client info */\n clientInfo?: MCPClientInfo;\n /** Client capabilities */\n capabilities?: MCPClientCapabilities;\n}\n\n/**\n * MCP client state\n */\nexport interface MCPClientState {\n /** Connection state */\n connectionState: MCPConnectionState;\n /** Server info (after connection) */\n serverInfo?: MCPServerInfo;\n /** Server capabilities (after connection) */\n serverCapabilities?: MCPServerCapabilities;\n /** Available tools */\n tools: MCPToolDefinition[];\n /** Error message (if in error state) */\n error?: string;\n /** Last activity timestamp */\n lastActivity?: number;\n}\n\n/**\n * MCP client events\n */\nexport interface MCPClientEvents {\n /** Connection state changed */\n onConnectionStateChange?: (state: MCPConnectionState) => void;\n /** Tools list updated */\n onToolsChange?: (tools: MCPToolDefinition[]) => void;\n /** Elicitation request received */\n onElicitationRequest?: (\n request: MCPElicitationRequest,\n ) => Promise<MCPElicitationResponse>;\n /** Error occurred */\n onError?: (error: Error) => void;\n /** Notification received */\n onNotification?: (method: string, params?: Record<string, unknown>) => void;\n}\n\n// ============================================\n// React Hook Types\n// ============================================\n\n/**\n * Configuration for useMCPClient hook\n */\nexport interface UseMCPClientConfig extends MCPClientConfig, MCPClientEvents {\n /** Auto-connect on mount (default: true) */\n autoConnect?: boolean;\n}\n\n/**\n * Configuration for useMCPTools hook\n */\nexport interface UseMCPToolsConfig extends UseMCPClientConfig {\n /** Prefix tool names with client name (default: true) */\n prefixToolNames?: boolean;\n /** Auto-register tools with CopilotProvider (default: true) */\n autoRegister?: boolean;\n}\n\n/**\n * Return type for useMCPClient hook\n */\nexport interface UseMCPClientReturn {\n /** Current client state */\n state: MCPClientState;\n /** Connect to server */\n connect: () => Promise<void>;\n /** Disconnect from server */\n disconnect: () => Promise<void>;\n /** Call a tool */\n callTool: (\n name: string,\n args?: Record<string, unknown>,\n ) => Promise<MCPToolCallResult>;\n /** Refresh tools list */\n refreshTools: () => Promise<MCPToolDefinition[]>;\n /** Whether client is connected */\n isConnected: boolean;\n /** Whether client is loading */\n isLoading: boolean;\n}\n\n/**\n * Return type for useMCPTools hook\n */\nexport interface UseMCPToolsReturn extends UseMCPClientReturn {\n /** Tools converted to ToolDefinition format */\n toolDefinitions: import(\"../core/types/tools\").ToolDefinition[];\n}\n\n// ============================================\n// Transport Interface\n// ============================================\n\n/**\n * MCP transport interface\n */\nexport interface MCPTransport {\n /** Connect the transport */\n connect(): Promise<void>;\n /** Disconnect the transport */\n disconnect(): Promise<void>;\n /** Send a JSON-RPC message */\n send(message: JsonRpcRequest | JsonRpcNotification): Promise<void>;\n /** Set message handler */\n onMessage(handler: (message: JsonRpcMessage) => void): void;\n /** Set error handler */\n onError(handler: (error: Error) => void): void;\n /** Set close handler */\n onClose(handler: () => void): void;\n /** Check if connected */\n isConnected(): boolean;\n}\n\n// ============================================\n// Helper Types\n// ============================================\n\n/**\n * Pending request tracker\n */\nexport interface PendingRequest {\n resolve: (value: unknown) => void;\n reject: (reason: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n}\n\n/**\n * MCP error class\n */\nexport class MCPError extends Error {\n constructor(\n message: string,\n public code?: number,\n public data?: unknown,\n ) {\n super(message);\n this.name = \"MCPError\";\n }\n\n static fromJsonRpcError(error: JsonRpcError): MCPError {\n return new MCPError(error.message, error.code, error.data);\n }\n}\n","/**\n * JSON-RPC 2.0 Handler for MCP\n *\n * Handles creation, parsing, and validation of JSON-RPC messages.\n */\n\nimport type {\n JsonRpcRequest,\n JsonRpcNotification,\n JsonRpcResponse,\n JsonRpcMessage,\n JsonRpcError,\n JsonRpcSuccessResponse,\n JsonRpcErrorResponse,\n PendingRequest,\n} from \"../types\";\nimport { MCPError, JSON_RPC_ERROR_CODES } from \"../types\";\n\n/**\n * JSON-RPC 2.0 Handler\n *\n * Manages request/response lifecycle, message creation, and parsing.\n */\nexport class JsonRpcHandler {\n private requestId = 0;\n private pendingRequests = new Map<string | number, PendingRequest>();\n private defaultTimeout: number;\n\n constructor(options?: { timeout?: number }) {\n this.defaultTimeout = options?.timeout ?? 30000;\n }\n\n /**\n * Generate a unique request ID\n */\n generateId(): string {\n return `req_${++this.requestId}_${Date.now()}`;\n }\n\n /**\n * Create a JSON-RPC request\n */\n createRequest(\n method: string,\n params?: Record<string, unknown>,\n ): JsonRpcRequest {\n const request: JsonRpcRequest = {\n jsonrpc: \"2.0\",\n id: this.generateId(),\n method,\n };\n\n if (params !== undefined) {\n request.params = params;\n }\n\n return request;\n }\n\n /**\n * Create a JSON-RPC notification (no response expected)\n */\n createNotification(\n method: string,\n params?: Record<string, unknown>,\n ): JsonRpcNotification {\n const notification: JsonRpcNotification = {\n jsonrpc: \"2.0\",\n method,\n };\n\n if (params !== undefined) {\n notification.params = params;\n }\n\n return notification;\n }\n\n /**\n * Register a pending request and return a promise that resolves when response is received\n */\n registerRequest(request: JsonRpcRequest, timeout?: number): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const timeoutMs = timeout ?? this.defaultTimeout;\n\n const timeoutHandle = setTimeout(() => {\n this.pendingRequests.delete(request.id);\n reject(\n new MCPError(\n `Request timed out after ${timeoutMs}ms: ${request.method}`,\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n ),\n );\n }, timeoutMs);\n\n this.pendingRequests.set(request.id, {\n resolve,\n reject,\n timeout: timeoutHandle,\n });\n });\n }\n\n /**\n * Handle an incoming JSON-RPC response\n */\n handleResponse(response: JsonRpcResponse): boolean {\n // Error responses can have null id if request couldn't be parsed\n if (response.id === null) {\n return false;\n }\n\n const pending = this.pendingRequests.get(response.id);\n if (!pending) {\n return false;\n }\n\n this.pendingRequests.delete(response.id);\n clearTimeout(pending.timeout);\n\n if (isErrorResponse(response)) {\n pending.reject(MCPError.fromJsonRpcError(response.error));\n } else {\n pending.resolve(response.result);\n }\n\n return true;\n }\n\n /**\n * Parse a JSON-RPC message from string\n */\n parse(data: string): JsonRpcMessage {\n try {\n const parsed = JSON.parse(data);\n\n if (!this.isValidMessage(parsed)) {\n throw new MCPError(\n \"Invalid JSON-RPC message\",\n JSON_RPC_ERROR_CODES.INVALID_REQUEST,\n );\n }\n\n return parsed;\n } catch (error) {\n if (error instanceof MCPError) {\n throw error;\n }\n throw new MCPError(\n \"Failed to parse JSON-RPC message\",\n JSON_RPC_ERROR_CODES.PARSE_ERROR,\n error,\n );\n }\n }\n\n /**\n * Serialize a JSON-RPC message to string\n */\n serialize(message: JsonRpcMessage): string {\n return JSON.stringify(message);\n }\n\n /**\n * Validate a JSON-RPC message\n */\n isValidMessage(message: unknown): message is JsonRpcMessage {\n if (!message || typeof message !== \"object\") {\n return false;\n }\n\n const msg = message as Record<string, unknown>;\n\n // Must have jsonrpc: \"2.0\"\n if (msg.jsonrpc !== \"2.0\") {\n return false;\n }\n\n // Check if it's a request (has id and method)\n if (\"method\" in msg && typeof msg.method === \"string\") {\n // Requests have id, notifications don't\n return true;\n }\n\n // Check if it's a response (has id and result or error)\n if (\"id\" in msg) {\n return \"result\" in msg || \"error\" in msg;\n }\n\n return false;\n }\n\n /**\n * Check if message is a request\n */\n isRequest(message: JsonRpcMessage): message is JsonRpcRequest {\n return \"method\" in message && \"id\" in message;\n }\n\n /**\n * Check if message is a notification\n */\n isNotification(message: JsonRpcMessage): message is JsonRpcNotification {\n return \"method\" in message && !(\"id\" in message);\n }\n\n /**\n * Check if message is a response\n */\n isResponse(message: JsonRpcMessage): message is JsonRpcResponse {\n return \"id\" in message && (\"result\" in message || \"error\" in message);\n }\n\n /**\n * Cancel all pending requests\n */\n cancelAllPending(reason?: string): void {\n const error = new MCPError(\n reason ?? \"All pending requests cancelled\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n\n for (const [id, pending] of this.pendingRequests) {\n clearTimeout(pending.timeout);\n pending.reject(error);\n }\n\n this.pendingRequests.clear();\n }\n\n /**\n * Get number of pending requests\n */\n getPendingCount(): number {\n return this.pendingRequests.size;\n }\n\n /**\n * Check if a specific request is pending\n */\n isPending(id: string | number): boolean {\n return this.pendingRequests.has(id);\n }\n}\n\n/**\n * Type guard for error response\n */\nexport function isErrorResponse(\n response: JsonRpcResponse,\n): response is JsonRpcErrorResponse {\n return \"error\" in response;\n}\n\n/**\n * Type guard for success response\n */\nexport function isSuccessResponse(\n response: JsonRpcResponse,\n): response is JsonRpcSuccessResponse {\n return \"result\" in response;\n}\n\n/**\n * Create a JSON-RPC error response\n */\nexport function createErrorResponse(\n id: string | number | null,\n error: JsonRpcError,\n): JsonRpcErrorResponse {\n return {\n jsonrpc: \"2.0\",\n id,\n error,\n };\n}\n\n/**\n * Create a JSON-RPC success response\n */\nexport function createSuccessResponse(\n id: string | number,\n result: unknown,\n): JsonRpcSuccessResponse {\n return {\n jsonrpc: \"2.0\",\n id,\n result,\n };\n}\n","/**\n * MCP Protocol Messages\n *\n * Defines all MCP-specific JSON-RPC methods and message helpers.\n */\n\nimport type {\n MCPInitializeParams,\n MCPToolCallParams,\n MCPClientCapabilities,\n MCPClientInfo,\n} from \"../types\";\nimport { MCP_PROTOCOL_VERSION } from \"../types\";\n\n// ============================================\n// MCP Method Names\n// ============================================\n\nexport const MCP_METHODS = {\n // Lifecycle\n INITIALIZE: \"initialize\",\n INITIALIZED: \"notifications/initialized\",\n PING: \"ping\",\n\n // Tools\n TOOLS_LIST: \"tools/list\",\n TOOLS_CALL: \"tools/call\",\n\n // Resources (for future use)\n RESOURCES_LIST: \"resources/list\",\n RESOURCES_READ: \"resources/read\",\n RESOURCES_SUBSCRIBE: \"resources/subscribe\",\n RESOURCES_UNSUBSCRIBE: \"resources/unsubscribe\",\n\n // Prompts (for future use)\n PROMPTS_LIST: \"prompts/list\",\n PROMPTS_GET: \"prompts/get\",\n\n // Notifications\n TOOLS_LIST_CHANGED: \"notifications/tools/list_changed\",\n RESOURCES_LIST_CHANGED: \"notifications/resources/list_changed\",\n RESOURCES_UPDATED: \"notifications/resources/updated\",\n PROMPTS_LIST_CHANGED: \"notifications/prompts/list_changed\",\n\n // Elicitation\n ELICITATION_REQUEST: \"elicitation/request\",\n ELICITATION_RESPONSE: \"elicitation/response\",\n\n // Logging\n LOGGING_SET_LEVEL: \"logging/setLevel\",\n LOGGING_MESSAGE: \"notifications/message\",\n\n // Cancellation\n CANCEL: \"notifications/cancelled\",\n} as const;\n\n// ============================================\n// Message Parameter Builders\n// ============================================\n\n/**\n * Default client info for YourGPT Copilot SDK\n */\nexport const DEFAULT_CLIENT_INFO: MCPClientInfo = {\n name: \"yourgpt-copilot-sdk\",\n version: \"2.2.0\",\n};\n\n/**\n * Default client capabilities\n */\nexport const DEFAULT_CLIENT_CAPABILITIES: MCPClientCapabilities = {\n roots: {\n listChanged: true,\n },\n sampling: {},\n};\n\n/**\n * Create initialize params\n */\nexport function createInitializeParams(\n clientInfo?: Partial<MCPClientInfo>,\n capabilities?: MCPClientCapabilities,\n): MCPInitializeParams {\n return {\n protocolVersion: MCP_PROTOCOL_VERSION,\n clientInfo: {\n ...DEFAULT_CLIENT_INFO,\n ...clientInfo,\n },\n capabilities: capabilities ?? DEFAULT_CLIENT_CAPABILITIES,\n };\n}\n\n/**\n * Create tools/list params\n */\nexport function createToolsListParams(cursor?: string): { cursor?: string } {\n if (cursor) {\n return { cursor };\n }\n return {};\n}\n\n/**\n * Create tools/call params\n */\nexport function createToolCallParams(\n name: string,\n args?: Record<string, unknown>,\n): MCPToolCallParams {\n return {\n name,\n arguments: args,\n };\n}\n\n/**\n * Create ping params (empty object)\n */\nexport function createPingParams(): Record<string, never> {\n return {};\n}\n\n/**\n * Create cancellation notification params\n */\nexport function createCancelParams(\n requestId: string | number,\n reason?: string,\n): { requestId: string | number; reason?: string } {\n return {\n requestId,\n ...(reason && { reason }),\n };\n}\n\n/**\n * Create logging set level params\n */\nexport function createLoggingSetLevelParams(\n level:\n | \"debug\"\n | \"info\"\n | \"notice\"\n | \"warning\"\n | \"error\"\n | \"critical\"\n | \"alert\"\n | \"emergency\",\n): { level: string } {\n return { level };\n}\n\n// ============================================\n// Response Type Guards\n// ============================================\n\n/**\n * Check if value is a valid initialize result\n */\nexport function isInitializeResult(\n value: unknown,\n): value is import(\"../types\").MCPInitializeResult {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return (\n typeof v.protocolVersion === \"string\" &&\n v.capabilities !== null &&\n typeof v.capabilities === \"object\" &&\n v.serverInfo !== null &&\n typeof v.serverInfo === \"object\"\n );\n}\n\n/**\n * Check if value is a valid tools list result\n */\nexport function isToolsListResult(\n value: unknown,\n): value is import(\"../types\").MCPToolsListResult {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return Array.isArray(v.tools);\n}\n\n/**\n * Check if value is a valid tool call result\n */\nexport function isToolCallResult(\n value: unknown,\n): value is import(\"../types\").MCPToolCallResult {\n if (!value || typeof value !== \"object\") return false;\n const v = value as Record<string, unknown>;\n return Array.isArray(v.content);\n}\n\n/**\n * Check if value is a ping result (empty object or has no required fields)\n */\nexport function isPingResult(value: unknown): value is Record<string, never> {\n return value !== null && typeof value === \"object\";\n}\n","/**\n * MCP Transport Types\n *\n * Defines the base transport interface and common types.\n */\n\nimport type {\n JsonRpcRequest,\n JsonRpcNotification,\n JsonRpcMessage,\n} from \"../types\";\n\n/**\n * MCP transport interface\n *\n * All transports (HTTP, SSE, stdio) must implement this interface.\n */\nexport interface MCPTransport {\n /**\n * Connect the transport\n */\n connect(): Promise<void>;\n\n /**\n * Disconnect the transport\n */\n disconnect(): Promise<void>;\n\n /**\n * Send a JSON-RPC message\n */\n send(message: JsonRpcRequest | JsonRpcNotification): Promise<void>;\n\n /**\n * Set message handler for incoming messages\n */\n onMessage(handler: MessageHandler): void;\n\n /**\n * Set error handler\n */\n onError(handler: ErrorHandler): void;\n\n /**\n * Set close handler\n */\n onClose(handler: CloseHandler): void;\n\n /**\n * Check if transport is connected\n */\n isConnected(): boolean;\n}\n\n/**\n * Message handler callback\n */\nexport type MessageHandler = (message: JsonRpcMessage) => void;\n\n/**\n * Error handler callback\n */\nexport type ErrorHandler = (error: Error) => void;\n\n/**\n * Close handler callback\n */\nexport type CloseHandler = () => void;\n\n/**\n * Base transport options\n */\nexport interface TransportOptions {\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * HTTP transport options\n */\nexport interface HttpTransportOptions extends TransportOptions {\n /** Server URL */\n url: string;\n /** Custom headers */\n headers?: Record<string, string>;\n /** Session ID (managed internally) */\n sessionId?: string;\n}\n\n/**\n * SSE transport options\n */\nexport interface SSETransportOptions extends TransportOptions {\n /** Server URL */\n url: string;\n /** Custom headers */\n headers?: Record<string, string>;\n}\n\n/**\n * Stdio transport options\n */\nexport interface StdioTransportOptions extends TransportOptions {\n /** Command to execute */\n command: string;\n /** Command arguments */\n args?: string[];\n /** Environment variables */\n env?: Record<string, string>;\n /** Working directory */\n cwd?: string;\n}\n\n/**\n * Abstract base transport class\n *\n * Provides common functionality for all transports.\n */\nexport abstract class BaseTransport implements MCPTransport {\n protected messageHandler?: MessageHandler;\n protected errorHandler?: ErrorHandler;\n protected closeHandler?: CloseHandler;\n protected connected = false;\n\n abstract connect(): Promise<void>;\n abstract disconnect(): Promise<void>;\n abstract send(message: JsonRpcRequest | JsonRpcNotification): Promise<void>;\n\n onMessage(handler: MessageHandler): void {\n this.messageHandler = handler;\n }\n\n onError(handler: ErrorHandler): void {\n this.errorHandler = handler;\n }\n\n onClose(handler: CloseHandler): void {\n this.closeHandler = handler;\n }\n\n isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Emit a message to the handler\n */\n protected emitMessage(message: JsonRpcMessage): void {\n if (this.messageHandler) {\n this.messageHandler(message);\n }\n }\n\n /**\n * Emit an error to the handler\n */\n protected emitError(error: Error): void {\n if (this.errorHandler) {\n this.errorHandler(error);\n }\n }\n\n /**\n * Emit close event\n */\n protected emitClose(): void {\n this.connected = false;\n if (this.closeHandler) {\n this.closeHandler();\n }\n }\n}\n","/**\n * HTTP Streamable Transport for MCP\n *\n * Implements the HTTP Streamable transport as recommended by the MCP specification.\n * This transport uses HTTP POST requests for sending messages and can handle\n * streaming responses via SSE when needed.\n */\n\nimport type {\n JsonRpcRequest,\n JsonRpcNotification,\n JsonRpcMessage,\n JsonRpcResponse,\n} from \"../types\";\nimport { MCPError, JSON_RPC_ERROR_CODES } from \"../types\";\nimport { BaseTransport, type HttpTransportOptions } from \"./types\";\n\n/**\n * HTTP Streamable Transport\n *\n * The recommended transport for MCP over HTTP. Supports both request/response\n * and server-initiated messages via SSE.\n */\nexport class HttpTransport extends BaseTransport {\n private url: string;\n private headers: Record<string, string>;\n private timeout: number;\n private sessionId?: string;\n private eventSource?: EventSource;\n private abortController?: AbortController;\n\n constructor(options: HttpTransportOptions) {\n super();\n this.url = options.url;\n this.headers = options.headers ?? {};\n this.timeout = options.timeout ?? 30000;\n this.sessionId = options.sessionId;\n }\n\n /**\n * Connect the HTTP transport\n *\n * For HTTP transport, \"connecting\" means verifying the endpoint is reachable.\n * The actual session is established during the initialize handshake.\n */\n async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n this.abortController = new AbortController();\n this.connected = true;\n }\n\n /**\n * Disconnect the HTTP transport\n */\n async disconnect(): Promise<void> {\n if (!this.connected) {\n return;\n }\n\n // Close any SSE connection\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = undefined;\n }\n\n // Abort any pending requests\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = undefined;\n }\n\n this.sessionId = undefined;\n this.connected = false;\n this.emitClose();\n }\n\n /**\n * Send a JSON-RPC message and handle the response\n */\n async send(message: JsonRpcRequest | JsonRpcNotification): Promise<void> {\n if (!this.connected) {\n throw new MCPError(\n \"Transport not connected\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n const isRequest = \"id\" in message;\n\n try {\n const response = await this.sendRequest(message);\n\n // Handle response based on content type\n const contentType = response.headers.get(\"content-type\") || \"\";\n\n // Check for session ID in response headers\n const newSessionId = response.headers.get(\"mcp-session-id\");\n if (newSessionId) {\n this.sessionId = newSessionId;\n }\n\n if (contentType.includes(\"text/event-stream\")) {\n // Server wants to use SSE for this response\n await this.handleSSEResponse(response);\n } else if (contentType.includes(\"application/json\")) {\n // Standard JSON response\n const text = await response.text();\n if (text.trim()) {\n // Parse potentially multiple JSON-RPC messages (batch)\n const messages = this.parseResponseText(text);\n for (const msg of messages) {\n this.emitMessage(msg);\n }\n }\n } else if (!response.ok) {\n throw new MCPError(\n `HTTP error: ${response.status} ${response.statusText}`,\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n // 202 Accepted or 204 No Content - no response body expected\n } catch (error) {\n if (error instanceof MCPError) {\n throw error;\n }\n\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n throw new MCPError(\n \"Request aborted\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n throw new MCPError(\n `Transport error: ${error.message}`,\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n error,\n );\n }\n\n throw new MCPError(\n \"Unknown transport error\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n }\n\n /**\n * Send an HTTP request\n */\n private async sendRequest(\n message: JsonRpcRequest | JsonRpcNotification,\n ): Promise<Response> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json, text/event-stream\",\n ...this.headers,\n };\n\n // Include session ID if we have one\n if (this.sessionId) {\n headers[\"Mcp-Session-Id\"] = this.sessionId;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(this.url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(message),\n signal: controller.signal,\n });\n\n return response;\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * Handle an SSE response stream\n */\n private async handleSSEResponse(response: Response): Promise<void> {\n const reader = response.body?.getReader();\n if (!reader) {\n throw new MCPError(\n \"No response body for SSE stream\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete SSE events\n const events = buffer.split(\"\\n\\n\");\n buffer = events.pop() || \"\"; // Keep incomplete event in buffer\n\n for (const event of events) {\n if (!event.trim()) continue;\n\n const lines = event.split(\"\\n\");\n let data = \"\";\n\n for (const line of lines) {\n if (line.startsWith(\"data: \")) {\n data += line.slice(6);\n }\n }\n\n if (data) {\n try {\n const messages = this.parseResponseText(data);\n for (const msg of messages) {\n this.emitMessage(msg);\n }\n } catch {\n // Skip invalid JSON in SSE\n }\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n /**\n * Parse response text into JSON-RPC messages\n */\n private parseResponseText(text: string): JsonRpcMessage[] {\n const trimmed = text.trim();\n if (!trimmed) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n\n // Check if it's a batch response (array)\n if (Array.isArray(parsed)) {\n return parsed.filter((msg): msg is JsonRpcMessage =>\n this.isValidJsonRpcMessage(msg),\n );\n }\n\n // Single message\n if (this.isValidJsonRpcMessage(parsed)) {\n return [parsed];\n }\n\n return [];\n } catch {\n throw new MCPError(\n \"Failed to parse JSON-RPC response\",\n JSON_RPC_ERROR_CODES.PARSE_ERROR,\n );\n }\n }\n\n /**\n * Validate a JSON-RPC message\n */\n private isValidJsonRpcMessage(msg: unknown): msg is JsonRpcMessage {\n if (!msg || typeof msg !== \"object\") {\n return false;\n }\n\n const m = msg as Record<string, unknown>;\n if (m.jsonrpc !== \"2.0\") {\n return false;\n }\n\n // Request or notification: has method\n if (\"method\" in m && typeof m.method === \"string\") {\n return true;\n }\n\n // Response: has id and (result or error)\n if (\"id\" in m && (\"result\" in m || \"error\" in m)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Start listening for server-initiated events via SSE\n *\n * This is optional and used when the server supports server-initiated\n * notifications (e.g., tools/list_changed).\n */\n startEventStream(): void {\n if (this.eventSource || typeof EventSource === \"undefined\") {\n return;\n }\n\n // Build URL with session ID if available\n const url = new URL(this.url);\n if (this.sessionId) {\n url.searchParams.set(\"sessionId\", this.sessionId);\n }\n\n // Note: EventSource doesn't support custom headers natively\n // For authenticated endpoints, the server should use query params or cookies\n this.eventSource = new EventSource(url.toString());\n\n this.eventSource.onmessage = (event) => {\n try {\n const messages = this.parseResponseText(event.data);\n for (const msg of messages) {\n this.emitMessage(msg);\n }\n } catch {\n // Ignore parse errors from event stream\n }\n };\n\n this.eventSource.onerror = () => {\n // EventSource will automatically reconnect\n this.emitError(new MCPError(\"SSE connection error\"));\n };\n }\n\n /**\n * Stop the event stream\n */\n stopEventStream(): void {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = undefined;\n }\n }\n\n /**\n * Get the current session ID\n */\n getSessionId(): string | undefined {\n return this.sessionId;\n }\n\n /**\n * Set the session ID (used after initialization)\n */\n setSessionId(sessionId: string): void {\n this.sessionId = sessionId;\n }\n}\n","/**\n * MCP Tool Adapter\n *\n * Converts MCP tool definitions to the SDK's ToolDefinition format.\n */\n\nimport type {\n MCPToolDefinition,\n MCPToolCallResult,\n MCPToolInputSchema,\n MCPJsonSchemaProperty,\n MCPTextContent,\n MCPImageContent,\n MCPUIContent,\n MCPResourceContent,\n} from \"../types\";\nimport type { MCPUIResource } from \"../ui/types\";\nimport type {\n ToolDefinition,\n ToolInputSchema,\n JSONSchemaProperty,\n ToolResponse,\n ToolContext,\n AIContent,\n} from \"../../core/types/tools\";\n\n/**\n * Options for converting MCP tools to ToolDefinitions\n */\nexport interface MCPToolAdapterOptions {\n /** Prefix tool names with client name */\n prefix?: boolean;\n /** Register as server-side tool (default: true for MCP tools) */\n asServerTool?: boolean;\n /** Function to call the MCP tool */\n callTool: (\n name: string,\n args?: Record<string, unknown>,\n ) => Promise<MCPToolCallResult>;\n}\n\n/**\n * MCP Tool Adapter\n *\n * Handles conversion between MCP tool format and SDK ToolDefinition format.\n */\nexport class MCPToolAdapter {\n private clientName: string;\n\n constructor(clientName: string) {\n this.clientName = clientName;\n }\n\n /**\n * Convert an MCP tool to a ToolDefinition\n */\n toToolDefinition(\n mcpTool: MCPToolDefinition,\n options: MCPToolAdapterOptions,\n ): ToolDefinition {\n const { prefix = true, asServerTool = true, callTool } = options;\n\n const toolName = prefix\n ? `${this.clientName}_${mcpTool.name}`\n : mcpTool.name;\n\n // Store original name for calling\n const originalName = mcpTool.name;\n\n return {\n name: toolName,\n description: mcpTool.description ?? `MCP tool: ${mcpTool.name}`,\n location: asServerTool ? \"server\" : \"client\",\n inputSchema: this.convertInputSchema(mcpTool.inputSchema),\n handler: async (\n params: Record<string, unknown>,\n context?: ToolContext,\n ): Promise<ToolResponse> => {\n try {\n // Check for cancellation\n if (context?.signal?.aborted) {\n return {\n success: false,\n error: \"Tool execution cancelled\",\n };\n }\n\n // Call the MCP tool\n const result = await callTool(originalName, params);\n\n // Convert MCP result to ToolResponse\n return this.convertResult(result);\n } catch (error) {\n return {\n success: false,\n error:\n error instanceof Error\n ? error.message\n : \"Unknown error calling MCP tool\",\n };\n }\n },\n // MCP tools display their name as title\n title: this.formatToolTitle(mcpTool.name),\n executingTitle: `Calling ${this.formatToolTitle(mcpTool.name)}...`,\n completedTitle: `${this.formatToolTitle(mcpTool.name)} completed`,\n };\n }\n\n /**\n * Convert multiple MCP tools to ToolDefinitions\n */\n toToolDefinitions(\n mcpTools: MCPToolDefinition[],\n options: MCPToolAdapterOptions,\n ): ToolDefinition[] {\n return mcpTools.map((tool) => this.toToolDefinition(tool, options));\n }\n\n /**\n * Convert MCP input schema to SDK ToolInputSchema\n */\n private convertInputSchema(mcpSchema: MCPToolInputSchema): ToolInputSchema {\n return {\n type: \"object\",\n properties: mcpSchema.properties\n ? this.convertProperties(mcpSchema.properties)\n : {},\n required: mcpSchema.required,\n additionalProperties: mcpSchema.additionalProperties,\n };\n }\n\n /**\n * Convert MCP schema properties to SDK JSONSchemaProperty format\n */\n private convertProperties(\n properties: Record<string, MCPJsonSchemaProperty>,\n ): Record<string, JSONSchemaProperty> {\n const converted: Record<string, JSONSchemaProperty> = {};\n\n for (const [key, prop] of Object.entries(properties)) {\n converted[key] = this.convertProperty(prop);\n }\n\n return converted;\n }\n\n /**\n * Convert a single MCP property to SDK format\n */\n private convertProperty(prop: MCPJsonSchemaProperty): JSONSchemaProperty {\n // Handle type which could be string or array\n let type: JSONSchemaProperty[\"type\"] = \"string\";\n if (prop.type) {\n if (Array.isArray(prop.type)) {\n // Take the first non-null type\n const nonNull = prop.type.find((t) => t !== \"null\");\n type = (nonNull as JSONSchemaProperty[\"type\"]) || \"string\";\n } else {\n type = prop.type as JSONSchemaProperty[\"type\"];\n }\n }\n\n const converted: JSONSchemaProperty = {\n type,\n description: prop.description,\n };\n\n // Copy over optional properties\n if (prop.enum) {\n converted.enum = prop.enum as (string | number | boolean)[];\n }\n if (prop.default !== undefined) {\n converted.default = prop.default;\n }\n if (prop.minLength !== undefined) {\n converted.minLength = prop.minLength;\n }\n if (prop.maxLength !== undefined) {\n converted.maxLength = prop.maxLength;\n }\n if (prop.minimum !== undefined) {\n converted.minimum = prop.minimum;\n }\n if (prop.maximum !== undefined) {\n converted.maximum = prop.maximum;\n }\n if (prop.pattern !== undefined) {\n converted.pattern = prop.pattern;\n }\n\n // Handle nested objects\n if (prop.properties) {\n converted.properties = this.convertProperties(prop.properties);\n }\n if (prop.required) {\n converted.required = prop.required;\n }\n\n // Handle arrays\n if (prop.items) {\n converted.items = this.convertProperty(prop.items);\n }\n\n return converted;\n }\n\n /**\n * Convert MCP tool result to SDK ToolResponse\n */\n private convertResult(result: MCPToolCallResult): ToolResponse {\n const response: ToolResponse = {\n success: !result.isError,\n };\n\n // Process content array\n const textParts: string[] = [];\n const aiContent: AIContent[] = [];\n const uiResources: MCPUIResource[] = [];\n\n for (const content of result.content) {\n switch (content.type) {\n case \"text\":\n textParts.push((content as MCPTextContent).text);\n break;\n\n case \"image\": {\n const img = content as MCPImageContent;\n aiContent.push({\n type: \"image\",\n data: img.data,\n mediaType: img.mimeType,\n });\n break;\n }\n\n case \"resource\": {\n // Handle embedded resource content\n // Check if this is a UI resource (uri starts with ui://)\n // MCP servers return type: \"resource\" with ui:// URIs per MCP spec\n const res = (content as MCPResourceContent).resource;\n if (res.uri?.startsWith(\"ui://\")) {\n // This is a UI resource - extract for rendering\n uiResources.push({\n uri: res.uri,\n mimeType:\n (res.mimeType as MCPUIContent[\"resource\"][\"mimeType\"]) ||\n \"text/html\",\n content: res.text, // MCP uses \"text\" field, normalize to \"content\"\n blob: res.blob,\n });\n } else if (res.text) {\n // Regular resource with text content\n textParts.push(res.text);\n }\n break;\n }\n\n case \"ui\": {\n // Handle MCP-UI content (non-standard but supported for compatibility)\n const uiContent = content as MCPUIContent;\n uiResources.push({\n uri: uiContent.resource.uri,\n mimeType: uiContent.resource.mimeType,\n content: uiContent.resource.content,\n blob: uiContent.resource.blob,\n metadata: uiContent.resource.metadata,\n });\n break;\n }\n }\n }\n\n // Set message from text content\n if (textParts.length > 0) {\n response.message = textParts.join(\"\\n\");\n\n // Try to parse as JSON for structured data\n if (textParts.length === 1) {\n try {\n response.data = JSON.parse(textParts[0]);\n } catch {\n // Keep as text if not valid JSON\n response.data = textParts[0];\n }\n } else {\n response.data = textParts;\n }\n }\n\n // Add AI content for multimodal responses\n if (aiContent.length > 0) {\n response._aiContent = aiContent;\n }\n\n // Add UI resources for rendering\n if (uiResources.length > 0) {\n response._uiResources = uiResources;\n }\n\n // Set error if this was an error result\n if (result.isError) {\n response.error = textParts.join(\"\\n\") || \"Tool execution failed\";\n }\n\n return response;\n }\n\n /**\n * Format tool name as a readable title\n */\n private formatToolTitle(name: string): string {\n // Convert snake_case or kebab-case to Title Case\n return name\n .replace(/[-_]/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n }\n}\n\n/**\n * Convert an MCP tool to a ToolDefinition (standalone function)\n */\nexport function mcpToolToDefinition(\n clientName: string,\n mcpTool: MCPToolDefinition,\n options: MCPToolAdapterOptions,\n): ToolDefinition {\n const adapter = new MCPToolAdapter(clientName);\n return adapter.toToolDefinition(mcpTool, options);\n}\n\n/**\n * Convert multiple MCP tools to ToolDefinitions (standalone function)\n */\nexport function mcpToolsToDefinitions(\n clientName: string,\n mcpTools: MCPToolDefinition[],\n options: MCPToolAdapterOptions,\n): ToolDefinition[] {\n const adapter = new MCPToolAdapter(clientName);\n return adapter.toToolDefinitions(mcpTools, options);\n}\n","/**\n * MCP Client\n *\n * The core client class for connecting to MCP servers and managing\n * tools, resources, and the connection lifecycle.\n */\n\nimport type {\n MCPClientConfig,\n MCPClientState,\n MCPClientEvents,\n MCPConnectionState,\n MCPToolDefinition,\n MCPToolCallResult,\n MCPInitializeResult,\n MCPToolsListResult,\n JsonRpcMessage,\n JsonRpcResponse,\n MCPServerCapabilities,\n MCPServerInfo,\n} from \"../types\";\nimport { MCPError, JSON_RPC_ERROR_CODES } from \"../types\";\nimport { JsonRpcHandler } from \"../protocol/JsonRpcHandler\";\nimport {\n MCP_METHODS,\n createInitializeParams,\n createToolsListParams,\n createToolCallParams,\n createPingParams,\n isInitializeResult,\n isToolsListResult,\n isToolCallResult,\n} from \"../protocol/messages\";\nimport { HttpTransport } from \"../transports/HttpTransport\";\nimport type { MCPTransport } from \"../transports/types\";\nimport { MCPToolAdapter } from \"../tools/MCPToolAdapter\";\nimport type { ToolDefinition } from \"../../core/types/tools\";\n\n/**\n * MCP Client\n *\n * Provides a simple interface for connecting to MCP servers and using their tools.\n *\n * @example\n * ```typescript\n * const client = new MCPClient({\n * name: \"github\",\n * transport: \"http\",\n * url: \"https://mcp.github.com\",\n * headers: { Authorization: `Bearer ${token}` },\n * });\n *\n * await client.connect();\n * const tools = client.toToolDefinitions();\n * const result = await client.callTool(\"create_issue\", { title: \"Bug\" });\n * await client.disconnect();\n * ```\n */\nexport class MCPClient {\n private config: MCPClientConfig;\n private transport?: MCPTransport;\n private rpcHandler: JsonRpcHandler;\n private state: MCPClientState;\n private events: MCPClientEvents;\n private toolAdapter: MCPToolAdapter;\n\n constructor(config: MCPClientConfig, events?: MCPClientEvents) {\n this.config = config;\n this.events = events ?? {};\n this.rpcHandler = new JsonRpcHandler({ timeout: config.timeout ?? 30000 });\n this.toolAdapter = new MCPToolAdapter(config.name);\n this.state = {\n connectionState: \"disconnected\",\n tools: [],\n };\n }\n\n /**\n * Get the current client state\n */\n getState(): Readonly<MCPClientState> {\n return { ...this.state };\n }\n\n /**\n * Get the client name\n */\n getName(): string {\n return this.config.name;\n }\n\n /**\n * Check if client is connected\n */\n isConnected(): boolean {\n return this.state.connectionState === \"connected\";\n }\n\n /**\n * Connect to the MCP server\n */\n async connect(): Promise<void> {\n if (this.state.connectionState === \"connected\") {\n return;\n }\n\n if (this.state.connectionState === \"connecting\") {\n throw new MCPError(\"Connection already in progress\");\n }\n\n this.setConnectionState(\"connecting\");\n\n try {\n // Create transport based on config\n this.transport = this.createTransport();\n\n // Set up message handling\n this.transport.onMessage(this.handleMessage.bind(this));\n this.transport.onError(this.handleError.bind(this));\n this.transport.onClose(this.handleClose.bind(this));\n\n // Connect transport\n await this.transport.connect();\n\n // Perform MCP initialization handshake\n await this.initialize();\n\n // Mark as connected before fetching tools\n this.setConnectionState(\"connected\");\n\n // Fetch available tools\n await this.refreshTools();\n } catch (error) {\n this.setConnectionState(\n \"error\",\n error instanceof Error ? error.message : \"Connection failed\",\n );\n throw error;\n }\n }\n\n /**\n * Disconnect from the MCP server\n */\n async disconnect(): Promise<void> {\n if (this.state.connectionState === \"disconnected\") {\n return;\n }\n\n // Cancel any pending requests\n this.rpcHandler.cancelAllPending(\"Client disconnecting\");\n\n // Disconnect transport\n if (this.transport) {\n await this.transport.disconnect();\n this.transport = undefined;\n }\n\n // Reset state\n this.state = {\n connectionState: \"disconnected\",\n tools: [],\n };\n }\n\n /**\n * Call an MCP tool\n */\n async callTool(\n name: string,\n args?: Record<string, unknown>,\n ): Promise<MCPToolCallResult> {\n this.ensureConnected();\n\n const result = await this.request(\n MCP_METHODS.TOOLS_CALL,\n createToolCallParams(name, args) as unknown as Record<string, unknown>,\n );\n\n if (!isToolCallResult(result)) {\n throw new MCPError(\n \"Invalid tool call result from server\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n return result;\n }\n\n /**\n * Refresh the list of available tools\n */\n async refreshTools(): Promise<MCPToolDefinition[]> {\n this.ensureConnected();\n\n const allTools: MCPToolDefinition[] = [];\n let cursor: string | undefined;\n\n // Handle pagination\n do {\n const result = await this.request(\n MCP_METHODS.TOOLS_LIST,\n createToolsListParams(cursor),\n );\n\n if (!isToolsListResult(result)) {\n throw new MCPError(\n \"Invalid tools list result from server\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n allTools.push(...result.tools);\n cursor = result.nextCursor;\n } while (cursor);\n\n this.state.tools = allTools;\n this.state.lastActivity = Date.now();\n this.events.onToolsChange?.(allTools);\n\n return allTools;\n }\n\n /**\n * Convert MCP tools to ToolDefinition format for use with CopilotProvider\n */\n toToolDefinitions(options?: {\n prefixToolNames?: boolean;\n serverLocation?: boolean;\n }): ToolDefinition[] {\n const prefix = options?.prefixToolNames !== false;\n const asServer = options?.serverLocation ?? false;\n\n return this.state.tools.map((tool) =>\n this.toolAdapter.toToolDefinition(tool, {\n prefix,\n asServerTool: asServer,\n callTool: this.callTool.bind(this),\n }),\n );\n }\n\n /**\n * Get the list of MCP tools\n */\n getTools(): MCPToolDefinition[] {\n return [...this.state.tools];\n }\n\n /**\n * Get server info\n */\n getServerInfo(): MCPServerInfo | undefined {\n return this.state.serverInfo;\n }\n\n /**\n * Get server capabilities\n */\n getServerCapabilities(): MCPServerCapabilities | undefined {\n return this.state.serverCapabilities;\n }\n\n /**\n * Ping the server to check connectivity\n */\n async ping(): Promise<boolean> {\n try {\n await this.request(MCP_METHODS.PING, createPingParams());\n return true;\n } catch {\n return false;\n }\n }\n\n // ============================================\n // Private Methods\n // ============================================\n\n /**\n * Create transport based on config\n */\n private createTransport(): MCPTransport {\n switch (this.config.transport) {\n case \"http\":\n if (!this.config.url) {\n throw new MCPError(\n \"URL is required for HTTP transport\",\n JSON_RPC_ERROR_CODES.INVALID_PARAMS,\n );\n }\n return new HttpTransport({\n url: this.config.url,\n headers: this.config.headers,\n timeout: this.config.timeout,\n });\n\n case \"sse\":\n // SSE uses the same transport but with different behavior\n if (!this.config.url) {\n throw new MCPError(\n \"URL is required for SSE transport\",\n JSON_RPC_ERROR_CODES.INVALID_PARAMS,\n );\n }\n return new HttpTransport({\n url: this.config.url,\n headers: this.config.headers,\n timeout: this.config.timeout,\n });\n\n case \"stdio\":\n // Stdio transport will be implemented in Phase 3\n throw new MCPError(\n \"Stdio transport not yet implemented. Use HTTP or SSE transport.\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n\n default:\n throw new MCPError(\n `Unknown transport type: ${this.config.transport}`,\n JSON_RPC_ERROR_CODES.INVALID_PARAMS,\n );\n }\n }\n\n /**\n * Perform MCP initialization handshake\n */\n private async initialize(): Promise<void> {\n const params = createInitializeParams(\n this.config.clientInfo,\n this.config.capabilities,\n );\n\n const result = await this.request(\n MCP_METHODS.INITIALIZE,\n params as unknown as Record<string, unknown>,\n );\n\n if (!isInitializeResult(result)) {\n throw new MCPError(\n \"Invalid initialization result from server\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n // Store server info\n this.state.serverInfo = result.serverInfo;\n this.state.serverCapabilities = result.capabilities;\n\n // Send initialized notification\n await this.notify(MCP_METHODS.INITIALIZED);\n }\n\n /**\n * Send a JSON-RPC request and wait for response\n */\n private async request(\n method: string,\n params?: Record<string, unknown>,\n ): Promise<unknown> {\n if (!this.transport) {\n throw new MCPError(\n \"Transport not initialized\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n const request = this.rpcHandler.createRequest(method, params);\n const responsePromise = this.rpcHandler.registerRequest(\n request,\n this.config.timeout,\n );\n\n await this.transport.send(request);\n\n return responsePromise;\n }\n\n /**\n * Send a JSON-RPC notification (no response expected)\n */\n private async notify(\n method: string,\n params?: Record<string, unknown>,\n ): Promise<void> {\n if (!this.transport) {\n throw new MCPError(\n \"Transport not initialized\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n const notification = this.rpcHandler.createNotification(method, params);\n await this.transport.send(notification);\n }\n\n /**\n * Handle incoming JSON-RPC message\n */\n private handleMessage(message: JsonRpcMessage): void {\n // Check if it's a response to a pending request\n if (this.rpcHandler.isResponse(message)) {\n this.rpcHandler.handleResponse(message as JsonRpcResponse);\n return;\n }\n\n // Check if it's a notification\n if (this.rpcHandler.isNotification(message)) {\n const notification = message as import(\"../types\").JsonRpcNotification;\n this.handleNotification(notification.method, notification.params);\n return;\n }\n\n // Check if it's a request (server-initiated, e.g., elicitation)\n if (this.rpcHandler.isRequest(message)) {\n const request = message as import(\"../types\").JsonRpcRequest;\n this.handleServerRequest(request.id, request.method, request.params);\n }\n }\n\n /**\n * Handle server notification\n */\n private handleNotification(\n method: string,\n params?: Record<string, unknown>,\n ): void {\n switch (method) {\n case MCP_METHODS.TOOLS_LIST_CHANGED:\n // Refresh tools when server notifies of changes\n this.refreshTools().catch((error) => {\n this.events.onError?.(error);\n });\n break;\n\n default:\n // Pass unknown notifications to event handler\n this.events.onNotification?.(method, params);\n }\n }\n\n /**\n * Handle server-initiated request (e.g., elicitation)\n */\n private async handleServerRequest(\n _id: string | number,\n method: string,\n params?: Record<string, unknown>,\n ): Promise<void> {\n // Handle elicitation requests\n if (\n method === MCP_METHODS.ELICITATION_REQUEST &&\n this.events.onElicitationRequest\n ) {\n try {\n const elicitationRequest =\n params as unknown as import(\"../types\").MCPElicitationRequest;\n const response =\n await this.events.onElicitationRequest(elicitationRequest);\n\n // Send response back to server\n await this.notify(\n MCP_METHODS.ELICITATION_RESPONSE,\n response as unknown as Record<string, unknown>,\n );\n } catch (error) {\n // Send rejection response\n await this.notify(MCP_METHODS.ELICITATION_RESPONSE, {\n requestId: params?.requestId as string,\n accepted: false,\n reason: error instanceof Error ? error.message : \"User rejected\",\n });\n }\n }\n }\n\n /**\n * Handle transport error\n */\n private handleError(error: Error): void {\n this.setConnectionState(\"error\", error.message);\n this.events.onError?.(error);\n }\n\n /**\n * Handle transport close\n */\n private handleClose(): void {\n if (this.state.connectionState === \"connected\") {\n this.setConnectionState(\"disconnected\");\n }\n }\n\n /**\n * Update connection state\n */\n private setConnectionState(state: MCPConnectionState, error?: string): void {\n this.state.connectionState = state;\n this.state.error = error;\n this.events.onConnectionStateChange?.(state);\n }\n\n /**\n * Ensure client is connected\n */\n private ensureConnected(): void {\n if (!this.isConnected()) {\n throw new MCPError(\n \"Client not connected. Call connect() first.\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n }\n}\n\n/**\n * Create an MCP client\n *\n * Factory function for creating MCPClient instances.\n *\n * @example\n * ```typescript\n * const client = createMCPClient({\n * name: \"github\",\n * transport: \"http\",\n * url: \"https://mcp.github.com\",\n * });\n *\n * await client.connect();\n * const tools = client.toToolDefinitions();\n * ```\n */\nexport function createMCPClient(\n config: MCPClientConfig,\n events?: MCPClientEvents,\n): MCPClient {\n return new MCPClient(config, events);\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { webSearchTool } from './chunk-
|
|
2
|
-
import { tool, failure, success } from './chunk-
|
|
1
|
+
import { webSearchTool } from './chunk-ZPYQDMUX.js';
|
|
2
|
+
import { tool, failure, success } from './chunk-BKO7DSPU.js';
|
|
3
3
|
|
|
4
4
|
// src/core/tools/screenshot.ts
|
|
5
5
|
var isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
|
|
@@ -2818,5 +2818,5 @@ function createThreadManager(config, callbacks) {
|
|
|
2818
2818
|
}
|
|
2819
2819
|
|
|
2820
2820
|
export { CLOUD_MAX_FILE_SIZE, DEFAULT_YOURGPT_ENDPOINT, SimpleThreadManagerState, ThreadManager, actionToTool, builtinTools, captureCurrentLogs, captureScreenshot, clearConsoleLogs, clearNetworkRequests, consoleLogsTool, createAssistantMessage, createCloudStorage, createConsoleLogsTool, createCustomDetector, createLocalStorageAdapter, createMemoryAdapter, createMessage, createNetworkRequestsTool, createSSEStream, createScreenshotTool, createServerAdapter, createThreadManager, createToolCall, createToolMessage, createUserMessage, defaultSystemMessage, defineClientTool, defineServerTool, defineTool, detectIntent, formatLogsForAI, formatRequestsForAI, formatSSE, generateId, generateMessageId, generateSuggestionReason, generateThreadId, generateThreadTitle, generateToolCallId, getAttachmentTypeFromMime, getConsoleErrors, getConsoleLogs, getConsoleWarnings, getFailedRequests, getNetworkRequests, getPrimaryTool, hasToolCalls, hasToolSuggestions, isConsoleCaptureActive, isNetworkCaptureActive, isScreenshotSupported, isToolResult, localStorageAdapter, networkRequestsTool, noopAdapter, parseSSELine, parseStreamEvent, parseToolCallArgs, processFileToAttachment, resizeScreenshot, screenshotTool, serializeStreamEvent, startConsoleCapture, startNetworkCapture, stopConsoleCapture, stopNetworkCapture, streamSSE, zodObjectToInputSchema, zodToJsonSchema };
|
|
2821
|
-
//# sourceMappingURL=chunk-
|
|
2822
|
-
//# sourceMappingURL=chunk-
|
|
2821
|
+
//# sourceMappingURL=chunk-7XFFRV7D.js.map
|
|
2822
|
+
//# sourceMappingURL=chunk-7XFFRV7D.js.map
|