# Antigravity-Manager
**Repository Path**: act6ps/Antigravity-Manager
## Basic Information
- **Project Name**: Antigravity-Manager
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-24
- **Last Updated**: 2026-01-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Antigravity Tools 🚀
> 专业的 AI 账号管理与协议反代系统 (v3.3.50)
---
**Antigravity Tools** 是一个专为开发者和 AI 爱好者设计的全功能桌面应用。它将多账号管理、协议转换和智能请求调度完美结合,为您提供一个稳定、极速且成本低廉的 **本地 AI 中转站**。
通过本应用,您可以将常见的 Web 端 Session (Google/Anthropic) 转化为标准化的 API 接口,消除不同厂商间的协议鸿沟。
## 💖 赞助商 (Sponsors)
|
| 感谢 **PackyCode** 对本项目的赞助!PackyCode 是一家可靠高效的 API 中转服务商,提供 Claude Code、Codex、Gemini 等多种服务的中转。PackyCode 为本项目的用户提供了特别优惠:使用[此链接](https://www.packyapi.com/register?aff=Ctrler)注册,并在充值时输入 **“Ctrler”** 优惠码即可享受 **九折优惠**。 |
| :--- | :--- |
### ☕ 支持项目 (Support)
如果您觉得本项目对您有所帮助,欢迎打赏作者!
| 支付宝 (Alipay) | 微信支付 (WeChat) | Buy Me a Coffee |
| :---: | :---: | :---: |
|  |  |  |
## 🌟 深度功能解析 (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)
```mermaid
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: 终端安装 (macOS & Linux 推荐)
如果您已安装 [Homebrew](https://brew.sh/),可以通过以下命令快速安装:
```bash
# 1. 订阅本仓库的 Tap
brew tap lbjlaq/antigravity-manager https://github.com/lbjlaq/Antigravity-Manager
# 2. 安装应用
brew install --cask antigravity-tools
```
> **提示**:
> - **macOS**: 如果遇到权限问题,建议添加 `--no-quarantine` 参数。
> - **Linux**: 安装后会自动将 AppImage 添加到二进制路径并配置可执行权限。
### 选项 B: 手动下载
前往 [GitHub Releases](https://github.com/lbjlaq/Antigravity-Manager/releases) 下载对应系统的包:
* **macOS**: `.dmg` (支持 Apple Silicon & Intel)
* **Windows**: `.msi` 或 便携版 `.zip`
* **Linux**: `.deb` 或 `AppImage`
### 选项 C: Arch Linux (官方脚本)
我们为 Arch Linux 用户提供了一个官方的一键安装脚本,它会自动从 GitHub 获取最新版本并完成安装:
```bash
curl -sSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/deploy/arch/install.sh | bash
```
> **提示**: 该脚本会自动下载最新的 `.deb` 资产并使用 `makepkg` 进行安装。
### 选项 C: 远程服务器部署 (Headless Linux)
如果您需要在无界面的远程 Linux 服务器(如 Ubuntu/Debian/CentOS)上运行,可以使用我们提供的 **Headless (Xvfb)** 一键部署方案:
```bash
curl -fsSL https://raw.githubusercontent.com/lbjlaq/Antigravity-Manager/main/deploy/headless-xvfb/install.sh | sudo bash
```
> **注意**: 该方案通过 Xvfb 模拟图形环境,资源占用(内存/CPU)会高于纯后端应用。
> **详情见**: [服务器部署指南 (deploy/headless-xvfb)](./deploy/headless-xvfb/README.md)
### 选项 D: Docker 部署 (推荐用于 NAS/服务器)
如果您希望在容器化环境中运行,我们提供了完整的 Docker 镜像和配置,内置 noVNC 支持,可通过浏览器直接访问图形界面。
```bash
# 1. 进入部署目录
cd deploy/docker
# 2. 启动服务
docker compose up -d
```
> **访问地址**: `http://localhost:6080/vnc_lite.html` (默认 VNC 密码: `password`)
> **系统要求**:
> - **内存**: 建议 **2GB** (最小 512MB)。
> - **共享内存**: 需设置 `shm_size: 2gb` (已在 compose 中配置),防止浏览器崩溃。
> - **架构**: 支持 x86_64 和 ARM64。
> **详情见**: [Docker 部署指南 (deploy/docker)](./deploy/docker/README.md)
---
Copyright © 2024-2026 [lbjlaq](https://github.com/lbjlaq)
### 🛠️ 常见问题排查 (Troubleshooting)
#### macOS 提示“应用已损坏,无法打开”?
由于 macOS 的安全机制,非 App Store 下载的应用可能会触发此提示。您可以按照以下步骤快速修复:
1. **命令行修复** (推荐):
打开终端,执行以下命令:
```bash
sudo xattr -rd com.apple.quarantine "/Applications/Antigravity Tools.app"
```
2. **Homebrew 安装技巧**:
如果您使用 brew 安装,可以添加 `--no-quarantine` 参数来规避此问题:
```bash
brew install --cask --no-quarantine antigravity-tools
```
## 🔌 快速接入示例
### 🔐 OAuth 授权流程(添加账号)
1. 打开“Accounts / 账号” → “添加账号” → “OAuth”。
2. 弹窗会在点击按钮前预生成授权链接;点击链接即可复制到系统剪贴板,然后用你希望的浏览器打开并完成授权。
3. 授权完成后浏览器会打开本地回调页并显示“✅ 授权成功!”。
4. 应用会自动继续完成授权并保存账号;如未自动完成,可点击“我已授权,继续”手动完成。
> 提示:授权链接包含一次性回调端口,请始终使用弹窗里生成的最新链接;如果授权时应用未运行或弹窗已关闭,浏览器可能会提示 `localhost refused connection`。
### 如何接入 Claude Code CLI?
1. 启动 Antigravity,并在“API 反代”页面开启服务。
2. 在终端执行:
```bash
export ANTHROPIC_API_KEY="sk-antigravity"
export ANTHROPIC_BASE_URL="http://127.0.0.1:8045"
claude
```
### 如何接入 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 中使用?
```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 (推荐)
```python
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` 参数:
```python
# 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": "一座未来主义风格的城市"}]
)
```
```bash
# 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": "一只可爱的猫咪"}]
}'
```
**参数优先级**: 请求体参数 > 模型后缀
#### 方式三:Chat 接口 + 模型后缀
```python
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)**:
* **v3.3.50 (2026-01-23)**:
- **[核心功能] 后台任务模型可配置 (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 3.7 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 清理与截断**:
- **深度剥离**: 针对浏览器快照自动移除 `