@1mcp/agent 0.16.0 → 0.18.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 (172) hide show
  1. package/README.md +103 -11
  2. package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -1
  3. package/build/auth/sdkOAuthClientProvider.js +1 -1
  4. package/build/auth/sdkOAuthClientProvider.js.map +1 -1
  5. package/build/commands/app/backups.d.ts +17 -0
  6. package/build/commands/app/backups.d.ts.map +1 -0
  7. package/build/commands/app/backups.js +162 -0
  8. package/build/commands/app/backups.js.map +1 -0
  9. package/build/commands/app/consolidate.d.ts +21 -0
  10. package/build/commands/app/consolidate.d.ts.map +1 -0
  11. package/build/commands/app/consolidate.js +383 -0
  12. package/build/commands/app/consolidate.js.map +1 -0
  13. package/build/commands/app/discover.d.ts +16 -0
  14. package/build/commands/app/discover.d.ts.map +1 -0
  15. package/build/commands/app/discover.js +79 -0
  16. package/build/commands/app/discover.js.map +1 -0
  17. package/build/commands/app/index.d.ts +12 -0
  18. package/build/commands/app/index.d.ts.map +1 -0
  19. package/build/commands/app/index.js +274 -0
  20. package/build/commands/app/index.js.map +1 -0
  21. package/build/commands/app/list.d.ts +16 -0
  22. package/build/commands/app/list.d.ts.map +1 -0
  23. package/build/commands/app/list.js +95 -0
  24. package/build/commands/app/list.js.map +1 -0
  25. package/build/commands/app/restore.d.ts +21 -0
  26. package/build/commands/app/restore.d.ts.map +1 -0
  27. package/build/commands/app/restore.js +265 -0
  28. package/build/commands/app/restore.js.map +1 -0
  29. package/build/commands/app/status.d.ts +16 -0
  30. package/build/commands/app/status.d.ts.map +1 -0
  31. package/build/commands/app/status.js +224 -0
  32. package/build/commands/app/status.js.map +1 -0
  33. package/build/commands/mcp/add.d.ts +19 -0
  34. package/build/commands/mcp/add.d.ts.map +1 -0
  35. package/build/commands/mcp/add.js +135 -0
  36. package/build/commands/mcp/add.js.map +1 -0
  37. package/build/commands/mcp/enable.d.ts +13 -0
  38. package/build/commands/mcp/enable.d.ts.map +1 -0
  39. package/build/commands/mcp/enable.js +100 -0
  40. package/build/commands/mcp/enable.js.map +1 -0
  41. package/build/commands/mcp/index.d.ts +12 -0
  42. package/build/commands/mcp/index.d.ts.map +1 -0
  43. package/build/commands/mcp/index.js +351 -0
  44. package/build/commands/mcp/index.js.map +1 -0
  45. package/build/commands/mcp/list.d.ts +11 -0
  46. package/build/commands/mcp/list.d.ts.map +1 -0
  47. package/build/commands/mcp/list.js +144 -0
  48. package/build/commands/mcp/list.js.map +1 -0
  49. package/build/commands/mcp/remove.d.ts +10 -0
  50. package/build/commands/mcp/remove.d.ts.map +1 -0
  51. package/build/commands/mcp/remove.js +89 -0
  52. package/build/commands/mcp/remove.js.map +1 -0
  53. package/build/commands/mcp/status.d.ts +10 -0
  54. package/build/commands/mcp/status.d.ts.map +1 -0
  55. package/build/commands/mcp/status.js +243 -0
  56. package/build/commands/mcp/status.js.map +1 -0
  57. package/build/commands/mcp/update.d.ts +18 -0
  58. package/build/commands/mcp/update.d.ts.map +1 -0
  59. package/build/commands/mcp/update.js +157 -0
  60. package/build/commands/mcp/update.js.map +1 -0
  61. package/build/commands/mcp/utils/configUtils.d.ts +64 -0
  62. package/build/commands/mcp/utils/configUtils.d.ts.map +1 -0
  63. package/build/commands/mcp/utils/configUtils.js +266 -0
  64. package/build/commands/mcp/utils/configUtils.js.map +1 -0
  65. package/build/commands/mcp/utils/doubleHyphenParser.d.ts +32 -0
  66. package/build/commands/mcp/utils/doubleHyphenParser.d.ts.map +1 -0
  67. package/build/commands/mcp/utils/doubleHyphenParser.js +61 -0
  68. package/build/commands/mcp/utils/doubleHyphenParser.js.map +1 -0
  69. package/build/commands/mcp/utils/validation.d.ts +33 -0
  70. package/build/commands/mcp/utils/validation.d.ts.map +1 -0
  71. package/build/commands/mcp/utils/validation.js +235 -0
  72. package/build/commands/mcp/utils/validation.js.map +1 -0
  73. package/build/constants.d.ts +11 -2
  74. package/build/constants.d.ts.map +1 -1
  75. package/build/constants.js +18 -5
  76. package/build/constants.js.map +1 -1
  77. package/build/core/capabilities/asyncLoadingOrchestrator.d.ts +96 -0
  78. package/build/core/capabilities/asyncLoadingOrchestrator.d.ts.map +1 -0
  79. package/build/core/capabilities/asyncLoadingOrchestrator.js +256 -0
  80. package/build/core/capabilities/asyncLoadingOrchestrator.js.map +1 -0
  81. package/build/core/capabilities/capabilityAggregator.d.ts +114 -0
  82. package/build/core/capabilities/capabilityAggregator.d.ts.map +1 -0
  83. package/build/core/capabilities/capabilityAggregator.js +234 -0
  84. package/build/core/capabilities/capabilityAggregator.js.map +1 -0
  85. package/build/core/client/clientManager.d.ts +29 -0
  86. package/build/core/client/clientManager.d.ts.map +1 -1
  87. package/build/core/client/clientManager.js +151 -2
  88. package/build/core/client/clientManager.js.map +1 -1
  89. package/build/core/loading/loadingStateTracker.d.ts +128 -0
  90. package/build/core/loading/loadingStateTracker.d.ts.map +1 -0
  91. package/build/core/loading/loadingStateTracker.js +211 -0
  92. package/build/core/loading/loadingStateTracker.js.map +1 -0
  93. package/build/core/loading/mcpLoadingManager.d.ts +156 -0
  94. package/build/core/loading/mcpLoadingManager.d.ts.map +1 -0
  95. package/build/core/loading/mcpLoadingManager.js +352 -0
  96. package/build/core/loading/mcpLoadingManager.js.map +1 -0
  97. package/build/core/notifications/notificationManager.d.ts +111 -0
  98. package/build/core/notifications/notificationManager.d.ts.map +1 -0
  99. package/build/core/notifications/notificationManager.js +232 -0
  100. package/build/core/notifications/notificationManager.js.map +1 -0
  101. package/build/core/server/agentConfig.d.ts +50 -0
  102. package/build/core/server/agentConfig.d.ts.map +1 -1
  103. package/build/core/server/agentConfig.js +68 -1
  104. package/build/core/server/agentConfig.js.map +1 -1
  105. package/build/core/server/serverManager.d.ts +1 -0
  106. package/build/core/server/serverManager.d.ts.map +1 -1
  107. package/build/core/server/serverManager.js +3 -0
  108. package/build/core/server/serverManager.js.map +1 -1
  109. package/build/core/types/transport.d.ts +2 -2
  110. package/build/index.js +133 -34
  111. package/build/index.js.map +1 -1
  112. package/build/logger/logger.d.ts +9 -0
  113. package/build/logger/logger.d.ts.map +1 -1
  114. package/build/logger/logger.js +49 -0
  115. package/build/logger/logger.js.map +1 -1
  116. package/build/logger/secureLogger.d.ts +22 -0
  117. package/build/logger/secureLogger.d.ts.map +1 -0
  118. package/build/logger/secureLogger.js +120 -0
  119. package/build/logger/secureLogger.js.map +1 -0
  120. package/build/server.d.ts +23 -2
  121. package/build/server.d.ts.map +1 -1
  122. package/build/server.js +83 -10
  123. package/build/server.js.map +1 -1
  124. package/build/services/configReloadService.d.ts +8 -0
  125. package/build/services/configReloadService.d.ts.map +1 -1
  126. package/build/services/configReloadService.js +68 -0
  127. package/build/services/configReloadService.js.map +1 -1
  128. package/build/transport/http/middlewares/mcpAvailabilityMiddleware.d.ts +79 -0
  129. package/build/transport/http/middlewares/mcpAvailabilityMiddleware.d.ts.map +1 -0
  130. package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js +306 -0
  131. package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js.map +1 -0
  132. package/build/transport/http/routes/healthRoutes.d.ts +2 -1
  133. package/build/transport/http/routes/healthRoutes.d.ts.map +1 -1
  134. package/build/transport/http/routes/healthRoutes.js +170 -1
  135. package/build/transport/http/routes/healthRoutes.js.map +1 -1
  136. package/build/transport/http/routes/sseRoutes.d.ts +2 -1
  137. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  138. package/build/transport/http/routes/sseRoutes.js +13 -1
  139. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  140. package/build/transport/http/routes/streamableHttpRoutes.d.ts +2 -1
  141. package/build/transport/http/routes/streamableHttpRoutes.d.ts.map +1 -1
  142. package/build/transport/http/routes/streamableHttpRoutes.js +13 -1
  143. package/build/transport/http/routes/streamableHttpRoutes.js.map +1 -1
  144. package/build/transport/http/server.d.ts +7 -1
  145. package/build/transport/http/server.d.ts.map +1 -1
  146. package/build/transport/http/server.js +15 -4
  147. package/build/transport/http/server.js.map +1 -1
  148. package/build/transport/transportFactory.d.ts +4 -0
  149. package/build/transport/transportFactory.d.ts.map +1 -1
  150. package/build/transport/transportFactory.js +1 -1
  151. package/build/transport/transportFactory.js.map +1 -1
  152. package/build/utils/appDiscovery.d.ts +75 -0
  153. package/build/utils/appDiscovery.d.ts.map +1 -0
  154. package/build/utils/appDiscovery.js +358 -0
  155. package/build/utils/appDiscovery.js.map +1 -0
  156. package/build/utils/appPresets.d.ts +88 -0
  157. package/build/utils/appPresets.d.ts.map +1 -0
  158. package/build/utils/appPresets.js +430 -0
  159. package/build/utils/appPresets.js.map +1 -0
  160. package/build/utils/backupManager.d.ts +61 -0
  161. package/build/utils/backupManager.d.ts.map +1 -0
  162. package/build/utils/backupManager.js +314 -0
  163. package/build/utils/backupManager.js.map +1 -0
  164. package/build/utils/urlDetection.d.ts +35 -0
  165. package/build/utils/urlDetection.d.ts.map +1 -0
  166. package/build/utils/urlDetection.js +115 -0
  167. package/build/utils/urlDetection.js.map +1 -0
  168. package/build/utils/validationHelpers.d.ts +62 -0
  169. package/build/utils/validationHelpers.d.ts.map +1 -0
  170. package/build/utils/validationHelpers.js +252 -0
  171. package/build/utils/validationHelpers.js.map +1 -0
  172. package/package.json +9 -2
@@ -0,0 +1,314 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ import os from 'os';
5
+ import { getGlobalBackupDir, getAppBackupDir } from '../constants.js';
6
+ /**
7
+ * Create a backup of configuration file with metadata
8
+ */
9
+ export function createBackup(configPath, app, operation, serverCount = 0) {
10
+ if (!fs.existsSync(configPath)) {
11
+ throw new Error(`Configuration file does not exist: ${configPath}`);
12
+ }
13
+ const timestamp = Date.now();
14
+ const dateStr = new Date(timestamp).toISOString().replace(/[:.-]/g, '').slice(0, 15); // YYYYMMDDTHHMMSS
15
+ // Create app-specific backup directory
16
+ const appBackupDir = getAppBackupDir(app);
17
+ fs.mkdirSync(appBackupDir, { recursive: true });
18
+ // Use descriptive filename in centralized location
19
+ const backupFileName = `${dateStr}_${operation}.backup`;
20
+ const backupPath = path.join(appBackupDir, backupFileName);
21
+ const content = fs.readFileSync(configPath, 'utf8');
22
+ const checksum = crypto.createHash('sha256').update(content).digest('hex');
23
+ const stats = fs.statSync(configPath);
24
+ // Create backup file
25
+ fs.copyFileSync(configPath, backupPath);
26
+ const backupInfo = {
27
+ originalPath: configPath,
28
+ backupPath,
29
+ timestamp,
30
+ checksum,
31
+ metadata: {
32
+ app,
33
+ operation,
34
+ version: process.env.npm_package_version || 'unknown',
35
+ serverCount,
36
+ fileSize: stats.size,
37
+ },
38
+ };
39
+ // Store backup metadata
40
+ const metaPath = `${backupPath}.meta`;
41
+ fs.writeFileSync(metaPath, JSON.stringify(backupInfo, null, 2));
42
+ return backupInfo;
43
+ }
44
+ /**
45
+ * Rollback from backup file
46
+ */
47
+ export async function rollbackFromBackup(backup) {
48
+ if (!fs.existsSync(backup.backupPath)) {
49
+ throw new Error(`Backup file not found: ${backup.backupPath}`);
50
+ }
51
+ // Verify backup integrity
52
+ const backupContent = fs.readFileSync(backup.backupPath, 'utf8');
53
+ const currentChecksum = crypto.createHash('sha256').update(backupContent).digest('hex');
54
+ if (currentChecksum !== backup.checksum) {
55
+ throw new Error('Backup file integrity check failed - checksum mismatch');
56
+ }
57
+ // Restore original file
58
+ fs.copyFileSync(backup.backupPath, backup.originalPath);
59
+ }
60
+ /**
61
+ * Rollback from backup file path
62
+ */
63
+ export async function rollbackFromBackupPath(backupPath) {
64
+ const metaPath = `${backupPath}.meta`;
65
+ if (!fs.existsSync(metaPath)) {
66
+ throw new Error(`Backup metadata not found: ${metaPath}`);
67
+ }
68
+ const metaContent = fs.readFileSync(metaPath, 'utf8');
69
+ const backupInfo = JSON.parse(metaContent);
70
+ await rollbackFromBackup(backupInfo);
71
+ }
72
+ /**
73
+ * List all available backups for a specific app
74
+ */
75
+ export function listAppBackups(app) {
76
+ const backups = [];
77
+ // First, check the centralized backup directory (most efficient)
78
+ const centralBackupDir = getGlobalBackupDir();
79
+ if (fs.existsSync(centralBackupDir)) {
80
+ if (app) {
81
+ // Search specific app directory
82
+ const appBackupDir = getAppBackupDir(app);
83
+ scanBackupsInDirectory(appBackupDir, backups, app);
84
+ }
85
+ else {
86
+ // Search all app directories
87
+ try {
88
+ const appDirs = fs.readdirSync(centralBackupDir);
89
+ for (const appDir of appDirs) {
90
+ const appBackupPath = path.join(centralBackupDir, appDir);
91
+ if (fs.statSync(appBackupPath).isDirectory()) {
92
+ scanBackupsInDirectory(appBackupPath, backups);
93
+ }
94
+ }
95
+ }
96
+ catch (_error) {
97
+ // Skip if can't read central directory
98
+ }
99
+ }
100
+ }
101
+ // Then check legacy locations for existing backups
102
+ const legacyPaths = getBackupSearchPaths().slice(1); // Skip central directory (already checked)
103
+ for (const searchPath of legacyPaths) {
104
+ scanBackupsInDirectory(searchPath, backups, app);
105
+ }
106
+ // Sort by timestamp (newest first)
107
+ backups.sort((a, b) => b.timestamp - a.timestamp);
108
+ return backups;
109
+ }
110
+ /**
111
+ * Scan a directory for backup files
112
+ */
113
+ function scanBackupsInDirectory(dirPath, backups, filterApp) {
114
+ if (!fs.existsSync(dirPath)) {
115
+ return;
116
+ }
117
+ try {
118
+ const files = fs.readdirSync(dirPath);
119
+ for (const file of files) {
120
+ if (file.endsWith('.backup.meta')) {
121
+ const metaPath = path.join(dirPath, file);
122
+ try {
123
+ const metaContent = fs.readFileSync(metaPath, 'utf8');
124
+ const backupInfo = JSON.parse(metaContent);
125
+ // Filter by app if specified
126
+ if (filterApp && backupInfo.metadata.app !== filterApp) {
127
+ continue;
128
+ }
129
+ const backupPath = backupInfo.backupPath;
130
+ // Check if backup file still exists
131
+ if (!fs.existsSync(backupPath)) {
132
+ continue;
133
+ }
134
+ backups.push({
135
+ app: backupInfo.metadata.app,
136
+ backupPath,
137
+ metaPath,
138
+ timestamp: backupInfo.timestamp,
139
+ operation: backupInfo.metadata.operation,
140
+ serverCount: backupInfo.metadata.serverCount,
141
+ age: formatAge(backupInfo.timestamp),
142
+ });
143
+ }
144
+ catch (_error) {
145
+ // Skip invalid metadata files
146
+ continue;
147
+ }
148
+ }
149
+ }
150
+ }
151
+ catch (_error) {
152
+ // Skip directories we can't read
153
+ return;
154
+ }
155
+ }
156
+ /**
157
+ * Get search paths for backup files
158
+ */
159
+ function getBackupSearchPaths() {
160
+ const paths = [
161
+ // Primary location: centralized backup directory
162
+ getGlobalBackupDir(),
163
+ ];
164
+ // Legacy fallback locations for existing backups
165
+ const homeDir = os.homedir();
166
+ // Add current directory as fallback
167
+ paths.push(process.cwd());
168
+ // Add common app config directories as fallback
169
+ if (process.platform === 'darwin') {
170
+ paths.push(path.join(homeDir, 'Library/Application Support/Claude'), path.join(homeDir, '.cursor'), path.join(homeDir, '.vscode'));
171
+ }
172
+ else if (process.platform === 'win32') {
173
+ const appData = process.env.APPDATA || '';
174
+ if (appData) {
175
+ paths.push(path.join(appData, 'Claude'), path.join(homeDir, '.cursor'), path.join(homeDir, '.vscode'));
176
+ }
177
+ }
178
+ else {
179
+ paths.push(path.join(homeDir, '.config/claude'), path.join(homeDir, '.cursor'), path.join(homeDir, '.vscode'), path.join(homeDir, '.config/cline'));
180
+ }
181
+ return paths.filter((p) => typeof p === 'string' && p.length > 0);
182
+ }
183
+ /**
184
+ * Find backup by metadata file path
185
+ */
186
+ export function findBackupByMetaPath(metaPath) {
187
+ try {
188
+ if (!fs.existsSync(metaPath)) {
189
+ return null;
190
+ }
191
+ const metaContent = fs.readFileSync(metaPath, 'utf8');
192
+ const backupInfo = JSON.parse(metaContent);
193
+ // Verify backup file exists
194
+ if (!fs.existsSync(backupInfo.backupPath)) {
195
+ return null;
196
+ }
197
+ return backupInfo;
198
+ }
199
+ catch (_error) {
200
+ return null;
201
+ }
202
+ }
203
+ /**
204
+ * Clean up old backups (older than specified days)
205
+ */
206
+ export function cleanupOldBackups(maxAgeDays = 30) {
207
+ const backups = listAppBackups();
208
+ const cutoffTime = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
209
+ let cleanedCount = 0;
210
+ for (const backup of backups) {
211
+ if (backup.timestamp < cutoffTime) {
212
+ try {
213
+ // Remove backup file
214
+ if (fs.existsSync(backup.backupPath)) {
215
+ fs.unlinkSync(backup.backupPath);
216
+ }
217
+ // Remove metadata file
218
+ if (fs.existsSync(backup.metaPath)) {
219
+ fs.unlinkSync(backup.metaPath);
220
+ }
221
+ cleanedCount++;
222
+ }
223
+ catch (_error) {
224
+ // Skip files we can't delete
225
+ continue;
226
+ }
227
+ }
228
+ }
229
+ return cleanedCount;
230
+ }
231
+ /**
232
+ * Verify backup integrity
233
+ */
234
+ export function verifyBackupIntegrity(backupInfo) {
235
+ try {
236
+ if (!fs.existsSync(backupInfo.backupPath)) {
237
+ return false;
238
+ }
239
+ const content = fs.readFileSync(backupInfo.backupPath, 'utf8');
240
+ const checksum = crypto.createHash('sha256').update(content).digest('hex');
241
+ return checksum === backupInfo.checksum;
242
+ }
243
+ catch (_error) {
244
+ return false;
245
+ }
246
+ }
247
+ /**
248
+ * Format backup age for display
249
+ */
250
+ function formatAge(timestamp) {
251
+ const now = Date.now();
252
+ const diffMs = now - timestamp;
253
+ const diffMinutes = Math.floor(diffMs / (1000 * 60));
254
+ const diffHours = Math.floor(diffMs / (1000 * 60 * 60));
255
+ const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));
256
+ if (diffMinutes < 1) {
257
+ return 'just now';
258
+ }
259
+ else if (diffMinutes < 60) {
260
+ return `${diffMinutes}m ago`;
261
+ }
262
+ else if (diffHours < 24) {
263
+ return `${diffHours}h ago`;
264
+ }
265
+ else if (diffDays < 7) {
266
+ return `${diffDays}d ago`;
267
+ }
268
+ else {
269
+ const date = new Date(timestamp);
270
+ return date.toLocaleDateString();
271
+ }
272
+ }
273
+ /**
274
+ * File locking mechanism for atomic operations
275
+ */
276
+ export async function withFileLock(filePath, operation) {
277
+ const lockPath = `${filePath}.lock`;
278
+ // Simple file-based locking mechanism
279
+ let lockAcquired = false;
280
+ const maxRetries = 10;
281
+ const retryDelay = 100;
282
+ for (let i = 0; i < maxRetries; i++) {
283
+ try {
284
+ fs.writeFileSync(lockPath, process.pid.toString(), { flag: 'wx' });
285
+ lockAcquired = true;
286
+ break;
287
+ }
288
+ catch (error) {
289
+ if (error.code === 'EEXIST') {
290
+ // Lock file exists, wait and retry
291
+ await new Promise((resolve) => setTimeout(resolve, retryDelay));
292
+ continue;
293
+ }
294
+ throw error;
295
+ }
296
+ }
297
+ if (!lockAcquired) {
298
+ throw new Error(`Failed to acquire lock for ${filePath} after ${maxRetries} retries`);
299
+ }
300
+ try {
301
+ const result = await operation();
302
+ return result;
303
+ }
304
+ finally {
305
+ // Clean up lock file
306
+ try {
307
+ fs.unlinkSync(lockPath);
308
+ }
309
+ catch (_error) {
310
+ // Ignore cleanup errors
311
+ }
312
+ }
313
+ }
314
+ //# sourceMappingURL=backupManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backupManager.js","sourceRoot":"","sources":["../../src/utils/backupManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Multi-method URL detection system for app commands.
3
+ *
4
+ * Since app commands run standalone (not within serving process),
5
+ * the AgentConfigManager singleton isn't available. This module
6
+ * provides alternative detection methods with priority-based fallback.
7
+ */
8
+ /**
9
+ * Method 1: Detect URL from CLI arguments (highest priority)
10
+ */
11
+ export declare function detectUrlFromCliArgs(): string;
12
+ /**
13
+ * Method 2: Detect running server on common ports
14
+ */
15
+ export declare function detectRunningServerUrl(): Promise<string | null>;
16
+ /**
17
+ * Method 3: Detect URL from environment variables
18
+ */
19
+ export declare function detectUrlFromEnv(): string | null;
20
+ /**
21
+ * Method 4: Combined detection with priority fallback (primary implementation)
22
+ */
23
+ export declare function detectServer1mcpUrl(): Promise<string>;
24
+ /**
25
+ * Method 5: Get URL with user override (for command-specific URLs)
26
+ */
27
+ export declare function getServer1mcpUrl(userOverrideUrl?: string): Promise<string>;
28
+ /**
29
+ * Validate that a URL is accessible and appears to be a 1mcp server
30
+ */
31
+ export declare function validateServer1mcpUrl(url: string): Promise<{
32
+ valid: boolean;
33
+ error?: string;
34
+ }>;
35
+ //# sourceMappingURL=urlDetection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlDetection.d.ts","sourceRoot":"","sources":["../../src/utils/urlDetection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAiB7C;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAShD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAe3D;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhF;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAChE,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CA2BD"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Multi-method URL detection system for app commands.
3
+ *
4
+ * Since app commands run standalone (not within serving process),
5
+ * the AgentConfigManager singleton isn't available. This module
6
+ * provides alternative detection methods with priority-based fallback.
7
+ */
8
+ /**
9
+ * Method 1: Detect URL from CLI arguments (highest priority)
10
+ */
11
+ export function detectUrlFromCliArgs() {
12
+ const args = process.argv;
13
+ // Parse external-url flag
14
+ const externalUrlIndex = args.findIndex((arg) => arg === '--external-url' || arg === '-u');
15
+ if (externalUrlIndex !== -1 && args[externalUrlIndex + 1]) {
16
+ return `${args[externalUrlIndex + 1]}/mcp`;
17
+ }
18
+ // Parse host and port
19
+ const hostIndex = args.findIndex((arg) => arg === '--host' || arg === '-H');
20
+ const portIndex = args.findIndex((arg) => arg === '--port' || arg === '-P');
21
+ const host = hostIndex !== -1 && args[hostIndex + 1] ? args[hostIndex + 1] : 'localhost';
22
+ const port = portIndex !== -1 && args[portIndex + 1] ? args[portIndex + 1] : '3050';
23
+ return `http://${host}:${port}/mcp`;
24
+ }
25
+ /**
26
+ * Method 2: Detect running server on common ports
27
+ */
28
+ export async function detectRunningServerUrl() {
29
+ // Try common ports and check /oauth endpoint (which always exists)
30
+ const commonPorts = [3050, 3051, 3052];
31
+ for (const port of commonPorts) {
32
+ try {
33
+ const response = await fetch(`http://localhost:${port}/oauth/`, {
34
+ signal: AbortSignal.timeout(2000),
35
+ });
36
+ if (response.ok) {
37
+ return `http://localhost:${port}/mcp`;
38
+ }
39
+ }
40
+ catch {
41
+ // Continue to next port
42
+ }
43
+ }
44
+ return null;
45
+ }
46
+ /**
47
+ * Method 3: Detect URL from environment variables
48
+ */
49
+ export function detectUrlFromEnv() {
50
+ const externalUrl = process.env.ONE_MCP_EXTERNAL_URL;
51
+ if (externalUrl) {
52
+ return `${externalUrl}/mcp`;
53
+ }
54
+ const host = process.env.ONE_MCP_HOST || 'localhost';
55
+ const port = process.env.ONE_MCP_PORT || '3050';
56
+ return `http://${host}:${port}/mcp`;
57
+ }
58
+ /**
59
+ * Method 4: Combined detection with priority fallback (primary implementation)
60
+ */
61
+ export async function detectServer1mcpUrl() {
62
+ // 1. Try CLI args first (highest priority)
63
+ const cliUrl = detectUrlFromCliArgs();
64
+ if (cliUrl !== 'http://localhost:3050/mcp')
65
+ return cliUrl; // Only use if non-default
66
+ // 2. Try running server detection
67
+ const runningUrl = await detectRunningServerUrl();
68
+ if (runningUrl)
69
+ return runningUrl;
70
+ // 3. Try environment variables
71
+ const envUrl = detectUrlFromEnv();
72
+ if (envUrl && envUrl !== 'http://localhost:3050/mcp')
73
+ return envUrl;
74
+ // 4. Default fallback
75
+ return 'http://localhost:3050/mcp';
76
+ }
77
+ /**
78
+ * Method 5: Get URL with user override (for command-specific URLs)
79
+ */
80
+ export async function getServer1mcpUrl(userOverrideUrl) {
81
+ if (userOverrideUrl) {
82
+ // Ensure URL ends with /mcp if not already present
83
+ return userOverrideUrl.endsWith('/mcp') ? userOverrideUrl : `${userOverrideUrl}/mcp`;
84
+ }
85
+ return await detectServer1mcpUrl();
86
+ }
87
+ /**
88
+ * Validate that a URL is accessible and appears to be a 1mcp server
89
+ */
90
+ export async function validateServer1mcpUrl(url) {
91
+ try {
92
+ // Remove /mcp suffix to test base URL
93
+ const baseUrl = url.replace('/mcp', '');
94
+ // Test basic connectivity to OAuth endpoint (which always exists)
95
+ const oauthResponse = await fetch(`${baseUrl}/oauth/`, {
96
+ signal: AbortSignal.timeout(5000),
97
+ });
98
+ if (!oauthResponse.ok) {
99
+ return {
100
+ valid: false,
101
+ error: `1mcp server not responding (HTTP ${oauthResponse.status})`,
102
+ };
103
+ }
104
+ // For MCP endpoint, we just verify OAuth is working since MCP requires POST with specific payload
105
+ // The OAuth endpoint responding successfully indicates the server is properly running
106
+ return { valid: true };
107
+ }
108
+ catch (error) {
109
+ return {
110
+ valid: false,
111
+ error: `Cannot connect to 1mcp server: ${error.message}`,
112
+ };
113
+ }
114
+ }
115
+ //# sourceMappingURL=urlDetection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urlDetection.js","sourceRoot":"","sources":["../../src/utils/urlDetection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Validation utilities for app configuration consolidation.
3
+ *
4
+ * Provides comprehensive validation for configuration files,
5
+ * server connectivity, and permission handling.
6
+ */
7
+ export interface ValidationResult {
8
+ valid: boolean;
9
+ errors: string[];
10
+ warnings: string[];
11
+ fixable: boolean;
12
+ }
13
+ export interface OperationPreview {
14
+ app: string;
15
+ configPath: string;
16
+ serversToImport: string[];
17
+ replacementUrl: string;
18
+ backupPath: string;
19
+ risks: string[];
20
+ }
21
+ /**
22
+ * Validate application configuration file
23
+ */
24
+ export declare function validateAppConfig(configPath: string, content: any): ValidationResult;
25
+ /**
26
+ * Validate 1mcp server connectivity
27
+ */
28
+ export declare function validateServer1mcpConnection(url: string): Promise<ValidationResult>;
29
+ /**
30
+ * Handle file permission errors with specific diagnostics
31
+ */
32
+ export declare function handlePermissionError(filePath: string, error: any): string;
33
+ /**
34
+ * Validate file system permissions for configuration operations
35
+ */
36
+ export declare function validateFilePermissions(configPath: string): ValidationResult;
37
+ /**
38
+ * Generate operation preview for user confirmation
39
+ */
40
+ export declare function generateOperationPreview(app: string, configPath: string, serversToImport: string[], replacementUrl: string, backupPath: string): OperationPreview;
41
+ /**
42
+ * Validate operation before execution
43
+ */
44
+ export declare function validateOperation(configPath: string, content: any, serverUrl: string): Promise<{
45
+ configValidation: ValidationResult;
46
+ permissionValidation: ValidationResult;
47
+ connectivityValidation: ValidationResult;
48
+ canProceed: boolean;
49
+ }>;
50
+ /**
51
+ * Validate that a path is safe (prevent path traversal attacks)
52
+ */
53
+ export declare function validateSafePath(filePath: string): boolean;
54
+ /**
55
+ * Validate JSON content safely
56
+ */
57
+ export declare function validateJsonContent(content: string): {
58
+ valid: boolean;
59
+ parsed?: any;
60
+ error?: string;
61
+ };
62
+ //# sourceMappingURL=validationHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationHelpers.d.ts","sourceRoot":"","sources":["../../src/utils/validationHelpers.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,gBAAgB,CAyDpF;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkCzF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,MAAM,CA2C1E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CA2C5E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EAAE,EACzB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,GACjB,gBAAgB,CAwBlB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,oBAAoB,EAAE,gBAAgB,CAAC;IACvC,sBAAsB,EAAE,gBAAgB,CAAC;IACzC,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC,CAaD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAoB1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAUrG"}