@1mcp/agent 0.20.3 → 0.22.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.
Files changed (165) hide show
  1. package/README.md +2 -1
  2. package/build/commands/app/backups.d.ts +2 -1
  3. package/build/commands/app/backups.d.ts.map +1 -1
  4. package/build/commands/app/backups.js.map +1 -1
  5. package/build/commands/app/consolidate.d.ts +2 -1
  6. package/build/commands/app/consolidate.d.ts.map +1 -1
  7. package/build/commands/app/consolidate.js.map +1 -1
  8. package/build/commands/app/discover.d.ts +2 -1
  9. package/build/commands/app/discover.d.ts.map +1 -1
  10. package/build/commands/app/discover.js.map +1 -1
  11. package/build/commands/app/index.d.ts.map +1 -1
  12. package/build/commands/app/index.js +4 -2
  13. package/build/commands/app/index.js.map +1 -1
  14. package/build/commands/app/list.d.ts +2 -1
  15. package/build/commands/app/list.d.ts.map +1 -1
  16. package/build/commands/app/list.js.map +1 -1
  17. package/build/commands/app/restore.d.ts +2 -1
  18. package/build/commands/app/restore.d.ts.map +1 -1
  19. package/build/commands/app/restore.js.map +1 -1
  20. package/build/commands/app/status.d.ts +2 -1
  21. package/build/commands/app/status.d.ts.map +1 -1
  22. package/build/commands/app/status.js.map +1 -1
  23. package/build/commands/mcp/add.d.ts +2 -2
  24. package/build/commands/mcp/add.d.ts.map +1 -1
  25. package/build/commands/mcp/enable.d.ts +2 -2
  26. package/build/commands/mcp/enable.d.ts.map +1 -1
  27. package/build/commands/mcp/enable.js.map +1 -1
  28. package/build/commands/mcp/index.d.ts.map +1 -1
  29. package/build/commands/mcp/index.js +42 -35
  30. package/build/commands/mcp/index.js.map +1 -1
  31. package/build/commands/mcp/list.d.ts +2 -2
  32. package/build/commands/mcp/list.d.ts.map +1 -1
  33. package/build/commands/mcp/list.js.map +1 -1
  34. package/build/commands/mcp/remove.d.ts +2 -2
  35. package/build/commands/mcp/remove.d.ts.map +1 -1
  36. package/build/commands/mcp/status.d.ts +2 -2
  37. package/build/commands/mcp/status.d.ts.map +1 -1
  38. package/build/commands/mcp/status.js.map +1 -1
  39. package/build/commands/mcp/tokens.d.ts +13 -0
  40. package/build/commands/mcp/tokens.d.ts.map +1 -0
  41. package/build/commands/mcp/tokens.js +273 -0
  42. package/build/commands/mcp/tokens.js.map +1 -0
  43. package/build/commands/mcp/update.d.ts +2 -2
  44. package/build/commands/mcp/update.d.ts.map +1 -1
  45. package/build/commands/mcp/utils/connectionHelper.d.ts +29 -0
  46. package/build/commands/mcp/utils/connectionHelper.d.ts.map +1 -0
  47. package/build/commands/mcp/utils/connectionHelper.js +162 -0
  48. package/build/commands/mcp/utils/connectionHelper.js.map +1 -0
  49. package/build/commands/preset/create.d.ts +16 -0
  50. package/build/commands/preset/create.d.ts.map +1 -0
  51. package/build/commands/preset/create.js +96 -0
  52. package/build/commands/preset/create.js.map +1 -0
  53. package/build/commands/preset/delete.d.ts +14 -0
  54. package/build/commands/preset/delete.d.ts.map +1 -0
  55. package/build/commands/preset/delete.js +36 -0
  56. package/build/commands/preset/delete.js.map +1 -0
  57. package/build/commands/preset/edit.d.ts +15 -0
  58. package/build/commands/preset/edit.d.ts.map +1 -0
  59. package/build/commands/preset/edit.js +54 -0
  60. package/build/commands/preset/edit.js.map +1 -0
  61. package/build/commands/preset/index.d.ts +6 -0
  62. package/build/commands/preset/index.d.ts.map +1 -0
  63. package/build/commands/preset/index.js +192 -0
  64. package/build/commands/preset/index.js.map +1 -0
  65. package/build/commands/preset/interactive.d.ts +13 -0
  66. package/build/commands/preset/interactive.d.ts.map +1 -0
  67. package/build/commands/preset/interactive.js +131 -0
  68. package/build/commands/preset/interactive.js.map +1 -0
  69. package/build/commands/preset/list.d.ts +12 -0
  70. package/build/commands/preset/list.d.ts.map +1 -0
  71. package/build/commands/preset/list.js +122 -0
  72. package/build/commands/preset/list.js.map +1 -0
  73. package/build/commands/preset/show.d.ts +13 -0
  74. package/build/commands/preset/show.d.ts.map +1 -0
  75. package/build/commands/preset/show.js +104 -0
  76. package/build/commands/preset/show.js.map +1 -0
  77. package/build/commands/preset/test.d.ts +14 -0
  78. package/build/commands/preset/test.d.ts.map +1 -0
  79. package/build/commands/preset/test.js +36 -0
  80. package/build/commands/preset/test.js.map +1 -0
  81. package/build/commands/preset/url.d.ts +14 -0
  82. package/build/commands/preset/url.d.ts.map +1 -0
  83. package/build/commands/preset/url.js +37 -0
  84. package/build/commands/preset/url.js.map +1 -0
  85. package/build/constants.d.ts +6 -1
  86. package/build/constants.d.ts.map +1 -1
  87. package/build/constants.js +13 -5
  88. package/build/constants.js.map +1 -1
  89. package/build/core/server/agentConfig.d.ts +6 -0
  90. package/build/core/server/agentConfig.d.ts.map +1 -1
  91. package/build/core/server/agentConfig.js +9 -1
  92. package/build/core/server/agentConfig.js.map +1 -1
  93. package/build/core/server/serverManager.d.ts.map +1 -1
  94. package/build/core/server/serverManager.js +38 -0
  95. package/build/core/server/serverManager.js.map +1 -1
  96. package/build/core/types/server.d.ts +4 -1
  97. package/build/core/types/server.d.ts.map +1 -1
  98. package/build/core/types/server.js.map +1 -1
  99. package/build/globalOptions.d.ts +46 -0
  100. package/build/globalOptions.d.ts.map +1 -0
  101. package/build/globalOptions.js +37 -0
  102. package/build/globalOptions.js.map +1 -0
  103. package/build/handlers/requestHandlers.d.ts.map +1 -1
  104. package/build/handlers/requestHandlers.js +23 -1
  105. package/build/handlers/requestHandlers.js.map +1 -1
  106. package/build/index.js +92 -47
  107. package/build/index.js.map +1 -1
  108. package/build/server.d.ts.map +1 -1
  109. package/build/server.js +26 -0
  110. package/build/server.js.map +1 -1
  111. package/build/services/tokenEstimationService.d.ts +95 -0
  112. package/build/services/tokenEstimationService.d.ts.map +1 -0
  113. package/build/services/tokenEstimationService.js +233 -0
  114. package/build/services/tokenEstimationService.js.map +1 -0
  115. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +10 -1
  116. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
  117. package/build/transport/http/middlewares/scopeAuthMiddleware.js +12 -0
  118. package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
  119. package/build/transport/http/middlewares/tagsExtractor.d.ts +7 -3
  120. package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
  121. package/build/transport/http/middlewares/tagsExtractor.js +128 -6
  122. package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
  123. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  124. package/build/transport/http/routes/sseRoutes.js +5 -1
  125. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  126. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  127. package/build/transport/http/routes/streamableHttpRoutes.js +5 -1
  128. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  129. package/build/utils/interactiveSelector.d.ts +88 -0
  130. package/build/utils/interactiveSelector.d.ts.map +1 -0
  131. package/build/utils/interactiveSelector.js +616 -0
  132. package/build/utils/interactiveSelector.js.map +1 -0
  133. package/build/utils/presetErrorHandler.d.ts +62 -0
  134. package/build/utils/presetErrorHandler.d.ts.map +1 -0
  135. package/build/utils/presetErrorHandler.js +159 -0
  136. package/build/utils/presetErrorHandler.js.map +1 -0
  137. package/build/utils/presetManager.d.ts +114 -0
  138. package/build/utils/presetManager.d.ts.map +1 -0
  139. package/build/utils/presetManager.js +565 -0
  140. package/build/utils/presetManager.js.map +1 -0
  141. package/build/utils/presetNotificationService.d.ts +62 -0
  142. package/build/utils/presetNotificationService.d.ts.map +1 -0
  143. package/build/utils/presetNotificationService.js +214 -0
  144. package/build/utils/presetNotificationService.js.map +1 -0
  145. package/build/utils/presetServerChangeDetector.d.ts +50 -0
  146. package/build/utils/presetServerChangeDetector.d.ts.map +1 -0
  147. package/build/utils/presetServerChangeDetector.js +100 -0
  148. package/build/utils/presetServerChangeDetector.js.map +1 -0
  149. package/build/utils/presetTypes.d.ts +52 -0
  150. package/build/utils/presetTypes.d.ts.map +1 -0
  151. package/build/utils/presetTypes.js +5 -0
  152. package/build/utils/presetTypes.js.map +1 -0
  153. package/build/utils/tagQueryEvaluator.d.ts +68 -0
  154. package/build/utils/tagQueryEvaluator.d.ts.map +1 -0
  155. package/build/utils/tagQueryEvaluator.js +292 -0
  156. package/build/utils/tagQueryEvaluator.js.map +1 -0
  157. package/build/utils/tagQueryParser.d.ts +11 -0
  158. package/build/utils/tagQueryParser.d.ts.map +1 -1
  159. package/build/utils/tagQueryParser.js +46 -0
  160. package/build/utils/tagQueryParser.js.map +1 -1
  161. package/build/utils/urlGenerator.d.ts +68 -0
  162. package/build/utils/urlGenerator.d.ts.map +1 -0
  163. package/build/utils/urlGenerator.js +208 -0
  164. package/build/utils/urlGenerator.js.map +1 -0
  165. package/package.json +8 -2
@@ -1,6 +1,6 @@
1
- export interface UpdateCommandArgs {
1
+ import { GlobalOptions } from '../../globalOptions.js';
2
+ export interface UpdateCommandArgs extends GlobalOptions {
2
3
  name: string;
3
- config?: string;
4
4
  type?: string;
5
5
  command?: string;
6
6
  args?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/update.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsM1E"}
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/update.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsM1E"}
@@ -0,0 +1,29 @@
1
+ import type { MCPServerParams } from '../../../core/types/index.js';
2
+ import type { Tool, Resource, Prompt } from '@modelcontextprotocol/sdk/types.js';
3
+ export interface ServerCapabilities {
4
+ serverName: string;
5
+ connected: boolean;
6
+ tools: Tool[];
7
+ resources: Resource[];
8
+ prompts: Prompt[];
9
+ error?: string;
10
+ }
11
+ /**
12
+ * Connection helper for connecting to MCP servers and retrieving their capabilities
13
+ */
14
+ export declare class McpConnectionHelper {
15
+ private connections;
16
+ /**
17
+ * Connect to MCP servers based on configuration
18
+ */
19
+ connectToServers(servers: Record<string, MCPServerParams>, timeoutMs?: number): Promise<ServerCapabilities[]>;
20
+ /**
21
+ * Get capabilities from a connected MCP server
22
+ */
23
+ private getServerCapabilities;
24
+ /**
25
+ * Clean up connections
26
+ */
27
+ cleanup(): Promise<void>;
28
+ }
29
+ //# sourceMappingURL=connectionHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionHelper.d.ts","sourceRoot":"","sources":["../../../../src/commands/mcp/utils/connectionHelper.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAEjF,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAA8C;IAEjE;;OAEG;IACG,gBAAgB,CACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACxC,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAkFhC;;OAEG;YACW,qBAAqB;IAgEnC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B/B"}
@@ -0,0 +1,162 @@
1
+ import logger from '../../../logger/logger.js';
2
+ import { ClientManager } from '../../../core/client/clientManager.js';
3
+ import { createTransports } from '../../../transport/transportFactory.js';
4
+ /**
5
+ * Connection helper for connecting to MCP servers and retrieving their capabilities
6
+ */
7
+ export class McpConnectionHelper {
8
+ connections = new Map();
9
+ /**
10
+ * Connect to MCP servers based on configuration
11
+ */
12
+ async connectToServers(servers, timeoutMs = 10000) {
13
+ logger.info(`Connecting to ${Object.keys(servers).length} MCP servers`);
14
+ const serverNames = Object.keys(servers);
15
+ if (serverNames.length === 0) {
16
+ return [];
17
+ }
18
+ // Create transports from server configurations
19
+ const transports = createTransports(servers);
20
+ logger.debug(`Created ${Object.keys(transports).length} transports`);
21
+ const results = [];
22
+ // Connect to servers in parallel with individual timeouts
23
+ const connectionPromises = serverNames.map(async (serverName) => {
24
+ try {
25
+ logger.debug(`Connecting to server: ${serverName}`);
26
+ // Create a timeout promise
27
+ const timeoutPromise = new Promise((_, reject) => {
28
+ setTimeout(() => {
29
+ reject(new Error(`Connection timeout after ${timeoutMs}ms`));
30
+ }, timeoutMs);
31
+ });
32
+ // Get transport for this server
33
+ const transport = transports[serverName];
34
+ if (!transport) {
35
+ throw new Error('Transport not found');
36
+ }
37
+ // Create clients with timeout
38
+ const tempClientManager = ClientManager.getOrCreateInstance();
39
+ const tempTransports = { [serverName]: transport };
40
+ // Connect with timeout
41
+ const connectPromise = tempClientManager.createClients(tempTransports);
42
+ // Race between connection and timeout
43
+ const clients = await Promise.race([connectPromise, timeoutPromise]);
44
+ const connection = clients.get(serverName);
45
+ if (!connection) {
46
+ throw new Error('Failed to establish connection');
47
+ }
48
+ this.connections.set(serverName, connection);
49
+ // Get capabilities from the connected server
50
+ const capabilities = await this.getServerCapabilities(serverName, connection);
51
+ results.push({
52
+ serverName,
53
+ connected: true,
54
+ ...capabilities,
55
+ });
56
+ logger.debug(`Successfully connected to ${serverName}`);
57
+ }
58
+ catch (error) {
59
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
60
+ logger.warn(`Failed to connect to server ${serverName}: ${errorMessage}`);
61
+ results.push({
62
+ serverName,
63
+ connected: false,
64
+ tools: [],
65
+ resources: [],
66
+ prompts: [],
67
+ error: errorMessage,
68
+ });
69
+ }
70
+ });
71
+ // Wait for all connections to complete (success or failure)
72
+ await Promise.allSettled(connectionPromises);
73
+ const connectedCount = results.filter((r) => r.connected).length;
74
+ logger.info(`Connected to ${connectedCount}/${serverNames.length} MCP servers`);
75
+ return results;
76
+ }
77
+ /**
78
+ * Get capabilities from a connected MCP server
79
+ */
80
+ async getServerCapabilities(serverName, connection) {
81
+ const tools = [];
82
+ const resources = [];
83
+ const prompts = [];
84
+ try {
85
+ // Get tools with timeout
86
+ try {
87
+ const toolsResult = await Promise.race([
88
+ connection.client.listTools({}),
89
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Tools listing timeout')), 5000)),
90
+ ]);
91
+ if (toolsResult && toolsResult.tools) {
92
+ tools.push(...toolsResult.tools);
93
+ logger.debug(`Got ${toolsResult.tools.length} tools from ${serverName}`);
94
+ }
95
+ }
96
+ catch (error) {
97
+ logger.debug(`Failed to get tools from ${serverName}: ${error instanceof Error ? error.message : error}`);
98
+ }
99
+ // Get resources with timeout
100
+ try {
101
+ const resourcesResult = await Promise.race([
102
+ connection.client.listResources({}),
103
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Resources listing timeout')), 5000)),
104
+ ]);
105
+ if (resourcesResult && resourcesResult.resources) {
106
+ resources.push(...resourcesResult.resources);
107
+ logger.debug(`Got ${resourcesResult.resources.length} resources from ${serverName}`);
108
+ }
109
+ }
110
+ catch (error) {
111
+ logger.debug(`Failed to get resources from ${serverName}: ${error instanceof Error ? error.message : error}`);
112
+ }
113
+ // Get prompts with timeout
114
+ try {
115
+ const promptsResult = await Promise.race([
116
+ connection.client.listPrompts({}),
117
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Prompts listing timeout')), 5000)),
118
+ ]);
119
+ if (promptsResult && promptsResult.prompts) {
120
+ prompts.push(...promptsResult.prompts);
121
+ logger.debug(`Got ${promptsResult.prompts.length} prompts from ${serverName}`);
122
+ }
123
+ }
124
+ catch (error) {
125
+ logger.debug(`Failed to get prompts from ${serverName}: ${error instanceof Error ? error.message : error}`);
126
+ }
127
+ }
128
+ catch (error) {
129
+ logger.warn(`Error getting capabilities from ${serverName}: ${error instanceof Error ? error.message : error}`);
130
+ }
131
+ return { tools, resources, prompts };
132
+ }
133
+ /**
134
+ * Clean up connections
135
+ */
136
+ async cleanup() {
137
+ logger.debug('Cleaning up MCP connections');
138
+ const cleanupPromises = [];
139
+ for (const [serverName, connection] of this.connections) {
140
+ const cleanupPromise = (async () => {
141
+ try {
142
+ if (connection.client && typeof connection.client.close === 'function') {
143
+ // Add timeout to close operation
144
+ await Promise.race([
145
+ connection.client.close(),
146
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Close operation timeout')), 3000)),
147
+ ]);
148
+ }
149
+ logger.debug(`Closed connection to ${serverName}`);
150
+ }
151
+ catch (error) {
152
+ logger.warn(`Error closing connection to ${serverName}: ${error instanceof Error ? error.message : error}`);
153
+ }
154
+ })();
155
+ cleanupPromises.push(cleanupPromise);
156
+ }
157
+ // Wait for all cleanup operations to complete
158
+ await Promise.allSettled(cleanupPromises);
159
+ this.connections.clear();
160
+ }
161
+ }
162
+ //# sourceMappingURL=connectionHelper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectionHelper.js","sourceRoot":"","sources":["../../../../src/commands/mcp/utils/connectionHelper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { GlobalOptions } from '../../globalOptions.js';
2
+ /**
3
+ * Command arguments for preset create command
4
+ */
5
+ interface CreateArguments extends GlobalOptions {
6
+ _: string[];
7
+ name: string;
8
+ filter: string;
9
+ description?: string;
10
+ }
11
+ /**
12
+ * Preset create command (command-line)
13
+ */
14
+ export declare function createCommand(argv: CreateArguments): Promise<void>;
15
+ export {};
16
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/preset/create.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD;;GAEG;AACH,UAAU,eAAgB,SAAQ,aAAa;IAC7C,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoGxE"}
@@ -0,0 +1,96 @@
1
+ import { PresetManager } from '../../utils/presetManager.js';
2
+ import { UrlGenerator } from '../../utils/urlGenerator.js';
3
+ import { TagQueryParser } from '../../utils/tagQueryParser.js';
4
+ import { PresetErrorHandler } from '../../utils/presetErrorHandler.js';
5
+ import logger from '../../logger/logger.js';
6
+ /**
7
+ * Preset create command (command-line)
8
+ */
9
+ export async function createCommand(argv) {
10
+ try {
11
+ if (!argv.name) {
12
+ PresetErrorHandler.validationError('Preset name is required', 'name');
13
+ }
14
+ if (!argv.filter) {
15
+ PresetErrorHandler.validationError('Filter expression is required. Use --filter "web,api" or --filter "web AND api"', 'filter');
16
+ }
17
+ // Initialize preset manager
18
+ const presetManager = PresetManager.getInstance(argv['config-dir']);
19
+ await presetManager.initialize();
20
+ // Parse filter expression
21
+ let tagQuery;
22
+ let strategy = 'or';
23
+ // Determine if this is a complex expression or simple tags
24
+ const filterUpper = argv.filter.toUpperCase();
25
+ const hasAdvancedSyntax = argv.filter.includes('(') ||
26
+ argv.filter.includes(')') ||
27
+ filterUpper.includes(' AND ') ||
28
+ filterUpper.includes(' OR ') ||
29
+ filterUpper.includes(' NOT ') ||
30
+ argv.filter.includes('&&') ||
31
+ argv.filter.includes('||') ||
32
+ argv.filter.includes('!');
33
+ if (hasAdvancedSyntax) {
34
+ // Use advanced parsing for complex expressions
35
+ try {
36
+ // Use unified conversion to JSON format
37
+ tagQuery = TagQueryParser.advancedQueryToJSON(argv.filter);
38
+ strategy = 'advanced';
39
+ }
40
+ catch (_error) {
41
+ PresetErrorHandler.createFilterError(argv.filter);
42
+ }
43
+ }
44
+ else {
45
+ // Use simple parsing for basic comma-separated or single tags
46
+ try {
47
+ const tags = TagQueryParser.parseSimple(argv.filter);
48
+ if (tags.length === 0) {
49
+ throw new Error('No valid tags found in filter expression');
50
+ }
51
+ // Validate that tags don't contain suspicious patterns
52
+ for (const tag of tags) {
53
+ // Check for spaces in tag names (likely indicates missing quotes or improper syntax)
54
+ if (tag.includes(' ')) {
55
+ throw new Error(`Invalid tag "${tag}": tag names cannot contain spaces. Use quotes for multi-word tags or AND/OR operators for logic.`);
56
+ }
57
+ // Check for invalid characters
58
+ if (!/^[a-zA-Z0-9_.-]+$/.test(tag)) {
59
+ throw new Error(`Invalid tag "${tag}": tags can only contain letters, numbers, hyphens, underscores, and dots.`);
60
+ }
61
+ }
62
+ if (tags.length === 1) {
63
+ strategy = 'or';
64
+ tagQuery = { tag: tags[0] };
65
+ }
66
+ else {
67
+ strategy = 'or';
68
+ tagQuery = { $or: tags.map((tag) => ({ tag })) };
69
+ }
70
+ }
71
+ catch (_error) {
72
+ PresetErrorHandler.createFilterError(argv.filter);
73
+ }
74
+ }
75
+ // Save preset
76
+ await presetManager.savePreset(argv.name, {
77
+ description: argv.description,
78
+ strategy,
79
+ tagQuery,
80
+ });
81
+ // Generate URL
82
+ const urlGenerator = new UrlGenerator();
83
+ const url = urlGenerator.generatePresetUrl(argv.name);
84
+ console.log(`✅ Preset '${argv.name}' created successfully!`);
85
+ console.log(`📋 Strategy: ${strategy}`);
86
+ console.log(`🔗 URL: ${url}`);
87
+ if (argv.description) {
88
+ console.log(`📝 Description: ${argv.description}`);
89
+ }
90
+ }
91
+ catch (error) {
92
+ logger.error('Preset create command failed', { error });
93
+ PresetErrorHandler.handleCliError(error, 'preset create');
94
+ }
95
+ }
96
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/preset/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { GlobalOptions } from '../../globalOptions.js';
2
+ /**
3
+ * Command arguments for delete command
4
+ */
5
+ interface DeleteArguments extends GlobalOptions {
6
+ _: string[];
7
+ name: string;
8
+ }
9
+ /**
10
+ * Delete an existing preset
11
+ */
12
+ export declare function deleteCommand(argv: DeleteArguments): Promise<void>;
13
+ export {};
14
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/preset/delete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD;;GAEG;AACH,UAAU,eAAgB,SAAQ,aAAa;IAC7C,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxE"}
@@ -0,0 +1,36 @@
1
+ import { PresetManager } from '../../utils/presetManager.js';
2
+ import { InteractiveSelector } from '../../utils/interactiveSelector.js';
3
+ import logger from '../../logger/logger.js';
4
+ /**
5
+ * Delete an existing preset
6
+ */
7
+ export async function deleteCommand(argv) {
8
+ try {
9
+ const presetManager = PresetManager.getInstance(argv['config-dir']);
10
+ await presetManager.initialize();
11
+ const selector = new InteractiveSelector();
12
+ await deletePreset(argv.name, presetManager, selector);
13
+ }
14
+ catch (error) {
15
+ logger.error('Preset delete command failed', { error });
16
+ console.error(`❌ Command failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
17
+ process.exit(1);
18
+ }
19
+ }
20
+ /**
21
+ * Delete a preset
22
+ */
23
+ async function deletePreset(name, presetManager, selector) {
24
+ if (!presetManager.hasPreset(name)) {
25
+ selector.showError(`Preset '${name}' not found`);
26
+ return;
27
+ }
28
+ const deleted = await presetManager.deletePreset(name);
29
+ if (deleted) {
30
+ console.log(`✅ Preset '${name}' deleted successfully.\n`);
31
+ }
32
+ else {
33
+ selector.showError(`Failed to delete preset '${name}'`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/preset/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAU5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAqB;IACvD,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACpE,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAE3C,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,aAA4B,EAAE,QAA6B;IACnG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,QAAQ,CAAC,SAAS,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEvD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,2BAA2B,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,SAAS,CAAC,4BAA4B,IAAI,GAAG,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { GlobalOptions } from '../../globalOptions.js';
2
+ /**
3
+ * Command arguments for the edit command
4
+ */
5
+ interface EditArguments extends GlobalOptions {
6
+ _: string[];
7
+ name: string;
8
+ description?: string;
9
+ }
10
+ /**
11
+ * Preset edit command (interactive TUI for existing presets)
12
+ */
13
+ export declare function editCommand(argv: EditArguments): Promise<void>;
14
+ export {};
15
+ //# sourceMappingURL=edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../src/commands/preset/edit.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD;;GAEG;AACH,UAAU,aAAc,SAAQ,aAAa;IAC3C,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDpE"}
@@ -0,0 +1,54 @@
1
+ // Command functionality for preset edit
2
+ import { PresetManager } from '../../utils/presetManager.js';
3
+ import { InteractiveSelector } from '../../utils/interactiveSelector.js';
4
+ import { UrlGenerator } from '../../utils/urlGenerator.js';
5
+ import logger from '../../logger/logger.js';
6
+ /**
7
+ * Preset edit command (interactive TUI for existing presets)
8
+ */
9
+ export async function editCommand(argv) {
10
+ try {
11
+ // Initialize preset manager
12
+ const presetManager = PresetManager.getInstance(argv['config-dir']);
13
+ await presetManager.initialize();
14
+ const selector = new InteractiveSelector();
15
+ const urlGenerator = new UrlGenerator();
16
+ // Show current preset configuration path
17
+ console.log(`📁 Config directory: ${presetManager.getConfigPath()}\n`);
18
+ // Load existing preset for editing
19
+ if (!presetManager.hasPreset(argv.name)) {
20
+ selector.showError(`Preset '${argv.name}' not found`);
21
+ return;
22
+ }
23
+ const existingConfig = presetManager.getPreset(argv.name);
24
+ if (!existingConfig) {
25
+ selector.showError(`Failed to load preset '${argv.name}'`);
26
+ return;
27
+ }
28
+ console.log(`📝 Editing preset: ${argv.name}`);
29
+ if (existingConfig.description) {
30
+ console.log(` Description: ${existingConfig.description}`);
31
+ }
32
+ // Interactive server selection with existing config
33
+ const result = await selector.selectServers(existingConfig, presetManager.getConfigPath());
34
+ if (result.cancelled) {
35
+ console.log('Operation cancelled.');
36
+ process.exit(0);
37
+ }
38
+ // Save back to the same preset name, optionally updating description
39
+ const updatedDescription = argv.description || existingConfig.description;
40
+ await presetManager.savePreset(argv.name, {
41
+ description: updatedDescription,
42
+ strategy: result.strategy,
43
+ tagQuery: result.tagQuery,
44
+ });
45
+ const url = urlGenerator.generatePresetUrl(argv.name);
46
+ selector.showSaveSuccess(argv.name, url);
47
+ }
48
+ catch (error) {
49
+ logger.error('Preset edit command failed', { error });
50
+ console.error(`❌ Command failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
51
+ process.exit(1);
52
+ }
53
+ }
54
+ //# sourceMappingURL=edit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/commands/preset/edit.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAW5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAmB;IACnD,IAAI,CAAC;QACH,4BAA4B;QAC5B,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACpE,MAAM,aAAa,CAAC,UAAU,EAAE,CAAC;QAEjC,MAAM,QAAQ,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAExC,yCAAyC;QACzC,OAAO,CAAC,GAAG,CAAC,wBAAwB,aAAa,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAEvE,mCAAmC;QACnC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,QAAQ,CAAC,SAAS,CAAC,WAAW,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,MAAM,cAAc,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,QAAQ,CAAC,SAAS,CAAC,0BAA0B,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,cAAc,EAAE,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC;QAE3F,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,qEAAqE;QACrE,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,IAAI,cAAc,CAAC,WAAW,CAAC;QAE1E,MAAM,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE;YACxC,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,YAAY,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtD,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,qBAAqB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Argv } from 'yargs';
2
+ /**
3
+ * Setup preset command configuration for yargs
4
+ */
5
+ export declare function setupPresetCommands(yargs: Argv): Argv;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/preset/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAGlC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAgMrD"}