
这一小时四仓零新版本:CLIProxyAPI 在 dev 上让 Codex 自动评审跟着父会话挑号,也修好了单独写的 effort 被降成 medium;sub2api 接 Cloudflare AI Gateway REST 的 401 与 400 是两个独立故障,一个面板能改,一个只能靠前置层。
| 事项 | 时间(北京) | 规模 | 现在能做什么 |
|---|---|---|---|
| 自动评审继承父会话凭证 | 18:55 | 4 文件 +533/−18 | 先按凭证量评审请求;异常就摘号 |
| 单独 effort 不再降成 medium | 20:19 | 5 文件 +233/−8 | 客户端带 thinking.type=adaptive 立刻可用 |
| CF REST 接不进 sub2api | 21:09 | 报障 #8274 | 面板切 Bearer;?beta=true 要前置改写 |
| 插件拿到解码后的请求体 | 21:18 / 21:31 两次改写 | 4 文件 +330/−6 | 用 zstd 的客户端加插件,先知道这条 |
#6826 在 19:37、#6827 在 21:02 被维护者打上 Fixed 标签,等改动合进 main 才会自动关。routing.session-affinity 的实例,同一个会话会钉在同一个凭证上,靠这个复用上游的 KV 缓存。Codex 的自动评审走的是另一条路。x-openai-subagent: guardian 与父线程 ID 进来,被当成一个新会话,由兜底选择器重新挑号。codex-auto-review 请求,同时几乎不服务普通模型请求。provider::会话::模型。selector.go 第 1165–1176 行 把 modelKey 算进了键名,父会话是在自己的模型下绑定的。codex-auto-review。它拿父线程 ID 去查,键里的模型名对不上,查不到任何东西,于是按兜底策略摊到池子里。
sdk/cliproxy/auth/selector.go 第 1161–1198 行:第 1165 行取 modelKey,第 1166 行与第 1176 行把它拼进 cacheKey 与 fallbackKey,第 1178 行的 bind 只在非子代理时写双键。
guardian 头,第 1237 行按父会话取最近一次绑定,第 1240 行命中后才重新绑。session-affinity 打开过的实例才会撞上这个边界。codex-auto-review,看有没有哪个号在一小时内被灌了一串、同时普通模型请求很少。命中的号就是报障人描述的那个形状。session-affinity:流量摊开,代价是主会话的缓存复用一起丢掉。output_config.effort: high、又不带 thinking 对象时,转去 Codex 的路上会被换成 medium。
internal/translator/codex/claude/codex_claude_request.go 第 382–414 行:第 385–388 行先把 output_config.effort 取出来,第 411–412 行补了 else if !thinkingConfig.Exists() && effort != ""。reasoningEffort 的初值仍是 medium,thinking 存在时仍按 type 分支走。thinking 时别把显式档位丢掉」这一条。thinking 的可能。thinking: {"type": "adaptive"}:仍然有效,立刻可用,B 组请求在报障里就是 200 加 high。payload.override 里写 reasoning.effort:仍然有效。代价是会盖掉客户端自己选的档位,补丁的测试里专门有一条 final override wins。009f8d7a,还没发版。low、medium、high、xhigh、max 五档。省略 thinking 时 effort 依然应当生效,报障人正是拿这一条立的案。x-api-key header is required,而 CF 的 REST 端点 /ai/v1/messages 用同一个 Token 能过。x-api-key。
backend/internal/service/anthropic_apikey_auth.go 第 26–61 行:第 28–32 行读凭证里的 anthropic_apikey_auth_scheme,第 56–60 行决定发 Bearer 还是 x-api-key,默认落在最后一行。Authorization: Bearer。请求带着 x-api-key 到它门口,被当成没带凭证。Authentication error,外形就是报障人贴出来的那段 success: false 的 JSON。x-api-key 与 Authorization: Bearer(EditAccountModal.vue 第 2239–2252 行)。切成后者,凭证里就会写上 anthropic_apikey_auth_scheme。?beta=true 拼在四处,全都没有开关:gateway_upstream_request.go 第 69 行gateway_anthropic_passthrough.go 第 310 行account_test_service.go 第 544 行gateway_count_tokens.go 第 408 行Unrecognized key(s) in object: 'query'。?beta=true。/ai/v1/messages?beta=true 改写成不带参数的地址,再把账号的 base_url 指到那层。api.anthropic.com 的账号不受影响:官方端点本来就能接受这个参数,这也是它一直没被发现的原因。FrontendAuthRequest 加了 DecodedBody:请求体是 zstd 时先解一份给插件,原始 Body 与 Headers 保持原样。model 读不到,这一条补的就是它。测试文件里写着这句场景。codex-auto-review 请求量。哪个号被灌满,就把它临时摘出池子,或者先把客户端的自动评审停掉。thinking: {"type": "adaptive"} 与 output_config.effort,或者等 009f8d7a 发版。Authorization: Bearer,再解决 ?beta=true;前置层没有的话,账号测试那一关还会停在 400。This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.