@1mcp/agent 0.21.0 → 0.22.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.
- package/README.md +123 -148
- package/build/commands/app/backups.d.ts +13 -1
- package/build/commands/app/backups.d.ts.map +1 -1
- package/build/commands/app/backups.js +25 -0
- package/build/commands/app/backups.js.map +1 -1
- package/build/commands/app/consolidate.d.ts +21 -1
- package/build/commands/app/consolidate.d.ts.map +1 -1
- package/build/commands/app/consolidate.js +63 -0
- package/build/commands/app/consolidate.js.map +1 -1
- package/build/commands/app/discover.d.ts +11 -1
- package/build/commands/app/discover.d.ts.map +1 -1
- package/build/commands/app/discover.js +21 -0
- package/build/commands/app/discover.js.map +1 -1
- package/build/commands/app/index.d.ts.map +1 -1
- package/build/commands/app/index.js +15 -193
- package/build/commands/app/index.js.map +1 -1
- package/build/commands/app/list.d.ts +11 -1
- package/build/commands/app/list.d.ts.map +1 -1
- package/build/commands/app/list.js +21 -0
- package/build/commands/app/list.js.map +1 -1
- package/build/commands/app/restore.d.ts +21 -1
- package/build/commands/app/restore.d.ts.map +1 -1
- package/build/commands/app/restore.js +59 -0
- package/build/commands/app/restore.js.map +1 -1
- package/build/commands/app/status.d.ts +11 -1
- package/build/commands/app/status.d.ts.map +1 -1
- package/build/commands/app/status.js +21 -0
- package/build/commands/app/status.js.map +1 -1
- package/build/commands/mcp/add.d.ts +35 -2
- package/build/commands/mcp/add.d.ts.map +1 -1
- package/build/commands/mcp/add.js +86 -0
- package/build/commands/mcp/add.js.map +1 -1
- package/build/commands/mcp/enable.d.ts +15 -2
- package/build/commands/mcp/enable.d.ts.map +1 -1
- package/build/commands/mcp/enable.js +24 -0
- package/build/commands/mcp/enable.js.map +1 -1
- package/build/commands/mcp/index.d.ts.map +1 -1
- package/build/commands/mcp/index.js +18 -302
- package/build/commands/mcp/index.js.map +1 -1
- package/build/commands/mcp/list.d.ts +15 -2
- package/build/commands/mcp/list.d.ts.map +1 -1
- package/build/commands/mcp/list.js +35 -1
- package/build/commands/mcp/list.js.map +1 -1
- package/build/commands/mcp/remove.d.ts +11 -2
- package/build/commands/mcp/remove.d.ts.map +1 -1
- package/build/commands/mcp/remove.js +21 -0
- package/build/commands/mcp/remove.js.map +1 -1
- package/build/commands/mcp/status.d.ts +11 -2
- package/build/commands/mcp/status.d.ts.map +1 -1
- package/build/commands/mcp/status.js +23 -1
- package/build/commands/mcp/status.js.map +1 -1
- package/build/commands/mcp/tokens.d.ts +13 -3
- package/build/commands/mcp/tokens.d.ts.map +1 -1
- package/build/commands/mcp/tokens.js +31 -0
- package/build/commands/mcp/tokens.js.map +1 -1
- package/build/commands/mcp/update.d.ts +33 -2
- package/build/commands/mcp/update.d.ts.map +1 -1
- package/build/commands/mcp/update.js +72 -0
- package/build/commands/mcp/update.js.map +1 -1
- package/build/commands/preset/create.d.ts +26 -0
- package/build/commands/preset/create.d.ts.map +1 -0
- package/build/commands/preset/create.js +117 -0
- package/build/commands/preset/create.js.map +1 -0
- package/build/commands/preset/delete.d.ts +20 -0
- package/build/commands/preset/delete.d.ts.map +1 -0
- package/build/commands/preset/delete.js +46 -0
- package/build/commands/preset/delete.js.map +1 -0
- package/build/commands/preset/edit.d.ts +23 -0
- package/build/commands/preset/edit.d.ts.map +1 -0
- package/build/commands/preset/edit.js +68 -0
- package/build/commands/preset/edit.js.map +1 -0
- package/build/commands/preset/index.d.ts +6 -0
- package/build/commands/preset/index.d.ts.map +1 -0
- package/build/commands/preset/index.js +141 -0
- package/build/commands/preset/index.js.map +1 -0
- package/build/commands/preset/interactive.d.ts +12 -0
- package/build/commands/preset/interactive.d.ts.map +1 -0
- package/build/commands/preset/interactive.js +131 -0
- package/build/commands/preset/interactive.js.map +1 -0
- package/build/commands/preset/list.d.ts +16 -0
- package/build/commands/preset/list.d.ts.map +1 -0
- package/build/commands/preset/list.js +128 -0
- package/build/commands/preset/list.js.map +1 -0
- package/build/commands/preset/show.d.ts +19 -0
- package/build/commands/preset/show.d.ts.map +1 -0
- package/build/commands/preset/show.js +114 -0
- package/build/commands/preset/show.js.map +1 -0
- package/build/commands/preset/test.d.ts +20 -0
- package/build/commands/preset/test.d.ts.map +1 -0
- package/build/commands/preset/test.js +46 -0
- package/build/commands/preset/test.js.map +1 -0
- package/build/commands/preset/url.d.ts +20 -0
- package/build/commands/preset/url.d.ts.map +1 -0
- package/build/commands/preset/url.js +47 -0
- package/build/commands/preset/url.js.map +1 -0
- package/build/commands/serve/index.d.ts +106 -0
- package/build/commands/serve/index.d.ts.map +1 -0
- package/build/commands/serve/index.js +143 -0
- package/build/commands/serve/index.js.map +1 -0
- package/build/commands/serve/serve.d.ts +28 -0
- package/build/commands/serve/serve.d.ts.map +1 -0
- package/build/commands/serve/serve.js +213 -0
- package/build/commands/serve/serve.js.map +1 -0
- package/build/constants.d.ts +6 -1
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +13 -5
- package/build/constants.js.map +1 -1
- package/build/core/server/agentConfig.d.ts +6 -0
- package/build/core/server/agentConfig.d.ts.map +1 -1
- package/build/core/server/agentConfig.js +9 -1
- package/build/core/server/agentConfig.js.map +1 -1
- package/build/core/server/serverManager.d.ts.map +1 -1
- package/build/core/server/serverManager.js +41 -0
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/types/server.d.ts +4 -1
- 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 +16 -77
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +2 -2
- package/build/core/types/transport.js.map +1 -1
- package/build/globalOptions.d.ts +46 -0
- package/build/globalOptions.d.ts.map +1 -0
- package/build/globalOptions.js +37 -0
- package/build/globalOptions.js.map +1 -0
- package/build/handlers/requestHandlers.d.ts.map +1 -1
- package/build/handlers/requestHandlers.js +23 -1
- package/build/handlers/requestHandlers.js.map +1 -1
- package/build/index.js +58 -347
- package/build/index.js.map +1 -1
- package/build/logger/logger.d.ts.map +1 -1
- package/build/logger/logger.js +4 -2
- package/build/logger/logger.js.map +1 -1
- package/build/logger/mcpLoggingEnhancer.d.ts.map +1 -1
- package/build/logger/mcpLoggingEnhancer.js +10 -6
- package/build/logger/mcpLoggingEnhancer.js.map +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +26 -0
- package/build/server.js.map +1 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +10 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
- package/build/transport/http/middlewares/scopeAuthMiddleware.js +12 -0
- package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.d.ts +7 -3
- package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.js +128 -6
- package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
- package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/sseRoutes.js +5 -1
- 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 +5 -1
- package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
- package/build/transport/transportFactory.js +1 -1
- package/build/transport/transportFactory.js.map +1 -1
- package/build/utils/configureGlobalLogger.d.ts +12 -0
- package/build/utils/configureGlobalLogger.d.ts.map +1 -0
- package/build/utils/configureGlobalLogger.js +18 -0
- package/build/utils/configureGlobalLogger.js.map +1 -0
- package/build/utils/interactiveSelector.d.ts +88 -0
- package/build/utils/interactiveSelector.d.ts.map +1 -0
- package/build/utils/interactiveSelector.js +616 -0
- package/build/utils/interactiveSelector.js.map +1 -0
- package/build/utils/presetErrorHandler.d.ts +62 -0
- package/build/utils/presetErrorHandler.d.ts.map +1 -0
- package/build/utils/presetErrorHandler.js +159 -0
- package/build/utils/presetErrorHandler.js.map +1 -0
- package/build/utils/presetManager.d.ts +114 -0
- package/build/utils/presetManager.d.ts.map +1 -0
- package/build/utils/presetManager.js +565 -0
- package/build/utils/presetManager.js.map +1 -0
- package/build/utils/presetNotificationService.d.ts +62 -0
- package/build/utils/presetNotificationService.d.ts.map +1 -0
- package/build/utils/presetNotificationService.js +214 -0
- package/build/utils/presetNotificationService.js.map +1 -0
- package/build/utils/presetServerChangeDetector.d.ts +50 -0
- package/build/utils/presetServerChangeDetector.d.ts.map +1 -0
- package/build/utils/presetServerChangeDetector.js +100 -0
- package/build/utils/presetServerChangeDetector.js.map +1 -0
- package/build/utils/presetTypes.d.ts +52 -0
- package/build/utils/presetTypes.d.ts.map +1 -0
- package/build/utils/presetTypes.js +5 -0
- package/build/utils/presetTypes.js.map +1 -0
- package/build/utils/tagQueryEvaluator.d.ts +68 -0
- package/build/utils/tagQueryEvaluator.d.ts.map +1 -0
- package/build/utils/tagQueryEvaluator.js +292 -0
- package/build/utils/tagQueryEvaluator.js.map +1 -0
- package/build/utils/tagQueryParser.d.ts +11 -0
- package/build/utils/tagQueryParser.d.ts.map +1 -1
- package/build/utils/tagQueryParser.js +46 -0
- package/build/utils/tagQueryParser.js.map +1 -1
- package/build/utils/urlGenerator.d.ts +68 -0
- package/build/utils/urlGenerator.d.ts.map +1 -0
- package/build/utils/urlGenerator.js +208 -0
- package/build/utils/urlGenerator.js.map +1 -0
- package/package.json +21 -17
|
@@ -0,0 +1,616 @@
|
|
|
1
|
+
import prompts from 'prompts';
|
|
2
|
+
import boxen from 'boxen';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { McpConfigManager } from '../config/mcpConfigManager.js';
|
|
5
|
+
import { TagQueryEvaluator } from './tagQueryEvaluator.js';
|
|
6
|
+
import logger from '../logger/logger.js';
|
|
7
|
+
/**
|
|
8
|
+
* Interactive CLI utility for server selection with arrow key navigation
|
|
9
|
+
*/
|
|
10
|
+
export class InteractiveSelector {
|
|
11
|
+
mcpConfig;
|
|
12
|
+
constructor() {
|
|
13
|
+
this.mcpConfig = McpConfigManager.getInstance();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Interactive tag-based selection with strategy configuration and back navigation
|
|
17
|
+
*/
|
|
18
|
+
async selectServers(existingConfig, configPath) {
|
|
19
|
+
// Display welcome message with boxen
|
|
20
|
+
let welcomeContent = chalk.magenta.bold('🚀 MCP Preset Configuration\n\n') + chalk.yellow('Configure your preset selection strategy:');
|
|
21
|
+
if (configPath) {
|
|
22
|
+
welcomeContent += '\n\n' + chalk.gray(`📁 Config: ${configPath}`);
|
|
23
|
+
}
|
|
24
|
+
const welcomeMessage = boxen(welcomeContent, {
|
|
25
|
+
padding: 1,
|
|
26
|
+
margin: 1,
|
|
27
|
+
borderStyle: 'double',
|
|
28
|
+
borderColor: 'cyan',
|
|
29
|
+
title: 'Preset Builder',
|
|
30
|
+
titleAlignment: 'center',
|
|
31
|
+
});
|
|
32
|
+
console.log(welcomeMessage);
|
|
33
|
+
try {
|
|
34
|
+
// Get available servers and collect all tags
|
|
35
|
+
const servers = this.mcpConfig.getTransportConfig();
|
|
36
|
+
if (Object.keys(servers).length === 0) {
|
|
37
|
+
console.log(boxen(chalk.red.bold('⚠️ No MCP servers found in configuration'), {
|
|
38
|
+
padding: 1,
|
|
39
|
+
borderStyle: 'round',
|
|
40
|
+
borderColor: 'red',
|
|
41
|
+
}));
|
|
42
|
+
return {
|
|
43
|
+
strategy: 'or',
|
|
44
|
+
tagQuery: {},
|
|
45
|
+
cancelled: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Collect all available tags from all servers
|
|
49
|
+
const allTags = new Set();
|
|
50
|
+
for (const serverConfig of Object.values(servers)) {
|
|
51
|
+
if (serverConfig.tags) {
|
|
52
|
+
serverConfig.tags.forEach((tag) => allTags.add(tag));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const availableTags = Array.from(allTags).sort();
|
|
56
|
+
if (availableTags.length === 0) {
|
|
57
|
+
console.log(boxen(chalk.red.bold('⚠️ No tags found in server configuration'), {
|
|
58
|
+
padding: 1,
|
|
59
|
+
borderStyle: 'round',
|
|
60
|
+
borderColor: 'red',
|
|
61
|
+
}));
|
|
62
|
+
return {
|
|
63
|
+
strategy: 'or',
|
|
64
|
+
tagQuery: {},
|
|
65
|
+
cancelled: true,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Main interaction loop with back navigation support
|
|
69
|
+
let strategy;
|
|
70
|
+
let tagQuery = {};
|
|
71
|
+
let completed = false;
|
|
72
|
+
while (!completed) {
|
|
73
|
+
// Step 1: Strategy selection
|
|
74
|
+
const strategyChoices = [
|
|
75
|
+
{
|
|
76
|
+
title: 'Match ANY selected tags (OR logic)',
|
|
77
|
+
description: 'Servers that have ANY of the selected tags',
|
|
78
|
+
value: 'or',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
title: 'Match ALL selected tags (AND logic)',
|
|
82
|
+
description: 'Servers that have ALL of the selected tags',
|
|
83
|
+
value: 'and',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
title: 'Custom JSON query',
|
|
87
|
+
description: 'Advanced JSON-based query for complex filtering',
|
|
88
|
+
value: 'advanced',
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
const strategySelection = await prompts({
|
|
92
|
+
type: 'select',
|
|
93
|
+
name: 'strategy',
|
|
94
|
+
message: 'Select filtering strategy:',
|
|
95
|
+
choices: strategyChoices,
|
|
96
|
+
initial: existingConfig?.strategy === 'and' ? 1 : existingConfig?.strategy === 'advanced' ? 2 : 0,
|
|
97
|
+
});
|
|
98
|
+
if (strategySelection.strategy === undefined) {
|
|
99
|
+
return {
|
|
100
|
+
strategy: 'or',
|
|
101
|
+
tagQuery: {},
|
|
102
|
+
cancelled: true,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
strategy = strategySelection.strategy;
|
|
106
|
+
// Step 2: Create query based on strategy
|
|
107
|
+
if (strategy === 'advanced') {
|
|
108
|
+
// Custom JSON query input
|
|
109
|
+
console.log(boxen(chalk.magenta.bold('📝 Custom Query Input'), {
|
|
110
|
+
padding: 1,
|
|
111
|
+
borderStyle: 'round',
|
|
112
|
+
borderColor: 'magenta',
|
|
113
|
+
}));
|
|
114
|
+
const queryInput = await prompts({
|
|
115
|
+
type: 'text',
|
|
116
|
+
name: 'query',
|
|
117
|
+
message: 'Enter JSON query (e.g., {"tag": "web"}, {"$or": [{"tag": "web"}, {"tag": "api"}]}):',
|
|
118
|
+
initial: existingConfig?.tagQuery ? JSON.stringify(existingConfig.tagQuery, null, 2) : '{"tag": ""}',
|
|
119
|
+
validate: (value) => {
|
|
120
|
+
if (!value.trim()) {
|
|
121
|
+
return 'Query cannot be empty';
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
const parsed = JSON.parse(value.trim());
|
|
125
|
+
const validation = TagQueryEvaluator.validateQuery(parsed);
|
|
126
|
+
if (!validation.isValid) {
|
|
127
|
+
return `Invalid query: ${validation.errors.join(', ')}`;
|
|
128
|
+
}
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return `Invalid JSON: ${error instanceof Error ? error.message : 'Unknown error'}`;
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
if (queryInput.query === undefined) {
|
|
137
|
+
return {
|
|
138
|
+
strategy: 'or',
|
|
139
|
+
tagQuery: {},
|
|
140
|
+
cancelled: true,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
tagQuery = JSON.parse(queryInput.query.trim());
|
|
144
|
+
completed = true;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// Step 2: Three-state tag selection with arrow key navigation
|
|
148
|
+
if (strategy) {
|
|
149
|
+
const tagSelectionResult = await this.selectTagsInteractive(availableTags, servers, strategy, existingConfig?.tagQuery);
|
|
150
|
+
if (tagSelectionResult.goBack) {
|
|
151
|
+
// User wants to go back to strategy selection
|
|
152
|
+
strategy = undefined;
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (tagSelectionResult.cancelled) {
|
|
156
|
+
return {
|
|
157
|
+
strategy: 'or',
|
|
158
|
+
tagQuery: {},
|
|
159
|
+
cancelled: true,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
tagQuery = tagSelectionResult.tagQuery;
|
|
163
|
+
completed = true;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Step 3: Preview and confirmation
|
|
167
|
+
if (completed) {
|
|
168
|
+
const queryString = TagQueryEvaluator.queryToString(tagQuery);
|
|
169
|
+
// Show matching servers
|
|
170
|
+
const matchingServers = Object.entries(servers)
|
|
171
|
+
.filter(([, serverConfig]) => {
|
|
172
|
+
const serverTags = serverConfig.tags || [];
|
|
173
|
+
return TagQueryEvaluator.evaluate(tagQuery, serverTags);
|
|
174
|
+
})
|
|
175
|
+
.map(([serverName]) => serverName);
|
|
176
|
+
const serverList = matchingServers.slice(0, 3).join(', ');
|
|
177
|
+
const moreText = matchingServers.length > 3 ? `... and ${matchingServers.length - 3} more` : '';
|
|
178
|
+
const previewContent = chalk.yellow.bold('Preview query: ') +
|
|
179
|
+
chalk.green(queryString) +
|
|
180
|
+
'\n\n' +
|
|
181
|
+
chalk.yellow.bold(`Matching servers (${matchingServers.length}): `) +
|
|
182
|
+
chalk.green(serverList) +
|
|
183
|
+
(moreText ? '\n' + chalk.gray(moreText) : '');
|
|
184
|
+
console.log(boxen(previewContent, {
|
|
185
|
+
padding: 1,
|
|
186
|
+
borderStyle: 'round',
|
|
187
|
+
borderColor: 'green',
|
|
188
|
+
title: '✅ Query Preview',
|
|
189
|
+
titleAlignment: 'center',
|
|
190
|
+
}));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
strategy: strategy,
|
|
195
|
+
tagQuery,
|
|
196
|
+
cancelled: false,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
logger.error('Interactive selection failed', { error });
|
|
201
|
+
console.log(boxen(chalk.red.bold('❌ Selection failed - see logs for details'), {
|
|
202
|
+
padding: 1,
|
|
203
|
+
borderStyle: 'round',
|
|
204
|
+
borderColor: 'red',
|
|
205
|
+
}));
|
|
206
|
+
return {
|
|
207
|
+
strategy: 'or',
|
|
208
|
+
tagQuery: {},
|
|
209
|
+
cancelled: true,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Confirm save operation with preset name
|
|
215
|
+
*/
|
|
216
|
+
async confirmSave(presetName) {
|
|
217
|
+
if (presetName) {
|
|
218
|
+
// Pre-specified name, just confirm
|
|
219
|
+
const confirm = await prompts({
|
|
220
|
+
type: 'confirm',
|
|
221
|
+
name: 'save',
|
|
222
|
+
message: `Save preset as '${presetName}'?`,
|
|
223
|
+
});
|
|
224
|
+
return {
|
|
225
|
+
name: presetName,
|
|
226
|
+
save: confirm.save || false,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// Get preset name and optional description
|
|
230
|
+
const nameInput = await prompts({
|
|
231
|
+
type: 'text',
|
|
232
|
+
name: 'name',
|
|
233
|
+
message: 'Enter preset name:',
|
|
234
|
+
validate: (value) => {
|
|
235
|
+
if (!value.trim()) {
|
|
236
|
+
return 'Preset name is required';
|
|
237
|
+
}
|
|
238
|
+
if (value.trim().length > 50) {
|
|
239
|
+
return 'Preset name must be 50 characters or less';
|
|
240
|
+
}
|
|
241
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(value.trim())) {
|
|
242
|
+
return 'Preset name can only contain letters, numbers, hyphens, and underscores';
|
|
243
|
+
}
|
|
244
|
+
return true;
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
if (!nameInput.name) {
|
|
248
|
+
return { name: '', save: false };
|
|
249
|
+
}
|
|
250
|
+
const descriptionInput = await prompts({
|
|
251
|
+
type: 'text',
|
|
252
|
+
name: 'description',
|
|
253
|
+
message: 'Enter optional description:',
|
|
254
|
+
});
|
|
255
|
+
return {
|
|
256
|
+
name: nameInput.name.trim(),
|
|
257
|
+
description: descriptionInput.description?.trim() || undefined,
|
|
258
|
+
save: true,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Display server configuration for validation
|
|
263
|
+
*/
|
|
264
|
+
displayServerConfig(serverName) {
|
|
265
|
+
const servers = this.mcpConfig.getTransportConfig();
|
|
266
|
+
const config = servers[serverName];
|
|
267
|
+
if (!config) {
|
|
268
|
+
console.log(`Server '${serverName}' not found`);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
const tags = config.tags || [];
|
|
272
|
+
console.log(`\n📋 Server: ${serverName}`);
|
|
273
|
+
console.log(` Tags: ${tags.length > 0 ? tags.join(', ') : 'none'}`);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Validate preset name format
|
|
277
|
+
*/
|
|
278
|
+
validatePresetName(name) {
|
|
279
|
+
return /^[a-zA-Z0-9_-]+$/.test(name.trim());
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Simple confirmation prompt
|
|
283
|
+
*/
|
|
284
|
+
async confirm(message) {
|
|
285
|
+
const result = await prompts({
|
|
286
|
+
type: 'confirm',
|
|
287
|
+
name: 'confirmed',
|
|
288
|
+
message,
|
|
289
|
+
});
|
|
290
|
+
return result.confirmed || false;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get a numeric choice from user within a range
|
|
294
|
+
*/
|
|
295
|
+
async getChoice(message, min, max) {
|
|
296
|
+
const result = await prompts({
|
|
297
|
+
type: 'number',
|
|
298
|
+
name: 'choice',
|
|
299
|
+
message,
|
|
300
|
+
min,
|
|
301
|
+
max,
|
|
302
|
+
validate: (value) => {
|
|
303
|
+
if (value < min || value > max) {
|
|
304
|
+
return `Please enter a number between ${min} and ${max}`;
|
|
305
|
+
}
|
|
306
|
+
return true;
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
return result.choice || min;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Show error message
|
|
313
|
+
*/
|
|
314
|
+
showError(message) {
|
|
315
|
+
console.error(`❌ ${message}`);
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Show URL result
|
|
319
|
+
*/
|
|
320
|
+
showUrl(name, url) {
|
|
321
|
+
console.log(`\n🔗 Preset URL for '${name}':`);
|
|
322
|
+
console.log(` ${url}\n`);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Show save success message
|
|
326
|
+
*/
|
|
327
|
+
showSaveSuccess(name, url) {
|
|
328
|
+
console.log(`\n✅ Preset '${name}' saved successfully!`);
|
|
329
|
+
console.log(`🔗 URL: ${url}\n`);
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Test preset and show results
|
|
333
|
+
*/
|
|
334
|
+
async testPreset(name, testResult) {
|
|
335
|
+
console.log(`\n🔍 Testing preset '${name}':`);
|
|
336
|
+
console.log(` Matching servers: ${testResult.servers.join(', ') || 'none'}`);
|
|
337
|
+
console.log(` Available tags: ${testResult.tags.join(', ') || 'none'}\n`);
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Interactive three-state tag selection with boxen UI and custom keyboard controls
|
|
341
|
+
*/
|
|
342
|
+
async selectTagsInteractive(availableTags, servers, strategy, existingQuery) {
|
|
343
|
+
// Build tag-to-servers mapping
|
|
344
|
+
const tagServerMap = TagQueryEvaluator.buildTagServerMap(servers);
|
|
345
|
+
// Initialize tag selections with server info and restore from existing query
|
|
346
|
+
const tagSelections = availableTags.map((tag) => ({
|
|
347
|
+
tag,
|
|
348
|
+
state: this.getInitialTagStateFromQuery(tag, existingQuery, strategy),
|
|
349
|
+
servers: tagServerMap.get(tag) || [],
|
|
350
|
+
}));
|
|
351
|
+
let currentIndex = 0;
|
|
352
|
+
while (true) {
|
|
353
|
+
// Clear screen
|
|
354
|
+
console.clear();
|
|
355
|
+
// Show main tag selection interface
|
|
356
|
+
await this.showTagSelection(tagSelections, currentIndex, servers, strategy);
|
|
357
|
+
// Get user input
|
|
358
|
+
const action = await this.getKeyInput();
|
|
359
|
+
// Main tag selection view
|
|
360
|
+
switch (action) {
|
|
361
|
+
case 'up':
|
|
362
|
+
currentIndex = Math.max(0, currentIndex - 1);
|
|
363
|
+
break;
|
|
364
|
+
case 'down':
|
|
365
|
+
currentIndex = Math.min(tagSelections.length - 1, currentIndex + 1);
|
|
366
|
+
break;
|
|
367
|
+
case 'space':
|
|
368
|
+
if (currentIndex < tagSelections.length) {
|
|
369
|
+
tagSelections[currentIndex].state = TagQueryEvaluator.cycleTagState(tagSelections[currentIndex].state);
|
|
370
|
+
}
|
|
371
|
+
break;
|
|
372
|
+
case 'right': {
|
|
373
|
+
// Show server details for current tag
|
|
374
|
+
if (currentIndex < tagSelections.length) {
|
|
375
|
+
await this.showTagServerDetails(tagSelections[currentIndex], servers);
|
|
376
|
+
}
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
case 'enter': {
|
|
380
|
+
// Build final query
|
|
381
|
+
const finalQuery = TagQueryEvaluator.buildQueryFromSelections(tagSelections, strategy);
|
|
382
|
+
return { tagQuery: finalQuery, goBack: false, cancelled: false };
|
|
383
|
+
}
|
|
384
|
+
case 'left':
|
|
385
|
+
return { tagQuery: {}, goBack: true, cancelled: false };
|
|
386
|
+
case 'escape':
|
|
387
|
+
return { tagQuery: {}, goBack: false, cancelled: true };
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Show main tag selection interface with boxen styling
|
|
393
|
+
*/
|
|
394
|
+
async showTagSelection(tagSelections, currentIndex, servers, strategy) {
|
|
395
|
+
// Header
|
|
396
|
+
const header = boxen(chalk.cyan.bold('🎯 Three-State Tag Selection\n\n') +
|
|
397
|
+
chalk.yellow(`Strategy: ${strategy === 'and' ? 'ALL' : 'ANY'} selected tags must match\n`) +
|
|
398
|
+
chalk.gray('Controls: ↑↓ Navigate Space Cycle states → Server details Enter Confirm ← Back Esc Cancel'), {
|
|
399
|
+
padding: 1,
|
|
400
|
+
borderStyle: 'double',
|
|
401
|
+
borderColor: 'cyan',
|
|
402
|
+
title: 'Tag Selection',
|
|
403
|
+
titleAlignment: 'center',
|
|
404
|
+
});
|
|
405
|
+
console.log(header);
|
|
406
|
+
// Tag list
|
|
407
|
+
const tagListContent = tagSelections
|
|
408
|
+
.map((selection, index) => {
|
|
409
|
+
const symbol = TagQueryEvaluator.getTagStateSymbol(selection.state);
|
|
410
|
+
const stateColor = this.getTagStateColor(selection.state);
|
|
411
|
+
const isCurrentIndex = index === currentIndex;
|
|
412
|
+
const cursor = isCurrentIndex ? chalk.yellow.bold('►') : ' ';
|
|
413
|
+
const tagHighlight = isCurrentIndex ? chalk.bgGray.white.bold : chalk.white;
|
|
414
|
+
// Count enabled and disabled servers for this tag
|
|
415
|
+
const enabledServers = selection.servers.filter((serverName) => servers[serverName]?.disabled !== true);
|
|
416
|
+
const disabledServers = selection.servers.filter((serverName) => servers[serverName]?.disabled === true);
|
|
417
|
+
let serverInfo = chalk.gray(`(${chalk.blue(enabledServers.length)} enabled`);
|
|
418
|
+
if (disabledServers.length > 0) {
|
|
419
|
+
serverInfo += chalk.gray(`, ${chalk.red(disabledServers.length)} disabled`);
|
|
420
|
+
}
|
|
421
|
+
serverInfo += chalk.gray(')');
|
|
422
|
+
return `${cursor} ${stateColor(symbol)} ${tagHighlight(selection.tag)} ${serverInfo}`;
|
|
423
|
+
})
|
|
424
|
+
.join('\n');
|
|
425
|
+
console.log(boxen(tagListContent, {
|
|
426
|
+
padding: 1,
|
|
427
|
+
borderStyle: 'round',
|
|
428
|
+
borderColor: 'blue',
|
|
429
|
+
}));
|
|
430
|
+
// Live preview
|
|
431
|
+
const matchingServers = TagQueryEvaluator.getMatchingServers(tagSelections, servers, strategy);
|
|
432
|
+
// Check for disabled servers in the matching set
|
|
433
|
+
const disabledServers = matchingServers.filter((serverName) => servers[serverName]?.disabled === true);
|
|
434
|
+
const enabledServers = matchingServers.filter((serverName) => servers[serverName]?.disabled !== true);
|
|
435
|
+
const matchColor = enabledServers.length === 0 ? chalk.red : enabledServers.length < 3 ? chalk.yellow : chalk.green;
|
|
436
|
+
const matchIcon = enabledServers.length === 0 ? '❌' : enabledServers.length < 3 ? '⚠️' : '✅';
|
|
437
|
+
let previewContent = chalk.blue.bold('Live Preview:\n') +
|
|
438
|
+
`${matchIcon} ${matchColor.bold(`${enabledServers.length} enabled servers`)} match your selection\n` +
|
|
439
|
+
(enabledServers.length > 0
|
|
440
|
+
? chalk.green(`Servers: ${TagQueryEvaluator.formatServerList(enabledServers, 3)}`)
|
|
441
|
+
: chalk.gray('No enabled servers match'));
|
|
442
|
+
// Add warning for disabled servers if any
|
|
443
|
+
if (disabledServers.length > 0) {
|
|
444
|
+
previewContent +=
|
|
445
|
+
'\n' +
|
|
446
|
+
chalk.red.bold(`⚠️ ${disabledServers.length} disabled servers also match: `) +
|
|
447
|
+
chalk.red(TagQueryEvaluator.formatServerList(disabledServers, 3));
|
|
448
|
+
}
|
|
449
|
+
console.log(boxen(previewContent, {
|
|
450
|
+
padding: 1,
|
|
451
|
+
borderStyle: 'round',
|
|
452
|
+
borderColor: disabledServers.length > 0 ? 'yellow' : 'green',
|
|
453
|
+
title: '⚡ Live Preview',
|
|
454
|
+
titleAlignment: 'center',
|
|
455
|
+
}));
|
|
456
|
+
// State legend
|
|
457
|
+
const legend = chalk.gray('○ ') +
|
|
458
|
+
chalk.dim('Empty (ignored)') +
|
|
459
|
+
' ' +
|
|
460
|
+
chalk.green('✓ ') +
|
|
461
|
+
chalk.green('Selected (include)') +
|
|
462
|
+
' ' +
|
|
463
|
+
chalk.red('✗ ') +
|
|
464
|
+
chalk.red('Not selected (exclude)');
|
|
465
|
+
console.log(boxen(legend, {
|
|
466
|
+
padding: 1,
|
|
467
|
+
borderStyle: 'single',
|
|
468
|
+
borderColor: 'gray',
|
|
469
|
+
}));
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Get single key input with proper handling for arrow keys
|
|
473
|
+
*/
|
|
474
|
+
async getKeyInput() {
|
|
475
|
+
return new Promise((resolve) => {
|
|
476
|
+
const stdin = process.stdin;
|
|
477
|
+
stdin.setRawMode(true);
|
|
478
|
+
stdin.resume();
|
|
479
|
+
stdin.setEncoding('utf8');
|
|
480
|
+
const onKeypress = (key) => {
|
|
481
|
+
stdin.setRawMode(false);
|
|
482
|
+
stdin.pause();
|
|
483
|
+
stdin.removeListener('data', onKeypress);
|
|
484
|
+
// Handle escape sequences for arrow keys
|
|
485
|
+
if (key === '\u001b[A')
|
|
486
|
+
resolve('up');
|
|
487
|
+
else if (key === '\u001b[B')
|
|
488
|
+
resolve('down');
|
|
489
|
+
else if (key === '\u001b[D')
|
|
490
|
+
resolve('left');
|
|
491
|
+
else if (key === '\u001b[C')
|
|
492
|
+
resolve('right');
|
|
493
|
+
else if (key === ' ')
|
|
494
|
+
resolve('space');
|
|
495
|
+
else if (key === '\r' || key === '\n')
|
|
496
|
+
resolve('enter');
|
|
497
|
+
else if (key === '\u001b' || key === '\u0003')
|
|
498
|
+
resolve('escape'); // ESC or Ctrl+C
|
|
499
|
+
else
|
|
500
|
+
resolve('unknown');
|
|
501
|
+
};
|
|
502
|
+
stdin.on('data', onKeypress);
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Get color for tag state
|
|
507
|
+
*/
|
|
508
|
+
getTagStateColor(state) {
|
|
509
|
+
switch (state) {
|
|
510
|
+
case 'empty':
|
|
511
|
+
return chalk.gray;
|
|
512
|
+
case 'selected':
|
|
513
|
+
return chalk.green;
|
|
514
|
+
case 'not-selected':
|
|
515
|
+
return chalk.red;
|
|
516
|
+
default:
|
|
517
|
+
return chalk.reset;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* Show detailed information about servers for a specific tag
|
|
522
|
+
*/
|
|
523
|
+
async showTagServerDetails(tagSelection, servers) {
|
|
524
|
+
console.clear();
|
|
525
|
+
const enabledServers = tagSelection.servers.filter((serverName) => servers[serverName]?.disabled !== true);
|
|
526
|
+
const disabledServers = tagSelection.servers.filter((serverName) => servers[serverName]?.disabled === true);
|
|
527
|
+
let content = chalk.blue.bold(`📋 Tag: ${tagSelection.tag}\n\n`);
|
|
528
|
+
if (enabledServers.length > 0) {
|
|
529
|
+
content += chalk.green.bold(`✅ Enabled Servers (${enabledServers.length}):\n`);
|
|
530
|
+
for (const serverName of enabledServers) {
|
|
531
|
+
const serverConfig = servers[serverName];
|
|
532
|
+
const allTags = (serverConfig.tags || []).join(', ');
|
|
533
|
+
content += chalk.green(` • ${serverName}`) + chalk.gray(` - tags: ${allTags || 'none'}\n`);
|
|
534
|
+
}
|
|
535
|
+
content += '\n';
|
|
536
|
+
}
|
|
537
|
+
if (disabledServers.length > 0) {
|
|
538
|
+
content += chalk.red.bold(`❌ Disabled Servers (${disabledServers.length}):\n`);
|
|
539
|
+
for (const serverName of disabledServers) {
|
|
540
|
+
const serverConfig = servers[serverName];
|
|
541
|
+
const allTags = (serverConfig.tags || []).join(', ');
|
|
542
|
+
content += chalk.red(` • ${serverName}`) + chalk.gray(` - tags: ${allTags || 'none'}\n`);
|
|
543
|
+
}
|
|
544
|
+
content += '\n';
|
|
545
|
+
}
|
|
546
|
+
if (tagSelection.servers.length === 0) {
|
|
547
|
+
content += chalk.yellow('No servers have this tag.\n\n');
|
|
548
|
+
}
|
|
549
|
+
content += chalk.gray('Press any key to return to tag selection...');
|
|
550
|
+
console.log(boxen(content, {
|
|
551
|
+
padding: 1,
|
|
552
|
+
borderStyle: 'round',
|
|
553
|
+
borderColor: 'blue',
|
|
554
|
+
title: `🔍 Server Details`,
|
|
555
|
+
titleAlignment: 'center',
|
|
556
|
+
}));
|
|
557
|
+
// Wait for any key press
|
|
558
|
+
await this.getKeyInput();
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Determine initial tag state from existing query
|
|
562
|
+
*/
|
|
563
|
+
getInitialTagStateFromQuery(tag, existingQuery, _strategy) {
|
|
564
|
+
if (!existingQuery || typeof existingQuery !== 'object') {
|
|
565
|
+
return 'empty';
|
|
566
|
+
}
|
|
567
|
+
// Helper function to recursively check if a query matches a tag
|
|
568
|
+
const queryMatches = (query) => {
|
|
569
|
+
if (!query || typeof query !== 'object') {
|
|
570
|
+
return false;
|
|
571
|
+
}
|
|
572
|
+
// Direct tag match
|
|
573
|
+
if (query.tag === tag) {
|
|
574
|
+
return true;
|
|
575
|
+
}
|
|
576
|
+
// Check nested $or
|
|
577
|
+
if (query.$or && Array.isArray(query.$or)) {
|
|
578
|
+
return query.$or.some((subQuery) => queryMatches(subQuery));
|
|
579
|
+
}
|
|
580
|
+
// Check nested $and
|
|
581
|
+
if (query.$and && Array.isArray(query.$and)) {
|
|
582
|
+
return query.$and.some((subQuery) => queryMatches(subQuery));
|
|
583
|
+
}
|
|
584
|
+
// Check $in operator
|
|
585
|
+
if (query.$in && Array.isArray(query.$in)) {
|
|
586
|
+
return query.$in.includes(tag);
|
|
587
|
+
}
|
|
588
|
+
return false;
|
|
589
|
+
};
|
|
590
|
+
// Helper function to check for NOT conditions
|
|
591
|
+
const queryMatchesNot = (query) => {
|
|
592
|
+
if (!query || typeof query !== 'object') {
|
|
593
|
+
return false;
|
|
594
|
+
}
|
|
595
|
+
// Direct NOT match
|
|
596
|
+
if (query.$not) {
|
|
597
|
+
return queryMatches(query.$not);
|
|
598
|
+
}
|
|
599
|
+
// Check for NOT in nested structures
|
|
600
|
+
if (query.$and && Array.isArray(query.$and)) {
|
|
601
|
+
return query.$and.some((subQuery) => subQuery.$not && queryMatches(subQuery.$not));
|
|
602
|
+
}
|
|
603
|
+
return false;
|
|
604
|
+
};
|
|
605
|
+
// Check for NOT conditions first (they take precedence)
|
|
606
|
+
if (queryMatchesNot(existingQuery)) {
|
|
607
|
+
return 'not-selected';
|
|
608
|
+
}
|
|
609
|
+
// Check for positive matches
|
|
610
|
+
if (queryMatches(existingQuery)) {
|
|
611
|
+
return 'selected';
|
|
612
|
+
}
|
|
613
|
+
return 'empty';
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
//# sourceMappingURL=interactiveSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactiveSelector.js","sourceRoot":"","sources":["../../src/utils/interactiveSelector.ts"],"names":[],"mappings":"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"}
|