lbjlaq/Antigravity-Manager

GitHub: lbjlaq/Antigravity-Manager

一款基于 Tauri + Rust 的本地 AI 网关工具,实现多账号统一管理、跨协议转换和智能请求调度。

Stars: 24941 | Forks: 2773

# Antigravity Tools 🚀
Antigravity Logo

您的个人高性能 AI 调度网关

不仅仅是账号管理,更是打破 API 调用壁垒的终极解决方案。

Version Tauri Rust React License

核心功能界面导览技术架构安装指南快速接入

简体中文 | English

**Antigravity Tools** 是一个专为开发者和 AI 爱好者设计的全功能桌面应用。它将多账号管理、协议转换和智能请求调度完美结合,为您提供一个稳定、极速且成本低廉的 **本地 AI 中转站**。 通过本应用,您可以将常见的 Web 端 Session (Google/Anthropic) 转化为标准化的 API 接口,消除不同厂商间的协议鸿沟。 ## 🌟 深度功能解析 (Detailed Features) ### 1. 🎛️ 智能账号仪表盘 (Smart Dashboard) * **全局实时监控**: 一眼洞察所有账号的健康状况,包括 Gemini Pro、Gemini Flash、Claude 以及 Gemini 绘图的 **平均剩余配额**。 * **最佳账号推荐 (Smart Recommendation)**: 系统会根据当前所有账号的配额冗余度,实时算法筛选并推荐“最佳账号”,支持 **一键切换**。 * **活跃账号快照**: 直观显示当前活跃账号的具体配额百分比及最后同步时间。 ### 2. 🔐 强大的账号管家 (Account Management) * **OAuth 2.0 授权(自动/手动)**: 添加账号时会提前生成可复制的授权链接,支持在任意浏览器完成授权;回调成功后应用会自动完成并保存(必要时可点击“我已授权,继续”手动收尾)。 * **多维度导入**: 支持单条 Token 录入、JSON 批量导入(如来自其他工具的备份),以及从 V1 旧版本数据库自动热迁移。 * **网关级视图**: 支持“列表”与“网格”双视图切换。提供 403 封禁检测,自动标注并跳过权限异常的账号。 ### 3. 🔌 协议转换与中继 (API Proxy) * **全协议适配 (Multi-Sink)**: * **OpenAI 格式**: 提供 `/v1/chat/completions` 端点,兼容 99% 的现有 AI 应用。 * **Anthropic 格式**: 提供原生 `/v1/messages` 接口,支持 **Claude Code CLI** 的全功能(如思思维链、系统提示词)。 * **Gemini 格式**: 支持 Google 官方 SDK 直接调用。 * **智能状态自愈**: 当请求遇到 `429 (Too Many Requests)` 或 `401 (Expire)` 时,后端会毫秒级触发 **自动重试与静默轮换**,确保业务不中断。 ### 4. 🔀 模型路由中心 (Model Router) * **系列化映射**: 您可以将复杂的原始模型 ID 归类到“规格家族”(如将所有 GPT-4 请求统一路由到 `gemini-3-pro-high`)。 * **专家级重定向**: 支持自定义正则表达式级模型映射,精准控制每一个请求的落地模型。 * **智能分级路由 (Tiered Routing)**: [新] 系统根据账号类型(Ultra/Pro/Free)和配额重置频率自动优先级排序,优先消耗高速重置账号,确保高频调用下的服务稳定性。 * **后台任务静默降级**: [新] 自动识别 Claude CLI 等工具生成的后台请求(如标题生成),智能重定向至 Flash 模型,保护高级模型配额不被浪费。 ### 5. 🎨 多模态与 Imagen 3 支持 * **高级画质控制**: 支持通过 OpenAI `size` (如 `1024x1024`, `16:9`) 参数自动映射到 Imagen 3 的相应规格。 * **超强 Body 支持**: 后端支持高达 **100MB** (可配置) 的 Payload,处理 4K 高清图识别绰绰有余。 ## 📸 界面导览 (GUI Overview) | | | | :---: | :---: | | ![仪表盘 - 全局配额监控与一键切换](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/70bc86fb4b135639.png)
仪表盘 | ![账号列表 - 高密度配额展示与 403 智能标注](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/1eb0978cd8135640.png)
账号列表 | | ![关于页面 - 关于 Antigravity Tools](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/681ec74414135641.png)
关于页面 | ![API 反代 - 服务控制](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/090102d849135642.png)
API 反代 | | ![系统设置 - 通用配置](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4a4658fb25135643.png)
系统设置 | | ### 💡 使用案例 (Usage Examples) | | | | :---: | :---: | | ![Claude Code 联网搜索 - 结构化来源与引文显示](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/a31354674f135644.png)
Claude Code 联网搜索 | ![Cherry Studio 深度集成 - 原生回显搜索引文与来源链接](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/ecd846bd98135645.png)
Cherry Studio 深度集成 | | ![Imagen 3 高级绘图 - 完美还原 Prompt 意境与细节](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/ba795308a3135647.png)
Imagen 3 高级绘图 | ![Kilo Code 接入 - 多账号极速轮换与模型穿透](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/89674cadc2135648.png)
Kilo Code 接入 | ## 🏗️ 技术架构 (Architecture) graph TD Client([外部应用: Claude Code/NextChat]) -->|OpenAI/Anthropic| Gateway[Antigravity Axum Server] Gateway --> Middleware[中间件: 鉴权/限流/日志] Middleware --> Router[Model Router: ID 映射] Router --> Dispatcher[账号分发器: 轮询/权重] Dispatcher --> Mapper[协议转换器: Request Mapper] Mapper --> Upstream[上游请求: Google/Anthropic API] Upstream --> ResponseMapper[响应转换器: Response Mapper] ResponseMapper --> Client ## 安装指南 (Installation) ### 选项 A: 终端安装 (推荐) #### 跨平台一键安装脚本 自动检测操作系统、架构和包管理器,一条命令完成下载与安装。 **Linux / macOS:** curl -fsSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/v4.1.27/install.sh | bash **Windows (PowerShell):** irm https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/install.ps1 | iex #### macOS - Homebrew 如果您已安装 [Homebrew](https://brew.sh/),也可以通过以下命令安装: # 1. 订阅本仓库的 Tap brew tap lbjlaq/antigravity-manager https://github.com/lbjlaq/Antigravity-Manager # 2. 安装应用 brew install --cask antigravity-tools #### Arch Linux 您可以选择通过一键安装脚本或 Homebrew 进行安装: **方式 1:一键安装脚本 (推荐)** curl -sSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/deploy/arch/install.sh | bash **方式 2:通过 Homebrew** (如果您已安装 [Linuxbrew](https://sh.brew.sh/)) brew tap lbjlaq/antigravity-manager https://github.com/lbjlaq/Antigravity-Manager brew install --cask antigravity-tools #### 其他 Linux 发行版 安装后会自动将 AppImage 添加到二进制路径并配置可执行权限。 ### 选项 B: 手动下载 前往 [GitHub Releases](https://github.com/lbjlaq/Antigravity-Manager/releases) 下载对应系统的包: * **macOS**: `.dmg` (支持 Apple Silicon & Intel) * **Windows**: `.msi` 或 便携版 `.zip` * **Linux**: `.deb` 或 `AppImage` ### 选项 C: Docker 部署 (推荐用于 NAS/服务器) 如果您希望在容器化环境中运行,我们提供了原生的 Docker 镜像。该镜像内置了对 v4.0.2 原生 Headless 架构的支持,可自动托管前端静态资源,并通过浏览器直接进行管理。 # 方式 1: 直接运行 (推荐) # - API_KEY: 必填。用于所有协议的 AI 请求鉴定。 # - WEB_PASSWORD: 可选。用于管理后台登录。若不设置则默认使用 API_KEY。 docker run -d --name antigravity-manager \ -p 8045:8045 \ -e API_KEY=sk-your-api-key \ -e WEB_PASSWORD=your-login-password \ -e ABV_MAX_BODY_SIZE=104857600 \ -v ~/.antigravity_tools:/root/.antigravity_tools \ lbjlaq/antigravity-manager:latest # 忘记密钥?执行 docker logs antigravity-manager 或 grep -E '"api_key"|"admin_password"' ~/.antigravity_tools/gui_config.json #### 🔐 鉴权逻辑说明 * **场景 A:仅设置了 `API_KEY`** - **Web 登录**:使用 `API_KEY` 进入后台。 - **API 调用**:使用 `API_KEY` 进行 AI 请求鉴权。 * **场景 B:同时设置了 `API_KEY` 和 `WEB_PASSWORD` (推荐)** - **Web 登录**:**必须**使用 `WEB_PASSWORD`,使用 API Key 将被拒绝(更安全)。 - **API 调用**:统一使用 `API_KEY`。这样您可以将 API Key 分发给成员,而保留密码仅供管理员使用。 #### 🆙 旧版本升级指引 如果您是从 v4.0.1 及更早版本升级,系统默认未设置 `WEB_PASSWORD`。您可以通过以下任一方式设置: 1. **Web UI 界面 (推荐)**:使用原有 `API_KEY` 登录后,在 **API 反代设置** 页面手动设置并保存。新密码将持久化存储在 `gui_config.json` 中。 2. **环境变量 (Docker)**:在启动容器时增加 `-e WEB_PASSWORD=您的新密码`。**注意:环境变量具有最高优先级,将覆盖 UI 中的任何修改。** 3. **配置文件 (持久化)**:直接修改 `~/.antigravity_tools/gui_config.json`,在 `proxy` 对象中修改或添加 `"admin_password": "您的新密码"` 字段。 - *注:`WEB_PASSWORD` 是环境变量名,`admin_password` 是配置文件中的 JSON 键名。* > [!TIP] > **密码优先级逻辑 (Priority)**: > - **第一优先级 (环境变量)**: `ABV_WEB_PASSWORD` 或 `WEB_PASSWORD`。只要设置了环境变量,系统将始终使用它。 > - **第二优先级 (配置文件)**: `gui_config.json` 中的 `admin_password` 字段。UI 的“保存”操作会更新此值。 > - **保底回退 (向后兼容)**: 若上述均未设置,则回退使用 `API_KEY` 作为登录密码。 # 方式 2: 使用 Docker Compose # 1. 进入项目的 docker 目录 cd docker # 2. 启动服务 docker compose up -d Copyright © 2024-2026 [lbjlaq](https://github.com/lbjlaq) ### 🛠️ 常见问题排查 (Troubleshooting) #### macOS 提示“应用已损坏,无法打开”? 由于 macOS 的安全机制,非 App Store 下载的应用可能会触发此提示。您可以按照以下步骤快速修复: 1. **命令行修复** (推荐): 打开终端,执行以下命令: sudo xattr -rd com.apple.quarantine "/Applications/Antigravity Tools.app" 2. **Homebrew 安装技巧**: 如果您使用 brew 安装,可以添加 `--no-quarantine` 参数来规避此问题: brew install --cask --no-quarantine antigravity-tools ## 🔌 快速接入示例 ### 🔐 OAuth 授权流程(添加账号) 1. 打开“Accounts / 账号” → “添加账号” → “OAuth”。 2. 弹窗会在点击按钮前预生成授权链接;点击链接即可复制到系统剪贴板,然后用你希望的浏览器打开并完成授权。 3. 授权完成后浏览器会打开本地回调页并显示“✅ 授权成功!”。 4. 应用会自动继续完成授权并保存账号;如未自动完成,可点击“我已授权,继续”手动完成。 ### 如何接入 Claude Code CLI? 1. 启动 Antigravity,并在“API 反代”页面开启服务。 2. 在终端执行: export ANTHROPIC_API_KEY="sk-antigravity" export ANTHROPIC_BASE_URL="http://127.0.0.1:8045" claude ### 如何接入 OpenCode? 1. 进入 **API 反代**页面 → **外部 Providers** → 点击 **OpenCode Sync** 卡片。 2. 点击 **Sync** 按钮,将自动生成 `~/.config/opencode/opencode.json` 配置文件: - 创建独立 provider `antigravity-manager`(不覆盖 google/anthropic 原生配置) - 可选:勾选 **Sync accounts** 导出 `antigravity-accounts.json`(plugin-compatible v3 格式),供 OpenCode 插件直接导入 3. 点击 **Clear Config** 可一键清除 Manager 配置并清理 legacy 残留;点击 **Restore** 可从备份恢复。 4. Windows 用户路径为 `C:\Users\<用户名>\.config\opencode\`(与 `~/.config/opencode` 规则一致)。 **快速验证命令:** # 测试 antigravity-manager provider(支持 --variant) opencode run "test" --model antigravity-manager/claude-sonnet-4-5-thinking --variant high # 若已安装 opencode-antigravity-auth 插件,验证 google provider 仍可独立工作 opencode run "test" --model google/antigravity-claude-sonnet-4-5-thinking --variant max ### 如何接入 Kilo Code? 1. **协议选择**: 建议优先使用 **Gemini 协议**。 2. **Base URL**: 填写 `http://127.0.0.1:8045`。 3. **注意**: - **OpenAI 协议限制**: Kilo Code 在使用 OpenAI 模式时,其请求路径会叠加产生 `/v1/chat/completions/responses` 这种非标准路径,导致 Antigravity 返回 404。因此请务必填入 Base URL 后选择 Gemini 模式。 - **模型映射**: Kilo Code 中的模型名称可能与 Antigravity 默认设置不一致,如遇到无法连接,请在“模型映射”页面设置自定义映射,并查看**日志文件**进行调试。 ### 如何在 Python 中使用? import openai client = openai.OpenAI( api_key="sk-antigravity", base_url="http://127.0.0.1:8045/v1" ) response = client.chat.completions.create( model="gemini-3-flash", messages=[{"role": "user", "content": "你好,请自我介绍"}] ) print(response.choices[0].message.content) ### 如何使用图片生成 (Imagen 3)? #### 方式一:OpenAI Images API (推荐) import openai client = openai.OpenAI( api_key="sk-antigravity", base_url="http://127.0.0.1:8045/v1" ) # 生成图片 response = client.images.generate( model="gemini-3-pro-image", prompt="一座未来主义风格的城市,赛博朋克,霓虹灯", size="1920x1080", # 支持任意 WIDTHxHEIGHT 格式,自动计算宽高比 quality="hd", # "standard" | "hd" | "medium" n=1, response_format="b64_json" ) # 保存图片 import base64 image_data = base64.b64decode(response.data[0].b64_json) with open("output.png", "wb") as f: f.write(image_data) **支持的参数**: - **`size`**: 任意 `WIDTHxHEIGHT` 格式(如 `1280x720`, `1024x1024`, `1920x1080`),自动计算并映射到标准宽高比(21:9, 16:9, 9:16, 4:3, 3:4, 1:1) - **`quality`**: - `"hd"` → 4K 分辨率(高质量) - `"medium"` → 2K 分辨率(中等质量) - `"standard"` → 默认分辨率(标准质量) - **`n`**: 生成图片数量(1-10) - **`response_format`**: `"b64_json"` 或 `"url"`(Data URI) #### 方式二:Chat API + 参数设置 (✨ 新增) **所有协议**(OpenAI、Claude)的 Chat API 现在都支持直接传递 `size` 和 `quality` 参数: # OpenAI Chat API response = client.chat.completions.create( model="gemini-3-pro-image", size="1920x1080", # ✅ 支持任意 WIDTHxHEIGHT 格式 quality="hd", # ✅ "standard" | "hd" | "medium" messages=[{"role": "user", "content": "一座未来主义风格的城市"}] ) # Claude Messages API curl -X POST http://127.0.0.1:8045/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: sk-antigravity" \ -d '{ "model": "gemini-3-pro-image", "size": "1280x720", "quality": "hd", "messages": [{"role": "user", "content": "一只可爱的猫咪"}] }' **参数优先级**: `imageSize` 参数 > `quality` 参数 > 模型后缀 **✨ 新增 `imageSize` 参数支持**: 除了 `quality` 参数外,现在还支持直接使用 Gemini 原生的 `imageSize` 参数: ```python # 使用 imageSize 参数(最高优先级) response = client.chat.completions.create( model="gemini-3-pro-image", size="16:9", # 宽高比 imageSize="4K", # ✨ 直接指定分辨率: "1K" | "2K" | "4K" messages=[{"role": "user", "content": "一座未来主义风格的城市"}] ) # Claude Messages API 也支持 imageSize curl -X POST http://127.0.0.1:8045/v1/messages \ -H "Content-Type: application/json" \ -H "x-api-key: sk-antigravity" \ -d '{ "model": "gemini-3-pro-image", "size": "1280x720", "imageSize": "4K", "messages": [{"role": "user", "content": "一只可爱的猫咪"}] }' **参数说明**: - **`imageSize`**: 直接指定分辨率 (`"1K"` / `"2K"` / `"4K"`) - **`quality`**: 通过质量等级推断分辨率 (`"standard"` → 1K, `"medium"` → 2K, `"hd"` → 4K) - **优先级**: 如果同时指定 `imageSize` 和 `quality`,系统会优先使用 `imageSize` #### 方式三:Chat 接口 + 模型后缀 response = client.chat.completions.create( model="gemini-3-pro-image-16-9-4k", # 格式:gemini-3-pro-image-[比例]-[质量] messages=[{"role": "user", "content": "一座未来主义风格的城市"}] ) **模型后缀说明**: - **宽高比**: `-16-9`, `-9-16`, `-4-3`, `-3-4`, `-21-9`, `-1-1` - **质量**: `-4k` (4K), `-2k` (2K), 不加后缀(标准) - **示例**: `gemini-3-pro-image-16-9-4k` → 16:9 比例 + 4K 分辨率 #### 方式四:Cherry Studio 等客户端设置 在支持 OpenAI 协议的客户端(如 Cherry Studio)中,可以通过**模型设置**页面配置图片生成参数: 1. **进入模型设置**:选择 `gemini-3-pro-image` 模型 2. **配置参数**: - **Size (尺寸)**: 输入任意 `WIDTHxHEIGHT` 格式(如 `1920x1080`, `1024x1024`) - **Quality (质量)**: 选择 `standard` / `hd` / `medium` - **Number (数量)**: 设置生成图片数量(1-10) 3. **发送请求**:直接在对话框中输入图片描述即可 **参数映射规则**: - `size: "1920x1080"` → 自动计算为 `16:9` 宽高比 - `quality: "hd"` → 映射为 `4K` 分辨率 - `quality: "medium"` → 映射为 `2K` 分辨率 ## 📝 开发者与社区 * **版本演进 (Changelog)**: * **v4.1.27 (2026-03-01)**: - **[核心优化] 代理配置初始化与工具图片保留修复 (Issue #2156)**: - **补全默认配置**: 修复了 `ProxyConfig` 默认初始化时缺失 `global_system_prompt`、`proxy_pool` 和 `image_thinking_mode` 字段导致的编译失败问题。 - **模式匹配完善**: 补充了 `OpenAIContentBlock` 枚举匹配中的未知类型兜底分支 (`_ => {}`),消除非穷尽匹配的编译警告/错误。 - **图片无条件保留**: 移除冗余的 `preserve_tool_result_images` 开关,现已强制保留 `tool_result` 中的图片数据结构,转为大模型支持的 `inlineData` 结构,大幅简化逻辑。 - **[功能增强] 修改 docker-compose.yml 的配置 (PR #2185)**: - **命名空间更新**: 将构建的默认镜像名称从 `antigravity-manager` 更新为 `lbjlaq/antigravity-manager`。 - **环境变量占位符**: 为环境变量添加了带默认值的占位符语法,允许用户通过宿主机的环境变量或 `.env` 文件来灵活覆盖默认配置。 - **[核心修复] OpenCode thinking budget 参数全面兼容 (Issue #2186)**: - **架构支持**:解决了 Vercel AI SDK (`@ai-sdk/anthropic`) 配合 OpenCode 使用时,因原生蛇形命名 `budget_tokens` 导致系统无法启动并抛出 `AI_UnsupportedFunctionalityError: 'thinking requires a budget'` 的问题。 - **双字段输出**:在向 OpenCode / Claude CLI 等外部客户端同步模型配置时,自动同时输出标准的 `budget_tokens` 与小驼峰的 `budgetTokens` 字段。 - **服务端适配**:后端配置解析器现已原生支持这两种命名变体。 - **[核心修复] 解决免费账号配额耗尽后的无限重试与路由死锁问题 (Issue #2184)**: - **问题根源**:修补了 Google API `fetchAvailableModels` 接口在特定负载下无法正确返回 `remainingFraction` 的缺陷。由于缺失 `project` 标识,导致接口错误地为已耗尽配额(HTTP 429)的账号返回 `1.0`(100%),进而导致智能路由算法将请求持续分配给不可用账号,引发长时间重试及配额显示错误。 - **负载修复**:修改配额刷新请求,在负载中精准注入正确的 `{"project": project_id}` 结构。恢复了配额信息的准确感知,并在未破坏原生字段(如 `supportsThinking`)的前提下实现了接口完全兼容。 - **自愈恢复**:通过读取真实配额,系统现已能够实时识别免费账号的耗尽状态并将其可用度置为 0%,无缝触发多账号自愈轮询(Smart Status Self-healing),解决请求受阻与长等待问题。 - **[核心修复] 解决首页 Gemini 绘图平均配额显示为 0 的问题 (Issue #2160)**: - **匹配更新**:将 Dashboard 中的绘图模型匹配逻辑从硬编码的 `gemini-3-pro-image` 更新为包含最新的 `gemini-3.1-flash-image`。 - **配置同步**:在 `modelConfig.ts` 中补全了新版绘图模型的 UI 定义,确保图标和标签正常渲染。 - **[核心功能] 全协议动态模型规格 (Model Specs) 集成 (Issue #2176)**: - **动态引擎**:实现了“动态优先、静态兜底”的规格引擎,优先识别 API 返回的 `max_output_tokens` 等硬限额数据。 - **静态资源**:引入 `model_specs.json` 集中管理 30+ 种模型的默认参数,彻底告别映射器中的硬编码逻辑。 - **协议注入**:统一了 OpenAI、Claude 和 Gemini 协议处理器对 Token 限额的注入方式,增强了跨版本兼容性。 - **[核心修复] 深度解决 Claude -> Gemini 3 路径下的 400 INVALID_ARGUMENT 异常**: - **自适应识别**:修正了自适应模式逻辑,确保映射后的 Gemini 3 模型能正确使用 `thinkingLevel` 支持,而非失效的 budget 逻辑。 - **冲突规避**:实现了参数排他性检查,在开启分级思维时自动剥离不兼容的 `thinkingBudget`。 - **Token 溢出保护**:为 `maxOutputTokens` 自动提升补齐逻辑增加了 `65536` 的模型硬上限保护,根除参数越界导致的请求失败。 * **v4.1.26 (2026-02-27)**: - **[功能增强] 优化配额刷新逻辑,支持同步禁用账号**: - **逻辑放宽**: “刷新所有”和“批量刷新”现在不再跳过标记为 `disabled` 或 `proxy_disabled` 的账号。 - **自动恢复**: 允许通过刷新操作尝试重新激活因 Token 过期或临时错误而被禁用的账号,提升了多账号管理的灵活性。 - **[核心修复] 修复 Windows 系统下后台任务导致 cmd 黑框闪烁的问题**: - **静默执行**: 通过为 `std::process::Command` 封装注入 `CREATE_NO_WINDOW` 标志,解决了在 Windows 端应用底层组件(如版本探测、重启更新等)调用系统命令时引发的命令行窗口一闪而过的视觉干扰,确保全过程无边框静默执行。 * **v4.1.25 (2026-02-27)**: - **[核心功能] 动态画图模型与新架构支持**: - **动态解析**: 移除了针对 `gemini-3-pro-image` 的硬编码限制。通过新增的 `clean_image_model_name` 智能清洗后缀(如 `-4k`, `-16x9`),全面兼容如 `gemini-3.1-flash-image` 等任意未来新增的画图模型。 - **配额自适应**: 优化了 `normalize_to_standard_id`,使用 `image` 关键词宽泛匹配,确保新模型也能正确触发配额保护机制。 - **[核心功能] 聊天接口 (Chat Completions) 画图拦截支持**: - **跨界融合**: OpenAI 和 Claude 协议的对话流现在能智能探测画像生成意图。当使用带有 `image` 的模型名时,系统会将常规文本生成请求静默转移给高级画图引擎。 - **流式回显**: 生成完成后,通过 Markdown 格式(`![Generated Image](https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/url)`)以 SSE 流式返回图片链接,完美适配所有支持 Markdown 的聊天客户端。 - **[核心修复] 彻底修复画图重定向 404 与参数穿透失效**: - **404 移除**: 移除了底层调用中残留的旧模型硬编码,根除因模型信息不一致导致的 404 Not Found 崩溃及账号受损。 - **精准参数继承**: 修复了未传参数时系统强制塞入默认 `1024x1024` 的行为。现在,如果模型名带有后缀(如 `gemini-3-pro-image-16x9-4k`),后台会严格优先解析后缀分辨率进行穿透绘图。 * **v4.1.24 (2026-02-26)**: - **[功能调整] 禁用自动预热调度程序,保留手动预热**: - **变更说明**: 为了减少不必要的后台资源占用,本版本已注释掉自动预热(Smart Warmup)的后台调度逻辑。 - **设置隐藏**: 设置页面中的“智能预热”配置项已隐藏。 - **手动保留**: 账号管理页面的手动预热功能保持不变,仍可正常使用。 - **恢复指引**: 如果您需要自动预热功能,可以自行拉取本项目源代码,在 `src-tauri/src/lib.rs` 中取消 `start_scheduler` 的注释并解除 `Settings.tsx` 中相关 UI 的注释后重新编译使用。 - **[核心修复] 智能版本指纹选择与启动 Panic 修复 (Issue #2123)**: - **问题根源**: 1) `constants.rs` 中的 `KNOWN_STABLE_VERSION` 硬编码了低版本号,当本地 IDE 检测失败时回退该版本作为请求头,导致 Google 拒绝 Gemini 3.1 Pro 模型。2) 新增的远端版本网络调用直接在 `LazyLock` 初始化(Tokio 异步上下文)中执行,导致 `Cannot block the current thread` 严重崩溃。 - **修复方案**: 1) 引入"智能最大版本"策略 `max(本地版本, 远端版本, 4.1.27)`,始终取最高值。2) 将网络探测逻辑移至独立 OS 线程并配合 `mpsc` 通道,安全避开异步运行时限制。保证无论本地版本新旧,指纹均不低于上游要求,且应用能稳定启动。 - **[核心修复] 动态模型 maxOutputTokens 限额系统 (替代 PR #2119 硬编码方案)**: - **问题根源**: 部分客户端发送的 `maxOutputTokens` 超过模型物理上限(如 Flash 限制 64k),导致上游返回 400 错误。 - **三层限额架构**: - **第一层(动态优先)**: 实时读取账号 `quota.models` 数据。 - **第二层(静态默认表)**: `model_limits.rs` 内置已知限额(如 Flash 65536)。 - **第三层(全局兜底)**: 默认 131072。 - **实现细节**: 在 `wrap_request()` 中注入裁剪逻辑,确保请求参数合法。 * **v4.1.23 (2026-02-25)**: - **[安全增强] 优化与原生对齐应用层与底层特征指纹,提升请求稳定性与防拦截能力。** - **[核心修复] 将 v1beta thinkingLevel 转换为 v1internal thinkingBudget (PR #2095)**: - **问题根源**: OpenClaw、Cline 等客户端发送 v1beta 格式的 `thinkingLevel` 字符串(`"NONE"` / `"LOW"` / `"MEDIUM"` / `"HIGH"`)到 `generationConfig.thinkingConfig`。当 AGM 通过 Google v1internal API 代理请求时,Google 会因为 v1internal 仅接受数字型 `thinkingBudget` 而拒绝请求,返回 `400 INVALID_ARGUMENT`。 - **修复方案**: 在 `wrap_request()` 的现有 budget 处理逻辑之前,新增一个早期转换步骤:检测 `thinkingLevel` 字符串,将其映射为对应的数字 `thinkingBudget`(`NONE`→0, `LOW`→4096, `MEDIUM`→8192, `HIGH`→24576),然后删除 `thinkingLevel` 字段并写入 `thinkingBudget`,确保下游所有 budget 处理逻辑(预算封顶、`maxOutputTokens` 调整、自适应检测)都能看到正确的数值预算。 - **测试**: 已验证 OpenClaw 发送 `thinkingLevel: "LOW"` 到 `gemini-3.1-pro-high`(Gemini 原生协议),请求现返回 `200 OK`,不再报 400 错误。 - **[核心修复] 账号数据损坏与后台任务无限循环修复 (PR #2094)**: - **问题根源**: 当用户在设置中输入过大的刷新间隔值(如 999999999)时,`interval * 60 * 1000` 超过 JS 引擎 32 位有符号整数上限 `2,147,483,647ms`,浏览器会将 `setInterval` 延迟静默截断为 1ms,导致前端每秒触发数千次 `refreshAllQuotas`/`syncAccountFromDb` 请求,进而引发多线程并发写同一 `[uuid].json` 文件,造成字节流交错、JSON 尾部残留,账号数据永久损坏。 - **原子文件写入 (`account.rs`)**: `save_account` 改为先写入 UUID 后缀的临时文件,再通过 `fs::rename`(POSIX)/ `MoveFileExW`(Windows)原子替换目标文件,与已有的 `save_account_index` 保持一致,从根本上消除并发写导致的 JSON 损坏。 - **setInterval 溢出保护 (`BackgroundTaskRunner.tsx`)**: 对 `refresh_interval` 和 `sync_interval` 两个定时器的延迟参数加上 `Math.min(..., 2147483647)` 上界限制,防止超过 INT32_MAX 后被浏览器截断为 1ms 无限循环。 - **输入验证 (`Settings.tsx`)**: 将 `refresh_interval` 和 `sync_interval` 输入框的 `max` 属性从 `60` 更新为 `35791`(35791 min × 60000 < INT32_MAX),并在 `onChange` 中添加 `NaN` fallback(默认为 1)及范围夹紧 `[1, 35791]`,从源头阻断非法值输入。 - **[核心优化] OAuth 换票专属:剔除 JA3 指纹与动态 User-Agent 伪装**: - **纯净请求**: 仅针对 `exchange_code`(首次授权)和 `refresh_access_token`(静默续期)的换票请求,移除了底层网络库的 Chrome JA3 指纹伪装,恢复标准纯净的 TLS特征。 - **动态 UA**: 换票时自动提取编译时版本号 (`CURRENT_VERSION`) 构建专属的 `User-Agent`(如 `vscode/1.X.X (Antigravity/4.1.27)`),以匹配纯净 TLS 链路。 - **[功能增强] API 反代页面与设置页模型列表全面接入动态模型数据**: - **问题根源**: "API 反代 → 支持模型与集成"列表与"模型路由中心"的目标模型选择下拉框,以及"设置 → 固定配额模型"列表,此前均仅从静态 `MODEL_CONFIG` 读取硬编码模型信息,导致账号实际下发的动态新模型(如 `GPT-OSS 120B`、`Gemini 3.1 Pro (High)` 等)无法出现在这些列表中。 - **修复方案**: - 重构 `useProxyModels` Hook:以账号 `quota.models` 动态数据为第一优先数据源,聚合所有账号里所有模型的 `display_name`(为主展示名称)和 `name`(为模型 ID);`MODEL_CONFIG` 仅作为图标/分组的样式补充,以及无账号数据时的静态兜底。 - 新增自动懒加载逻辑:`ApiProxy` 页面本身不调用 `fetchAccounts`,现在 Hook 内部检测到 store 为空时自动触发,保证动态模型在任意导航路径下均可正常展示。 - 重构 `PinnedQuotaModels` 组件:采用同等策略,从 `useAccountStore` 拉取全账号动态模型,并修复了已固定的 "thinking" 类型模型显示"未知"的问题,改为优先展示其真实 `display_name`。 - **去重优化**: 所有列表均基于模型原始 `name`(小写)去重,并额外过滤掉 `-thinking` 后缀的 MODEL_CONFIG 静态别名条目(这类变体已由账号数据中的 `supports_thinking` 标记覆盖)。 * **v4.1.22 (2026-02-21)**: - **[重要提醒] 2api 风控风险提示**: - 由于近期的谷歌风控原因,使用 2api 功能会导致账号被风控的概率显著增加。 - **强烈建议**: 为了确保您的账号安全与调用稳定性,建议减少或停止使用 2api 功能。目前更原生、更稳定的 **gRPC (`application/grpc`)** 或 **gRPC-Web (`application/grpc-web`)** 协议代理支持仍在积极测试中,如果您有相关的测试经验或想法,非常欢迎联系讨论,也欢迎您建立新分支一起探索! -
📸 点击查看 gRPC 实时转换 OpenAI 规范测试演示gRPC Test
- **[核心优化] Claude Sonnet 4.5 迁移至 4.6 (PR #2014)**: - **模型升级**: 引入 `claude-sonnet-4-6` 及 `claude-sonnet-4-6-thinking` 作为主推模型。 - **平滑过渡**: 自动将 legacy 模型 `claude-sonnet-4-5` 重定向至 `4.6`。 - **全局适配**: 更新了全部 12 种语言的本地化文件、UI 标签(Sonnet 4.6, Sonnet 4.6 TK, Opus 4.6 TK)以及预设路由。 - **[核心优化] Gemini Pro 模型名称迁移 (PR #2063)**: 将 `gemini-pro-high/low` 迁移至 `gemini-3.1-pro`,确保与 Google 最新 API 命名对齐。 - **[重大架构] 国际化 (i18n) 与结构化模型配置集成 (PR #2040)**: - **架构重构**: 引入了全新的 i18n 翻译框架,将硬编码的模型展示逻辑解耦至结构化 `MODEL_CONFIG`。 - **逻辑适配**: 在账号表格、详情弹窗和设置页面中集成了基于 i18n 标签的动态去重机制,修复了 Gemini 3.1 Pro 额度重复显示的 UI 问题。 - **多语言提升**: 优化并修正了所有 12 种语言的版本描述,将 `Claude 4.5` 描述全面升级为正式版 `4.6`,并将 `G3` 描述统一为 `G3.1`。 - **[核心修复] Claude Opus 4.6 思考模式 400 报错 (Claude 协议)**: - **参数专项对齐**: 修复了 `claude-opus-4-6-thinking` 在 Claude 协议下返回 `400 INVALID_ARGUMENT` 的问题。通过强制对齐 `thinkingBudget` (24576) 与 `maxOutputTokens` (57344),并剔除在该模式下不兼容的 `stopSequences`,确保其请求参数与 100% 成功的 OpenAI 协议完全一致,提升了对 Claude 原生协议客户端的兼容性。 * **v4.1.21 (2026-02-17)**: - **[核心修复] Cherry Studio / Claude 协议兼容性 (Fix Issue #2007)**: - **maxOutputTokens 限制**: 修复了 Cherry Studio 等客户端发送超大 `maxOutputTokens` (128k) 导致 Google API 返回 `400 INVALID_ARGUMENT` 的问题。现在自动将 Claude 协议的输出上限限制为 **65536**,确保请求始终在 Gemini 允许的范围内。 - **Adaptive 思考模式对齐**: 针对 Gemini 模型优化了 Claude 协议的 `thinking: { type: "adaptive" }` 行为。现在自动映射为 **24576** 的固定思考预算 (与 OpenAI 协议一致),解决了 Gemini Vertex AI 对 `thinkingBudget: -1` 的不兼容问题,显著提升了 Cherry Studio 的思考模式稳定性。 - **[核心修复] 生产环境自定义协议支持 (PR #2005)**: - **协议修复**: 默认启用 `custom-protocol` 特性,修复了生产环境下自定义协议 (如 `tauri://`) 加载失败的问题,确保本地资源和特殊协议请求的稳定性。 - **[核心优化] 托盘图标与窗口生命周期管理**: - **智能托盘**: 引入 `AppRuntimeFlags` 状态管理,实现了窗口关闭行为与托盘状态的联动。 - **行为优化**: 当托盘启用时,关闭窗口将自动隐藏而非退出应用;当托盘禁用时,关闭窗口将正常退出,提供了更符合直觉的桌面体验。 - **[核心增强] Linux 版本检测与 HTTP 客户端鲁棒性**: - **版本解析**: 增强了 Linux 平台的版本号提取逻辑 (`extract_semver`),能从复杂的命令行输出中准确识别版本,提升了自动更新和环境检测的准确性。 - **客户端降级**: 为 HTTP 客户端构建过程增加了自动降级机制。当代理配置导致构建失败时,系统会自动回退到无代理模式或默认配置,防止因网络配置错误导致应用完全不可用。 - **[核心修复] Cherry Studio 联网搜索空响应修复 (/v1/responses)**: - **SSE 事件补全**: 重写了 `create_codex_sse_stream`,补全了 OpenAI Responses API 规范要求的完整 SSE 事件生命周期(`response.output_item.added`、`content_part.added/done`、`output_item.done`、`response.completed`),解决了 Cherry Studio 因事件缺失导致无法组装响应内容的问题。 - **联网搜索注入修复**: 过滤了 Cherry Studio 发送的 `builtin_web_search` 工具声明,防止其与 `inject_google_search_tool` 冲突,确保 Google Search 工具被正确注入。 - **搜索引文回显**: 为 Codex 流式响应添加了 `groundingMetadata` 解析,支持在联网搜索结果中回显搜索查询和来源引文。 - **[优化] Claude 协议联网与思考稳定性 (PR #2007)**: - **移除联网降级**: 移除了 Claude 协议中针对联网搜索的激进模型降级逻辑,避免不必要的模型回退。 - **移除思考历史降级**: 移除了 `should_disable_thinking_due_to_history` 检查,不再因历史消息格式问题永久禁用思考模式,改为依赖 `thinking_recovery` 机制自动修复。 - **UI 优化 (Fix #2008)**: 改进了冷却时间的显示颜色 (使用蓝色),提高了在小字体下的可读性。 * **v4.1.20 (2026-02-16)**: * **[✨ 新春祝福] 祝大家马年一马当先,万事如意!Code 运昌隆,上线无 Bug!🧧** * **[Critical]** 修复了 Claude Opus/Haiku 等模型在 Antigravity API 上的 `400 INVALID_ARGUMENT` 错误(通过恢复 v4.1.16 的核心协议格式)。 * 增强了流式响应的健壮性,优化了对心跳包和非从零开始的 Thinking Block 的处理。 * **[核心修复] 修复图像生成配额同步问题 (Issue #1995)**: * **放宽模型过滤**:优化了配额抓取逻辑,增加了对 `image` / `imagen` 关键字的支持,确保图像模型的配额信息能正常同步。 * **即时刷新机制**:在图像生成成功后立即异步触发全局配额刷新,实现了 UI 侧剩余配额的实时反馈。 * **[核心修复] 修复 OpenAI 流式收集器工具调用合并 Bug (PR #1994)**: * **ID 冲突校验**:在聚合流式片段时引入 ID 校验,防止多个工具调用因索引重叠而导致参数被错误拼接。 * **索引稳定性优化**:优化了流式输出中的索引分配逻辑,确保多轮数据传输下工具调用索引始终单向递增。 * **[核心优化] 极致拟真请求伪装 (Request Identity Camouflage)**: * **动态版本伪装**: 实现了智能版本探测机制。Antigravity 现在会自动读取本地安装的真实版本号构建 User-Agent,彻底告别了硬编码的 "1.0.0" 时代。 * **Docker 环境兜底**: 针对无头模式(Docker/Linux Server),内置了“已知稳定版”指纹库。当无法检测到本地客户端时,自动伪装为最新稳定版客户端(如 v1.16.5),确保服务端看到的永远是合法的官方客户端。 * **全维度 Header 注入**: 补全了 `X-Client-Name`, `X-Client-Version`, `X-Machine-Id`, `X-VSCode-SessionId` 等关键指纹头,实现了从网络层到应用层的像素级伪装,进一步降低了 403 风控概率。 * **[核心功能] 后台自动刷新开关与设置热保存**: * **独立开关**: 在设置页面新增了“后台自动刷新”的独立开关,允许用户更精细地控制后台任务。 * **配置热保存**: 实现了设置项(自动刷新、智能预热、配额保护)的热保存机制,无需手动点击保存按钮即可实时生效。 * **[逻辑优化] 智能预热与配额保护解耦**: * **解除锁定**: 彻底移除了“额度保护”对“智能预热”的强制绑定。现在开启额度保护仅会强制开启“后台自动刷新”(用于检测配额),而不会强制启动预热请求。 * **[重要建议]**: 建议用户在当前版本暂时关闭“额度保护”和“后台自动刷新”功能,以避免因频繁请求导致的潜在问题。 * **v4.1.19 (2026-02-15)**: - **[核心修复] 修复 Claude Code CLI 工具调用空文本块错误 (Fix #1974)**: - **字段缺失修复**: 修复了 Claude Code CLI 在工具调用过程中,因发送空文本块 (`text: ""`) 导致上游 API 报错 `Field required` 的问题。 - **空值过滤**: 在协议转换层增加了对无效空文本块的自动过滤与清理。 - **[核心功能] Gemini 模型 MCP 工具名模糊匹配支持**: - **幻觉修复**: 针对 Gemini 模型经常幻觉出错误的 MCP 工具名称(如显式调用 `mcp__puppeteer_navigate` 而非注册名 `mcp__puppeteer__puppeteer_navigate`)的问题,实现了智能模糊匹配算法。 - **三级匹配策略**: 引入了后缀匹配、包含匹配及 Token 重叠度评分机制,显著提升了 Gemini 模型调用 MCP 工具的成功率。 - **[核心修复] Opencode 同步逻辑修正 (Fix #1972)**: - **模型缺失修复**: 修复了 Opencode CLI 同步时缺失 `claude-opus-4-6-thinking` 模型定义的问题,确保该模型能被客户端正确识别和调用。 * **v4.1.18 (2026-02-14)**: - **[核心升级] JA3 指纹伪装 (Chrome 123) 全面实装**: - **反爬虫突破**: 引入 `rquest` 核心库并集成 BoringSSL,实现了像素级复刻 Chrome 123 的 TLS 指纹 (JA3/JA4),有效解决高防护上游的 403/Captchas 拦截问题。 - **全局覆盖**: 指纹伪装已应用至全局共享客户端及代理池管理器,确保从配额查询到对话补全的所有出站流量均模拟为真实浏览器行为。 - **[架构重构] 通用流式响应处理 (Universal Stream Handling) (Issue #1955)**: - **双核兼容**: 重构了 SSE 处理与调试日志模块,通过 `Box` 实现了对 `reqwest` (标准) 与 `rquest` (伪装) 响应流的统一兼容,消除了底层类型冲突。 - **[核心功能] 账号错误详情增强 (Account Error Details Expansion)**: - **详情解读**: 为“已禁用”和“403 Forbidden”状态的账号引入了深度错误详情弹窗,自动展示底层 API 报错原因(如 `invalid_grant` 等)。 - **验证链接识别**: [新] 智能检测错误文本中的 Google 验证/申诉链接,支持在弹窗内直接点击跳转,加速账号修复流程。 - **时间校准**: 修复了由于单位转换错误导致的“检测时间”显示为未来的 Bug。 - **[i18n] 全球化多语言支持大满贯**: - **全语言适配**: 为全部 12 种支持语言(阿、西、日、韩、缅、葡、俄、土、越、英及简繁中)同步补全了账号详情与错误状态词条。 - **本地化精修**: 优化了各语言下的术语匹配(特别是日语、土耳其语和繁体中文),确保全球用户都能获得准确的母语提示。 - **[核心修复] 修复图像生成模型后缀导致的配额匹配失效 (Issue #1955)**: - **模式归一化**: 修复了 `gemini-3-pro-image` 及其分辨率/比例后缀(如 `-4k`, `-16x9`)因归一化匹配不精确导致的配额校验失效问题。 - **配额对齐**: 确保所有图像模型变体都能正确映射到标准 ID,从而准确触发账号配额保护,解决了“无可用配额账号”的误报。 * **v4.1.17 (2026-02-13)**: - **[用户体验] 自动更新体验升级 (PR #1923)**: - **后台下载**: 实现了更新包的后台静默下载,下载过程中不再阻断用户操作。 - **进度反馈**: 新增下载进度条显示,实时反馈下载状态。 - **重启提示**: 下载完成后会弹出更友好的重启提示,支持“立即重启”或“稍后重启”。 - **逻辑优化**: 优先检查 `updater.json`,减少对 GitHub API 的直接依赖,提升检查速度。 - **[文档更新] 跨平台安装脚本 (PR #1931)**: - **一键安装**: 在 README 中更新了 Option A 安装方式,推荐使用跨平台一键安装脚本。 - **[社区建设] 新增 Telegram 频道入口**: - **社群卡片**: 在“设置 -> 关于”页面新增了 Telegram 频道卡片,方便用户快速加入官方频道获取最新资讯。 - **布局优化**: 调整了关于页面的卡片网格布局,适配了 5 列显示,确保界面整洁美观。 * **v4.1.16 (2026-02-12)**: - **[核心修复] 修复 Claude 协议 (Thinking 模型) 400 错误 (V4 方案)**: - **协议对齐**: 彻底修复了 Claude 3.7/4.5 Thinking 等模型在通过代理调用时因参数结构不匹配导致的 `400 Invalid Argument` 错误。 - **统一注入**: 废弃了导致冲突的根目录 `thinking` 字段注入,现在统一使用 Google 原生协议推荐的 `generationConfig.thinkingConfig` 嵌套结构。 - **预算适配**: 为 Claude 模型适配了默认 16k 的思考预算 (Thinking Budget),并解决了 Rust 借用检查导致的编译与运行时异常。 - **[Bug修复] 修复 OpenAI 流式响应 Usage 重复问题 (Issue #1915)**: - **Token爆炸修复**: 修复了在流式传输模式下 (stream=true),`usage` 字段被错误地附加到每一个数据块 (Chunk) 中,导致客户端 (如 Cline/Roo Code) 统计的 Token 用量呈指数级虚高的问题。 - **[核心优化] 开启 Linux 平台原生自动更新支持 (PR #1891)**: - **全平台覆盖**: 在 `updater.json` 中增加了对 `linux-x86_64` 和 `linux-aarch64` 平台的支持,使 Linux AppImage 用户现在也能正常收到自动更新通知。 - **发布流优化**: 自动匹配并读取 Linux 版本的 `.AppImage.sig` 签名文件,实现了 macOS、Windows 与 Linux 三大主流平台的自动更新能力闭环。 - **[新增功能] 跨平台一行命令安装脚本支持 (PR #1892)**: - **安装体验升级**: 新增 `install.sh` (Linux/macOS) 和 `install.ps1` (Windows) 脚本,支持通过极简的 `curl` 或 `irm` 命令实现全自动下载、安装与环境配置。 - **智能适配**: 脚本支持自动识别操作系统、架构、包管理器(DEB/RPM/AppImage/DMG/NSIS),并提供版本锁定与 Dry-Run 预览模式。 - **[核心优化] OpenCode 配置与本地二进制解耦及自定义网络支持 (Issue #1869)**: - **环境解耦**: 后端不再强制校验 `opencode` 二进制是否存在,允许在 Docker 等隔离环境下仅通过配置文件管理同步状态。 - **自定义 BaseURL**: 前端新增 "Custom Manager BaseURL" 设置,支持手动指定 Manager 访问地址,完美解决 Docker Compose 容器互联与自定义反代场景下的连接问题。 - **完全本地化**: 为新功能补全了中、英双语 I18n 支持,并修复了 OpenCode 同步弹窗的 JSX 渲染异常。 - **[UI 修复] 修复 API 代理模板生成的 Python 代码缩进不一致问题 (PR #1879)**: - **显示优化**: 移除了 Python 集成示例代码块中多余的行首空格,确保从界面复制的代码可以直接运行,无需手动调整缩进。 - **[核心修复] 解决 Gemini 图像生成因关键词匹配导致的 effortLevel 冲突 (PR #1873)**: - **逻辑冲突修复**: 彻底修复了 `gemini-3-pro-image` 及其 4k/2k 变体因包含 `gemini-3-pro` 关键词,被系统错误判定为支持 Adaptive Thinking 从而误注入 `effortLevel` 导致的 HTTP 400 错误。 - **[文档更新] 发布 Gemini 3 Pro (Imagen 3) 图像生成全功能调用指南**: - **深度指南**: 新增 [Gemini 3 Pro 图像模型调用指南](docs/gemini-3-image-guide.md),详细说明了宽高比自动映射、画质等级对应关系图表,以及新增的图生图 (Image-to-Image) 与后缀魔法用法。 - **[安装优化] 官方 Homebrew Cask 维护与更新**: - **版本同步**: 更新 `antigravity-tools.rb` Cask 配置至 v4.1.16,确保 macOS 与 Linux 用户通过 `brew install` 始终获取最新稳定版本。 - **参数清洗**: 在代理请求层增加了对图像生成模型的特殊过滤,确保不再为非思维链模型注入不兼容的生成参数。 * **v4.1.15 (2026-02-11)**: - **[核心功能] 开启 macOS 与 Windows 原生自动更新支持 (PR #1850)**: - **端到端自动更新**: 启用了 Tauri 的原生更新插件,支持在应用内直接检测、下载并安装更新。 - **发布工作流修复**: 彻底修复了 Release 工作流中生成更新元数据 (`updater.json`) 的逻辑。现在系统会自动根据 `.sig` 签名文件构建完整的更新索引,支持 darwin-aarch64, darwin-x86_64 以及 windows-x86_64 架构。 - **体验打通**: 配合前端已有的更新提醒组件,实现了从发布到安装的全自动化闭环。 - **[核心修复] 解决切换账号时由于空 Project ID 导致的 400 错误 (PR #1852)**: - **空值过滤**: 在 Proxy 层增加了对 `project_id` 的空字符串过滤逻辑。 - **自动纠错**: 当检测到账号数据中的 `project_id` 为空时,现在会触发自动重新获取流程,有效解决了 Issue #1846 和 #1851 中提到的 "Invalid project resource name projects/" 错误。 - **[故障排查] 针对 HTTP 404 "Resource projects/... not found" 的解决建议 (Issue #1858)**: - **验证项目 ID**: 登录 [Google Cloud Console](https://console.cloud.google.com/),在项目选择器中搜索报错提到的 ID(如 `bold-spark-xxx`)。若项目不存在,请创建新项目并启用所需的 Vertex AI API。 - **重置账户会话**: 尝试在 Antigravity 应用中“删除账户”并“重新添加”,以清除旧的会话残留。 - **CLI 辅助验证**: 建议使用 Gemini CLI (`gcloud auth login`) 重新进行身份验证,并确保 `gcloud config set project` 指向了正确的有效项目。 - **[故障排查] 针对 HTTP 403 "Forbidden" 错误的解决建议 (Issue #1834)**: - **检查验证链接**: 请检查 API 响应中是否包含提示 "To continue, verify your account at..." 的链接。若有,请点击该链接并按照 Google 提示完成验证。 - **确认计划资格**: 访问 [FAQ 页面](https://antigravity.google/docs/faq#why-am-i-ineligible-for-a-google-one-ai-plan) 确认您的账号是否符合 Google One AI 计划或 Gemini Code Assist 的使用要求。 - **自动恢复**: 部分 403 错误(如触发风险控制或配额调整)可能会在等待一段时间后自动恢复正常。 * **v4.1.15 (2026-02-11)**: - **[核心修复] Cloudflared 公网访问设置持久化 (Issue #1805)**: - **设置记忆**: 修复了 Cloudflared (CF Tunnel) 的 Token、隧道模式及 HTTP/2 设置在应用重启后丢失的问题。 - **热更新同步**: 实现了设置的实时持久化。现在切换隧道模式、修改 Token (失焦同步) 或切换 HTTP/2 选项时,配置都会立即保存,确保重启后恢复如初。 - **[核心修复] 修复 Warmup 过程中的 403 禁用标记 (PR #1803)**: - **禁用识别**: 修复了账号在 Warmup (预热) 过程中返回 403 错误时未被标记为 `is_forbidden` 的问题。 - **自动跳过**: 现在 Warmup 过程中检测到 403 将立即标记并持久化账号禁用状态,并在后续的调度、预热和配额检查中自动跳过该账号,避免无效请求。 - **[UI 优化] 迷你视图 (Mini View) 状态显示与交互增强 (PR #1816)**: - **状态指示点**: 在迷你视图底部新增了请求状态圆点。成功 (200-399) 显示为绿色,失败显示为红色,直观反馈最近一次请求结果。 - **模型名称回退**: 优化了模型名称显示逻辑。当 `mapped_model` 为空时,自动回退显示原始模型 ID 而非 "Unknown",提升信息透明度。 - **刷新动画优化**: 改进了刷新按钮的动画效果,使旋转动画仅作用于 `RefreshCw` 图标本身,交互更加细腻。 - **[核心功能] Claude 4.6 Adaptive Thinking 模式支持**: - **Dynamic Effort**: 全面支持 `effort` 参数 (low/medium/high),允许用户动态调整模型的思考深度与预算。 - **Token 限制自适应**: 修复了 Adaptive 模式下 `maxOutputTokens` 未能正确感知 Budget 导致被截断的问题,确保长思维链不被腰斩。 - **[文档更新] 新增 Adaptive 模式测试用例**: - 提供了 `docs/adaptive_mode_test_examples.md`,涵盖多轮对话、复杂任务场景及 Budget 模式切换的完整验证指南。 - **[核心功能] 图片生成 imageSize 参数支持**: - **直接参数支持**: 新增对 Gemini 原生 `imageSize` 参数的直接支持,可在所有协议(OpenAI/Claude/Gemini)中使用。 - **参数优先级**: 实现了清晰的参数优先级逻辑:`imageSize` 参数 > `quality` 参数推断 > 模型后缀推断。 - **全协议兼容**: OpenAI Chat API、Claude Messages API 和 Gemini 原生协议均支持通过 `imageSize` 字段直接指定分辨率("1K"/"2K"/"4K")。 - **向后兼容**: 完全兼容现有的 `quality` 参数和模型后缀方式,不影响现有代码。 - **[核心功能] Opencode 提供商隔离与清理工作流 (PR #1820)**: - **隔离同步逻辑**: 实现 Opencode 提供商的独立同步机制,防止状态污染,确保数据纯净。 - **清理工作流**: 新增资源清理工作流,优化资源管理,提升系统运行效率。 - **稳定性增强**: 增强了同步过程的稳定性和可靠性。 * **v4.1.15 (2026-02-11)**: - **[核心功能] Homebrew Cask 安装检测与支持 (PR #1673)**: - **应用升级**: 新增了对 Homebrew Cask 安装的检测逻辑。如果应用是通过 Cask 安装的,现在可以直接在应用内触发 `brew upgrade --cask` 流程,实现无缝升级体验。 - **[核心修复] Gemini 图像生成配额保护 (PR #1764)**: - **保护生效**: 修复了配额保护机制可能会错误统计文本请求的问题,并确保在绘图配额耗尽时能正确拦截 `gemini-3-pro-image` 的请求。 - **[UI 优化] 修复导航栏边界与显示问题 (PR #1636)**: - **边界修复**: 修复了导航栏右侧菜单在特定窗口宽度下可能超出边界或显示不全的问题。 - **兼容性**: 此次合并保留了主分支上的 Mini View 等新特性,只应用了必要的样式修正。 - **[UI 优化] 修复英文模式下的布局溢出与水平滚动 (Issue #1783)**: - **全局限制**: 在全局样式中封锁了水平轴溢出,杜绝了因文字过长导致的页面横向抖动。 - **响应式增强**: 优化了导航栏断点,将文字胶囊的显示阈值提高至 1120px,确保长英文标签在窄窗口下自动切换为图标模式,保持布局整洁。 - **[核心修复] 修复处理复杂 JSON Schema 时可能发生的栈溢出问题 (Issue #1781)**: - **安全加固**: 为 `flatten_refs` 等深度递归逻辑引入了 `MAX_RECURSION_DEPTH` (10) 限制,有效防止了由循环引用或过深嵌套导致的程序崩溃。 - **[核心修复] 修复流式输出下多个工具调用被错误拼接的问题 (Issue #1786)**: - **索引校正**: 修正了 `create_openai_sse_stream` 中 `tool_calls` 的索引分配逻辑,确保同一个 chunk 中的多个工具调用拥有独立且连续的 `index`,避免了参数被错误拼接导致解析失败的现象。 - **[核心修复] 修复 Claude Thinking 模型多轮对话时的签名错误 (Issue #1790)**: - **签名注入与降级**: 在 OpenAI 协议转换层中增加了对历史消息思考块签名的自动注入逻辑。当无法获取有效签名时,自动将其降级为普通文本块,从而解决了 Claude-opus-thinking 等模型在多轮对话中因签名缺失导致的 HTTP 400 错误。 - **[核心修复] 修复 Google Cloud 项目 ID 获取失败导致的 503 错误 (Issue #1794)**: - **增加兜底**: 修复了由于账号权限导致无法获取官方项目 ID 时会跳过该账号的 Bug。现在系统会自动回退到经验证稳定的通用 Project ID (`bamboo-precept-lgxtn`),确保 API 请求的连续性。 - **[i18n] 完善 Settings 与 ApiProxy 国际化支持 (PR #1789)**: - **重构**: 将 `Settings.tsx` 和 `ApiProxy.tsx` 中硬编码的中文字符串替换为 `t()` 国际化调用。 - **翻译补全**: 同步更新了韩语、缅甸语、葡萄牙语、俄语、土耳其语、越南语、繁体中文和简体中文的本地化词条。 - **[核心修复] 修复 IP 白名单删除失败问题 (Issue #1797)**: - **参数规范化**: 修复了由于前端与后端参数命名风格 (snake_case vs camelCase) 不一致导致无法删除白名单 IP 的问题。同时统一了黑名单管理与 IP 访问日志的相关参数,确保全系统参数传递的一致性。 * **v4.1.12 (2026-02-10)**: - **[核心功能] OpenCode CLI 深度集成 (PR #1739)**: - **自动探测**: 新增了对 OpenCode CLI 的自动检测与环境变量配置同步支持。 - **一键同步**: 支持通过“外部 Providers”卡片将 Antigravity 的配置无缝注入到 OpenCode CLI 环境,实现零配置接入。 - **[核心修复] Claude Opus 思考预算自动注入 (PR #1747)**: - **预算修正**: 修复了 Opus 模型在自动启用思考模式时,未能正确注入默认思考预算 (Thinking Budget) 的问题,防止因预算缺失导致的上游错误。 - **[核心优化] Claude Opus 4.6 Thinking 全面升级 (Issue #1741, #1742, #1743)**: - **模型迭代**: 正式引入 `claude-opus-4-6-thinking` 支持,提供更强大的推理能力。 - **无感迁移**: 实现了从 `claude-opus-4.5` / `claude-opus-4` 到 `4.6` 的自动重定向,旧版配置无需修改即可直接享受新模型。 - **[核心修复] 账户索引自动修复机制 (PR #1755)**: - **容错增强**: 修复了在部分极端情况下(如文件损坏)账户索引无法自动重建的问题。现在系统会在检测到索引异常时自动触发自我修复流程,确保账号数据安全可用。 - **[核心修复] 修复 IP 黑名单删除与时区问题 (PR #1748)**: - **参数修正**: 修复了 IP 黑名单删除接口因参数命名风格 (snake_case vs camelCase) 不匹配导致的删除失败问题。 - **逻辑修复**: 修正了清除黑名单时传递了错误参数 (ip_pattern 而非 id) 的问题。 - **时区校准**: 修复了宵禁时间 (Curfew) 判断逻辑,强制使用北京时间 (UTC+8),解决了服务器本地时区非 UTC+8 时的判断偏差。 - **拒绝对齐**: 优化了令牌拒绝响应,返回 403 状态码及 JSON 错误详情,对齐了统一错误响应标准。 - **[核心功能] 新增迷你视图模式 (Mini View Mode) (PR #1750)**: - **便捷访问**: 新增迷你窗口模式,支持双向切换。该模式常驻桌面顶层,提供精简的快捷操作入口,方便用户即时查看状态与监控信息。 - **[核心修复] Gemini 协议 400 错误自愈 (PR #1756)**: - **Token 补全**: 修复了在 Gemini 原生协议下调用持续思考模型(如 Claude Opus 4.6 Thinking)时,因 `maxOutputTokens` 小于 `thinkingBudget` 导致的 400 报错。现在系统会自动补全并对齐 Token 限制,确保请求合规。 - **[核心修复] 修复 macOS 下 bun 全局安装的路径识别 (PR #1765)**: - **路径增强**: 新增对 `~/.bun/bin` 及全局安装路径的探测,解决了 bun 用户无法自动同步 Claude CLI 配置的问题。 - **[核心优化] 修复 Logo 文本在小容器下的换行与显示 (PR #1766)**: - **显示优化**: 使用 Tailwind CSS 容器查询逻辑优化了 Logo 文本的显示与隐藏切换,防止在容器空间不足时发生文字换行。 - **[核心修复] Google Cloud Code API 404 重试与账号轮换 (PR #1775)**: - **智能重试**: 针对 Google Cloud Code API 返回的 404 错误(常见于分阶段发布或权限差异场景),新增自动重试与账号轮换机制。系统将以 300ms 短延迟进行重试,并自动切换到下一个可用账号。 - **短周期避让**: 对 404 错误实施 5 秒软锁定(区别于其他服务端错误的 8 秒),在保护账号的同时最大程度减少用户等待时间。 * **v4.1.11 (2026-02-09)**: - **[核心优化] 重构 Token 轮询逻辑 (High-End Model Routing Optimization)**: - **能力硬门槛**: 针对 `claude-opus-4-6` 等高端模型实施了严格的 Capability Filtering。系统现在会检查账号实际持有的 `model_quotas`,只有明确拥有目标模型配额的账号才能参与轮询,彻底解决了 Pro/Free 账号因 "Soft Priority" 而被错误选中的问题。 - **严格层级优先**: 确立了 `Ultra > Pro > Free` 的绝对优先级排序策略。只要 Ultra 账号可用,系统将始终优先调度 Ultra 账号,防止降级到 Pro 账号,确保了高端模型的服务质量。 - **[配置警告]**: 请检查 `设置 -> 自定义模型映射` 或 `gui_config.json`,确保**没有**配置 `"claude-opus-4-*": "claude-opus-4-5-thinking"` 这样的通配符,否则会导致 `claude-opus-4-6-thinking` 被错误映射到 `claude-opus-4-5-thinking`。建议为 `claude-opus-4-6-thinking` 添加明确的精确映射。 - **[核心修复] 修复配置热重载失效问题 (PR #1713)**: - **即时生效**: 修复了在 WebUI 或 Docker 环境下保存配置时,内存中的代理池配置未同步更新的问题。现在修改配置后无需重启即可立即生效。 - **[Docker 优化] 新增本地绑定限制选项**: - **网络安全**: 新增 `ABV_BIND_LOCAL_ONLY` 环境变量。当设置为 `true` 时,Docker/Headless 模式将仅绑定 `127.0.0.1`,不再默认向 `0.0.0.0` 暴露服务,满足特定安全网络需求。 - **[核心功能] 用户 Token 支持自定义过期时间 (PR #1722)**: - **灵活控制**: 创建用户 Token 时现在支持选择精确到分钟的自定义过期时间,不再局限于预设的固定时长。 - **[核心修复] Token 编辑数据同步与参数封装 (PR #1720, #1722)**: - **数据同步**: 修复了编辑 Token 时部分字段数据未正确回显的问题。 - **代码重构**: 优化了 Token 创建与更新的参数传递结构,提升了代码的可维护性。 - **[核心修复] 修复代理认证信息持久化失效问题 (Issue #1738)**: - **魔术前缀机制**: 引入 `ag_enc_` 前缀来明确标识已加密的密码字段。 - **双重加密防护**: 彻底解决了后端无法区分“用户输入的明文”与“已加密的密文”,导致在多次保存或导入导出时发生双重加密(Double Encryption)的问题。 - **兼容性**: 完美兼容旧版配置(无前缀),并在下次保存时自动迁移到新格式。同时增强了批量导入功能的健壮性。 - **[核心修复] 解决用户创建/加载失败问题 (Issue #1719)**: - **数据清洗**: 在数据库初始化阶段增加了针对旧数据的清洗逻辑,自动将 NULL 值重置为默认值,修复了因字段缺失导致的列表接口崩溃。 - **鲁棒性增强**: 优化了后端数据读取逻辑,为关键字段增加了防御性默认值处理。 - **[前端修复] 修复用户 Token 续期功能失效**: - **参数修正**: 修正了续期接口调用时的参数命名风格 (snake_case -> camelCase),解决了 "missing required key" 报错。 - **[核心修复] 彻底解决 Google Cloud 项目 404 错误 (Issue #1736)**: - **移除无效 Mock 逻辑**: 彻底删除了随机生成 Project ID 的失效逻辑(如 `useful-flow-g3dts`),此类 ID 目前会被 Google API 拦截并返回 404。 - **智能兜底策略**: 现在当账号无法自动获取项目 ID 时,系统会安全回退到经验证长期有效的稳定 Project ID `bamboo-precept-lgxtn`,确保 API 请求的连续性与稳定性。 - **[核心修复] 增强网络环境下的流式传输稳定性 (Issue #1732)**: - **强制缓冲区冲刷 (Flush)**: 解决了在不稳定网络环境下,SSE 流因缺少末尾换行符而导致的对话挂起及 "IO 为 0" 问题。 - **超时容错增强**: 将流式响应超时时间延长至 60s,有效对抗高延迟网络引发的异常中断。 - **Session ID 稳定性优化**: 改进了会话标识生成算法,防止网络重连后的 ID 漂移及其引发的思维模型签名失效。 * **v4.1.10 (2026-02-08)**: - **[核心功能] 扩展 CLI 探测路径以支持 Volta (PR #1695)**: - **路径增强**:在 `cli_sync` 和 `opencode_sync` 中新增了对 `.volta/bin` 及其内部二进制文件的自动探测支持,确保 Volta 用户在同步 CLI 配置时能够获得“零配置”的顺滑体验。 - **[核心修复] 图像生成分辨率智能保护 (Issue #1694)**: - **逻辑保护**:重构了图像配置合并算法,优先保留模型名后缀(如 `-4k`, `-2k`)或显式参数(`quality: "hd"`)指定的高分辨率设置,防止由于请求体中的默认值导致的分辨率降级。 - **能力增强**:支持在生成高分辨率图像的同时,完整保留并回显思维链(Thinking)内容。 - **[核心功能] 高级思维与全局配置深度优化**: - **图像思维开关**:新增全局“图像思维模式”选项。启用时可获得双图(草图+终稿)及思维链;禁用时系统显式强制注入 `includeThoughts: false`,优先保证单图生成质量。 - **UI 重构**:对“高级思维”模块进行了空间压缩,采用行式布局和紧凑控件,将垂直空间占用减少了 50%,极大提升了配置效率。 - **全局提示词优化**:增强了输入框体验,添加了实时字符计数与超长警告。 - **[i18n] 全球 10+ 语言同步更新**: - **多语言补全**:为高级思维模块补全了繁体中文、日语、韩语、阿拉伯语、西班牙语、俄语、越南语、土耳其语、葡萄牙语和缅甸语的完整翻译,确保全球体验一致。 - **[核心修复] 全协议接口兼容性补全**: - **全渠道覆盖**:图像思维控制逻辑已同步覆盖 Gemini 原生协议、OpenAI 兼容协议以及 Claude (Anthropic) 协议。 - **测试稳定性**:修复了后端单元测试中的全局状态竞争问题,并更新了 GitHub Release CI 脚本以支持发布覆盖。 - **[核心修复] 账号代理绑定持久化与配额保护可靠性提升 (Issue #1700)**: - **绑定持久化**:修复了前端设置保存时因类型定义缺失导致 `account_bindings` 被覆盖的问题,确保绑定关系跨重启有效。 - **保护增强**:增强了模型名归一化引擎以识别实际 API 模型名,并完善了触发保护后的内存同步与调度过滤逻辑,彻底消除保护逃逸。 - **[核心功能] 优化全球上游代理 I18n 与样式 (Issue #1701)**: - **I18n 同步**:补全了全部 12 种支持语言的代理配置词条,解决 `zh.json` 内容缺失及各语言翻译不统一问题。 - **样式优化**:重构了全球代理配置卡片,引入渐变背景与微动画,使其在视觉上与代理池设置保持一致。 - **SOCKS5H 支持**:在界面增加了 `socks5h://` 协议建议提示,并统一了后端代理 URL 标准化逻辑,显著增强了远程 DNS 解析的引导。 * **v4.1.9 (2026-02-08)**: - **[核心功能] 扩展 CLI 配置快速同步支持 (PR #1680, #1685)**: - **更多工具集成**: 现已支持同步配置到 **Claude Code**, **Gemini CLI**, **Codex AI**, **OpenCode** 以及 **Droid**。 - **模型选择定制**: 为单模型 CLI (Claude, Codex, Gemini) 增加了模型选择下拉框,支持同步自定义模型 ID;为多模型 CLI (OpenCode, Droid) 实现了拖拽式模型列表管理。 - **逻辑校准**: 深度适配了各 CLI 的预设逻辑(如 Claude 根节点的 `model` 字段及镜像环境清理),确保同步后的兼容性。 - **交互优化**: 同步面板现支持默认折叠并适配平滑动画,同时优化了同步前后的 UI 状态反馈。 - **备份安全性**: 同步前自动生成 `.antigravity.bak` 备份,支持一键还原。 - **[核心功能] 新增全局系统提示词 (Global System Prompt) 支持 (PR #1669)**: - **统一指令注入**: 在“系统设置”中新增全局系统提示词配置,支持将自定义指令自动注入到所有 OpenAI、Claude 和 Gemini 协议请求中。 - **前端界面**: 新增 `GlobalSystemPrompt` 组件,支持一键启用及多行内容编辑。 - **[核心修复] 修复浮点数序列化精度丢失问题 (PR #1669)**: - **精度升级**: 将后端 `temperature` 和 `top_p` 的数据类型从 `f32` 升级为 `f64`。 - **逻辑校准**: 解决了请求参数在反代过程中因浮点转换导致的微小偏差(如 `0.95` 变成 `0.949999...`),显著提升了上游调用的稳定性。 - **[核心重构] 实现应用名称国际化 (PR #1662)**: - **UI 升级**: 移除了 `NavLogo` 和 `Settings` 页面中硬编码的 "Antigravity Tools",全面采用 `app_name` 翻译键,确保 UI 语言切换的一致性。 - **[核心修复] 修正 gemini-3-pro-image 因关键词匹配被误判定为思维模型的问题 (Issue #1675)**: - **问题根源**: `gemini-3-pro-image` 及其 4k/2k 变体因包含 `gemini-3-pro` 关键词,被系统错误判定为“思维模型”(Thinking Model)。 - **冲突修复**: 修正了误注入 `thinkingConfig` 与图像生成 `imageConfig` 发生的冲突,解决了导致后端分辨率降级(降至 1k)的问题。 - **Token 优化**: 解决了因思维模型逻辑注入占位符或特定限制而触发的“Token 超限(131072)” 400 错误。 - **[国际化] 日语翻译实现 100% 同步 (PR #1662)**: - **翻译补全**: 同步了 `en.json` 中的所有缺失键值,涵盖了 Cloudflared、断路器、OpenCode 同步等新功能。 - **[核心重构] 重构 UpstreamClient 响应处理逻辑**: - **结构化响应**: 引入 `UpstreamCallResult` 统一管理上游请求结果,优化了流式与非流式响应的处理路径。 * **v4.1.8 (2026-02-07)**: - **[核心功能] 集成 Claude Opus 4.6 Thinking 模型支持 (PR #1641)**: - **混合模式架构**: 实现了“静态配置 + 动态获取”的双模架构。模型列表通过 Antigravity API 动态拉取,而 Thinking 模式等高级元数据则由本地注册表静态补充,完美平衡了灵活性与稳定性。 - **零配置接入**: `claude-opus-4-6` 系列模型自动启用 Thinking 模式并预设 Budget,无需用户手动干预即可享受最新推理能力。 - **前沿模型映射**: 新增 `claude-opus-4-6-thinking` 及其别名 (`claude-opus-4-6`, `20260201`) 的支持,并将其归入 `claude-sonnet-4.5` 配额组进行统筹管理。 - **[核心优化] 优化 OpenCode CLI 检测逻辑 (PR #1649)**: - **路径扩展**: 增加了对 Windows 环境下常见全局安装路径(如 `npm`, `pnpm`, `Yarn`, `NVM`, `FNM` 等)的自动扫描。 - **稳定性增强**: 修复了在 `PATH` 环境不完整时可能导致检测失败的问题,并增强了对 `.cmd` 和 `.bat` 文件的支持。 - **[核心修复] 修复监控日志缺失流式工具调用内容的问题**: - **多协议支持**: 重构了 SSE 解析逻辑,全面支持 OpenAI `tool_calls` 和 Claude `tool_use`。 - **增量累积**: 实现了工具参数片段的流式累积,确保长参数工具调用能被完整记录并显示在监控面板中。 - **[UI 优化] 导航栏与链接交互优化 (PR #1648)**: - **禁止拖拽**: 为导航栏及 Logo 等所有链接和图片添加了 `draggable="false"`,防止用户在意外拖拽时触发浏览器的默认行为,提升交互稳定性。 - **SmartWarmup 悬停增强**: 优化了智能预热组件图标在未激活状态下的悬停颜色切换逻辑,使界面反馈更加细腻一致。 - **[核心功能] 账号自定义标签支持扩展 (PR #1620)**: - **长度限制**: 将标签长度限制从 20 字符优化为 15 字符,在前后端同步生效。 - **后端验证**: 增强了后端 Rust 命令的验证逻辑,支持 Unicode 字符计数,并优化了错误处理。 - **前端对齐**: 账户列表和卡片视图的编辑框均已同步 15 字符的最大长度。 - **[核心修复] 修复 UserToken 页面剪贴板错误 (PR #1639)**: - **逻辑修复**: 修复了在 UserToken 页面尝试访问或写入剪贴板时可能触发的异常。 - **体验优化**: 提高了剪贴板交互的鲁棒性,确保在各种环境下都能正常工作。 - **[核心优化] 优化 Token 排序性能并减少磁盘 I/O (PR #1627)**: - **内存配额缓存**: 将模型配额信息引入内存,在 `get_token` 排序 hot path 中直接使用缓存。 - **性能提升**: 消除了排序过程中由于频繁读取磁盘文件(`std::fs::read_to_string`)导致的同步 I/O 阻塞,显著降低了高并发下的请求推迟与延迟。 - **[国际化] 修复自定义标签功能缺失的翻译 (PR #1630)**: - **翻译补全**: 补全了繁体中文等语种中“编辑标签”、“自定义标签占位符”以及“标签更新成功”提示的国际化翻译。 - **[UI 修复] 修复 SmartWarmup 图标悬停效果缺失 (PR #1568)**: - **增加交互**: 为未启用状态的图标添加了悬停变色效果,与其他设置项保持一致。 - **[核心修复] 修复 OpenAI 协议下 Vertex AI 思考模型签名缺失问题 (Issue #1650)**: - **Sentinel 注入**: 移除了对 Vertex AI (`projects/...`) 模型的哨兵签名注入限制。现在即使缺少真实签名,系统也会自动注入 `skip_thought_signature_validator`,从而避免 `Field required for thinking signature` 错误。 * **v4.1.7 (2026-02-06)**: - **[核心修复] 修复图像生成 API (429/500/503) 自动切换账号问题 (Issue #1622)**: - **自动重试**: 为 `images/generations` 和 `images/edits` 引入了与 Chat API 一致的自动重试与账号轮换机制。 - **体验一致性**: 确保在某个账号配额耗尽或服务不可用时,请求能自动故障转移到下一个可用账号,不再直接失败。 - **[核心功能] 新增账户自定义标签支持 (PR #1620)**: - **标签管理**: 支持为每个账户设置个性化标签,方便在多账户环境下快速识别。 - **交互优化**: 账户列表和卡片视图均支持直接查看和内联编辑标签。 - **多语言支持**: 完整适配中、英双语显示。 - **[核心修复] 修复数据库为空时 `get_stats` 返回 NULL 导致崩溃的问题 (PR #1578)**: - **NULL 值处理**: 在 SQL 查询中使用 `COALESCE(SUM(...), 0)` 确保在没有日志记录时依然返回数值,解决了 `rusqlite` 无法将 `NULL` 转换为 `u64` 的问题。 - **性能保留**: 保留了本地分支中通过单次查询获取多项统计数据的性能优化逻辑。 - **[核心修复] Claude 403 错误处理与账号轮换优化 (PR #1616)**: - **403 状态映射**: 将 403 (Forbidden) 错误映射为 503 (Service Unavailable),防止客户端(如 Claude Code)因检测到 403 而自动登出。 - **自动禁用逻辑**: 检测到 403 错误时自动将账号标记为 `is_forbidden` 并从活跃池中移除,避免该账号在接下来的请求中被继续选中。 - **临时风控识别**: 识别 `VALIDATION_REQUIRED` 错误,并对相关账号执行 10 分钟的临时阻断。 - **轮换稳定性**: 修复了在账号额度耗尽 (QUOTA_EXHAUSTED) 时的过早返回问题,确保系统能正确尝试轮换到下一个可用账号。 - **[核心功能] OpenCode CLI 配置同步集成 (PR #1614)**: - **一键同步**: 自动生成 `~/.config/opencode/opencode.json`,支持 Anthropic 和 Google 双 Provider 自动配置。 - **账号导出**: 可选同步账号列表至 `antigravity-accounts.json`,供 OpenCode 插件直接导入。 - **备份与还原**: 同步前自动备份原有配置,支持一键还原。 - **跨平台支持**: 统一适配 Windows、macOS 和 Linux 环境。 - **体验优化**: 修复了 RPC 参数包装问题,补全了多语言翻译,并优化了配置文件不存在时的视图状态。 - **[核心功能] 允许隐藏未使用的菜单项 (PR #1610)**: - **可见性控制**: 在设置页面新增“菜单项显示设置”,允许用户自定义侧边栏显示的导航项。 - **界面美化**: 为极简用户提供更清爽的界面,隐藏不常用的功能入口。 - **[核心修复] Gemini 原生协议图像生成完全修复 (Issue #1573, #1625)**: - **400 错误修复**: 修复了 Gemini 原生协议生成图片时,因请求体 `contents` 数组缺失 `role: "user"` 字段导致的 `INVALID_ARGUMENT` 错误。 - **参数透传支持**: 确保 `generationConfig.imageConfig` (如 `aspectRatio`, `imageSize`) 能正确透传给上游,不再被错误过滤。 - **错误码优化**: 优化了图像生成服务的错误映射,确保 429/503 等状态码能正确触发客户端的重试机制。 - **[核心增强] 自定义映射支持手动输入任意模型 ID**: - **灵活输入**: 在自定义映射的目标模型选择器中新增手动输入功能,用户现在可以在下拉菜单底部直接输入任意模型 ID。 - **未发布模型体验**: 支持体验 Antigravity 尚未正式发布的模型,例如 `claude-opus-4-6`。用户可以通过自定义映射将请求路由到这些实验性模型。 - **重要提示**: 并非所有账号都支持调用未发布的模型。如果您的账号无权访问某个模型,请求可能会返回错误。建议先在少量请求中测试,确认账号权限后再大规模使用。 - **快捷操作**: 支持 Enter 键快速提交自定义模型 ID,提升输入效率。 * **v4.1.6 (2026-02-06)**: - **[核心修复] 深度重构 Claude/Gemini 思考模型中断与工具循环自愈逻辑 (#1575)**: - **思考异常恢复**: 引入了 `thinking_recovery` 机制。当检测到历史消息中包含陈旧思考块或陷入状态循环时,自动进行剥离与引导,提升了在复杂工具调用场景下的稳定性。 - **解决签名绑定错误**: 修正了误将缓存签名注入客户端自定义思考内容的逻辑。由于签名与文本强绑定,此举解决了会话中断或重置后常见的 `Invalid signature` (HTTP 400) 报错。 - **会话级完全隔离**: 删除了全局签名单例,确保所有思维签名严格在 Session 级别隔离,杜绝了多账号、多会话并发时的签名污染。 - **[修复] 解决 Gemini 系列由于 `thinking_budget` 越界导致的 HTTP 400 错误 (#1592, #1602)**: - **全协议路径硬截断**: 修复了 OpenAI 和 Claude 协议映射器在「自定义模式」下缺失限额保护的问题。现在无论选择何种模式(自动/自定义/透传),只要目标模型为 Gemini,后端都会强制执行 24576 的物理上限保护。 - **自动适配与前端同步**: 重构了协议转换逻辑,使其基于最终映射的模型型号进行动态限额;同步更新了设置界面的提示文案,明确了 Gemini 协议的物理限制。 - **[核心修复] Web Mode 登录验证修复 & 登出按钮 (PR #1603)**: - **登录验证**: 修复了 Web 模式下登录验证逻辑的异常,确保用户身份验证的稳定性。 - **登出功能**: 在界面中新增/修复了登出按钮,完善了 Web 模式下的账户管理闭环。
显示旧版本日志 (v4.1.5 及更早) * **v4.1.5 (2026-02-05)**: - **[安全修复] 前端 API Key 存储迁移 (LocalStorage -> SessionStorage)**: - **存储机制升级**: 将 Admin API Key 的存储位置从持久化的 `localStorage` 迁移至会话级的 `sessionStorage`,显著降低了在公共设备上的安全风险。 - **自动无感迁移**: 实现了自动检测与迁移逻辑。系统会识别旧的 `localStorage` 密钥,将其自动转移到 `sessionStorage` 并彻底清除旧数据,确保现有用户无缝过渡且消除安全隐患。 - **[核心修复] 修复 Docker 环境下添加账号失败问题 (Issue #1583)**: - **账号上下文修复**: 修复了在添加新账号时 `account_id` 为 `None` 导致代理选择异常的问题。现在系统会为新账号生成临时 UUID,确保所有 OAuth 请求都有明确的账号上下文。 - **日志增强**: 优化了 `refresh_access_token` 和 `get_effective_client` 的日志记录,提供更详细的代理选择信息,帮助诊断 Docker 环境下的网络问题。 - **影响范围**: 修复了 Docker 部署环境下通过 Refresh Token 添加账号时可能出现的长时间挂起或失败问题。 - **[核心修复] Web Mode 兼容性修复 & 403 账号轮换优化 (PR #1585)**: - **Security API Web Mode 兼容性修复 (Issue: 400/422 错误)**: - 为 `IpAccessLogQuery` 添加 `page` 和 `page_size` 的默认值,解决 `/api/security/logs` 返回 400 Bad Request 的问题 - 移除 `AddBlacklistWrapper` 和 `AddWhitelistWrapper` 结构体,解决 `/api/security/blacklist` 和 `/api/security/whitelist` POST 返回 422 Unprocessable Content 的问题 - 前端组件参数名修正:`ipPattern` → `ip_pattern`,确保与后端 API 参数一致 - **403 账号轮换优化 (Issue: 403 后未正确跳过账号)**: - 在 `token_manager.rs` 中添加 `set_forbidden` 方法,支持标记账号为禁用状态 - 账号选择时检查 `quota.is_forbidden` 状态,自动跳过被禁用的账号 - 403 时清除该账号的 sticky session 绑定,确保立即切换到其他可用账号 - **Web Mode 请求处理优化**: - `request.ts` 修复路径参数替换后从 body 中移除已使用的参数,避免重复传参 - 支持 PATCH 方法的 body 处理,补全 HTTP 方法支持 - 自动解包 `request` 字段,简化请求结构 - **Debug Console Web Mode 支持**: - `useDebugConsole.ts` 添加 `isTauri` 环境检测,区分 Tauri 和 Web 环境 - Web 模式下使用 `request()` 替代 `invoke()`,确保 Web 环境下的正常调用 - 添加轮询机制,Web 模式下每 2 秒自动刷新日志 - **Docker 构建优化**: - 添加 `--legacy-peer-deps` 标志,解决前端依赖冲突 - 启用 BuildKit 缓存加速 Cargo 构建,提升构建速度 - 补全 `@lobehub/icons` peer dependencies,修复前端依赖缺失导致的构建失败 - **影响范围**: 此更新显著提升了 Docker/Web 模式下的稳定性和可用性,解决了 Security API 报错、403 账号轮换失效、Debug Console 不可用等问题,同时优化了 Docker 构建流程。 - **[核心修复] 修复 Web/Docker 模式下调试控制台崩溃与日志同步问题 (Issue #1574)**: - **Web 兼容性**: 修复了在非 Tauri 环境下直接调用原生 `invoke` API 导致的 `TypeError` 崩溃。现在通过兼容性请求层进行后端通信。 - **指纹绑定修复**: 修复了生成指纹并绑定时,由于前后端参数结构不匹配导致的 `HTTP Error 422` 报错。通过调整后端包装类,使其兼容前端嵌套的 `profile` 对象。 - **日志轮询机制**: 为 Web 模式引入了自动日志轮询功能(2秒/次),解决了浏览器端无法接收 Rust 后端事件推送导致调试日志为空的问题。 - **[核心优化] 补全 Tauri 命令的 HTTP API 映射**: - **全量适配**: 对齐了 30+ 个原生 Tauri 命令,为缓存管理(清理日志/应用缓存)、系统路径获取、代理池配置、用户令牌管理等核心功能补全了 HTTP 映射,确保 Web/Docker 版本的功能完整性。 - **[安全修复] 任意文件读写漏洞加固**: - **API 安全层**: 彻底移除了高危接口 `/api/system/save-file` 及其关联函数,并在数据库导入接口中增加了路径遍历防范 (`..` 校验)。 - **Tauri 安全增强**: 为 `save_text_file` 和 `read_text_file` 命令引入了统一的路径校验器,严禁目录遍历并封堵了系统敏感目录的访问权限。 * **v4.1.4 (2026-02-05)**: - **[核心功能] 代理池持久化与账号筛选优化 (PR #1565)**: - **持久化增强**: 修复了代理池绑定在反代服务重启或重载时无法正确恢复的问题,确保绑定关系严格持久化。 - **智能筛选**: 优化了 `TokenManager` 的账号获取逻辑,在全量加载、同步以及调度路径中增加了对 `disabled` 和 `proxy_disabled` 状态的深度校验,彻底杜绝已禁用账号被误选的问题。 - **验证阻止支持**: 引入了 `validation_blocked` 字段体系,专门处理 Google 的 `VALIDATION_REQUIRED` (403 临时风控) 场景,实现了基于截止时间的智能自动绕过。 - **状态清理加固**: 账号失效时同步清理内存令牌、限流记录、会话绑定及优先账号标志,保证内部状态机的一致性。 - **[核心修复] 修复 Web/Docker 模式下的关键兼容性问题 (Issue #1574)**: - **调试模式修复**: 修正了前端调试控制台 URL 映射错误(移除多余的 `/proxy` 路径),解决了 Web 模式下调试模式无法开启的问题。 - **指纹绑定修复**: 为 `admin_bind_device_profile_with_profile` 接口增加了 `BindDeviceProfileWrapper` 结构,修复了前端发送嵌套参数导致的 HTTP 422 错误。 - **向后兼容性**: 使用 `serde alias` 功能在 API 层同时支持 camelCase(前端)和 snake_case(后端文件),确保旧账号文件正常加载。 - **[代码优化] 简化 API 处理结构**: - 移除了多个管理 API 路由(如 IP 黑白名单管理、安全设置更新等)中的冗余包装层 (`Wrapper`),直接解构业务模型,提升了代码的简洁性与开发效率。 - **[核心修复] 解决 OpenCode 调用 Thinking 模型中断问题 (Issue #1575)**: - **finish_reason 强制修正**: 修复了工具调用时 `finish_reason` 被错误设置为 `stop` 导致 OpenAI 客户端提前终止对话的问题。现在系统会强制将有工具调用的响应 `finish_reason` 设置为 `tool_calls`,确保工具循环正常运行。 - **工具参数标准化**: 实现了 shell 工具参数名称的自动标准化,将 Gemini 可能生成的 `cmd`/`code`/`script` 等非标准参数名统一转换为 `command`,提升了工具调用的兼容性。 - **影响范围**: 修复了 OpenAI 协议下 Thinking 模型(如 `claude-sonnet-4-5-thinking`)的工具调用流程,解决了 OpenCode 等客户端的中断问题。 * **v4.1.3 (2026-02-05)**: - **[核心修复] 解决 Web/Docker 模式下安全配置与 IP 管理失效问题 (Issue #1560)**: - **协议对齐**: 修复了后端 Axum 接口无法解析前端 `invoke` 封装的嵌套参数格式(如 `{"config": ...}`)的问题,确保安全配置能正确持久化。 - **参数规范化**: 为 IP 管理相关接口添加了 `camelCase` 重命名支持,解决了 Web 端 Query 参数大小写不匹配导致的添加失败与删除失效。 - **[核心修复] 恢复 Gemini Pro 思考块输出 (Issue #1557)**: - **跨协议对齐**: 修复了自 v4.1.0 以来 `gemini-3-pro` 等模型在 OpenAI、Claude 和 Gemini 原生协议下思考块缺失的问题。 - **智能注入逻辑**: 实现了 `thinkingConfig` 的自动注入与默认开启机制,确保即使客户端未发送配置,模型也能正确激活思考能力。 - **鲁棒性增强**: 优化了 `wrapper.rs` 内部类型处理,解析并解决了高并发场景下的配置冲突。 * **v4.1.2 (2026-02-05)**: - **[核心功能] 多协议客户端适配器 (ClientAdapter Framework) (Issue #1522)**: - **架构重构**: 引入 `ClientAdapter` 框架并应用 `Arc` 引用计数,实现了 Handler 层与下游客户端逻辑的完全解耦,支持更安全的跨线程共享。 - **全协议兼容**: 针对 `opencode` 等第三方客户端,实现了 **4 种协议**(Claude/OpenAI/Gemini/OA-Compatible)的无缝接入,彻底解决了 `AI_TypeValidationError` 报错。 - **智能策略**: 实现了 FIFO 签名缓存策略与 `let_it_crash` 快速失败机制,显著提升了高并发场景下的稳定性和错误反馈速度。 - **标准化错误响应**: 强制统一所有协议的错误返回格式(流式 SSE `event: error` / 非流式 JSON),确保客户端能正确解析上游异常。 - **[核心修复] 统一账号禁用状态检查逻辑 (Issue #1512)**: - **逻辑对齐**: 修复了批量刷新配额及自动预热逻辑中遗漏手动禁用状态 (`proxy_disabled`) 的问题。 - **后台降噪**: 确保标记为“禁用”或“禁用代理”的账号不再触发任何后台网络请求,提升了系统的隐私性与资源效率。 - **[核心修复] 解决 OpenAI 协议路径下 Invalid signature 导致的 400 错误 (Issue #1506)**: - **Session 级签名隔离**: 引入了 `SignatureCache` 机制,通过 `session_id` 物理隔离不同会话的思维签名存储,彻底杜绝多轮对话或并发请求导致的签名污染。 - **鲁棒性增强**: 增加了对思维链占位符(如 `[undefined]`)的识别与自动清洗逻辑,提升了对不同客户端(如 Cherry Studio)的兼容性。 - **全路径透传**: 重构了请求转换与流式处理链路,确保 Session 上下文在非流式和流式请求中均能精准传导。 - **[UI 增强] 新增模型图标支持与自动排序功能 (PR #1535)**: - **视觉呈现**: 引入 `@lobehub/icons` 图标库,在账号卡片、表格及详情页中展示不同模型的 brand 图标,视觉体验更佳。 - **智能排序**: 实现了基于权重的模型自动排序逻辑(系列 > 级别 > 后缀),优先展示最常用的高级模型(如 Gemini 3 Pro)。 - **配置中心化**: 构建了统一的模型元数据配置系统,将模型标签、短名称、图标与权重解耦,提升系统扩展性。 - **国际化同步**: 同步补全了 13 种常用语言的模型显示名称。 - **[核心修复] 增强账号禁用状态与磁盘状态实时校验 (PR #1546)**: - **磁盘深度校验**: 引入了 `get_account_state_on_disk` 机制,在获取 Token 的关键路径增加磁盘状态二次确认,彻底解决内存缓存延迟导致的禁用账号误选问题。 - **固定账号智能同步**: 优化了 `toggle_proxy_status` 指令,禁用账号时会自动检查并关闭对应的固定账号模式,并立即触发代理池重载。 - **授权失效自愈**: 当后端检测到 `invalid_grant` 错误并自动禁用账号时,现在会物理清理内存中的 Token、限流记录和会话绑定,确保故障账号即刻下线。 - **全链路过滤适配**: 补全了预热逻辑 (`Warmup`) 与定时调度器 (`Scheduler`) 的禁用状态检查,大幅减少无效的后台网络请求。 - **[核心优化] 代理池健康检查并发化 (PR #1547)**: - **性能提升**: 引入了基于 `futures` 流的并发执行机制,将顺序检查重构为并发处理(并发上限 20)。 - **效率增强**: 显著缩短了大型代理池的健康检查总时长,提升了系统对代理状态变更的响应速度。 - **[核心修复] 解决 Docker/HTTP 环境下 crypto.randomUUID 兼容性问题 (Issue #1548)**: - **问题修复**: 修复了在非安全上下文(如 HTTP 或部分 Docker 环境)中,因浏览器禁用 `crypto.randomUUID` API 导致的应用崩溃("Unexpected Application Error")及批量导入失败问题。 - **兼容性增强**: 引入了全平台兼容的 UUID 生成回退机制,确保在任何部署环境下 ID 生成的稳定性。 * **v4.1.1 (2026-02-04)**: - **[核心修复] 解决 User Tokens 页面在 Web/Docker 环境下加载失败问题 (Issue #1525)**: - **API 同步**: 补全了前端 `request.ts` 的命令映射,并新增对 `PATCH` 方法的支持,解决了 Web 端因映射缺失导致的 API 调用错误。 - **后端路由补全**: 在 Axum 管理服务器中新增了 User Token 的全量管理接口(List/Create/Update/Renew/Delete),确保 Headless 模式功能完整。 - **[核心优化] 数据库迁移增强与幂等性改进**: - **自动列迁移**: 完善了 `UserToken` 数据库初始化逻辑,支持从旧版本自动通过 `ALTER TABLE` 补全缺失列(如 `expires_type`, `max_ips`, `curfew_*` 等),极大提升了版本升级的稳定性。 - **[Docker 优化] 新增 ABV_DATA_DIR 环境变量支持**: - **灵活挂载**: 允许用户通过环境变量显式指定数据存储目录。现在 Docker 用户可以更方便地挂载外部卷至自定义路径(如 `-e ABV_DATA_DIR=/app/data`),解决了默认隐藏目录权限及可见性问题。 - **[核心功能] 更新检查器增强 (Update Checker 2.0) (PR #1494)**: - **代理支持**: 更新检查器现在完全遵循全局上游代理配置,解决了在受限网络环境下无法获取更新的问题。 - **多级降级策略**: 实现了 `GitHub API -> GitHub Raw -> jsDelivr` 的三层回退机制,极大提升了版本检测的成功率。 - **来源可观测**: 更新提示中现在会显示检测源信息,方便排查连接问题。 - **[核心优化] Antigravity 数据库格式兼容性改进 (>= 1.16.5)**: - **智能版本检测**: 新增跨平台版本检测模块,支持自动识别 Antigravity 客户端版本(macOS/Windows/Linux)。 - **新旧格式适配**: 适配了 1.16.5+ 版本的 `antigravityUnifiedStateSync.oauthToken` 新格式,并保持对旧版格式的向下兼容。 - **注入策略增强**: 实现基于版本的智能注入策略,并在检测失败时提供双重格式注入的容错机制,确保账号切换成功。 - **[核心修复] 解决 react-router SSR XSS 漏洞 (CVE-2026-21884) (PR #1500)**: - **安全修复**: 升级 `react-router` 依赖至安全版本,修复了 `ScrollRestoration` 组件在服务端渲染 (SSR) 时可能造成的跨站脚本攻击 (XSS) 风险。 - **[国际化] 完善日语翻译支持 (PR #1524)**: - **改进**: 补全了代理池、流错误消息、User-Agent 等重要模块的日语本地化。 * **v4.1.0 (2026-02-04)**: - **[重大更新] 代理池 2.0 (Proxy Pool) 完全体与稳定性修复**: - **账号级专属 IP 隔离**: 实现账号与代理的强绑定逻辑。一旦账号绑定专属代理,该 IP 将自动从公共池隔离,杜绝跨账号关联风险。 - **协议自动补全与兼容性**: 后端支持自动识别简写输入(如 `ip:port`),自动补全 `http://` 方案。 - **智能健康检查加固**: 引入浏览器 User-Agent 伪装,解决 `google.com` 拦截问题;更换保底检查 URL 至 `cloudflare.com`。 - **响应式状态同步**: 修复“先睡眠后检查”逻辑,实现启动即更新状态,消除 UI 显示超时的同步延迟。 - **持久化 Bug 修复**: 彻底解决在高频率轮询下,后端旧状态可能回滚前端新增代理的竞态问题。 - **代理池 2.0 运行机制解析**: - **场景 1:账号全链路锁定** — 系统识别到账号 A 与 Node-01 的绑定关系后,其 Token 刷新、额度同步、AI 推理将全量强制走 Node-01。Google 侧始终捕获到该账号在单一稳定 IP 上操作。 - **场景 2:公用池自动隔离** — 账号 B 无绑定。系统在扫描代理池时,会自动发现 Node-01 已被 A 专属占用并将其剔除,仅从剩余节点中轮询。确保不同账号 IP 绝不混用,零关联风险。 - **场景 3:故障自愈与保底** — 若 Node-01 宕机且开启了“故障重试”,账号 A 会临时借用公共池节点完成 Token 刷新等紧急任务,并记录日志,确保服务不中断。 - **[新功能] UserToken 页面导航与监控增强 (PR #1475)**: - **页面导航**: 新增 UserToken 独立管理页面,支持更细粒度的用户令牌管理。 - **监控增强**: 完善了系统监控和路由功能的集成,提升了系统的可观测性。 - **[核心修复] Warmup 接口字段丢失修复**: - **编译修复**: 修复了 `ProxyRequestLog` 初始化时缺失 `username` 字段导致的编译错误。 - **[核心修复] Docker Warmup 401/502 错误修复 (PR #1479)**: - **网络优化**: 在 Docker 环境下的 Warmup 请求中,使用了带 `.no_proxy()` 的客户端,防止 localhost 请求被错误路由到外部代理导致 502/401 错误。 - **鉴权变更**: 豁免了 `/internal/*` 路径的鉴权,确保内部预热请求不会被拦截。 - **[核心修复] Docker/Headless 环境调试与绑定问题修复**: - **调试控制台**: 修复了 Docker 模式下日志模块未初始化的问题,并新增 HTTP API 映射,支持 Web 前端获取实时日志。 - **指纹绑定**: 优化了设备指纹绑定逻辑,确保其在 Docker 容器环境下的兼容性并支持通过 API 完整调用。 - **[核心修复] 账号删除缓存同步修复 (Issue #1477)**: - **同步机制**: 引入了全局删除信号同步队列,确保账号在磁盘删除后即刻从内存缓存中剔除。 - **清理**: TokenManager 现在会同步清理已删除账号的令牌、健康分数、限流记录以及会话绑定,解决“已删除账号仍被调度”的问题。 - **[UI 优化] 更新通知本地化 (PR #1484)**: - **国际化适配**: 移除了更新提示框中的硬编码字符串,实现了对所有 12 种语言的完整支持。 - **[UI 优化] 导航栏重构与响应式适配 (PR #1493)**: - **组件解构**: 将单体 Navbar 拆分为更细粒度的模块化组件,提升代码可维护性。 - **响应式增强**: 优化了布局断点及“刷新配额”按钮的响应式行为。 * **v4.0.15 (2026-02-03)**: - **[核心优化] 预热功能增强与误报修复 (PR #1466)**: - **模式优化**: 移除硬编码模型白名单,支持对所有达到 100% 配额的模型自动触发预热。 - **准确性修复**: 修复了预热状态的误报问题,确保仅在预热真正成功时记录历史。 - **功能扩展**: 优化了预热请求的流量日志记录,并跳过不支持预热的 2.5 系列模型。 - **[核心优化] 思考预算 (Thinking Budget) 全面国际化与优化**: - **多语言适配**: 补全并优化了中、英、日、韩、俄、西、繁体、阿等多国语言的翻译,确保全球用户体验一致。 - **UI 细节增强**: 优化了设置项的提示语(Auto Hint / Passthrough Warning),帮助用户更准确地配置模型思考深度。 * **v4.0.14 (2026-02-02)**: - **[核心修复] 解决 Web/Docker 部署下 API Key 随机变更问题 (Issue #1460)**: - **问题修复**: 修复了在没有配置文件的情况下,每次刷新页面都会重新生成 API Key 的 Bug。 - **逻辑优化**: 优化了配置加载流程,确保首次生成的随机 Key 被正确持久化;同时也确保了 Headless 模式下环境变量(如 `ABV_API_KEY`)的覆盖能够被前端正确获取。 - **[核心功能] 可配置思考预算 (Thinking Budget) (PR #1456)**: - **预算控制**: 在系统设置中新增了“思考预算”配置项。 - **智能适配**: 支持为 Claude 4.6+ 和 Gemini 2.0 Flash Thinking 等模型自定义最大思考 token 限制。 - **默认优化**: 默认值设置为智能适配模式,确保在大多数场景下不仅能获得完整思考过程,又能避免触发上游 budget 限制。 * **v4.0.13 (2026-02-02)**: - **[核心优化] 负载均衡算法升级 (P2C Algorithm) (PR #1433)**: - **算法升级**: 将原有的 Round-Robin (轮询) 算法升级为 P2C (Power of Two Choices) 负载均衡算法。 - **性能提升**: 在高并发场景下显著减少了请求等待时间,并优化了后端实例的负载分布,避免了单点过载。 - **[UI 升级] 响应式导航栏与布局优化 (Responsive Navbar) (PR #1429)**: - **移动端适配**: 全新设计的响应式导航栏,完美适配移动设备与小屏幕窗口。 - **视觉增强**: 为导航项添加了直观的图标,提升了整体视觉体验与操作便捷性。 - **[新功能] 账号配额可视化增强 (Show All Quotas) (PR #1429)**: - **显示所有配额**: 在账号列表页新增“显示所有配额”开关。开启后可一览 Ultra/Pro/Free/Image 等所有维度的实时配额信息,不再仅显示首要配额。 - **[国际化] 全面多语言支持完善 (Full i18n Update)**: - **覆盖率提升**: 补全了繁体中文、日语、韩语、西班牙语、阿拉伯语等 10 种语言的缺失翻译键值。 - **细节优化**: 修复了“显示所有配额”及 OAuth 授权流程中的提示语翻译缺失问题。 - **[国际化] 后台任务翻译补全 (Translate Background Tasks) (PR #1421)**: - **翻译修复**: 修复了后台任务(如标题生成)的相关文本缺少翻译的问题,现在支持所有语言的本地化显示。 - **归因**: 修复了合并代码时引入的 `ref` 冲突导致移动端/桌面端点击判定异常。 - **结果**: 语言切换菜单现在可以正常打开和交互。 - **[Docker/Web 修复] Web 端支持 IP 管理 (IP Security for Web)**: - **功能补全**: 修复了在 Docker 或 Web 模式下,IP 安全管理功能(日志、黑白名单)因后端路由缺失而无法使用的问题。 - **API 实现**: 实现了完整的 RESTful 管理接口,确保 Web 前端能正常调用底层安全模块。 - **体验强化**: 优化了删除操作的参数传递逻辑,解决了部分浏览器下删除黑白名单失灵的问题。 * **v4.0.12 (2026-02-01)**: - **[代码重构] 连接器服务优化 (Refactor Connector Service)**: - **深度优化**: 重写了连接器服务 (`connector.rs`) 的核心逻辑,消除了历史遗留的低效代码。 - **性能提升**: 优化了连接建立与处理流程,提升了系统的整体稳定性与响应速度。 * **v4.0.11 (2026-01-31)**: - **[核心修复] 调整 API 端点顺序与自动阻断 (Fix 403 VALIDATION_REQUIRED)**: - **端点顺序优化**: 将 Google API 的请求顺序调整为 `Sandbox -> Daily -> Prod`。优先使用宽松环境,从源头减少 403 错误的发生。 - **智能阻断机制**: 当检测到 `VALIDATION_REQUIRED` (403) 错误时,系统会自动将该账号标记为“临时阻断”状态并持续 10 分钟。期间请求会自动跳过该账号,避免无效重试导致账号被进一步风控。 - **自动恢复**: 阻断期过后,系统会自动尝试恢复该账号的使用。 - **[核心修复] 账号状态热重载 (Account Hot-Reload)**: - **架构统一**: 消除了系统中并存的多个 `TokenManager` 实例,实现了管理后台与反代服务共享单例账号管理器。 - **实时生效**: 修复了手动启用/禁用账号、账号重排序及批量操作后需要重启应用才能生效的问题。现在所有账号变更都会立即同步至内存账号池。 - **[核心修复] 配额保护逻辑优化 (PR #1344 补丁)**: - 进一步优化了配额保护逻辑中对“已禁用”状态与“配额保护”状态的区分逻辑,确保日志记录准确且状态同步实时。 - **[核心修复] 恢复健康检查接口 (PR #1364)**: - **路由恢复**: 修复了在 4.0.0 架构迁移中遗失的 `/health` 和 `/healthz` 路由。 - **响应增强**: 接口现在会返回包含 `"status": "ok"` 和当前应用版本号的 JSON,方便监控系统进行版本匹配和存活检查。 - **[核心修复] 修复 Gemini Flash 模型思考预算超限 (Fix PR #1355)**: - **自动限额**: 修复了在 Gemini Flash 思考模型(如 `gemini-2.0-flash-thinking`)中,默认或上游传入的 `thinking_budget` (例如 32k) 超过模型上限 (24k) 导致 API 报错 `400 Bad Request` 的问题。 - **多协议覆盖**: 此防护已扩展至 **OpenAI、Claude 和原生 Gemini 协议**,全方位拦截不安全的预算配置。 - **智能截断**: 系统现在会自动检测 Flash 系列模型,并强制将思考预预算限制在安全范围内 (**24,576**),确保请求始终成功,无需用户手动调整客户端配置。 - **[核心功能] IP 安全与风控系统 (IP Security & Management) (PR #1369 by @大黄)**: - **可视化工单管理**: 全新的“安全监控”模块,支持图形化管理 IP 黑名单与白名单。 - **智能封禁策略**: 实现了基于 CIDR 的网段封禁、自动释放时间设置及封禁原因备注功能。 - **实时访问日志**: 集成了 IP 维度的实时访问日志审计,支持按 IP、时间范围筛选,方便快速定位异常流量。 - **[UI 优化] 极致的视觉体验**: - **弹窗美化**: 全面升级了 IP 安全模块的所有弹窗按钮样式,采用实心色块与阴影设计,操作引导更清晰。 - **布局即兴**: 修复了安全配置页面的滚动条异常与布局错位,优化了标签页切换体验。 - **[核心功能] 调试控制台 (Debug Console) (PR #1385)**: - **实时日志流**: 引入了全功能的调试控制台,支持实时捕获并展示后端业务日志。 - **过滤与搜索**: 支持按日志级别(Info, Debug, Warn, Error)过滤及关键词全局搜索。 - **交互优化**: 支持一键清空日志、自动滚动开关,并完整适配深色/浅色主题。 - **后端桥接**: 实现了高性能的日志桥接器,确保日志捕获不影响反代性能。 * **v4.0.9 (2026-01-30)**: - **[核心功能] User-Agent 自定义与版本欺骗 (PR #1325)**: - **动态覆盖**: 支持在“服务配置”中自定义上游请求的 `User-Agent` 头部。这允许用户模拟任意客户端版本(如 Cheat 模式),有效绕过部分地区的版本封锁或风控限制。 - **智能回退**: 实现了“远程抓取 -> Cargo 版本 -> 硬编码”的三级版本号获取机制。当主版本 API 不可用时,系统会自动解析官网 Changelog 页面获取最新版本号,确保 UA 始终伪装成最新版客户端。 - **热更新支持**: 修改 UA 配置后即刻生效,无需重启服务。 - **[核心修复] 解决配额保护状态同步缺陷 (Issue #1344)**: - **状态实时同步**: 修复了 `check_and_protect_quota()` 函数在处理禁用账号时提前退出的逻辑缺陷。现在即便账号被禁用,系统仍会扫描并实时更新其 `protected_models`(模型级保护列表),确保配额不足的账号在重新启用后不会绕过保护机制继续被使用。 - **日志路径分离**: 将手动禁用检查从配额保护函数中剥离至调用方,根据不同的跳过原因(手动禁用/配额保护)记录准确的日志,消除用户困惑。 - **[核心功能] 缓存管理与一键清理 (PR #1346)**: - **后端集成**: 新增了 `src-tauri/src/modules/cache.rs` 模块,用于计算和管理应用运行期间产生的各类临时文件分布(如翻译缓存、日志指纹等)。 - **UI 实现**: 在“系统设置”页面新增了“清理缓存”功能。用户可以实时查看缓存占用的空间大小,并支持一键清理,有效解决长期使用后的磁盘占用问题。 - **[国际化] 新增语言支持 (PR #1346)**: - 新增了 **西班牙语 (es)** 和 **马来语 (my)** 的完整翻译支持,进一步扩大了应用的全球适用范围。 - **[国际化] 全语言覆盖**: - 为新功能补全了 En, Zh, Zh-TW, Ar, Ja, Ko, Pt, Ru, Tr, Vi 等 10 种语言的完整翻译支持。 - **[国际化] 完善 UI 字符串本地化 (PR #1350)**: - **全面覆盖**: 补充了 UI 中剩余的硬编码字符串及未翻译项,实现了界面字符串的完全本地化。 - **清理冗余**: 删除了代码中所有的英文回退 (English fallbacks),强制所有组件通过 i18n 键调用语言包。 - **语言增强**: 显著提升了日语 (ja) 等语言的翻译准确度,并确保了新 UI 组件在多语言环境下的显示一致性。 * **v4.0.8 (2026-01-30)**: - **[核心功能] 记忆窗口位置与大小 (PR #1322)**: 自动恢复上次关闭时的窗口坐标与尺寸,提升使用体验。 - **[核心修复] 优雅关闭 Admin Server (PR #1323)**: 修复了 Windows 环境下退出后再次启动时,端口 8045 占用导致的绑定失败问题。 - **[核心功能] 实现全链路调试日志功能 (PR #1308)**: - **后端集成**: 引入了 `debug_logger.rs`,支持捕获并记录 OpenAI、Claude 及 Gemini 处理器的原始请求、转换后报文及完整流式响应。 - **动态配置**: 支持热加载日志配置,无需重启服务即可启用/禁用或修改输出目录。 - **前端交互**: 在“高级设置”中新增“调试日志”开关及自定义输出目录选择器,方便开发者排查协议转换与上游通信问题。 - **[UI 优化] 优化图表工具提示 (Tooltip) 浮动显示逻辑 (Issue #1263, PR #1307)**: - **溢出防御**: 优化了 `TokenStats.tsx` 中的 Tooltip 定位算法,确保在小窗口或高缩放比例下,悬浮提示信息始终在可视区域内显示,防止被窗口边界遮挡。 - **[核心优化] 鲁棒性增强:动态 User-Agent 版本获取及多级回退 (PR #1316)**: - **动态版本获取**: 支持从远程端点实时拉取版本号,确保 UA 信息的实时性与准确性。 - **稳延回退链**: 引入“远程端点 -> Cargo.toml -> 硬编码”的三级版本回退机制,极大提升了初始化阶段的鲁棒性。 - **预编译优化**: 使用 `LazyLock` 预编译正则表达式解析版本号,提升运行效率并降低内存抖动。 - **可观测性提升**: 添加了结构化日志记录及 VersionSource 枚举,方便开发者追踪版本来源及潜在的获取故障。 - **[核心修复] 解决 Gemini CLI "Response stopped due to malformed function call." 错误 (PR #1312)**: - **参数字段对齐**: 将工具声明中的 `parametersJsonSchema` 重命名为 `parameters`,确保与 Gemini 最新 API 规范完全对齐。 - **参数对齐引擎增强**: 移除了多余的参数包装层,使参数传递更加透明和直接。 - **容错校验**: 增强了对工具调用响应的鲁棒性,有效防止因参数结构不匹配导致的输出中断。 - **[核心修复] 解决 Docker/Headless 模式下端口显示为 'undefined' 的问题 (Issue #1305)**: 修复了管理 API `/api/proxy/status` 缺少 `port` 字段且 `base_url` 构造错误的问题,确保前端能正确显示监听地址。 - **[核心修复] 解决 Docker/Headless 模式下 Web 密码绕过问题 (Issue #1309)**: - **默认鉴权增强**: 将 `auth_mode` 默认值改为 `auto`。在 Docker 或允许局域网访问的环境下,系统现在会自动激活身份验证,确保 `WEB_PASSWORD` 生效。 - **环境变量支持**: 新增 `ABV_AUTH_MODE` 和 `AUTH_MODE` 环境变量,允许用户在启动时显式覆盖鉴权模式(支持 `off`, `strict`, `all_except_health`, `auto`)。 * **v4.0.7 (2026-01-29)**: - **[性能优化] 优化 Docker 构建流程 (Fix Issue #1271)**: - **原生架构构建**: 将 AMD64 和 ARM64 的构建任务拆分为独立 Job 并行执行,并移除 QEMU 模拟层,转而使用各架构原生的 GitHub Runner。此举将跨平台构建耗时从 3 小时大幅缩减至 10 分钟以内。 - **[性能优化] 解决 Docker 版本在大数据量下的卡顿与崩溃问题 (Fix Issue #1269)**: - **异步数据库操作**: 将流量日志、Token 统计等所有耗时数据库查询迁移至后台阻塞线程池 (`spawn_blocking`),彻底解决了在查看大型日志文件(800MB+)时可能导致的 UI 卡死及反代服务不可用的问题。 - **监控逻辑平滑化**: 优化了监控状态切换逻辑,移除冗余的重复启动记录,提升了 Docker 环境下的运行稳定性。 - **[核心修复] 解决 OpenAI 协议 400 Invalid Argument 错误 (Fix Issue #1267)**: - **移除激进默认值**: 回滚了 v4.0.6 中为 OpenAI/Claude 协议引入的默认 `maxOutputTokens: 81920` 设置。该值超过了许多旧模型(如 `gemini-3-pro-preview` 或原生 Claude 3.5)的硬性限制,导致请求被直接拒绝。 - **智能思维配置**: 优化了思维模型检测逻辑,仅对以 `-thinking` 结尾的模型自动注入 `thinkingConfig`,避免了对不支持该参数的标准模型(如 `gemini-3-pro`)产生副作用。 - **[兼容性修复] 修复 OpenAI Codex (v0.92.0) 调用错误 (Fix Issue #1278)**: - **字段清洗**: 自动过滤 Codex 客户端在工具定义中注入的非标准 `external_web_access` 字段,消除了 Gemini API 返回的 400 Invalid Argument 错误. - **容错增强**: 增加了对工具 `name` 字段的强制校验。当客户端发送缺失名称的无效工具定义时,代理层现在会自动跳过并记录警告,而不是直接让请求失败。 - **[核心功能] 自适应熔断器 (Adaptive Circuit Breaker)**: - **模型级隔离**: 实现了基于 `account_id:model` 的复合 Key 限流追踪,确保单一模型的配额耗尽不会导致整个账号被锁定。 - **动态退避策略**: 支持用户自定义 `[60, 300, 1800, 7200]` 等多级退避阶梯,自动根据失败次数增加锁定时间。 - **配置热更新**: 配合 `TokenManager` 内存缓存,实现配置修改后反代服务即刻生效,无需重启。 - **管理 UI 集成**: 在 API 反代页面新增了完整的控制面板,支持一键开关及手动清除限流记录。 - **[核心优化] 完善日志清理与冗余压制 (Fix Issue #1280)**: - **自动空间回收**: 引入基于体积的清理机制,当日志目录超过 1GB 时自动触发清理,并将占用降至 512MB 以内。相比原有的按天清理,能从根本上防止因日志爆发导致的磁盘撑爆问题。 - **高频日志瘦身**: 将 OpenAI 处理器报文详情、TokenManager 账号池轮询等高频产生的日志级别从 INFO 降级为 DEBUG。现在 INFO 级别仅保留简洁的请求摘要。 * **v4.0.6 (2026-01-28)**: - **[核心修复] 彻底解决 Google OAuth "Account already exists" 错误**: - **持久化升级**: 将授权成功后的保存逻辑从“仅新增”升级为 `upsert` (更新或新增) 模式。现在重新授权已存在的账号会平滑更新其 Token 和项目信息,不再弹出报错。 - **[核心修复] 修复 Docker/Web 模式下手动回填授权码失效问题**: - **Flow 状态预初始化**: 在 Web 模式生成授权链接时,后端会同步初始化 OAuth Flow 状态。这确保了在 Docker 等无法自动跳转的环境下,手动复制回填授权码或 URL 能够被后端正确识别并处理。 - **[体验优化] 统一 Web 与桌面端的 OAuth 持久化路径**: 重构了 `TokenManager`,确保所有平台共用同一套健壮的账号核验与存储逻辑。 - **[性能优化] 优化限流恢复机制 (PR #1247)**: - **自动清理频率**: 将限流记录的后台自动清理间隔从 60 秒缩短至 15 秒,大幅提升了触发 429 或 503 错误后的业务恢复速度。 - **智能同步清理**: 优化了单个或全部账号刷新逻辑,确保刷新账号的同时即刻清除本地限流锁定,使最新配额能立即投入使用。 - **渐进式容量退避**: 针对 `ModelCapacityExhausted` 错误(如 503),将原有的固定 15 秒重试等待优化为 `[5s, 10s, 15s]` 阶梯式策略,显著减少了偶发性容量波动的等待时间。 - **[核心修复] 窗口标题栏深色模式适配 (PR #1253)**: 修复了在系统切换为深色模式时,应用标题栏(Titlebar)未能同步切换配色,导致视觉不统一的问题。 - **[核心修复] 提升 Opus 4.5 默认输出上限 (Fix Issue #1244)**: - **突破限制**: 将 Claude 和 OpenAI 协议的默认 `max_tokens` 从 16k 提升至 **81,920** (80k)。 - **解决截断**: 彻底解决了 Opus 4.5 等模型在开启思维模式时,因默认 Budget 限制导致输出被锁定在 48k 左右的截断问题。现在无需任何配置即可享受完整的长文本输出能力。 - **[核心修复] 修复账号删除后的幽灵数据问题 (Ghost Account Fix)**: - **同步重载**: 修复了账号文件被删除后,反代服务的内存缓存未同步更新,导致已删账号仍参与轮询的严重 Bug。 - **即时生效**: 现在单删或批量删除账号后,会强制触发反代服务重载,确保内存中的账号列表与磁盘实时一致。 - **[核心修复] Cloudflared 隧道启动问题修复 (Fix PR #1238)**: - **启动崩溃修复**: 移除了不支持的命令行参数 (`--no-autoupdate` / `--loglevel`),解决了 cloudflared 进程启动即退出的问题。 - **URL 解析修正**: 修正了命名隧道 URL 提取时的字符串偏移量错误,确保生成的访问链接格式正确。 - **Windows 体验优化**: 为 Windows 平台添加了 `DETACHED_PROCESS` 标志,实现了隧道的完全静默后台运行,消除了弹窗干扰。 * **v4.0.5 (2026-01-28)**: - **[核心修复] 彻底解决 Docker/Web 模式 Google OAuth 400 错误 (Google OAuth Fix)**: - **协议对齐**: 强制所有模式(包括 Docker/Web)使用 `localhost` 作为 OAuth 重定向 URI,绕过了 Google 对私网 IP 和非 HTTPS 环境的拦截策略。 - **流程优化**: 配合已有的“手动授权码回填”功能,确保即使在远程服务器部署环境下,用户也能顺利完成 Google 账号的授权与添加。 - **[功能增强] 新增阿拉伯语支持与 RTL 布局适配 (PR #1220)**: - **国际化拓展**: 新增完整的阿拉伯语 (`ar`) 翻译支持。 - **RTL 布局**: 实现了自动检测并适配从右向左 (Right-to-Left) 的 UI 布局。 - **排版优化**: 引入了 Effra 字体家族,显著提升了阿拉伯语文本的可读性与美观度。 - **[功能增强] 手动清除限流记录 (Clear Rate Limit Records)**: - **管理 UI 集成**: 在“代理设置 -> 账号轮换与会话调度”区域新增了“清除限流记录”按钮,支持桌面端与 Web 端调用,允许用户手动清除所有账号的本地限流锁(429/503 记录)。 - **账号列表联动**: 实现了配额与限流的智能同步。现在刷新账号额度(单个或全部)时,会自动清除本地限流状态,确保最新的额度信息能立即生效。 - **后端核心逻辑**: 在 `RateLimitTracker` 和 `TokenManager` 中底层实现了手动与自动触发的清除逻辑,确保高并发下的状态一致性。 - **API 支持**: 新增了对应的 Tauri 命令与 Admin API (`DELETE /api/proxy/rate-limits`),方便开发者进行编程化管理与集成。 - **强制重试**: 配合清除操作,可强制下一次请求忽略之前的退避时间,直接尝试连接上游,帮助在网络恢复后快速恢复业务。 * **v4.0.4 (2026-01-27)**: - **[功能增强] 深度集成 Gemini 图像生成与多协议支持 (PR #1203)**: - **OpenAI 兼容性增强**: 支持通过标准 OpenAI Images API (`/v1/images/generate`) 调用 Gemini 3 图像模型,支持 `size`、`quality` 等参数。 - **多协议集成**: 增强了 Claude 和 OpenAI Chat 接口,支持直接传递图片生成参数,并实现了自动宽高比计算与 4K/2K 质量映射。 - **文档补全**: 新增 `docs/gemini-3-image-guide.md`,提供完整的 Gemini 图像生成集成指南。 - **稳定性优化**: 优化了通用工具函数 (`common_utils.rs`) 和 Gemini/OpenAI 映射逻辑,确保大尺寸 Payload 传输稳定。 - **[核心修复] 对齐 OpenAI 重试与限流逻辑 (PR #1204)**: - **逻辑对齐**: 重构了 OpenAI 处理器的重试、限流及账号轮换逻辑,使其与 Claude 处理器保持一致,显著提升了高并发下的稳定性。 - **热重载优化**: 确保 OpenAI 请求在触发 429 或 503 错误时能精准执行退避策略并自动切换可用账号。 - **[核心修复] 修复 Web OAuth 账号持久化问题 (Web Persistence Fix)**: - **索引修复**: 解决了在 Web 管理界面通过 OAuth 添加的账号虽然文件已生成,但未同步更新到全局账号索引 (`accounts.json`),导致重启后或桌面端无法识别的问题。 - **锁机制统一**: 重构了 `TokenManager` 的保存逻辑,复用了 `modules::account` 的核心方法,确保了文件锁与索引更新的原子性。 - **[核心修复] 解决 Google OAuth 非 Localhost 回调限制 (Fix Issue #1186)**: - **问题背景**: Google 不支持在 OAuth 流程中使用非 localhost 私网 IP 作为回调地址,即便注入 `device_id` 也会报“不安全的应用版本”警告。 - **解决方案**: 引入了标准化的“手动 OAuth 提交”流程。当浏览器无法自动回调至本地(如远程部署或非 Localhost 环境)时,用户可直接复制回调链接或授权码至应用内完成授权。 - **体验增强**: 重构了手动提交界面,集成了全语言国际化支持(9 国语言)与 UI 优化,确保在任何网络环境下都能顺利添加账号。 - **[核心修复] 解决 Google Cloud Code API 429 错误 (Fix Issue #1176)**: - **智能降级**: 默认将 API 流量迁移至更稳定的 Daily/Sandbox 环境,避开生产环境 (`cloudcode-pa.googleapis.com`) 当前频繁的 429 错误。 - **稳健性提升**: 实现了 Sandbox -> Daily -> Prod 的三级降级策略,确保主业务流程在极端网络环境下的高可用性。 - **[核心优化] 账号调度算法升级 (Algorithm Upgrade)**: - **健康评分系统 (Health Score)**: 引入了 0.0 到 1.0 的实时健康分机制。请求失败(如 429/5xx)将显著扣分,使受损账号自动降级;成功请求则逐步回升,实现账号状态的智能自愈。 - **三级智能排序**: 调度优先级重构为 `订阅等级 > 剩余配额 > 健康分`。确保在同等级、同配额情况下,始终优先通过历史表现最稳定的账号。 - **微延迟 (Throttle Delay)**: 针对极端限流场景,当所有账号均被封锁且有账号在 2 秒内即将恢复时,系统将自动执行毫秒级挂起等待而非直接报错。极大提升了高并发下的成功率,并增强了会话粘性。 - **全量接口适配**: 重构了 `TokenManager` 核心接口,并完成了全量处理器(Claude, Gemini, OpenAI, Audio, Warmup)的同步适配,确保调度层变更对业务层透明。 - **[核心修复] 固定账号模式持久化 (PR #1209)**: - **问题背景**: 之前版本在重启服务后,固定账号模式(Fixed Account Mode)的开关状态会被重置。 - **修复内容**: 实现了设置的持久化存储,确保用户偏好在重启后依然生效。 - **[核心修复] 速率限制毫秒级解析 (PR #1210)**: - **问题背景**: 部分上游服务返回的 `Retry-After` 或速率限制头部包含带小数点的毫秒值,导致解析失败。 - **修复内容**: 增强了时间解析逻辑,支持兼容浮点数格式的时间字段,提高了对非标准上游的兼容性。 * **v4.0.3 (2026-01-27)**: - **[功能增强] 提高请求体限制以支持大体积图片 Payload (PR #1167)**: - 将默认请求体大小限制从 2MB 提升至 **100MB**,解决多图并发传输时的 413 (Payload Too Large) 错误。 - 新增环境变量 `ABV_MAX_BODY_SIZE`,支持用户根据需求动态调整最大限制。 - 服务启动时自动输出当前生效的 Body Limit 日志,便于排查。 - **[核心修复] 解决 Google OAuth 'state' 参数缺失导致的授权失败 (Issue #1168)**: - 修复了添加 Google 账号时可能出现的 "Agent execution terminated" 错误。 - 实现了随机 `state` 参数的生成与回调验证,增强了 OAuth 流程的安全性和兼容性。 - 确保在桌面端和 Web 模式下的授权流程均符合 OAuth 2.0 标准。 - **[核心修复] 解决 Docker/Web 模式下代理开关及账号变动需重启生效的问题 (Issue #1166)**: - 实现了代理开关状态的持久化存储,确保容器重启后状态保持一致。 - 在账号增删、切换、重排及导入后自动触发 Token 管理器热加载,使变更立即在反代服务中生效。 - 优化了账号切换逻辑,自动清除旧会话绑定,确保请求立即路由到新账号。 * **v4.0.2 (2026-01-26)**: - **[核心修复] 解决开启“访问授权”导致的重复认证与 401 循环 (Fix Issue #1163)**: - 修正了后端鉴权中间件逻辑,确保在鉴权关闭模式(Off/Auto)下管理接口不再强制拦截。 - 增强了健康检查路径 (`/api/health`) 的免鉴权豁免,避免 UI 加载初期因状态检测失败触发登录。 - 在前端请求层引入了 401 异常频率限制(防抖锁),彻底解决了大批量请求失败导致的 UI 弹窗抖动。 - **[核心修复] 解决切换账号后会话无法持久化保存 (Fix Issue #1159)**: - 增强了数据库注入逻辑,在切换账号时同步更新身份标识(Email)并清除旧的 UserID 缓存。 - 解决了因 Token 与身份标识不匹配导致客户端无法正确关联或保存新会话的问题。 - **[核心修复] Docker/Web 模式下模型映射持久化 (Fix Issue #1149)**: - 修复了在 Docker 或 Web 部署模式下,管理员通过 API 修改的模型映射配置(Model Mapping)无法保存到硬盘的问题。 - 确保 `admin_update_model_mapping` 接口正确调用持久化逻辑,配置在重启容器后依然生效。 - **[架构优化] MCP 工具支持架构全面升级 (Schema Cleaning & Tool Adapters)**: - **约束语义回填 (Constraint Hints)**: - 实现了智能约束迁移机制,在删除 Gemini 不支持的约束字段(`minLength`, `pattern`, `format` 等)前,自动将其转化为描述提示。 - 新增 `CONSTRAINT_FIELDS` 常量和 `move_constraints_to_description` 函数,确保模型能通过描述理解原始约束。 - 示例: `{"minLength": 5}` → `{"description": "[Constraint: minLen: 5]"}` - **anyOf/oneOf 智能扁平化增强**: - 重写 `extract_best_schema_from_union` 函数,使用评分机制选择最佳类型(object > array > scalar)。 - 在合并后自动添加 `"Accepts: type1 | type2"` 提示到描述中,保留所有可能类型的信息。 - 新增 `get_schema_type_name` 函数,支持显式类型和结构推断。 - **插件化工具适配器层 (Tool Adapter System)**: - 创建 `ToolAdapter` trait,为不同 MCP 工具提供定制化 Schema 处理能力。 - 实现 `PencilAdapter`,自动为 Pencil 绘图工具的视觉属性(`cornerRadius`, `strokeWidth`)和路径参数添加说明。 - 建立全局适配器注册表,支持通过 `clean_json_schema_for_tool` 函数应用工具特定优化。 - **高性能缓存层 (Schema Cache)**: - 实现基于 SHA-256 哈希的 Schema 缓存机制,避免重复清洗相同的 Schema。 - 采用 LRU 淘汰策略,最大缓存 1000 条,内存占用 < 10MB。 - 提供 `clean_json_schema_cached` 函数和缓存统计功能,预计性能提升 60%+。 - **影响范围**: - ✅ 显著提升 MCP 工具(如 Pencil)的 Schema 兼容性和模型理解能力 - ✅ 为未来添加更多 MCP 工具(filesystem, database 等)奠定了插件化基础 - ✅ 完全向后兼容,所有 25 项测试通过 - **[安全增强] Web UI 管理后台密码与 API Key 分离 (Fix Issue #1139)**: - **独立密码配置**: 支持通过 `ABV_WEB_PASSWORD` 或 `WEB_PASSWORD` 环境变量设置独立的管理后台登录密码。 - **智能鉴权逻辑**: - 管理接口优先验证独立密码,未设置时自动回退验证 `API_KEY`(确保向后兼容)。 - AI 代理接口严格仅允许使用 `API_KEY` 进行认证,实现权限隔离。 - **配置 UI 支持**: 在“仪表盘-服务配置”中新增管理密码编辑项,支持一键找回或修改。 - **日志引导**: Headless 模式启动时会清晰打印 API Key 与 Web UI Password 的状态及查看方式。 * **v4.0.1 (2026-01-26)**: - **[UX 优化] 主题与语言切换平滑度**: - 解决了主题和语言切换时的 UI 卡顿问题,将配置持久化逻辑与状态更新解耦。 - 优化了导航栏中的 View Transition API 使用,确保视觉更新不阻塞操作。 - 将窗口背景同步调用改为异步,避免 React 渲染延迟。 - **[核心修复] 反代服务启动死锁**: - 修复了启动反代服务时会阻塞状态轮询请求的竞态/死锁问题。 - 引入了原子启动标志和非阻塞状态检查,确保 UI 在服务初始化期间保持响应。 * **v4.0.0 (2026-01-25)**: - **[重大架构] 深度迁移至 Tauri v2 (Tauri v2 Migration)**: - 全面适配 Tauri v2 核心 API,包括系统托盘、窗口管理与事件系统。 - 解决了多个异步 Trait 动态派发与生命周期冲突问题,后端性能与稳定性显著提升。 - **[部署革新] 原生 Headless Docker 模式 (Native Headless Docker)**: - 实现了“纯后端”Docker 镜像,彻底移除了对 VNC、noVNC 或 XVFB 的依赖,大幅降低内存与 CPU 占用。 - 支持直接托管前端静态资源,容器启动后即可通过浏览器远程管理。 - **[部署修复] Arch Linux 安装脚本修复 (PR #1108)**: - 修复了 `deploy/arch/PKGBUILD.template` 中硬编码 `data.tar.zst` 导致的提取失败问题。 - 实现了基于通配符的动态压缩格式识别,确保兼容不同版本的 `.deb` 包。 - **[管理升级] 全功能 Web 管理界面 (Web-based Console)**: - 重写了管理后台,使所有核心功能(账号管理、API 反代监控、OAuth 授权、模型映射)均可在浏览器端完成。 - 补全了 Web 模式下的 OAuth 回调处理,支持 `ABV_PUBLIC_URL` 自定义,完美适配远程 VPS 或 NAS 部署场景。 - **[项目规范化] 结构清理与单元化 (Project Normalization)**: - 清理了冗余的 `deploy` 目录及其旧版脚本,项目结构更加现代。 - 规范化 Docker 镜像名称为 `antigravity-manager`,并整合专属的 `docker/` 目录与部署手册。 - **[API 增强] 流量日志与监控优化**: - 优化了流量日志的实时监控体验,补全了 Web 模式下的轮询机制与统计接口。 - 精确化管理 API 路由占位符命名,提升了 API 的调用精确度。 - **[用户体验] 监控页面布局与深色模式优化 (PR #1105)**: - **布局重构**: 优化了流量日志页面的容器布局,采用固定最大宽度与响应式边距,解决了在大屏显示器下的内容过度拉伸问题,视觉体验更加舒适。 - **深色模式一致性**: 将日志详情弹窗的配色方案从硬编码的 Slate 色系迁移至 Base 主题色系,确保与全局深色模式风格无缝统一,提升了视觉一致性。 - **[用户体验] 自动更新体验优化**: - **智能降级**: 修复了当原生更新包未就绪(如 Draft Release)时点击更新无反应的问题。现在系统会自动检测并提示用户,同时优雅降级至浏览器下载模式,确保持续可更新。 - **[核心修复] 深度优化 Signature Cache 与 Rewind 检测 (PR #1094)**: - **400 错误自愈**: 增强了思考块签名的清洗逻辑。系统现在能自动识别因服务器重启导致的“无主签名”,并在发送给上游前主动将其剥离,从根本上杜绝了由此引发了 `400 Invalid signature` 报错。 - **Rewind (回退) 检测机制**: 升级缓存层,引入消息计数(Message Count)校验。当用户回退对话历史并重新发送时,系统会自动重置签名状态,确保对话流的合法性。 - **全链路适配**: 优化了 Claude、Gemini 及 z.ai (Anthropic) 的数据链路,确保消息计数在流式与非流式请求中均能精准传播。 - **[OpenAI 鲁棒性增强] 优化重试策略与模型级限流 (PR #1093)**: - **鲁棒重试**: 强制最小 2 次请求尝试,确保单账号模式下也能有效应对瞬时网络抖动;移除了配额耗尽的硬中断,允许自动轮换账号。 - **模型级限流**: 引入模型级限流隔离,避免单个模型限流锁定整个账号,确保账号下其他模型可用。 - **接口修复**: 修复了 TokenManager 异步接口的 Email/ID 混用漏洞,确保限流记录准确。 - **[系统鲁棒性] 统一重试与退避调度中心 (Unified Retry & Backoff Hub)**: - **逻辑归一化**: 将散落在各协议处理器中的重试逻辑抽象至 `common.rs`,实现全局统一调度。 - **强制退避延迟**: 彻底修复了原先逻辑中解析不到 `Retry-After` 就立即重试导致封号的问题。现在所有处理器在重试前必须通过共享模块执行物理等待,有效保护 IP 信誉。 - **激进参数调整**: 针对 Google/Anthropic 频率限制,将 429 和 503 的初始退避时间显著上调至 **5s-10s**,大幅降低生产环境风控风险。 - **[CLI 同步优化] 解决 Token 冲突与模型配置清理 (PR #1054)**: - **自动冲突解决**: 在设置 `ANTHROPIC_API_KEY` 时自动移除冲突的 `ANTHROPIC_AUTH_TOKEN`,解决 Claude CLI 同步报错问题。 - **环境变量清理**: 同步时自动移除 `ANTHROPIC_MODEL` 等可能干扰模型输出的环境变量,确保 CLI 使用标准模型。 - **配置健壮性**: 优化了 API Key 为空时的处理方式,避免无效配置干扰。 - **[核心优化] 用量缩放功能默认关闭与联动机制 (Usage Scaling Default Off)**: - **默认关闭**: 基于用户反馈,将"启用用量缩放"功能从默认开启改为默认关闭,回归透明模式。 - **联动机制**: 建立了缩放与自动压缩 (L1/L2/L3) 的联动关系。只有当用户主动开启缩放时,才同步激活自动压缩逻辑。 - **解决痛点**: 修复了用户反馈的"缩放致盲"问题 - 默认模式下客户端能看到真实 Token 用量,在接近 200k 时触发原生 `/compact` 提示,避免死锁。 - **功能定位**: 将缩放+压缩重新定义为"激进扩容模式",仅供处理超大型项目时手动开启,提升系统稳定性与可预测性。 - **⚠️ 升级提醒**: 从旧版本升级的用户,建议在"设置 → 实验性功能"中手动关闭"启用用量缩放",以获得更稳定透明的体验。 - **[协议优化] 全协议自动流式转换 (Auto-Stream Conversion)**: - **全链路覆盖**: 对 OpenAI (Chat/Legacy/Codex) 和 Gemini 协议实现了强制内部流式化转换。即使客户端请求非流式 (`stream: false`),后端也会自动建立流式连接与上游通信,极大提升了连接稳定性和配额利用率。 - **智能聚合**: 实现了高性能的流式聚合器,在兼容旧版客户端的同时,还能在后台实时捕获 Thinking 签名,有效解决了非流式请求下签名丢失导致后续工具调用失败的问题。 - **[核心修复] 错误日志元数据补全 (Log Metadata Fix)**: - **问题背景**: 之前版本在 429/503 等严重错误(如账号耗尽)发生时,日志记录中遗漏了 `mapped_model` 和 `account_email` 字段,导致无法定位出错的具体模型和账号。 - **修复内容**: 在 OpenAI 和 Claude 协议的所有错误退出路径(包括 Token 获取失败、转换异常、重试耗尽)中强制注入了元数据 Header。现在即使请求失败,流量日志也能准确显示目标模型和上下文信息,极大提升了排查效率。 * **v4.0.0 (2026-01-25)**: - **[核心功能] 后台任务模型可配置 (Background Model Configuration)**: - **功能增强**: 允许用户自定义“后台任务”(如标题生成、摘要压缩)使用的模型。不再强制绑定 `gemini-2.5-flash`。 - **UI 更新**: 在“模型映射”页面新增了“后台任务模型”配置项,支持从下拉菜单中选择任意可用模型(如 `gemini-3-flash`)。 - **路由修复**: 修复了后台任务可能绕过用户自定义映射的问题。现在 `internal-background-task` 会严格遵循用户的重定向规则。 - **[重要通告] 上游模型容量预警 (Capacity Warning)**: - **容量不足**: 接获大量反馈,上游 Google 的 `gemini-2.5-flash` 和 `gemini-2.5-flash-lite` 模型当前正处于极度容量受限状态 (Rate Limited / Capacity Exhausted)。 - **建议操作**: 为保证服务可用性,建议用户暂时在“自定义映射”中将上述两个模型重定向至其他模型(如 `gemini-3-flash` 或 `gemini-3-pro-high`),直到上游恢复。 - **[核心修复] Windows 启动参数支持 (PR #973)**: - **问题修复**: 修复了 Windows 平台下启动参数(如内网穿透配置等)无法正确解析生效的问题。感谢 @Mag1cFall 的贡献。 - **[核心修复] Claude 签名校验增强 (PR #1009)**: - **功能优化**: 增强了 Claude 模型的签名校验逻辑,修复了在长对话或复杂工具调用场景下可能出现的 400 错误。 - **兼容性提升**: 引入最小签名长度校验,并对合法长度的未知签名采取信任策略,大幅提升了 JSON 工具调用的稳定性。 - **[国际化] 越南语翻译优化 (PR #1017)**: - **翻译精简**: 对关于页面等区域的越南语翻译进行了精简与标点优化。 - **[国际化] 土耳其语托盘翻译增强 (PR #1023)**: - **功能优化**: 为系统托盘菜单增加了完整的土耳其语翻译支持,提升了土耳其语用户的操作体验。 - **[功能增强] 多语言支持与 I18n 设置 (PR #1029)**: - **新增语言支持**: 增加了葡萄牙语、日语、越南语、土耳其语、俄语等多国语言的更完整支持。 - **I18n 设置面板**: 在设置页面新增了语言选择器,支持即时切换应用显示语言。 - **[国际化] 韩语支持与界面优化 (New)**: - **韩语集成**: 新增了完整的韩语 (`ko`) 翻译支持,现在可以在设置中选择韩语界面。 - **UI 交互升级**: 重构了顶部导航栏的语言切换器,由原来的单次点击循环切换升级为更直观的下拉菜单,展示语言缩写与全称,提升了多语言环境下的操作体验。 * **v3.3.49 (2026-01-22)**: - **[核心修复] Thinking 后中断与 0 Token 防御 (Fix Thinking Interruption)**: - **问题背景**: 针对 Gemini 等模型在输出 Thinking 内容后流意外中断,导致 Claude 客户端收到 0 Token 响应并报错死锁的问题。 - **防御机制**: - **状态追踪**: 实时监测流式响应中是否“只想未说”(已发送 Thinking 但未发送 Content)。 - **自动兜底**: 当检测到此类中断时,系统会自动闭合 Thinking 块,注入系统提示信息,并模拟正常的 Usage 数据,确保客户端能优雅结束会话。 - **[核心修复] 移除 Flash Lite 模型以修复 429 错误 (Fix 429 Errors)**: - **问题背景**: 今日监测发现 `gemini-2.5-flash-lite` 频繁出现 429 错误,具体原因为 **上游 Google 容器容量耗尽 (MODEL_CAPACITY_EXHAUSTED)**,而非通常的账号配额不足。 - **紧急修复**: 将所有系统内部默认的 `gemini-2.5-flash-lite` 调用(如后台标题生成、L3 摘要压缩)及预设映射全部替换为更稳定的 `gemini-2.5-flash`。 - **用户提醒**: 如果您在“自定义映射”或“预设”中手动使用了 `gemini-2.5-flash-lite`,请务必修改为其他模型,否则可能会持续遇到 429 错误。 - **[性能优化] 设置项即时生效 (Fix PR #949)**: - **即时生效**: 修复了语言切换需要手动点击保存的问题。现在修改语言设置会立即应用到整个 UI。 - **[代码清理] 后端架构重构与优化 (PR #950)**: - **架构精简**: 深度重构了代理层的 Mapper 和 Handler 逻辑,移除了冗余模块(如 `openai/collector.rs`),显著提升了代码的可维护性。 - **稳定性增强**: 优化了 OpenAI 与 Claude 协议的转换链路,统一了图片配置解析逻辑,并加固了上下文管理器的健壮性。 - **[核心修复] 设置项同步策略更新**: - **状态同步**: 修正了主题切换的即时应用逻辑,并解决了 `App.tsx` 与 `Settings.tsx` 之间的状态冲突,确保配置加载过程中的 UI 一致性。 - **[核心优化] 上下文压缩与 Token 节省**: - **由于 Claude CLI 在恢复历史记录时会发送大量上下文,现已将压缩阈值改为可配置并降低默认值。** - **L3 摘要重置阈值由 90% 降至 70%,在 token 堆积过多前提前进行压缩节省额度。** - **前端 UI 增强:在实验性设置中新增 L1/L2/L3 压缩阈值滑块,支持动态自定义。** - **[功能增强] API 监控看板功能升级 (PR #951)**: - **账号筛选**: 新增按账号筛选流量日志的功能,支持在大流量环境下精准追踪特定账号的调用情况。 - **详情深度增强**: 监控详情页现在可以完整显示请求协议(OpenAI/Anthropic/Gemini)、使用账号、映射后的物理模型等关键元数据。 - **UI 与国际化**: 优化了监控详情的布局,并补全了 8 种语言的相关翻译。 - **[JSON Schema 优化] 递归收集 $defs 并完善回退处理 (PR #953)**: - **递归收集**: 添加了 `collect_all_defs()` 以递归方式从所有模式层级收集 `$defs`/`definitions`,解决了嵌套定义丢失的问题。 - **引用平坦化**: 始终运行 `flatten_refs()` 以捕获并处理孤立的 `$ref` 字段。 - **回退机制**: 为未解析的 `$ref` 添加了回退逻辑,将其转换为带有描述性提示的字符串类型。 - **稳定性增强**: 新增了针对嵌套定义和未解析引用的测试用例,确保 Schema 处理的健壮性。 - **[核心修复] 账号索引保护 (Fix Issue #929)**: - **安全加固**: 移除了加载失败时的自动删除逻辑,防止在升级或环境异常时意外丢失账号索引,确保用户数据安全。 - **[核心优化] 路由器与模型映射深度优化 (PR #954)**: - **路由器确定性优先级**: 修复了路由器在处理多通配符模式时的不确定性问题,实现了基于模式长度和复杂度的确定性匹配优先级。 - **[稳定性增强] OAuth 回调与解析优化 (Fix #931, #850, #778)**: - **鲁棒解析**: 优化了本地回调服务器的 URL 解析逻辑,不再依赖单一分割符,提升了不同浏览器下的兼容性。 - **调试增强**: 增加了原始请求 (Raw Request) 记录功能,当授权失败时可直接在日志中查看原始数据,方便定位网络拦截问题。 - **[网络优化] OAuth 通信质量提升 (Issue #948, #887)**: - **延时保障**: 将授权请求超时时间延长至 60 秒,大幅提升了在代理环境下的 Token 交换成功率。 - **错误指引**: 针对 Google API 连接超时或重置的情况,新增了明确的中文代理设置建议,降低排查门槛。 - **[体验优化] 上游代理配置校验与提示增强 (Contributed by @zhiqianzheng)**: - **配置校验**: 当用户启用上游代理但未填写代理地址时,保存操作将被阻止并显示明确的错误提示,避免无效配置导致的连接失败。 - **重启提醒**: 成功保存代理配置后,系统会提示用户需要重启应用才能使配置生效,降低用户排查成本。 - **多语言支持**: 新增简体中文、繁体中文、英文、日语的相关翻译。 * **v3.3.48 (2026-01-21)**: - **[核心修复] Windows 控制台闪烁问题 (Fix PR #933)**: - **问题背景**: Windows 平台在启动或执行后台命令时,偶尔会弹出短暂的 CMD 窗口,影响用户体验。 - **修复内容**: 在 `cloudflared` 进程创建逻辑中添加 `CREATE_NO_WINDOW` 标志,确保所有后台进程静默运行。 - **影响范围**: 解决了 Windows 用户在启动应用或 CLI 交互时的窗口闪烁问题。 * **v3.3.47 (2026-01-21)**: - **[核心修复] 图片生成 API 参数映射增强 (Fix Issue #911)**: - **功能**: 支持从 OpenAI 参数 (`size`, `quality`) 解析配置,支持动态宽高比计算,`quality: hd` 自动映射为 4K 分辨率。 - **影响**: 显著提升 Images API 兼容性,OpenAI 与 Claude 协议均受支持。 - **[功能增强] Cloudflared 内网穿透支持 (PR #923)**: - **核心功能**: 集成 `cloudflared` 隧道支持,允许用户在无公网 IP 或处于复杂内网环境下,通过 Cloudflare 隧道一键发布 API 服务。 - **易用性优化**: 前端新增 Cloudflared 配置界面,支持状态监控、日志查看及一键开关隧道。 - **国际化补全**: 补全了繁体中文、英文、日文、韩文、越南语、土耳其语、俄语等 8 国语言的 Cloudflared 相关翻译。 - **[核心修复] 解决 Git 合并冲突导致的启动失败**: - **修复内容**: 解决了 `src-tauri/src/proxy/handlers/claude.rs` 中因多进程并行合并产生的 `<<<<<<< HEAD` 冲突标记。 - **影响范围**: 恢复了后端服务的编译能力,修复了应用启动即崩溃的问题。 - **[核心优化] 三层渐进式上下文压缩 (3-Layer Progressive Context PCC)**: - **背景**: 长对话场景下频繁触发 "Prompt is too long" 错误,手动 `/compact` 操作繁琐,且现有压缩策略会破坏 LLM 的 KV Cache,导致成本飙升 - **解决方案 - 多层渐进式压缩策略**: - **Layer 1 (60% 压力)**: 工具消息智能裁剪 - 删除旧的工具调用/结果消息,保留最近 5 轮交互 - **完全不破坏 KV Cache**(只删除消息,不修改内容) - 压缩率:60-90% - **Layer 2 (75% 压力)**: Thinking 内容压缩 + 签名保留 - 压缩 `assistant` 消息中的 Thinking 块文本内容(替换为 "...") - **完整保留 `signature` 字段**,解决 Issue #902(签名丢失导致 400 错误) - 保护最近 4 条消息不被压缩 - 压缩率:70-95% - **Layer 3 (90% 压力)**: Fork 会话 + XML 摘要 - 使用 `gemini-2.5-flash-lite` 生成 8 节 XML 结构化摘要(成本极低) - 提取并保留最后一个有效 Thinking 签名 - 创建新的消息序列:`[User: XML摘要] + [Assistant: 确认] + [用户最新消息]` - **完全不破坏 Prompt Cache**(前缀稳定,只追加) - 压缩率:86-97% - **技术实现**: - **新增模块**: `context_manager.rs` 中实现 Token 估算、工具裁剪、Thinking 压缩、签名提取等核心功能 - **辅助函数**: `call_gemini_sync()` - 可复用的同步上游调用函数 - **XML 摘要模板**: 8 节结构化摘要(目标、技术栈、文件状态、代码变更、调试历史、计划、偏好、签名) - **渐进式触发**: 按压力等级自动触发,每次压缩后重新估算 Token 用量 - **成本优化**: - Layer 1: 完全无成本(不破坏缓存) - Layer 2: 低成本(仅破坏部分缓存) - Layer 3: 极低成本(摘要生成使用 flash-lite,新会话完全缓存友好) - **综合节省**: 86-97% Token 成本,同时保持签名链完整性 - **用户体验**: - 自动化:无需手动 `/compact`,系统自动处理 - 透明化:详细日志记录每层压缩的触发和效果 - 容错性:Layer 3 失败时返回友好错误提示 - **影响范围**: 解决长对话场景下的上下文管理问题,显著降低 API 成本,确保工具调用链完整性 - **[核心优化] 上下文估算与缩放算法增强 (PR #925)**: - **背景**: 在 Claude Code 等长对话场景下,固定的 Token 估算算法(3.5 字符/token)在中英文混排时误差极大,导致三层压缩逻辑无法及时触发,最终仍会报 "Prompt is too long" 错误 - **解决方案 - 动态校准 + 多语言感知**: - **多语言感知估算**: - **ASCII/英文**: 约为 4 字符/Token(针对代码和英文文档优化) - **Unicode/CJK (中日韩)**: 约为 1.5 字符/Token(针对 Gemini/Claude 分词特点) - **安全余量**: 在计算结果基础上额外增加 15% 的安全冗余 - **动态校准器 (`estimation_calibrator.rs`)**: - **自学习机制**: 记录每次请求的"估算 Token 数"与 Google API 返回的"实际 Token 数" - **校准因子**: 使用指数移动平均 (EMA, 60% 旧比例 + 40% 新比例) 维护校准系数 - **保守初始化**: 初始校准系数为 2.0,确保系统运行初期极其保守地触发压缩 - **自动收敛**: 根据实际数据自动修正,使估算值越来越接近真实值 - **整合三层压缩框架**: - 在所有估算环节(初始估算、Layer 1/2/3 后重新估算)使用校准后的 Token 数 - 每层压缩后记录详细的校准因子日志,便于调试和监控 - **技术实现**: - **新增模块**: `estimation_calibrator.rs` - 全局单例校准器,线程安全 - **修改文件**: `claude.rs`, `streaming.rs`, `context_manager.rs` - **校准数据流**: 流式响应收集器 → 提取真实 Token 数 → 更新校准器 → 下次请求使用新系数 - **用户体验**: - **透明化**: 日志中显示原始估算值、校准后估算值、校准因子,便于理解系统行为 - **自适应**: 系统会根据用户的实际使用模式(中英文比例、代码量等)自动调整 - **精准触发**: 压缩逻辑基于更准确的估算值,大幅降低"漏判"和"误判"概率 - **影响范围**: 显著提升上下文管理的精准度,解决 Issue #902 和 #867 中反馈的自动压缩失效问题,确保长对话稳定性 - **[关键修复] Thinking 签名恢复逻辑优化**: - **背景**: 在重试场景下,签名检查逻辑未检查 Session Cache,导致错误禁用 Thinking 模式,产生 0 token 请求和响应失败 - **问题表现**: - 重试时显示 "No valid signature found for function calls. Disabling thinking" - 流量日志显示 `I: 0, O: 0` (实际请求成功但 Token 未记录) - 客户端可能无法接收到响应内容 - **修复内容**: - **扩展签名检查范围**: `has_valid_signature_for_function_calls()` 现在检查 Session Cache - **检查优先级**: Global Store → **Session Cache (新增)** → Message History - **详细日志**: 添加签名来源追踪日志,便于调试 - **技术实现**: - 修改 `request.rs` 中的签名验证逻辑 - 新增 `session_id` 参数传递到签名检查函数 - 添加 `[Signature-Check]` 系列日志用于追踪签名恢复过程 - **影响**: 解决重试场景下的 Thinking 模式降级问题,确保 Token 统计准确性,提升长会话稳定性 - **[核心修复] 通用参数对齐引擎 (Universal Parameter Alignment Engine)**: - **背景**: 解决 Gemini API 在调用工具(Tool Use)时因参数类型不匹配产生的 `400 Bad Request` 错误。 - **修复内容**: - **实现参数对齐引擎**: 在 `json_schema.rs` 中实现 `fix_tool_call_args`,基于 JSON Schema 自动将字符串类型的数字/布尔值转换为目标类型,并处理非法字段。 - **多协议重构**: 同步重构了 OpenAI 和 Claude 协议层,移除了硬编码的工具参数修正逻辑,改用统一的对齐引擎。 - **解决问题**: 修复了 `local_shell_call`、`apply_patch` 等工具在多级反代或特定客户端下参数被错误格式化为字符串导致的异常。 - **影响**: 显著提升了工具调用的稳定性,减少了上游 API 的 400 错误。 - **[功能增强] 画图模型配额保护支持 (Fix Issue #912)**: - **问题背景**: 用户反馈画图模型(G3 Image)没有配额保护功能,导致配额耗尽的账号仍被用于画图请求 - **修复内容**: - **后端配置**: 在 `config.rs` 的 `default_monitored_models()` 中添加 `gemini-3-pro-image`,与智能预热和配额关注列表保持一致 - **前端 UI**: 在 `QuotaProtection.tsx` 中添加画图模型选项,调整布局为一行4个模型(与智能预热保持一致) - **影响范围**: - ✅ 向后兼容:已有配置不受影响,新用户或重置配置后会自动包含画图模型 - ✅ 完整保护:现在所有4个核心模型(Gemini 3 Flash、Gemini 3 Pro High、Claude 4.5 Sonnet、Gemini 3 Pro Image)都受配额保护监控 - ✅ 自动触发:当画图模型配额低于阈值时,账号会自动加入保护列表,避免继续消耗 - **[传输层优化] 流式响应防缓冲优化 (Streaming Response Anti-Buffering)**: - **背景**: 在 Nginx 等反向代理后部署时,流式响应可能被代理缓冲,导致客户端延迟增加 - **修复内容**: - **添加 X-Accel-Buffering Header**: 在所有流式响应中注入 `X-Accel-Buffering: no` 头部 - **多协议覆盖**: Claude (`/v1/messages`)、OpenAI (`/v1/chat/completions`) 和 Gemini 原生协议全部支持 - **技术细节**: - 修改文件: `claude.rs:L877`, `openai.rs:L314`, `gemini.rs:L240` - 该 Header 告诉 Nginx 等反向代理不要缓冲流式响应,直接透传给客户端 - **影响**: 显著降低反向代理场景下的流式响应延迟,提升用户体验 - **[错误恢复增强] 多协议签名错误自愈提示词 (Multi-Protocol Signature Error Recovery)**: - **背景**: 当 Thinking 模式下出现签名错误时,仅剔除签名可能导致模型生成空响应或简单的 "OK" - **修复内容**: - **Claude 协议增强**: 在现有签名错误重试逻辑中追加修复提示词,引导模型重新生成完整响应 - **OpenAI 协议实现**: 新增 400 签名错误检测和修复提示词注入逻辑 - **Gemini 协议实现**: 新增 400 签名错误检测和修复提示词注入逻辑 - **修复提示词**: [System Recovery] Your previous output contained an invalid signature. Please regenerate the response without the corrupted signature block. - **技术细节**: - Claude: `claude.rs:L1012-1030` - 增强现有逻辑,支持 String 和 Array 消息格式 - OpenAI: `openai.rs:L391-427` - 完整实现,使用 `OpenAIContentBlock::Text` 类型 - Gemini: `gemini.rs:L17, L299-329` - 修改函数签名支持可变 body,注入修复提示词 - **影响**: - ✅ 提升错误恢复成功率:模型收到明确指令,避免生成无意义响应 - ✅ 多协议一致性:所有 3 个协议具有相同的错误恢复能力 - ✅ 用户体验改善:减少因签名错误导致的对话中断 * **v3.3.46 (2026-01-20)**: - **[功能增强] Token 使用统计 (Token Stats) 深度优化与国际化标准化 (PR #892)**: - **UI/UX 统一**: 实现了自定义 Tooltip 组件,统一了面积图、柱状图和饼图的悬浮提示样式,增强了深色模式下的对比度与可读性。 - **视觉细节磨砂**: 优化了图表光标和网格线,移除冗余的 hover 高亮,使图表界面更加清爽专业。 - **自适应布局**: 改进了图表容器的 Flex 布局,确保在不同窗口尺寸下均能填充满垂直空间,消除了图表下方的留白。 - **分账号趋势统计**: 新增了“按账号查看”模式,支持通过饼图和趋势图直观分析各账号的 Token 消耗占比与活跃度。 - **国际化 (i18n) 标准化**: 解决了 `ja.json`、`zh-TW.json`、`vi.json`、`ru.json`、`tr.json` 等多国语言文件中的键值重复警告。补全了 `account_trend`、`by_model` 等缺失翻译,确保 8 种语言下的 UI 展现高度一致。 - **[核心修复] 移除 [DONE] 停止序列以防止输出截断 (PR #889)**: - **问题背景**: `[DONE]` 是 SSE (Server-Sent Events) 协议的标准结束标记,在代码和文档中经常出现。将其作为 `stopSequence` 会导致模型在解释 SSE 相关内容时输出被意外截断。 - **修复内容**: 从 Gemini 请求的 `stopSequences` 数组中移除了 `"[DONE]"` 标记。 - **技术说明**: - Gemini 流的真正结束由 `finishReason` 字段控制,无需依赖 `stopSequence` - SSE 层面的 `"data: [DONE]"` 已在 `mod.rs` 中单独处理 - **影响范围**: 解决了模型在生成包含 SSE 协议说明、代码示例等内容时被提前终止的问题 (Issue #888)。 - **[部署优化] Docker 镜像构建双模适配 (Default/China Mode)**: - **双模架构**: 引入 `ARG USE_CHINA_MIRROR` 构建参数。默认模式保持原汁原味的 Debian 官方源(适合海外/云构建);开启后自动切换为清华大学 (TUNA) 镜像源(适合国内环境)。 - **灵活性大幅提升**: 解决了硬编码国内源导致海外构建缓慢的问题,同时保留了国内用户的加速体验。 - **[稳定性修复] VNC 与容器启动逻辑加固 (PR #881)**: - **僵尸进程清理**: 优化了 `start.sh` 中的 cleanup 逻辑,改用 `pkill` 精准查杀 Xtigervnc 和 websockify 进程,并清理 `/tmp/.X11-unix` 锁文件,解决了重启后 VNC 无法连接的各种边缘情况。 - **健康检查升级**: 将 Healthcheck 检查项扩展到 websockify 和主程序,确保容器状态更真实地反映服务可用性。 - **重大修复**: 修复了 OpenAI 协议请求返回 404 的问题,并解决了 Codex (`/v1/responses`) 接收复杂对象数组 `input` 或 `apply_patch` 等自定义工具(缺失 Schema)时导致上游返回 400 (`INVALID_ARGUMENT`) 的兼容性缺陷。 - **思维模型优化**: 解决了 Claude 4.6 Thinking 模型在历史消息缺失思维链时强制报错的问题,实现了智能协议降级与占位块注入。 - **协议补全**: 补全了 OpenAI Legacy 接口的 Token 统计响应与 Header 注入,支持 `input_text` 类型内容块,并将 `developer` 角色适配为系统指令。 - **requestId 统一**: 统一所有 OpenAI 路径下的 `requestId` 前缀为 `agent-`,解决部分客户端的 ID 识别问题。 - **[核心修复] JSON Schema 数组递归清理修复 (解决 Gemini API 400 错误)**: - **问题背景**: Gemini API 不支持 `propertyNames`、`const` 等 JSON Schema 字段。虽然已有白名单过滤逻辑,但由于 `clean_json_schema_recursive` 函数缺少对 `Value::Array` 类型的递归处理,导致嵌套在 `anyOf`、`oneOf` 或 `items` 数组内部的非法字段无法被清除,触发 `Invalid JSON payload received. Unknown name "propertyNames"/"const"` 错误。 - **修复内容**: - **增加 anyOf/oneOf 合并前的递归清洗**: 在合并 `anyOf`/`oneOf` 分支之前,先递归清洗每个分支内部的内容,确保合并的分支已被清理,防止非法字段在合并过程中逃逸。 - **增加通用数组递归处理分支**: 为 `match` 语句增加 `Value::Array` 分支,确保所有数组类型的值(包括 `items`、`enum` 等)都会被递归清理,覆盖所有可能包含 Schema 定义的数组字段。 - **测试验证**: 新增 3 个测试用例验证修复效果,所有 14 个测试全部通过,无回归。 - **影响范围**: 解决了复杂工具定义(如 MCP 工具)中嵌套数组结构导致的 400 错误,确保 Gemini API 调用 100% 兼容。 * **v3.3.45 (2026-01-19)**: - **[核心功能] 解决 Claude/Gemini SSE 中断与 0-token 响应问题 (Issue #859)**: - **增强型预读 (Peek) 逻辑**: 在向客户端发送 200 OK 响应前,代理现在会循环预读并跳过所有心跳包(SSE ping)及空数据块,确认收到有效业务内容后再建立连接。 - **智能重试触发**: 若在预读阶段检测到空响应、超时(60s)或流异常中断,系统将自动触发账号轮换和重试机制,解决了长延迟模型下的静默失败。 - **协议一致性增强**: 为 Gemini 协议补齐了缺失的预读逻辑;同时将 Claude 心跳间隔优化为 30s,减少了生成长文本时的连接干扰。 - **[核心功能] 固定账号模式集成 (PR #842)**: - **后端增强**: 在代理核心中引入了 `preferred_account_id` 支持,允许通过 API 或 UI 强制锁定特定账号进行请求调度。 - **UI 交互更新**: 在 API 反代页面新增“固定账号”切换与账号选择器,支持实时锁定当前会话的出口账号。 - **调度优化**: 在“固定账号模式”下优先级高于传统轮询,确保特定业务场景下的会话连续性。 - **[国际化] 全语言翻译补全与清理**: - **8 语言覆盖**: 补全了中、英、繁中、日、土、越、葡、俄等 8 种语言中关于“固定账号模式”的所有 i18n 翻译项。 - **冗余清理**: 修复了 `ja.json` 和 `vi.json` 中由于历史 PR 累积导致的重复键(Duplicate Keys)警告,提升了翻译规范性。 - **标点同步**: 统一清除了各语言翻译中误用的全角标点,确保 UI 展示的一致性。 - **[核心功能] 客户端热更新与 Token 统计系统 (PR #846 by @lengjingxu)**: - **热更新 (Native Updater)**: 集成 Tauri v2 原生更新插件,支持自动检测、下载、安装及重启,实现客户端无感升级。 - **Token 消费可视化**: 新增基于 SQLite 实现的 Token 统计持久化模块,支持按小时/日/周维度查看总消耗及各账号占比。 - **UI/UX 增强**: 优化了图表悬浮提示 (Tooltip) 在深色模式下的对比度,隐藏了冗余的 hover 高亮;补全了 8 语言完整翻译并修复了硬编码图例。 - **集成修复**: 在本地合并期间修复了 PR 原始代码中缺失插件配置导致的启动崩溃故障。 - **[系统加速] 启用清华大学 (TUNA) 镜像源**: 优化了 Dockerfile 构建流程,大幅提升国内环境下的插件安装速度。 - **[部署优化] 官方 Docker 与 noVNC 支持 (PR #851)**: - **全功能容器化**: 为 headless 环境提供完整的 Docker 部署方案,内置 Openbox 桌面环境。 - **Web VNC 集成**: 集成 noVNC,支持通过浏览器直接访问图形界面进行 OAuth 授权(内置 Firefox ESR)。 - **自愈启动流**: 优化了 `start.sh` 启动逻辑,支持自动清理 X11 锁文件及服务崩溃自动退出,提升生产环境稳定性。 - **多语言适配**: 内置 CJK 字体,确保 Docker 环境下中文字符正常显示。 - **资源限制优化**: 统一设置 `shm_size: 2gb`,解决容器内浏览器及图形界面崩溃问题。 - **[核心功能] 修复账号切换时的设备指纹同步问题**: - **路径探测改进**: 优化了 `storage.json` 的探测时机,确保在进程关闭前准确获取路径,兼容自定义数据目录。 - **自动隔离生成**: 针对未绑定指纹的账号,在切换时会自动生成并绑定唯一的设备标识,实现账号间的指纹隔离。 - **[UI 修复] 修复账号管理页条数显示不准确问题 (Issue #754)**: - **逻辑修正**: 强制分页条数默认最低为 10 条,解决了小窗口下自动变为 5 条或 9 条的不直觉体验。 - **持久化增强**: 实现了分页大小的 `localStorage` 持久化,用户手动选择的条数将永久锁定并覆盖自动模式。 - **UI 一致性**: 确保右下角分页选项与列表实际展示条数始终保持一致。 * **v3.3.44 (2026-01-19)**: - **[核心稳定性] 动态思维剥离 (Dynamic Thinking Stripping) - 解决 Prompt 过长与签名错误**: - **问题背景**: 在 Deep Thinking 模式下,长对话会导致两类致命错误: - `Prompt is too long`: 历史 Thinking Block 累积导致 Token 超限 - `Invalid signature`: 代理重启后内存签名缓存丢失,旧签名被 Google 拒收 - **解决方案 - Context Purification (上下文净化)**: - **新增 `ContextManager` 模块**: 实现 Token 估算与历史清洗逻辑 - **分级清洗策略**: - `Soft` (60%+ 压力): 保留最近 2 轮 Thinking,剥离更早历史 - `Aggressive` (90%+ 压力): 移除所有历史 Thinking Block - **差异化限额**: Flash 模型 (1M) 与 Pro 模型 (2M) 采用不同触发阈值 - **签名同步清除**: 清洗 Thinking 时自动移除 `thought_signature`,避免签名校验失败 - **透明度增强**: 响应头新增 `X-Context-Purified: true` 标识,便于调试 - **性能优化**: 基于字符数的轻量级 Token 估算,对请求延迟影响 \u003c 5ms - **影响范围**: 解决 Deep Thinking 模式下的两大顽疾,释放 40%-60% Context 空间,确保长对话稳定性 * **v3.3.43 (2026-01-18)**: - **[国际化] 设备指纹对话框全量本地化 (PR #825, 感谢 @IamAshrafee)**: - 解决了设备指纹(Device Fingerprint)对话框中残留的硬编码中文字符串问题。 - 补全了英、繁、日等 8 种语言的翻译骨架,提升全球化体验。 - **[日语优化] 日语翻译补全与术语修正 (PR #822, 感谢 @Koshikai)**: - 补全了 50 多个缺失的翻译键,覆盖配额保护、HTTP API、更新检查等核心设置。 - 优化了技术术语,使日语表达更自然(例如:`pro_low` 译为“低消費”)。 - **[翻译修复] 越南语拼写错误修正 (PR #798, 感谢 @vietnhatthai)**: - 修复了越南语设置中 `refresh_msg` 的拼写错误(`hiện đài` -> `hiện tại`)。 - **[兼容性增强] 新增 Google API Key 原生支持 (PR #831)**: - **支持 `x-goog-api-key` 请求头**: - 认证中间件现在支持识别 `x-goog-api-key` 头部。 - 提高了与 Google 官方 SDK 及第三方 Google 风格客户端的兼容性,无需再手动修改 Header 为 `x-api-key`。 * **v3.3.42 (2026-01-18)**: - **[流量日志增强] 协议自动识别与流式响应整合 (PR #814)**: - **协议标签分类**: 流量日志列表现在可以根据 URI 自动识别并标注协议类型(OpenAI 绿色、Anthropic 橙色、Gemini 蓝色),使请求来源一目了然。 - **流式数据全整合**: 解决了流式响应在日志中仅显示 `[Stream Data]` 的问题。现在会自动拦截并聚合流式数据包,将分散的 `delta` 片段还原为完整的回复内容和“思考”过程,大幅提升调试效率。 - **多语言适配**: 补全了流量日志相关功能在 8 种语言环境下的 i18n 翻译。 - **[重大修复] Gemini JSON Schema 清洗策略深度重构 (Issue #815)**: - **解决属性丢失问题**: 实现了“最佳分支合并”逻辑。在处理工具定义的 `anyOf`/`oneOf` 结构时,会自动识别并提取内容最丰富的分支属性向上合并,解决了模型报错 `malformed function call` 的顽疾。 - **稳健的白名单机制**: 采用针对 Gemini API 的严格白名单过滤策略,剔除不支持的校验字段,确保 API 调用 100% 兼容(从根本上杜绝 400 错误)。 - **约束信息迁移 (Description Hints)**: 在移除 `minLength`, `pattern`, `format` 等字段前,自动将其转为文字描述追加到 `description` 中,确保模型依然能感知参数约束。 - **Schema 上下文检测锁**: 新增安全检查逻辑,确保清洗器仅在处理真正的 Schema 时执行。通过“精准锁”保护了 `request.rs` 中的工具调用结构,确保历史修复逻辑(如布尔值转换、Shell 数组转换)在重构后依然稳如磐石。 * **v3.3.41 (2026-01-18)**: - **Claude 协议核心兼容性修复 (Issue #813)**: - **连续 User 消息合并**: 实现了 `merge_consecutive_messages` 逻辑,在请求进入 Proxy 时自动合并具有相同角色的连续消息流。解决了因 Spec/Plan 模式切换导致的角色交替违规产生的 400 Bad Request 错误。 - **EnterPlanMode 协议对齐**: 针对 Claude Code 的 `EnterPlanMode` 工具调用,强制清空冗余参数,确保完全符合官方协议,解决了激活 Plan Mode 时的指令集校验失败问题。 - **代理鲁棒性增强**: - 增强了工具调用链的自愈能力。当模型因幻觉产生错误路径尝试时,Proxy 现能提供标准的错误反馈引导模型转向正确路径。 * **v3.3.40 (2026-01-18)**: - **API 400 错误深度修复 (Grep/Thinking 稳定性改进)**: - **修复流式块顺序违规**: 解决了 "Found 'text' instead of 'thinking'" 400 错误。修正了 `streaming.rs` 中在文字块后非法追加思维块的逻辑,改由缓存机制实现静默同步。 - **思维签名自愈增强**: 在 `claude.rs` 中扩展了 400 错误捕获关键词,覆盖了签名失效、顺序违规和协议不匹配场景。一旦触发,代理会自动执行消息降级并快速重试,实现用户无感知的异常自愈。 - **搜索工具参数深度对齐**: 修正了 `Grep` 和 `Glob` 工具的参数映射逻辑,将 `query` 准确映射为 `path` (Claude Code Schema),并支持默认注入执行路径 `.`。 - **工具名重映射策略优化**: 改进了重命名逻辑,仅针对 `search` 等模型幻觉进行修正,避免破坏原始工具调用签名。 - **签名缺失自动补完**: 针对 LS、Bash、TodoWrite 等工具调用缺失 `thought_signature` 的情况,自动注入通用校验占位符,确保协议链路畅通。 - **架构健壮性优化**: - 增强了全局递归清理函数 `clean_cache_control_from_messages`,确保 `cache_control` 不会干扰 Vertex AI/Anthropic 严格模式。 - 完善了错误日志系统,建立了详细的场景对照表并记录于 [docs/client_test_examples.md](docs/client_test_examples.md)。 * **v3.3.39 (2026-01-17)**: - **代理深度优化 (Gemini 稳定性增强)**: - **Schema 净化器升级**:支持 `allOf` 合并、智能联合类型选择、Nullable 自动过滤及空对象参数补全,解决复杂工具定义导致的 400 错误。 - **搜索工具自愈**:实现 `Search` 到 `grep` 的自动重映射,并引入 **Glob-to-Include 迁移**(自动将 `**/*.rs` 等 Glob 模式移至包含参数),解决 Claude Code `Error searching files` 报错。 - **参数别名补全**:统一 `search_code_definitions` 等相关工具的参数映射逻辑,并强制执行布尔值类型转换。 - **Shell 调用加固**:强制 `local_shell_call` 的 `command` 参数返回数组,增强与 Google API 的兼容性。 - **动态 Token 约束**:自动根据 `thinking_budget` 调整 `maxOutputTokens`,确保满足 API 强约束;精简停止序列 (Stop Sequences) 以提升流式输出质量。 - **Thinking 模式稳定性大幅提升**: - 引入跨模型家族签名校验,自动识别并降级不兼容的思维链签名,防止 400 Bad Request 错误。 - 增强“会话自愈 (Session Healing)”逻辑,支持自动补全被中断的工具循环,确保满足 Google/Vertex AI 的严苛结构要求。 - **高可用性增强**: - 优化自动端点降级 (Endpoint Fallback) 逻辑,在 429 或 5xx 错误时更平滑地切换至备用 API 端点。 - **修复 macOS "Too many open files" 错误 (Issue #784)**: - 引入全局共享 HTTP 客户端连接池,大幅减少 Socket 句柄占用。 - 针对 macOS 系统自动提升文件描述符限制 (RLIMIT_NOFILE) 至 4096,增强高并发稳定性。 * **v3.3.38 (2026-01-17)**: - **CLI 同步增强与探测修复 (Fix CLI-Sync Detection)**: - **探测路径扩展**: 优化了二进制检测逻辑。新增对 `~/.local/bin` (curl 安装常用路径)、`~/.npm-global/bin` 以及 `~/bin` 的扫描。 - **nvm 多版本支持**: 引入对 `nvm` 目录的深度扫描,支持自动识别不同 Node.js 版本下安装的 CLI 工具,解决 M1 芯片用户手动安装检测不到的问题。 - **原子化文件操作**: 采用临时文件写入 + 原子替换机制,确保同步过程中断不会损坏原始配置文件。 - **Thinking Signature 深度修复与会话自愈 (Fix Issue #752)**: - **鲁棒重试逻辑**: 修正了重试计次逻辑,确保单账号用户在遇到签名错误时也能触发内部重试,提高了自动修复的触发率。 - **主动签名剥离**: 引入 `is_retry`状态,在重试请求中强制剥离所有历史签名。配合严苛的模型家族校验(Gemini 1.5/2.0 不再混用签名),杜绝了无效签名导致的 400 错误。 - **会话自愈 (Session Healing)**: 针对剥离签名后可能出现的“裸工具结果”结构错误,实现了智能消息注入机制,通过合成上下文满足 Vertex AI 的结构校验限制。 - **配额关注列表 (Fix PR #783)**: - **自定义显示**: 在「设置 -> 账号」中新增模型配额关注列表,支持用户自定义主表格显示的特定模型配额,未选中模型仅在详情弹窗中展示。 - **布局优化**: 针对该板块实现了响应式 4 列网格布局,并在 UI 风格上与“额度保护”保持一致。 - **中转稳定性增强**: 增强了对 529 Overloaded 等上游过载错误的识别与退避重试,提升了极端负载下的任务成功率。 * **v3.3.37 (2026-01-17)**: - **后端兼容性修复 (Fix PR #772)**: - **向后兼容性增强**: 为 `StickySessionConfig` 添加了 `#[serde(default)]` 属性,确保旧版本的配置文件(缺少粘性会话字段)能够被正确加载,避免了反序列化错误。 - **用户体验优化 (Fix PR #772)**: - **配置加载体验升级**: 在 `ApiProxy.tsx` 中引入了独立的加载状态和错误处理机制。现在,在获取配置时用户会看到加载动画,如果加载失败,系统将展示明确的错误信息并提供重试按钮,取代了之前的空白或错误状态。 - **macOS Monterey 沙盒权限修复 (Fix Issue #468)**: - **问题根源**: 在 macOS Monterey (12.x) 等旧版本系统上,应用沙盒策略阻止了读取全局偏好设置 (`kCFPreferencesAnyApplication`),导致无法正确检测默认浏览器,进而拦截了 OAuth 跳转。 - **修复内容**: 在 `Entitlements.plist` 中添加了 `com.apple.security.temporary-exception.shared-preference.read-only` 权限例外,显式允许读取全局配置。 * **v3.3.36 (2026-01-17)**: - **Claude 协议核心稳定性修复**: - **修复 "回复 OK" 死循环 (History Poisoning Fix)**: - **问题根源**: 修复了 `is_warmup_request` 检测逻辑中的严重缺陷。旧逻辑会扫描最近 10 条历史消息,一旦历史记录中包含任何一条 "Warmup" 消息(无论是用户发送还是后台心跳残留),系统就会误判所有后续的用户输入(如 "continue")为 Warmup 请求并强制回复 "OK"。 - **修复内容**: 将检测范围限制为仅检查**最新**的一条消息。现在只有当前请求确实是 Warmup 心跳时才会被拦截,解决了用户在多轮对话中被 "OK" 卡死的问题。 - **影响范围**: 极大提升了 Claude Code CLI 及 Cherry Studio 等客户端在长时间会话下的可用性。 - **修复 Cache Control 注入 (Fix Issue #744)**: - **问题根源**: Claude 客户端在 Thinking 块中注入了非标准的 `cache_control: {"type": "ephemeral"}` 字段,导致 Google API 返回 `Extra inputs are not permitted` 400 错误。 - **修复内容**: 实现了全局递归清理函数 `clean_cache_control_from_messages`,并将其集成到 Anthropic (z.ai) 转发路径中,确保在发送给上游 API 前移除所有 `cache_control` 字段。 - **签名错误防御体系全面验证**: - **隐式修复 (Implicit Fixes)**: 经过深度代码审计,确认此前报告的一系列签名相关 Issue (#755, #654, #653, #639, #617) 已被 v3.3.35 的**严格签名验证**、**自动降级**及**Base64 智能解码**机制所覆盖和修复。现在的系统对缺失、损坏或编码错误的签名具有极高的容错性。 - **智能预热逻辑修复 (Fix Issue #760)**: - **问题根源**: 修复了自动预热调度器中的一段遗留代码,该代码错误地将 `gemini-2.5-flash` 的配额状态强制映射给 `gemini-3-flash`。 - **现象**: 这会导致当 `gemini-2.5-flash` 仍有额度(如 100%)但 `gemini-3-flash` 已耗尽(0%)时,系统误判 `gemini-3-flash` 也为满额并触发预热,造成“无额度却预热”的幽灵请求。 - **修复内容**: 移除了所有硬编码的 `2.5 -> 3` 映射逻辑。现在的预热调度器严格检查每个模型自身的配额百分比,只有当该模型实测为 100% 时才会触发预热。 - **移除 Gemini 2.5 Pro 模型 (Fix Issue #766)**: - **原因**: 鉴于 `gemini-2.5-pro` 模型的可靠性问题,已将其从支持列表中移除。 - **迁移**: 所有 `gpt-4` 系列别名(如 `gpt-4`, `gpt-4o`)已重新映射至 `gemini-2.5-flash`,确保服务连续性。 - **影响**: 之前通过别名使用 `gemini-2.5-pro` 的用户将自动路由至 `gemini-2.5-flash`。前端不再显示该模型。 - **CLI 同步安全与备份增强 (Fix Issue #756 & #765)**: - **智能备份与还原**: 引入了自动备份机制。在执行同步覆盖前,系统会自动将用户现有的配置文件备份为 `.antigravity.bak`。“恢复”功能现已升级,能智能检测备份文件,并优先提供“恢复原有配置”选项,而非单一的重置默认。 - **操作二次确认**: 为“立即同步配置”操作增加了二次确认弹窗,有效防止误触导致本地个性化配置(如登录态)丢失。 - **CLI 检测增强**: 优化了 macOS 平台下的 CLI(如 Claude Code)检测逻辑。即使二进制文件不在系统 `PATH` 中,只要存在于标准安装路径,也能被正确识别并调用。 - **Windows 控制台闪烁修复 (PR #769, 感谢 @i-smile)**: - **无窗口运行**: 修复了在 Windows 平台上执行 CLI 同步命令(如 `where` 检测)时会短暂弹出控制台窗口的问题。通过添加 `CREATE_NO_WINDOW` 标志,现在所有后台检测命令都将静默执行。 - **Auth UI 状态显示修复 (PR #769, 感谢 @i-smile)**: - **状态准确性**: 修正了 API 反代页面中认证状态的显示逻辑。现在当 `auth_mode` 为 `off` 时,UI 会正确显示“Disabled”状态,而不是一直显示“Enabled”。 * **v3.3.35 (2026-01-16)**: - **CLI 同步功能重大增强 (CLI Sync Enhancements)**: - **多配置文件支持**: 现已支持同步每个 CLI 的多个配置文件,确保环境配置更完整。涵盖 Claude Code (`settings.json`, `.claude.json`)、Codex (`auth.json`, `config.toml`) 及 Gemini CLI (`.env`, `settings.json`, `config.json`)。 - **Claude 免登录特权**: 同步时会自动在 `~/.claude.json` 中注入 `"hasCompletedOnboarding": true`,帮助新用户直接跳过 Claude CLI 的初始登录/引导步骤。 - **多文件查阅体验**: 配置查看详情页升级为“标签页”模式,支持在一个弹窗内顺畅切换并查看该 CLI 关联的所有本地配置文件。 - **UI/UX 深度细节优化**: - **弹窗体验统一**: 将“恢复默认配置”的确认框由原生浏览器弹窗替换为应用主题一致的 `ModalDialog`。 - **图表与显示优化**: 优化了恢复按钮图标 (RotateCcw);精简了状态标签文案并强制不换行,解决了高分屏或窄窗口下的布局错位问题。 - **版本号精简**: 改进了 CLI 版本号提取逻辑,界面仅保留纯数字版本(如 v0.86.0),视觉更加清爽。 - **Claude 思考签名持久化修复 (Fix Issue #752)**: - **问题根源**: - **响应收集侧**:v3.3.34 中流式响应收集器 (`collector.rs`) 在处理 `content_block_start` 事件时遗漏了 `thinking` 块的 `signature` 字段,导致签名丢失。 - **请求转换侧**:历史消息中的签名未经验证直接发送给 Gemini,导致跨模型切换或冷启动时出现 `Invalid signature in thinking block` 错误。 - **修复内容**: - **响应收集器**:在 `collector.rs` 中添加了 `signature` 字段的提取和持久化逻辑,并补充了单元测试 `test_collect_thinking_response_with_signature`。 - **请求转换器**:在 `request.rs` 中实施严格签名验证,只使用已缓存且兼容的签名。未知或不兼容的签名会导致 thinking 块自动降级为普通文本,避免发送无效签名。 - **回退机制**:实现智能回退重试逻辑。如果签名验证失效或上游 API 拒绝(400错误),系统会自动清除所有 thinking 块并强制重试,确保用户请求总是成功。 - **影响范围**: 解决了 `Invalid signature in thinking block` 错误,支持跨模型切换和冷启动场景,确保 Thinking 模型在所有模式下稳定工作。 - **API 监控数据实时同步修复 (Pull Request #747, Thanks to @xycxl)**: - **问题根源**: 修复了 API 监控页面因事件监听器重复注册和状态不同步导致的日志重复显示、计数器不准等问题。 - **修复内容**: - **数据去重**: 引入 `pendingLogsRef` 和 ID 排重机制,杜绝日志列表中出现重复条目。 - **精准计数**: 实现了前后端状态的严格同步,每次接收新日志都从后端获取权威的 `totalCount`,确保页码和总数准确无误。 - **防抖优化**: 优化了日志更新的防抖逻辑,减少 React 重渲染次数,提升页面流畅度。 - **功能重命名**: 将“调用记录”重命名为“流量日志”,并恢复路由为 `/monitor`,使功能定位更加直观。 * **v3.3.34 (2026-01-16)**: - **OpenAI Codex/Responses 协议修复 (Fix Issue #742)**: - **400 Invalid Argument 修复**: - **问题根源**: `/v1/responses` 等专有接口在请求体中仅包含 `instructions` 或 `input` 而缺失 `messages` 字段时,转换逻辑未覆盖全场景,导致 Gemini 接收到空 Body。 - **修复内容**: 在 `handle_completions` 中反向移植了聊天接口的“请求标准化”逻辑。现在系统会强制检测 Codex 特有字段(`instructions`/`input`),即使 `messages` 为空或缺失,也会自动将其转化为标准的 System/User 消息对,确保上游请求合法。 - **429/503 高级重试与账号轮换支持**: - **逻辑对齐**: 将 Claude 处理器中验证过的“智能指数退避”与“多维账号轮换”策略完整移植到了 OpenAI Completions 接口。 - **效果**: 现在 Codex 接口在遇到限流或服务器过载时,会自动执行毫秒级切换,不再直接抛出错误,极大提升了 VS Code 插件等工具的稳定性。 - **会话粘性 (Session Stickiness) 支持**: - **功能扩展**: 补全了 OpenAI 协议下的 `session_id` 提取与调度逻辑。现在无论是 Chat 还是 Codex 接口,只要是同一段对话,系统都会尽量将其调度到同一个 Google 账号上。 - **性能红利**: 这将显著提升 Google Prompt Caching 的命中率,从而大幅加快响应速度并节省计算资源。 - **Claude 思考签名编码修复 (Fix Issue #726)**: - **问题根源**: 修复了 v3.3.33 中引入的 Regression,该版本错误地对已经 Base64 编码的 `thoughtSignature` 进行了二次编码,导致 Google Vertex AI 无法正确校验签名而返回 `Invalid signature` 错误。 - **修复内容**: 移除了 `Thinking`、`ToolUse` 和 `ToolResult` 处理逻辑中多余的 Base64 编码步骤,确保签名以原始格式正确透传给上游。 - **影响范围**: 解决了使用 Thinking 模型(如 Claude 4.5 Opus / Sonnet)在多轮对话中触发的 400 签名错误,以及由此导致的 "Error searching files" 任务卡死问题 (Issue #737)。 - **API 监控看板刷新修复 (Fix Issue #735)**: - **问题根源**: 修复了 `ProxyMonitor` 组件中因 Closure 导致的事件监听失效问题,该问题导致新请求无法自动显示在列表中。 - **修复内容**: 引入 `useRef` 优化事件缓冲逻辑,并新增手动刷新按钮作为备份方案;同时在 Tauri 权限配置中显式允许了事件监听。 - **严格分组配额保护修复 (Strict Grouped Quota Protection Fix - Core Thanks to @Mag1cFall PR #746)**: - **问题根源**: 修复了在严格匹配模式下,配额保护逻辑因大小写敏感和前端 UI 键名映射缺失而失效的问题。之前版本中 `gemini-pro` 等 UI 简写键名无法匹配到后端定义的 `gemini-3-pro-high` 严格组。 - **修复内容**: - **即时大小写归一化**: 恢复了后端 `normalize_to_standard_id` 的大小写不敏感匹配,确保 `Gemini-3-Pro-High` 等变体能被正确识别。 - **UI 键名智能映射**: 在前端 `isModelProtected` 中增加了对 `gemini-pro/flash` 等 UI 列名的自动映射,确保 UI 上的锁图标能正确反映后端保护状态。 - **影响范围**: 解决了 Gemini 3 Pro/Flash 和 Claude 4.5 Sonnet 在严格分组模式下的锁图标显示问题,确保配额耗尽时能直观提示用户。 - **OpenAI 协议 Usage 统计修复 (Pull Request #749, Thanks to @stillyun)**: - **问题根源**: 在 OpenAI 协议转换过程中,未将 Gemini 返回的 `usageMetadata` 映射到 OpenAI 格式的 `usage` 字段,导致 Kilo 等客户端显示 Token 使用量为 0。 - **修复内容**: - **数据模型补全**: 为 `OpenAIResponse` 增加了标准的 `usage` 字段。 - **全链路映射**: 实现了从流式 (SSE) 和非流式响应中提取并映射 `prompt_tokens`、`completion_tokens` 及 `total_tokens` 的逻辑。 - **影响范围**: 解决了 Kilo Editor、Claude Code 等工具在使用 OpenAI 协议时无法统计 Token 用量的问题。 - **Linux 主题切换崩溃修复 (Pull Request #750, Thanks to @infinitete)**: - **修复内容**: - 在 Linux 平台禁用不兼容的 `setBackgroundColor` 调用。 - 针对 WebKitGTK 环境禁用 View Transition API 以防止透明窗口崩溃。 - 启动时自动调整 GTK 窗口 alpha 通道以增强稳定性。 - **影响范围**: 解决了 Linux 用户在切换深色/浅色模式时可能遇到的程序卡死或硬崩溃问题。 * **v3.3.33 (2026-01-15)**: - **Codex 兼容性与模型映射修复 (Fix Issue #697)**: - **Instructions 参数支持**: 修复了对 `instructions` 参数的处理逻辑,确保其作为系统指令(System Instructions)正确注入,提升与 Codex 等工具的兼容性。 - **自动 Responses 格式检测**: 在 OpenAI 处理器中新增智能检测逻辑,自动识别并转换 `instructions` 或 `input` 字段触发的 Responses 模式,无需客户端手动切换。 - **模型映射恢复与归一化**: 恢复了 `gemini-3-pro-low/high/pro` 统一归一化为内部别名 `gemini-3-pro-preview` 的逻辑,并确保在上游请求时正确还原为物理模型名 `high`。 - **Opus 映射增强**: 优化了系统默认映射,自动识别 `opus` 关键字模型并确保其默认路由至高性能 Pro 预览线路。 - **OpenAI 工具调用与思考内容修复 (Fix Issue #710)**: - **保留工具调用 ID**: 修复了 OpenAI 格式转换过程中丢失 `tool_use.id` 的问题,确保 `functionCall` 和 `functionResponse` 均保留原始 ID,解决了调用 Claude 模型时的 `Field required` 错误。 - **思考内容 (Reasoning) 原生支持**: 增加了对 OpenAI 消息中 `reasoning_content` 的支持,将其正确映射为内部 `thought` 部分并注入思维链签名,显著提升了“思考型”模型的视觉回显效果。 - **工具响应格式优化**: 修复了 `tool` 角色消息中可能产生的冗余 Part 冲突,确保请求报文严格符合上游校验规范。 - **外部提供商智能兜底修复 (Fix Issue #703)**: 修复了"仅兜底"模式在 Google 账号额度耗尽时无法自动切换到外部提供商的问题。 - **核心问题**: 原判断逻辑只检查 Google 账号数量是否为 0,而不检查账号的实际可用性(限流状态、配额保护状态),导致账号存在但不可用时直接返回 429 错误。 - **解决方案**: 实现智能账号可用性检查机制,在 `TokenManager` 中新增 `has_available_account()` 方法,综合判断账号的限流状态和配额保护状态。 - **修改文件**: - `token_manager.rs`: 新增 `has_available_account()` 方法,检查是否存在未被限流且未被配额保护的可用账号 - `handlers/claude.rs`: 优化 Fallback 模式判断逻辑,从简单的 `google_accounts == 0` 改为智能的可用性检查 - **行为改进**: 当所有 Google 账号因限流、配额保护或其他原因不可用时,系统会自动切换到外部提供商,实现真正的智能兜底。 - **影响范围**: 此修复确保了外部提供商(如智谱 API)的"仅兜底"模式能够正确工作,显著提升了多账号场景下的服务可用性。 - **配额保护模型名称归一化修复 (Fix Issue #685)**: 修复了配额保护功能因模型名称不匹配而失效的问题。 - **核心问题**: Quota API 返回的模型名称(如 `gemini-2.5-flash`)与用户在 UI 勾选的标准名称(如 `gemini-3-flash`)不一致,导致精确字符串匹配失败,保护机制无法触发。 - **解决方案**: 实现了统一的模型名称归一化引擎 `normalize_to_standard_id`,将所有物理模型名映射到 3 个标准保护 ID: - `gemini-3-flash`: 所有 Flash 变体 (1.5-flash, 2.5-flash, 3-flash 等) - `gemini-3-pro-high`: 所有 Pro 变体 (1.5-pro, 2.5-pro 等) - `claude-sonnet-4-5`: 所有 Claude Sonnet 变体 (3-5-sonnet, sonnet-4-5 等) - **修改文件**: - `model_mapping.rs`: 新增归一化函数 - `account.rs`: 配额更新时归一化模型名并存储标准 ID - `token_manager.rs`: 请求拦截时归一化 `target_model` 进行匹配 - **联网降级场景**: 即使请求因联网搜索被降级为 `gemini-2.5-flash`,依然能正确归一化为 `gemini-3-flash` 并触发保护。 - **影响范围**: 解决了配额保护失效问题,确保所有 3 个监控模型的保护功能正常工作。 - **新增账号导入功能 (#682)**: 支持通过导出的 JSON 文件批量导入已有的账号,完善了账号迁移闭环。 - **新增葡萄牙语与俄语支持 (#691, #713)**: 现已支持葡萄牙语(巴西)与俄语本地化。 - **代理监控增强 (#676)**: 在代理监控详情页中为请求和响应载荷新增了“复制”按钮,并支持自动 JSON 格式化。 - **i18n 修复与界面文案优化 (#671, #713)**: 修正了日语 (ja)、土耳其语 (tr) 和俄语 (ru) 中遗漏和错位的翻译文案。 - **全局 HTTP API (#696)**: 新增本地 HTTP 服务端口(默认 19527),支持外部工具(如 VS Code 插件)直接通过 API 进行账号切换、配额刷新和设备绑定。 - **代理监控升级 (#704)**: 全面重构监控面板,引入后端分页查询(支持搜索过滤),解决了大量日志导致的界面卡顿问题;开放 `GET /logs` 接口供外部调用。 - **预热策略优化 (#699)**: 预热请求新增唯一 `session_id`,并将 `max_tokens` 限制为 8,`temperature` 设置为 0,以降低资源消耗并避免 429 错误。 - **预热逻辑修复与优化**: 修复了手动触发预热未记录历史导致自动调度重复预热的问题;优化调度器自动跳过“反代禁用”状态的账号。 - **性能模式调度优化 (PR #706)**: 在“性能优先”调度模式下,现在会跳过默认的 60秒全局锁定机制,显著提升高并发场景下的账号轮转效率。 - **限流记录自动清理 (PR #701)**: 引入了每分钟执行的后台清理任务,自动移除超过 1 小时的过期失败记录,解决长期运行后因历史记录累积导致的“无可用账号”误报问题。 - **API Monitor 锁定修复 (Fix Issue #708)**: 启用 SQLite WAL 模式并优化连接配置,解决了高并发场景下因数据库锁定导致的监控数据滞后和代理服务 400/429 错误。 - **Claude 提示词过滤优化 (#712)**: 修复了在过滤 Claude Code 冗余默认提示词时,误删用户自定义指令 (Instructions from: ...) 的问题,确保个性化配置在长对话场景下仍能正确生效。 - **Claude 思维块排序策略优化 (Fix Issue #709)**: 解决了开启思维模式时由于块顺序错位(Text 出现在 Thinking 前)导致的 `INVALID_ARGUMENT` 报错。 - **三段式强制分区**: 实现 `[Thinking, Text, ToolUse]` 严格顺序校验。 - **自动降级网关**: 在单条消息内,一旦出现非思维内容,后续思维块自动降级为文本,确保协议合规。 - **合并后二次重排**: 在 Assistant 消息合并逻辑后增加强制重排序,堵死因消息拼接导致的排序漏洞。 * **v3.3.32 (2026-01-15)**: - **核心调度与稳定性优化 (Fix Issue #630, #631 - 核心致谢 @lbjlaq PR #640)**: - **配额漏洞与绕过修复**: 解决了在高并发或特定重试场景下,配额保护机制可能被绕过的潜在漏洞。 - **限流 Key 匹配优化**: 增强了 `TokenManager` 中限流记录的匹配精准度,解决了在多实例或复杂网络环境下可能出现的速率限制判定不一致问题。 - **账号禁用逻辑加固**: 修复了手动禁用账号在某些缓存生命周期内未立即从调度池中剥离的问题,确保“禁用即生效”。 - **账号状态重置机制**: 完善了账号失败计数器在成功请求后的重置策略,避免账号因历史波动被长期误锁定。 * **v3.3.31 (2026-01-14)**: - **配额保护失效修复 (Fix Issue #631)**: - **内存状态同步**: 修复了加载账号触发配额保护时,内存状态未立即同步的问题,确保保护机制即时生效。 - **全场景覆盖**: 在“粘性会话 (Sticky Session)”和“60秒锁定 (60s Window Lock)”逻辑中补充了配额保护检查,防止受限账号被错误复用。 - **代码优化**: 修复了 `token_manager.rs` 中的部分编译警告。 - **Claude 工具调用重复报错修复 (Fix Issue #632)**: - **弹性修复优化**: 改进了 `Elastic-Recovery` 逻辑,在注入占位结果前增加全量消息 ID 预扫描,避免了 `Found multiple tool_result blocks with id` 错误。 - **Anthropic 协议对齐**: 确保生成的请求包严格符合 Anthropic 对工具调用 ID 唯一性的要求。 * **v3.3.30 (2026-01-14)**: - **模型级配额保护 (Issue #621)**: - **隔离优化**: 解决了因单个模型配额耗尽而禁用整个账号的问题。现在配额保护仅针对受限的具体模型,账号仍可处理其他模型的请求。 - **自动迁移**: 新系统会自动将旧版因配额保护被全局禁用的账号恢复,并平滑转为模型级限制。 - **全协议支持项目**: 已同步更新 Claude, OpenAI (Chat/DALL-E), Gemini, Audio 处理器的路由逻辑。 - **Gemini 参数幻觉修复 (PR #622)**: - **参数纠错**: 修复了 Gemini 模型将 `pattern` 参数错误放置在 `description` 或 `query` 字段的问题,增加了自动重映射逻辑。 - **布尔值强制转换**: 增加了对 `yes`/`no`、`-n` 等非标准布尔值的自动转换支持,解决了 `lineNumbers` 等参数因类型错误导致的调用失败。 - **影响范围**: 显著提升了 Gemini 模型在 Claude Code CLI 及其他工具调用场景下的稳定性和兼容性。 - **代码清理与警告修复 (PR #628)**: - **消除编译器警告**: 修复了多个未使用的导入和变量警告,移除了冗余代码,保持代码库整洁。 - **跨平台兼容性**: 针对 Windows/macOS/Linux 不同平台的代码路径进行了宏标记优化。 - **API 密钥自定义编辑功能 (Issue #627)**: - **自定义密钥支持**: API 反代页面的"API 密钥"配置项现在支持直接编辑,用户可以输入自定义密钥,适合多实例部署场景。 - **保留自动生成**: 保留了原有的"重新生成"功能,用户可以选择自动生成或手动输入。 - **格式验证**: 添加了密钥格式验证(必须以 `sk-` 开头,长度至少 10 个字符),防止无效输入。 - **多语言支持**: 为所有 6 种支持的语言(简体中文、英文、繁体中文、日语、土耳其语、越南语)添加了完整的国际化翻译。 * **v3.3.29 (2026-01-14)**: - **OpenAI 流式响应 Function Call 支持修复 (Fix Issue #602, #614)**: - **问题背景**: OpenAI 接口的流式响应 (`stream: true`) 中缺少 Function Call 处理逻辑,导致客户端无法接收到工具调用信息。 - **根本原因**: `create_openai_sse_stream` 函数只处理了文本内容、思考内容和图片,完全缺少对 `functionCall` 的处理。 - **修复内容**: - 添加工具调用状态追踪变量 (`emitted_tool_calls`),防止重复发送 - 在 parts 循环中添加 `functionCall` 检测和转换逻辑 - 构建符合 OpenAI 规范的 `delta.tool_calls` 数组 - 使用哈希算法生成稳定的 `call_id` - 包含完整的工具调用信息 (`index`, `id`, `type`, `function.name`, `function.arguments`) - **影响范围**: 此修复确保了流式请求能够正确返回工具调用信息,与非流式响应和 Codex 流式响应的行为保持一致。所有使用 `stream: true` + `tools` 参数的客户端现在可以正常接收 Function Call 数据。 - **智能阈值回归 (Smart Threshold Recovery) - 解决 Issue #613**: - **核心逻辑**: 实现了一种感知上下文负载的动态 Token 报告机制。 - **修复内容**: - **三阶段缩放**: 在低负载(0-70%)保持高效压缩;在中负载(70-95%)平滑降低压缩率;在接近 100% 极限时真实上报(回归至 195k 左右)。 - **模型感应**: 处理器自动识别 1M (Flash) 和 2M (Pro) 的物理上下文界限。 - **400 错误拦截**: 即使触发物理溢出,代理层也会拦截 `Prompt is too long` 错误,并返回友好的中文/英文修复指引,引导用户执行 `/compact`。 - **影响范围**: 解决了 Claude Code 在长对话场景下因不知道真实 Token 用量而拒绝压缩,最终导致 Gemini 服务端报错的问题。 - **Playwright MCP 连通性与稳定性增强 (参考 [Antigravity2Api](https://github.com/znlsl/Antigravity2Api)) - 解决 Issue #616**: - **SSE 心跳保活**: 引入 15 秒定时心跳 (`: ping`),解决长耗时工具调用导致的连接超时断开问题。 - **MCP XML Bridge**: 实现双向协议转换逻辑(指令注入 + 标签拦截),显著提升 MCP 工具(如 Playwright)在不稳定链路下的连通性。 - **上下文激进瘦身**: - **指令过滤**: 自动识别并移除 Claude Code 注入的冗余系统说明(~1-2k tokens)。 - **任务去重**: 剔除 tool_result 后重复的任务回显文本,物理减少 Context 占用。 - **智能 HTML 清理与截断**: - **深度剥离**: 针对浏览器快照自动移除 `