github jasonxu114514/opencode2api v1.4.5

3 hours ago

🆕 新增:匿名免費通道只走 v2 /inference

  • 匿名免費流量不再自動回退到 1.x /zen:anonymousUpstreams 只返回設定的 v2 位址,v1 呼叫已註解保留,可一鍵恢復。
  • 匿名目錄刷新與免費模型探測同步跟隨,不再對已退役的 /zen 發請求。
  • 仍保留顯式設定:若把 upstream.anonymous 指到 /zen,閘道會照設定使用(不建議)。帶 Zen key 的免費模型仍走 upstream.zen,本次未改。

🔧 改進:免費請求身份與工具名

  • 客戶端沒給 project id 時,每個請求生成新的 40 位 hex project id,避免免費額度按 project×出口記賬時共用一個已被燒穿的桶;客戶端自帶 project id 仍原樣保留。
  • 回應工具名解析改為:精確 clint_ → 去前綴 → 忽略大小寫 → 忽略 _ - . 空白,只折疊到唯一匹配;兩個工具折疊衝突時不猜。
  • JSON 與 SSE(Chat/Responses/Anthropic)共用同一解析器;未帶 clint_ 前綴的工具調用幀也會進入折疊路徑,減少宿主 unknown-tool 往返。

🔧 改進:WARP 預熱與註冊節奏

  • 移除固定 12 秒註冊間隔:背景註冊連續進行,由 create mutex 串行化;只有被拒才退避。
  • warp.pool_size 的一半(至少 1 個,且空閒時至少保留 2 個)作為預熱常駐;第一個出口仍同步註冊並決定 readiness。
  • 遭遇 429 時不再在註冊路徑內睡眠:registrar 記錄 Retry-After 並快速失敗,由池排程下一次嘗試,避免長時間佔住 create mutex。
  • 同一出口區塊反覆重複時(3 次)暫停預熱 1–5 分鐘,不再對已飽和的 colo 持續註冊。
  • 免費模型自動探測會跳過少於 2 個出口的池,並在探測淘汰出口後停止本輪,避免把預熱池抽乾。
  • /healthz 的 warp.preload 與四份 README/WebUI 同步說明。

🐛 修正

  • 啟動時第一個 WARP 出口遇到 Cloudflare 註冊限流不再 fail closed:在初始化期限內等完 Retry-After;初始化至少預留一個完整限流窗口。
  • 修正關閉時池計時器可能未被 Wait 等待的 Add/Wait 競爭:計時器改為在池鎖內登記,關閉後不再排程。

⚠️ 升級注意

  • 匿名免費模型不再自動回退 /zen;若所在地區或出口只能靠 /zen,升級後該通道會直接失敗,需要改回舊行為或改設 upstream.anonymous。
  • 每個未帶 project id 的請求都會得到新的上游 project id;上游的 project 維度配額/快取行為可能與以往不同。
  • WARP 冷啟動不再固定等 12 秒,但 Cloudflare 仍可能限流;限流時啟動最多等待一個窗口(5 分鐘)後才失敗。
  • 工具名折疊只影響上游回傳的工具名;客戶端工具在請求中仍是 clint_*,回應會還原。

What's Changed

Full Changelog: v1.4.4...v1.4.5

Don't miss a new opencode2api release

NewReleases is sending notifications on new releases.