📦 静态快照模式
返回 观点
💡 观点 2026-07-10 14:00

解锁 Codex VS Code 的 GPT-5.6 菜单:API-key / 自定义 Provider 用户的最小补丁

Codex 后端已经返回 GPT-5.6,VS Code 菜单却仍停在 GPT-5.5?本文解释 Statsig 白名单的根因,并给出适用于 API-key / 自定义 Provider 的最小补丁、验证与回滚方法。

#Codex #OpenAI #VSCode
BenszConan 的头像

BenszConan

管理员

最近你可能遇到过这样一个很别扭的场景:Codex VS Code 插件已经升级,config.toml 也指定了 gpt-5.6-sol,新会话甚至确实在消耗 token、正常完成任务,但模型菜单仍然只显示 GPT-5.5、GPT-5.4、GPT-5.4 Mini 和 GPT-5.2,右下角只写着“自定义 高”。

先说结论:在最近一次实际排查中,GPT-5.6 并没有消失。新版插件内置的 Codex 核心已经认识 gpt-5.6-solgpt-5.6-terragpt-5.6-luna,App Server 也把它们作为 hidden=false 的公开模型返回给了前端。真正挡住菜单项的,是 WebView 收到模型列表后又执行了一次 Statsig 动态白名单过滤。

因此,这篇教程做的不是“凭空创造模型权限”,而是让 API-key / 自定义 Provider 模式下的模型菜单忠实展示后端已经允许展示的模型。

先判断你是不是同一种问题

这套方法主要适用于下面的情况:

  • 你使用的是 API key 或自定义 Provider,而不是标准 ChatGPT 登录;
  • Provider 确实支持 GPT-5.6,并能把相应模型返回给 Codex;
  • 新版插件或插件内置 Codex 已包含 GPT-5.6 模型目录;
  • 手动指定 gpt-5.6-sol 后能够发起会话,但界面把它显示成“自定义”。

如果后端根本没有这个模型,或者 Provider 不支持 Codex 所需的新协议能力,修改菜单不会给你增加访问权。它只修展示层,不修上游能力。

为什么只升级全局 Codex CLI 没用

VS Code 插件默认使用自己的内置 Codex,而不是你通过 Homebrew、npm 或其他方式安装到系统里的 codex

本次排查中的新插件版本为 26.5707.31428,内置核心为 0.144.0-alpha.4;旧插件内置的 0.124.0-alpha.2 则没有 GPT-5.6。因此第一步不是盲目升级全局 CLI,而是确认 VS Code 真正启用的是哪个扩展版本。

在 macOS 上可以先看:

code --list-extensions --show-versions | rg '^openai\.chatgpt@'
ls -dt "$HOME"/.vscode/extensions/openai.chatgpt-* | head -n 3

如果机器里同时留着多个版本,要以 VS Code 当前注册、运行的版本为准。不同操作系统和 VS Code 分支的扩展目录会不同,不要照抄别人的绝对路径。

根因:模型在 WebView 层被二次过滤

可以把整条链路理解成四层:

插件安装版本
→ 插件内置 Codex 模型目录
→ App Server 返回的 model/list
→ WebView 最终展示的模型菜单

本次问题发生在最后一层。WebView 会读取 Statsig 动态配置,其中包括 available_modelsuse_hidden_modelsdefault_model。当相应开关启用时,菜单不再单纯依据 App Server 的 hidden 字段,而是只显示 Statsig 白名单中的模型。

原始逻辑可以简化为:

if (useHiddenModels && authMethod !== "amazonBedrock") {
// 只显示 Statsig available_models 白名单
} else {
// 显示后端返回的 hidden=false 模型
}

如果白名单还停在 GPT-5.5,就会出现“后端已经返回 GPT-5.6、菜单却没有”的错位。

最小补丁应该怎么改

正确的补丁边界不是关闭全部 Statsig,也不是强制展示所有内部模型,而是只让 apikey 路径绕过这层展示白名单,继续尊重后端的 hidden 标记。

在本次插件构建中,过滤逻辑位于:

webview/assets/model-list-filter-*.js

压缩后的原始条件是:

u = s && t !== `amazonBedrock`

修改为:

u = s && t !== `amazonBedrock` && t !== `apikey`

它表达的意思非常克制:

  • ChatGPT 登录继续服从 OpenAI 的 Statsig 白名单;
  • Amazon Bedrock 和其他认证路径保持原行为;
  • 只有 API-key / 自定义 Provider 按 App Server 返回的 hidden=false 模型展示;
  • 后端真正标为隐藏的内部模型仍然不会出现。

构建产物的文件名、变量名和压缩结构会随插件升级变化,所以不要把上面的字符串当成永久通用的一键替换脚本。应先定位当前启用版本中的真实过滤文件,确认上下文,再做单点修改。

最省心的做法:让 Codex 自己完成定位、测试和补丁

可以把下面这段提示词交给本机 Codex:

请修复本机 Codex VS Code 插件不显示后端已返回的新模型。定位启用版本的 WebView 模型过滤文件,先备份并运行失败测试;若 API-key/自定义 provider 被 Statsig 白名单过滤,仅让 apikey 路径按后端 hidden 字段展示模型,保持其他认证逻辑不变。完成语法与回归测试,重载窗口并处理缓存;不得修改凭据或会话数据库,最后给出验证结果和回滚路径。

这段提示词里最重要的不是“替换一段代码”,而是四个约束:定位正在启用的版本、修改前备份、只改 apikey 分支、先测试再重载。它能避免误改旧扩展目录、全局关闭功能或碰触凭据数据库。

手工操作时至少做到这几步

先完全退出 VS Code,然后在当前启用扩展的 webview/assets/ 中找到 model-list-filter-*.js。修改前做带时间戳的备份:

cp model-list-filter-XXXXXXXX.js \
model-list-filter-XXXXXXXX.js.bensz-backup-$(date +%Y%m%d%H%M%S)

搜索 amazonBedrockavailable_modelsuse_hidden_models,结合上下文确认它确实是模型列表过滤逻辑。完成最小条件修改后,至少做一次 JavaScript 语法检查:

node --check model-list-filter-XXXXXXXX.js

更可靠的回归预期应该是:

apikey → GPT-5.5 + 后端公开的 GPT-5.6
chatgpt → 仍只显示 Statsig 白名单模型
hidden=true 的内部模型 → 两边都不应被意外公开

也就是说,验证标准不是“菜单越多越好”,而是“API-key 路径不再误伤公开模型,同时其他边界不变”。

让补丁生效并选择 GPT-5.6

修改文件后,在 VS Code 中执行:

Cmd+Shift+P
Developer: Reload Window

如果菜单仍是旧的,完全退出 VS Code 再重新打开。WebView 可能还持有旧的 CacheStorage 副本;必要时只清理属于 Codex WebView 的缓存,不要删除整个 VS Code 用户数据目录。

重载成功后,API-key / 自定义 Provider 用户应能在菜单中看到后端公开的 GPT-5.6 系列,例如:

gpt-5.6-sol
gpt-5.6-terra
gpt-5.6-luna

也可以继续在 Codex 配置中显式指定:

model = "gpt-5.6-sol"
model_reasoning_effort = "high"

如果原先“自定义 高”的会话本来就能正常运行,菜单补丁生效后只是把它恢复成一个可识别、可切换的正式模型项。

回滚与长期维护

如果出现异常,完全退出 VS Code,把备份文件复制回原文件名,再重新启动即可:

cp model-list-filter-XXXXXXXX.js.bensz-backup-时间戳 \
model-list-filter-XXXXXXXX.js

还要记住三个限制:

  1. 插件升级会覆盖本地补丁,新版本需要重新判断问题是否仍存在;
  2. 菜单可见不等于 Provider 一定把请求送到了同名物理模型,上游仍可能做别名或路由;
  3. GPT-5.6 系列可能依赖 Responses Lite、多代理等新协议能力,自定义 Provider 若适配不完整,仍可能在真正请求时失败。

真正值得记住的判断方法是:菜单只是展示层,模型访问权来自后端。 先确认模型在哪一层消失,再修那一层,远比反复重装插件、升级全局 CLI 或修改会话数据库更可靠。

同频道推荐

查看全部 →

评论区

0 条评论
游客只能浏览内容;登录后即可参与评论。
还没有评论,欢迎发表第一条看法。