解锁 Codex VS Code 的 GPT-5.6 菜单:API-key / 自定义 Provider 用户的最小补丁
Codex 后端已经返回 GPT-5.6,VS Code 菜单却仍停在 GPT-5.5?本文解释 Statsig 白名单的根因,并给出适用于 API-key / 自定义 Provider 的最小补丁、验证与回滚方法。
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-sol、gpt-5.6-terra 和 gpt-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_models、use_hidden_models 和 default_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)
搜索 amazonBedrock、available_models 或 use_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
还要记住三个限制:
- 插件升级会覆盖本地补丁,新版本需要重新判断问题是否仍存在;
- 菜单可见不等于 Provider 一定把请求送到了同名物理模型,上游仍可能做别名或路由;
- GPT-5.6 系列可能依赖 Responses Lite、多代理等新协议能力,自定义 Provider 若适配不完整,仍可能在真正请求时失败。
真正值得记住的判断方法是:菜单只是展示层,模型访问权来自后端。 先确认模型在哪一层消失,再修那一层,远比反复重装插件、升级全局 CLI 或修改会话数据库更可靠。
评论区
0 条评论