fix(desktop): 补齐桌面端身份头 + chat 的 sse-gzip-recovery(修复 chat 410 freebuff_update_required)
Merged
XI
3d ago+207+207+012345678901234567890123456789-64-64-01234567890123456789
现象
POST /api/v1/chat/completions 一律返回 410(freebuff_update_required,official 通道下 body 为空),而 session/admission 与 agent-runs 都正常。同机、同账号用官方客户端(Desktop 0.0.173 / CLI 0.2.27)对话正常,说明不是账号或出口问题。
根因
上游对 chat 一跳加了客户端身份门禁:请求缺少桌面端身份组时被判为过时客户端。与官方请求逐字段比对后,缺口三处:
| 位置 | 官方 | 本仓(改前) |
|---|---|---|
| session/admission | x-freebuff-client: desktop、x-freebuff-client-version: <桌面版号>、x-freebuff-install-id | 缺 |
| session/admission | x-freebuff-wallet-spend-limit: session | 0 |
| chat | x-freebuff-sse-gzip-recovery: 1 | 缺 |
取值来源:官方桌面端 0.0.173 的 resources/orchestrator/orchestrator.js(常量 FREEBUFF_CLIENT_HEADER / FREEBUFF_CLIENT_VERSION_HEADER / FREEBUFF_INSTALL_ID_HEADER / FREEBUFF_SSE_GZIP_RECOVERY_HEADER,其中 client-version 取 FREEBUFF_APP_VERSION),并用同机同号的抓包逐字段 diff 复核。
改动
src/upstream/fingerprint/official-fingerprint.ts:补身份组头与 install-id;wallet-spend-limit缺省'session'cli-bridge/lib/endpoints/chat-payload.ts:chat 补x-freebuff-sse-gzip-recovery: 1src/upstream/upstream-contract.ts:登记两个新头(过契约门禁)
验证
- 实测:
/v1/chat/completions→200+ 完整流式回复;日志无upstream chat non-ok npm run check:gates全绿(18/18)、check-upstream-contract通过、typecheck通过
备注
x-freebuff-client-version 缺省值 0.0.173 是抓包时的桌面版号;桌面端发版后需同步更新该缺省(也可用 FREEBUFF_APP_VERSION 覆盖)。
关联 #35。