From 70bf0806f33bcf33e74dbe7a10b258879dc9f104 Mon Sep 17 00:00:00 2001 From: juwain Date: Mon, 4 May 2026 14:59:14 +0300 Subject: [PATCH 1/3] fix: use aarch64 for CLIProxy arm assets --- src/cliproxy/binary/platform-detector.ts | 8 ++++---- .../types/__tests__/types-backward-compat.test.ts | 4 ++-- src/cliproxy/types/platform-types.ts | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cliproxy/binary/platform-detector.ts b/src/cliproxy/binary/platform-detector.ts index 9c1d2f9f..1692a356 100644 --- a/src/cliproxy/binary/platform-detector.ts +++ b/src/cliproxy/binary/platform-detector.ts @@ -2,7 +2,7 @@ * Platform Detector for CLIProxyAPI Binary Downloads * * Detects OS and architecture to determine correct binary asset. - * Supports 6 platforms: darwin/linux/windows x amd64/arm64 + * Supports 6 platforms: darwin/linux/windows x amd64/aarch64 */ import { @@ -75,7 +75,7 @@ const OS_MAP: Record = { const ARCH_MAP: Record = { x64: 'amd64', - arm64: 'arm64', + arm64: 'aarch64', }; /** @@ -103,7 +103,7 @@ export function detectPlatform( if (!arch) { throw new Error( - `Unsupported CPU architecture: ${nodeArch}\n` + `Supported: x64 (amd64), arm64` + `Unsupported CPU architecture: ${nodeArch}\n` + `Supported: x64 (amd64), arm64 (aarch64)` ); } @@ -195,7 +195,7 @@ export function isPlatformSupported(): boolean { /** * Get human-readable platform description - * @returns Description string (e.g., "macOS arm64") + * @returns Description string (e.g., "macOS aarch64") */ export function getPlatformDescription(): string { try { diff --git a/src/cliproxy/types/__tests__/types-backward-compat.test.ts b/src/cliproxy/types/__tests__/types-backward-compat.test.ts index 5ee676ad..9d38736b 100644 --- a/src/cliproxy/types/__tests__/types-backward-compat.test.ts +++ b/src/cliproxy/types/__tests__/types-backward-compat.test.ts @@ -34,7 +34,7 @@ import { PLUS_ONLY_PROVIDERS } from '../../types'; describe('types.ts backward compatibility', () => { it('exports all platform types', () => { const os: SupportedOS = 'darwin'; - const arch: SupportedArch = 'arm64'; + const arch: SupportedArch = 'aarch64'; const ext: ArchiveExtension = 'tar.gz'; const info: PlatformInfo = { os, @@ -43,7 +43,7 @@ describe('types.ts backward compatibility', () => { extension: ext, }; expect(info.os).toBe('darwin'); - expect(info.arch).toBe('arm64'); + expect(info.arch).toBe('aarch64'); }); it('exports all binary types', () => { diff --git a/src/cliproxy/types/platform-types.ts b/src/cliproxy/types/platform-types.ts index 0fdd0f65..e05646c7 100644 --- a/src/cliproxy/types/platform-types.ts +++ b/src/cliproxy/types/platform-types.ts @@ -6,7 +6,7 @@ export type SupportedOS = 'darwin' | 'linux' | 'windows'; /** Supported CPU architectures */ -export type SupportedArch = 'amd64' | 'arm64'; +export type SupportedArch = 'amd64' | 'aarch64'; /** Archive extension based on platform */ export type ArchiveExtension = 'tar.gz' | 'zip'; From 4acc81c08221dbdff79319998ab1e290645ebb45 Mon Sep 17 00:00:00 2001 From: juwain Date: Mon, 4 May 2026 15:36:37 +0300 Subject: [PATCH 2/3] style: apply prettier formatting --- src/cliproxy/quota/quota-manager.ts | 5 ++--- src/management/checks/image-analysis-check.ts | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/cliproxy/quota/quota-manager.ts b/src/cliproxy/quota/quota-manager.ts index 4493aeb6..39841eb6 100644 --- a/src/cliproxy/quota/quota-manager.ts +++ b/src/cliproxy/quota/quota-manager.ts @@ -524,9 +524,8 @@ export async function preflightCheck(provider: CLIProxyProvider): Promise * Fix image analysis configuration issues */ export async function fixImageAnalysisConfig(): Promise { - const { updateConfig, loadOrCreateUnifiedConfig } = await import( - '../../config/config-loader-facade' - ); + const { updateConfig, loadOrCreateUnifiedConfig } = + await import('../../config/config-loader-facade'); const config = loadOrCreateUnifiedConfig(); let fixed = false; From 2274cef6588b01e818b60e042481d31dc2f83dd1 Mon Sep 17 00:00:00 2001 From: Tam Nhu Tran Date: Mon, 4 May 2026 10:44:20 -0400 Subject: [PATCH 3/3] fix: preserve arm64 compatibility for CLIProxy assets --- src/cliproxy/binary/platform-detector.ts | 11 ++++++++--- .../config/__tests__/backend-selection.test.js | 5 +++++ src/cliproxy/quota/quota-manager.ts | 5 +++-- .../types/__tests__/types-backward-compat.test.ts | 2 ++ src/cliproxy/types/platform-types.ts | 4 ++-- src/management/checks/image-analysis-check.ts | 5 +++-- 6 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/cliproxy/binary/platform-detector.ts b/src/cliproxy/binary/platform-detector.ts index 1692a356..521d72b4 100644 --- a/src/cliproxy/binary/platform-detector.ts +++ b/src/cliproxy/binary/platform-detector.ts @@ -78,6 +78,10 @@ const ARCH_MAP: Record = { arm64: 'aarch64', }; +export function mapNodeArchToReleaseArch(nodeArch: string): SupportedArch | undefined { + return ARCH_MAP[nodeArch]; +} + /** * Detect current platform and return binary info * @param version Optional version for binaryName (defaults to backend fallback) @@ -92,7 +96,7 @@ export function detectPlatform( const nodeArch = process.arch; const os = OS_MAP[nodePlatform]; - const arch = ARCH_MAP[nodeArch]; + const arch = mapNodeArchToReleaseArch(nodeArch); if (!os) { throw new Error( @@ -195,14 +199,15 @@ export function isPlatformSupported(): boolean { /** * Get human-readable platform description - * @returns Description string (e.g., "macOS aarch64") + * @returns Description string (e.g., "macOS ARM64") */ export function getPlatformDescription(): string { try { const platform = detectPlatform(); const osName = platform.os === 'darwin' ? 'macOS' : platform.os === 'linux' ? 'Linux' : 'Windows'; - return `${osName} ${platform.arch}`; + const archName = platform.arch === 'aarch64' ? 'ARM64' : platform.arch; + return `${osName} ${archName}`; } catch { return `${process.platform} ${process.arch} (unsupported)`; } diff --git a/src/cliproxy/config/__tests__/backend-selection.test.js b/src/cliproxy/config/__tests__/backend-selection.test.js index 5c547984..a8bcb4b3 100644 --- a/src/cliproxy/config/__tests__/backend-selection.test.js +++ b/src/cliproxy/config/__tests__/backend-selection.test.js @@ -34,6 +34,11 @@ describe('Backend Selection', () => { }); describe('detectPlatform', () => { + it('maps Node arm64 to CLIProxy aarch64 release assets', () => { + assert.strictEqual(platformDetector.mapNodeArchToReleaseArch('arm64'), 'aarch64'); + assert.strictEqual(platformDetector.mapNodeArchToReleaseArch('x64'), 'amd64'); + }); + it('generates correct binary name for original backend', () => { const info = platformDetector.detectPlatform('6.6.51', 'original'); assert(info.binaryName.startsWith('CLIProxyAPI_6.6.51_')); diff --git a/src/cliproxy/quota/quota-manager.ts b/src/cliproxy/quota/quota-manager.ts index 39841eb6..4493aeb6 100644 --- a/src/cliproxy/quota/quota-manager.ts +++ b/src/cliproxy/quota/quota-manager.ts @@ -524,8 +524,9 @@ export async function preflightCheck(provider: CLIProxyProvider): Promise { it('exports all platform types', () => { const os: SupportedOS = 'darwin'; const arch: SupportedArch = 'aarch64'; + const nodeArch: SupportedArch = 'arm64'; const ext: ArchiveExtension = 'tar.gz'; const info: PlatformInfo = { os, @@ -44,6 +45,7 @@ describe('types.ts backward compatibility', () => { }; expect(info.os).toBe('darwin'); expect(info.arch).toBe('aarch64'); + expect(nodeArch).toBe('arm64'); }); it('exports all binary types', () => { diff --git a/src/cliproxy/types/platform-types.ts b/src/cliproxy/types/platform-types.ts index e05646c7..84f27d2d 100644 --- a/src/cliproxy/types/platform-types.ts +++ b/src/cliproxy/types/platform-types.ts @@ -5,8 +5,8 @@ /** Supported operating systems */ export type SupportedOS = 'darwin' | 'linux' | 'windows'; -/** Supported CPU architectures */ -export type SupportedArch = 'amd64' | 'aarch64'; +/** Supported CPU architecture labels from Node.js and CLIProxy release assets */ +export type SupportedArch = 'amd64' | 'arm64' | 'aarch64'; /** Archive extension based on platform */ export type ArchiveExtension = 'tar.gz' | 'zip'; diff --git a/src/management/checks/image-analysis-check.ts b/src/management/checks/image-analysis-check.ts index d6d2dc05..50e9ba99 100644 --- a/src/management/checks/image-analysis-check.ts +++ b/src/management/checks/image-analysis-check.ts @@ -112,8 +112,9 @@ export async function runImageAnalysisCheck(results: HealthCheck): Promise * Fix image analysis configuration issues */ export async function fixImageAnalysisConfig(): Promise { - const { updateConfig, loadOrCreateUnifiedConfig } = - await import('../../config/config-loader-facade'); + const { updateConfig, loadOrCreateUnifiedConfig } = await import( + '../../config/config-loader-facade' + ); const config = loadOrCreateUnifiedConfig(); let fixed = false;