【免费下载链接】opencodex
Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code
导读
本文完整拆解 OpenCodex(通用 LLM Provider 代理层,同时服务 OpenAI Codex CLI/App/SDK 与 Claude Code)在 2026-07-22 前后将 Google 新发布的 Gemini 3.6 Flash 接入全链路的工程方案:从 Google 官方 GA 公告与认证态 Antigravity 模型发现两条证据线出发,落地「Antigravity 可见行替换 + 隐藏兼容别名」「直连 Google 模型种子与推理档位(thinkingLevel)打通」「OAuth 持久化预设自愈迁移」「价格 overlay 与精确键计费」四个实现切片。读完本文,你将掌握:如何在不破坏既有 3.5 用户选择的前提下平滑升级 Provider 线模型;OAuth 预设为何能在启动时无感迁移默认模型;以及 Codex 的 reasoning 阶梯如何被映射为 Gemini 的generationConfig.thinkingConfig.thinkingLevel。
触发背景:GA 发布与认证态发现的双重信号
整个 rollout 的触发条件在 000_plan.md 中被定义为「satisfy-spec 集成」类型,由两个时间点几乎重合的事件驱动:
- Google 官方 GA:Google Gemini API 于 2026-07-21 发布公告,
gemini-3.6-flash正式 GA,公开模型 ID 为gemini-3.6-flash。 - Antigravity 认证态发现返回新线级 ID:代理层依赖的
:fetchAvailableModels后端(即agyCLI 解析 label 所依赖的同一来源)在同一天开始返回 3.6 专属的线级(wire-tier)ID。
因此本次目标被锁定为:让 Gemini 3.6 可选择、可正确路由,同时不抹掉 Antigravity 之外仍然受支持的 Gemini 3.5。这一目标的约束力很强——它不是「新增一个模型」那么简单,而是「在动态发现源已经变化、静态配置尚未同步的窗口期,保持既有用户配置的连续性」。
范围界定:IN / OUT 一清二楚
计划文档用一张表把改动边界钉死,避免在集成过程中无限蔓延:
| 方向 | 内容 |
|---|---|
| IN | Antigravity 可见模型替换 + 隐藏兼容别名;直连 Google 3.6 的静态模型/上下文/图像输入/推理元数据;直连 Google 3.5/3.6 的 thinking-level 请求接线;Gemini 3.6 公开价与 Antigravity 派生价 overlay;既有配置 reconcile 与回归测试;实现后的 CLI 与直连 Antigravity 实况证明 |
| OUT | Vertex AI(Gemini Developer API 证据不能证明 Vertex 发布商可用性);Cursor(认证态当前列表无 3.6 行);OrcaRouter(精确 3.6 模型页 404);OpenRouter(动态目录自持曝光);src/generated/jawcode-model-metadata.ts(生成文件且其源无 3.6 行);基准 fixtures 与 docs-site 基准数据(历史测量不是模型可用性声明) |
尤其值得注意「jawcode 元数据」这一项:OpenCodex 的模型元数据快照是生成产物(scripts/generate-jawcode-metadata.ts、src/generated/jawcode-model-metadata.ts 均标注了不得手改),而 jawcode 上游源数据当时尚无 3.6 行,因此本次方案采用registry hints + 本地已验证价格 overlay而非手改生成文件,待 jawcode 补齐官方行后再机械刷新——这一「生成文件只做机械同步」的纪律至今沿用。
表面规则:每个 Provider 的 3.6 决策
000_plan.md 以一张「Surface × 当前 3.5 状态 × 3.6 决策」矩阵统辖全部落地行为:
| 表面 | 当前 3.5 状态 | Gemini 3.6 决策 |
|---|---|---|
google-antigravityOAuth | 3.5 Low/Medium/High 通过混合线 ID 与别名暴露 | 用显式 3.6 Low/Medium/High 线 ID 替换可见 3.5 行;旧 3.5 ID 仅保留为隐藏入站兼容别名 |
googleAPI Key | gemini-3.5-flash为默认,另种子了gemini-3.1-pro-preview | 新增gemini-3.6-flash;保留 3.5 且 3.5 仍为默认 |
| Cursor | 认证目录含 3.5 不含 3.6 | Cursor 官方曝光前不做静态新增 |
| OrcaRouter | 静态种子含google/gemini-3.5-flash;3.6 模型页返回 404 | OrcaRouter 曝光精确 ID 前不新增 |
| 生成 jawcode 快照 | 源与生成文件含 3.5 不含 3.6 | 不手改生成输出;用 registry hints + 本地价格 overlay 过渡 |
这条矩阵是全文最重要的「不越权」规则:任何上游没有确认曝光的渠道都不做投机性种子(speculative seeding),这保证了代理层永远只转发上游已认证的模型,而不是替上游做产品决策。
六条固定决策:默认档位、隐藏映射与直连阶梯
计划文档固化了 6 条决策,它们直接决定了代码改动形状:
Antigravity 暴露三个显式线 ID:
gemini-3.6-flash-low、gemini-3.6-flash-medium、gemini-3.6-flash-high。gemini-3.6-flash-tiered保持隐藏:认证发现返回该 ID 但没有显示名,且可见选择已有显式档位 ID,因此只作为证据记录、不作为 picker 行。Antigravity 默认变为
gemini-3.6-flash-medium:这是为了保持有效默认不变——旧的gemini-3.5-flash-low线行在上游显示为「Gemini 3.5 Flash (Medium)」,语义上本来就对应 medium 档。隐藏兼容映射保留旧选择(这是老用户不被「震出」的关键):
旧 ID 迁移目标 gemini-3.5-flash-extra-lowgemini-3.6-flash-lowgemini-3.5-flash-low、gemini-3.5-flash-midgemini-3.6-flash-mediumgemini-3.5-flash-high、gemini-3-flash-agentgemini-3.6-flash-high直连 Google 保留
gemini-3.5-flash为默认:「Add elsewhere」不允许静默改变既有 API-Key 用户的默认。直连 Google 3.6 宣传仓库的 Codex 面
low/medium/high阶梯,并把所选档位作为 GeminigenerationConfig.thinkingConfig.thinkingLevel下发;3.5 路径获得同样的缺线修复,避免新模型复制「仅目录层生效的档位控制」缺陷。
另外第 7 条补充:本切片不删除被 Google 标记 deprecated 的temperature、top_p、top_k——Google 标记的是 deprecated 而非 rejected,改变全局请求塑形需要独立的兼容性证据。
源码落地一:Antigravity 模型 Owner 的「可见/隐藏」分层
计划要求在 src/providers/antigravity-models.ts 中把「可见 Flash 线行」与「隐藏兼容别名」按职责拆开:
- 可见别名只保留仍然有意的用户面名称(当时为
gemini-3.1-pro-high、gemini-3.1-pro-preview→gemini-pro-agent); - 隐藏兼容别名映射五个退役 3.5/legacy ID 到显式 3.6 档位;
ANTIGRAVITY_MODEL_ALIASES合并两类别名用于请求解析;ANTIGRAVITY_MODELS只合并线模型与可见别名键——兼容键绝不能重新进入 picker;- 三个 Flash 上下文窗口 owner 换成显式 3.6 ID,均为 1,048,576;别名上下文窗口继续从合并别名映射推导,让旧保存 ID 对路由仍然可知但不可见。
从当前仓库源码(已演进到 3.8/3.7 时代)可以印证这套分层模式的生命力:今天的 antigravity-models.ts 中RETIRED_FLASH_TIERS把 3.6 及 3.5 的线 ID 逐一映射到推理档位(gemini-3.6-flash-low→low、gemini-3.5-flash-low→medium等),并注释说明「Google 几乎在新一代上线瞬间就下线上一代 Flash,保存的选择不能继续指向旧 ID」——这正是 3.6 上线时确立、随后被 3.7/3.8 反复复用的「退役档位迁移」模式。注意当前源码中ANTIGRAVITY_MODEL_ALIASES还把全部退役 ID 路由到GEMINI_RETIRED_FLASH_TARGET_WIRE_ID(3.7),并用它们防止陈旧 discovery 载荷把死 ID 重新发布为 picker 行,说明该分层机制仍在持续承担兼容职责。
源码落地二:Registry 契约与直连模型种子
直连googleProvider 的注册表种子(当前位于 src/providers/registry/entries-core.ts,3.6 时期位于文档所述的src/providers/registry.ts)保持defaultModel: "gemini-3.5-flash"不动,仅把静态顺序变为 3.6 在前,并补充:
- 上下文窗口:
"gemini-3.6-flash": 1_048_576、"gemini-3.5-flash": 1_000_000; - 输入模态:
"gemini-3.6-flash": ["text", "image"]; - 推理档位:
"gemini-3.6-flash"与"gemini-3.5-flash"均为["minimal", "low", "medium", "high"],"gemini-3.1-pro-preview"为["low", "medium", "high"]。
仓库的 Codex 目录清洗器只向 Codex 面暴露low/medium/high;minimal与既有 3.5 契约保持一致,仅供非 Codex CLI/API 消费者使用。当前源码中 3.6 行依然存在(且已并入gemini-3.8-flash、gemini-3.7-flash之后的排序),3.7/3.8 因 Google 文档将其minimal标为校验错误而剔除该档位,3.5/3.6 仍保留——正是「没有证据就不改变」原则的延续。
Antigravity 侧仅改一处:默认模型从gemini-3.5-flash-low改为gemini-3.6-flash-medium,模型与上下文数组继续由 Antigravity owner 提供。
源码落地三:直连 Google 的 thinkingLevel 接线
计划要求 src/adapters/google.ts 引入mapReasoningEffort(来自 src/reasoning-effort.ts,该函数负责把 Codex 的 reasoning 标签翻译成 Provider 真实线值),在既有 generation-config 字段组装完毕后,仅对直连 AI Studio 的 Gemini 3.5/3.6 请求映射parsed.options.reasoning并产出:
generationConfig.thinkingConfig = { thinkingLevel };边界规则(这也是本切片的防回归核心):
- 仅当
provider.googleMode既不是vertex也不是cloud-code-assist,且模型 ID 为gemini-3.5-flash或gemini-3.6-flash时应用; - 未选择档位时省略
thinkingConfig(不发送空对象); - 不向 Antigravity 发送额外 thinking level——它的 Low/Medium/High 线 ID 本身已编码档位,双发会造成矛盾请求(当前源码 google.ts 的
thinkingEligible判断仍保留这一硬编码切片:googleMode !== "cloud-code-assist"且模型为 3.5/3.6 时走mapReasoningEffort,并把 Vertex 排除在外,图像模型也因responseModalities回退被排除)。
文档明确要求激活证明是强制的:聚焦适配器测试必须检查「选择high时构建出的 JSON body 含thinkingConfig.thinkingLevel = "high"」「未设置时thinkingConfig缺席」。
源码落地四:价格 overlay 与精确键兼容计费
src/usage/expected-prices.ts 中新增:
const GEMINI_36_FLASH: Cost4 = { input: 1.5, // $/M tokens output: 7.5, // $/M tokens,含 thinking cacheRead: 0.15, // $/M tokens cacheWrite: 0, // 存储按小时计费,不按 token };随后新增一条verified行google/gemini-3.6-flash、三条verified-derived行对应 Antigravity low/medium/high;五条 3.5/legacy Antigravity 行保留为隐藏兼容价格别名,但把旧 3.5/3.0 价格常量与证据替换为所映射 3.6 档位的价格 + 显式兼容来源字符串。原因在源码注释与文档中讲得很透:resolveMatchedPrice不咨询 Antigravity 线解析器,按请求携带的 ID 精确匹配,所以旧保存请求必须继续拥有精确键价格行;这些行不影响 picker 可见性。
当前仓库 expected-prices.ts 仍保留 3.6 时期的完整证据链:google/gemini-3.6-flash的 verified 行、三条 verified-derived Antigravity 档位行、五条 compat 别名行(source 均为compat alias -> gemini-3.6-flash-*),并且在 3.6 退役后仍保留gemini-3.6-flash的 collapsed base 价格行——因为历史usage.jsonl行仍携带这些 ID,计费必须能回溯。这正是「退役改变的是我们调用什么,而不是我们记录什么」的体现。
OAuth 预设自愈:启动时无感迁移旧默认
计划的亮点之一是tests/oauth-provider-reconcile.test.ts(新增测试,当前位于 tests/oauth/oauth-provider-reconcile.test.ts):用隔离配置路径 + 合成 OAuth Provider 对象(含旧 3.5 列表/默认、哨兵 OAuth key/project、无关用户字段)调用reconcileOAuthProviders,断言:
models恰好等于 registry 管理的新 Antigravity 列表;- 旧默认自愈为
gemini-3.6-flash-medium; - 上下文元数据刷新;
- 凭证/project 与无关字段保持不变;
- 二次调用幂等且报告无变更。
底层实现位于 src/oauth/index.ts 的reconcileOAuthProviders:它把models、modelContextWindows、modelReasoningEfforts等字段作为「OAuth 预设可刷新字段」,仅当 Provider 仍为 registry 管理且authMode: "oauth"时刷新,遇到持久化不可用则降级为内存内应用并告警。对用户而言效果是:老 3.5 默认配置在下次ocx start时自动对齐到 3.6 列表与默认档位,凭证原封不动——这就是「代理层升级不打扰用户」的落点。
测试矩阵与验证序列
改动清单共 10 个文件(8 个 MODIFY + 1 个 NEW,另src/generated/jawcode-model-metadata.ts、Cursor 文件/测试、OrcaRouter 种子行、基准 fixtures、Vertex 配置显式不改),验证序列从仓库根目录执行:
bun test --isolate \ tests/google-antigravity-wire.test.ts \ tests/google-hardening.test.ts \ tests/google-models-listing.test.ts \ tests/provider-registry-parity.test.ts \ tests/provider-quota.test.ts \ tests/usage-cost.test.ts \ tests/codex-catalog.test.ts \ tests/oauth-provider-reconcile.test.ts bun run typecheck随后验证运行面(构建/运行时表面):
bun src/cli/index.ts models --provider google-antigravity --json ocx restart ocx provider show google-antigravity --json ocx models --provider google-antigravity --json预期目录状态:默认 3.6 Medium;可见 Flash 行恰为 Low/Medium/High;无 3.5 Flash 或gemini-3-flash-agent行。最后对三个路由各发一条最小提示(google-antigravity/gemini-3.6-flash-low/medium/high),只记录模型、HTTP/流完成状态与脱敏输出尾部,绝不持久化 OAuth token、project ID 或原始fetchAvailableModels载荷。
tests/codex-catalog.test.ts有一个值得展开的断言:从规范直连 Google registry 配置构建路由目录,断言google/gemini-3.6-flash暴露仓库标准 Codex 阶梯low/medium/high/max/ultra。这关闭了一个审计疑虑——registry 里的minimal可能经由不同目录构造路径传播:minimal被规范化为 Codexlow,公共目录层追加 mock 的max/ultra档,适配器的配置档位钳制再把它映射回真实线最大值high。
安全边界与实况验证纪律
实况验证的信任边界被刻意收窄:资产仅为本地 Antigravity OAuth access/refresh token 与发现的 project ID;入口是本地读取 OAuth store 后对 Provider registry 已拥有的固定 base URLdaily-cloudcode-pa.googleapis.com发起 HTTPS 请求;仓库/模型文本不受信任,但不能在固定探针中选择目标 URL、请求头或凭证字段。控制手段包括:绝不打印/持久化凭证与 project 标识;复用现有 adapter 的脱敏错误格式化器与重试路径;只记录模型 ID、HTTP 状态与短模型输出;对产生的 diff 跑 secret scan。
预构建基线实况证明(2026-07-22 认证态直连调用):
| 线模型 | HTTP | 输出标记 |
|---|---|---|
gemini-3.6-flash-low | 200 | OK--LOW |
gemini-3.6-flash-medium | 200 | OK-DIUM |
gemini-3.6-flash-high | 200 | OK-HIGH |
实现后的实况 QA 复测:三个档位各返回 HTTP 200(POST-LOW/POST-MEDIUM/POST-HIGH),且旧gemini-3.5-flash-low请求解析到线 IDgemini-3.6-flash-medium并返回 200(COMPAT-MEDIUM)——兼容别名路由得到线级实证。C 门禁自动证据为聚焦套件175 pass, 0 fail、972 断言,bun run typecheck退出码 0,bun run privacy:scan通过;gitleaks git . --log-opts='a257458e^..a257458e'范围扫描无泄漏(实现提交为a257458e feat(google): add Gemini 3.6 Flash tiers)。CLI QA 则验证:隔离规范 Antigravity 配置默认值为gemini-3.6-flash-medium、仅 3.6 三档可见、无隐藏 3.5/legacy 行、重复输出一致、缺失 Provider 与未知 flag 均退出 1。
集成、风险与回滚
集成遵循明确的 git 纪律:git merge --no-ff gemini-3.6并入本地dev,合并前后对无关脏文件(devlog/_plan/260722_issue_bug_sweep/000_plan.md)做内容哈希比对(1bcab82f...前后一致,未被本 rollout 暂存或修改);合并后重跑聚焦套件(175 pass、0 fail)与 typecheck;全部通过后从主仓库执行git worktree remove清理链接 worktree,保留合并后的分支 ref,不 push、不重启 daemon(用户在 C 阶段明确移除了 daemon 重启要求)。
回滚面同样被控制住:恢复旧 Antigravity 可见列表/默认、移除直连 3.6 种子与 overlay、回退聚焦测试即可,不引入任何持久数据迁移。主要风险被逐条登记:上游 Antigravity ID 可能无公告变更(以认证态fetchAvailableModels列表为准,缺失 ID 直接阻塞实况完成而非猜测别名);隐藏旧 ID 若无兼容别名会破坏保存的 combos(因此别名与 picker 曝光分离);实况请求消耗配额(每档仅一条最小提示)。
结语:一次可复制的「线级模型换代」工程样板
260722_gemini_36_rollout单元(000_plan.md、001_research_contract.md、010_model_catalog_and_wire_plan.md)的价值不在于「加了三个模型 ID」,而在于确立了一套可复用的模型换代流程:双证据线锁定契约(官方公告 + 认证态发现)→ 表面矩阵划定每渠道边界 → 固定决策固化默认与映射 → 可见/隐藏双层模型 Owner → 目录与价格 overlay 同步 → 预设自愈迁移 → 聚焦测试 + 实况最小探针闭环。当前仓库中 3.7/3.8 时代的RETIRED_FLASH_TIERS、compat 价格别名、reconcile 测试全部沿用同一模式,说明这套流程在真实演进中经受住了至少两次复用的检验。
【免费下载链接】opencodex
Universal provider proxy for OpenAI Codex & Claude Code — use any LLM (Claude, Gemini, Grok, DeepSeek, Ollama…) with Codex CLI, App, SDK, and Claude Code
相关推荐
opencodex Gemini 3.6 Flash 上线实战:目录替换、隐藏兼容别名与 thinkingLevel 线路接入
opencodex Gemini 3.6 Flash 上线实战:目录替换、隐藏兼容别名与 thinkingLevel 线路接入 本篇文章以 opencodex
opencodex Antigravity(Cloud Code Assist)推理档位路由全解:模型 ID 编码、thinkingConfig 双通道与 effort 解析实现剖析
opencodex Antigravity(Cloud Code Assist)推理档位路由全解:模型 ID 编码、thinkingConfig 双通道与 ef
opencodex 中 Google Antigravity(CCA)推理强度到线模型 ID 的路由解析实现指南
opencodex 中 Google Antigravity(CCA)推理强度到线模型 ID 的路由解析实现指南 导读 本文讲解 opencodex 项目中 G
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考