@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.
Files changed (196) hide show
  1. package/README.md +123 -148
  2. package/build/commands/app/backups.d.ts +13 -1
  3. package/build/commands/app/backups.d.ts.map +1 -1
  4. package/build/commands/app/backups.js +25 -0
  5. package/build/commands/app/backups.js.map +1 -1
  6. package/build/commands/app/consolidate.d.ts +21 -1
  7. package/build/commands/app/consolidate.d.ts.map +1 -1
  8. package/build/commands/app/consolidate.js +63 -0
  9. package/build/commands/app/consolidate.js.map +1 -1
  10. package/build/commands/app/discover.d.ts +11 -1
  11. package/build/commands/app/discover.d.ts.map +1 -1
  12. package/build/commands/app/discover.js +21 -0
  13. package/build/commands/app/discover.js.map +1 -1
  14. package/build/commands/app/index.d.ts.map +1 -1
  15. package/build/commands/app/index.js +15 -193
  16. package/build/commands/app/index.js.map +1 -1
  17. package/build/commands/app/list.d.ts +11 -1
  18. package/build/commands/app/list.d.ts.map +1 -1
  19. package/build/commands/app/list.js +21 -0
  20. package/build/commands/app/list.js.map +1 -1
  21. package/build/commands/app/restore.d.ts +21 -1
  22. package/build/commands/app/restore.d.ts.map +1 -1
  23. package/build/commands/app/restore.js +59 -0
  24. package/build/commands/app/restore.js.map +1 -1
  25. package/build/commands/app/status.d.ts +11 -1
  26. package/build/commands/app/status.d.ts.map +1 -1
  27. package/build/commands/app/status.js +21 -0
  28. package/build/commands/app/status.js.map +1 -1
  29. package/build/commands/mcp/add.d.ts +35 -2
  30. package/build/commands/mcp/add.d.ts.map +1 -1
  31. package/build/commands/mcp/add.js +86 -0
  32. package/build/commands/mcp/add.js.map +1 -1
  33. package/build/commands/mcp/enable.d.ts +15 -2
  34. package/build/commands/mcp/enable.d.ts.map +1 -1
  35. package/build/commands/mcp/enable.js +24 -0
  36. package/build/commands/mcp/enable.js.map +1 -1
  37. package/build/commands/mcp/index.d.ts.map +1 -1
  38. package/build/commands/mcp/index.js +18 -302
  39. package/build/commands/mcp/index.js.map +1 -1
  40. package/build/commands/mcp/list.d.ts +15 -2
  41. package/build/commands/mcp/list.d.ts.map +1 -1
  42. package/build/commands/mcp/list.js +35 -1
  43. package/build/commands/mcp/list.js.map +1 -1
  44. package/build/commands/mcp/remove.d.ts +11 -2
  45. package/build/commands/mcp/remove.d.ts.map +1 -1
  46. package/build/commands/mcp/remove.js +21 -0
  47. package/build/commands/mcp/remove.js.map +1 -1
  48. package/build/commands/mcp/status.d.ts +11 -2
  49. package/build/commands/mcp/status.d.ts.map +1 -1
  50. package/build/commands/mcp/status.js +23 -1
  51. package/build/commands/mcp/status.js.map +1 -1
  52. package/build/commands/mcp/tokens.d.ts +13 -3
  53. package/build/commands/mcp/tokens.d.ts.map +1 -1
  54. package/build/commands/mcp/tokens.js +31 -0
  55. package/build/commands/mcp/tokens.js.map +1 -1
  56. package/build/commands/mcp/update.d.ts +33 -2
  57. package/build/commands/mcp/update.d.ts.map +1 -1
  58. package/build/commands/mcp/update.js +72 -0
  59. package/build/commands/mcp/update.js.map +1 -1
  60. package/build/commands/preset/create.d.ts +26 -0
  61. package/build/commands/preset/create.d.ts.map +1 -0
  62. package/build/commands/preset/create.js +117 -0
  63. package/build/commands/preset/create.js.map +1 -0
  64. package/build/commands/preset/delete.d.ts +20 -0
  65. package/build/commands/preset/delete.d.ts.map +1 -0
  66. package/build/commands/preset/delete.js +46 -0
  67. package/build/commands/preset/delete.js.map +1 -0
  68. package/build/commands/preset/edit.d.ts +23 -0
  69. package/build/commands/preset/edit.d.ts.map +1 -0
  70. package/build/commands/preset/edit.js +68 -0
  71. package/build/commands/preset/edit.js.map +1 -0
  72. package/build/commands/preset/index.d.ts +6 -0
  73. package/build/commands/preset/index.d.ts.map +1 -0
  74. package/build/commands/preset/index.js +141 -0
  75. package/build/commands/preset/index.js.map +1 -0
  76. package/build/commands/preset/interactive.d.ts +12 -0
  77. package/build/commands/preset/interactive.d.ts.map +1 -0
  78. package/build/commands/preset/interactive.js +131 -0
  79. package/build/commands/preset/interactive.js.map +1 -0
  80. package/build/commands/preset/list.d.ts +16 -0
  81. package/build/commands/preset/list.d.ts.map +1 -0
  82. package/build/commands/preset/list.js +128 -0
  83. package/build/commands/preset/list.js.map +1 -0
  84. package/build/commands/preset/show.d.ts +19 -0
  85. package/build/commands/preset/show.d.ts.map +1 -0
  86. package/build/commands/preset/show.js +114 -0
  87. package/build/commands/preset/show.js.map +1 -0
  88. package/build/commands/preset/test.d.ts +20 -0
  89. package/build/commands/preset/test.d.ts.map +1 -0
  90. package/build/commands/preset/test.js +46 -0
  91. package/build/commands/preset/test.js.map +1 -0
  92. package/build/commands/preset/url.d.ts +20 -0
  93. package/build/commands/preset/url.d.ts.map +1 -0
  94. package/build/commands/preset/url.js +47 -0
  95. package/build/commands/preset/url.js.map +1 -0
  96. package/build/commands/serve/index.d.ts +106 -0
  97. package/build/commands/serve/index.d.ts.map +1 -0
  98. package/build/commands/serve/index.js +143 -0
  99. package/build/commands/serve/index.js.map +1 -0
  100. package/build/commands/serve/serve.d.ts +28 -0
  101. package/build/commands/serve/serve.d.ts.map +1 -0
  102. package/build/commands/serve/serve.js +213 -0
  103. package/build/commands/serve/serve.js.map +1 -0
  104. package/build/constants.d.ts +6 -1
  105. package/build/constants.d.ts.map +1 -1
  106. package/build/constants.js +13 -5
  107. package/build/constants.js.map +1 -1
  108. package/build/core/server/agentConfig.d.ts +6 -0
  109. package/build/core/server/agentConfig.d.ts.map +1 -1
  110. package/build/core/server/agentConfig.js +9 -1
  111. package/build/core/server/agentConfig.js.map +1 -1
  112. package/build/core/server/serverManager.d.ts.map +1 -1
  113. package/build/core/server/serverManager.js +41 -0
  114. package/build/core/server/serverManager.js.map +1 -1
  115. package/build/core/types/server.d.ts +4 -1
  116. package/build/core/types/server.d.ts.map +1 -1
  117. package/build/core/types/server.js.map +1 -1
  118. package/build/core/types/transport.d.ts +16 -77
  119. package/build/core/types/transport.d.ts.map +1 -1
  120. package/build/core/types/transport.js +2 -2
  121. package/build/core/types/transport.js.map +1 -1
  122. package/build/globalOptions.d.ts +46 -0
  123. package/build/globalOptions.d.ts.map +1 -0
  124. package/build/globalOptions.js +37 -0
  125. package/build/globalOptions.js.map +1 -0
  126. package/build/handlers/requestHandlers.d.ts.map +1 -1
  127. package/build/handlers/requestHandlers.js +23 -1
  128. package/build/handlers/requestHandlers.js.map +1 -1
  129. package/build/index.js +58 -347
  130. package/build/index.js.map +1 -1
  131. package/build/logger/logger.d.ts.map +1 -1
  132. package/build/logger/logger.js +4 -2
  133. package/build/logger/logger.js.map +1 -1
  134. package/build/logger/mcpLoggingEnhancer.d.ts.map +1 -1
  135. package/build/logger/mcpLoggingEnhancer.js +10 -6
  136. package/build/logger/mcpLoggingEnhancer.js.map +1 -1
  137. package/build/server.d.ts.map +1 -1
  138. package/build/server.js +26 -0
  139. package/build/server.js.map +1 -1
  140. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +10 -1
  141. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
  142. package/build/transport/http/middlewares/scopeAuthMiddleware.js +12 -0
  143. package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
  144. package/build/transport/http/middlewares/tagsExtractor.d.ts +7 -3
  145. package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
  146. package/build/transport/http/middlewares/tagsExtractor.js +128 -6
  147. package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
  148. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  149. package/build/transport/http/routes/sseRoutes.js +5 -1
  150. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  151. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  152. package/build/transport/http/routes/streamableHttpRoutes.js +5 -1
  153. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  154. package/build/transport/transportFactory.js +1 -1
  155. package/build/transport/transportFactory.js.map +1 -1
  156. package/build/utils/configureGlobalLogger.d.ts +12 -0
  157. package/build/utils/configureGlobalLogger.d.ts.map +1 -0
  158. package/build/utils/configureGlobalLogger.js +18 -0
  159. package/build/utils/configureGlobalLogger.js.map +1 -0
  160. package/build/utils/interactiveSelector.d.ts +88 -0
  161. package/build/utils/interactiveSelector.d.ts.map +1 -0
  162. package/build/utils/interactiveSelector.js +616 -0
  163. package/build/utils/interactiveSelector.js.map +1 -0
  164. package/build/utils/presetErrorHandler.d.ts +62 -0
  165. package/build/utils/presetErrorHandler.d.ts.map +1 -0
  166. package/build/utils/presetErrorHandler.js +159 -0
  167. package/build/utils/presetErrorHandler.js.map +1 -0
  168. package/build/utils/presetManager.d.ts +114 -0
  169. package/build/utils/presetManager.d.ts.map +1 -0
  170. package/build/utils/presetManager.js +565 -0
  171. package/build/utils/presetManager.js.map +1 -0
  172. package/build/utils/presetNotificationService.d.ts +62 -0
  173. package/build/utils/presetNotificationService.d.ts.map +1 -0
  174. package/build/utils/presetNotificationService.js +214 -0
  175. package/build/utils/presetNotificationService.js.map +1 -0
  176. package/build/utils/presetServerChangeDetector.d.ts +50 -0
  177. package/build/utils/presetServerChangeDetector.d.ts.map +1 -0
  178. package/build/utils/presetServerChangeDetector.js +100 -0
  179. package/build/utils/presetServerChangeDetector.js.map +1 -0
  180. package/build/utils/presetTypes.d.ts +52 -0
  181. package/build/utils/presetTypes.d.ts.map +1 -0
  182. package/build/utils/presetTypes.js +5 -0
  183. package/build/utils/presetTypes.js.map +1 -0
  184. package/build/utils/tagQueryEvaluator.d.ts +68 -0
  185. package/build/utils/tagQueryEvaluator.d.ts.map +1 -0
  186. package/build/utils/tagQueryEvaluator.js +292 -0
  187. package/build/utils/tagQueryEvaluator.js.map +1 -0
  188. package/build/utils/tagQueryParser.d.ts +11 -0
  189. package/build/utils/tagQueryParser.d.ts.map +1 -1
  190. package/build/utils/tagQueryParser.js +46 -0
  191. package/build/utils/tagQueryParser.js.map +1 -1
  192. package/build/utils/urlGenerator.d.ts +68 -0
  193. package/build/utils/urlGenerator.d.ts.map +1 -0
  194. package/build/utils/urlGenerator.js +208 -0
  195. package/build/utils/urlGenerator.js.map +1 -0
  196. 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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"}