
四仓这一小时半零发版,要处理的是两处仍在发行版里的现场缺陷:网页搜索引文跟着会话换到另一张 Claude 凭证后每轮 400 且不进冷却,以及运行期改过 auth-dir 的实例 watcher 仍盯旧目录;两条补丁都还挂在 fork 上。
窗口:北京时间 11 月 2 日 18:21 至 20:18。四个仓库都没有发版,本期是两条要今晚判断的现场缺陷。
| 一 | 二 | |
|---|---|---|
| 现象 | 换号之后每一轮都 400 | 改了 auth-dir,新目录的凭据不出现 |
| 触发 | 多张 Claude 凭证 + round-robin + 会话亲和,闲置超过 TTL | 运行期 PUT 过 oauth.auth-dir |
| 发行版 | v8.0.51 仍这样 | v8.0.51 仍这样 |
| 补丁 | PR #7200,open,未进 dev | PR #7168,open,评审未闭合 |
| 今晚 | 换新会话,或把该模型收敛到一张凭证 | 改完必须重启进程 |
400 {"error":{"message":"messages.3.content.11.citations.0: Invalid encrypted_index in text block","type":"invalid_request_error"}}routing.strategy: round-robin、session-affinity: true、会话闲置超过亲和的 TTL。attachClaudeCitations 负责把上游的 annotations 抄回 Claude 的 text 块。encrypted_index 是否为空,非空就把整条 annotation 塞进 citations,第 295 行原样写回。整段没有「这条引文是谁签的」这层判断。
internal/translator/claude/openai/responses/claude_openai-responses_web_search.go 第 277–300 行:注释自陈 annotations 原样送回,第 287 行只判 encrypted_index 非空。2
internal/runtime/executor/claude_executor_execute.go 第 88–100 行:第 95–96 行把历史里的搜索结果补回上下文,此后再无按凭证筛选的步骤。3Invalid encrypted_index。classifyClaudeUpstreamErrorWithCooling 只对 429 走冷却分支;其它状态码在第 814 行被包成 statusErr,一路落到第 825 行原样返回。
internal/runtime/executor/claude_executor_request.go 第 809–826 行:第 811 行取 Retry-After,第 814 行包成 statusErr,第 815 行起只判 429,第 825 行对其它状态码直接返回。4session-affinity-ttl(默认 1h)调到长于你们的闲置间隔。/v1/messages 的历史不在这次修复范围。PUT /v8/management/config/oauth/auth-dir 回 200,日志也打了 auth-dir: A -> B。GET /v8/management/credentials 里仍然只有 A 的凭据。往 A 里丢一个新文件,照样被检测到。NewWatcher 构造时把目录写进结构体。我把 v8.0.51 整包搜了一遍,w.authDir = 零命中:这个字段只有构造那一次赋值。SetConfig 只换配置对象和旧配置快照,不碰目录。
internal/watcher/watcher.go 第 125–175 行:第 132 行 authDir: 是唯一的目录写入点,第 169–175 行 SetConfig 只换 config 与旧 YAML 快照。8
internal/watcher/dispatcher.go 第 146–162 行:第 153 行 authDir := w.authDir 取的是旧值,第 158 行拿这一对参数出快照。9mirrored auth directory locked to %s。oauth.auth-dir 直接重启进程。watcher 只有在构造时才会重新拿目录。/v8/management/credentials 的条目,确认新目录的凭据出现。~ 展开只做在 watcher 的副本上,会和 Service.ensureAuthDir、FileTokenStore.SetBaseDir 分裂。12internal/translator/** 的改动先开 issue;作者改成开单,并附上完整补丁与测试。15| 仓库 | 当前版本 | 本窗口 |
|---|---|---|
| CLIProxyAPI | v8.0.51(11 月 2 日凌晨发布) | 无新版本,dev 只多一笔插件侧改动 |
| sub2api | v0.2.19 | 无新版本,主干本窗口无新提交 |
| codex-proxy | v2.1.21 | 无新版本,窗口内零条新条目 |
| codex2api | v3.1.2 | 无新版本,窗口内零条新条目 |
Invalid encrypted_index。命中就开新会话,并把那条模型收敛到一张 Claude 凭证。oauth.auth-dir 去对 /v8/management/credentials 的条目。对不上就重启,重启后再对一次。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.claude.com
status.cloud.google.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.