
CLIProxyAPI 的文件快照携带逻辑会把旧凭证的冷却、最后错误与不可用状态搬给同一路径下新换的凭证,v8.0.40 就在现网;本期给出触发条件、三步处置与补丁状态,另附一处无锁读与 sub2api 推理强度映射的补丁。
d5816d5e,10 月 22 日上午落进 dev,13 个文件、+1195/−11,标题写着「preserve runtime cooldowns on file snapshots」。2FileSnapshotMatchesDisk,确认这份快照正是磁盘上的那一份。3Unavailable、NextRetryAfter、LastError、Quota 与 cooldownRecordedSeq 换成旧的。
sdk/cliproxy/auth/conductor_lifecycle.go 第 375–408 行:第 376 行的 credChanged 是这条路上唯一的身份判据,第 384–388 行搬模型级状态,第 392–408 行搬凭证级状态;只有第 410 行那句 credChanged || mode == updateModeRefresh 成立,才会往下清 401 类失败并恢复状态。codex-01.json 里不管换成谁的 token、谁的账号、哪个项目,在管理器眼里都是同一张凭证。CredentialsChanged 的整份清单是:access token、外层 access token、refresh token、id_token、api_key、SIWC 的 access / refresh / id_token / client_id 四个字段,最后加一个 use_siwc 开关。5account_id、Vertex 的项目与服务账号,都落在清单之外。CredentialVersion 停在 1。6
sdk/cliproxy/auth/conductor_refresh.go 第 453–495 行:第 458 行比两个 access token,第 461 行比 refresh token,第 472 行比 id_token,第 489 行比 api_key,第 492–495 行比 SIWC 那四个字段。整份清单里没有 provider,也没有 Codex 的 account_id。account_id、token 没变:失败留着,而且 CredentialsChanged 看不见这次变化。StorageJSON 里:存储轮换后失败留着;只差在 2^53 以上的 64 位数字,会因为 float64 归一化被判成相等。authMatchesTokenPartition 在当前凭证的两个分区里找一遍。7
sdk/cliproxy/auth/conductor_cooldown.go 第 860–878 行:第 865 行先比注册代,第 869 行只要结果里的 access token 与当前任一令牌分区相同就直接 return false(不判为陈旧),版本比较排在它后面。account_id,请求回来说 401。这一条被当成有效结果记下来,把新账号标成不可用。codex-01.json,写到 codex-02.json。ID 随路径变、冷却文件也随文件名变,这条继承路径就绕开了。auth_index 调一次重置。 管理端有 POST /v8/management/routing/cooldown/reset,body 是 {"auth_index": "..."},它会把这条凭证的模型态与冷却一起清掉。9LastError 是 401 终态,clearCooldownStateForAuth 第一件事就是返回 false。10 这时重置接口会成功返回,状态却还在,只能删文件重写。routing.cooldown.save-cooldown-status 打开时,冷却按凭证写成一个 .cds,文件名取自 auth 文件名。1112 旧的 .cds 留在目录里,重启会把旧号的冷却重新读回来。
internal/runtime/executor/claude_executor_auth.go 第 32–51 行:第 37、40、43 行直接按 key 读 metadata,第 49–51 行改用带锁的 ReadMetadataString,同一个函数里两种取法。IsCNProvider 判过,OpenCode Go 这类非国产目标维持原行为。low ↳ max。^3.4.17,并在 pnpm-lock 里加了低于该版本的强制覆盖。作者的说法是「完整检查时发现现有版本触发新的高危告警」。41a4b9f4;sub2api 仍是 v0.2.17,主干停在 10-22 10:33。1819dial_ms / tls_ms 零命中。22 同一批被关的还有 #6840、#6841、#6842,也都没合。| 处境 | 今天做什么 | 依据 |
|---|---|---|
| 要换 token、换号或换项目 | 换文件名重写,别在原文件上覆盖 | auth_provider.go |
| 面板上一条凭证带着旧号的冷却 | 按 auth_index 调重置;401 终态的清不掉,删文件重写 | quota.go |
开着 save-cooldown-status | 删掉对应的 .cds 再重启,别让旧冷却被读回来 | cooldown_state.go |
同 token 换过 Codex account_id | 旧分区的一次 401 会记到新分区;盯 unavailable 出现的那一刻 | conductor_cooldown.go |
| 把执行器嵌进自己的服务 | #6907 那处无锁读可能让进程直接退出,先别升 | claude_executor_auth.go |
| composite 分组绑国产平台,推理强度不生效 | 等 #8309,或者客户端自己带 effort | PR #8309 |
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.openai.com
codex-reset.com
opentherank.com
x.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.