🐛 修正:免費層 429 的三個身份觸發點
- 派生會話 ID 按進程加鹽:重啟後同一會話獲得新的
ses_…,不再沿用已被免費層計費的舊會話;進程內保持穩定(親和性、粘性代理、上游 prompt cache 不受影響),官方客戶端自帶的會話 ID 仍原樣轉發。 - 客戶端工具名不再上線:整形後的免費請求把客戶端工具改名為不透明摘要(
clint_+ SHA-256 前 12 位 hex),攜帶 Claude Code 工具名(如ReportFindings、ScheduleWakeup)的代理會話不再被免費層以429 FreeUsageLimitError拒絕;響應與流式分片仍以客戶端聲明的名稱返回。 - 探測與 Playground 各自持有身份:可用性探測每次使用新鮮規範會話與隨機項目 ID,Playground 每次點擊生成新會話,不再共用單一額度桶導致健康模型被誤判不可用一小時。
🐛 修正:協議轉換與錯誤報告
- 串流 reasoning 增量保留空白:跨協議轉換不再把
"We"+" need"拼成"Weneed",純空白分片不再被丟棄。 - 客戶端可操作狀態碼:未知模型返回
404 model_not_found(原 400);上游遲遲讀不完請求體(寫入階段超時)返回413 payload_too_large(原 504),其餘階段仍為 504。
🆕 新增:WebUI
- 深色主題:頂欄主題按鈕,自動(跟隨系統)/ 淺色 / 深色循環,按瀏覽器持久化,首幀前套用避免閃爍。
- 請求流水分頁:請求路由與上游嘗試支持每頁 50/100/200/500 條。
- 免費模型「刷新狀態」改為真正觸發重新探測(新管理端點
POST /api/models/probe),而非僅重載緩存視圖。 - 長代理列表折疊:配置中心只渲染前 100 個條目並提供展開切換,大型代理池不再卡死頁面。
- 新增界面文案補齊 English / Tiếng Việt / Italiano 翻譯。
⚠️ 升級注意
- 客戶端工具的線上名稱由
clint_<name>改為不透明摘要;依賴線上名稱格式的集成需要跟進。響應路徑不受影響,仍還原為客戶端聲明的名稱。 - 重啟後派生會話 ID 改變:與上游的會話級狀態(如 prompt cache 親和)會在重啟後重建——這正是讓已燒穿的會話恢復可用的機制。
- 管理端點文檔新增
POST /api/models/probe條目。
What's Changed
- fix(identity): salt derived session ids per process so a restart re-mints them by @cheerc in #160
- fix(free-tier): hide client tool names from shaped requests by @cheerc in #161
- fix(probe): give probes and the Playground bench their own identity by @cheerc in #162
- fix(protocol): preserve whitespace in streamed reasoning deltas by @ai-daming in #152
- fix(gateway): report client-actionable status codes (404 for unknown models, 413 for oversized payloads) by @SK-DEV-AI in #139
- feat(webui): theme toggle, paged ledger, working refresh status, and collapsed proxy chips by @jasonxu114514 in 58f5667
Full Changelog: v1.4.5...v1.4.6