@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.
Files changed (215) hide show
  1. package/README.md +42 -0
  2. package/dist/{ThreadManager-JT0sqSSD.d.ts → ThreadManager-Dkp_eLty.d.ts} +1 -1
  3. package/dist/{ThreadManager-CUq5Ocu2.d.cts → ThreadManager-LfFRhr4e.d.cts} +1 -1
  4. package/dist/anthropic-6F5GRE3B.js +4 -0
  5. package/dist/anthropic-6F5GRE3B.js.map +1 -0
  6. package/dist/anthropic-DGalr_Fw.d.cts +17 -0
  7. package/dist/anthropic-DkCEDYOt.d.ts +17 -0
  8. package/dist/anthropic-NMTRABEH.cjs +21 -0
  9. package/dist/anthropic-NMTRABEH.cjs.map +1 -0
  10. package/dist/brave-DdnWb7Gb.d.cts +17 -0
  11. package/dist/brave-DsI9n7Wr.d.ts +17 -0
  12. package/dist/brave-OYKCOZEM.cjs +21 -0
  13. package/dist/brave-OYKCOZEM.cjs.map +1 -0
  14. package/dist/brave-XSASGGH2.js +4 -0
  15. package/dist/brave-XSASGGH2.js.map +1 -0
  16. package/dist/chunk-2FAWEBZS.cjs +88 -0
  17. package/dist/chunk-2FAWEBZS.cjs.map +1 -0
  18. package/dist/chunk-53UGJNHN.js +92 -0
  19. package/dist/chunk-53UGJNHN.js.map +1 -0
  20. package/dist/chunk-6T5XXJEP.cjs +80 -0
  21. package/dist/chunk-6T5XXJEP.cjs.map +1 -0
  22. package/dist/chunk-7K7HZMP4.cjs +1170 -0
  23. package/dist/chunk-7K7HZMP4.cjs.map +1 -0
  24. package/dist/chunk-7W7QLZNC.js +72 -0
  25. package/dist/chunk-7W7QLZNC.js.map +1 -0
  26. package/dist/{chunk-JM7PB2LP.js → chunk-7XFFRV7D.js} +10 -66
  27. package/dist/chunk-7XFFRV7D.js.map +1 -0
  28. package/dist/chunk-ASV6JLYG.cjs +99 -0
  29. package/dist/chunk-ASV6JLYG.cjs.map +1 -0
  30. package/dist/chunk-BH7MNDWW.js +1152 -0
  31. package/dist/chunk-BH7MNDWW.js.map +1 -0
  32. package/dist/chunk-BKO7DSPU.js +67 -0
  33. package/dist/chunk-BKO7DSPU.js.map +1 -0
  34. package/dist/chunk-CBAHCI4R.cjs +76 -0
  35. package/dist/chunk-CBAHCI4R.cjs.map +1 -0
  36. package/dist/chunk-CEKAYA2Q.cjs +74 -0
  37. package/dist/chunk-CEKAYA2Q.cjs.map +1 -0
  38. package/dist/chunk-CEOMTQTP.js +85 -0
  39. package/dist/chunk-CEOMTQTP.js.map +1 -0
  40. package/dist/chunk-DABZYCVX.js +84 -0
  41. package/dist/chunk-DABZYCVX.js.map +1 -0
  42. package/dist/chunk-DGUM43GV.js +10 -0
  43. package/dist/chunk-DGUM43GV.js.map +1 -0
  44. package/dist/chunk-G4SF2PNQ.js +33 -0
  45. package/dist/chunk-G4SF2PNQ.js.map +1 -0
  46. package/dist/chunk-GANCV72Z.cjs +110 -0
  47. package/dist/chunk-GANCV72Z.cjs.map +1 -0
  48. package/dist/{chunk-BLSI67J6.cjs → chunk-H5XMKBBA.cjs} +425 -30
  49. package/dist/chunk-H5XMKBBA.cjs.map +1 -0
  50. package/dist/{chunk-CJ7UWN2Y.js → chunk-IXFV6AW6.js} +397 -7
  51. package/dist/chunk-IXFV6AW6.js.map +1 -0
  52. package/dist/chunk-JEQ2X3Z6.cjs +12 -0
  53. package/dist/chunk-JEQ2X3Z6.cjs.map +1 -0
  54. package/dist/chunk-JO4BHPAD.cjs +40 -0
  55. package/dist/chunk-JO4BHPAD.cjs.map +1 -0
  56. package/dist/chunk-MEBXW75C.cjs +89 -0
  57. package/dist/chunk-MEBXW75C.cjs.map +1 -0
  58. package/dist/chunk-MNDGIW47.js +76 -0
  59. package/dist/chunk-MNDGIW47.js.map +1 -0
  60. package/dist/chunk-PPFHA6IL.js +83 -0
  61. package/dist/chunk-PPFHA6IL.js.map +1 -0
  62. package/dist/chunk-RQ74USYU.js +128 -0
  63. package/dist/chunk-RQ74USYU.js.map +1 -0
  64. package/dist/chunk-TXLIY7GF.cjs +132 -0
  65. package/dist/chunk-TXLIY7GF.cjs.map +1 -0
  66. package/dist/chunk-UIWFYMAO.cjs +82 -0
  67. package/dist/chunk-UIWFYMAO.cjs.map +1 -0
  68. package/dist/{chunk-4PRWNAXQ.cjs → chunk-UOWLKFXK.cjs} +27 -89
  69. package/dist/chunk-UOWLKFXK.cjs.map +1 -0
  70. package/dist/chunk-VD74IPKB.js +106 -0
  71. package/dist/chunk-VD74IPKB.js.map +1 -0
  72. package/dist/chunk-W73FBYIH.cjs +87 -0
  73. package/dist/chunk-W73FBYIH.cjs.map +1 -0
  74. package/dist/chunk-XGITAEXU.js +93 -0
  75. package/dist/chunk-XGITAEXU.js.map +1 -0
  76. package/dist/chunk-XWOHNY3F.cjs +96 -0
  77. package/dist/chunk-XWOHNY3F.cjs.map +1 -0
  78. package/dist/chunk-ZPYQDMUX.js +79 -0
  79. package/dist/chunk-ZPYQDMUX.js.map +1 -0
  80. package/dist/core/index.cjs +156 -84
  81. package/dist/core/index.d.cts +16 -4
  82. package/dist/core/index.d.ts +16 -4
  83. package/dist/core/index.js +13 -1
  84. package/dist/exa-72KFY5A7.cjs +21 -0
  85. package/dist/exa-72KFY5A7.cjs.map +1 -0
  86. package/dist/exa-Dp9U-WTc.d.ts +17 -0
  87. package/dist/exa-NNVPBC2M.js +4 -0
  88. package/dist/exa-NNVPBC2M.js.map +1 -0
  89. package/dist/exa-jJSPhyUW.d.cts +17 -0
  90. package/dist/google-CHU2yycE.d.cts +17 -0
  91. package/dist/google-CTEK6SV2.js +4 -0
  92. package/dist/google-CTEK6SV2.js.map +1 -0
  93. package/dist/google-Da8IQxaI.d.ts +17 -0
  94. package/dist/google-IIUXFFVF.cjs +21 -0
  95. package/dist/google-IIUXFFVF.cjs.map +1 -0
  96. package/dist/index-2VtgKM8S.d.cts +206 -0
  97. package/dist/index-pWEH7pUE.d.ts +206 -0
  98. package/dist/mcp/index.cjs +670 -0
  99. package/dist/mcp/index.cjs.map +1 -0
  100. package/dist/mcp/index.d.cts +779 -0
  101. package/dist/mcp/index.d.ts +779 -0
  102. package/dist/mcp/index.js +574 -0
  103. package/dist/mcp/index.js.map +1 -0
  104. package/dist/openai-6KTCQ7PZ.cjs +21 -0
  105. package/dist/openai-6KTCQ7PZ.cjs.map +1 -0
  106. package/dist/openai-7W2PCNW5.js +4 -0
  107. package/dist/openai-7W2PCNW5.js.map +1 -0
  108. package/dist/openai-Cam8hF4f.d.ts +17 -0
  109. package/dist/openai-HVSCuXgO.d.cts +17 -0
  110. package/dist/react/index.cjs +75 -42
  111. package/dist/react/index.d.cts +270 -45
  112. package/dist/react/index.d.ts +270 -45
  113. package/dist/react/index.js +15 -2
  114. package/dist/searxng-AXLVGY7Z.js +4 -0
  115. package/dist/searxng-AXLVGY7Z.js.map +1 -0
  116. package/dist/searxng-EJKNY236.cjs +21 -0
  117. package/dist/searxng-EJKNY236.cjs.map +1 -0
  118. package/dist/searxng-K0qtY9vp.d.ts +17 -0
  119. package/dist/searxng-QGOte_Gq.d.cts +17 -0
  120. package/dist/serper-3JYJHJX6.js +4 -0
  121. package/dist/serper-3JYJHJX6.js.map +1 -0
  122. package/dist/serper-63FT4AOL.cjs +21 -0
  123. package/dist/serper-63FT4AOL.cjs.map +1 -0
  124. package/dist/serper-7Czya3PW.d.ts +17 -0
  125. package/dist/serper-JzdaSnS9.d.cts +17 -0
  126. package/dist/styles.css +38 -0
  127. package/dist/tavily-AWFP4RM7.cjs +21 -0
  128. package/dist/tavily-AWFP4RM7.cjs.map +1 -0
  129. package/dist/tavily-C8cXXojE.d.cts +17 -0
  130. package/dist/tavily-CIWAAZPH.js +4 -0
  131. package/dist/tavily-CIWAAZPH.js.map +1 -0
  132. package/dist/tavily-DdSGVgkE.d.ts +17 -0
  133. package/dist/themes/catppuccin.css +2 -0
  134. package/dist/themes/claude.css +2 -0
  135. package/dist/themes/linear.css +2 -0
  136. package/dist/themes/modern-minimal.css +2 -0
  137. package/dist/themes/posthog.css +2 -0
  138. package/dist/themes/supabase.css +2 -0
  139. package/dist/themes/twitter.css +2 -0
  140. package/dist/themes/vercel.css +2 -0
  141. package/dist/tools/anthropic/index.cjs +61 -0
  142. package/dist/tools/anthropic/index.cjs.map +1 -0
  143. package/dist/tools/anthropic/index.d.cts +67 -0
  144. package/dist/tools/anthropic/index.d.ts +67 -0
  145. package/dist/tools/anthropic/index.js +56 -0
  146. package/dist/tools/anthropic/index.js.map +1 -0
  147. package/dist/tools/brave/index.cjs +85 -0
  148. package/dist/tools/brave/index.cjs.map +1 -0
  149. package/dist/tools/brave/index.d.cts +91 -0
  150. package/dist/tools/brave/index.d.ts +91 -0
  151. package/dist/tools/brave/index.js +80 -0
  152. package/dist/tools/brave/index.js.map +1 -0
  153. package/dist/tools/exa/index.cjs +90 -0
  154. package/dist/tools/exa/index.cjs.map +1 -0
  155. package/dist/tools/exa/index.d.cts +92 -0
  156. package/dist/tools/exa/index.d.ts +92 -0
  157. package/dist/tools/exa/index.js +85 -0
  158. package/dist/tools/exa/index.js.map +1 -0
  159. package/dist/tools/google/index.cjs +81 -0
  160. package/dist/tools/google/index.cjs.map +1 -0
  161. package/dist/tools/google/index.d.cts +81 -0
  162. package/dist/tools/google/index.d.ts +81 -0
  163. package/dist/tools/google/index.js +76 -0
  164. package/dist/tools/google/index.js.map +1 -0
  165. package/dist/tools/openai/index.cjs +83 -0
  166. package/dist/tools/openai/index.cjs.map +1 -0
  167. package/dist/tools/openai/index.d.cts +84 -0
  168. package/dist/tools/openai/index.d.ts +84 -0
  169. package/dist/tools/openai/index.js +78 -0
  170. package/dist/tools/openai/index.js.map +1 -0
  171. package/dist/tools/searxng/index.cjs +85 -0
  172. package/dist/tools/searxng/index.cjs.map +1 -0
  173. package/dist/tools/searxng/index.d.cts +91 -0
  174. package/dist/tools/searxng/index.d.ts +91 -0
  175. package/dist/tools/searxng/index.js +80 -0
  176. package/dist/tools/searxng/index.js.map +1 -0
  177. package/dist/tools/serper/index.cjs +85 -0
  178. package/dist/tools/serper/index.cjs.map +1 -0
  179. package/dist/tools/serper/index.d.cts +91 -0
  180. package/dist/tools/serper/index.d.ts +91 -0
  181. package/dist/tools/serper/index.js +80 -0
  182. package/dist/tools/serper/index.js.map +1 -0
  183. package/dist/tools/tavily/index.cjs +91 -0
  184. package/dist/tools/tavily/index.cjs.map +1 -0
  185. package/dist/tools/tavily/index.d.cts +95 -0
  186. package/dist/tools/tavily/index.d.ts +95 -0
  187. package/dist/tools/tavily/index.js +86 -0
  188. package/dist/tools/tavily/index.js.map +1 -0
  189. package/dist/tools/web-search/index.cjs +31 -0
  190. package/dist/tools/web-search/index.cjs.map +1 -0
  191. package/dist/tools/web-search/index.d.cts +3 -0
  192. package/dist/tools/web-search/index.d.ts +3 -0
  193. package/dist/tools/web-search/index.js +14 -0
  194. package/dist/tools/web-search/index.js.map +1 -0
  195. package/dist/{types-BtAaOV07.d.cts → tools-DDWrco4h.d.cts} +43 -367
  196. package/dist/{types-BtAaOV07.d.ts → tools-DDWrco4h.d.ts} +43 -367
  197. package/dist/types-B20VCJXL.d.cts +347 -0
  198. package/dist/types-B20VCJXL.d.ts +347 -0
  199. package/dist/types-Cizh9K_f.d.ts +441 -0
  200. package/dist/types-DG2ya08y.d.cts +367 -0
  201. package/dist/types-DG2ya08y.d.ts +367 -0
  202. package/dist/types-DjSfYNKj.d.cts +441 -0
  203. package/dist/types-ZguuKEs_.d.cts +127 -0
  204. package/dist/types-ZguuKEs_.d.ts +127 -0
  205. package/dist/ui/index.cjs +1075 -148
  206. package/dist/ui/index.cjs.map +1 -1
  207. package/dist/ui/index.d.cts +410 -4
  208. package/dist/ui/index.d.ts +410 -4
  209. package/dist/ui/index.js +1007 -96
  210. package/dist/ui/index.js.map +1 -1
  211. package/package.json +52 -2
  212. package/dist/chunk-4PRWNAXQ.cjs.map +0 -1
  213. package/dist/chunk-BLSI67J6.cjs.map +0 -1
  214. package/dist/chunk-CJ7UWN2Y.js.map +0 -1
  215. package/dist/chunk-JM7PB2LP.js.map +0 -1
@@ -0,0 +1,670 @@
1
+ 'use strict';
2
+
3
+ var chunkJO4BHPAD_cjs = require('../chunk-JO4BHPAD.cjs');
4
+ var chunk7K7HZMP4_cjs = require('../chunk-7K7HZMP4.cjs');
5
+ var chunkJEQ2X3Z6_cjs = require('../chunk-JEQ2X3Z6.cjs');
6
+
7
+ // src/mcp/client/MCPClientManager.ts
8
+ var MCPClientManager = class {
9
+ constructor(configs, events) {
10
+ this.clients = /* @__PURE__ */ new Map();
11
+ this.configs = configs;
12
+ this.events = events ?? {};
13
+ }
14
+ /**
15
+ * Get the current aggregated state
16
+ */
17
+ getState() {
18
+ const clientStates = {};
19
+ const allTools = [];
20
+ let allConnected = true;
21
+ let anyConnecting = false;
22
+ let anyError = false;
23
+ for (const config of this.configs) {
24
+ if (config.enabled === false) continue;
25
+ const client = this.clients.get(config.name);
26
+ if (client) {
27
+ const state = client.getState();
28
+ clientStates[config.name] = state;
29
+ allTools.push(...state.tools);
30
+ if (state.connectionState !== "connected") {
31
+ allConnected = false;
32
+ }
33
+ if (state.connectionState === "connecting") {
34
+ anyConnecting = true;
35
+ }
36
+ if (state.connectionState === "error") {
37
+ anyError = true;
38
+ }
39
+ } else {
40
+ allConnected = false;
41
+ }
42
+ }
43
+ return {
44
+ clients: clientStates,
45
+ allTools,
46
+ allConnected,
47
+ anyConnecting,
48
+ anyError,
49
+ totalToolCount: allTools.length
50
+ };
51
+ }
52
+ /**
53
+ * Connect all enabled clients
54
+ */
55
+ async connectAll() {
56
+ const connectPromises = [];
57
+ for (const config of this.configs) {
58
+ if (config.enabled === false) continue;
59
+ const promise = this.connect(config.name).catch((error) => {
60
+ console.error(`Failed to connect ${config.name}:`, error);
61
+ this.events.onError?.(
62
+ config.name,
63
+ error instanceof Error ? error : new Error(String(error))
64
+ );
65
+ });
66
+ connectPromises.push(promise);
67
+ }
68
+ await Promise.all(connectPromises);
69
+ const state = this.getState();
70
+ if (state.allConnected) {
71
+ this.events.onAllConnected?.();
72
+ }
73
+ }
74
+ /**
75
+ * Connect a specific client
76
+ */
77
+ async connect(name) {
78
+ const config = this.configs.find((c) => c.name === name);
79
+ if (!config) {
80
+ throw new Error(`Client "${name}" not found in configuration`);
81
+ }
82
+ if (config.enabled === false) {
83
+ throw new Error(`Client "${name}" is disabled`);
84
+ }
85
+ let client = this.clients.get(name);
86
+ if (!client) {
87
+ client = this.createClient(config);
88
+ this.clients.set(name, client);
89
+ }
90
+ await client.connect();
91
+ }
92
+ /**
93
+ * Disconnect all clients
94
+ */
95
+ async disconnectAll() {
96
+ const disconnectPromises = [];
97
+ for (const client of this.clients.values()) {
98
+ disconnectPromises.push(
99
+ client.disconnect().catch((error) => {
100
+ console.error("Error disconnecting client:", error);
101
+ })
102
+ );
103
+ }
104
+ await Promise.all(disconnectPromises);
105
+ this.events.onAllDisconnected?.();
106
+ }
107
+ /**
108
+ * Disconnect a specific client
109
+ */
110
+ async disconnect(name) {
111
+ const client = this.clients.get(name);
112
+ if (client) {
113
+ await client.disconnect();
114
+ }
115
+ }
116
+ /**
117
+ * Get a specific client
118
+ */
119
+ getClient(name) {
120
+ return this.clients.get(name);
121
+ }
122
+ /**
123
+ * Get all connected clients
124
+ */
125
+ getConnectedClients() {
126
+ return Array.from(this.clients.values()).filter((c) => c.isConnected());
127
+ }
128
+ /**
129
+ * Get all tool definitions from all connected clients
130
+ */
131
+ getAllToolDefinitions(options) {
132
+ const tools = [];
133
+ for (const client of this.getConnectedClients()) {
134
+ const clientTools = client.toToolDefinitions({
135
+ prefixToolNames: options?.prefixToolNames ?? true
136
+ });
137
+ tools.push(...clientTools);
138
+ }
139
+ return tools;
140
+ }
141
+ /**
142
+ * Get tool definitions from a specific client
143
+ */
144
+ getToolDefinitions(name, options) {
145
+ const client = this.clients.get(name);
146
+ if (!client || !client.isConnected()) {
147
+ return [];
148
+ }
149
+ return client.toToolDefinitions({
150
+ prefixToolNames: options?.prefixToolNames ?? true
151
+ });
152
+ }
153
+ /**
154
+ * Call a tool on a specific client
155
+ */
156
+ async callTool(clientName, toolName, args) {
157
+ const client = this.clients.get(clientName);
158
+ if (!client) {
159
+ throw new Error(`Client "${clientName}" not found`);
160
+ }
161
+ if (!client.isConnected()) {
162
+ throw new Error(`Client "${clientName}" is not connected`);
163
+ }
164
+ return client.callTool(toolName, args);
165
+ }
166
+ /**
167
+ * Refresh tools for all connected clients
168
+ */
169
+ async refreshAllTools() {
170
+ const refreshPromises = [];
171
+ for (const client of this.getConnectedClients()) {
172
+ refreshPromises.push(
173
+ client.refreshTools().then(() => void 0).catch((error) => {
174
+ console.error("Error refreshing tools:", error);
175
+ })
176
+ );
177
+ }
178
+ await Promise.all(refreshPromises);
179
+ }
180
+ /**
181
+ * Check if a specific client is connected
182
+ */
183
+ isConnected(name) {
184
+ const client = this.clients.get(name);
185
+ return client?.isConnected() ?? false;
186
+ }
187
+ /**
188
+ * Create a client with event forwarding
189
+ */
190
+ createClient(config) {
191
+ const clientEvents = {
192
+ onConnectionStateChange: (state) => {
193
+ this.events.onConnectionStateChange?.(config.name, state);
194
+ const managerState = this.getState();
195
+ if (state === "connected" && managerState.allConnected) {
196
+ this.events.onAllConnected?.();
197
+ }
198
+ },
199
+ onToolsChange: (tools) => {
200
+ this.events.onToolsChange?.(config.name, tools);
201
+ },
202
+ onError: (error) => {
203
+ this.events.onError?.(config.name, error);
204
+ }
205
+ };
206
+ return chunk7K7HZMP4_cjs.createMCPClient(config, clientEvents);
207
+ }
208
+ };
209
+ function createMCPClientManager(configs, events) {
210
+ return new MCPClientManager(configs, events);
211
+ }
212
+
213
+ // src/mcp/transports/SSETransport.ts
214
+ var SSETransport = class extends chunk7K7HZMP4_cjs.BaseTransport {
215
+ constructor(options) {
216
+ super();
217
+ this.url = options.url;
218
+ this.headers = options.headers ?? {};
219
+ this.timeout = options.timeout ?? 3e4;
220
+ }
221
+ /**
222
+ * Connect to the SSE endpoint
223
+ */
224
+ async connect() {
225
+ if (this.connected) {
226
+ return;
227
+ }
228
+ return new Promise((resolve, reject) => {
229
+ try {
230
+ const sseUrl = new URL(this.url);
231
+ if (this.sessionId) {
232
+ sseUrl.searchParams.set("sessionId", this.sessionId);
233
+ }
234
+ this.eventSource = new EventSource(sseUrl.toString());
235
+ this.eventSource.onopen = () => {
236
+ this.connected = true;
237
+ resolve();
238
+ };
239
+ this.eventSource.onmessage = (event) => {
240
+ this.handleSSEMessage(event.data);
241
+ };
242
+ this.eventSource.addEventListener("message", (event) => {
243
+ this.handleSSEMessage(event.data);
244
+ });
245
+ this.eventSource.addEventListener("endpoint", (event) => {
246
+ try {
247
+ const data = JSON.parse(event.data);
248
+ if (data.endpoint) {
249
+ this.messageEndpoint = data.endpoint;
250
+ }
251
+ if (data.sessionId) {
252
+ this.sessionId = data.sessionId;
253
+ }
254
+ } catch {
255
+ }
256
+ });
257
+ this.eventSource.onerror = (error) => {
258
+ if (!this.connected) {
259
+ reject(new chunk7K7HZMP4_cjs.MCPError("SSE connection failed"));
260
+ } else {
261
+ this.emitError(new chunk7K7HZMP4_cjs.MCPError("SSE connection error"));
262
+ }
263
+ };
264
+ setTimeout(() => {
265
+ if (!this.connected) {
266
+ this.eventSource?.close();
267
+ reject(new chunk7K7HZMP4_cjs.MCPError("SSE connection timeout"));
268
+ }
269
+ }, this.timeout);
270
+ } catch (error) {
271
+ reject(
272
+ error instanceof Error ? error : new chunk7K7HZMP4_cjs.MCPError("Failed to create SSE connection")
273
+ );
274
+ }
275
+ });
276
+ }
277
+ /**
278
+ * Disconnect from the SSE endpoint
279
+ */
280
+ async disconnect() {
281
+ if (this.eventSource) {
282
+ this.eventSource.close();
283
+ this.eventSource = void 0;
284
+ }
285
+ this.messageEndpoint = void 0;
286
+ this.sessionId = void 0;
287
+ this.connected = false;
288
+ this.emitClose();
289
+ }
290
+ /**
291
+ * Send a JSON-RPC message via HTTP POST
292
+ */
293
+ async send(message) {
294
+ if (!this.connected) {
295
+ throw new chunk7K7HZMP4_cjs.MCPError(
296
+ "Transport not connected",
297
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
298
+ );
299
+ }
300
+ const endpoint = this.messageEndpoint || this.url;
301
+ const headers = {
302
+ "Content-Type": "application/json",
303
+ Accept: "application/json",
304
+ ...this.headers
305
+ };
306
+ if (this.sessionId) {
307
+ headers["Mcp-Session-Id"] = this.sessionId;
308
+ }
309
+ const controller = new AbortController();
310
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
311
+ try {
312
+ const response = await fetch(endpoint, {
313
+ method: "POST",
314
+ headers,
315
+ body: JSON.stringify(message),
316
+ signal: controller.signal
317
+ });
318
+ clearTimeout(timeoutId);
319
+ if (!response.ok) {
320
+ throw new chunk7K7HZMP4_cjs.MCPError(
321
+ `HTTP error: ${response.status} ${response.statusText}`,
322
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
323
+ );
324
+ }
325
+ const contentType = response.headers.get("content-type");
326
+ if (contentType?.includes("application/json")) {
327
+ const text = await response.text();
328
+ if (text.trim()) {
329
+ const messages = this.parseResponseText(text);
330
+ for (const msg of messages) {
331
+ this.emitMessage(msg);
332
+ }
333
+ }
334
+ }
335
+ } catch (error) {
336
+ clearTimeout(timeoutId);
337
+ if (error instanceof chunk7K7HZMP4_cjs.MCPError) {
338
+ throw error;
339
+ }
340
+ if (error instanceof Error && error.name === "AbortError") {
341
+ throw new chunk7K7HZMP4_cjs.MCPError(
342
+ "Request timed out",
343
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
344
+ );
345
+ }
346
+ throw new chunk7K7HZMP4_cjs.MCPError(
347
+ `Send failed: ${error instanceof Error ? error.message : "Unknown error"}`,
348
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
349
+ );
350
+ }
351
+ }
352
+ /**
353
+ * Handle an SSE message
354
+ */
355
+ handleSSEMessage(data) {
356
+ try {
357
+ const messages = this.parseResponseText(data);
358
+ for (const msg of messages) {
359
+ this.emitMessage(msg);
360
+ }
361
+ } catch (error) {
362
+ console.warn("Failed to parse SSE message:", error);
363
+ }
364
+ }
365
+ /**
366
+ * Parse response text into JSON-RPC messages
367
+ */
368
+ parseResponseText(text) {
369
+ const trimmed = text.trim();
370
+ if (!trimmed) {
371
+ return [];
372
+ }
373
+ const parsed = JSON.parse(trimmed);
374
+ if (Array.isArray(parsed)) {
375
+ return parsed.filter(
376
+ (msg) => this.isValidJsonRpcMessage(msg)
377
+ );
378
+ }
379
+ if (this.isValidJsonRpcMessage(parsed)) {
380
+ return [parsed];
381
+ }
382
+ return [];
383
+ }
384
+ /**
385
+ * Validate a JSON-RPC message
386
+ */
387
+ isValidJsonRpcMessage(msg) {
388
+ if (!msg || typeof msg !== "object") {
389
+ return false;
390
+ }
391
+ const m = msg;
392
+ if (m.jsonrpc !== "2.0") {
393
+ return false;
394
+ }
395
+ if ("method" in m && typeof m.method === "string") {
396
+ return true;
397
+ }
398
+ if ("id" in m && ("result" in m || "error" in m)) {
399
+ return true;
400
+ }
401
+ return false;
402
+ }
403
+ /**
404
+ * Get the current session ID
405
+ */
406
+ getSessionId() {
407
+ return this.sessionId;
408
+ }
409
+ };
410
+
411
+ // src/mcp/transports/StdioTransport.ts
412
+ var StdioTransport = class extends chunk7K7HZMP4_cjs.BaseTransport {
413
+ constructor(options) {
414
+ super();
415
+ this.buffer = "";
416
+ this.command = options.command;
417
+ this.args = options.args ?? [];
418
+ this.env = options.env;
419
+ this.cwd = options.cwd;
420
+ }
421
+ /**
422
+ * Connect by spawning the MCP server process
423
+ */
424
+ async connect() {
425
+ if (this.connected) {
426
+ return;
427
+ }
428
+ if (typeof process === "undefined" || typeof chunkJEQ2X3Z6_cjs.__require === "undefined") {
429
+ throw new chunk7K7HZMP4_cjs.MCPError(
430
+ "Stdio transport is only available in Node.js environments",
431
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
432
+ );
433
+ }
434
+ try {
435
+ const childProcess = chunkJEQ2X3Z6_cjs.__require("child_process");
436
+ this.spawn = childProcess.spawn;
437
+ const env = {};
438
+ for (const [key, value] of Object.entries(process.env)) {
439
+ if (value !== void 0) {
440
+ env[key] = value;
441
+ }
442
+ }
443
+ if (this.env) {
444
+ Object.assign(env, this.env);
445
+ }
446
+ this.process = this.spawn(this.command, this.args, {
447
+ env,
448
+ cwd: this.cwd,
449
+ stdio: ["pipe", "pipe", "pipe"]
450
+ });
451
+ if (!this.process.stdin || !this.process.stdout) {
452
+ throw new chunk7K7HZMP4_cjs.MCPError(
453
+ "Failed to create stdio pipes",
454
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
455
+ );
456
+ }
457
+ this.process.stdout.on("data", (data) => {
458
+ this.handleData(data.toString());
459
+ });
460
+ this.process.stderr?.on("data", (data) => {
461
+ console.error(`[MCP ${this.command}] ${data.toString()}`);
462
+ });
463
+ this.process.on("error", (err) => {
464
+ const error = err;
465
+ this.emitError(new chunk7K7HZMP4_cjs.MCPError(`Process error: ${error.message}`));
466
+ });
467
+ this.process.on("exit", (...args) => {
468
+ const code = args[0];
469
+ if (this.connected) {
470
+ this.connected = false;
471
+ if (code !== 0 && code !== null) {
472
+ this.emitError(new chunk7K7HZMP4_cjs.MCPError(`Process exited with code ${code}`));
473
+ }
474
+ this.emitClose();
475
+ }
476
+ });
477
+ await new Promise((resolve, reject) => {
478
+ const timeout = setTimeout(() => {
479
+ reject(new chunk7K7HZMP4_cjs.MCPError("Process startup timeout"));
480
+ }, 1e4);
481
+ setTimeout(() => {
482
+ clearTimeout(timeout);
483
+ this.connected = true;
484
+ resolve();
485
+ }, 100);
486
+ });
487
+ } catch (error) {
488
+ throw error instanceof chunk7K7HZMP4_cjs.MCPError ? error : new chunk7K7HZMP4_cjs.MCPError(
489
+ `Failed to spawn process: ${error instanceof Error ? error.message : "Unknown error"}`,
490
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
491
+ );
492
+ }
493
+ }
494
+ /**
495
+ * Disconnect by killing the process
496
+ */
497
+ async disconnect() {
498
+ if (this.process) {
499
+ this.process.kill("SIGTERM");
500
+ this.process = void 0;
501
+ }
502
+ this.buffer = "";
503
+ this.connected = false;
504
+ this.emitClose();
505
+ }
506
+ /**
507
+ * Send a JSON-RPC message via stdin
508
+ */
509
+ async send(message) {
510
+ if (!this.connected || !this.process?.stdin) {
511
+ throw new chunk7K7HZMP4_cjs.MCPError(
512
+ "Transport not connected",
513
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
514
+ );
515
+ }
516
+ const data = JSON.stringify(message) + "\n";
517
+ return new Promise((resolve, reject) => {
518
+ const stdin = this.process.stdin;
519
+ stdin.write(data, (error) => {
520
+ if (error) {
521
+ reject(
522
+ new chunk7K7HZMP4_cjs.MCPError(
523
+ `Write error: ${error.message}`,
524
+ chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES.INTERNAL_ERROR
525
+ )
526
+ );
527
+ } else {
528
+ resolve();
529
+ }
530
+ });
531
+ });
532
+ }
533
+ /**
534
+ * Handle incoming data from stdout
535
+ */
536
+ handleData(data) {
537
+ this.buffer += data;
538
+ const lines = this.buffer.split("\n");
539
+ this.buffer = lines.pop() ?? "";
540
+ for (const line of lines) {
541
+ if (!line.trim()) continue;
542
+ try {
543
+ const message = JSON.parse(line);
544
+ if (this.isValidJsonRpcMessage(message)) {
545
+ this.emitMessage(message);
546
+ }
547
+ } catch (error) {
548
+ console.warn("Failed to parse stdio message:", error);
549
+ }
550
+ }
551
+ }
552
+ /**
553
+ * Validate a JSON-RPC message
554
+ */
555
+ isValidJsonRpcMessage(msg) {
556
+ if (!msg || typeof msg !== "object") {
557
+ return false;
558
+ }
559
+ const m = msg;
560
+ if (m.jsonrpc !== "2.0") {
561
+ return false;
562
+ }
563
+ if ("method" in m && typeof m.method === "string") {
564
+ return true;
565
+ }
566
+ if ("id" in m && ("result" in m || "error" in m)) {
567
+ return true;
568
+ }
569
+ return false;
570
+ }
571
+ };
572
+
573
+ Object.defineProperty(exports, "DEFAULT_MCP_UI_SANDBOX", {
574
+ enumerable: true,
575
+ get: function () { return chunkJO4BHPAD_cjs.DEFAULT_MCP_UI_SANDBOX; }
576
+ });
577
+ Object.defineProperty(exports, "RESTRICTED_MCP_UI_SANDBOX", {
578
+ enumerable: true,
579
+ get: function () { return chunkJO4BHPAD_cjs.RESTRICTED_MCP_UI_SANDBOX; }
580
+ });
581
+ Object.defineProperty(exports, "isMCPUIIntent", {
582
+ enumerable: true,
583
+ get: function () { return chunkJO4BHPAD_cjs.isMCPUIIntent; }
584
+ });
585
+ Object.defineProperty(exports, "isMCPUIMessage", {
586
+ enumerable: true,
587
+ get: function () { return chunkJO4BHPAD_cjs.isMCPUIMessage; }
588
+ });
589
+ Object.defineProperty(exports, "isMCPUIResourceContent", {
590
+ enumerable: true,
591
+ get: function () { return chunkJO4BHPAD_cjs.isMCPUIResourceContent; }
592
+ });
593
+ Object.defineProperty(exports, "parseMCPUIMessage", {
594
+ enumerable: true,
595
+ get: function () { return chunkJO4BHPAD_cjs.parseMCPUIMessage; }
596
+ });
597
+ Object.defineProperty(exports, "BaseTransport", {
598
+ enumerable: true,
599
+ get: function () { return chunk7K7HZMP4_cjs.BaseTransport; }
600
+ });
601
+ Object.defineProperty(exports, "DEFAULT_CLIENT_CAPABILITIES", {
602
+ enumerable: true,
603
+ get: function () { return chunk7K7HZMP4_cjs.DEFAULT_CLIENT_CAPABILITIES; }
604
+ });
605
+ Object.defineProperty(exports, "DEFAULT_CLIENT_INFO", {
606
+ enumerable: true,
607
+ get: function () { return chunk7K7HZMP4_cjs.DEFAULT_CLIENT_INFO; }
608
+ });
609
+ Object.defineProperty(exports, "HttpTransport", {
610
+ enumerable: true,
611
+ get: function () { return chunk7K7HZMP4_cjs.HttpTransport; }
612
+ });
613
+ Object.defineProperty(exports, "JSON_RPC_ERROR_CODES", {
614
+ enumerable: true,
615
+ get: function () { return chunk7K7HZMP4_cjs.JSON_RPC_ERROR_CODES; }
616
+ });
617
+ Object.defineProperty(exports, "JsonRpcHandler", {
618
+ enumerable: true,
619
+ get: function () { return chunk7K7HZMP4_cjs.JsonRpcHandler; }
620
+ });
621
+ Object.defineProperty(exports, "MCPClient", {
622
+ enumerable: true,
623
+ get: function () { return chunk7K7HZMP4_cjs.MCPClient; }
624
+ });
625
+ Object.defineProperty(exports, "MCPError", {
626
+ enumerable: true,
627
+ get: function () { return chunk7K7HZMP4_cjs.MCPError; }
628
+ });
629
+ Object.defineProperty(exports, "MCPToolAdapter", {
630
+ enumerable: true,
631
+ get: function () { return chunk7K7HZMP4_cjs.MCPToolAdapter; }
632
+ });
633
+ Object.defineProperty(exports, "MCP_METHODS", {
634
+ enumerable: true,
635
+ get: function () { return chunk7K7HZMP4_cjs.MCP_METHODS; }
636
+ });
637
+ Object.defineProperty(exports, "MCP_PROTOCOL_VERSION", {
638
+ enumerable: true,
639
+ get: function () { return chunk7K7HZMP4_cjs.MCP_PROTOCOL_VERSION; }
640
+ });
641
+ Object.defineProperty(exports, "createInitializeParams", {
642
+ enumerable: true,
643
+ get: function () { return chunk7K7HZMP4_cjs.createInitializeParams; }
644
+ });
645
+ Object.defineProperty(exports, "createMCPClient", {
646
+ enumerable: true,
647
+ get: function () { return chunk7K7HZMP4_cjs.createMCPClient; }
648
+ });
649
+ Object.defineProperty(exports, "createToolCallParams", {
650
+ enumerable: true,
651
+ get: function () { return chunk7K7HZMP4_cjs.createToolCallParams; }
652
+ });
653
+ Object.defineProperty(exports, "createToolsListParams", {
654
+ enumerable: true,
655
+ get: function () { return chunk7K7HZMP4_cjs.createToolsListParams; }
656
+ });
657
+ Object.defineProperty(exports, "mcpToolToDefinition", {
658
+ enumerable: true,
659
+ get: function () { return chunk7K7HZMP4_cjs.mcpToolToDefinition; }
660
+ });
661
+ Object.defineProperty(exports, "mcpToolsToDefinitions", {
662
+ enumerable: true,
663
+ get: function () { return chunk7K7HZMP4_cjs.mcpToolsToDefinitions; }
664
+ });
665
+ exports.MCPClientManager = MCPClientManager;
666
+ exports.SSETransport = SSETransport;
667
+ exports.StdioTransport = StdioTransport;
668
+ exports.createMCPClientManager = createMCPClientManager;
669
+ //# sourceMappingURL=index.cjs.map
670
+ //# sourceMappingURL=index.cjs.map