@kaitranntt/ccs 7.4.0 → 7.5.0-dev.1

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 (34) hide show
  1. package/dist/api/services/provider-presets.js +3 -3
  2. package/dist/api/services/provider-presets.js.map +1 -1
  3. package/dist/cliproxy/binary/downloader.d.ts +18 -5
  4. package/dist/cliproxy/binary/downloader.d.ts.map +1 -1
  5. package/dist/cliproxy/binary/downloader.js +231 -42
  6. package/dist/cliproxy/binary/downloader.js.map +1 -1
  7. package/dist/cliproxy/cliproxy-executor.d.ts.map +1 -1
  8. package/dist/cliproxy/cliproxy-executor.js +7 -5
  9. package/dist/cliproxy/cliproxy-executor.js.map +1 -1
  10. package/dist/cliproxy/proxy-detector.d.ts.map +1 -1
  11. package/dist/cliproxy/proxy-detector.js +13 -2
  12. package/dist/cliproxy/proxy-detector.js.map +1 -1
  13. package/dist/commands/api-command.js +1 -1
  14. package/dist/commands/api-command.js.map +1 -1
  15. package/dist/ui/assets/{accounts-Dh-YyrMr.js → accounts-CtHoujzN.js} +1 -1
  16. package/dist/ui/assets/{api-BD--YxEC.js → api-BgRcDdEY.js} +1 -1
  17. package/dist/ui/assets/{card-BNt5BoxV.js → card-B-B2DgVt.js} +1 -1
  18. package/dist/ui/assets/{cliproxy-BXPMccU3.js → cliproxy-DSIqB4Kc.js} +1 -1
  19. package/dist/ui/assets/{cliproxy-control-panel-6MX1omhU.js → cliproxy-control-panel-BQdbegqA.js} +1 -1
  20. package/dist/ui/assets/{confirm-dialog-ByFWLgbj.js → confirm-dialog-cDuBPIIs.js} +1 -1
  21. package/dist/ui/assets/{copilot-CqEqznro.js → copilot-6gXCaKKj.js} +2 -2
  22. package/dist/ui/assets/{globalenv-section-Clm7KhAu.js → globalenv-section-CRSV4042.js} +1 -1
  23. package/dist/ui/assets/{health-D-af7vZZ.js → health-xBbBsgEt.js} +1 -1
  24. package/dist/ui/assets/{index-CH-ASapz.js → index-BlJMdTol.js} +1 -1
  25. package/dist/ui/assets/{index-BeD4Y42W.js → index-CzA8ALA7.js} +1 -1
  26. package/dist/ui/assets/{index-DMC5M6N6.js → index-DtFSv99a.js} +3 -3
  27. package/dist/ui/assets/{index-CUmWQu6j.js → index-_cwEsFjm.js} +1 -1
  28. package/dist/ui/assets/{shared-CcXAytUi.js → shared-DjYeuzbT.js} +1 -1
  29. package/dist/ui/assets/{switch-DWo2CKz6.js → switch-DrBe8HmQ.js} +1 -1
  30. package/dist/ui/index.html +1 -1
  31. package/dist/web-server/model-pricing.d.ts.map +1 -1
  32. package/dist/web-server/model-pricing.js +6 -0
  33. package/dist/web-server/model-pricing.js.map +1 -1
  34. 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 (GitHub Copilot)',
33
+ description: 'Claude via Z.AI',
34
34
  baseUrl: 'https://api.z.ai/api/anthropic',
35
35
  defaultProfileName: 'glm',
36
- defaultModel: 'glm-4.6',
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.6',
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,kCAAkC;QAC/C,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"}
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"}
@@ -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;;;GAGG;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;CAClB;AAOD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,gBAAgB,EAC7B,OAAO,UAAQ,GACd,OAAO,CAAC,IAAI,CAAC,CAiEf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACrC,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAiCvE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4CxF"}
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: 3,
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
- reject(new Error('Redirect without location header'));
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).then(resolve).catch(reject);
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
- reject(new Error(`HTTP ${res.statusCode}: ${res.statusMessage}`));
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', (err) => {
80
- fs.unlink(destPath, () => { }); // Cleanup partial file
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
- const req = protocol.get(url, handleResponse);
90
- req.on('error', reject);
91
- req.setTimeout(60000, () => {
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
- reject(new Error('Download timeout (60s)'));
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.message;
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
- // Exponential backoff: 1s, 2s, 4s
116
- const delay = Math.pow(2, retries - 1) * 1000;
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] Retry ${retries}/${maxRetries} after ${delay}ms: ${lastError}`);
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 fetchText(url, verbose = false) {
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
- fetchText(redirectUrl, verbose).then(resolve).catch(reject);
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', () => resolve(data));
154
- res.on('error', reject);
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 req = protocol.get(url, handleResponse);
158
- req.on('error', reject);
159
- req.setTimeout(30000, () => {
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
- reject(new Error('Request timeout (30s)'));
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 fetchJson(url, verbose = false) {
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
- fetchJson(redirectUrl, verbose).then(resolve).catch(reject);
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', reject);
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', reject);
205
- req.setTimeout(10000, () => {
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
- reject(new Error('GitHub API timeout (10s)'));
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
@@ -1 +1 @@
1
- {"version":3,"file":"downloader.js","sourceRoot":"","sources":["../../../src/cliproxy/binary/downloader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"downloader.js","sourceRoot":"","sources":["../../../src/cliproxy/binary/downloader.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cliproxy-executor.d.ts","sourceRoot":"","sources":["../../src/cliproxy/cliproxy-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmBH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAyE3D;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM,GACnC,OAAO,CAAC,IAAI,CAAC,CAiiBf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAepE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,GAAE,MAA8B,EACzC,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"cliproxy-executor.d.ts","sourceRoot":"","sources":["../../src/cliproxy/cliproxy-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmBH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAyE3D;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM,GACnC,OAAO,CAAC,IAAI,CAAC,CAqiBf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAepE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,GAAE,MAA8B,EACzC,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,eAAe,sBAAsB,CAAC"}
@@ -380,14 +380,16 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
380
380
  if (proxyStatus.running && proxyStatus.verified) {
381
381
  // Healthy proxy found - join it
382
382
  if (proxyStatus.pid) {
383
- sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.pid) ?? undefined;
383
+ sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.pid, verbose) ?? undefined;
384
384
  }
385
385
  if (sessionId) {
386
386
  console.log((0, ui_1.info)(`Joined existing CLIProxy on port ${cfg.port} (${proxyStatus.method})`));
387
387
  }
388
388
  else {
389
- // Failed to register session, but proxy is running - continue anyway
390
- log(`Failed to register session but proxy is healthy, continuing...`);
389
+ // Failed to register session - proxy is running but we can't track it
390
+ // This happens when port-process detection fails (permissions, platform issues)
391
+ console.log((0, ui_1.info)(`Using existing CLIProxy on port ${cfg.port} (session tracking unavailable)`));
392
+ log(`PID=${proxyStatus.pid ?? 'unknown'}, session registration skipped`);
391
393
  }
392
394
  return; // Exit lock early, skip spawning
393
395
  }
@@ -397,7 +399,7 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
397
399
  const becameHealthy = await (0, proxy_detector_1.waitForProxyHealthy)(cfg.port, cfg.timeout);
398
400
  if (becameHealthy) {
399
401
  if (proxyStatus.pid) {
400
- sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.pid) ?? undefined;
402
+ sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.pid, verbose) ?? undefined;
401
403
  }
402
404
  console.log((0, ui_1.info)(`Joined CLIProxy after startup wait`));
403
405
  return; // Exit lock early
@@ -414,7 +416,7 @@ async function execClaudeWithCLIProxy(claudeCli, provider, args, config = {}) {
414
416
  // Last resort: try HTTP health check (handles Windows PID-XXXXX case)
415
417
  const isActuallyOurs = await (0, proxy_detector_1.waitForProxyHealthy)(cfg.port, 1000);
416
418
  if (isActuallyOurs) {
417
- sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.blocker.pid) ?? undefined;
419
+ sessionId = (0, proxy_detector_1.reclaimOrphanedProxy)(cfg.port, proxyStatus.blocker.pid, verbose) ?? undefined;
418
420
  console.log((0, ui_1.info)(`Reclaimed CLIProxy with unrecognized process name`));
419
421
  return;
420
422
  }