
xAI 的一句内容拒绝会被当成凭证故障、逐张冷却 30 分钟;同类误判还出现在 sub2api 的 OpenCode 容量 429 与 Vertex 的签名校验上,这一期给出现行版本里的位置、影响面,以及今天就能改的那一处配置。
oauth.request-scoped-errors.xai 下,命中后不换号、不冷却。1GET /v8/management/credentials 里的 unavailable 与 next_retry_after,30 分钟正是这条 403 的固定时长。2api-keys.xai 那一组。 动作与条件一样。3{"code":"permission-denied","error":"I'm sorry, I can't help with that request."}
internal/clienterror/client_error.go 第 97–122 行:第 101 行给 Claude 的 thread 缺失开了口子,第 106 行的 model not found 明确保留换号与冷却,第 115–122 行的 status 分支只认 400、409、413、422;xAI 的内容拒绝落进 default。10
sdk/cliproxy/auth/conductor_cooldown.go 第 1064–1086 行:第 1071 行把 401、402、403 收进同一个 case,第 1075 行写 now+30min;紧接的 404 是 12 小时。11auth_unavailable;六天里见过的 xAI 403 body 只有这一种,累计 55 次。1code 或 error.code 等于 permission-denied、body 里有 can't help with that request(大小写不敏感,弯引号会归一)。1permission-denied,比如「Access to the chat endpoint is denied」。那种仍然换号、仍然冷却。1oauth:
request-scoped-errors:
xai:
- status: 403
match:
- "can't help with that request"
action: "stop"auth.AuthKind() == AuthKindOAuth 的判断之后。13api-keys.xai 下面。3match 是区分大小写的子串匹配,原文照抄;上游回弯引号时,把两种写法都列进数组。条件别只写 permission-denied,账号级拒绝也是这个 code,会被一起放过。Upstream request failed: [ttft_admission_refused] the cell is at capacity;
retry shortly (after 15 s)isOpenAIOAuthAccount。14
backend/internal/service/openai_account_runtime_block_fastpath.go 第 250–274 行:第 254 行一次判掉状态码、账号类型与影子账号,第 257 行再判 429 是否瞬时;API-key 型的 OpenCode 账号在第 254 行就返回 false。14RetryableOnSameAccount 为假就直接进切号。15applyCNProviderReactive429 里先试配额快照冷却,取到未来窗口就写 SetRateLimited。16
backend/internal/service/ratelimit_cn_providers.go 第 260–284 行:第 263 行分出 OpenCodeGo,第 264 行调快照冷却,第 270 行写 SetRateLimited。窗口取自账号 extra 里的 opencode_go_5h_reset_at 与 opencode_go_weekly_reset_at。16Retry-After、Retry-After-Ms 里最长的一个,缺省 500 毫秒;超过 30 秒交回切号,不缩短等待抢跑。4POST /api/v1/admin/accounts/:id/clear-rate-limit 清掉。18thoughtSignature 的 functionCall 回放给 Vertex 上的 gemini-4-argon,出站请求体里的签名已经变成 skip_thought_signature_validator。50x12 的单条 protobuf 记录,以及 ASCII UUID。19
internal/signature/provider_compatibility.go 第 352–368 行:第 359 行进 Gemini 分支,第 360 行的条件覆盖 functionCall、模型段落与未知类型,第 361–362 行给出替换动作与哨兵常量。200x01 开头的 Tink 密文,这套信封判定认不出来,于是按不兼容处理。这是他的分析,官方文档里没有这一条。5action=replace_bypass。命中那行里 sig_type=unknown、reason="missing or incompatible signature",说明这段签名被换掉了。23| 项目 | 当前版本 | 发布时间(北京) | 主干头(北京) |
|---|---|---|---|
| CLIProxyAPI | v8.0.43 | 10-25 23:37 | main 10-25 22:45,dev 10-26 15:58 |
| sub2api | v0.2.18 | 10-23 15:44 | main 10-25 21:48 |
| codex-proxy | v2.1.20 | 10-23 03:56 | dev 10-23 03:54 |
| codex2api | v3.1.1 | 10-17 05:42 | main 10-26 00:39 |
#7006 与 #8359 都开着、mergeable clean,作者分别是 duu261 与 zenggang;#7007 开着、0 评论、无标签,作者说补丁可以提 PR,目前还没提。145GET /v8/management/credentials 的 next_retry_after 能看到还剩多久。sub2api 那边被快照停住的号不会自己提前解,用清限流接口清一次。action=replace_bypass,说明这段签名被本地换掉了。xAI 侧客户端收到那句拒绝之后,本地记录里不该多出一次换号。#7006 合不合、#8359 合不合、#7007 有没有变成 PR。github.com
github.com
github.com
github.com
github.com
status.openai.com
status.anthropic.com
status.cloud.google.com
codex-reset.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
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.