atom-lite 0.1.0 → 0.5.1

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 (169) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +58 -10
  3. package/dist/agent/loop.d.ts +11 -0
  4. package/dist/agent/loop.js +238 -47
  5. package/dist/agent/loop.js.map +1 -1
  6. package/dist/agent/model-turn.d.ts +37 -0
  7. package/dist/agent/model-turn.js +53 -0
  8. package/dist/agent/model-turn.js.map +1 -0
  9. package/dist/agent/turn-recorder.d.ts +33 -0
  10. package/dist/agent/turn-recorder.js +74 -0
  11. package/dist/agent/turn-recorder.js.map +1 -0
  12. package/dist/agent/types.d.ts +4 -0
  13. package/dist/cli/activity.d.ts +45 -0
  14. package/dist/cli/activity.js +141 -0
  15. package/dist/cli/activity.js.map +1 -0
  16. package/dist/cli/app.js +1234 -378
  17. package/dist/cli/app.js.map +1 -1
  18. package/dist/cli/approval-prompt.d.ts +24 -0
  19. package/dist/cli/approval-prompt.js +82 -0
  20. package/dist/cli/approval-prompt.js.map +1 -0
  21. package/dist/cli/banner.d.ts +5 -1
  22. package/dist/cli/banner.js +10 -4
  23. package/dist/cli/banner.js.map +1 -1
  24. package/dist/cli/commands.d.ts +92 -14
  25. package/dist/cli/commands.js +330 -52
  26. package/dist/cli/commands.js.map +1 -1
  27. package/dist/cli/diff.d.ts +1 -0
  28. package/dist/cli/diff.js +28 -0
  29. package/dist/cli/diff.js.map +1 -0
  30. package/dist/cli/input.d.ts +2 -0
  31. package/dist/cli/input.js +10 -0
  32. package/dist/cli/input.js.map +1 -0
  33. package/dist/cli/main.js +2 -2
  34. package/dist/cli/main.js.map +1 -1
  35. package/dist/cli/mouse.d.ts +54 -0
  36. package/dist/cli/mouse.js +86 -0
  37. package/dist/cli/mouse.js.map +1 -0
  38. package/dist/cli/palette.d.ts +41 -0
  39. package/dist/cli/palette.js +212 -0
  40. package/dist/cli/palette.js.map +1 -0
  41. package/dist/cli/panel.d.ts +29 -0
  42. package/dist/cli/panel.js +48 -0
  43. package/dist/cli/panel.js.map +1 -0
  44. package/dist/cli/picker.d.ts +8 -0
  45. package/dist/cli/picker.js +26 -28
  46. package/dist/cli/picker.js.map +1 -1
  47. package/dist/cli/status-line.d.ts +6 -0
  48. package/dist/cli/status-line.js +21 -7
  49. package/dist/cli/status-line.js.map +1 -1
  50. package/dist/cli/stream-text.d.ts +4 -8
  51. package/dist/cli/stream-text.js +26 -12
  52. package/dist/cli/stream-text.js.map +1 -1
  53. package/dist/cli/theme.d.ts +48 -0
  54. package/dist/cli/theme.js +160 -0
  55. package/dist/cli/theme.js.map +1 -0
  56. package/dist/cli/tool-box.d.ts +41 -0
  57. package/dist/cli/tool-box.js +177 -0
  58. package/dist/cli/tool-box.js.map +1 -0
  59. package/dist/cli/transcript.d.ts +24 -1
  60. package/dist/cli/transcript.js +65 -2
  61. package/dist/cli/transcript.js.map +1 -1
  62. package/dist/cli/trust-prompt.d.ts +24 -0
  63. package/dist/cli/trust-prompt.js +89 -0
  64. package/dist/cli/trust-prompt.js.map +1 -0
  65. package/dist/config/defaults.d.ts +12 -0
  66. package/dist/config/defaults.js +12 -0
  67. package/dist/config/defaults.js.map +1 -1
  68. package/dist/config/load.d.ts +2 -0
  69. package/dist/config/load.js +36 -0
  70. package/dist/config/load.js.map +1 -1
  71. package/dist/config/paths.d.ts +2 -0
  72. package/dist/config/paths.js +12 -1
  73. package/dist/config/paths.js.map +1 -1
  74. package/dist/config/schema.d.ts +53 -0
  75. package/dist/config/schema.js +33 -0
  76. package/dist/config/schema.js.map +1 -1
  77. package/dist/config/write.d.ts +2 -0
  78. package/dist/config/write.js +9 -0
  79. package/dist/config/write.js.map +1 -1
  80. package/dist/context/builder.d.ts +7 -0
  81. package/dist/context/builder.js +11 -0
  82. package/dist/context/builder.js.map +1 -0
  83. package/dist/context/manager.d.ts +17 -3
  84. package/dist/context/manager.js +129 -41
  85. package/dist/context/manager.js.map +1 -1
  86. package/dist/extensions/api.d.ts +101 -0
  87. package/dist/extensions/api.js +219 -0
  88. package/dist/extensions/api.js.map +1 -0
  89. package/dist/extensions/discovery.d.ts +42 -0
  90. package/dist/extensions/discovery.js +326 -0
  91. package/dist/extensions/discovery.js.map +1 -0
  92. package/dist/extensions/loader.d.ts +68 -0
  93. package/dist/extensions/loader.js +353 -0
  94. package/dist/extensions/loader.js.map +1 -0
  95. package/dist/extensions/session-manager.d.ts +44 -0
  96. package/dist/extensions/session-manager.js +137 -0
  97. package/dist/extensions/session-manager.js.map +1 -0
  98. package/dist/extensions/tool-adapter.d.ts +12 -0
  99. package/dist/extensions/tool-adapter.js +157 -0
  100. package/dist/extensions/tool-adapter.js.map +1 -0
  101. package/dist/extensions/trust.d.ts +6 -0
  102. package/dist/extensions/trust.js +55 -0
  103. package/dist/extensions/trust.js.map +1 -0
  104. package/dist/extensions/types.d.ts +94 -0
  105. package/dist/extensions/types.js +2 -0
  106. package/dist/extensions/types.js.map +1 -0
  107. package/dist/extensions/ui.d.ts +21 -0
  108. package/dist/extensions/ui.js +75 -0
  109. package/dist/extensions/ui.js.map +1 -0
  110. package/dist/index.d.ts +2 -0
  111. package/dist/index.js +2 -0
  112. package/dist/index.js.map +1 -1
  113. package/dist/mcp/client.d.ts +73 -0
  114. package/dist/mcp/client.js +363 -0
  115. package/dist/mcp/client.js.map +1 -0
  116. package/dist/mcp/format.d.ts +3 -0
  117. package/dist/mcp/format.js +37 -0
  118. package/dist/mcp/format.js.map +1 -0
  119. package/dist/mcp/index.d.ts +6 -0
  120. package/dist/mcp/index.js +7 -0
  121. package/dist/mcp/index.js.map +1 -0
  122. package/dist/mcp/manager.d.ts +53 -0
  123. package/dist/mcp/manager.js +349 -0
  124. package/dist/mcp/manager.js.map +1 -0
  125. package/dist/mcp/stdio-transport.d.ts +26 -0
  126. package/dist/mcp/stdio-transport.js +174 -0
  127. package/dist/mcp/stdio-transport.js.map +1 -0
  128. package/dist/mcp/tools.d.ts +22 -0
  129. package/dist/mcp/tools.js +162 -0
  130. package/dist/mcp/tools.js.map +1 -0
  131. package/dist/mcp/types.d.ts +92 -0
  132. package/dist/mcp/types.js +2 -0
  133. package/dist/mcp/types.js.map +1 -0
  134. package/dist/providers/factory.js +1 -0
  135. package/dist/providers/factory.js.map +1 -1
  136. package/dist/runtime/executor.d.ts +2 -0
  137. package/dist/runtime/executor.js +4 -0
  138. package/dist/runtime/executor.js.map +1 -0
  139. package/dist/runtime/scheduler.d.ts +4 -3
  140. package/dist/runtime/scheduler.js +7 -98
  141. package/dist/runtime/scheduler.js.map +1 -1
  142. package/dist/runtime/tool-executor.d.ts +18 -0
  143. package/dist/runtime/tool-executor.js +126 -0
  144. package/dist/runtime/tool-executor.js.map +1 -0
  145. package/dist/security/process.d.ts +10 -0
  146. package/dist/security/process.js +36 -0
  147. package/dist/security/process.js.map +1 -1
  148. package/dist/sessions/events.d.ts +9 -0
  149. package/dist/sessions/events.js +11 -6
  150. package/dist/sessions/events.js.map +1 -1
  151. package/dist/sessions/history.d.ts +18 -0
  152. package/dist/sessions/history.js +76 -0
  153. package/dist/sessions/history.js.map +1 -0
  154. package/dist/sessions/index.d.ts +2 -0
  155. package/dist/sessions/index.js +2 -0
  156. package/dist/sessions/index.js.map +1 -1
  157. package/dist/sessions/search.d.ts +16 -0
  158. package/dist/sessions/search.js +136 -0
  159. package/dist/sessions/search.js.map +1 -0
  160. package/dist/sessions/store.js +7 -4
  161. package/dist/sessions/store.js.map +1 -1
  162. package/dist/tools/bash.js +6 -3
  163. package/dist/tools/bash.js.map +1 -1
  164. package/dist/tools/edit.js +2 -1
  165. package/dist/tools/edit.js.map +1 -1
  166. package/dist/tools/types.d.ts +6 -0
  167. package/dist/types.d.ts +2 -1
  168. package/dist/types.js.map +1 -1
  169. package/package.json +3 -1
@@ -0,0 +1,363 @@
1
+ export const SUPPORTED_PROTOCOL_VERSIONS = [
2
+ "2024-11-05",
3
+ "2025-03-26",
4
+ "2025-06-18",
5
+ ];
6
+ export const PREFERRED_PROTOCOL_VERSION = "2025-06-18";
7
+ export class McpError extends Error {
8
+ code;
9
+ data;
10
+ constructor(message, code, data) {
11
+ super(message);
12
+ this.name = "McpError";
13
+ this.code = code;
14
+ this.data = data;
15
+ }
16
+ }
17
+ export class McpNotConnectedError extends McpError {
18
+ constructor(message = "MCP client is not connected") {
19
+ super(message);
20
+ this.name = "McpNotConnectedError";
21
+ }
22
+ }
23
+ function isRecord(value) {
24
+ return typeof value === "object" && value !== null && !Array.isArray(value);
25
+ }
26
+ function errorMessage(error) {
27
+ return error instanceof Error ? error.message : String(error);
28
+ }
29
+ function raceTimeout(promise, timeoutMs, label) {
30
+ if (!timeoutMs || timeoutMs <= 0)
31
+ return promise;
32
+ return new Promise((resolve, reject) => {
33
+ const timer = setTimeout(() => {
34
+ reject(new McpError(`${label} timed out after ${timeoutMs}ms`));
35
+ }, timeoutMs);
36
+ promise.then((value) => {
37
+ clearTimeout(timer);
38
+ resolve(value);
39
+ }, (error) => {
40
+ clearTimeout(timer);
41
+ reject(error);
42
+ });
43
+ });
44
+ }
45
+ /**
46
+ * Small JSON-RPC 2.0 client for MCP. The transport owns framing and process
47
+ * lifecycle; this class owns request ids, timeouts, cancellation, and
48
+ * notifications.
49
+ */
50
+ export class McpClient {
51
+ transport;
52
+ clientName;
53
+ clientVersion;
54
+ onClose;
55
+ nextId = 1;
56
+ pending = new Map();
57
+ notificationHandlers = new Map();
58
+ closed = false;
59
+ started = false;
60
+ startPromise;
61
+ protocolVersion;
62
+ serverInfo;
63
+ capabilities;
64
+ lastTransportError;
65
+ constructor(transport, options = {}) {
66
+ this.transport = transport;
67
+ this.clientName = options.clientName ?? "atom-lite";
68
+ this.clientVersion = options.clientVersion ?? "0.3.1";
69
+ this.onClose = options.onClose;
70
+ transport.setHandlers({
71
+ onMessage: (message) => this.handleMessage(message),
72
+ onError: (error) => this.handleTransportError(error),
73
+ onClose: (info) => this.handleClose(info),
74
+ });
75
+ }
76
+ get protocolVersionValue() {
77
+ return this.protocolVersion;
78
+ }
79
+ get serverInfoValue() {
80
+ return this.serverInfo;
81
+ }
82
+ get capabilitiesValue() {
83
+ return this.capabilities;
84
+ }
85
+ get lastError() {
86
+ return this.lastTransportError;
87
+ }
88
+ isClosed() {
89
+ return this.closed;
90
+ }
91
+ /** Spawn the transport and perform the MCP initialize handshake. */
92
+ async connect(options = {}) {
93
+ if (this.closed)
94
+ throw new McpNotConnectedError();
95
+ if (!this.started) {
96
+ this.started = true;
97
+ this.startPromise = (async () => {
98
+ await this.transport.start();
99
+ })();
100
+ try {
101
+ await raceTimeout(this.startPromise, options.startupTimeoutMs, "MCP transport start");
102
+ }
103
+ catch (error) {
104
+ await this.close();
105
+ throw error;
106
+ }
107
+ }
108
+ else if (this.startPromise) {
109
+ await this.startPromise;
110
+ }
111
+ const result = await this.request("initialize", {
112
+ protocolVersion: PREFERRED_PROTOCOL_VERSION,
113
+ capabilities: {},
114
+ clientInfo: {
115
+ name: this.clientName,
116
+ version: this.clientVersion,
117
+ },
118
+ }, {
119
+ timeoutMs: options.startupTimeoutMs,
120
+ signal: options.signal,
121
+ });
122
+ if (!isRecord(result)) {
123
+ throw new McpError("MCP initialize returned an invalid result");
124
+ }
125
+ const protocolVersion = typeof result.protocolVersion === "string"
126
+ ? result.protocolVersion
127
+ : "";
128
+ if (!SUPPORTED_PROTOCOL_VERSIONS.includes(protocolVersion)) {
129
+ throw new McpError(`Unsupported MCP protocol version: ${protocolVersion || "(missing)"}`);
130
+ }
131
+ this.protocolVersion = protocolVersion;
132
+ this.serverInfo = result.serverInfo;
133
+ this.capabilities = result.capabilities;
134
+ this.transport.send({
135
+ jsonrpc: "2.0",
136
+ method: "notifications/initialized",
137
+ params: {},
138
+ });
139
+ return {
140
+ protocolVersion,
141
+ serverInfo: this.serverInfo,
142
+ capabilities: this.capabilities,
143
+ };
144
+ }
145
+ /** Discover every page of tools/list. */
146
+ async listTools(options = {}) {
147
+ const tools = [];
148
+ let cursor;
149
+ for (let page = 0; page < 100; page++) {
150
+ const result = await this.request("tools/list", cursor ? { cursor } : {}, options);
151
+ if (!isRecord(result)) {
152
+ throw new McpError("tools/list returned an invalid result");
153
+ }
154
+ const list = Array.isArray(result.tools) ? result.tools : [];
155
+ for (const raw of list) {
156
+ if (!isRecord(raw) || typeof raw.name !== "string" || !raw.name) {
157
+ continue;
158
+ }
159
+ tools.push({
160
+ name: raw.name,
161
+ description: typeof raw.description === "string" ? raw.description : undefined,
162
+ inputSchema: isRecord(raw.inputSchema)
163
+ ? raw.inputSchema
164
+ : undefined,
165
+ });
166
+ }
167
+ if (typeof result.nextCursor === "string" && result.nextCursor) {
168
+ cursor = result.nextCursor;
169
+ }
170
+ else {
171
+ break;
172
+ }
173
+ }
174
+ return tools;
175
+ }
176
+ async callTool(name, args, options = {}) {
177
+ return this.request("tools/call", { name, arguments: args }, options);
178
+ }
179
+ async ping(options = {}) {
180
+ return this.request("ping", {}, options);
181
+ }
182
+ onNotification(method, handler) {
183
+ let handlers = this.notificationHandlers.get(method);
184
+ if (!handlers) {
185
+ handlers = new Set();
186
+ this.notificationHandlers.set(method, handlers);
187
+ }
188
+ handlers.add(handler);
189
+ return () => {
190
+ handlers?.delete(handler);
191
+ };
192
+ }
193
+ async request(method, params, options = {}) {
194
+ if (this.closed)
195
+ throw new McpNotConnectedError();
196
+ if (options.signal?.aborted)
197
+ throw new Error("USER_CANCELLED");
198
+ const id = this.nextId++;
199
+ return new Promise((resolve, reject) => {
200
+ const pending = {
201
+ method,
202
+ resolve,
203
+ reject,
204
+ };
205
+ const finish = () => {
206
+ if (pending.timer) {
207
+ clearTimeout(pending.timer);
208
+ pending.timer = undefined;
209
+ }
210
+ pending.cleanupAbort?.();
211
+ pending.cleanupAbort = undefined;
212
+ this.pending.delete(id);
213
+ };
214
+ const fail = (error) => {
215
+ finish();
216
+ reject(error);
217
+ };
218
+ const cancel = (reason) => {
219
+ this.sendNotification("notifications/cancelled", {
220
+ requestId: id,
221
+ reason,
222
+ });
223
+ };
224
+ if (options.timeoutMs && options.timeoutMs > 0) {
225
+ pending.timer = setTimeout(() => {
226
+ cancel("timeout");
227
+ fail(new McpError(`${method} timed out after ${options.timeoutMs}ms`));
228
+ }, options.timeoutMs);
229
+ }
230
+ if (options.signal) {
231
+ const onAbort = () => {
232
+ cancel("cancelled");
233
+ fail(new Error("USER_CANCELLED"));
234
+ };
235
+ options.signal.addEventListener("abort", onAbort, { once: true });
236
+ pending.cleanupAbort = () => {
237
+ options.signal?.removeEventListener("abort", onAbort);
238
+ };
239
+ }
240
+ this.pending.set(id, pending);
241
+ try {
242
+ this.transport.send({
243
+ jsonrpc: "2.0",
244
+ id,
245
+ method,
246
+ params,
247
+ });
248
+ }
249
+ catch (error) {
250
+ fail(new McpError(`Failed to send ${method}: ${errorMessage(error)}`));
251
+ }
252
+ });
253
+ }
254
+ async close() {
255
+ if (this.closed)
256
+ return;
257
+ this.closed = true;
258
+ const error = new McpNotConnectedError("MCP client closed");
259
+ for (const [id, pending] of this.pending) {
260
+ if (pending.timer)
261
+ clearTimeout(pending.timer);
262
+ pending.cleanupAbort?.();
263
+ pending.reject(error);
264
+ this.pending.delete(id);
265
+ }
266
+ try {
267
+ await this.transport.close();
268
+ }
269
+ catch {
270
+ // Shutdown is best effort.
271
+ }
272
+ }
273
+ sendNotification(method, params) {
274
+ if (this.closed)
275
+ return;
276
+ try {
277
+ this.transport.send({ jsonrpc: "2.0", method, params });
278
+ }
279
+ catch {
280
+ // A failing cancel notification must not mask the original failure.
281
+ }
282
+ }
283
+ handleMessage(message) {
284
+ if (!isRecord(message)) {
285
+ this.handleTransportError(new McpError("Invalid JSON-RPC message"));
286
+ return;
287
+ }
288
+ // Response to one of our requests.
289
+ if ("id" in message &&
290
+ !("method" in message) &&
291
+ ("result" in message || "error" in message)) {
292
+ const pending = this.pending.get(message.id);
293
+ if (!pending)
294
+ return;
295
+ this.pending.delete(message.id);
296
+ if (pending.timer)
297
+ clearTimeout(pending.timer);
298
+ pending.cleanupAbort?.();
299
+ if (isRecord(message.error)) {
300
+ pending.reject(new McpError(typeof message.error.message === "string"
301
+ ? message.error.message
302
+ : `${pending.method} failed`, typeof message.error.code === "number"
303
+ ? message.error.code
304
+ : undefined, message.error.data));
305
+ }
306
+ else {
307
+ pending.resolve(message.result);
308
+ }
309
+ return;
310
+ }
311
+ // Server-initiated request. Atom-lite does not advertise roots, sampling,
312
+ // or elicitation, so reject unknown requests with JSON-RPC method-not-found.
313
+ if ("id" in message && typeof message.method === "string") {
314
+ try {
315
+ this.transport.send({
316
+ jsonrpc: "2.0",
317
+ id: message.id,
318
+ error: { code: -32601, message: "Method not found" },
319
+ });
320
+ }
321
+ catch {
322
+ // Ignore.
323
+ }
324
+ return;
325
+ }
326
+ if (typeof message.method === "string") {
327
+ const handlers = this.notificationHandlers.get(message.method);
328
+ if (!handlers)
329
+ return;
330
+ for (const handler of [...handlers]) {
331
+ try {
332
+ handler(message.params);
333
+ }
334
+ catch {
335
+ // A notification handler must not break the transport loop.
336
+ }
337
+ }
338
+ }
339
+ }
340
+ handleTransportError(error) {
341
+ this.lastTransportError = error;
342
+ }
343
+ handleClose(info) {
344
+ if (this.closed)
345
+ return;
346
+ this.closed = true;
347
+ const detail = info.code !== undefined && info.code !== null
348
+ ? ` (code ${info.code})`
349
+ : info.signal
350
+ ? ` (signal ${info.signal})`
351
+ : "";
352
+ const error = new McpError(`MCP server exited${detail}`);
353
+ for (const [id, pending] of this.pending) {
354
+ if (pending.timer)
355
+ clearTimeout(pending.timer);
356
+ pending.cleanupAbort?.();
357
+ pending.reject(error);
358
+ this.pending.delete(id);
359
+ }
360
+ this.onClose?.(info);
361
+ }
362
+ }
363
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServerStatus } from "./types.js";
2
+ export declare function formatMcpStatus(statuses: McpServerStatus[]): string;
3
+ export declare function formatMcpDoctor(statuses: McpServerStatus[]): string[];
@@ -0,0 +1,37 @@
1
+ export function formatMcpStatus(statuses) {
2
+ if (statuses.length === 0) {
3
+ return "MCP servers: none configured";
4
+ }
5
+ const lines = ["MCP servers:"];
6
+ for (const status of statuses) {
7
+ const state = status.enabled ? status.state : "disabled";
8
+ let suffix = "";
9
+ if (status.state === "failed" && status.lastError) {
10
+ suffix = `: ${status.lastError}`;
11
+ }
12
+ else if (status.state === "ready") {
13
+ suffix = ` (${status.toolCount} tool${status.toolCount === 1 ? "" : "s"})`;
14
+ if (status.requiresApproval)
15
+ suffix += " [requires approval]";
16
+ }
17
+ else if (status.state === "disabled") {
18
+ suffix = " (disabled)";
19
+ }
20
+ lines.push(` ${status.name}: ${state}${suffix}`);
21
+ }
22
+ return lines.join("\n");
23
+ }
24
+ export function formatMcpDoctor(statuses) {
25
+ const lines = [" mcp:"];
26
+ if (statuses.length === 0) {
27
+ lines.push(" none configured");
28
+ return lines;
29
+ }
30
+ for (const status of statuses) {
31
+ const tools = status.state === "ready" ? ` ${status.toolCount} tool${status.toolCount === 1 ? "" : "s"}` : "";
32
+ const error = status.lastError ? ` lastError=${status.lastError}` : "";
33
+ lines.push(` ${status.name}: ${status.state}${tools}${error}`);
34
+ }
35
+ return lines;
36
+ }
37
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/mcp/format.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,QAA2B;IACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,8BAA8B,CAAC;IACxC,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;QACzD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAClD,MAAM,GAAG,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;QACnC,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACpC,MAAM,GAAG,KAAK,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAC3E,IAAI,MAAM,CAAC,gBAAgB;gBAAE,MAAM,IAAI,sBAAsB,CAAC;QAChE,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;YACvC,MAAM,GAAG,aAAa,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAA2B;IACzD,MAAM,KAAK,GAAa,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GACT,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,KAAK,CAAC,IAAI,CACR,OAAO,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,CACtD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./types.js";
2
+ export { McpClient, McpError, McpNotConnectedError, SUPPORTED_PROTOCOL_VERSIONS, PREFERRED_PROTOCOL_VERSION } from "./client.js";
3
+ export { StdioTransport, buildMcpEnv } from "./stdio-transport.js";
4
+ export { McpManager, namespacedToolName, sanitizeNameSegment } from "./manager.js";
5
+ export { McpTool, createMcpTools, summariseMcpResult } from "./tools.js";
6
+ export { formatMcpStatus, formatMcpDoctor } from "./format.js";
@@ -0,0 +1,7 @@
1
+ export * from "./types.js";
2
+ export { McpClient, McpError, McpNotConnectedError, SUPPORTED_PROTOCOL_VERSIONS, PREFERRED_PROTOCOL_VERSION } from "./client.js";
3
+ export { StdioTransport, buildMcpEnv } from "./stdio-transport.js";
4
+ export { McpManager, namespacedToolName, sanitizeNameSegment } from "./manager.js";
5
+ export { McpTool, createMcpTools, summariseMcpResult } from "./tools.js";
6
+ export { formatMcpStatus, formatMcpDoctor } from "./format.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACjI,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { McpCallResult, McpEvent, McpServerConfig, McpServerStatus, McpToolState, McpTransportFactory } from "./types.js";
2
+ /** Sanitise one name segment to the character set tool APIs accept. */
3
+ export declare function sanitizeNameSegment(value: string, fallback?: string): string;
4
+ /**
5
+ * Resolve a remote tool to its model-facing name. The server and tool segments
6
+ * are sanitised and the whole name is capped so it stays valid everywhere.
7
+ */
8
+ export declare function namespacedToolName(server: string, tool: string): string;
9
+ export interface McpManagerOptions {
10
+ servers?: Record<string, McpServerConfig>;
11
+ transportFactory?: McpTransportFactory;
12
+ onEvent?: (event: McpEvent) => void;
13
+ }
14
+ /**
15
+ * Owns the lifetime of every configured MCP server. Connections are lazy,
16
+ * failures are isolated per server, and every state transition is observable.
17
+ */
18
+ export declare class McpManager {
19
+ onToolsChanged?: (tools: McpToolState[]) => void;
20
+ private readonly records;
21
+ private readonly transportFactory;
22
+ private readonly onEvent?;
23
+ private closed;
24
+ constructor(options?: McpManagerOptions);
25
+ /** Configured server names, including disabled entries. */
26
+ serverNames(): string[];
27
+ /** True when there is at least one enabled server. */
28
+ hasEnabledServers(): boolean;
29
+ status(): McpServerStatus[];
30
+ /** Discovered tools across every ready server. */
31
+ tools(): McpToolState[];
32
+ /**
33
+ * Connect every idle server and return the current tool list. A failing
34
+ * server is recorded and skipped; it never rejects the overall discovery.
35
+ */
36
+ syncTools(): Promise<McpToolState[]>;
37
+ /** Retry one server, or every server when no name is given. */
38
+ reconnect(name?: string): Promise<McpServerStatus[]>;
39
+ callTool(server: string, tool: string, args: Record<string, unknown>, options?: {
40
+ signal?: AbortSignal;
41
+ }): Promise<McpCallResult>;
42
+ /** Close every server without reporting failures. */
43
+ close(): Promise<void>;
44
+ /** Internal: establish one server and cache its tools. */
45
+ private connect;
46
+ private refresh;
47
+ private handleUnexpectedClose;
48
+ private fail;
49
+ private reset;
50
+ private uniqueName;
51
+ private emitToolsChanged;
52
+ private emit;
53
+ }