@1mcp/agent 0.18.1 → 0.20.0
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 +64 -27
- package/build/commands/mcp/add.d.ts +3 -0
- package/build/commands/mcp/add.d.ts.map +1 -1
- package/build/commands/mcp/add.js +24 -0
- package/build/commands/mcp/add.js.map +1 -1
- package/build/commands/mcp/index.d.ts.map +1 -1
- package/build/commands/mcp/index.js +24 -0
- package/build/commands/mcp/index.js.map +1 -1
- package/build/commands/mcp/list.d.ts +1 -0
- package/build/commands/mcp/list.d.ts.map +1 -1
- package/build/commands/mcp/list.js +26 -8
- package/build/commands/mcp/list.js.map +1 -1
- package/build/commands/mcp/update.d.ts +3 -0
- package/build/commands/mcp/update.d.ts.map +1 -1
- package/build/commands/mcp/update.js +21 -0
- package/build/commands/mcp/update.js.map +1 -1
- package/build/config/mcpConfigManager.d.ts.map +1 -1
- package/build/config/mcpConfigManager.js +7 -3
- package/build/config/mcpConfigManager.js.map +1 -1
- package/build/constants.d.ts +1 -1
- package/build/constants.js +1 -1
- package/build/core/types/server.d.ts +3 -0
- package/build/core/types/server.d.ts.map +1 -1
- package/build/core/types/server.js.map +1 -1
- package/build/core/types/transport.d.ts +27 -5
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +7 -2
- package/build/core/types/transport.js.map +1 -1
- package/build/handlers/requestHandlers.d.ts.map +1 -1
- package/build/handlers/requestHandlers.js +20 -5
- package/build/handlers/requestHandlers.js.map +1 -1
- package/build/index.js +39 -5
- package/build/index.js.map +1 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +9 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.js +55 -6
- package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.d.ts +8 -2
- package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.js +109 -7
- package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
- package/build/transport/http/routes/oauthRoutes.d.ts +2 -1
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/oauthRoutes.js +13 -1
- package/build/transport/http/routes/oauthRoutes.js.map +1 -1
- package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/sseRoutes.js +6 -2
- package/build/transport/http/routes/sseRoutes.js.map +1 -1
- package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/streamableHttpRoutes.js +6 -2
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
- package/build/transport/http/server.js +1 -1
- package/build/transport/http/server.js.map +1 -1
- package/build/transport/restartableStdioTransport.d.ts +84 -0
- package/build/transport/restartableStdioTransport.d.ts.map +1 -0
- package/build/transport/restartableStdioTransport.js +185 -0
- package/build/transport/restartableStdioTransport.js.map +1 -0
- package/build/transport/transportFactory.d.ts.map +1 -1
- package/build/transport/transportFactory.js +38 -2
- package/build/transport/transportFactory.js.map +1 -1
- package/build/utils/clientFiltering.d.ts +8 -1
- package/build/utils/clientFiltering.d.ts.map +1 -1
- package/build/utils/clientFiltering.js +38 -3
- package/build/utils/clientFiltering.js.map +1 -1
- package/build/utils/envProcessor.d.ts +45 -0
- package/build/utils/envProcessor.d.ts.map +1 -0
- package/build/utils/envProcessor.js +214 -0
- package/build/utils/envProcessor.js.map +1 -0
- package/build/utils/sanitization.d.ts +63 -0
- package/build/utils/sanitization.d.ts.map +1 -1
- package/build/utils/sanitization.js +308 -0
- package/build/utils/sanitization.js.map +1 -1
- package/build/utils/tagQueryParser.d.ts +76 -0
- package/build/utils/tagQueryParser.d.ts.map +1 -0
- package/build/utils/tagQueryParser.js +336 -0
- package/build/utils/tagQueryParser.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
2
|
+
import logger from '../logger/logger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper around StdioClientTransport that provides automatic restart functionality
|
|
5
|
+
* Implements Transport interface and adds OAuth provider support
|
|
6
|
+
*/
|
|
7
|
+
export class RestartableStdioTransport {
|
|
8
|
+
serverParams;
|
|
9
|
+
restartConfig;
|
|
10
|
+
_currentTransport = null;
|
|
11
|
+
_restartCount = 0;
|
|
12
|
+
_isStarting = false;
|
|
13
|
+
_isClosing = false;
|
|
14
|
+
_restartTimer = null;
|
|
15
|
+
// Extended properties for AuthProviderTransport compatibility
|
|
16
|
+
timeout;
|
|
17
|
+
tags;
|
|
18
|
+
oauthProvider;
|
|
19
|
+
// Event handlers
|
|
20
|
+
onclose;
|
|
21
|
+
onerror;
|
|
22
|
+
onmessage;
|
|
23
|
+
constructor(serverParams, restartConfig) {
|
|
24
|
+
this.serverParams = serverParams;
|
|
25
|
+
this.restartConfig = restartConfig;
|
|
26
|
+
logger.debug(`Creating RestartableStdioTransport for command: ${serverParams.command}`);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new underlying transport instance
|
|
30
|
+
*/
|
|
31
|
+
createTransport() {
|
|
32
|
+
const transport = new StdioClientTransport(this.serverParams);
|
|
33
|
+
// Forward event handlers
|
|
34
|
+
transport.onclose = () => this.handleTransportClose();
|
|
35
|
+
transport.onerror = (error) => this.handleTransportError(error);
|
|
36
|
+
transport.onmessage = (message) => this.handleTransportMessage(message);
|
|
37
|
+
return transport;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Handles transport close events
|
|
41
|
+
*/
|
|
42
|
+
handleTransportClose() {
|
|
43
|
+
if (this._isClosing) {
|
|
44
|
+
// Expected close, forward the event
|
|
45
|
+
this.onclose?.();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Unexpected close, attempt restart if configured
|
|
49
|
+
if (this.restartConfig.restartOnExit) {
|
|
50
|
+
this.attemptRestart();
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// No restart configured, forward close event
|
|
54
|
+
this.onclose?.();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Handles transport error events
|
|
59
|
+
*/
|
|
60
|
+
handleTransportError(error) {
|
|
61
|
+
logger.error(`Transport error: ${error.message}`);
|
|
62
|
+
this.onerror?.(error);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Handles transport message events
|
|
66
|
+
*/
|
|
67
|
+
handleTransportMessage(message) {
|
|
68
|
+
this.onmessage?.(message);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Attempts to restart the transport
|
|
72
|
+
*/
|
|
73
|
+
attemptRestart() {
|
|
74
|
+
if (this._isClosing) {
|
|
75
|
+
return; // Don't restart if we're intentionally closing
|
|
76
|
+
}
|
|
77
|
+
const maxRestarts = this.restartConfig.maxRestarts;
|
|
78
|
+
if (maxRestarts !== undefined && this._restartCount >= maxRestarts) {
|
|
79
|
+
logger.error(`Max restart limit reached (${maxRestarts}), stopping transport`);
|
|
80
|
+
this.onerror?.(new Error(`Transport failed after ${maxRestarts} restart attempts`));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
this._restartCount++;
|
|
84
|
+
const restartDelay = this.restartConfig.restartDelay ?? 1000;
|
|
85
|
+
logger.info(`Attempting transport restart ${this._restartCount} in ${restartDelay}ms...`);
|
|
86
|
+
this._restartTimer = setTimeout(async () => {
|
|
87
|
+
this._restartTimer = null;
|
|
88
|
+
try {
|
|
89
|
+
await this.restartTransport();
|
|
90
|
+
logger.info(`Transport restarted successfully (attempt ${this._restartCount})`);
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
logger.error(`Transport restart failed: ${error}`);
|
|
94
|
+
this.onerror?.(error instanceof Error ? error : new Error(String(error)));
|
|
95
|
+
}
|
|
96
|
+
}, restartDelay);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Restarts the underlying transport
|
|
100
|
+
*/
|
|
101
|
+
async restartTransport() {
|
|
102
|
+
if (this._isStarting || this._isClosing) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this._isStarting = true;
|
|
106
|
+
try {
|
|
107
|
+
// Close old transport if it exists
|
|
108
|
+
if (this._currentTransport) {
|
|
109
|
+
await this._currentTransport.close();
|
|
110
|
+
}
|
|
111
|
+
// Create and start new transport
|
|
112
|
+
this._currentTransport = this.createTransport();
|
|
113
|
+
await this._currentTransport.start();
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
this._isStarting = false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Starts the transport
|
|
121
|
+
*/
|
|
122
|
+
async start() {
|
|
123
|
+
if (this._currentTransport) {
|
|
124
|
+
throw new Error('RestartableStdioTransport already started!');
|
|
125
|
+
}
|
|
126
|
+
this._isStarting = true;
|
|
127
|
+
this._restartCount = 0;
|
|
128
|
+
try {
|
|
129
|
+
this._currentTransport = this.createTransport();
|
|
130
|
+
await this._currentTransport.start();
|
|
131
|
+
logger.debug('RestartableStdioTransport started successfully');
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
this._isStarting = false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Gets the stderr stream from the current transport
|
|
139
|
+
*/
|
|
140
|
+
get stderr() {
|
|
141
|
+
return this._currentTransport?.stderr ?? null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Gets the process PID from the current transport
|
|
145
|
+
*/
|
|
146
|
+
get pid() {
|
|
147
|
+
return this._currentTransport?.pid ?? null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Sends a message through the current transport
|
|
151
|
+
*/
|
|
152
|
+
async send(message) {
|
|
153
|
+
if (!this._currentTransport) {
|
|
154
|
+
throw new Error('Transport not started');
|
|
155
|
+
}
|
|
156
|
+
return this._currentTransport.send(message);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Closes the transport and prevents restart
|
|
160
|
+
*/
|
|
161
|
+
async close() {
|
|
162
|
+
this._isClosing = true;
|
|
163
|
+
// Clear any pending restart timer
|
|
164
|
+
if (this._restartTimer) {
|
|
165
|
+
clearTimeout(this._restartTimer);
|
|
166
|
+
this._restartTimer = null;
|
|
167
|
+
}
|
|
168
|
+
// Close current transport if it exists
|
|
169
|
+
if (this._currentTransport) {
|
|
170
|
+
await this._currentTransport.close();
|
|
171
|
+
this._currentTransport = null;
|
|
172
|
+
}
|
|
173
|
+
logger.debug('RestartableStdioTransport closed');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Gets restart statistics
|
|
177
|
+
*/
|
|
178
|
+
getRestartStats() {
|
|
179
|
+
return {
|
|
180
|
+
restartCount: this._restartCount,
|
|
181
|
+
isRestarting: this._isStarting,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=restartableStdioTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restartableStdioTransport.js","sourceRoot":"","sources":["../../src/transport/restartableStdioTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transportFactory.d.ts","sourceRoot":"","sources":["../../src/transport/transportFactory.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAyB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"transportFactory.d.ts","sourceRoot":"","sources":["../../src/transport/transportFactory.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,qBAAqB,EAAyB,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAOzD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAuBzF;AAmKD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CA2B/G"}
|
|
@@ -7,6 +7,8 @@ import { transportConfigSchema } from '../core/types/index.js';
|
|
|
7
7
|
import { SDKOAuthClientProvider } from '../auth/sdkOAuthClientProvider.js';
|
|
8
8
|
import { AUTH_CONFIG } from '../constants.js';
|
|
9
9
|
import { AgentConfigManager } from '../core/server/agentConfig.js';
|
|
10
|
+
import { processEnvironment } from '../utils/envProcessor.js';
|
|
11
|
+
import { RestartableStdioTransport } from './restartableStdioTransport.js';
|
|
10
12
|
/**
|
|
11
13
|
* Infers transport type from configuration parameters
|
|
12
14
|
*/
|
|
@@ -82,13 +84,47 @@ function createHTTPTransport(name, validatedTransport) {
|
|
|
82
84
|
return transport;
|
|
83
85
|
}
|
|
84
86
|
/**
|
|
85
|
-
* Creates stdio transport
|
|
87
|
+
* Creates stdio transport with enhanced environment processing and optional restart capability
|
|
86
88
|
*/
|
|
87
89
|
function createStdioTransport(name, validatedTransport) {
|
|
88
90
|
if (!validatedTransport.command) {
|
|
89
91
|
throw new Error(`Command is required for stdio transport: ${name}`);
|
|
90
92
|
}
|
|
91
|
-
|
|
93
|
+
// Process environment variables with new features
|
|
94
|
+
const envResult = processEnvironment({
|
|
95
|
+
inheritParentEnv: validatedTransport.inheritParentEnv,
|
|
96
|
+
envFilter: validatedTransport.envFilter,
|
|
97
|
+
env: validatedTransport.env,
|
|
98
|
+
});
|
|
99
|
+
logger.debug(`Environment processing for ${name}:`, {
|
|
100
|
+
totalVariables: Object.keys(envResult.processedEnv).length,
|
|
101
|
+
sdkDefaults: envResult.sources.sdkDefaults.length,
|
|
102
|
+
inherited: envResult.sources.inherited.length,
|
|
103
|
+
custom: envResult.sources.custom.length,
|
|
104
|
+
filtered: envResult.sources.filtered.length,
|
|
105
|
+
});
|
|
106
|
+
// Create SDK-compatible parameters with processed environment
|
|
107
|
+
const stdioParams = {
|
|
108
|
+
command: validatedTransport.command,
|
|
109
|
+
args: validatedTransport.args,
|
|
110
|
+
stderr: validatedTransport.stderr, // IOType validation is complex, trust Zod validation
|
|
111
|
+
cwd: validatedTransport.cwd,
|
|
112
|
+
env: envResult.processedEnv,
|
|
113
|
+
};
|
|
114
|
+
// Create transport with restart capability if enabled
|
|
115
|
+
if (validatedTransport.restartOnExit) {
|
|
116
|
+
logger.info(`Creating restartable stdio transport for: ${name}`);
|
|
117
|
+
const restartableTransport = new RestartableStdioTransport(stdioParams, {
|
|
118
|
+
restartOnExit: true,
|
|
119
|
+
maxRestarts: validatedTransport.maxRestarts, // Use config value or undefined for unlimited
|
|
120
|
+
restartDelay: validatedTransport.restartDelay ?? 1000, // Use config value or default to 1 second
|
|
121
|
+
});
|
|
122
|
+
// Add AuthProviderTransport properties
|
|
123
|
+
return restartableTransport;
|
|
124
|
+
}
|
|
125
|
+
// Create standard stdio transport
|
|
126
|
+
logger.debug(`Creating standard stdio transport for: ${name}`);
|
|
127
|
+
return new StdioClientTransport(stdioParams);
|
|
92
128
|
}
|
|
93
129
|
/**
|
|
94
130
|
* Creates a single transport instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transportFactory.js","sourceRoot":"","sources":["../../src/transport/transportFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAyB,MAAM,2CAA2C,CAAC;AACxG,OAAO,EAAE,kBAAkB,EAA6B,MAAM,yCAAyC,CAAC;AACxG,OAAO,EACL,6BAA6B,GAE9B,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,MAAM,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAyB,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEtF,OAAO,EAAqB,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"transportFactory.js","sourceRoot":"","sources":["../../src/transport/transportFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ServerCapabilities } from '@modelcontextprotocol/sdk/types.js';
|
|
2
2
|
import { OutboundConnections } from '../core/types/index.js';
|
|
3
|
+
import { TagExpression } from './tagQueryParser.js';
|
|
3
4
|
/**
|
|
4
5
|
* Filters clients by tags
|
|
5
6
|
* @param clients Record of client instances
|
|
@@ -28,10 +29,16 @@ export declare function filterClients(...filters: ClientFilter[]): ClientFilter;
|
|
|
28
29
|
*/
|
|
29
30
|
export declare function byCapabilities(requiredCapabilities: ServerCapabilities): ClientFilter;
|
|
30
31
|
/**
|
|
31
|
-
* Filters clients by tags
|
|
32
|
+
* Filters clients by tags using OR logic (backward compatible)
|
|
32
33
|
* @param tags Array of tags to filter by
|
|
33
34
|
* @returns Filtered record of client instances
|
|
34
35
|
*/
|
|
35
36
|
export declare function byTags(tags?: string[]): ClientFilter;
|
|
37
|
+
/**
|
|
38
|
+
* Filters clients by advanced tag expression (new)
|
|
39
|
+
* @param expression Parsed tag expression to evaluate
|
|
40
|
+
* @returns Filtered record of client instances
|
|
41
|
+
*/
|
|
42
|
+
export declare function byTagExpression(expression: TagExpression): ClientFilter;
|
|
36
43
|
export {};
|
|
37
44
|
//# sourceMappingURL=clientFiltering.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientFiltering.d.ts","sourceRoot":"","sources":["../../src/utils/clientFiltering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"clientFiltering.d.ts","sourceRoot":"","sources":["../../src/utils/clientFiltering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAkB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIpE;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,mBAAmB,CA8BtG;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,kBAAkB,GAC/B,mBAAmB,CAwBrB;AAED,KAAK,YAAY,GAAG,CAAC,OAAO,EAAE,mBAAmB,KAAK,mBAAmB,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,CA0BtE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,oBAAoB,EAAE,kBAAkB,GAAG,YAAY,CAsBrF;AAED;;;;GAIG;AACH,wBAAgB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY,CAgCpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa,GAAG,YAAY,CAoBvE"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { TagQueryParser } from './tagQueryParser.js';
|
|
2
|
+
import { normalizeTag } from './sanitization.js';
|
|
1
3
|
import logger from '../logger/logger.js';
|
|
2
4
|
/**
|
|
3
5
|
* Filters clients by tags
|
|
@@ -11,9 +13,13 @@ export function filterClientsByTags(clients, tags) {
|
|
|
11
13
|
}
|
|
12
14
|
const filteredClients = new Map();
|
|
13
15
|
let matchedClients = 0;
|
|
16
|
+
// Normalize the filter tags for consistent comparison
|
|
17
|
+
const normalizedFilterTags = tags.map((tag) => normalizeTag(tag));
|
|
14
18
|
for (const [name, clientInfo] of clients.entries()) {
|
|
15
19
|
const clientTags = clientInfo.transport.tags || [];
|
|
16
|
-
|
|
20
|
+
// Normalize client tags for comparison
|
|
21
|
+
const normalizedClientTags = clientTags.map((tag) => normalizeTag(tag));
|
|
22
|
+
const hasMatchingTags = normalizedClientTags.some((clientTag) => normalizedFilterTags.includes(clientTag));
|
|
17
23
|
if (hasMatchingTags) {
|
|
18
24
|
filteredClients.set(name, clientInfo);
|
|
19
25
|
matchedClients++;
|
|
@@ -108,7 +114,7 @@ export function byCapabilities(requiredCapabilities) {
|
|
|
108
114
|
};
|
|
109
115
|
}
|
|
110
116
|
/**
|
|
111
|
-
* Filters clients by tags
|
|
117
|
+
* Filters clients by tags using OR logic (backward compatible)
|
|
112
118
|
* @param tags Array of tags to filter by
|
|
113
119
|
* @returns Filtered record of client instances
|
|
114
120
|
*/
|
|
@@ -119,12 +125,18 @@ export function byTags(tags) {
|
|
|
119
125
|
logger.debug('byTags: No tags specified, returning all clients');
|
|
120
126
|
return clients;
|
|
121
127
|
}
|
|
128
|
+
// Normalize the filter tags for consistent comparison
|
|
129
|
+
const normalizedFilterTags = tags.map((tag) => normalizeTag(tag));
|
|
122
130
|
return Array.from(clients.entries()).reduce((filtered, [name, clientInfo]) => {
|
|
123
131
|
const clientTags = clientInfo.transport.tags || [];
|
|
124
|
-
|
|
132
|
+
// Normalize client tags for comparison
|
|
133
|
+
const normalizedClientTags = clientTags.map((tag) => normalizeTag(tag));
|
|
134
|
+
const hasMatchingTags = normalizedClientTags.some((clientTag) => normalizedFilterTags.includes(clientTag));
|
|
125
135
|
logger.debug(`byTags: Client ${name}`, {
|
|
126
136
|
clientTags,
|
|
137
|
+
normalizedClientTags,
|
|
127
138
|
requiredTags: tags,
|
|
139
|
+
normalizedRequiredTags: normalizedFilterTags,
|
|
128
140
|
hasMatchingTags,
|
|
129
141
|
});
|
|
130
142
|
if (hasMatchingTags) {
|
|
@@ -134,4 +146,27 @@ export function byTags(tags) {
|
|
|
134
146
|
}, new Map());
|
|
135
147
|
};
|
|
136
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Filters clients by advanced tag expression (new)
|
|
151
|
+
* @param expression Parsed tag expression to evaluate
|
|
152
|
+
* @returns Filtered record of client instances
|
|
153
|
+
*/
|
|
154
|
+
export function byTagExpression(expression) {
|
|
155
|
+
return (clients) => {
|
|
156
|
+
logger.debug(`byTagExpression: Filtering with expression: ${TagQueryParser.expressionToString(expression)}`);
|
|
157
|
+
return Array.from(clients.entries()).reduce((filtered, [name, clientInfo]) => {
|
|
158
|
+
const clientTags = clientInfo.transport.tags || [];
|
|
159
|
+
const matches = TagQueryParser.evaluate(expression, clientTags);
|
|
160
|
+
logger.debug(`byTagExpression: Client ${name}`, {
|
|
161
|
+
clientTags,
|
|
162
|
+
expression: TagQueryParser.expressionToString(expression),
|
|
163
|
+
matches,
|
|
164
|
+
});
|
|
165
|
+
if (matches) {
|
|
166
|
+
filtered.set(name, clientInfo);
|
|
167
|
+
}
|
|
168
|
+
return filtered;
|
|
169
|
+
}, new Map());
|
|
170
|
+
};
|
|
171
|
+
}
|
|
137
172
|
//# sourceMappingURL=clientFiltering.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientFiltering.js","sourceRoot":"","sources":["../../src/utils/clientFiltering.ts"],"names":[],"mappings":"AAEA,OAAO,MAAM,MAAM,qBAAqB,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA4B,EAAE,IAAe;IAC/E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,eAAe,GAAG,IAAI,GAAG,EAA8B,CAAC;IAC9D,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QACnD,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC;QACnD,MAAM,
|
|
1
|
+
{"version":3,"file":"clientFiltering.js","sourceRoot":"","sources":["../../src/utils/clientFiltering.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for environment processing
|
|
3
|
+
*/
|
|
4
|
+
export interface EnvProcessingConfig {
|
|
5
|
+
readonly inheritParentEnv?: boolean;
|
|
6
|
+
readonly envFilter?: string[];
|
|
7
|
+
readonly env?: Record<string, string> | string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Result of environment processing
|
|
11
|
+
*/
|
|
12
|
+
export interface ProcessedEnvironment {
|
|
13
|
+
readonly processedEnv: Record<string, string>;
|
|
14
|
+
readonly sources: {
|
|
15
|
+
readonly sdkDefaults: string[];
|
|
16
|
+
readonly inherited: string[];
|
|
17
|
+
readonly custom: string[];
|
|
18
|
+
readonly filtered: string[];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Converts environment array format to object format
|
|
23
|
+
* @param envArray Array in format ["KEY=value", "PATH=/usr/bin"]
|
|
24
|
+
* @returns Object in format {KEY: "value", PATH: "/usr/bin"}
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseEnvArray(envArray: string[]): Record<string, string>;
|
|
27
|
+
/**
|
|
28
|
+
* Substitutes environment variables in configuration values
|
|
29
|
+
* @param configValue Configuration value that may contain ${VAR} patterns
|
|
30
|
+
* @returns Value with environment variables substituted
|
|
31
|
+
*/
|
|
32
|
+
export declare function substituteEnvVars(configValue: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Recursively substitutes environment variables in a configuration object
|
|
35
|
+
* @param config Configuration object
|
|
36
|
+
* @returns Configuration object with environment variables substituted
|
|
37
|
+
*/
|
|
38
|
+
export declare function substituteEnvVarsInConfig(config: any): any;
|
|
39
|
+
/**
|
|
40
|
+
* Processes environment configuration for stdio transport
|
|
41
|
+
* @param config Environment processing configuration
|
|
42
|
+
* @returns Processed environment variables with metadata
|
|
43
|
+
*/
|
|
44
|
+
export declare function processEnvironment(config: EnvProcessingConfig): ProcessedEnvironment;
|
|
45
|
+
//# sourceMappingURL=envProcessor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envProcessor.d.ts","sourceRoot":"","sources":["../../src/utils/envProcessor.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;KAC7B,CAAC;CACH;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBxE;AAwGD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAS7D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAkB1D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,CAiEpF"}
|