fix(opencodezen): UA 升到 1.19.4 并补回 x-opencode-session-id

- 上游按客户端指纹判定免费层资格:CLI 1.18.29(4 个 x-opencode-* 头)
  稳定 429;CLI 1.19.4(5 个头,含 session-id)200 且任务真实完成。
- 适配器的 UA 与头集合必须**同步**升级:只改 UA 声称的版本、不发对应头,
  指纹反而更不一致,实测重新落回 429。
- 头形状按官方 CLI 抓包校正;`x-opencode-session-id` 与 `x-opencode-session`
  同值,此前被误删。
- live 测试新增 `gatewayBinary()`:优先 `MODELROUTER_BIN`,其次
  `/usr/local/bin/modelrouter`,回退改名前的 `/usr/local/bin/llmsproxy`。

注:本提交是改名/插件整改之外的独立修复,先于 v3.0.0 收口。
This commit is contained in:
JianFeeeee
2026-10-27 00:06:41 +08:00
parent ef95bc45d0
commit 4514270e21
3 changed files with 58 additions and 17 deletions

View File

@ -37,8 +37,13 @@ func TestOpencodeZenAdapterE2E(t *testing.T) {
if len(h["x-opencode-request"]) != 4+12+14 || !strings.HasPrefix(h["x-opencode-request"], "msg_") {
t.Fatalf("request 形状: %q", h["x-opencode-request"])
}
if !strings.Contains(h["User-Agent"], "opencode/1.19.0") {
t.Fatalf("UA 应为 1.19.0: %q", h["User-Agent"])
// ★ UA 必须与**抓包的官方版本**一致:上游按客户端指纹判定免费层资格。
// 实测(2026-10-24,同一凭据同一模型):
// CLI 1.18.29(发 4 个头) → 429 FreeUsageLimitError
// CLI 1.19.4 (发 5 个头) → 200,任务真实完成
// ⇒ UA 里声称的版本与发头集合必须同步升级,不能只改其一。
if !strings.Contains(h["User-Agent"], "opencode/1.19.4") {
t.Fatalf("UA 应为 1.19.4: %q", h["User-Agent"])
}
t.Logf("session=%s request=%s", s1, h["x-opencode-request"])
// 公式校验:段 = (K - bucket_ms*4096) & MASK,其中 bucket 已对齐到整分钟