@vscode/component-explorer-cli 0.2.1-15 → 0.2.1-17
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/_virtual/_build-info.js +1 -1
- package/dist/commands/mcpCommand.d.ts +0 -2
- package/dist/commands/mcpCommand.d.ts.map +1 -1
- package/dist/commands/mcpCommand.js +133 -66
- package/dist/commands/mcpCommand.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +2 -0
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/pipeClient.d.ts +2 -0
- package/dist/daemon/pipeClient.d.ts.map +1 -1
- package/dist/daemon/pipeClient.js +18 -1
- package/dist/daemon/pipeClient.js.map +1 -1
- package/dist/mcp/DaemonAccessor.d.ts +22 -0
- package/dist/mcp/DaemonAccessor.d.ts.map +1 -0
- package/dist/mcp/McpServer.d.ts +4 -19
- package/dist/mcp/McpServer.d.ts.map +1 -1
- package/dist/mcp/McpServer.js +116 -204
- package/dist/mcp/McpServer.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,5 @@ export declare class McpCommand extends Command {
|
|
|
10
10
|
readonly noAutostartHint: string | undefined;
|
|
11
11
|
readonly callTimeout: string | undefined;
|
|
12
12
|
execute(): Promise<void>;
|
|
13
|
-
private _runInProcess;
|
|
14
|
-
private _runWithExternalDaemon;
|
|
15
13
|
}
|
|
16
14
|
//# sourceMappingURL=mcpCommand.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpCommand.d.ts","sourceRoot":"","sources":["../../src/commands/mcpCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mcpCommand.d.ts","sourceRoot":"","sources":["../../src/commands/mcpCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAY5C,qBAAa,UAAW,SAAQ,OAAO;IACtC,OAAgB,KAAK,aAAa;IAElC,OAAgB,KAAK,4BAOlB;IAEH,QAAQ,CAAC,OAAO,SAAsG;IACtH,QAAQ,CAAC,OAAO,qBAAgG;IAChH,QAAQ,CAAC,OAAO,SAAwI;IACxJ,QAAQ,CAAC,SAAS,UAA6I;IAC/J,QAAQ,CAAC,WAAW,UAA4I;IAChK,QAAQ,CAAC,eAAe,qBAAsJ;IAC9K,QAAQ,CAAC,WAAW,qBAAyG;IAEvH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAyD9B"}
|
|
@@ -9,7 +9,7 @@ import '../external/vscode-observables/observables/dist/observableInternal/utils
|
|
|
9
9
|
import '../external/vscode-observables/observables/dist/observableInternal/observables/observableFromEvent.js';
|
|
10
10
|
import { tryConnect, connectToExistingOrStartDaemon } from '../daemon/lifecycle.js';
|
|
11
11
|
import { daemonPipeInfo } from '../daemon/pipeName.js';
|
|
12
|
-
import {
|
|
12
|
+
import { ComponentExplorerMcpServer } from '../mcp/McpServer.js';
|
|
13
13
|
import { ResolvedConfig } from '../config.js';
|
|
14
14
|
import { DaemonService } from '../daemon/DaemonService.js';
|
|
15
15
|
import { createInProcessClient } from '../daemon/inProcessClient.js';
|
|
@@ -46,19 +46,8 @@ class McpCommand extends Command {
|
|
|
46
46
|
disposables.dispose();
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
-
if (this.useDaemon) {
|
|
50
|
-
await this._runWithExternalDaemon(config, logger);
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
await this._runInProcess(config, logger, disposables);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
async _runInProcess(config, logger, disposables) {
|
|
57
|
-
logger.log('Starting in-process daemon...');
|
|
58
|
-
const service = await DaemonService.create(config, logger, undefined, {
|
|
59
|
-
idleTimeoutMs: 0, // no idle timeout for MCP — the MCP client controls lifetime
|
|
60
|
-
});
|
|
61
49
|
// Ensure cleanup on crashes/unexpected exits
|
|
50
|
+
const asyncCleanupFns = [];
|
|
62
51
|
let cleanedUp = false;
|
|
63
52
|
const cleanup = async () => {
|
|
64
53
|
if (cleanedUp) {
|
|
@@ -66,7 +55,9 @@ class McpCommand extends Command {
|
|
|
66
55
|
}
|
|
67
56
|
cleanedUp = true;
|
|
68
57
|
logger.debug('Cleaning up...');
|
|
69
|
-
|
|
58
|
+
for (const fn of asyncCleanupFns) {
|
|
59
|
+
await fn();
|
|
60
|
+
}
|
|
70
61
|
disposables.dispose();
|
|
71
62
|
};
|
|
72
63
|
process.on('uncaughtException', async (err) => {
|
|
@@ -82,66 +73,142 @@ class McpCommand extends Command {
|
|
|
82
73
|
await cleanup();
|
|
83
74
|
process.exit(0);
|
|
84
75
|
});
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
76
|
+
const accessor = this.useDaemon
|
|
77
|
+
? new ExternalDaemonAccessor(this.project, logger, {
|
|
78
|
+
noAutostart: this.noAutostart,
|
|
79
|
+
noAutostartHint: this.noAutostartHint,
|
|
80
|
+
verbose: this.verbose,
|
|
81
|
+
logFile: this.logFile,
|
|
82
|
+
})
|
|
83
|
+
: new InProcessDaemonAccessor(config, logger, asyncCleanupFns);
|
|
84
|
+
await ComponentExplorerMcpServer.create(accessor, {
|
|
88
85
|
callTimeoutMs: this.callTimeout ? Number(this.callTimeout) * 1000 : undefined,
|
|
89
86
|
});
|
|
90
|
-
logger.log(
|
|
87
|
+
logger.log(`MCP server ready (${this.useDaemon ? 'external' : 'in-process'} daemon)`);
|
|
91
88
|
await new Promise(() => { });
|
|
92
89
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
90
|
+
}
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
// InProcessDaemonAccessor — lazily creates a DaemonService on first tool call
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
class InProcessDaemonAccessor {
|
|
95
|
+
_config;
|
|
96
|
+
_logger;
|
|
97
|
+
_asyncCleanupFns;
|
|
98
|
+
_connection = observableValue('daemon', undefined);
|
|
99
|
+
_startInProgress = false;
|
|
100
|
+
constructor(_config, _logger, _asyncCleanupFns) {
|
|
101
|
+
this._config = _config;
|
|
102
|
+
this._logger = _logger;
|
|
103
|
+
this._asyncCleanupFns = _asyncCleanupFns;
|
|
104
|
+
}
|
|
105
|
+
get connection() { return this._connection; }
|
|
106
|
+
async getDaemonOrStart() {
|
|
107
|
+
const current = this._connection.get();
|
|
108
|
+
if (current) {
|
|
109
|
+
return current;
|
|
110
|
+
}
|
|
111
|
+
if (this._startInProgress) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
this._startInProgress = true;
|
|
115
|
+
try {
|
|
116
|
+
this._logger.log('Starting in-process daemon...');
|
|
117
|
+
const service = await DaemonService.create(this._config, this._logger, undefined, {
|
|
118
|
+
idleTimeoutMs: 0,
|
|
119
|
+
});
|
|
120
|
+
this._asyncCleanupFns.push(() => service.dispose());
|
|
121
|
+
const client = createInProcessClient(service.api, { clientName: 'mcp-inproc' });
|
|
122
|
+
this._connection.set(client, undefined);
|
|
123
|
+
return client;
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
this._logger.log(`Failed to start in-process daemon: ${err instanceof Error ? err.message : String(err)}`);
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
this._startInProgress = false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
class ExternalDaemonAccessor {
|
|
135
|
+
_logger;
|
|
136
|
+
_options;
|
|
137
|
+
_connection = observableValue('daemon', undefined);
|
|
138
|
+
_pipeName;
|
|
139
|
+
_configPath;
|
|
140
|
+
_clientName;
|
|
141
|
+
_restartInProgress = false;
|
|
142
|
+
constructor(projectPath, _logger, _options) {
|
|
143
|
+
this._logger = _logger;
|
|
144
|
+
this._options = _options;
|
|
145
|
+
this._configPath = path.resolve(projectPath);
|
|
146
|
+
const { pipeName, source: pipeSource } = daemonPipeInfo(this._configPath);
|
|
147
|
+
this._pipeName = pipeName;
|
|
148
|
+
this._clientName = `mcp-${new Date().toISOString().replace(/[-:]/g, '').replace(/\.\d+Z$/, '')}`;
|
|
149
|
+
_logger.debug(`Daemon pipe: ${pipeName} (source: ${pipeSource})`);
|
|
150
|
+
}
|
|
151
|
+
get connection() { return this._connection; }
|
|
152
|
+
get noDaemonHint() { return this._options.noAutostartHint; }
|
|
153
|
+
_onConnectionError = () => {
|
|
154
|
+
if (this._connection.get()) {
|
|
155
|
+
this._connection.set(undefined, undefined);
|
|
156
|
+
this._logger.debug('Daemon connection lost');
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
async getDaemonOrStart() {
|
|
160
|
+
const current = this._connection.get();
|
|
161
|
+
if (current) {
|
|
162
|
+
return current;
|
|
163
|
+
}
|
|
164
|
+
return waitForConnection(() => this._connection.get(), () => this._poll());
|
|
165
|
+
}
|
|
166
|
+
async _poll() {
|
|
167
|
+
const client = await tryConnect(this._pipeName, { clientName: this._clientName, onConnectionError: this._onConnectionError });
|
|
168
|
+
if (client) {
|
|
169
|
+
if (!this._connection.get()) {
|
|
170
|
+
this._logger.debug('Daemon connection established');
|
|
171
|
+
this._connection.set(client, undefined);
|
|
109
172
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
this._onConnectionError();
|
|
176
|
+
if (!this._options.noAutostart && !this._restartInProgress) {
|
|
177
|
+
this._restartInProgress = true;
|
|
178
|
+
try {
|
|
179
|
+
const daemon = await connectToExistingOrStartDaemon(this._configPath, {
|
|
180
|
+
clientName: this._clientName,
|
|
181
|
+
onConnectionError: this._onConnectionError,
|
|
182
|
+
logger: this._logger,
|
|
183
|
+
verbosity: this._options.verbose,
|
|
184
|
+
logFile: this._options.logFile,
|
|
185
|
+
});
|
|
186
|
+
this._connection.set(daemon, undefined);
|
|
115
187
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
try {
|
|
119
|
-
const daemon = await connectToExistingOrStartDaemon(configPath, {
|
|
120
|
-
clientName: mcpClientName,
|
|
121
|
-
logger,
|
|
122
|
-
verbosity: this.verbose,
|
|
123
|
-
logFile: this.logFile,
|
|
124
|
-
});
|
|
125
|
-
daemonObservable.set(new DaemonConnection(daemon), undefined);
|
|
126
|
-
}
|
|
127
|
-
catch (err) {
|
|
128
|
-
logger.debug(`Daemon restart failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
129
|
-
}
|
|
130
|
-
finally {
|
|
131
|
-
restartInProgress = false;
|
|
132
|
-
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
this._logger.debug(`Daemon restart failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
133
190
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
191
|
+
finally {
|
|
192
|
+
this._restartInProgress = false;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Wait up to `timeoutMs` for a connection to appear, calling `poll` each
|
|
199
|
+
* iteration to trigger connection attempts.
|
|
200
|
+
*/
|
|
201
|
+
async function waitForConnection(get, poll, timeoutMs = 3000) {
|
|
202
|
+
const startTime = Date.now();
|
|
203
|
+
while (Date.now() - startTime < timeoutMs) {
|
|
204
|
+
await poll();
|
|
205
|
+
const client = get();
|
|
206
|
+
if (client) {
|
|
207
|
+
return client;
|
|
208
|
+
}
|
|
209
|
+
await new Promise(resolve => setTimeout(resolve, 200));
|
|
144
210
|
}
|
|
211
|
+
return undefined;
|
|
145
212
|
}
|
|
146
213
|
|
|
147
214
|
export { McpCommand };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpCommand.js","sources":["../../src/commands/mcpCommand.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"mcpCommand.js","sources":["../../src/commands/mcpCommand.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { ProxyApiClient } from '@hediet/simple-api/client';
|
|
2
2
|
import type { DaemonApiType } from './DaemonService.js';
|
|
3
|
+
import { type PipeClientOptions } from './pipeClient.js';
|
|
3
4
|
import { type ILogger } from '../logger.js';
|
|
4
5
|
export interface ConnectOptions {
|
|
5
6
|
readonly logger?: ILogger;
|
|
6
7
|
readonly clientName?: string;
|
|
8
|
+
readonly onConnectionError?: PipeClientOptions['onConnectionError'];
|
|
7
9
|
/** Verbosity level (0 = info, 1 = debug, 2+ = trace) to pass to spawned daemon. */
|
|
8
10
|
readonly verbosity?: number;
|
|
9
11
|
/** Log file path to pass to spawned daemon. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/daemon/lifecycle.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/daemon/lifecycle.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE3E,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,cAAc,CAAC;AAOxD,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;IACpE,mFAAmF;IACnF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC,CAY/H;AAED,wBAAsB,aAAa,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAA;CAAE,GAAG,cAAc,GAC7E,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAkBxC;AAED,wBAAsB,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CA8CzI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sources":["../../src/daemon/lifecycle.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAWA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,aAAa,CACb;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sources":["../../src/daemon/lifecycle.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { ProxyApiClient } from '@hediet/simple-api/client';
|
|
2
2
|
import type { DaemonApiType } from './DaemonService.js';
|
|
3
3
|
import { type ILogger } from '../logger.js';
|
|
4
|
+
export declare function isPipeConnectionError(e: unknown): boolean;
|
|
4
5
|
export interface PipeClientOptions {
|
|
5
6
|
readonly logger?: ILogger;
|
|
6
7
|
readonly clientName?: string;
|
|
8
|
+
readonly onConnectionError?: (error: Error) => void;
|
|
7
9
|
}
|
|
8
10
|
export declare function createPipeClient(pipeName: string, options?: PipeClientOptions): ProxyApiClient<DaemonApiType>;
|
|
9
11
|
//# sourceMappingURL=pipeClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeClient.d.ts","sourceRoot":"","sources":["../../src/daemon/pipeClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,cAAc,CAAC;AAIxD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeClient.d.ts","sourceRoot":"","sources":["../../src/daemon/pipeClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,cAAc,CAAC;AAIxD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAOzD;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACpD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,aAAa,CAAC,CA+K7G"}
|
|
@@ -18,9 +18,20 @@ import 'node:child_process';
|
|
|
18
18
|
import 'node:module';
|
|
19
19
|
import 'node:crypto';
|
|
20
20
|
|
|
21
|
+
function isPipeConnectionError(e) {
|
|
22
|
+
if (!(e instanceof Error)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const code = e.code;
|
|
26
|
+
if (code === 'ENOENT' || code === 'ECONNREFUSED' || code === 'ECONNRESET' || code === 'EPIPE') {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
return /connect ENOENT|ECONNREFUSED|ECONNRESET|EPIPE/.test(e.message);
|
|
30
|
+
}
|
|
21
31
|
function createPipeClient(pipeName, options) {
|
|
22
32
|
const logger = options?.logger ?? nullLogger;
|
|
23
33
|
const clientName = options?.clientName ?? 'unknown';
|
|
34
|
+
const onConnectionError = options?.onConnectionError;
|
|
24
35
|
let versionCheckPromise;
|
|
25
36
|
const ensureVersionCompatibility = () => {
|
|
26
37
|
if (versionCheckPromise) {
|
|
@@ -125,6 +136,9 @@ function createPipeClient(pipeName, options) {
|
|
|
125
136
|
});
|
|
126
137
|
res.on('error', (err) => {
|
|
127
138
|
logger.trace(`Daemon call: ${method} stream error: ${err.message}`);
|
|
139
|
+
if (isPipeConnectionError(err)) {
|
|
140
|
+
onConnectionError?.(err);
|
|
141
|
+
}
|
|
128
142
|
done = true;
|
|
129
143
|
if (resolve) {
|
|
130
144
|
const r = resolve;
|
|
@@ -182,6 +196,9 @@ function createPipeClient(pipeName, options) {
|
|
|
182
196
|
});
|
|
183
197
|
req.on('error', (err) => {
|
|
184
198
|
logger.trace(`Daemon call: ${method} connection error: ${err.message}`);
|
|
199
|
+
if (isPipeConnectionError(err)) {
|
|
200
|
+
onConnectionError?.(err);
|
|
201
|
+
}
|
|
185
202
|
reject(err);
|
|
186
203
|
});
|
|
187
204
|
req.write(body);
|
|
@@ -190,5 +207,5 @@ function createPipeClient(pipeName, options) {
|
|
|
190
207
|
});
|
|
191
208
|
}
|
|
192
209
|
|
|
193
|
-
export { createPipeClient };
|
|
210
|
+
export { createPipeClient, isPipeConnectionError };
|
|
194
211
|
//# sourceMappingURL=pipeClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeClient.js","sources":["../../src/daemon/pipeClient.ts"],"sourcesContent":[null],"names":["http"],"mappings":";;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"pipeClient.js","sources":["../../src/daemon/pipeClient.ts"],"sourcesContent":[null],"names":["http"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ProxyApiClient } from '@hediet/simple-api/client';
|
|
2
|
+
import { type IObservable } from '@vscode/observables';
|
|
3
|
+
import type { DaemonApiType } from '../daemon/DaemonService.js';
|
|
4
|
+
export type DaemonClient = ProxyApiClient<DaemonApiType>;
|
|
5
|
+
/**
|
|
6
|
+
* Provides daemon connections to the MCP server.
|
|
7
|
+
*
|
|
8
|
+
* Implementations own the full lifecycle: lazy startup, reconnection,
|
|
9
|
+
* polling, staleness tracking. The MCP server only consumes this interface.
|
|
10
|
+
*/
|
|
11
|
+
export interface DaemonAccessor {
|
|
12
|
+
/** Current daemon client, or `undefined` if not connected. */
|
|
13
|
+
readonly connection: IObservable<DaemonClient | undefined>;
|
|
14
|
+
/**
|
|
15
|
+
* Request that a daemon be available. May lazily start or connect.
|
|
16
|
+
* Returns `undefined` if no daemon could be obtained.
|
|
17
|
+
*/
|
|
18
|
+
getDaemonOrStart(): Promise<DaemonClient | undefined>;
|
|
19
|
+
/** Optional hint shown in error messages when no daemon is available. */
|
|
20
|
+
readonly noDaemonHint?: string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=DaemonAccessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DaemonAccessor.d.ts","sourceRoot":"","sources":["../../src/mcp/DaemonAccessor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC9B,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IAE3D;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;IAEtD,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAC/B"}
|
package/dist/mcp/McpServer.d.ts
CHANGED
|
@@ -1,36 +1,21 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import type { DaemonApiType } from '../daemon/DaemonService.js';
|
|
4
|
-
export declare class DaemonConnection {
|
|
5
|
-
readonly client: ProxyApiClient<DaemonApiType>;
|
|
6
|
-
private _stale;
|
|
7
|
-
constructor(client: ProxyApiClient<DaemonApiType>);
|
|
8
|
-
get isStale(): boolean;
|
|
9
|
-
markStale(): void;
|
|
10
|
-
}
|
|
1
|
+
import { Disposable } from '@vscode/observables';
|
|
2
|
+
import type { DaemonAccessor } from './DaemonAccessor.js';
|
|
11
3
|
export interface McpServerOptions {
|
|
12
|
-
pollFn?: () => Promise<void>;
|
|
13
|
-
noAutostartHint?: string;
|
|
14
4
|
callTimeoutMs?: number;
|
|
15
5
|
}
|
|
16
6
|
export declare class ComponentExplorerMcpServer extends Disposable {
|
|
17
|
-
private readonly
|
|
18
|
-
static create(daemon:
|
|
7
|
+
private readonly _daemon;
|
|
8
|
+
static create(daemon: DaemonAccessor, options?: McpServerOptions): Promise<ComponentExplorerMcpServer>;
|
|
19
9
|
private readonly _mcp;
|
|
20
10
|
private readonly _watchList;
|
|
21
11
|
private readonly _imageLru;
|
|
22
12
|
private readonly _taskManager;
|
|
23
13
|
private readonly _taskLastReportedIndex;
|
|
24
|
-
private readonly _pollFn?;
|
|
25
|
-
private readonly _noAutostartHint?;
|
|
26
14
|
private readonly _multiSessionTools;
|
|
27
15
|
private _sessions;
|
|
28
16
|
private _eventStreamAbortController;
|
|
29
17
|
private constructor();
|
|
30
18
|
private _onDaemonChanged;
|
|
31
|
-
private _getConnection;
|
|
32
|
-
private _waitForDaemon;
|
|
33
|
-
private _handleDisconnect;
|
|
34
19
|
private _noDaemonError;
|
|
35
20
|
private static readonly _DEFAULT_CALL_TIMEOUT_MS;
|
|
36
21
|
private readonly _callTimeoutMs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"McpServer.d.ts","sourceRoot":"","sources":["../../src/mcp/McpServer.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"McpServer.d.ts","sourceRoot":"","sources":["../../src/mcp/McpServer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAW,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAK1D,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,qBAAqB,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,qBAAa,0BAA2B,SAAQ,UAAU;IAqBxD,OAAO,CAAC,QAAQ,CAAC,OAAO;WApBZ,MAAM,CAClB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,0BAA0B,CAAC;IAOtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAA6B;IACpE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAwB;IAC3D,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,2BAA2B,CAA8B;IAEjE,OAAO;YAiBO,gBAAgB;IAqB9B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAU;IAC1D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;YAE1B,WAAW;IA6BzB,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,mBAAmB;IA4B3B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,2BAA2B;IAKnC,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,0BAA0B;YAOpB,gBAAgB;IAQ9B,OAAO,CAAC,iCAAiC;YAW3B,oBAAoB;IAelC,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,qBAAqB;IAkC7B,OAAO,CAAC,mBAAmB;IAyG3B,OAAO,CAAC,0BAA0B;IA8FlC,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,qBAAqB;IAuD7B,OAAO,CAAC,qBAAqB;IA8E7B,OAAO,CAAC,mBAAmB;IAsC3B,OAAO,CAAC,wBAAwB;IAuBhC,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,qBAAqB;IA2E7B,OAAO,CAAC,sBAAsB;YAgEhB,oBAAoB;IA6ClC,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,uBAAuB;IAmB/B,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,eAAe;IAwEvB,OAAO,CAAC,2BAA2B;IA2GnC,OAAO,CAAC,uBAAuB;IAmG/B,OAAO,CAAC,kBAAkB;IAoD1B,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,4BAA4B;IA0BpC,OAAO,CAAC,kCAAkC;CAiB1C"}
|