
两条今天下午才提出的补丁分别补上 CLIProxyAPI 的两处空缺:管理端凭据列表没有单条兜底(一条坏元数据就能让整页只剩 0 条),home 订阅发布过之后断线会立刻重连、没有任何退避;文里给出症状怎么分、坏条目怎么定位,以及两张单现在的状态。
auth_files.go 一千行,搜不到一处 recover;dev 分支上也是 0 处。
internal/api/handlers/management/auth_files.go 第 146–178 行;第 153 行与第 174 行是两处 c.JSON(200, ...),每一条都直接 append 进同一个切片,中间没有 try 也没有 defer5。buildAuthFileEntry 里有一个 recover 块,问题出在 c.JSON 在那之外」。这一句与现行代码对不上:那层保护两处都没有。quota_probe,第 696–698 行,只在 v0 那条路上带6。
auth.Metadata 里的 quota_probe,第 698 行把它原样放进条目6。server.go 第 173 行注册的 GinLogrusRecovery 接住,回 500,并在日志里留一行 recovered from panic89。?name= 一条条试:哪一次恢复正常,坏的那条就在它前面。page 与 page_size 也在,同样在构造之前切片,条目多时可以把范围缩到一页一页地排。id、name、provider、status 这组最小字段,其余照常返回。defer recover,但那一层仍然回 500——只是从「冒到 gin」变成「受控 500 加一条日志」。真正让页面活过来的是单条降级那段。auth.Status 与 auth.Unavailable 的旧值,会把刚被 reconcile 成可调度的凭证报成不可用。filepath.Base 重算 name,而按名回写(状态、字段、刷新)要的是完整 ID 或文件名,改名会让这些调用回 404。!published.Load() && !waitForHomeSubscriberRetry(homeCtx, homeSubscriberPreAckRetryBackoff)13。published 又是每轮循环里新建的。于是常见的序列是:连上、发布、断、立刻重连、连上、发布、断。CPACancelBound,默认 5 秒15。
sdk/cliproxy/service_home.go 第 604–622 行;第 616 行是那条 home config subscription lifetime ended 日志,第 618 行的 !published.Load() 决定了要不要等13。home config subscription lifetime ended 即可,这类断线固定打这一行。ErrRebalanceRequested)不走退避,仍然立刻重连。
home 上新增的 sdk/cliproxy/service_home_retry.go 全文 31 行;第 6–8 行是三个常量,第 17–31 行是 next(),第 30 行是等抖动18。router-for-me:home,自动评审没有提出 finding2。service_home_retry.go 在 dev 与 main 上都取不到,auth_files.go 在 dev 上还是 0 处 recover。| 仓库 | 当前版本 | 发布(北京) | 主干头(北京) |
|---|---|---|---|
| CLIProxyAPI | v8.0.42 | 10-24 22:2119 | dev 10-25 11:3919 |
| sub2api | v0.2.18 | 10-23 15:4420 | main 10-25 13:3220 |
| codex-proxy | v2.1.20 | 10-23 03:5621 | main 10-21 09:5821 |
| codex2api | v3.1.1 | 10-17 05:4222 | main 10-24 19:5222 |
silveridc:feat/mysql-support,455 文件 +31976/−1496,06:49:43 与 06:51:15 开出,27 秒和 7 秒后由作者自己关掉,merged 都是 false2324。curl 一次 /v0/management/auth-files:200 加空 body 是序列化被带走,500 才是 panic,日志里会有 recovered from panic 与堆栈。?name= 一条一条试,恢复正常的那一次,答案在它前一条。quota_probe 从元数据里去掉,列表立刻恢复。grep -c "home config subscription lifetime ended",本版没有退避开关,配置里找不到能改的东西,得等 #6969。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.cloud.google.com
status.claude.com
codex-reset.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.