@mxf-dev/core 2.0.3 → 2.0.5
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/protocols/mcp/services/ExternalMcpServerManager.d.ts +93 -5
- package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts.map +1 -1
- package/dist/protocols/mcp/services/ExternalMcpServerManager.js +406 -81
- package/dist/protocols/mcp/services/ExternalMcpServerManager.js.map +1 -1
- package/dist/services/AutoCorrectionService.d.ts.map +1 -1
- package/dist/services/AutoCorrectionService.js +8 -0
- package/dist/services/AutoCorrectionService.js.map +1 -1
- package/package.json +1 -1
- package/src/protocols/mcp/services/ExternalMcpServerManager.ts +510 -94
- package/src/services/AutoCorrectionService.ts +8 -0
|
@@ -80,6 +80,13 @@ export interface ExternalMcpTool {
|
|
|
80
80
|
inputSchema: Record<string, any>;
|
|
81
81
|
serverId: string;
|
|
82
82
|
}
|
|
83
|
+
/** How long to wait for a reply to a JSON-RPC request, per method. */
|
|
84
|
+
declare const REQUEST_TIMEOUTS_MS: {
|
|
85
|
+
readonly initialize: 30000;
|
|
86
|
+
readonly 'tools/list': 15000;
|
|
87
|
+
readonly 'tools/call': 30000;
|
|
88
|
+
readonly ping: 5000;
|
|
89
|
+
};
|
|
83
90
|
/**
|
|
84
91
|
* Manages external MCP server processes and their lifecycle
|
|
85
92
|
*/
|
|
@@ -91,13 +98,21 @@ export declare class ExternalMcpServerManager extends EventEmitter {
|
|
|
91
98
|
* Server-side: uses default ServerToolEventEmitter (wraps EventBus.server).
|
|
92
99
|
* Client-side: uses ClientToolEventEmitter (wraps EventBus.client + socketEmit). */
|
|
93
100
|
private toolEventEmitter;
|
|
101
|
+
/** Delay before restarting a crashed server. Overridable for tests. */
|
|
102
|
+
private restartDelayMs;
|
|
103
|
+
/** Per-method JSON-RPC reply timeouts. Overridable for tests and tuning. */
|
|
104
|
+
private requestTimeouts;
|
|
94
105
|
/**
|
|
95
106
|
* @param options.toolEventEmitter - Injectable event emitter for decoupling from EventBus.server
|
|
96
107
|
* @param options.skipServerEventHandlers - Skip setting up EventBus.server listeners (for client-side usage)
|
|
108
|
+
* @param options.restartDelayMs - Delay before restarting a crashed server (default 2000)
|
|
109
|
+
* @param options.requestTimeoutsMs - Per-method JSON-RPC reply timeout overrides
|
|
97
110
|
*/
|
|
98
111
|
constructor(options?: {
|
|
99
112
|
toolEventEmitter?: IToolEventEmitter;
|
|
100
113
|
skipServerEventHandlers?: boolean;
|
|
114
|
+
restartDelayMs?: number;
|
|
115
|
+
requestTimeoutsMs?: Partial<Record<keyof typeof REQUEST_TIMEOUTS_MS, number>>;
|
|
101
116
|
});
|
|
102
117
|
/**
|
|
103
118
|
* Set up EventBus handlers for external server registration from SDK
|
|
@@ -108,11 +123,77 @@ export declare class ExternalMcpServerManager extends EventEmitter {
|
|
|
108
123
|
*/
|
|
109
124
|
registerServer(config: ExternalServerConfig): Promise<void>;
|
|
110
125
|
/**
|
|
111
|
-
*
|
|
126
|
+
* Register a channel-scoped server: track its scope, then register and
|
|
127
|
+
* (per config) start it. Resolves after the MCP handshake and tool
|
|
128
|
+
* discovery when autoStart is set, so a resolved promise means the tools
|
|
129
|
+
* are in the registry.
|
|
130
|
+
*
|
|
131
|
+
* A re-registration over an existing scope preserves the connected-agent
|
|
132
|
+
* set and clears any pending keepAlive timer — previously the timer
|
|
133
|
+
* reference was silently overwritten while the timer kept running, so a
|
|
134
|
+
* stale keepAlive could stop a freshly re-registered server later.
|
|
135
|
+
*/
|
|
136
|
+
registerChannelServer(channelId: string, config: Omit<ExternalServerConfig, 'id'> & {
|
|
137
|
+
id: string;
|
|
138
|
+
keepAliveMinutes?: number;
|
|
139
|
+
}, registrationContext?: {
|
|
140
|
+
agentId: string;
|
|
141
|
+
channelId: string;
|
|
142
|
+
originalServerId: string;
|
|
143
|
+
serverName: string;
|
|
144
|
+
}): Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Unregister a channel-scoped server: stop the process and remove both the
|
|
147
|
+
* server record and the scope tracking, including any keepAlive timer.
|
|
148
|
+
*
|
|
149
|
+
* Idempotent: unregistering a server that is partially or fully gone cleans
|
|
150
|
+
* up whatever remains and resolves. Production showed the half-removed
|
|
151
|
+
* state — record deleted, scope alive — and an unregister that throws
|
|
152
|
+
* "not found" against it leaves the zombie in place forever.
|
|
153
|
+
*/
|
|
154
|
+
unregisterChannelServer(channelId: string, serverId: string): Promise<void>;
|
|
155
|
+
/**
|
|
156
|
+
* Unregister a server by its full id (global servers, and the SDK-facing
|
|
157
|
+
* EXTERNAL_SERVER_UNREGISTER path). Also removes scope tracking — this
|
|
158
|
+
* path used to delete only the server record, which was exactly the
|
|
159
|
+
* zombie state observed in production: agents kept "joining" a scope
|
|
160
|
+
* whose server no longer existed.
|
|
161
|
+
*/
|
|
162
|
+
unregisterServer(serverId: string): Promise<void>;
|
|
163
|
+
/**
|
|
164
|
+
* Stop a server (if running) and remove every trace of it: server record,
|
|
165
|
+
* scope entry, keepAlive timer. Never throws for a missing record — it
|
|
166
|
+
* removes what exists and says what it did.
|
|
167
|
+
*/
|
|
168
|
+
private removeServer;
|
|
169
|
+
/**
|
|
170
|
+
* Remove a server that cannot be kept alive (restart budget exhausted,
|
|
171
|
+
* unrecoverable spawn failure). Loud by design: this is the path that
|
|
172
|
+
* prevents zombies, so it reports at error level.
|
|
173
|
+
*/
|
|
174
|
+
private removeServerAfterFailure;
|
|
175
|
+
/**
|
|
176
|
+
* Settle every caller waiting for a server to become ready.
|
|
177
|
+
*/
|
|
178
|
+
private settleReadyWaiters;
|
|
179
|
+
/**
|
|
180
|
+
* Start an external server process.
|
|
181
|
+
*
|
|
182
|
+
* Resolves once the MCP handshake AND tool discovery have completed — a
|
|
183
|
+
* resolved startServer() means the server's tools are in the registry.
|
|
184
|
+
* It used to resolve right after spawn, which let callers (agent join,
|
|
185
|
+
* restart) proceed against a server that had not finished — or would
|
|
186
|
+
* never finish — its handshake.
|
|
112
187
|
*/
|
|
113
188
|
startServer(serverId: string, agentId?: AgentId, channelId?: ChannelId): Promise<void>;
|
|
114
189
|
/**
|
|
115
|
-
* Handle agent joining a channel
|
|
190
|
+
* Handle agent joining a channel — verify each channel server is actually
|
|
191
|
+
* alive before counting the agent as connected.
|
|
192
|
+
*
|
|
193
|
+
* This used to be a blind reference-count bump: a missing server record was
|
|
194
|
+
* silently skipped and a dead process was never probed, so agents "joined"
|
|
195
|
+
* servers that could not serve a single tool call, and the only downstream
|
|
196
|
+
* signal was a NOT FOUND warning when their allowlist resolved.
|
|
116
197
|
*/
|
|
117
198
|
onAgentJoinChannel(agentId: string, channelId: string): Promise<void>;
|
|
118
199
|
/**
|
|
@@ -124,9 +205,12 @@ export declare class ExternalMcpServerManager extends EventEmitter {
|
|
|
124
205
|
*/
|
|
125
206
|
getServersByScope(scope: 'global' | 'channel' | 'agent', scopeId?: string): ExternalServerStatus[];
|
|
126
207
|
/**
|
|
127
|
-
* Stop an external server process
|
|
208
|
+
* Stop an external server process.
|
|
209
|
+
*
|
|
210
|
+
* An intentional stop: the exit handler will see `expectedExit` and will
|
|
211
|
+
* neither log the exit as a crash nor restart the process.
|
|
128
212
|
*/
|
|
129
|
-
stopServer(serverId: string, agentId?: AgentId, channelId?: ChannelId): Promise<void>;
|
|
213
|
+
stopServer(serverId: string, agentId?: AgentId, channelId?: ChannelId, reason?: string): Promise<void>;
|
|
130
214
|
/**
|
|
131
215
|
* Get status of all servers
|
|
132
216
|
*/
|
|
@@ -247,7 +331,10 @@ export declare class ExternalMcpServerManager extends EventEmitter {
|
|
|
247
331
|
*/
|
|
248
332
|
startServerFromConfig(config: ExternalServerConfig): Promise<boolean>;
|
|
249
333
|
/**
|
|
250
|
-
* Restart a server by ID
|
|
334
|
+
* Restart a server by ID. Resolves after the restarted server has finished
|
|
335
|
+
* its handshake and tool discovery (see startServer). Throws when the
|
|
336
|
+
* restart fails, so callers can react instead of proceeding against a dead
|
|
337
|
+
* server.
|
|
251
338
|
*/
|
|
252
339
|
restartServer(serverId: string): Promise<boolean>;
|
|
253
340
|
/**
|
|
@@ -262,4 +349,5 @@ export declare class ExternalMcpServerManager extends EventEmitter {
|
|
|
262
349
|
*/
|
|
263
350
|
private executeToolOnServerInternal;
|
|
264
351
|
}
|
|
352
|
+
export {};
|
|
265
353
|
//# sourceMappingURL=ExternalMcpServerManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExternalMcpServerManager.d.ts","sourceRoot":"","sources":["../../../../src/protocols/mcp/services/ExternalMcpServerManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAWH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAQ3D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAC;IACnB,2DAA2D;IAC3D,cAAc,EAAE,OAAO,CAAC;IACxB,4CAA4C;IAC5C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,yCAAyC;IACzC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACpC,CAAC,CAAC;CACN;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"ExternalMcpServerManager.d.ts","sourceRoot":"","sources":["../../../../src/protocols/mcp/services/ExternalMcpServerManager.ts"],"names":[],"mappings":"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"}
|