lbjlaq/Antigravity-Manager
GitHub: lbjlaq/Antigravity-Manager
一款基于 Tauri + Rust 的本地 AI 网关工具,实现多账号统一管理、跨协议转换和智能请求调度。
Stars: 24941 | Forks: 2773
# Antigravity Tools 🚀
**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)
| | |
| :---: | :---: |
| 
仪表盘 | 
账号列表 | | 
关于页面 | 
API 反代 | | 
系统设置 | | ### 💡 使用案例 (Usage Examples) | | | | :---: | :---: | | 
Claude Code 联网搜索 | 
Cherry Studio 深度集成 | | 
Imagen 3 高级绘图 | 
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 格式(``)以 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`)** 协议代理支持仍在积极测试中,如果您有相关的测试经验或想法,非常欢迎联系讨论,也欢迎您建立新分支一起探索! -
- **[核心优化] 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 模式下的账户管理闭环。
仪表盘 | 
账号列表 | | 
关于页面 | 
API 反代 | | 
系统设置 | | ### 💡 使用案例 (Usage Examples) | | | | :---: | :---: | | 
Claude Code 联网搜索 | 
Cherry Studio 深度集成 | | 
Imagen 3 高级绘图 | 
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 格式(``)以 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 规范测试演示
