@yourgpt/copilot-sdk 2.0.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/README.md +42 -0
- package/dist/{ThreadManager-JT0sqSSD.d.ts → ThreadManager-Dkp_eLty.d.ts} +1 -1
- package/dist/{ThreadManager-CUq5Ocu2.d.cts → ThreadManager-LfFRhr4e.d.cts} +1 -1
- package/dist/anthropic-6F5GRE3B.js +4 -0
- package/dist/anthropic-6F5GRE3B.js.map +1 -0
- package/dist/anthropic-DGalr_Fw.d.cts +17 -0
- package/dist/anthropic-DkCEDYOt.d.ts +17 -0
- package/dist/anthropic-NMTRABEH.cjs +21 -0
- package/dist/anthropic-NMTRABEH.cjs.map +1 -0
- package/dist/brave-DdnWb7Gb.d.cts +17 -0
- package/dist/brave-DsI9n7Wr.d.ts +17 -0
- package/dist/brave-OYKCOZEM.cjs +21 -0
- package/dist/brave-OYKCOZEM.cjs.map +1 -0
- package/dist/brave-XSASGGH2.js +4 -0
- package/dist/brave-XSASGGH2.js.map +1 -0
- package/dist/chunk-2FAWEBZS.cjs +88 -0
- package/dist/chunk-2FAWEBZS.cjs.map +1 -0
- package/dist/chunk-53UGJNHN.js +92 -0
- package/dist/chunk-53UGJNHN.js.map +1 -0
- package/dist/chunk-6T5XXJEP.cjs +80 -0
- package/dist/chunk-6T5XXJEP.cjs.map +1 -0
- package/dist/chunk-7K7HZMP4.cjs +1170 -0
- package/dist/chunk-7K7HZMP4.cjs.map +1 -0
- package/dist/chunk-7W7QLZNC.js +72 -0
- package/dist/chunk-7W7QLZNC.js.map +1 -0
- package/dist/{chunk-JM7PB2LP.js → chunk-7XFFRV7D.js} +10 -66
- package/dist/chunk-7XFFRV7D.js.map +1 -0
- package/dist/chunk-ASV6JLYG.cjs +99 -0
- package/dist/chunk-ASV6JLYG.cjs.map +1 -0
- package/dist/chunk-BH7MNDWW.js +1152 -0
- package/dist/chunk-BH7MNDWW.js.map +1 -0
- package/dist/chunk-BKO7DSPU.js +67 -0
- package/dist/chunk-BKO7DSPU.js.map +1 -0
- package/dist/chunk-CBAHCI4R.cjs +76 -0
- package/dist/chunk-CBAHCI4R.cjs.map +1 -0
- package/dist/chunk-CEKAYA2Q.cjs +74 -0
- package/dist/chunk-CEKAYA2Q.cjs.map +1 -0
- package/dist/chunk-CEOMTQTP.js +85 -0
- package/dist/chunk-CEOMTQTP.js.map +1 -0
- package/dist/chunk-DABZYCVX.js +84 -0
- package/dist/chunk-DABZYCVX.js.map +1 -0
- package/dist/chunk-DGUM43GV.js +10 -0
- package/dist/chunk-DGUM43GV.js.map +1 -0
- package/dist/chunk-G4SF2PNQ.js +33 -0
- package/dist/chunk-G4SF2PNQ.js.map +1 -0
- package/dist/chunk-GANCV72Z.cjs +110 -0
- package/dist/chunk-GANCV72Z.cjs.map +1 -0
- package/dist/{chunk-BLSI67J6.cjs → chunk-H5XMKBBA.cjs} +425 -30
- package/dist/chunk-H5XMKBBA.cjs.map +1 -0
- package/dist/{chunk-CJ7UWN2Y.js → chunk-IXFV6AW6.js} +397 -7
- package/dist/chunk-IXFV6AW6.js.map +1 -0
- package/dist/chunk-JEQ2X3Z6.cjs +12 -0
- package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
- package/dist/chunk-JO4BHPAD.cjs +40 -0
- package/dist/chunk-JO4BHPAD.cjs.map +1 -0
- package/dist/chunk-MEBXW75C.cjs +89 -0
- package/dist/chunk-MEBXW75C.cjs.map +1 -0
- package/dist/chunk-MNDGIW47.js +76 -0
- package/dist/chunk-MNDGIW47.js.map +1 -0
- package/dist/chunk-PPFHA6IL.js +83 -0
- package/dist/chunk-PPFHA6IL.js.map +1 -0
- package/dist/chunk-RQ74USYU.js +128 -0
- package/dist/chunk-RQ74USYU.js.map +1 -0
- package/dist/chunk-TXLIY7GF.cjs +132 -0
- package/dist/chunk-TXLIY7GF.cjs.map +1 -0
- package/dist/chunk-UIWFYMAO.cjs +82 -0
- package/dist/chunk-UIWFYMAO.cjs.map +1 -0
- package/dist/{chunk-4PRWNAXQ.cjs → chunk-UOWLKFXK.cjs} +27 -89
- package/dist/chunk-UOWLKFXK.cjs.map +1 -0
- package/dist/chunk-VD74IPKB.js +106 -0
- package/dist/chunk-VD74IPKB.js.map +1 -0
- package/dist/chunk-W73FBYIH.cjs +87 -0
- package/dist/chunk-W73FBYIH.cjs.map +1 -0
- package/dist/chunk-XGITAEXU.js +93 -0
- package/dist/chunk-XGITAEXU.js.map +1 -0
- package/dist/chunk-XWOHNY3F.cjs +96 -0
- package/dist/chunk-XWOHNY3F.cjs.map +1 -0
- package/dist/chunk-ZPYQDMUX.js +79 -0
- package/dist/chunk-ZPYQDMUX.js.map +1 -0
- package/dist/core/index.cjs +156 -84
- package/dist/core/index.d.cts +16 -4
- package/dist/core/index.d.ts +16 -4
- package/dist/core/index.js +13 -1
- package/dist/exa-72KFY5A7.cjs +21 -0
- package/dist/exa-72KFY5A7.cjs.map +1 -0
- package/dist/exa-Dp9U-WTc.d.ts +17 -0
- package/dist/exa-NNVPBC2M.js +4 -0
- package/dist/exa-NNVPBC2M.js.map +1 -0
- package/dist/exa-jJSPhyUW.d.cts +17 -0
- package/dist/google-CHU2yycE.d.cts +17 -0
- package/dist/google-CTEK6SV2.js +4 -0
- package/dist/google-CTEK6SV2.js.map +1 -0
- package/dist/google-Da8IQxaI.d.ts +17 -0
- package/dist/google-IIUXFFVF.cjs +21 -0
- package/dist/google-IIUXFFVF.cjs.map +1 -0
- package/dist/index-2VtgKM8S.d.cts +206 -0
- package/dist/index-pWEH7pUE.d.ts +206 -0
- package/dist/mcp/index.cjs +670 -0
- package/dist/mcp/index.cjs.map +1 -0
- package/dist/mcp/index.d.cts +779 -0
- package/dist/mcp/index.d.ts +779 -0
- package/dist/mcp/index.js +574 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/openai-6KTCQ7PZ.cjs +21 -0
- package/dist/openai-6KTCQ7PZ.cjs.map +1 -0
- package/dist/openai-7W2PCNW5.js +4 -0
- package/dist/openai-7W2PCNW5.js.map +1 -0
- package/dist/openai-Cam8hF4f.d.ts +17 -0
- package/dist/openai-HVSCuXgO.d.cts +17 -0
- package/dist/react/index.cjs +75 -42
- package/dist/react/index.d.cts +270 -45
- package/dist/react/index.d.ts +270 -45
- package/dist/react/index.js +15 -2
- package/dist/searxng-AXLVGY7Z.js +4 -0
- package/dist/searxng-AXLVGY7Z.js.map +1 -0
- package/dist/searxng-EJKNY236.cjs +21 -0
- package/dist/searxng-EJKNY236.cjs.map +1 -0
- package/dist/searxng-K0qtY9vp.d.ts +17 -0
- package/dist/searxng-QGOte_Gq.d.cts +17 -0
- package/dist/serper-3JYJHJX6.js +4 -0
- package/dist/serper-3JYJHJX6.js.map +1 -0
- package/dist/serper-63FT4AOL.cjs +21 -0
- package/dist/serper-63FT4AOL.cjs.map +1 -0
- package/dist/serper-7Czya3PW.d.ts +17 -0
- package/dist/serper-JzdaSnS9.d.cts +17 -0
- package/dist/styles.css +38 -0
- package/dist/tavily-AWFP4RM7.cjs +21 -0
- package/dist/tavily-AWFP4RM7.cjs.map +1 -0
- package/dist/tavily-C8cXXojE.d.cts +17 -0
- package/dist/tavily-CIWAAZPH.js +4 -0
- package/dist/tavily-CIWAAZPH.js.map +1 -0
- package/dist/tavily-DdSGVgkE.d.ts +17 -0
- package/dist/themes/catppuccin.css +2 -0
- package/dist/themes/claude.css +2 -0
- package/dist/themes/linear.css +2 -0
- package/dist/themes/modern-minimal.css +2 -0
- package/dist/themes/posthog.css +2 -0
- package/dist/themes/supabase.css +2 -0
- package/dist/themes/twitter.css +2 -0
- package/dist/themes/vercel.css +2 -0
- package/dist/tools/anthropic/index.cjs +61 -0
- package/dist/tools/anthropic/index.cjs.map +1 -0
- package/dist/tools/anthropic/index.d.cts +67 -0
- package/dist/tools/anthropic/index.d.ts +67 -0
- package/dist/tools/anthropic/index.js +56 -0
- package/dist/tools/anthropic/index.js.map +1 -0
- package/dist/tools/brave/index.cjs +85 -0
- package/dist/tools/brave/index.cjs.map +1 -0
- package/dist/tools/brave/index.d.cts +91 -0
- package/dist/tools/brave/index.d.ts +91 -0
- package/dist/tools/brave/index.js +80 -0
- package/dist/tools/brave/index.js.map +1 -0
- package/dist/tools/exa/index.cjs +90 -0
- package/dist/tools/exa/index.cjs.map +1 -0
- package/dist/tools/exa/index.d.cts +92 -0
- package/dist/tools/exa/index.d.ts +92 -0
- package/dist/tools/exa/index.js +85 -0
- package/dist/tools/exa/index.js.map +1 -0
- package/dist/tools/google/index.cjs +81 -0
- package/dist/tools/google/index.cjs.map +1 -0
- package/dist/tools/google/index.d.cts +81 -0
- package/dist/tools/google/index.d.ts +81 -0
- package/dist/tools/google/index.js +76 -0
- package/dist/tools/google/index.js.map +1 -0
- package/dist/tools/openai/index.cjs +83 -0
- package/dist/tools/openai/index.cjs.map +1 -0
- package/dist/tools/openai/index.d.cts +84 -0
- package/dist/tools/openai/index.d.ts +84 -0
- package/dist/tools/openai/index.js +78 -0
- package/dist/tools/openai/index.js.map +1 -0
- package/dist/tools/searxng/index.cjs +85 -0
- package/dist/tools/searxng/index.cjs.map +1 -0
- package/dist/tools/searxng/index.d.cts +91 -0
- package/dist/tools/searxng/index.d.ts +91 -0
- package/dist/tools/searxng/index.js +80 -0
- package/dist/tools/searxng/index.js.map +1 -0
- package/dist/tools/serper/index.cjs +85 -0
- package/dist/tools/serper/index.cjs.map +1 -0
- package/dist/tools/serper/index.d.cts +91 -0
- package/dist/tools/serper/index.d.ts +91 -0
- package/dist/tools/serper/index.js +80 -0
- package/dist/tools/serper/index.js.map +1 -0
- package/dist/tools/tavily/index.cjs +91 -0
- package/dist/tools/tavily/index.cjs.map +1 -0
- package/dist/tools/tavily/index.d.cts +95 -0
- package/dist/tools/tavily/index.d.ts +95 -0
- package/dist/tools/tavily/index.js +86 -0
- package/dist/tools/tavily/index.js.map +1 -0
- package/dist/tools/web-search/index.cjs +31 -0
- package/dist/tools/web-search/index.cjs.map +1 -0
- package/dist/tools/web-search/index.d.cts +3 -0
- package/dist/tools/web-search/index.d.ts +3 -0
- package/dist/tools/web-search/index.js +14 -0
- package/dist/tools/web-search/index.js.map +1 -0
- package/dist/{types-BtAaOV07.d.cts → tools-DDWrco4h.d.cts} +43 -367
- package/dist/{types-BtAaOV07.d.ts → tools-DDWrco4h.d.ts} +43 -367
- package/dist/types-B20VCJXL.d.cts +347 -0
- package/dist/types-B20VCJXL.d.ts +347 -0
- package/dist/types-Cizh9K_f.d.ts +441 -0
- package/dist/types-DG2ya08y.d.cts +367 -0
- package/dist/types-DG2ya08y.d.ts +367 -0
- package/dist/types-DjSfYNKj.d.cts +441 -0
- package/dist/types-ZguuKEs_.d.cts +127 -0
- package/dist/types-ZguuKEs_.d.ts +127 -0
- package/dist/ui/index.cjs +1075 -148
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.d.cts +410 -4
- package/dist/ui/index.d.ts +410 -4
- package/dist/ui/index.js +1007 -96
- package/dist/ui/index.js.map +1 -1
- package/package.json +52 -2
- package/dist/chunk-4PRWNAXQ.cjs.map +0 -1
- package/dist/chunk-BLSI67J6.cjs.map +0 -1
- package/dist/chunk-CJ7UWN2Y.js.map +0 -1
- package/dist/chunk-JM7PB2LP.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/client/MCPClientManager.ts","../../src/mcp/transports/SSETransport.ts","../../src/mcp/transports/StdioTransport.ts"],"names":["createMCPClient","BaseTransport","MCPError","JSON_RPC_ERROR_CODES","__require"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * MCP Client Manager\n *\n * Manages multiple MCP client connections simultaneously.\n * Useful for connecting to multiple MCP servers and aggregating their tools.\n */\n\nimport { MCPClient, createMCPClient } from \"./MCPClient\";\nimport type {\n MCPClientConfig,\n MCPClientEvents,\n MCPClientState,\n MCPToolDefinition,\n MCPConnectionState,\n} from \"../types\";\nimport type { ToolDefinition } from \"../../core/types/tools\";\n\n/**\n * MCP Client Manager configuration for a single client\n */\nexport interface MCPManagedClientConfig extends MCPClientConfig {\n /** Enable this client (default: true) */\n enabled?: boolean;\n}\n\n/**\n * MCP Client Manager events\n */\nexport interface MCPClientManagerEvents {\n /** Called when any client's connection state changes */\n onConnectionStateChange?: (\n clientName: string,\n state: MCPConnectionState,\n ) => void;\n /** Called when any client's tools change */\n onToolsChange?: (clientName: string, tools: MCPToolDefinition[]) => void;\n /** Called when any client encounters an error */\n onError?: (clientName: string, error: Error) => void;\n /** Called when all clients are connected */\n onAllConnected?: () => void;\n /** Called when all clients are disconnected */\n onAllDisconnected?: () => void;\n}\n\n/**\n * Aggregated state for all managed clients\n */\nexport interface MCPClientManagerState {\n /** Individual client states */\n clients: Record<string, MCPClientState>;\n /** All tools from all connected clients */\n allTools: MCPToolDefinition[];\n /** Whether all enabled clients are connected */\n allConnected: boolean;\n /** Whether any client is connecting */\n anyConnecting: boolean;\n /** Whether any client has an error */\n anyError: boolean;\n /** Total number of tools across all clients */\n totalToolCount: number;\n}\n\n/**\n * MCP Client Manager\n *\n * Manages multiple MCP client connections for scenarios where you need\n * to connect to multiple MCP servers simultaneously.\n *\n * @example\n * ```typescript\n * const manager = new MCPClientManager([\n * { name: \"github\", transport: \"http\", url: \"https://mcp.github.com\" },\n * { name: \"slack\", transport: \"http\", url: \"https://mcp.slack.com\" },\n * { name: \"filesystem\", transport: \"stdio\", command: \"npx\", args: [\"-y\", \"@anthropic/filesystem-mcp-server\"] },\n * ]);\n *\n * await manager.connectAll();\n *\n * // Get all tools from all clients\n * const tools = manager.getAllToolDefinitions();\n *\n * // Call a tool on a specific client\n * const result = await manager.callTool(\"github\", \"create_issue\", { title: \"Bug\" });\n *\n * await manager.disconnectAll();\n * ```\n */\nexport class MCPClientManager {\n private clients = new Map<string, MCPClient>();\n private configs: MCPManagedClientConfig[];\n private events: MCPClientManagerEvents;\n\n constructor(\n configs: MCPManagedClientConfig[],\n events?: MCPClientManagerEvents,\n ) {\n this.configs = configs;\n this.events = events ?? {};\n }\n\n /**\n * Get the current aggregated state\n */\n getState(): MCPClientManagerState {\n const clientStates: Record<string, MCPClientState> = {};\n const allTools: MCPToolDefinition[] = [];\n let allConnected = true;\n let anyConnecting = false;\n let anyError = false;\n\n for (const config of this.configs) {\n if (config.enabled === false) continue;\n\n const client = this.clients.get(config.name);\n if (client) {\n const state = client.getState();\n clientStates[config.name] = state;\n allTools.push(...state.tools);\n\n if (state.connectionState !== \"connected\") {\n allConnected = false;\n }\n if (state.connectionState === \"connecting\") {\n anyConnecting = true;\n }\n if (state.connectionState === \"error\") {\n anyError = true;\n }\n } else {\n allConnected = false;\n }\n }\n\n return {\n clients: clientStates,\n allTools,\n allConnected,\n anyConnecting,\n anyError,\n totalToolCount: allTools.length,\n };\n }\n\n /**\n * Connect all enabled clients\n */\n async connectAll(): Promise<void> {\n const connectPromises: Promise<void>[] = [];\n\n for (const config of this.configs) {\n if (config.enabled === false) continue;\n\n const promise = this.connect(config.name).catch((error) => {\n // Log but don't fail other connections\n console.error(`Failed to connect ${config.name}:`, error);\n this.events.onError?.(\n config.name,\n error instanceof Error ? error : new Error(String(error)),\n );\n });\n\n connectPromises.push(promise);\n }\n\n await Promise.all(connectPromises);\n\n // Check if all connected\n const state = this.getState();\n if (state.allConnected) {\n this.events.onAllConnected?.();\n }\n }\n\n /**\n * Connect a specific client\n */\n async connect(name: string): Promise<void> {\n const config = this.configs.find((c) => c.name === name);\n if (!config) {\n throw new Error(`Client \"${name}\" not found in configuration`);\n }\n\n if (config.enabled === false) {\n throw new Error(`Client \"${name}\" is disabled`);\n }\n\n // Create client if it doesn't exist\n let client = this.clients.get(name);\n if (!client) {\n client = this.createClient(config);\n this.clients.set(name, client);\n }\n\n await client.connect();\n }\n\n /**\n * Disconnect all clients\n */\n async disconnectAll(): Promise<void> {\n const disconnectPromises: Promise<void>[] = [];\n\n for (const client of this.clients.values()) {\n disconnectPromises.push(\n client.disconnect().catch((error) => {\n console.error(\"Error disconnecting client:\", error);\n }),\n );\n }\n\n await Promise.all(disconnectPromises);\n this.events.onAllDisconnected?.();\n }\n\n /**\n * Disconnect a specific client\n */\n async disconnect(name: string): Promise<void> {\n const client = this.clients.get(name);\n if (client) {\n await client.disconnect();\n }\n }\n\n /**\n * Get a specific client\n */\n getClient(name: string): MCPClient | undefined {\n return this.clients.get(name);\n }\n\n /**\n * Get all connected clients\n */\n getConnectedClients(): MCPClient[] {\n return Array.from(this.clients.values()).filter((c) => c.isConnected());\n }\n\n /**\n * Get all tool definitions from all connected clients\n */\n getAllToolDefinitions(options?: {\n prefixToolNames?: boolean;\n }): ToolDefinition[] {\n const tools: ToolDefinition[] = [];\n\n for (const client of this.getConnectedClients()) {\n const clientTools = client.toToolDefinitions({\n prefixToolNames: options?.prefixToolNames ?? true,\n });\n tools.push(...clientTools);\n }\n\n return tools;\n }\n\n /**\n * Get tool definitions from a specific client\n */\n getToolDefinitions(\n name: string,\n options?: { prefixToolNames?: boolean },\n ): ToolDefinition[] {\n const client = this.clients.get(name);\n if (!client || !client.isConnected()) {\n return [];\n }\n\n return client.toToolDefinitions({\n prefixToolNames: options?.prefixToolNames ?? true,\n });\n }\n\n /**\n * Call a tool on a specific client\n */\n async callTool(\n clientName: string,\n toolName: string,\n args?: Record<string, unknown>,\n ): Promise<import(\"../types\").MCPToolCallResult> {\n const client = this.clients.get(clientName);\n if (!client) {\n throw new Error(`Client \"${clientName}\" not found`);\n }\n\n if (!client.isConnected()) {\n throw new Error(`Client \"${clientName}\" is not connected`);\n }\n\n return client.callTool(toolName, args);\n }\n\n /**\n * Refresh tools for all connected clients\n */\n async refreshAllTools(): Promise<void> {\n const refreshPromises: Promise<void>[] = [];\n\n for (const client of this.getConnectedClients()) {\n refreshPromises.push(\n client\n .refreshTools()\n .then(() => undefined)\n .catch((error) => {\n console.error(\"Error refreshing tools:\", error);\n }),\n );\n }\n\n await Promise.all(refreshPromises);\n }\n\n /**\n * Check if a specific client is connected\n */\n isConnected(name: string): boolean {\n const client = this.clients.get(name);\n return client?.isConnected() ?? false;\n }\n\n /**\n * Create a client with event forwarding\n */\n private createClient(config: MCPManagedClientConfig): MCPClient {\n const clientEvents: MCPClientEvents = {\n onConnectionStateChange: (state) => {\n this.events.onConnectionStateChange?.(config.name, state);\n\n // Check for all connected/disconnected\n const managerState = this.getState();\n if (state === \"connected\" && managerState.allConnected) {\n this.events.onAllConnected?.();\n }\n },\n onToolsChange: (tools) => {\n this.events.onToolsChange?.(config.name, tools);\n },\n onError: (error) => {\n this.events.onError?.(config.name, error);\n },\n };\n\n return createMCPClient(config, clientEvents);\n }\n}\n\n/**\n * Create an MCP Client Manager\n */\nexport function createMCPClientManager(\n configs: MCPManagedClientConfig[],\n events?: MCPClientManagerEvents,\n): MCPClientManager {\n return new MCPClientManager(configs, events);\n}\n","/**\n * SSE (Server-Sent Events) Transport for MCP\n *\n * Implements SSE transport for MCP servers that prefer server-push\n * communication. Sends requests via HTTP POST and receives responses\n * and notifications via SSE.\n */\n\nimport type {\n JsonRpcRequest,\n JsonRpcNotification,\n JsonRpcMessage,\n} from \"../types\";\nimport { MCPError, JSON_RPC_ERROR_CODES } from \"../types\";\nimport { BaseTransport, type SSETransportOptions } from \"./types\";\n\n/**\n * SSE Transport\n *\n * Uses HTTP POST for sending requests and Server-Sent Events for\n * receiving responses and server-initiated notifications.\n */\nexport class SSETransport extends BaseTransport {\n private url: string;\n private headers: Record<string, string>;\n private timeout: number;\n private eventSource?: EventSource;\n private messageEndpoint?: string;\n private sessionId?: string;\n\n constructor(options: SSETransportOptions) {\n super();\n this.url = options.url;\n this.headers = options.headers ?? {};\n this.timeout = options.timeout ?? 30000;\n }\n\n /**\n * Connect to the SSE endpoint\n */\n async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n return new Promise((resolve, reject) => {\n try {\n // Create EventSource for receiving messages\n // Note: EventSource doesn't support custom headers natively\n // The URL should include auth via query params if needed\n const sseUrl = new URL(this.url);\n\n // Add any session ID if we have one\n if (this.sessionId) {\n sseUrl.searchParams.set(\"sessionId\", this.sessionId);\n }\n\n this.eventSource = new EventSource(sseUrl.toString());\n\n // Handle SSE connection open\n this.eventSource.onopen = () => {\n this.connected = true;\n resolve();\n };\n\n // Handle incoming messages\n this.eventSource.onmessage = (event) => {\n this.handleSSEMessage(event.data);\n };\n\n // Handle named events\n this.eventSource.addEventListener(\"message\", (event: MessageEvent) => {\n this.handleSSEMessage(event.data);\n });\n\n // Handle endpoint event (server tells us where to send requests)\n this.eventSource.addEventListener(\"endpoint\", (event: MessageEvent) => {\n try {\n const data = JSON.parse(event.data);\n if (data.endpoint) {\n this.messageEndpoint = data.endpoint;\n }\n if (data.sessionId) {\n this.sessionId = data.sessionId;\n }\n } catch {\n // Ignore parse errors\n }\n });\n\n // Handle errors\n this.eventSource.onerror = (error) => {\n if (!this.connected) {\n reject(new MCPError(\"SSE connection failed\"));\n } else {\n this.emitError(new MCPError(\"SSE connection error\"));\n }\n };\n\n // Set a connection timeout\n setTimeout(() => {\n if (!this.connected) {\n this.eventSource?.close();\n reject(new MCPError(\"SSE connection timeout\"));\n }\n }, this.timeout);\n } catch (error) {\n reject(\n error instanceof Error\n ? error\n : new MCPError(\"Failed to create SSE connection\"),\n );\n }\n });\n }\n\n /**\n * Disconnect from the SSE endpoint\n */\n async disconnect(): Promise<void> {\n if (this.eventSource) {\n this.eventSource.close();\n this.eventSource = undefined;\n }\n this.messageEndpoint = undefined;\n this.sessionId = undefined;\n this.connected = false;\n this.emitClose();\n }\n\n /**\n * Send a JSON-RPC message via HTTP POST\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 // Use the endpoint provided by server, or fall back to base URL\n const endpoint = this.messageEndpoint || this.url;\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n ...this.headers,\n };\n\n // Include session ID if available\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(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(message),\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new MCPError(\n `HTTP error: ${response.status} ${response.statusText}`,\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n // Check for response body (some requests may have sync responses)\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n const text = await response.text();\n if (text.trim()) {\n const messages = this.parseResponseText(text);\n for (const msg of messages) {\n this.emitMessage(msg);\n }\n }\n }\n\n // Main response will come via SSE\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof MCPError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new MCPError(\n \"Request timed out\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n throw new MCPError(\n `Send failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n }\n\n /**\n * Handle an SSE message\n */\n private handleSSEMessage(data: string): void {\n try {\n const messages = this.parseResponseText(data);\n for (const msg of messages) {\n this.emitMessage(msg);\n }\n } catch (error) {\n // Log but don't crash on parse errors\n console.warn(\"Failed to parse SSE message:\", error);\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 const parsed = JSON.parse(trimmed);\n\n // Check if it's a batch (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 }\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\n if (\"method\" in m && typeof m.method === \"string\") {\n return true;\n }\n\n // Response\n if (\"id\" in m && (\"result\" in m || \"error\" in m)) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get the current session ID\n */\n getSessionId(): string | undefined {\n return this.sessionId;\n }\n}\n","/**\n * Stdio Transport for MCP\n *\n * Implements stdio transport for local MCP servers.\n * This transport spawns a child process and communicates via stdin/stdout.\n *\n * NOTE: This transport only works in Node.js environments (server-side).\n * It will not work in browser environments.\n */\n\nimport type {\n JsonRpcRequest,\n JsonRpcNotification,\n JsonRpcMessage,\n} from \"../types\";\nimport { MCPError, JSON_RPC_ERROR_CODES } from \"../types\";\nimport { BaseTransport, type StdioTransportOptions } from \"./types\";\n\n// Dynamic import type for Node.js child_process\ntype ChildProcess = {\n stdin: NodeJS.WritableStream | null;\n stdout: NodeJS.ReadableStream | null;\n stderr: NodeJS.ReadableStream | null;\n kill: (signal?: string) => boolean;\n on: (event: string, listener: (...args: unknown[]) => void) => void;\n};\n\ntype SpawnFunction = (\n command: string,\n args?: string[],\n options?: {\n env?: Record<string, string>;\n cwd?: string;\n stdio?: string[];\n },\n) => ChildProcess;\n\n/**\n * Stdio Transport\n *\n * Spawns a local MCP server process and communicates via stdin/stdout\n * using newline-delimited JSON.\n *\n * @example\n * ```typescript\n * const transport = new StdioTransport({\n * command: \"npx\",\n * args: [\"-y\", \"@anthropic/filesystem-mcp-server\", \"/path/to/dir\"],\n * });\n *\n * await transport.connect();\n * await transport.send({ jsonrpc: \"2.0\", method: \"initialize\", ... });\n * ```\n */\nexport class StdioTransport extends BaseTransport {\n private command: string;\n private args: string[];\n private env?: Record<string, string>;\n private cwd?: string;\n private process?: ChildProcess;\n private buffer = \"\";\n private spawn?: SpawnFunction;\n\n constructor(options: StdioTransportOptions) {\n super();\n this.command = options.command;\n this.args = options.args ?? [];\n this.env = options.env;\n this.cwd = options.cwd;\n }\n\n /**\n * Connect by spawning the MCP server process\n */\n async connect(): Promise<void> {\n if (this.connected) {\n return;\n }\n\n // Check if we're in a Node.js environment\n if (typeof process === \"undefined\" || typeof require === \"undefined\") {\n throw new MCPError(\n \"Stdio transport is only available in Node.js environments\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n try {\n // Dynamically import child_process (only available in Node.js)\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const childProcess = require(\"child_process\");\n this.spawn = childProcess.spawn;\n\n // Build environment, filtering out undefined values\n const env: Record<string, string> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (value !== undefined) {\n env[key] = value;\n }\n }\n if (this.env) {\n Object.assign(env, this.env);\n }\n\n // Spawn the MCP server process\n this.process = this.spawn!(this.command, this.args, {\n env,\n cwd: this.cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n\n if (!this.process.stdin || !this.process.stdout) {\n throw new MCPError(\n \"Failed to create stdio pipes\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n // Handle stdout data\n this.process.stdout.on(\"data\", (data: Buffer) => {\n this.handleData(data.toString());\n });\n\n // Handle stderr (log for debugging)\n this.process.stderr?.on(\"data\", (data: Buffer) => {\n console.error(`[MCP ${this.command}] ${data.toString()}`);\n });\n\n // Handle process errors\n this.process.on(\"error\", (err: unknown) => {\n const error = err as Error;\n this.emitError(new MCPError(`Process error: ${error.message}`));\n });\n\n // Handle process exit\n this.process.on(\"exit\", (...args: unknown[]) => {\n const code = args[0] as number | null;\n if (this.connected) {\n this.connected = false;\n if (code !== 0 && code !== null) {\n this.emitError(new MCPError(`Process exited with code ${code}`));\n }\n this.emitClose();\n }\n });\n\n // Wait a bit for process to initialize\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new MCPError(\"Process startup timeout\"));\n }, 10000);\n\n // Consider connected once we have the process running\n // The actual MCP initialization happens at a higher level\n setTimeout(() => {\n clearTimeout(timeout);\n this.connected = true;\n resolve();\n }, 100);\n });\n } catch (error) {\n throw error instanceof MCPError\n ? error\n : new MCPError(\n `Failed to spawn process: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n }\n\n /**\n * Disconnect by killing the process\n */\n async disconnect(): Promise<void> {\n if (this.process) {\n this.process.kill(\"SIGTERM\");\n this.process = undefined;\n }\n this.buffer = \"\";\n this.connected = false;\n this.emitClose();\n }\n\n /**\n * Send a JSON-RPC message via stdin\n */\n async send(message: JsonRpcRequest | JsonRpcNotification): Promise<void> {\n if (!this.connected || !this.process?.stdin) {\n throw new MCPError(\n \"Transport not connected\",\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n );\n }\n\n // Serialize message with newline delimiter\n const data = JSON.stringify(message) + \"\\n\";\n\n return new Promise((resolve, reject) => {\n const stdin = this.process!.stdin as NodeJS.WritableStream;\n stdin.write(data, (error) => {\n if (error) {\n reject(\n new MCPError(\n `Write error: ${error.message}`,\n JSON_RPC_ERROR_CODES.INTERNAL_ERROR,\n ),\n );\n } else {\n resolve();\n }\n });\n });\n }\n\n /**\n * Handle incoming data from stdout\n */\n private handleData(data: string): void {\n this.buffer += data;\n\n // Process complete lines (newline-delimited JSON)\n const lines = this.buffer.split(\"\\n\");\n this.buffer = lines.pop() ?? \"\"; // Keep incomplete line in buffer\n\n for (const line of lines) {\n if (!line.trim()) continue;\n\n try {\n const message = JSON.parse(line);\n if (this.isValidJsonRpcMessage(message)) {\n this.emitMessage(message);\n }\n } catch (error) {\n // Log but don't crash on parse errors\n console.warn(\"Failed to parse stdio message:\", 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\n if (\"method\" in m && typeof m.method === \"string\") {\n return true;\n }\n\n // Response\n if (\"id\" in m && (\"result\" in m || \"error\" in m)) {\n return true;\n }\n\n return false;\n }\n}\n"]}
|