refactor(branding): rename app to EasyCLIProxyAPI

This commit is contained in:
lzt404 committed 2026-07-19 21:43:47 +08:00
1 parent cd9432fa73
commit 8b687f5fe0
16 files changed
+32 -37

No files matched your search

+2 -2
View File
@@ -137,7 +137,7 @@ jobs:
exit 1 exit 1
fi fi
echo "stem=Easy_CLIProxyAPI-${version}-${{ matrix.display_os }}-${{ matrix.arch }}" >> "$GITHUB_OUTPUT" echo "stem=EasyCLIProxyAPI-${version}-${{ matrix.display_os }}-${{ matrix.arch }}" >> "$GITHUB_OUTPUT"
- name: Install Linux dependencies - name: Install Linux dependencies
if: matrix.os == 'linux' if: matrix.os == 'linux'
run: | run: |
@@ -223,7 +223,7 @@ jobs:
fi fi
prerelease="$MANUAL_PRERELEASE" prerelease="$MANUAL_PRERELEASE"
release_args=(--title "Easy_CLIProxyAPI $RELEASE_TAG" --generate-notes) release_args=(--title "EasyCLIProxyAPI $RELEASE_TAG" --generate-notes)
if [[ "$GITHUB_REF_TYPE" == "tag" ]]; then if [[ "$GITHUB_REF_TYPE" == "tag" ]]; then
release_args+=(--verify-tag) release_args+=(--verify-tag)
if [[ "$RELEASE_TAG" == *-* ]]; then if [[ "$RELEASE_TAG" == *-* ]]; then
+3 -5
View File
@@ -5,21 +5,19 @@
</p> </p>
<p align="center"> <p align="center">
<img src="src/assets/logo.jpg" width="112" alt="Easy_CLIProxyAPI Logo"> <img src="src/assets/logo.jpg" width="112" alt="EasyCLIProxyAPI Logo">
</p> </p>
<h1 align="center">Easy_CLIProxyAPI</h1> <h1 align="center">EasyCLIProxyAPI</h1>
<p align="center"> <p align="center">
私たちの目標は、トークンを free(無料ではなく、自由という意味)にすることです。<br> 私たちの目標は、トークンを free(無料ではなく、自由という意味)にすることです。<br>
</p> </p>
> [!IMPORTANT]
> このリポジトリは正式版です。より先進的で実験的な機能については、[lzt404/Easy_CLIProxyAPI](https://github.com/lzt404/Easy_CLIProxyAPI) をご覧ください。
## 概要 ## 概要
Easy_CLIProxyAPI は、[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI) をベースにしたポータブルツールです。コア、OAuth アカウント、API 接続、モデルルーティング、認証ファイル、クォータ情報、使用履歴、エージェントクライアント設定をグラフィカルなインターフェースから管理できます。 EasyCLIProxyAPI は、[CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI) をベースにしたポータブルツールです。コア、OAuth アカウント、API 接続、モデルルーティング、認証ファイル、クォータ情報、使用履歴、エージェントクライアント設定をグラフィカルなインターフェースから管理できます。
本アプリケーションは Tauri、React、Rust で構築されています。 本アプリケーションは Tauri、React、Rust で構築されています。
+3 -5
View File
@@ -5,21 +5,19 @@
</p> </p>
<p align="center"> <p align="center">
<img src="src/assets/logo.jpg" width="112" alt="Easy_CLIProxyAPI Logo"> <img src="src/assets/logo.jpg" width="112" alt="EasyCLIProxyAPI Logo">
</p> </p>
<h1 align="center">Easy_CLIProxyAPI</h1> <h1 align="center">EasyCLIProxyAPI</h1>
<p align="center"> <p align="center">
Our goal is to make tokens free—as in freedom.<br> Our goal is to make tokens free—as in freedom.<br>
</p> </p>
> [!IMPORTANT]
> This repository contains the official release. For more aggressive experimental features, visit [lzt404/Easy_CLIProxyAPI](https://github.com/lzt404/Easy_CLIProxyAPI).
## Overview ## Overview
Easy_CLIProxyAPI is a portable tool built on [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI). It provides a graphical interface for managing the core, OAuth accounts, API providers, model routing, authentication files, quota information, usage records, and agent client configurations. EasyCLIProxyAPI is a portable tool built on [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI). It provides a graphical interface for managing the core, OAuth accounts, API providers, model routing, authentication files, quota information, usage records, and agent client configurations.
The application is built with Tauri, React, and Rust. The application is built with Tauri, React, and Rust.
+3 -5
View File
@@ -5,21 +5,19 @@
</p> </p>
<p align="center"> <p align="center">
<img src="src/assets/logo.jpg" width="112" alt="Easy_CLIProxyAPI Logo"> <img src="src/assets/logo.jpg" width="112" alt="EasyCLIProxyAPI Logo">
</p> </p>
<h1 align="center">Easy_CLIProxyAPI</h1> <h1 align="center">EasyCLIProxyAPI</h1>
<p align="center"> <p align="center">
我们的目标是实现 token free(free 在这里的意思是自由)。<br> 我们的目标是实现 token free(free 在这里的意思是自由)。<br>
</p> </p>
> [!IMPORTANT]
> 当前仓库为正式版本,如需更为激进的实验性功能,请前往 [lzt404/Easy_CLIProxyAPI](https://github.com/lzt404/Easy_CLIProxyAPI)。
## 项目简介 ## 项目简介
Easy_CLIProxyAPI 是基于 [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI) 的便携工具,提供图形化界面管理内核、OAuth 账号、API 接入、模型路由、认证文件、配额查询、使用记录和智能体客户端配置。 EasyCLIProxyAPI 是基于 [CLIProxyAPI](https://github.com/router-for-me/CLIProxyAPI) 的便携工具,提供图形化界面管理内核、OAuth 账号、API 接入、模型路由、认证文件、配额查询、使用记录和智能体客户端配置。
软件基于 Tauri、React 和 Rust 构建。 软件基于 Tauri、React 和 Rust 构建。
+1 -1
View File
@@ -9,7 +9,7 @@ $ErrorActionPreference = 'Stop'
$RootDir = $PSScriptRoot $RootDir = $PSScriptRoot
$AppBin = Join-Path $RootDir 'src-tauri\target\release\cpa-gui.exe' $AppBin = Join-Path $RootDir 'src-tauri\target\release\cpa-gui.exe'
$BinDir = Join-Path $RootDir 'bin-work' $BinDir = Join-Path $RootDir 'bin-work'
$BinOut = Join-Path $BinDir 'Easy_CLIProxyAPI.exe' $BinOut = Join-Path $BinDir 'EasyCLIProxyAPI.exe'
$PreparePortable = Join-Path $RootDir 'scripts\prepare-portable.mjs' $PreparePortable = Join-Path $RootDir 'scripts\prepare-portable.mjs'
Set-Location -LiteralPath $RootDir Set-Location -LiteralPath $RootDir
+1 -1
View File
@@ -7,7 +7,7 @@ cd "$ROOT_DIR"
BUILD_JOBS="${CARGO_BUILD_JOBS:-20}" BUILD_JOBS="${CARGO_BUILD_JOBS:-20}"
APP_BIN="$ROOT_DIR/src-tauri/target/release/cpa-gui" APP_BIN="$ROOT_DIR/src-tauri/target/release/cpa-gui"
BIN_DIR="$ROOT_DIR/bin-work" BIN_DIR="$ROOT_DIR/bin-work"
BIN_OUT="$BIN_DIR/Easy_CLIProxyAPI" BIN_OUT="$BIN_DIR/EasyCLIProxyAPI"
if ! command -v bun >/dev/null 2>&1; then if ! command -v bun >/dev/null 2>&1; then
echo "bun is not installed or not in PATH." echo "bun is not installed or not in PATH."
+1 -1
View File
@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Easy_CLIProxyAPI</title> <title>EasyCLIProxyAPI</title>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
+1 -1
View File
@@ -6,7 +6,7 @@ $ErrorActionPreference = 'Stop'
$RootDir = $PSScriptRoot $RootDir = $PSScriptRoot
$BinDir = Join-Path $RootDir 'bin-work' $BinDir = Join-Path $RootDir 'bin-work'
$AppBin = Join-Path $BinDir 'Easy_CLIProxyAPI.exe' $AppBin = Join-Path $BinDir 'EasyCLIProxyAPI.exe'
if (-not (Test-Path -LiteralPath $AppBin -PathType Leaf)) { if (-not (Test-Path -LiteralPath $AppBin -PathType Leaf)) {
Write-Host "Executable not found: $AppBin" Write-Host "Executable not found: $AppBin"
+1 -1
View File
@@ -2,7 +2,7 @@
set -euo pipefail set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
APP_BIN="$ROOT_DIR/bin-work/Easy_CLIProxyAPI" APP_BIN="$ROOT_DIR/bin-work/EasyCLIProxyAPI"
if [ ! -x "$APP_BIN" ]; then if [ ! -x "$APP_BIN" ]; then
echo "Executable not found: $APP_BIN" echo "Executable not found: $APP_BIN"
+1 -1
View File
@@ -53,7 +53,7 @@ if (existsSync(checksumsPath)) {
} }
await mkdir(output, { recursive: true }); await mkdir(output, { recursive: true });
const outputBinary = join(output, targetOS === 'windows' ? 'Easy_CLIProxyAPI.exe' : 'Easy_CLIProxyAPI'); const outputBinary = join(output, targetOS === 'windows' ? 'EasyCLIProxyAPI.exe' : 'EasyCLIProxyAPI');
const legacyOutputBinary = join(output, targetOS === 'windows' ? 'cpa-gui.exe' : 'cpa-gui'); const legacyOutputBinary = join(output, targetOS === 'windows' ? 'cpa-gui.exe' : 'cpa-gui');
await rm(legacyOutputBinary, { force: true }); await rm(legacyOutputBinary, { force: true });
await copyFile(binary, outputBinary); await copyFile(binary, outputBinary);
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "../gen/schemas/desktop-schema.json", "$schema": "../gen/schemas/desktop-schema.json",
"identifier": "default", "identifier": "default",
"description": "Default permissions for the main Easy_CLIProxyAPI window.", "description": "Default permissions for the main EasyCLIProxyAPI window.",
"windows": ["main"], "windows": ["main"],
"permissions": ["core:event:allow-listen", "core:event:allow-unlisten"] "permissions": ["core:event:allow-listen", "core:event:allow-unlisten"]
} }
+9 -8
View File
@@ -26,7 +26,8 @@ const RELEASE_PAGE_URL: &str = "https://github.com/router-for-me/CLIProxyAPI/rel
const RELEASE_ATOM_URL: &str = "https://github.com/router-for-me/CLIProxyAPI/releases.atom"; const RELEASE_ATOM_URL: &str = "https://github.com/router-for-me/CLIProxyAPI/releases.atom";
const RELEASE_DOWNLOAD_PREFIX: &str = const RELEASE_DOWNLOAD_PREFIX: &str =
"https://github.com/router-for-me/CLIProxyAPI/releases/download/"; "https://github.com/router-for-me/CLIProxyAPI/releases/download/";
const APP_RELEASE_PAGE_URL: &str = "https://github.com/lzt404/Easy_CLIProxyAPI/releases/latest"; const APP_RELEASE_PAGE_URL: &str =
"https://github.com/router-for-me/EasyCLIProxyAPI/releases/latest";
const CORE_INSTALL_PROGRESS_EVENT: &str = "core-install-progress"; const CORE_INSTALL_PROGRESS_EVENT: &str = "core-install-progress";
const CORE_STATUS_EVENT: &str = "core-status-changed"; const CORE_STATUS_EVENT: &str = "core-status-changed";
const CORE_METADATA_FILE: &str = "cpa-gui-meta.json"; const CORE_METADATA_FILE: &str = "cpa-gui-meta.json";
@@ -56,9 +57,9 @@ const USER_AGENT: &str = concat!(
" (+https://github.com/router-for-me/CLIProxyAPI)" " (+https://github.com/router-for-me/CLIProxyAPI)"
); );
const APP_USER_AGENT: &str = concat!( const APP_USER_AGENT: &str = concat!(
"Easy_CLIProxyAPI/", "EasyCLIProxyAPI/",
env!("CARGO_PKG_VERSION"), env!("CARGO_PKG_VERSION"),
" (+https://github.com/lzt404/Easy_CLIProxyAPI)" " (+https://github.com/router-for-me/EasyCLIProxyAPI)"
); );
static CORE_CONFIG_FILE_LOCK: Mutex<()> = Mutex::new(()); static CORE_CONFIG_FILE_LOCK: Mutex<()> = Mutex::new(());
static AGENT_CONFIG_FILE_LOCK: Mutex<()> = Mutex::new(()); static AGENT_CONFIG_FILE_LOCK: Mutex<()> = Mutex::new(());
@@ -823,7 +824,7 @@ struct GithubAsset {
#[tauri::command] #[tauri::command]
fn health_check() -> &'static str { fn health_check() -> &'static str {
"Easy_CLIProxyAPI Rust backend is ready" "EasyCLIProxyAPI Rust backend is ready"
} }
#[tauri::command] #[tauri::command]
@@ -2932,7 +2933,7 @@ fn build_claude_desktop_meta(existing: Option<&str>) -> Result<String, String> {
}); });
entries.push(serde_json::json!({ entries.push(serde_json::json!({
"id": CLAUDE_DESKTOP_PROFILE_ID, "id": CLAUDE_DESKTOP_PROFILE_ID,
"name": "Easy CLIProxyAPI" "name": "EasyCLIProxyAPI"
})); }));
root.insert( root.insert(
"appliedId".to_string(), "appliedId".to_string(),
@@ -2969,7 +2970,7 @@ fn build_codex_agent_config(
.and_then(Item::as_table) .and_then(Item::as_table)
.cloned() .cloned()
.unwrap_or_default(); .unwrap_or_default();
provider["name"] = value("Easy CLIProxyAPI"); provider["name"] = value("EasyCLIProxyAPI");
provider["base_url"] = value(base_url); provider["base_url"] = value(base_url);
provider["wire_api"] = value("responses"); provider["wire_api"] = value("responses");
provider["experimental_bearer_token"] = value(api_key); provider["experimental_bearer_token"] = value(api_key);
@@ -3088,7 +3089,7 @@ fn build_opencode_agent_config(
MANAGED_AGENT_PROVIDER_ID.to_string(), MANAGED_AGENT_PROVIDER_ID.to_string(),
serde_json::json!({ serde_json::json!({
"npm": "@ai-sdk/openai-compatible", "npm": "@ai-sdk/openai-compatible",
"name": "Easy CLIProxyAPI", "name": "EasyCLIProxyAPI",
"options": { "options": {
"baseURL": base_url, "baseURL": base_url,
"apiKey": api_key "apiKey": api_key
@@ -5444,7 +5445,7 @@ fn configure_child_lifetime(command: &mut Command) {
if libc::getppid() != parent_process_id { if libc::getppid() != parent_process_id {
return Err(io::Error::other( return Err(io::Error::other(
"Easy_CLIProxyAPI exited before the core process started", "EasyCLIProxyAPI exited before the core process started",
)); ));
} }
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"$schema": "https://schema.tauri.app/config/2", "$schema": "https://schema.tauri.app/config/2",
"productName": "Easy_CLIProxyAPI", "productName": "EasyCLIProxyAPI",
"version": "0.2.0", "version": "0.2.0",
"identifier": "com.cpa.gui", "identifier": "com.cpa.gui",
"build": { "build": {
@@ -13,7 +13,7 @@
"windows": [ "windows": [
{ {
"label": "main", "label": "main",
"title": "Easy_CLIProxyAPI", "title": "EasyCLIProxyAPI",
"width": 1200, "width": 1200,
"height": 810, "height": 810,
"minWidth": 900, "minWidth": 900,
+1 -1
View File
@@ -128,7 +128,7 @@ function AppContent() {
<div className="sidebar-brand" title="CLI Proxy API GUI"> <div className="sidebar-brand" title="CLI Proxy API GUI">
<img src={appLogo} alt="" className="brand-mark brand-logo" /> <img src={appLogo} alt="" className="brand-mark brand-logo" />
<div> <div>
<strong>Easy CLIProxyAPI</strong> <strong>EasyCLIProxyAPI</strong>
<span>Desktop Console</span> <span>Desktop Console</span>
</div> </div>
</div> </div>
+1 -1
View File
@@ -11,7 +11,7 @@ export class AppErrorBoundary extends Component<Props, State> {
} }
componentDidCatch(error: Error, info: ErrorInfo) { componentDidCatch(error: Error, info: ErrorInfo) {
console.error('Easy_CLIProxyAPI 渲染异常', error, info.componentStack); console.error('EasyCLIProxyAPI 渲染异常', error, info.componentStack);
} }
render() { render() {
+1 -1
View File
@@ -63,7 +63,7 @@ type AppUpdateInfo = {
releaseUrl: string; releaseUrl: string;
}; };
const APP_RELEASE_URL = 'https://github.com/lzt404/Easy_CLIProxyAPI/releases/latest'; const APP_RELEASE_URL = 'https://github.com/router-for-me/EasyCLIProxyAPI/releases/latest';
let latestAutoCheckStarted = false; let latestAutoCheckStarted = false;
let cachedLatest: CoreLatest | null = null; let cachedLatest: CoreLatest | null = null;