fix(desktop): 补齐桌面端身份头 + chat 的 sse-gzip-recovery(修复 chat 410 freebuff_update_required)

Merged
XI
3d ago
+207-64

现象

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/admissionx-freebuff-client: desktop、x-freebuff-client-version: <桌面版号>、x-freebuff-install-id缺
session/admissionx-freebuff-wallet-spend-limit: session0
chatx-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: 1
  • src/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。