@kaitranntt/ccs 7.5.0 → 7.5.1-dev.2
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/dist/ccs.js +23 -6
- package/dist/ccs.js.map +1 -1
- package/dist/cliproxy/binary/downloader.d.ts +18 -5
- package/dist/cliproxy/binary/downloader.d.ts.map +1 -1
- package/dist/cliproxy/binary/downloader.js +231 -42
- package/dist/cliproxy/binary/downloader.js.map +1 -1
- package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
- package/dist/cliproxy/cliproxy-executor.js +7 -5
- package/dist/cliproxy/cliproxy-executor.js.map +1 -1
- package/dist/cliproxy/proxy-detector.d.ts.map +1 -1
- package/dist/cliproxy/proxy-detector.js +13 -2
- package/dist/cliproxy/proxy-detector.js.map +1 -1
- package/dist/commands/cliproxy-command.js +1 -1
- package/dist/commands/cliproxy-command.js.map +1 -1
- package/dist/commands/config-command.js +2 -2
- package/dist/commands/config-command.js.map +1 -1
- package/dist/commands/copilot-command.d.ts.map +1 -1
- package/dist/commands/copilot-command.js +16 -15
- package/dist/commands/copilot-command.js.map +1 -1
- package/dist/commands/help-command.d.ts.map +1 -1
- package/dist/commands/help-command.js +6 -2
- package/dist/commands/help-command.js.map +1 -1
- package/dist/commands/setup-command.d.ts +23 -0
- package/dist/commands/setup-command.d.ts.map +1 -0
- package/dist/commands/setup-command.js +382 -0
- package/dist/commands/setup-command.js.map +1 -0
- package/dist/commands/update-command.js +1 -0
- package/dist/commands/update-command.js.map +1 -1
- package/dist/copilot/copilot-executor.d.ts.map +1 -1
- package/dist/copilot/copilot-executor.js +10 -9
- package/dist/copilot/copilot-executor.js.map +1 -1
- package/dist/management/checks/types.d.ts.map +1 -1
- package/dist/management/checks/types.js +6 -5
- package/dist/management/checks/types.js.map +1 -1
- package/dist/management/doctor.d.ts.map +1 -1
- package/dist/management/doctor.js +4 -0
- package/dist/management/doctor.js.map +1 -1
- package/dist/management/recovery-manager.d.ts +3 -2
- package/dist/management/recovery-manager.d.ts.map +1 -1
- package/dist/management/recovery-manager.js +43 -25
- package/dist/management/recovery-manager.js.map +1 -1
- package/dist/utils/claude-dir-installer.d.ts.map +1 -1
- package/dist/utils/claude-dir-installer.js +15 -15
- package/dist/utils/claude-dir-installer.js.map +1 -1
- package/dist/utils/claude-symlink-manager.d.ts.map +1 -1
- package/dist/utils/claude-symlink-manager.js +21 -21
- package/dist/utils/claude-symlink-manager.js.map +1 -1
- package/dist/utils/error-manager.d.ts.map +1 -1
- package/dist/utils/error-manager.js +6 -0
- package/dist/utils/error-manager.js.map +1 -1
- package/dist/utils/progress-indicator.d.ts +2 -1
- package/dist/utils/progress-indicator.d.ts.map +1 -1
- package/dist/utils/progress-indicator.js +9 -7
- package/dist/utils/progress-indicator.js.map +1 -1
- package/dist/utils/websearch/status.d.ts +1 -0
- package/dist/utils/websearch/status.d.ts.map +1 -1
- package/dist/utils/websearch/status.js +10 -3
- package/dist/utils/websearch/status.js.map +1 -1
- package/package.json +1 -1
- package/scripts/postinstall.js +109 -67
package/dist/ccs.js
CHANGED
|
@@ -33,6 +33,7 @@ const error_manager_1 = require("./utils/error-manager");
|
|
|
33
33
|
const cliproxy_1 = require("./cliproxy");
|
|
34
34
|
const websearch_manager_1 = require("./utils/websearch-manager");
|
|
35
35
|
const unified_config_loader_1 = require("./config/unified-config-loader");
|
|
36
|
+
const ui_1 = require("./utils/ui");
|
|
36
37
|
// Import centralized error handling
|
|
37
38
|
const errors_1 = require("./errors");
|
|
38
39
|
// Import extracted command handlers
|
|
@@ -72,7 +73,7 @@ async function execClaudeWithProxy(claudeCli, profileName, args) {
|
|
|
72
73
|
const envData = settings.env;
|
|
73
74
|
const apiKey = envData['ANTHROPIC_AUTH_TOKEN'];
|
|
74
75
|
if (!apiKey || apiKey === 'YOUR_GLM_API_KEY_HERE') {
|
|
75
|
-
console.error('
|
|
76
|
+
console.error((0, ui_1.fail)('GLMT profile requires Z.AI API key'));
|
|
76
77
|
console.error(' Edit ~/.ccs/glmt.settings.json and set ANTHROPIC_AUTH_TOKEN');
|
|
77
78
|
process.exit(1);
|
|
78
79
|
}
|
|
@@ -124,7 +125,7 @@ async function execClaudeWithProxy(claudeCli, profileName, args) {
|
|
|
124
125
|
catch (error) {
|
|
125
126
|
const err = error;
|
|
126
127
|
spinner.fail('Failed to start GLMT proxy');
|
|
127
|
-
console.error(
|
|
128
|
+
console.error((0, ui_1.fail)(`Error: ${err.message}`));
|
|
128
129
|
console.error('');
|
|
129
130
|
console.error('Possible causes:');
|
|
130
131
|
console.error(' 1. Port conflict (unlikely with random port)');
|
|
@@ -180,7 +181,7 @@ async function execClaudeWithProxy(claudeCli, profileName, args) {
|
|
|
180
181
|
process.exit(code || 0);
|
|
181
182
|
});
|
|
182
183
|
claude.on('error', (error) => {
|
|
183
|
-
console.error(
|
|
184
|
+
console.error((0, ui_1.fail)(`Claude CLI error: ${error}`));
|
|
184
185
|
proxy.kill('SIGTERM');
|
|
185
186
|
process.exit(1);
|
|
186
187
|
});
|
|
@@ -357,6 +358,12 @@ async function main() {
|
|
|
357
358
|
await handleConfigCommand(args.slice(1));
|
|
358
359
|
return;
|
|
359
360
|
}
|
|
361
|
+
// Special case: setup command (first-time wizard)
|
|
362
|
+
if (firstArg === 'setup' || firstArg === '--setup') {
|
|
363
|
+
const { handleSetupCommand } = await Promise.resolve().then(() => __importStar(require('./commands/setup-command')));
|
|
364
|
+
await handleSetupCommand(args.slice(1));
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
360
367
|
// Special case: copilot command (GitHub Copilot integration)
|
|
361
368
|
// Only route to command handler for known subcommands, otherwise treat as profile
|
|
362
369
|
const COPILOT_SUBCOMMANDS = [
|
|
@@ -392,6 +399,16 @@ async function main() {
|
|
|
392
399
|
if (recovered) {
|
|
393
400
|
recovery.showRecoveryHints();
|
|
394
401
|
}
|
|
402
|
+
// First-time install: offer setup wizard for interactive users
|
|
403
|
+
// Check independently of recovery status (user may have empty config.yaml)
|
|
404
|
+
// Skip if headless, CI, or non-TTY environment
|
|
405
|
+
const { isFirstTimeInstall } = await Promise.resolve().then(() => __importStar(require('./commands/setup-command')));
|
|
406
|
+
if (process.stdout.isTTY && !process.env['CI'] && isFirstTimeInstall()) {
|
|
407
|
+
console.log('');
|
|
408
|
+
console.log((0, ui_1.info)('First-time install detected. Run `ccs setup` for guided configuration.'));
|
|
409
|
+
console.log(' Or use `ccs config` for the web dashboard.');
|
|
410
|
+
console.log('');
|
|
411
|
+
}
|
|
395
412
|
// Detect profile
|
|
396
413
|
const { profile, remainingArgs } = detectProfile(args);
|
|
397
414
|
// Detect Claude CLI first (needed for all paths)
|
|
@@ -421,7 +438,7 @@ async function main() {
|
|
|
421
438
|
const { executeCopilotProfile } = await Promise.resolve().then(() => __importStar(require('./copilot')));
|
|
422
439
|
const copilotConfig = profileInfo.copilotConfig;
|
|
423
440
|
if (!copilotConfig) {
|
|
424
|
-
console.error('
|
|
441
|
+
console.error((0, ui_1.fail)('Copilot configuration not found'));
|
|
425
442
|
process.exit(1);
|
|
426
443
|
}
|
|
427
444
|
const exitCode = await executeCopilotProfile(copilotConfig, remainingArgs);
|
|
@@ -450,7 +467,7 @@ async function main() {
|
|
|
450
467
|
// Log global env injection for visibility (debug mode only)
|
|
451
468
|
if (globalEnvConfig.enabled && Object.keys(globalEnv).length > 0 && process.env.CCS_DEBUG) {
|
|
452
469
|
const envNames = Object.keys(globalEnv).join(', ');
|
|
453
|
-
console.error(`
|
|
470
|
+
console.error((0, ui_1.info)(`Global env: ${envNames}`));
|
|
454
471
|
}
|
|
455
472
|
// CRITICAL: Load settings and explicitly set ANTHROPIC_* env vars
|
|
456
473
|
// to prevent inheriting stale values from previous CLIProxy sessions.
|
|
@@ -508,7 +525,7 @@ async function main() {
|
|
|
508
525
|
await error_manager_1.ErrorManager.showProfileNotFound(err.profileName, allProfiles, err.suggestions);
|
|
509
526
|
}
|
|
510
527
|
else {
|
|
511
|
-
console.error(
|
|
528
|
+
console.error((0, ui_1.fail)(err.message));
|
|
512
529
|
}
|
|
513
530
|
process.exit(1);
|
|
514
531
|
}
|
package/dist/ccs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ccs.js","sourceRoot":"","sources":["../src/ccs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ccs.js","sourceRoot":"","sources":["../src/ccs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Binary Downloader
|
|
3
3
|
* Handles downloading files with retry logic, progress tracking, and redirect following.
|
|
4
|
+
* Robust handling for transient network errors (socket hang up, ECONNRESET, etc.)
|
|
4
5
|
*/
|
|
5
6
|
import { DownloadResult, ProgressCallback } from '../types';
|
|
6
7
|
/** Default configuration for downloader */
|
|
@@ -9,21 +10,33 @@ export interface DownloaderConfig {
|
|
|
9
10
|
maxRetries: number;
|
|
10
11
|
/** Enable verbose logging */
|
|
11
12
|
verbose: boolean;
|
|
13
|
+
/** Timeout in milliseconds (default: 120000 for large files) */
|
|
14
|
+
timeout?: number;
|
|
12
15
|
}
|
|
16
|
+
/** Error types for categorized handling */
|
|
17
|
+
export type NetworkErrorType = 'socket' | 'timeout' | 'http' | 'redirect' | 'unknown';
|
|
18
|
+
/** Categorize error for appropriate retry/reporting */
|
|
19
|
+
export declare function categorizeError(error: Error): NetworkErrorType;
|
|
20
|
+
/** Get user-friendly error message */
|
|
21
|
+
export declare function getErrorMessage(error: Error, attempt: number, maxAttempts: number): string;
|
|
22
|
+
/** Check if error is retryable */
|
|
23
|
+
export declare function isRetryableError(error: Error): boolean;
|
|
13
24
|
/**
|
|
14
25
|
* Download file from URL with progress tracking
|
|
26
|
+
* @param timeout Timeout in ms (default 120000 for large files)
|
|
15
27
|
*/
|
|
16
|
-
export declare function downloadFile(url: string, destPath: string, onProgress?: ProgressCallback, verbose?: boolean): Promise<void>;
|
|
28
|
+
export declare function downloadFile(url: string, destPath: string, onProgress?: ProgressCallback, verbose?: boolean, timeout?: number): Promise<void>;
|
|
17
29
|
/**
|
|
18
30
|
* Download file with retry logic and exponential backoff
|
|
31
|
+
* Uses smarter backoff for socket errors (longer delays)
|
|
19
32
|
*/
|
|
20
33
|
export declare function downloadWithRetry(url: string, destPath: string, config?: Partial<DownloaderConfig>): Promise<DownloadResult>;
|
|
21
34
|
/**
|
|
22
|
-
* Fetch text content from URL
|
|
35
|
+
* Fetch text content from URL with retry logic
|
|
23
36
|
*/
|
|
24
|
-
export declare function fetchText(url: string, verbose?: boolean): Promise<string>;
|
|
37
|
+
export declare function fetchText(url: string, verbose?: boolean, maxRetries?: number): Promise<string>;
|
|
25
38
|
/**
|
|
26
|
-
* Fetch JSON from URL (for GitHub API)
|
|
39
|
+
* Fetch JSON from URL (for GitHub API) with retry logic
|
|
27
40
|
*/
|
|
28
|
-
export declare function fetchJson(url: string, verbose?: boolean): Promise<Record<string, unknown>>;
|
|
41
|
+
export declare function fetchJson(url: string, verbose?: boolean, maxRetries?: number): Promise<Record<string, unknown>>;
|
|
29
42
|
//# sourceMappingURL=downloader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/binary/downloader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../../../src/cliproxy/binary/downloader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5D,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtF,uDAAuD;AACvD,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAe9D;AAED,sCAAsC;AACtC,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAgB1F;AAED,kCAAkC;AAClC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAYtD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,gBAAgB,EAC7B,OAAO,UAAQ,EACf,OAAO,SAAS,GACf,OAAO,CAAC,IAAI,CAAC,CAuFf;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACrC,OAAO,CAAC,cAAc,CAAC,CAsDzB;AAmED;;GAEG;AACH,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,EAAE,UAAU,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB7F;AAyED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,UAAQ,EACf,UAAU,SAAI,GACb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAuBlC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Binary Downloader
|
|
4
4
|
* Handles downloading files with retry logic, progress tracking, and redirect following.
|
|
5
|
+
* Robust handling for transient network errors (socket hang up, ECONNRESET, etc.)
|
|
5
6
|
*/
|
|
6
7
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
8
|
if (k2 === undefined) k2 = k;
|
|
@@ -27,35 +28,98 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
27
28
|
return result;
|
|
28
29
|
};
|
|
29
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
-
exports.fetchJson = exports.fetchText = exports.downloadWithRetry = exports.downloadFile = void 0;
|
|
31
|
+
exports.fetchJson = exports.fetchText = exports.downloadWithRetry = exports.downloadFile = exports.isRetryableError = exports.getErrorMessage = exports.categorizeError = void 0;
|
|
31
32
|
const fs = __importStar(require("fs"));
|
|
32
33
|
const https = __importStar(require("https"));
|
|
33
34
|
const http = __importStar(require("http"));
|
|
34
35
|
const DEFAULT_CONFIG = {
|
|
35
|
-
maxRetries:
|
|
36
|
+
maxRetries: 5,
|
|
36
37
|
verbose: false,
|
|
38
|
+
timeout: 120000, // 2 minutes for large binaries
|
|
37
39
|
};
|
|
40
|
+
/** Categorize error for appropriate retry/reporting */
|
|
41
|
+
function categorizeError(error) {
|
|
42
|
+
const msg = error.message.toLowerCase();
|
|
43
|
+
if (msg.includes('socket hang up') || msg.includes('econnreset') || msg.includes('epipe')) {
|
|
44
|
+
return 'socket';
|
|
45
|
+
}
|
|
46
|
+
if (msg.includes('timeout') || msg.includes('etimedout')) {
|
|
47
|
+
return 'timeout';
|
|
48
|
+
}
|
|
49
|
+
if (msg.includes('http ')) {
|
|
50
|
+
return 'http';
|
|
51
|
+
}
|
|
52
|
+
if (msg.includes('redirect')) {
|
|
53
|
+
return 'redirect';
|
|
54
|
+
}
|
|
55
|
+
return 'unknown';
|
|
56
|
+
}
|
|
57
|
+
exports.categorizeError = categorizeError;
|
|
58
|
+
/** Get user-friendly error message */
|
|
59
|
+
function getErrorMessage(error, attempt, maxAttempts) {
|
|
60
|
+
const type = categorizeError(error);
|
|
61
|
+
const prefix = `[Attempt ${attempt}/${maxAttempts}]`;
|
|
62
|
+
switch (type) {
|
|
63
|
+
case 'socket':
|
|
64
|
+
return `${prefix} Connection dropped (socket hang up) - retrying with fresh connection...`;
|
|
65
|
+
case 'timeout':
|
|
66
|
+
return `${prefix} Download timed out - retrying with extended timeout...`;
|
|
67
|
+
case 'http':
|
|
68
|
+
return `${prefix} Server error: ${error.message}`;
|
|
69
|
+
case 'redirect':
|
|
70
|
+
return `${prefix} Redirect failed: ${error.message}`;
|
|
71
|
+
default:
|
|
72
|
+
return `${prefix} Network error: ${error.message}`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.getErrorMessage = getErrorMessage;
|
|
76
|
+
/** Check if error is retryable */
|
|
77
|
+
function isRetryableError(error) {
|
|
78
|
+
const type = categorizeError(error);
|
|
79
|
+
// Retry socket errors, timeouts, and unknown errors
|
|
80
|
+
if (type === 'socket' || type === 'timeout' || type === 'unknown') {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
if (type === 'http') {
|
|
84
|
+
const msg = error.message;
|
|
85
|
+
// Retry 5xx server errors and 429 rate limit (HTTP 5xx matches 500, 502, 503, 504, etc.)
|
|
86
|
+
return msg.includes('HTTP 5') || msg.includes('HTTP 429');
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
exports.isRetryableError = isRetryableError;
|
|
38
91
|
/**
|
|
39
92
|
* Download file from URL with progress tracking
|
|
93
|
+
* @param timeout Timeout in ms (default 120000 for large files)
|
|
40
94
|
*/
|
|
41
|
-
function downloadFile(url, destPath, onProgress, verbose = false) {
|
|
95
|
+
function downloadFile(url, destPath, onProgress, verbose = false, timeout = 120000) {
|
|
42
96
|
return new Promise((resolve, reject) => {
|
|
97
|
+
let resolved = false;
|
|
98
|
+
const cleanup = (err) => {
|
|
99
|
+
if (resolved)
|
|
100
|
+
return;
|
|
101
|
+
resolved = true;
|
|
102
|
+
fs.unlink(destPath, () => { }); // Cleanup partial file
|
|
103
|
+
reject(err || new Error('Download aborted'));
|
|
104
|
+
};
|
|
43
105
|
const handleResponse = (res) => {
|
|
44
106
|
// Handle redirects (GitHub releases use 302)
|
|
45
107
|
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
46
108
|
const redirectUrl = res.headers.location;
|
|
47
109
|
if (!redirectUrl) {
|
|
48
|
-
|
|
110
|
+
cleanup(new Error('Redirect without location header'));
|
|
49
111
|
return;
|
|
50
112
|
}
|
|
51
113
|
if (verbose) {
|
|
52
114
|
console.error(`[cliproxy] Following redirect: ${redirectUrl}`);
|
|
53
115
|
}
|
|
54
|
-
downloadFile(redirectUrl, destPath, onProgress, verbose)
|
|
116
|
+
downloadFile(redirectUrl, destPath, onProgress, verbose, timeout)
|
|
117
|
+
.then(resolve)
|
|
118
|
+
.catch(reject);
|
|
55
119
|
return;
|
|
56
120
|
}
|
|
57
121
|
if (res.statusCode !== 200) {
|
|
58
|
-
|
|
122
|
+
cleanup(new Error(`HTTP ${res.statusCode}: ${res.statusMessage}`));
|
|
59
123
|
return;
|
|
60
124
|
}
|
|
61
125
|
const totalBytes = parseInt(res.headers['content-length'] || '0', 10);
|
|
@@ -73,49 +137,83 @@ function downloadFile(url, destPath, onProgress, verbose = false) {
|
|
|
73
137
|
});
|
|
74
138
|
res.pipe(fileStream);
|
|
75
139
|
fileStream.on('finish', () => {
|
|
140
|
+
if (resolved)
|
|
141
|
+
return;
|
|
142
|
+
resolved = true;
|
|
76
143
|
fileStream.close();
|
|
77
144
|
resolve();
|
|
78
145
|
});
|
|
79
|
-
fileStream.on('error',
|
|
80
|
-
|
|
81
|
-
reject(err);
|
|
82
|
-
});
|
|
83
|
-
res.on('error', (err) => {
|
|
84
|
-
fs.unlink(destPath, () => { });
|
|
85
|
-
reject(err);
|
|
86
|
-
});
|
|
146
|
+
fileStream.on('error', cleanup);
|
|
147
|
+
res.on('error', cleanup);
|
|
87
148
|
};
|
|
88
149
|
const protocol = url.startsWith('https') ? https : http;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
150
|
+
// Use agent: false to prevent connection pooling (allows process to exit)
|
|
151
|
+
const options = {
|
|
152
|
+
headers: {
|
|
153
|
+
'User-Agent': 'CCS-CLIProxyPlus-Downloader/1.0',
|
|
154
|
+
},
|
|
155
|
+
agent: false, // Disable connection pooling for clean exit
|
|
156
|
+
};
|
|
157
|
+
const req = protocol.get(url, options, handleResponse);
|
|
158
|
+
req.on('error', (err) => {
|
|
159
|
+
if (!resolved) {
|
|
160
|
+
cleanup(err);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
req.setTimeout(timeout, () => {
|
|
92
164
|
req.destroy();
|
|
93
|
-
|
|
165
|
+
if (!resolved) {
|
|
166
|
+
cleanup(new Error(`Download timeout (${timeout / 1000}s)`));
|
|
167
|
+
}
|
|
94
168
|
});
|
|
95
169
|
});
|
|
96
170
|
}
|
|
97
171
|
exports.downloadFile = downloadFile;
|
|
98
172
|
/**
|
|
99
173
|
* Download file with retry logic and exponential backoff
|
|
174
|
+
* Uses smarter backoff for socket errors (longer delays)
|
|
100
175
|
*/
|
|
101
176
|
async function downloadWithRetry(url, destPath, config = {}) {
|
|
102
|
-
const { maxRetries, verbose } = { ...DEFAULT_CONFIG, ...config };
|
|
103
|
-
let lastError =
|
|
177
|
+
const { maxRetries, verbose, timeout } = { ...DEFAULT_CONFIG, ...config };
|
|
178
|
+
let lastError = null;
|
|
104
179
|
let retries = 0;
|
|
180
|
+
let currentTimeout = timeout || 120000;
|
|
105
181
|
while (retries < maxRetries) {
|
|
106
182
|
try {
|
|
107
|
-
await downloadFile(url, destPath, undefined, verbose);
|
|
183
|
+
await downloadFile(url, destPath, undefined, verbose, currentTimeout);
|
|
108
184
|
return { success: true, filePath: destPath, retries };
|
|
109
185
|
}
|
|
110
186
|
catch (error) {
|
|
111
187
|
const err = error;
|
|
112
|
-
lastError = err
|
|
188
|
+
lastError = err;
|
|
113
189
|
retries++;
|
|
190
|
+
// Check if error is retryable
|
|
191
|
+
if (!isRetryableError(err)) {
|
|
192
|
+
if (verbose) {
|
|
193
|
+
console.error(`[cliproxy] Non-retryable error: ${err.message}`);
|
|
194
|
+
}
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
114
197
|
if (retries < maxRetries) {
|
|
115
|
-
|
|
116
|
-
|
|
198
|
+
const errorType = categorizeError(err);
|
|
199
|
+
// Socket errors: longer backoff (2s, 4s, 8s, 16s, 32s)
|
|
200
|
+
// Timeout errors: increase timeout and use standard backoff
|
|
201
|
+
// Other errors: standard exponential backoff (1s, 2s, 4s...)
|
|
202
|
+
let delay;
|
|
203
|
+
if (errorType === 'socket') {
|
|
204
|
+
delay = Math.pow(2, retries) * 1000; // 2s, 4s, 8s, 16s, 32s
|
|
205
|
+
}
|
|
206
|
+
else if (errorType === 'timeout') {
|
|
207
|
+
delay = Math.pow(2, retries - 1) * 1000;
|
|
208
|
+
currentTimeout = Math.min(currentTimeout * 1.5, 300000); // Increase timeout up to 5 min
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
delay = Math.pow(2, retries - 1) * 1000;
|
|
212
|
+
}
|
|
213
|
+
// Log with user-friendly message
|
|
214
|
+
console.error(`[cliproxy] ${getErrorMessage(err, retries, maxRetries)}`);
|
|
117
215
|
if (verbose) {
|
|
118
|
-
console.error(`[cliproxy]
|
|
216
|
+
console.error(`[cliproxy] Waiting ${delay}ms before retry...`);
|
|
119
217
|
}
|
|
120
218
|
await sleep(delay);
|
|
121
219
|
}
|
|
@@ -123,16 +221,17 @@ async function downloadWithRetry(url, destPath, config = {}) {
|
|
|
123
221
|
}
|
|
124
222
|
return {
|
|
125
223
|
success: false,
|
|
126
|
-
error: `Download failed after ${retries} attempts: ${lastError}`,
|
|
224
|
+
error: `Download failed after ${retries} attempts: ${lastError?.message || 'Unknown error'}`,
|
|
127
225
|
retries,
|
|
128
226
|
};
|
|
129
227
|
}
|
|
130
228
|
exports.downloadWithRetry = downloadWithRetry;
|
|
131
229
|
/**
|
|
132
|
-
* Fetch text content from URL
|
|
230
|
+
* Fetch text content from URL (single attempt)
|
|
133
231
|
*/
|
|
134
|
-
function
|
|
232
|
+
function fetchTextOnce(url, verbose = false, timeout = 30000) {
|
|
135
233
|
return new Promise((resolve, reject) => {
|
|
234
|
+
let resolved = false;
|
|
136
235
|
const handleResponse = (res) => {
|
|
137
236
|
// Handle redirects
|
|
138
237
|
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
@@ -141,7 +240,7 @@ function fetchText(url, verbose = false) {
|
|
|
141
240
|
reject(new Error('Redirect without location header'));
|
|
142
241
|
return;
|
|
143
242
|
}
|
|
144
|
-
|
|
243
|
+
fetchTextOnce(redirectUrl, verbose, timeout).then(resolve).catch(reject);
|
|
145
244
|
return;
|
|
146
245
|
}
|
|
147
246
|
if (res.statusCode !== 200) {
|
|
@@ -150,29 +249,79 @@ function fetchText(url, verbose = false) {
|
|
|
150
249
|
}
|
|
151
250
|
let data = '';
|
|
152
251
|
res.on('data', (chunk) => (data += chunk));
|
|
153
|
-
res.on('end', () =>
|
|
154
|
-
|
|
252
|
+
res.on('end', () => {
|
|
253
|
+
if (!resolved) {
|
|
254
|
+
resolved = true;
|
|
255
|
+
resolve(data);
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
res.on('error', (err) => {
|
|
259
|
+
if (!resolved) {
|
|
260
|
+
resolved = true;
|
|
261
|
+
reject(err);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
155
264
|
};
|
|
156
265
|
const protocol = url.startsWith('https') ? https : http;
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
266
|
+
const options = {
|
|
267
|
+
headers: {
|
|
268
|
+
'User-Agent': 'CCS-CLIProxyPlus-Downloader/1.0',
|
|
269
|
+
},
|
|
270
|
+
agent: false, // Disable connection pooling for clean exit
|
|
271
|
+
};
|
|
272
|
+
const req = protocol.get(url, options, handleResponse);
|
|
273
|
+
req.on('error', (err) => {
|
|
274
|
+
if (!resolved) {
|
|
275
|
+
resolved = true;
|
|
276
|
+
reject(err);
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
req.setTimeout(timeout, () => {
|
|
160
280
|
req.destroy();
|
|
161
|
-
|
|
281
|
+
if (!resolved) {
|
|
282
|
+
resolved = true;
|
|
283
|
+
reject(new Error(`Request timeout (${timeout / 1000}s)`));
|
|
284
|
+
}
|
|
162
285
|
});
|
|
163
286
|
});
|
|
164
287
|
}
|
|
288
|
+
/**
|
|
289
|
+
* Fetch text content from URL with retry logic
|
|
290
|
+
*/
|
|
291
|
+
async function fetchText(url, verbose = false, maxRetries = 3) {
|
|
292
|
+
let lastError = null;
|
|
293
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
294
|
+
try {
|
|
295
|
+
return await fetchTextOnce(url, verbose);
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
const err = error;
|
|
299
|
+
lastError = err;
|
|
300
|
+
if (!isRetryableError(err) || attempt === maxRetries) {
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
const delay = Math.pow(2, attempt - 1) * 1000;
|
|
304
|
+
if (verbose) {
|
|
305
|
+
console.error(`[cliproxy] fetchText retry ${attempt}/${maxRetries}: ${err.message}`);
|
|
306
|
+
}
|
|
307
|
+
await sleep(delay);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
throw lastError || new Error('fetchText failed');
|
|
311
|
+
}
|
|
165
312
|
exports.fetchText = fetchText;
|
|
166
313
|
/**
|
|
167
|
-
* Fetch JSON from URL (for GitHub API)
|
|
314
|
+
* Fetch JSON from URL (single attempt, for GitHub API)
|
|
168
315
|
*/
|
|
169
|
-
function
|
|
316
|
+
function fetchJsonOnce(url, verbose = false, timeout = 15000) {
|
|
170
317
|
return new Promise((resolve, reject) => {
|
|
318
|
+
let resolved = false;
|
|
171
319
|
const options = {
|
|
172
320
|
headers: {
|
|
173
321
|
'User-Agent': 'CCS-CLIProxyPlus-Updater/1.0',
|
|
174
322
|
Accept: 'application/vnd.github.v3+json',
|
|
175
323
|
},
|
|
324
|
+
agent: false, // Disable connection pooling for clean exit
|
|
176
325
|
};
|
|
177
326
|
const handleResponse = (res) => {
|
|
178
327
|
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
@@ -181,7 +330,7 @@ function fetchJson(url, verbose = false) {
|
|
|
181
330
|
reject(new Error('Redirect without location header'));
|
|
182
331
|
return;
|
|
183
332
|
}
|
|
184
|
-
|
|
333
|
+
fetchJsonOnce(redirectUrl, verbose, timeout).then(resolve).catch(reject);
|
|
185
334
|
return;
|
|
186
335
|
}
|
|
187
336
|
if (res.statusCode !== 200) {
|
|
@@ -191,6 +340,9 @@ function fetchJson(url, verbose = false) {
|
|
|
191
340
|
let data = '';
|
|
192
341
|
res.on('data', (chunk) => (data += chunk));
|
|
193
342
|
res.on('end', () => {
|
|
343
|
+
if (resolved)
|
|
344
|
+
return;
|
|
345
|
+
resolved = true;
|
|
194
346
|
try {
|
|
195
347
|
resolve(JSON.parse(data));
|
|
196
348
|
}
|
|
@@ -198,16 +350,53 @@ function fetchJson(url, verbose = false) {
|
|
|
198
350
|
reject(new Error('Invalid JSON from GitHub API'));
|
|
199
351
|
}
|
|
200
352
|
});
|
|
201
|
-
res.on('error',
|
|
353
|
+
res.on('error', (err) => {
|
|
354
|
+
if (!resolved) {
|
|
355
|
+
resolved = true;
|
|
356
|
+
reject(err);
|
|
357
|
+
}
|
|
358
|
+
});
|
|
202
359
|
};
|
|
203
360
|
const req = https.get(url, options, handleResponse);
|
|
204
|
-
req.on('error',
|
|
205
|
-
|
|
361
|
+
req.on('error', (err) => {
|
|
362
|
+
if (!resolved) {
|
|
363
|
+
resolved = true;
|
|
364
|
+
reject(err);
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
req.setTimeout(timeout, () => {
|
|
206
368
|
req.destroy();
|
|
207
|
-
|
|
369
|
+
if (!resolved) {
|
|
370
|
+
resolved = true;
|
|
371
|
+
reject(new Error(`GitHub API timeout (${timeout / 1000}s)`));
|
|
372
|
+
}
|
|
208
373
|
});
|
|
209
374
|
});
|
|
210
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* Fetch JSON from URL (for GitHub API) with retry logic
|
|
378
|
+
*/
|
|
379
|
+
async function fetchJson(url, verbose = false, maxRetries = 3) {
|
|
380
|
+
let lastError = null;
|
|
381
|
+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
|
382
|
+
try {
|
|
383
|
+
return await fetchJsonOnce(url, verbose);
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
const err = error;
|
|
387
|
+
lastError = err;
|
|
388
|
+
if (!isRetryableError(err) || attempt === maxRetries) {
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
const delay = Math.pow(2, attempt - 1) * 1000;
|
|
392
|
+
if (verbose) {
|
|
393
|
+
console.error(`[cliproxy] GitHub API retry ${attempt}/${maxRetries}: ${err.message}`);
|
|
394
|
+
}
|
|
395
|
+
await sleep(delay);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
throw lastError || new Error('fetchJson failed');
|
|
399
|
+
}
|
|
211
400
|
exports.fetchJson = fetchJson;
|
|
212
401
|
/**
|
|
213
402
|
* Sleep helper
|