@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.
- package/README.md +2 -1
- package/build/commands/app/backups.d.ts +2 -1
- package/build/commands/app/backups.d.ts.map +1 -1
- package/build/commands/app/backups.js.map +1 -1
- package/build/commands/app/consolidate.d.ts +2 -1
- package/build/commands/app/consolidate.d.ts.map +1 -1
- package/build/commands/app/consolidate.js.map +1 -1
- package/build/commands/app/discover.d.ts +2 -1
- package/build/commands/app/discover.d.ts.map +1 -1
- 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 +4 -2
- package/build/commands/app/index.js.map +1 -1
- package/build/commands/app/list.d.ts +2 -1
- package/build/commands/app/list.d.ts.map +1 -1
- package/build/commands/app/list.js.map +1 -1
- package/build/commands/app/restore.d.ts +2 -1
- package/build/commands/app/restore.d.ts.map +1 -1
- package/build/commands/app/restore.js.map +1 -1
- package/build/commands/app/status.d.ts +2 -1
- package/build/commands/app/status.d.ts.map +1 -1
- package/build/commands/app/status.js.map +1 -1
- package/build/commands/mcp/add.d.ts +2 -2
- package/build/commands/mcp/add.d.ts.map +1 -1
- package/build/commands/mcp/enable.d.ts +2 -2
- package/build/commands/mcp/enable.d.ts.map +1 -1
- 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 +42 -35
- package/build/commands/mcp/index.js.map +1 -1
- package/build/commands/mcp/list.d.ts +2 -2
- package/build/commands/mcp/list.d.ts.map +1 -1
- package/build/commands/mcp/list.js.map +1 -1
- package/build/commands/mcp/remove.d.ts +2 -2
- package/build/commands/mcp/remove.d.ts.map +1 -1
- package/build/commands/mcp/status.d.ts +2 -2
- package/build/commands/mcp/status.d.ts.map +1 -1
- package/build/commands/mcp/status.js.map +1 -1
- package/build/commands/mcp/tokens.d.ts +13 -0
- package/build/commands/mcp/tokens.d.ts.map +1 -0
- package/build/commands/mcp/tokens.js +273 -0
- package/build/commands/mcp/tokens.js.map +1 -0
- package/build/commands/mcp/update.d.ts +2 -2
- package/build/commands/mcp/update.d.ts.map +1 -1
- package/build/commands/mcp/utils/connectionHelper.d.ts +29 -0
- package/build/commands/mcp/utils/connectionHelper.d.ts.map +1 -0
- package/build/commands/mcp/utils/connectionHelper.js +162 -0
- package/build/commands/mcp/utils/connectionHelper.js.map +1 -0
- package/build/commands/preset/create.d.ts +16 -0
- package/build/commands/preset/create.d.ts.map +1 -0
- package/build/commands/preset/create.js +96 -0
- package/build/commands/preset/create.js.map +1 -0
- package/build/commands/preset/delete.d.ts +14 -0
- package/build/commands/preset/delete.d.ts.map +1 -0
- package/build/commands/preset/delete.js +36 -0
- package/build/commands/preset/delete.js.map +1 -0
- package/build/commands/preset/edit.d.ts +15 -0
- package/build/commands/preset/edit.d.ts.map +1 -0
- package/build/commands/preset/edit.js +54 -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 +192 -0
- package/build/commands/preset/index.js.map +1 -0
- package/build/commands/preset/interactive.d.ts +13 -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 +12 -0
- package/build/commands/preset/list.d.ts.map +1 -0
- package/build/commands/preset/list.js +122 -0
- package/build/commands/preset/list.js.map +1 -0
- package/build/commands/preset/show.d.ts +13 -0
- package/build/commands/preset/show.d.ts.map +1 -0
- package/build/commands/preset/show.js +104 -0
- package/build/commands/preset/show.js.map +1 -0
- package/build/commands/preset/test.d.ts +14 -0
- package/build/commands/preset/test.d.ts.map +1 -0
- package/build/commands/preset/test.js +36 -0
- package/build/commands/preset/test.js.map +1 -0
- package/build/commands/preset/url.d.ts +14 -0
- package/build/commands/preset/url.d.ts.map +1 -0
- package/build/commands/preset/url.js +37 -0
- package/build/commands/preset/url.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 +38 -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/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 +92 -47
- package/build/index.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/services/tokenEstimationService.d.ts +95 -0
- package/build/services/tokenEstimationService.d.ts.map +1 -0
- package/build/services/tokenEstimationService.js +233 -0
- package/build/services/tokenEstimationService.js.map +1 -0
- 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/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 +8 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/commands/mcp/update.ts"],"names":[],"mappings":"
|
|
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 @@
|
|
|
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"}
|