@kaitranntt/ccs 7.4.0 → 7.5.0-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/api/services/provider-presets.js +3 -3
- package/dist/api/services/provider-presets.js.map +1 -1
- package/dist/ccs.js +7 -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/api-command.js +1 -1
- package/dist/commands/api-command.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/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/ui/assets/{accounts-Dh-YyrMr.js → accounts-CtHoujzN.js} +1 -1
- package/dist/ui/assets/{api-BD--YxEC.js → api-BgRcDdEY.js} +1 -1
- package/dist/ui/assets/{card-BNt5BoxV.js → card-B-B2DgVt.js} +1 -1
- package/dist/ui/assets/{cliproxy-BXPMccU3.js → cliproxy-DSIqB4Kc.js} +1 -1
- package/dist/ui/assets/{cliproxy-control-panel-6MX1omhU.js → cliproxy-control-panel-BQdbegqA.js} +1 -1
- package/dist/ui/assets/{confirm-dialog-ByFWLgbj.js → confirm-dialog-cDuBPIIs.js} +1 -1
- package/dist/ui/assets/{copilot-CqEqznro.js → copilot-6gXCaKKj.js} +2 -2
- package/dist/ui/assets/{globalenv-section-Clm7KhAu.js → globalenv-section-CRSV4042.js} +1 -1
- package/dist/ui/assets/{health-D-af7vZZ.js → health-xBbBsgEt.js} +1 -1
- package/dist/ui/assets/{index-CH-ASapz.js → index-BlJMdTol.js} +1 -1
- package/dist/ui/assets/{index-BeD4Y42W.js → index-CzA8ALA7.js} +1 -1
- package/dist/ui/assets/{index-DMC5M6N6.js → index-DtFSv99a.js} +3 -3
- package/dist/ui/assets/{index-CUmWQu6j.js → index-_cwEsFjm.js} +1 -1
- package/dist/ui/assets/{shared-CcXAytUi.js → shared-DjYeuzbT.js} +1 -1
- package/dist/ui/assets/{switch-DWo2CKz6.js → switch-DrBe8HmQ.js} +1 -1
- package/dist/ui/index.html +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/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/dist/web-server/model-pricing.d.ts.map +1 -1
- package/dist/web-server/model-pricing.js +6 -0
- package/dist/web-server/model-pricing.js.map +1 -1
- package/package.json +1 -1
|
@@ -30,10 +30,10 @@ exports.PROVIDER_PRESETS = [
|
|
|
30
30
|
{
|
|
31
31
|
id: 'glm',
|
|
32
32
|
name: 'GLM',
|
|
33
|
-
description: 'Claude via Z.AI
|
|
33
|
+
description: 'Claude via Z.AI',
|
|
34
34
|
baseUrl: 'https://api.z.ai/api/anthropic',
|
|
35
35
|
defaultProfileName: 'glm',
|
|
36
|
-
defaultModel: 'glm-4.
|
|
36
|
+
defaultModel: 'glm-4.7',
|
|
37
37
|
apiKeyPlaceholder: 'ghp_...',
|
|
38
38
|
apiKeyHint: 'Get your API key from Z.AI',
|
|
39
39
|
category: 'alternative',
|
|
@@ -44,7 +44,7 @@ exports.PROVIDER_PRESETS = [
|
|
|
44
44
|
description: 'GLM with Thinking mode support',
|
|
45
45
|
baseUrl: 'https://api.z.ai/api/coding/paas/v4/chat/completions',
|
|
46
46
|
defaultProfileName: 'glmt',
|
|
47
|
-
defaultModel: 'glm-4.
|
|
47
|
+
defaultModel: 'glm-4.7',
|
|
48
48
|
apiKeyPlaceholder: 'ghp_...',
|
|
49
49
|
apiKeyHint: 'Same API key as GLM',
|
|
50
50
|
category: 'alternative',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-presets.js","sourceRoot":"","sources":["../../../src/api/services/provider-presets.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAoBU,QAAA,mBAAmB,GAAG,2BAA2B,CAAC;AAE/D;;;;GAIG;AACU,QAAA,gBAAgB,GAAqB;IAChD,cAAc;IACd;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,kDAAkD;QAC/D,OAAO,EAAE,2BAAmB;QAC5B,kBAAkB,EAAE,YAAY;QAChC,YAAY,EAAE,2BAA2B;QACzC,iBAAiB,EAAE,WAAW;QAC9B,UAAU,EAAE,wCAAwC;QACpD,QAAQ,EAAE,aAAa;KACxB;IACD,wBAAwB;IACxB;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"provider-presets.js","sourceRoot":"","sources":["../../../src/api/services/provider-presets.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAoBU,QAAA,mBAAmB,GAAG,2BAA2B,CAAC;AAE/D;;;;GAIG;AACU,QAAA,gBAAgB,GAAqB;IAChD,cAAc;IACd;QACE,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,kDAAkD;QAC/D,OAAO,EAAE,2BAAmB;QAC5B,kBAAkB,EAAE,YAAY;QAChC,YAAY,EAAE,2BAA2B;QACzC,iBAAiB,EAAE,WAAW;QAC9B,UAAU,EAAE,wCAAwC;QACpD,QAAQ,EAAE,aAAa;KACxB;IACD,wBAAwB;IACxB;QACE,EAAE,EAAE,KAAK;QACT,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,iBAAiB;QAC9B,OAAO,EAAE,gCAAgC;QACzC,kBAAkB,EAAE,KAAK;QACzB,YAAY,EAAE,SAAS;QACvB,iBAAiB,EAAE,SAAS;QAC5B,UAAU,EAAE,4BAA4B;QACxC,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,gCAAgC;QAC7C,OAAO,EAAE,sDAAsD;QAC/D,kBAAkB,EAAE,MAAM;QAC1B,YAAY,EAAE,SAAS;QACvB,iBAAiB,EAAE,SAAS;QAC5B,UAAU,EAAE,qBAAqB;QACjC,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE;YACR,qBAAqB,EAAE,KAAK;YAC5B,oBAAoB,EAAE,OAAO;YAC7B,mBAAmB,EAAE,OAAO;YAC5B,gBAAgB,EAAE,MAAM;YACxB,mBAAmB,EAAE,OAAO;YAC5B,cAAc,EAAE,SAAS;SAC1B;QACD,qBAAqB,EAAE,IAAI;KAC5B;IACD;QACE,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,8BAA8B;QACvC,kBAAkB,EAAE,MAAM;QAC1B,YAAY,EAAE,wBAAwB;QACtC,iBAAiB,EAAE,QAAQ;QAC3B,UAAU,EAAE,mCAAmC;QAC/C,QAAQ,EAAE,aAAa;QACvB,qBAAqB,EAAE,IAAI;KAC5B;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uCAAuC;QACpD,OAAO,EAAE,6DAA6D;QACtE,kBAAkB,EAAE,SAAS;QAC7B,YAAY,EAAE,mBAAmB;QACjC,iBAAiB,EAAE,oBAAoB;QACvC,UAAU,EAAE,4DAA4D;QACxE,QAAQ,EAAE,aAAa;KACxB;CACF,CAAC;AAEF,uBAAuB;AACvB,SAAgB,aAAa,CAAC,EAAU;IACtC,OAAO,wBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACjE,CAAC;AAFD,sCAEC;AAED,yBAAyB;AACzB,SAAgB,YAAY;IAC1B,OAAO,wBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3C,CAAC;AAFD,oCAEC;AAED,kCAAkC;AAClC,SAAgB,eAAe,CAAC,EAAU;IACxC,OAAO,aAAa,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;AACzC,CAAC;AAFD,0CAEC"}
|
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
|
});
|
|
@@ -421,7 +422,7 @@ async function main() {
|
|
|
421
422
|
const { executeCopilotProfile } = await Promise.resolve().then(() => __importStar(require('./copilot')));
|
|
422
423
|
const copilotConfig = profileInfo.copilotConfig;
|
|
423
424
|
if (!copilotConfig) {
|
|
424
|
-
console.error('
|
|
425
|
+
console.error((0, ui_1.fail)('Copilot configuration not found'));
|
|
425
426
|
process.exit(1);
|
|
426
427
|
}
|
|
427
428
|
const exitCode = await executeCopilotProfile(copilotConfig, remainingArgs);
|
|
@@ -450,7 +451,7 @@ async function main() {
|
|
|
450
451
|
// Log global env injection for visibility (debug mode only)
|
|
451
452
|
if (globalEnvConfig.enabled && Object.keys(globalEnv).length > 0 && process.env.CCS_DEBUG) {
|
|
452
453
|
const envNames = Object.keys(globalEnv).join(', ');
|
|
453
|
-
console.error(`
|
|
454
|
+
console.error((0, ui_1.info)(`Global env: ${envNames}`));
|
|
454
455
|
}
|
|
455
456
|
// CRITICAL: Load settings and explicitly set ANTHROPIC_* env vars
|
|
456
457
|
// to prevent inheriting stale values from previous CLIProxy sessions.
|
|
@@ -508,7 +509,7 @@ async function main() {
|
|
|
508
509
|
await error_manager_1.ErrorManager.showProfileNotFound(err.profileName, allProfiles, err.suggestions);
|
|
509
510
|
}
|
|
510
511
|
else {
|
|
511
|
-
console.error(
|
|
512
|
+
console.error((0, ui_1.fail)(err.message));
|
|
512
513
|
}
|
|
513
514
|
process.exit(1);
|
|
514
515
|
}
|
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
|