github lbjlaq/Antigravity-Manager v4.1.23
Antigravity Tools v4.1.23

5 hours ago
  • [安全增强] 优化与原生对齐应用层与底层特征指纹,提升请求稳定性与防拦截能力。
  • [核心修复] 将 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 字符串,将其映射为对应的数字 thinkingBudgetNONE→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_intervalsync_interval 两个定时器的延迟参数加上 Math.min(..., 2147483647) 上界限制,防止超过 INT32_MAX 后被浏览器截断为 1ms 无限循环。
    • 输入验证 (Settings.tsx): 将 refresh_intervalsync_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.23)),以匹配纯净 TLS 链路。
  • [功能增强] API 反代页面与设置页模型列表全面接入动态模型数据:
    • 问题根源: "API 反代 → 支持模型与集成"列表与"模型路由中心"的目标模型选择下拉框,以及"设置 → 固定配额模型"列表,此前均仅从静态 MODEL_CONFIG 读取硬编码模型信息,导致账号实际下发的动态新模型(如 GPT-OSS 120BGemini 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 标记覆盖)。

Don't miss a new Antigravity-Manager release

NewReleases is sending notifications on new releases.