
v8.0.42 上一小时里被连开四单:go.mod 第 18 行钉着受 GHSA-fpmh-frq8-7rj8 影响的 zstd 实现,一条未鉴权请求就可能打崩进程;另三条是 v8.0.40 起带进来的解码排队与 413、SIWC 整条凭证下线、Vertex 的 400。主干仍是零补丁,正文给出今晚能自己落地的两步。
bc0643405a1d。2| 单号 | 什么时候会碰到 | 结果 | 今晚能动什么 |
|---|---|---|---|
| #6955 | 有人往你这里发 zstd 编码的请求体 | 解码器 panic,进程可能直接退出 | 自己换依赖重编 |
| #6956 | 装了 frontend auth 插件 | 请求排队;原本能过的体被判 413 | 无开关,等版本 |
| #6957 | 有 use_siwc: true 的凭证 | 外层令牌一坏,整条凭证下线 | 临时改配置或重登 |
| #6958 | Vertex 上把内置工具与函数工具混用 | 上游回 400 INVALID_ARGUMENT | 改请求写法 |
13874f1f、d946c4fb、45501610),我在 v8.0.42 的整包里核到了对应的行。
go.mod 第 10–24 行。夹在 godotenv 与 zeroconf 之间那一行就是 zstd 实现,版本停在 v1.17.4。3sdk/api/handlers/request_body.go 第 54–88 行,handler 入口的解码;6internal/api/middleware/request_logging.go,失败请求的错误体捕获也会解码;7internal/pluginhost/adapters_auth.go 第 38–68 行,v8.0.40 起给 frontend auth 插件用的预鉴权解码。shouldCaptureRequestBody 在日志开关关着时,只要请求体不超过 1 MiB 就照样抓取。8
request_logging.go 第 294–314 行:第 299 行先看日志开关,第 312 行在开关关着时仍按 ContentLength <= 1 MiB 放行抓取。8request-log 默认是 false,错误日志却照样记——同一份示例配置里就写着「请求日志关闭时保留的错误日志份数」。9Authenticate 的 recover 接住,但插件当场失效——独占式的 auth 插件会拒掉所有人,直到重启。v1.20.2 或更高再重编:go get github.com/klauspost/compress@v1.20.3
go mod tidyContent-Encoding: zstd 能挡住这条入口,代价是所有用 zstd 的客户端一起被拒,那是权衡,不是修复。
adapters_auth.go 第 205–245 行:第 219 行注明解码发生在鉴权之前;第 222 行在信号量上阻塞等待;第 237–239 行解码超预算即回 413。11ReadRequestBody 的路由、且编码层数少于 2 才会进这段。12没装 frontend auth 插件的站点碰不到。DecodedBody 留空,并且不要在这一步回 413。use_siwc: true 的凭证按请求分两路:认得出来的 Codex 客户端走外层 access token,其余客户端走内层 SIWC token。authMatchesTokenPartition 同时比对两个分区的令牌。13
conductor_refresh.go 第 418–432 行:第 427 行是 authAccessToken(auth) == token || authOuterAccessToken(auth) == token——外层被拒的令牌,也会被判成「这条凭证的令牌被拒」。13accessTokenRejected 会成立。14一次 Codex 客户端的外层 401、加上随后外层刷新返回 invalid_grant,整条凭证就被标成未授权并退出调度。本来用 SIWC 令牌能正常服务的请求,从此拿到 auth_unavailable。RejectedSIWCAccessToken 和 RejectedAccessToken。15外层那条还活着的拒绝记录,就这样被覆盖掉,外层刷新判定也就不再看得见它。auth_unavailable 忽然集中出现,先去核这条凭证是不是 use_siwc: true。临时办法有两条:把 use_siwc 关掉、或把外层令牌重新登录一次;正式修复要等版本。45501610 让两个共享的 Gemini 翻译器在「内置工具 + 函数工具」混用时,往请求里写 toolConfig.includeServerSideToolInvocations: true。两处分别是 Responses 那条的第 72 行与 chat-completions 那条的第 470 行。toolConfig。17
gemini_vertex_executor.go 第 450–462 行:第 457 行是 StripVertexOpenAIResponsesToolCallIDs,第 458 行是思考签名清洗,两者之后没有处理 toolConfig 的步骤。17400 INVALID_ARGUMENT,报「Unknown name includeServerSideToolInvocations at tool_config」。requests.payload.filter 里按协议删掉这个字段——这条要自己测一遍,确认规则落在翻译之后。x-grok-client-version: 0.2.93 只出现在 v7.2.72 到 v7.2.119 的硬编码里,而 xAI 把 cli-chat-proxy.grok.com 的最低版本抬到了 1.0.13。18x-grok-client-version、User-Agent: xai-grok-workspace/... 删掉,让程序自己取。github.com/klauspost/compress,重编、重发。这是四条里唯一今晚能落地的。use_siwc: true 凭证的:核一遍最近有没有外层 401 后整条凭证下线的记录;有的话先关 use_siwc 或重登外层。toolConfig.includeServerSideToolInvocations。bc064340 之后的第一笔提交。四张单一字未改,等的是那一笔。github.com
github.com
github.com
github.com
proxy.golang.org
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com
googleapis.github.io
github.com
github.com
github.com
github.com
github.com
status.openai.com
status.claude.com
status.cloud.google.com
codex-reset.com
codex-reset.com
opentherank.com
community.openai.com
reddit.com
reddit.com
This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.