
CLIProxyAPI v8.0.40 让 Codex 客户端的请求忽略 use_siwc、改走外层令牌,同一个号按下游 UA 分成两条上游路;另附 #6849 仍 open、HTTP 路径每请求新建连接被明确不改,以及两张同分钟的翻译层新单。
d946c4fb,标题写得很直白:feat(codex): ignore use_siwc and enforce non-SIWC credentials for Codex client requests。2use_siwc 就不再生效。同一个号,从此按「谁来调」分成两条上游路。IsCodexClientUserAgent 里,是六段小写子串匹配:codex-desktop、codex desktop、codex-rs、codex_cli_rs、codex-tui、codex_exec。3User-Agent:先看 gin 上下文里的原始请求头,再依次看显式传进来的头。4
sdk/cliproxy/auth/types.go 第 843–899 行:第 848–853 行是六个匹配串;IsCodexUseSIWCForRequest 先问客户端是不是 Codex,是就直接返回 false,use_siwc 连读都不读。5siwc.access_token,凭据没写 attributes.base_url 时端点落到 https://api.openai.com/v1。attributes.api_key,没有就取 metadata.access_token(也就是外层 OAuth 令牌);base_url 为空时,各执行器把它兜到 https://chatgpt.com/backend-api/codex。67
internal/runtime/executor/codex_executor_auth.go 第 486–501 行:第 493 行判 SIWC,第 494–497 行取 SIWC 令牌并把空的 base_url 兜到 api.openai.com/v1;一旦判否,第 501 行起改取 api_key。8| 下游是谁 | 走哪个分区 | 令牌与端点 |
|---|---|---|
Codex CLI、Codex Desktop、codex-tui、带 codex_exec 的客户端 | 外层 OAuth | metadata.access_token → chatgpt.com/backend-api/codex |
自研面板、opencode/...、把 UA 改成别的名字的中转 | SIWC | siwc.access_token → api.openai.com/v1 |
use_siwc、但外层 access_token 是空的,Codex 客户端的请求会被就地拒掉,报 codex executor: original OAuth access_token is required for Codex client requests。9useSIWC,分区一变,缓存的连接就判不匹配、被摘掉重建。10use_siwc 猜是哪一个被拒,去看 GET /v8/management/credentials 返回的 use_siwc、siwc_status、siwc_bound、siwc_expires_at。agent_message 子代理输入时,上游回 400 subscription_sharing_unsupported_capability。12attributes.use_siwc 置 false,让所有流量都走外层令牌。后者会把流量一起挪回订阅窗口。"websockets": true 只在下游本身是 WebSocket 时才让执行器走长连接。用 Claude Code 打 /v1/messages,或者用任何 HTTP 客户端打 /v1/responses,这一项都不生效。14CleanClaudeToolArguments 与 ClaudeToolIsParameterless 在返回 {} 之前都会先问 claudeInfoAnyBranchAllowsDynamic,没写 additionalProperties 的开放对象走不到那一步。1718
internal/runtime/executor/helps/usage_helpers.go 第 1234–1240 行:只有 speed 非空才写 ResponseServiceTier,所以「上游没带这个字段」与「standard」在记录里仍然分得开。24
internal/pluginhost/adapters_auth.go 第 18–32 行:四个常量加两个并发槽;超过任一上限只是拿不到 DecodedBody,请求本身不报错。26-race 抖动,没有运行时改动;#6892 那笔 Gemini 内置工具与函数声明混用回 400 的修复,上一期报过进 dev,这一版带出来了。| 处境 | 今天做什么 | 依据 |
|---|---|---|
有开着 use_siwc 的 Codex 凭据,主力客户端是 Codex CLI 或 Desktop | 升之前确认外层 access_token 非空;升完接受额度回到订阅窗口 | #6833 |
| 想让 SIWC 继续生效 | 服务端没有开关,唯一变量是下游 UA;从自研面板进来的照旧走 SIWC | types.go |
| 跑插件鉴权,请求体大或带多层编码 | 升到 v8.0.40;超过 64 MiB 或超两层的请求拿不到 DecodedBody | adapters_auth.go |
| 要按用量核 Claude 的 fast 档 | 升到 v8.0.40,再去看记录里的 ResponseServiceTier | usage_helpers.go |
用 HTTP 打 /v1/responses 觉得慢 | 维护者明确不改;只有下游换成 WebSocket 才有改善 | #6896 |
| 非 Codex UA 的流量走 SIWC,且用到子代理 | 等 #6849,或把 use_siwc 置 false 改走外层令牌 | #6849 |
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
status.openai.com
status.claude.com
status.cloud.google.com
codex-reset.com
opentherank.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.