Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
10/21 凌晨速报:v8.0.36 一次发版 20 笔改动,图片超限那条被判定不做
2026-10-20

10/21 凌晨速报:v8.0.36 一次发版 20 笔改动,图片超限那条被判定不做

CLIProxyAPI v8.0.36 在凌晨发出,一次落掉本刊报过的九张单,图片超限被维护者判定不做;同一时段 sub2api 报出 Cloudflare 1010 被记成账号故障,Anthropic 账号一次即停。

中
中转站风控与更新速报@Karuha
北京 10-21 01:18,CLIProxyAPI 发出 v8.0.36。发行说明列了 20 条改动,其中两条是合并提交。
过去三天本刊报过的那批单,在同一分钟里被一起关掉。17:17:30 到 17:17:37Z 之间关了九张,状态全是 completed。
三分钟后切出版本。
有一条例外。Claude 的图片尺寸限制在 15:48Z 被判定不做,配套补丁也在 16:38Z 由作者自己关掉。
其余三仓版本没动:sub2api 还是 v0.2.17、codex-proxy v2.1.19、codex2api v3.1.1。
所以这段窗口真正要动手的就是这一版升级。

今晚要不要升

按你跑的东西分三类,判断不一样。
跑 openai-compatibility 或 xAI 自定义 base 的:升,但先看下面那段行为变化。这一版会把下游客户端的 User-Agent 原样送到上游。
跑 Claude 翻译的:升。上一期报的拒答、上下文超限、pause_turn 三条误报都在这一版改了映射,客户端可以按状态处理,省掉自己猜的那一步。
只跑 Codex OAuth 的:两处差异。一是 auth-dir 全量扫描读到文件错误后保留凭证,二是长会话不再每块重解一次 model。
配置这份东西不用改。v8.0.35 与 v8.0.36 的 config.example.yaml 逐行对比只差一行注释,注里多了 sdk-ts;没有新增键,默认值也没动。
唯一的行为变化是 UA 透传,来自提交 5026f365,关的是 #6791。
openai-compat 执行器的 UA 逻辑
CLIProxyAPI v8.0.36 internal/runtime/executor/openai_compat_executor.go 第 34–48 行:cli-proxy-openai-compat 退成兜底值,ensureOpenAICompatUserAgent 先取下游请求头里的 UA,取不到才写默认值。1
想让某条链路保持旧口径,就在那组 provider 或那条 key 的 headers 里显式写 User-Agent。提交自带的用例断言了这条覆盖关系。
xAI 同样:非 CLI chat-proxy 的 base URL 透传下游 UA,官方 CLI chat-proxy 那条路仍钉 xai-grok-workspace/<版本号>。

本刊报过、这一版落掉的九条

跟踪单升级前的现象落版提交升级后
#6800拒答与上下文超限被报成正常完成,pause_turn 让客户端停手aadb34f9前两者变成 failed 并带错误码,pause_turn 变成 completed 且 end_turn=false
#6804每个 thinking block 重解一次请求里的 model,长会话平方级77af3795每请求只解一次
#6806auth-dir 全量扫描读到文件错误就注销该凭证5fe203d5读错误保留凭证,与文件事件路径一致
#6807Vertex openapi: true 丢 Gemini thought signature,Gemini 3 工具调用 40038706390签名跨翻译保留
#6808force-model-prefix 下 xai/、x-ai/、grok/ 图片别名报 unknown provider8a3e7622别名回退到无前缀
#6810web-search 缓存只按会话作键,换凭证后回放旧 encrypted_content 回 400cddc9bb8缓存按上游凭证隔离
#6805相对 auth-dir 的 SIWC 绑定把目录拼两次,提交阶段失败bb2d8f82按工作目录解析路径
#6809SIWC 绑定期间凭证被换掉,A 的 token 写进 B 的文件6bbd2cb7提交前校验账号没被替换
#6811SIWC 绑定与旧版 auth 文件上传同时落地,后写盖掉前写88041f0c两条写路径串行化
表外还有两笔。sdk-ts 按原生 Claude Code 处理、cloak_mode: never 保留调用方 header,是 20c9095c;SGLang 那种把 reasoning_tokens 平铺的写法也认了,是 e198f3cd。
这九张单是同一位维护者在北京时间 22:10 到 01:11 之间写完的,提交作者时间都落在这一段。切版本之前五分钟,他把单一起关了。

没修的那条:图片超限

上一期报的是同一件事的另一面。带超限图片的 Claude 请求被上游 400 打回,v8.0.35 原样转发出去。
这次维护者给了定性。15:48:27Z 的评论写:这个行为由上游 Anthropic 的 API 限制造成,CLIProxyAPI 不对图片数量和尺寸做额外处理,按 not planned 关闭。2
配套补丁 #6803 的结局是作者自己关的。16:38:23Z 那条评论写:理解了图片限制不在 CLIProxyAPI 的范围内,我把这个改动留在自己的构建里。3
本刊在 v8.0.36 的整包里核过:LimitClaudeRequestImages、claudeImageMaxDimension、claude_image_limits.go 三个关键词都是 0 命中。
这一版升级解决不了图片超限。今天能做的还是那三条:
  • 客户端侧先压到门槛内:单边 8000 像素、单图 base64 10 MB、超过 20 张时每边按 3000 像素算。报障人实测 3001 才拒,官方文档写的是 2000。
  • server.max-request-body-bytes 挡的是整个请求体,默认 0 即不限,它管不到单张图的尺寸。
  • 自建且吃这套限制的,继续用 #6803 那份补丁,作者本人就是这么做的。

第二条:Cloudflare 1010 被记成账号故障

16:26Z,sub2api 上开出一条新单 #8248,作者 PK-CK。到发稿为止 0 评论、0 标签、状态 open。
场景是这样:上游中转站前面挂了 Cloudflare,按 User-Agent 拦部分客户端,回 403 加 1010。这属于请求头层的事,换个 UA 同一个号就能出货。
sub2api 把它当账号故障记账,后果按平台分两档。
OpenAI 平台与多协议 API Key 账号:180 分钟窗口内累计 3 次 403 就置为 error,需要人工恢复;没到 3 次是 10 分钟临时不可调度。三个常量在 ratelimit_service.go 第 94–96 行。
Anthropic 账号:一次 403 就 error。这一档最疼,一个下游客户端换个 UA 就能把整组账号打停。

为什么这次认不出

代码里本来就有两道豁免,都写在 handleOpenAI403 里面。
403 豁免与 403 计数
sub2api v0.2.17 backend/internal/service/ratelimit_service.go 第 1059–1116 行:HTML 页豁免、Cloudflare 1010 豁免、计数窗口、openAI403DisableThreshold 判定、10 分钟临时冷却,全在 handleOpenAI403 一个函数里。4
判定函数本身只认一句纯文本。
isCloudflareBotBlockResponse
同文件第 1121–1127 行:isCloudflareBotBlockResponse 把响应体转小写后找 error code: 1010 这一串。这次的响应体是 JSON,字段名 error_code,带下划线带引号,匹配不上。5
isHTMLResponse 也只认 <!doctype html 或 <html 开头(openai_gateway_count_tokens.go 第 563–567 行),JSON 体同样落空。
第三处在分平台那一步。只有 PlatformOpenAI 或 IsMultiProtocolAPIKey() 的账号才进 handleOpenAI403(第 1031–1033 行),其余平台直接落到最后的 handleAuthError 并 SetError。

下游 UA 是怎么上去的

因为转发白名单里就有它。
转发白名单
同版本 backend/internal/service/openai_gateway_service.go 第 72–90 行:openaiAllowedHeaders 里 "user-agent": true,透传模式用的 openaiPassthroughAllowedHeaders 里也有一条。转发循环在 openai_gateway_forward.go 第 1436–1444 行。6
例外只有一处。OpenCode 与 Command Code 的官方上游、以及 opencode_go 账号会被收敛成规范 UA(openai_opencode_session.go 第 121–134 行)。同文件注释写明理由:客户端透传的编程库 UA 会撞上对方前置的 Cloudflare 拦截,还会被计进账号 403 strike。
10-16 那期报的是这条链的另一半,HTML 拦截页与那两家官方上游的 UA。这次轮到 JSON 体和其余平台。

今天能做的四步

  1. 先在日志里确认是不是这条。命中豁免时会打 openai_403_cloudflare_bot_block_skips_account_penalty;没有这条、账号却停了,就是没认出来。临时冷却打的是 openai_403_temp_unschedulable。
  2. OpenAI 平台与多协议 Key 账号:给账号凭据填 user_agent,它会盖掉透传的下游 UA(account.go 第 1797–1802 行读 credentials["user_agent"])。
  3. 下游客户端别用 Python-urllib 这类 UA。报障人拿几类 UA 做过对照,只有它拿到 1010,curl、python-requests、Go-http-client、node 都能过。
  4. Anthropic 账号这一版没有豁免路径。要么让上游别按 UA 拦,要么自建打补丁,被停的号只能人工恢复。
报障人自己划的边界也值得照抄:只豁免账号处罚,换号照旧。这次的问题在链路层,号池里翻不出坏号。

第三条:codex2api 五笔合并,还没发版

16:57:29 到 17:01:37Z,codex2api 连续合并五张 PR:#795、#796、#801、#804、#806。主干头停在 17:01:37Z,发行版仍是 v3.1.1。
值得提前知道的是 #804,它改的是资源上限。下游 WebSocket 每 Key 64 条、全局 4096 条,匿名另限每 IP 16 条;SSE 单行与 Grok 聚合事件上限 8 MiB;上游 WebSocket 解压后单条消息 32 MiB。
#801 把 WebSocket 每轮的配额帧接进账号用量,默认 30 秒落一次库。两个开关走环境变量:CODEX_WS_USAGE_FRAME_INGEST=false 关掉摄入,CODEX_WS_USAGE_FRAME_PERSIST_SECONDS 改间隔。
发版之前,把大请求、长 SSE 行、超大图片先自查一遍。这些上限到了下一版就是硬线。

一屏核对

仓库当前版本发布时间(北京)主干
CLIProxyAPIv8.0.3610-21 01:18main 与 dev 均在 01:11
sub2apiv0.2.1710-16 12:41main 停在 10-19 20:45
codex-proxyv2.1.1910-20 05:10dev 停在 10-20 04:57
codex2apiv3.1.110-17 05:46main 到 10-21 01:01
上游三家都静着。OpenAI 状态页全绿,0 个降级组件,最近一条事件是 10-19 的 File Download errors,早已恢复。7 Anthropic 状态页全绿,10-20 无事件。8
谷歌云那条 europe-west2 事故已经收尾。end 定在 14:00Z,最后一版 14:03:41Z 转 AVAILABLE 并声明不再更新;受影响产品 38 个,不含 Vertex AI 与 Gemini API。9
额度侧没有新动作。codex-reset 记最近一次已验证全局重置在 10-20 06:33Z(北京 14:33,约 12 小时前),累计 56 次全局重置。10 opentherank 记 64 次、中位间隔 3.1 天、最长 68 天。11
社区这边有一条和额度有关的自述:r/ClaudeAI 上有人用 Opus 5.5 medium 起了 12 个同名子代理读 87 份记录,5 小时额度 5 分钟就见底。12 长窗口被 fan-out 一次吃掉,在面板上看起来就像额度突然掉得很快。

References

  1. 1
    v8.0.36 源码

    github.com

  2. 2
    #6802

    github.com

  3. 3
    #6803

    github.com

  4. 4
    v0.2.17 源码

    github.com

  5. 5
    v0.2.17 源码

    github.com

  6. 6
    v0.2.17 源码

    github.com

  7. 7
    status.openai.com

    status.openai.com

  8. 8
    status.anthropic.com

    status.anthropic.com

  9. 9
    Google Cloud 事故

    status.cloud.google.com

  10. 10
    codex-reset.com

    codex-reset.com

  11. 11
    opentherank

    opentherank.com

  12. 12
    Reddit r/ClaudeAI

    reddit.com

中
中转站风控与更新速报@Karuha

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content

  • 今晚要不要升
  • 本刊报过、这一版落掉的九条
  • 没修的那条:图片超限
  • 第二条:Cloudflare 1010 被记成账号故障
  • 为什么这次认不出
  • 下游 UA 是怎么上去的
  • 今天能做的四步
  • 第三条:codex2api 五笔合并,还没发版
  • 一屏核对