# ProxyCast 完整配置文档 ## 系统原理 ``` 你的 AI 凭证 ProxyCast 任意 AI 工具 ┌─────────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ Kiro OAuth │ │ │ │ Claude Code │ │ Gemini API Keys │ ───▶ │ 本地 API │ ───▶ │ Cherry Studio │ │ Qwen OAuth │ │ 代理服务 │ │ Cursor / Cline │ │ OpenRouter │ │ :8999 │ │ 你的 AI Agent │ └─────────────────┘ └─────────────┘ └─────────────────────┘ ``` ProxyCast 把你已有的 AI 凭证转换成标准 OpenAI/Anthropic API,让任何支持这些接口的工具都能用。 --- ## 一、启动 ProxyCast ```bash cd /mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main && ./src-tauri/target/release/proxycast & ``` 服务监听:`http://127.0.0.1:8999` --- ## 二、Claude Code 启动命令 ### Claude Opus 4.6 (Kiro 凭证,最强) ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-opus-4-5 ``` ### Claude Sonnet 4.5 (Kiro 凭证) ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-sonnet-4-5 ``` ### DeepSeek R1 (OpenRouter 免费,推理最强) ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model deepseek/deepseek-r1-0528:free ``` ### Gemini 2.0 Flash (OpenRouter 免费) ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model google/gemini-2.0-flash-exp:free ``` ### Llama 3.1 405B (OpenRouter 免费,综合最强) ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model meta-llama/llama-3.1-405b-instruct:free ``` ### Devstral 2 (OpenRouter 免费,代码专精) ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model mistralai/devstral-2512:free ``` ### Gemini 3 Pro Preview - 最新预览版 ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-3-pro-preview ### Gemini 2.5 Pro - Pro 版本 ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-2.5-pro ``` ### Gemini 2.5 Pro Preview ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-2.5-pro-preview-06-05 ``` ### Gemini 2.5 Flash - 快速版本 ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-2.5-flash ``` ### Gemini 2.5 Flash Lite - 轻量版本 ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-2.5-flash-lite ``` --- ## 三、API 直接调用 ### 通用配置 ``` API Base URL: http://127.0.0.1:8999/v1 API Key: proxy_cast ``` ### cURL 示例 ```bash curl http://127.0.0.1:8999/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer proxy_cast" \ -d '{ "model": "claude-opus-4-5", "messages": [{"role": "user", "content": "Hello"}] }' ``` ### 获取可用模型列表 ```bash curl http://127.0.0.1:8999/v1/models -H "Authorization: Bearer proxy_cast" ``` --- ## 四、可用模型列表 ### Kiro 凭证 (Claude) | 模型 | 说明 | |------|------| | `claude-opus-4-5` | 最强模型 | | `claude-sonnet-4-5` | 平衡性能 | | `claude-sonnet-4-5-20250929` | Sonnet 特定版本 | | `claude-3-7-sonnet-20250219` | Claude 3.7 | | `claude-3-5-sonnet-latest` | Claude 3.5 | ### Gemini API Keys (8个轮询负载均衡) | 模型 | 说明 | |------|------| | `gemini-3-pro-preview` | 最新预览版 | | `gemini-2.5-pro` | Pro 版本 | | `gemini-2.5-flash` | 快速版本 | | `gemini-2.5-flash-lite` | 轻量版本 | ### Qwen OAuth | 模型 | 说明 | |------|------| | `qwen3-coder-plus` | 代码增强版 | | `qwen3-coder-flash` | 快速版本 | ### OpenRouter 免费模型 | 模型 | 说明 | |------|------| | `deepseek/deepseek-r1-0528:free` | 推理最强 | | `google/gemini-2.0-flash-exp:free` | 翻译首选 | | `meta-llama/llama-3.1-405b-instruct:free` | 综合最强 | | `meta-llama/llama-3.3-70b-instruct:free` | 速度快 | | `mistralai/devstral-2512:free` | 代码专精 123B | | `nousresearch/hermes-3-llama-3.1-405b:free` | 指令遵循好 | | `openai/gpt-oss-120b:free` | GPT 开源 120B | | `openai/gpt-oss-20b:free` | GPT 开源 20B | | `moonshotai/kimi-k2:free` | Kimi K2.5 月之暗面 | | `z-ai/glm-4.5-air:free` | 中文原生 | | `alibaba/tongyi-deepresearch-30b-a3b:free` | 中文研究 | | `kwaipilot/kat-coder-pro:free` | 代码 Agent | | `qwen/qwen-2.5-vl-7b-instruct:free` | 视觉理解 | | `allenai/olmo-3.1-32b-think:free` | 深度推理 | --- ## 五、凭证配置详情 ### 凭证文件位置 | Provider | 路径 | |----------|------| | Kiro | `~/.aws/sso/cache/kiro-auth-token.json` | | Gemini | `~/.gemini/oauth_creds.json` | | Qwen | `~/.qwen/oauth_creds.json` | | Codex | `~/.codex/auth.json` | ### ProxyCast 数据目录 - 配置文件:`~/.config/proxycast/config.json` - 数据库:`~/.proxycast/proxycast.db` - 凭证副本:`~/.local/share/proxycast/credentials/` ### 当前凭证池 ``` kiro - Kiro OAuth (Claude) qwen - Qwen OAuth gemini_api_key - Gemini Key 1-8 (8个轮询) openai - OpenRouter Free ``` --- ## 六、刷新 Kiro Token Kiro Token 过期后,使用以下命令刷新: ```bash REFRESH_TOKEN=$(cat ~/.aws/sso/cache/kiro-auth-token.json | jq -r '.refreshToken') curl -s -X POST "https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken" \ -H "Content-Type: application/json" \ -d "{\"refreshToken\": \"$REFRESH_TOKEN\"}" | jq '.' > /tmp/new_token.json # 更新 token 文件 cat ~/.aws/sso/cache/kiro-auth-token.json | jq --slurpfile new /tmp/new_token.json ' .accessToken = $new[0].accessToken | .expiresAt = (now + 3600 | todate) ' > ~/.aws/sso/cache/kiro-auth-token.json.tmp mv ~/.aws/sso/cache/kiro-auth-token.json.tmp ~/.aws/sso/cache/kiro-auth-token.json ``` 或者直接在 ProxyCast 界面点"刷新 Token"按钮。 --- ## 七、配置文件参考 ### ~/.config/proxycast/config.json ```json { "server": { "host": "127.0.0.1", "port": 8999, "api_key": "proxy_cast" }, "providers": { "kiro": { "enabled": true, "credentials_path": "~/.aws/sso/cache/kiro-auth-token.json" }, "gemini": { "enabled": true, "credentials_path": "~/.gemini/oauth_creds.json" }, "qwen": { "enabled": true, "credentials_path": "~/.qwen/oauth_creds.json" } }, "default_provider": "kiro" } ``` --- ## 八、其他工具配置 ### Cherry Studio / Cursor / Cline ``` API Base URL: http://127.0.0.1:8999/v1 API Key: proxy_cast Model: claude-opus-4-5 ``` ### Python 代码 ```python import openai client = openai.OpenAI( base_url="http://127.0.0.1:8999/v1", api_key="proxy_cast" ) response = client.chat.completions.create( model="claude-opus-4-5", messages=[{"role": "user", "content": "Hello"}] ) print(response.choices[0].message.content) ``` --- ## 九、故障排查 ### ProxyCast 没运行 ```bash ps aux | grep proxycast # 如果没有,启动它: cd /mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main && ./src-tauri/target/release/proxycast & ``` ### 检查端口 ```bash ss -tlnp | grep 8999 ``` ### 测试 API ```bash curl http://127.0.0.1:8999/v1/models -H "Authorization: Bearer proxy_cast" ``` ### Token 过期 在 ProxyCast 界面点"刷新 Token",或手动刷新(见第六节)。 --- ## 十、Gemini API Keys 当前配置的 8 个 Key(轮询负载均衡): ``` # 请在此处填入你自己的 Gemini API Keys # 格式:AIzaSy... (每行一个) # 获取地址:https://aistudio.google.com/app/apikey ``` 每日限制:每个 Key 20 RPD,8 个 Key = 160 次/天 --- ## 十一、OpenRouter API Key ``` # 请在此处填入你自己的 OpenRouter API Key # 格式:sk-or-v1-... # 获取地址:https://openrouter.ai/keys ``` 免费模型无限制使用。 --- *文档生成时间:2025-12-20 16:38* --- ## 十二、Claude Code 完整启动命令大全 ### Kiro 凭证 (Claude 系列) ```bash # Claude Opus 4.6 - 最强模型 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-opus-4-5 # Claude Sonnet 4.5 - 平衡性能 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-sonnet-4-5 # Claude Sonnet 4.5 特定版本 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-sonnet-4-5-20250929 # Claude 3.7 Sonnet CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-3-7-sonnet-20250219 # Claude 3.5 Sonnet Latest CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-3-5-sonnet-latest ``` ### Gemini 系列 (8个 API Key 轮询) ```bash # Gemini 3 Pro Preview - 最新预览版 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-3-pro-preview # Gemini 2.5 Pro - Pro 版本 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-2.5-pro # Gemini 2.5 Pro Preview CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-2.5-pro-preview-06-05 # Gemini 2.5 Flash - 快速版本 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-2.5-flash # Gemini 2.5 Flash Lite - 轻量版本 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-2.5-flash-lite ``` ### Qwen 系列 (阿里通义千问) ```bash # Qwen3 Coder Plus - 代码增强版 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model qwen3-coder-plus # Qwen3 Coder Flash - 快速版本 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model qwen3-coder-flash ``` ### OpenRouter 免费模型 ```bash # DeepSeek R1 - 推理最强 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model deepseek/deepseek-r1-0528:free # Gemini 2.0 Flash Exp - 翻译首选 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model google/gemini-2.0-flash-exp:free # Llama 3.1 405B - 综合最强 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model meta-llama/llama-3.1-405b-instruct:free # Llama 3.3 70B - 速度快 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model meta-llama/llama-3.3-70b-instruct:free # Hermes 3 405B - 指令遵循好 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model nousresearch/hermes-3-llama-3.1-405b:free # Devstral 2 - 代码专精 123B CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model mistralai/devstral-2512:free # GLM 4.5 Air - 中文原生 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model z-ai/glm-4.5-air:free # 通义深度研究 - 中文研究 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model alibaba/tongyi-deepresearch-30b-a3b:free # KAT-Coder Pro - 代码 Agent CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model kwaipilot/kat-coder-pro:free # Qwen 2.5 VL - 视觉理解 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model qwen/qwen-2.5-vl-7b-instruct:free # NVIDIA Nemotron 12B VL - 视觉/文档 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model nvidia/nemotron-nano-12b-v2-vl:free # Olmo 3.1 32B Think - 深度推理 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model allenai/olmo-3.1-32b-think:free ``` --- ## 十三、快捷别名配置 在 `~/.bash_aliases` 或 `~/.bashrc` 中添加: ```bash # ProxyCast 启动 alias proxycast='cd /mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main && ./src-tauri/target/release/proxycast &' # Claude Code 快捷命令 alias cc-opus='CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-opus-4-5' alias cc-sonnet='CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-sonnet-4-5' alias cc-gemini='CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model gemini-3-pro-preview' alias cc-deepseek='CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model deepseek/deepseek-r1-0528:free' alias cc-qwen='CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model qwen3-coder-plus' alias cc-llama='CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model meta-llama/llama-3.1-405b-instruct:free' alias cc-devstral='CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model mistralai/devstral-2512:free' ``` 添加后执行 `source ~/.bashrc` 生效。 --- ## 十四、模型推荐场景 | 场景 | 推荐模型 | 启动命令 | |------|----------|----------| | 复杂推理/架构设计 | claude-opus-4-5 | `cc-opus` | | 日常编码 | claude-sonnet-4-5 | `cc-sonnet` | | 快速问答 | gemini-2.5-flash | 见上方命令 | | 深度推理 | deepseek/deepseek-r1-0528:free | `cc-deepseek` | | 代码专精 | mistralai/devstral-2512:free | `cc-devstral` | | 中文任务 | qwen3-coder-plus | `cc-qwen` | | 免费综合 | meta-llama/llama-3.1-405b-instruct:free | `cc-llama` | --- *文档更新时间:2025-12-20 16:41* --- ## 十五、从零部署完整教程 ### 1. 环境要求 ```bash # 系统要求 - Linux / WSL2 / macOS - Node.js >= 20.0.0 - Rust >= 1.70 - pnpm 或 npm # 检查环境 node -v # v20.x.x rustc -V # rustc 1.70+ ``` ### 2. 获取源码 ```bash # 克隆或下载 ProxyCast cd /mnt/d/.projects git clone https://github.com/aiclientproxy/proxycast.git # 或解压已有的 zip 包 ``` ### 3. 编译构建 ```bash cd proxycast-main # 安装前端依赖 npm install # 构建 Tauri 应用 npm run tauri build # 构建产物位置 # Linux: src-tauri/target/release/proxycast # macOS: src-tauri/target/release/bundle/dmg/ # Windows: src-tauri/target/release/bundle/msi/ ``` ### 4. 准备凭证文件 #### Kiro 凭证 ```bash # 安装 Kiro IDE 并登录,凭证自动生成在: ~/.aws/sso/cache/kiro-auth-token.json ``` #### Gemini 凭证 ```bash # 安装 Gemini CLI 并登录 pip install gemini-cli gemini auth login # 凭证位置:~/.gemini/oauth_creds.json ``` #### Qwen 凭证 ```bash # 安装通义千问 CLI 并登录 # 凭证位置:~/.qwen/oauth_creds.json ``` ### 5. 首次启动配置 ```bash # 启动 ProxyCast ./src-tauri/target/release/proxycast & # 等待 GUI 启动后: # 1. 进入 "凭证池" 页面 # 2. 点击 "一键读取凭证" 或手动添加 # 3. 进入 "Dashboard" 点击 "启动服务器" ``` ### 6. 手动添加凭证到数据库(无 GUI 方式) ```bash # Kiro 凭证 sqlite3 ~/.proxycast/proxycast.db "INSERT INTO provider_pool_credentials (uuid, provider_type, credential_data, is_healthy, check_health, error_count, is_disabled, name, usage_count, created_at, updated_at, source) VALUES ( '$(uuidgen)', 'kiro', '{\"type\":\"kiro_o_auth\",\"creds_file_path\":\"$HOME/.aws/sso/cache/kiro-auth-token.json\"}', 1, 1, 0, 0, 'Kiro OAuth', 0, $(date +%s), $(date +%s), 'manual' );" # Gemini OAuth sqlite3 ~/.proxycast/proxycast.db "INSERT INTO provider_pool_credentials (uuid, provider_type, credential_data, is_healthy, check_health, error_count, is_disabled, name, usage_count, created_at, updated_at, source) VALUES ( '$(uuidgen)', 'gemini', '{\"type\":\"gemini_o_auth\",\"creds_file_path\":\"$HOME/.gemini/oauth_creds.json\",\"project_id\":null}', 1, 1, 0, 0, 'Gemini OAuth', 0, $(date +%s), $(date +%s), 'manual' );" # Gemini API Key sqlite3 ~/.proxycast/proxycast.db "INSERT INTO provider_pool_credentials (uuid, provider_type, credential_data, is_healthy, check_health, error_count, is_disabled, name, usage_count, created_at, updated_at, source) VALUES ( '$(uuidgen)', 'gemini_api_key', '{\"type\":\"gemini_api_key\",\"api_key\":\"你的API_KEY\",\"base_url\":null,\"excluded_models\":[]}', 1, 1, 0, 0, 'Gemini Key 1', 0, $(date +%s), $(date +%s), 'manual' );" # Qwen OAuth sqlite3 ~/.proxycast/proxycast.db "INSERT INTO provider_pool_credentials (uuid, provider_type, credential_data, is_healthy, check_health, error_count, is_disabled, name, usage_count, created_at, updated_at, source) VALUES ( '$(uuidgen)', 'qwen', '{\"type\":\"qwen_o_auth\",\"creds_file_path\":\"$HOME/.qwen/oauth_creds.json\"}', 1, 1, 0, 0, 'Qwen OAuth', 0, $(date +%s), $(date +%s), 'manual' );" # OpenRouter (OpenAI 兼容) sqlite3 ~/.proxycast/proxycast.db "INSERT INTO provider_pool_credentials (uuid, provider_type, credential_data, is_healthy, check_health, error_count, is_disabled, name, usage_count, created_at, updated_at, source) VALUES ( '$(uuidgen)', 'openai', '{\"type\":\"open_a_i_key\",\"api_key\":\"sk-or-v1-xxx你的key\",\"base_url\":\"https://openrouter.ai/api\"}', 1, 1, 0, 0, 'OpenRouter Free', 0, $(date +%s), $(date +%s), 'manual' );" ``` ### 7. 创建配置文件 ```bash mkdir -p ~/.config/proxycast cat > ~/.config/proxycast/config.json << 'EOF' { "server": { "host": "127.0.0.1", "port": 8999, "api_key": "proxy_cast", "tls": {"enable": false} }, "providers": { "kiro": {"enabled": true, "credentials_path": "~/.aws/sso/cache/kiro-auth-token.json"}, "gemini": {"enabled": true, "credentials_path": "~/.gemini/oauth_creds.json"}, "qwen": {"enabled": true, "credentials_path": "~/.qwen/oauth_creds.json"} }, "default_provider": "kiro" } EOF ``` ### 8. 验证部署 ```bash # 启动服务 ./src-tauri/target/release/proxycast & # 等待几秒后测试 curl http://127.0.0.1:8999/v1/models -H "Authorization: Bearer proxy_cast" # 测试聊天 curl http://127.0.0.1:8999/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer proxy_cast" \ -d '{"model":"claude-sonnet-4-5","messages":[{"role":"user","content":"Hi"}]}' ``` --- ## 十六、无头模式(Headless)部署教程 适用于服务器、Docker、无 GUI 环境。 ### 1. 无头启动 ```bash # 设置无显示环境 export DISPLAY= # 或使用虚拟显示(如果需要) Xvfb :99 -screen 0 1024x768x24 & export DISPLAY=:99 # 启动 ProxyCast ./src-tauri/target/release/proxycast & ``` ### 2. 纯命令行配置(无需 GUI) ```bash #!/bin/bash # headless-setup.sh - 无头模式一键配置脚本 PROXYCAST_DIR="/path/to/proxycast-main" DB_PATH="$HOME/.proxycast/proxycast.db" CONFIG_PATH="$HOME/.config/proxycast/config.json" # 创建目录 mkdir -p ~/.proxycast ~/.config/proxycast # 初始化数据库(首次运行会自动创建) $PROXYCAST_DIR/src-tauri/target/release/proxycast & sleep 3 pkill -f proxycast # 添加凭证 add_credential() { local type=$1 local data=$2 local name=$3 sqlite3 $DB_PATH "INSERT INTO provider_pool_credentials (uuid, provider_type, credential_data, is_healthy, check_health, error_count, is_disabled, name, usage_count, created_at, updated_at, source) VALUES ('$(uuidgen)', '$type', '$data', 1, 1, 0, 0, '$name', 0, $(date +%s), $(date +%s), 'manual');" } # 添加 Kiro add_credential "kiro" '{"type":"kiro_o_auth","creds_file_path":"'$HOME'/.aws/sso/cache/kiro-auth-token.json"}' "Kiro OAuth" # 添加 Gemini API Keys GEMINI_KEYS=( "AIzaSyBt4pIYmLYheuMpXSCj5VLkCA-fhfdEVT4" "AIzaSyBSllSwrObqvUiXqFG5RUJXB6woZoBSaTk" # 添加更多 keys... ) for i in "${!GEMINI_KEYS[@]}"; do add_credential "gemini_api_key" '{"type":"gemini_api_key","api_key":"'${GEMINI_KEYS[$i]}'","base_url":null,"excluded_models":[]}' "Gemini Key $((i+1))" done # 添加 OpenRouter add_credential "openai" '{"type":"open_a_i_key","api_key":"sk-or-v1-xxx","base_url":"https://openrouter.ai/api"}' "OpenRouter" echo "配置完成!" ``` ### 3. Systemd 服务(Linux 后台运行) ```bash # 创建服务文件 sudo cat > /etc/systemd/system/proxycast.service << 'EOF' [Unit] Description=ProxyCast API Proxy Service After=network.target [Service] Type=simple User=lenovo Environment=DISPLAY= WorkingDirectory=/mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main ExecStart=/mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main/src-tauri/target/release/proxycast Restart=always RestartSec=10 [Install] WantedBy=multi-user.target EOF # 启用并启动服务 sudo systemctl daemon-reload sudo systemctl enable proxycast sudo systemctl start proxycast # 查看状态 sudo systemctl status proxycast # 查看日志 journalctl -u proxycast -f ``` ### 4. Docker 部署(可选) ```dockerfile # Dockerfile FROM rust:1.70 as builder WORKDIR /app COPY . . RUN cargo build --release -p proxycast FROM debian:bookworm-slim RUN apt-get update && apt-get install -y libwebkit2gtk-4.1-0 libgtk-3-0 && rm -rf /var/lib/apt/lists/* COPY --from=builder /app/target/release/proxycast /usr/local/bin/ EXPOSE 8999 CMD ["proxycast"] ``` ```bash # 构建并运行 docker build -t proxycast . docker run -d -p 8999:8999 -v ~/.proxycast:/root/.proxycast -v ~/.config/proxycast:/root/.config/proxycast proxycast ``` ### 5. 无头模式下刷新 Token ```bash #!/bin/bash # refresh-kiro-token.sh - 自动刷新 Kiro Token TOKEN_FILE="$HOME/.aws/sso/cache/kiro-auth-token.json" REFRESH_TOKEN=$(jq -r '.refreshToken' "$TOKEN_FILE") # 调用刷新 API RESPONSE=$(curl -s -X POST "https://prod.us-east-1.auth.desktop.kiro.dev/refreshToken" \ -H "Content-Type: application/json" \ -d "{\"refreshToken\": \"$REFRESH_TOKEN\"}") # 检查是否成功 if echo "$RESPONSE" | jq -e '.accessToken' > /dev/null 2>&1; then NEW_ACCESS_TOKEN=$(echo "$RESPONSE" | jq -r '.accessToken') NEW_EXPIRES=$(date -d "+1 hour" --iso-8601=seconds) # 更新 token 文件 jq --arg token "$NEW_ACCESS_TOKEN" --arg exp "$NEW_EXPIRES" \ '.accessToken = $token | .expiresAt = $exp' "$TOKEN_FILE" > "${TOKEN_FILE}.tmp" mv "${TOKEN_FILE}.tmp" "$TOKEN_FILE" echo "Token 刷新成功!" else echo "Token 刷新失败:$RESPONSE" exit 1 fi ``` ```bash # 添加到 crontab,每 50 分钟刷新一次 crontab -e # 添加:*/50 * * * * /path/to/refresh-kiro-token.sh >> /var/log/kiro-refresh.log 2>&1 ``` ### 6. 健康检查脚本 ```bash #!/bin/bash # health-check.sh API_URL="http://127.0.0.1:8999" API_KEY="proxy_cast" # 检查服务是否运行 if ! curl -s "$API_URL/v1/models" -H "Authorization: Bearer $API_KEY" > /dev/null; then echo "ProxyCast 服务异常,正在重启..." pkill -f proxycast sleep 2 cd /mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main ./src-tauri/target/release/proxycast & sleep 5 if curl -s "$API_URL/v1/models" -H "Authorization: Bearer $API_KEY" > /dev/null; then echo "重启成功!" else echo "重启失败,请检查日志" exit 1 fi else echo "服务正常运行" fi ``` ### 7. 远程访问配置 ```bash # 修改配置允许外部访问 sed -i 's/"host": "127.0.0.1"/"host": "0.0.0.0"/' ~/.config/proxycast/config.json # 重启服务 pkill -f proxycast ./src-tauri/target/release/proxycast & # 获取 IP ip addr show | grep "inet " | grep -v 127.0.0.1 # 外部访问 # API Base URL: http://<你的IP>:8999/v1 # API Key: proxy_cast ``` --- ## 十七、常用运维命令 ```bash # 启动 cd /mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main && ./src-tauri/target/release/proxycast & # 停止 pkill -f proxycast # 重启 pkill -f proxycast; sleep 2; cd /mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main && ./src-tauri/target/release/proxycast & # 查看进程 ps aux | grep proxycast # 查看端口 ss -tlnp | grep 8999 # 查看日志 tail -f ~/.proxycast/logs/*.log # 查看凭证池 sqlite3 ~/.proxycast/proxycast.db "SELECT provider_type, name, is_healthy FROM provider_pool_credentials;" # 测试 API curl http://127.0.0.1:8999/v1/models -H "Authorization: Bearer proxy_cast" | jq # 清空凭证池 sqlite3 ~/.proxycast/proxycast.db "DELETE FROM provider_pool_credentials;" ``` --- *文档更新时间:2025-12-20 16:42* --- ## 十八、断线问题修复 ### 问题原因 Claude Code 使用自定义 API endpoint 时,仍会尝试向 Anthropic 发送遥测数据。遥测失败会导致程序异常退出。 ### 解决方案 所有启动命令都需要添加环境变量禁用遥测: ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ``` ### 完整单行启动命令(无遥测) ```bash CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-opus-4-5 ``` --- *文档更新时间:2025-12-20 17:46* --- ## 十九、Codex (OpenAI) 凭证集成(待实现) ### 凭证来源 Codex 凭证来自 OpenAI 官方 CLI 工具,存储在 `~/.codex/auth.json`: ```json { "id_token": "eyJhbGciOiJSUzI1NiI...", "access_token": "eyJhbGciOiJSUzI1NiI...", "refresh_token": "rt_TK67iD7Pdgg...", "account_id": "24e8f403-dbdb-42f9-8309-98951fc2862e", "email": "xxx@gmail.com", "type": "codex", "expired": "2025-12-30T08:16:48..." } ``` ### 当前状态 - ✅ 凭证已添加到 ProxyCast 数据库 - ✅ `providers/codex.rs` 已实现 OAuth 刷新逻辑 - ❌ `server.rs` 中 `call_provider_openai` 函数尚未集成 Codex 调用 - ❌ WSL 编译环境链接器问题,无法编译新版本 ### 代码修改位置 需要在 `src-tauri/src/server.rs` 的 `call_provider_openai` 函数中添加: ```rust CredentialData::CodexOAuth { creds_file_path } => { // 加载凭证、刷新 token、调用 OpenAI API // 参考 KiroOAuth 的实现模式 } ``` ### 支持的模型 Codex 凭证支持所有 OpenAI 模型: - gpt-4o, gpt-4o-mini, gpt-4-turbo - o1, o1-mini, o1-preview - o3-mini --- ## 二十、Antigravity 凭证分析 ### 凭证位置 Antigravity (Google AI IDE) 的凭证存储在 SQLite 数据库中: ``` Windows: %APPDATA%\Antigravity\User\globalStorage\state.vscdb ``` ### 凭证结构 ```sql -- 查询凭证 SELECT value FROM ItemTable WHERE key = 'antigravityAuthStatus'; ``` 返回 JSON: ```json { "name": "git", "apiKey": "ya29.a0Aa7pCA-1M5dtt...", // Google OAuth access_token "email": "xxx@gmail.com", "userStatusProtoBinaryBase64": "..." // 用户状态 protobuf } ``` ### 限制 - **只有 access_token**,没有 refresh_token - access_token 有效期约 1 小时 - 无法自动刷新,需要通过 Antigravity 应用重新登录 - refresh_token 可能存储在 Windows Credential Manager(WSL 无法访问) ### 结论 Antigravity 凭证不适合集成到 ProxyCast,因为无法自动刷新。建议使用 Gemini API Key 或 Gemini CLI OAuth 代替。 --- ## 二十一、WSL 编译问题 ### 问题描述 在 WSL 环境下编译 Rust 项目时,链接器报错: ``` error: unknown option '-Wl,--no-undefined-version' error: unknown option '-Wl,--as-needed' ``` ### 原因 Rust 1.90+ 默认使用 `lld` 链接器,但 WSL 的 `lld` 版本不兼容。 ### 尝试的解决方案 1. **使用 gold 链接器**(失败) ```bash RUSTFLAGS="-C link-arg=-fuse-ld=gold" cargo build --release ``` 2. **配置 cargo**(失败) ```toml # ~/.cargo/config.toml [target.x86_64-unknown-linux-gnu] linker = "gcc" rustflags = ["-C", "link-arg=-fuse-ld=gold"] ``` ### 建议 - 在原生 Linux 或 Windows 上编译 - 使用 Docker 容器编译 - 使用预编译的 Release 版本 --- ## 二十二、数据库路径差异 ### WSL vs Windows | 环境 | 数据库路径 | |------|-----------| | WSL/Linux | `~/.proxycast/proxycast.db` | | Windows | `%APPDATA%\proxycast\proxycast.db` | | macOS | `~/Library/Application Support/proxycast/proxycast.db` | ### 注意事项 - WSL 中运行的 ProxyCast 使用 Linux 路径 - Windows GUI 版本使用 Windows 路径 - 两者数据库不共享,需要分别配置凭证 --- ## 二十三、本次配置总结 ### 已配置的凭证池 | Provider | 名称 | 状态 | |----------|------|------| | kiro | Kiro OAuth | ✅ 正常 | | qwen | Qwen OAuth | ✅ 正常 | | gemini_api_key | Gemini Key 1-8 | ✅ 8个轮询 | | openai | OpenRouter Free | ✅ 正常 | | codex | Codex OAuth | ⚠️ 待实现 | ### 可用模型 **Claude (Kiro)** - claude-opus-4-5, claude-sonnet-4-5, claude-3-7-sonnet-20250219 **Gemini (API Keys)** - gemini-3-pro-preview, gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite **Qwen** - qwen3-coder-plus, qwen3-coder-flash **OpenRouter Free** - deepseek/deepseek-r1-0528:free - meta-llama/llama-3.1-405b-instruct:free - mistralai/devstral-2512:free - 等 10+ 免费模型 ### 快速启动 ```bash # 启动 ProxyCast cd /mnt/d/.projects/kiro-account-manager-main.zip/proxycast-main && ./src-tauri/target/release/proxycast & # 使用 Claude Code CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model claude-opus-4-5 ``` --- --- ## 二十四、新增 OpenRouter 免费模型(2025-12-21 测试通过) ### 新增模型列表 | 模型 | 说明 | 状态 | |------|------|------| | `openai/gpt-oss-120b:free` | GPT 开源 120B | ✅ 已测试 | | `openai/gpt-oss-20b:free` | GPT 开源 20B | ✅ 已测试 | | `moonshotai/kimi-k2:free` | Kimi K2.5 | ✅ 已测试 | ### Claude Code 启动命令 ```bash # GPT-OSS 120B - 大参数开源模型 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model openai/gpt-oss-120b:free # GPT-OSS 20B - 轻量开源模型 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model openai/gpt-oss-20b:free # Kimi K2.5 - 月之暗面最新模型 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 ANTHROPIC_BASE_URL=http://127.0.0.1:8999 ANTHROPIC_API_KEY=proxy_cast claude --dangerously-skip-permissions --model moonshotai/kimi-k2:free ``` ### API 测试命令 ```bash # 测试 GPT-OSS 120B curl -s http://127.0.0.1:8999/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer proxy_cast" \ -d '{"model":"openai/gpt-oss-120b:free","messages":[{"role":"user","content":"Hi"}],"max_tokens":10}' # 测试 Kimi K2.5 curl -s http://127.0.0.1:8999/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer proxy_cast" \ -d '{"model":"moonshotai/kimi-k2:free","messages":[{"role":"user","content":"Hi"}],"max_tokens":10}' ``` ### 更新后的 OpenRouter 免费模型完整列表 | 模型 | 说明 | 推荐场景 | |------|------|----------| | `deepseek/deepseek-r1-0528:free` | 推理最强 | 复杂推理 | | `meta-llama/llama-3.1-405b-instruct:free` | 综合最强 | 通用任务 | | `mistralai/devstral-2512:free` | 代码专精 123B | 编程 | | `openai/gpt-oss-120b:free` | GPT 开源 120B | 通用 | | `openai/gpt-oss-20b:free` | GPT 开源 20B | 快速响应 | | `moonshotai/kimi-k2:free` | Kimi K2.5 | 中文任务 | | `google/gemini-2.0-flash-exp:free` | Gemini 2.0 | 翻译 | | `meta-llama/llama-3.3-70b-instruct:free` | Llama 3.3 | 速度快 | | `nousresearch/hermes-3-llama-3.1-405b:free` | Hermes 3 | 指令遵循 | | `z-ai/glm-4.5-air:free` | GLM 4.5 | 中文原生 | | `alibaba/tongyi-deepresearch-30b-a3b:free` | 通义深研 | 中文研究 | | `kwaipilot/kat-coder-pro:free` | KAT-Coder | 代码 Agent | | `qwen/qwen-2.5-vl-7b-instruct:free` | Qwen VL | 视觉理解 | | `allenai/olmo-3.1-32b-think:free` | Olmo 3.1 | 深度推理 | --- *文档更新时间:2025-12-21 17:07*