What's Changed
- feat(channels): move daily checks to per-channel interval and start time (
3195bfd1) - fix(channel-check): use OAuth credentials for scheduled checks (
d0ac6a56) - fix(web): 检测更新期间显示按钮禁用样式 (
9a7cdb83) - fix(proxy): strip unsupported Anyrouter Codex metadata (
f31b0d05) - docs(www): 同步定时检测与站点功能说明 (
c29616ee) - refactor(codex): remove quota overage feature (
7c2068b8) - fix(oauth): accept masked composite keys (
5aa44bc7) - feat(codex): preserve manually configured models across OAuth refresh (
4aed5305) - test(codex): align reimport and refresh tests with preserved model config (
5a935a2e) - fix(oauth): persist detection quota progress and accumulated costs (
3cf8b601) - fix: prefer URL protocols for scheduled checks and add trend filter reset (
d3c4406d) - test: remove low-value and redundant test cases (
8fe6d59b) - fix(proxy): preserve Responses tool search and encrypted history (
d7082767) - fix(codex): stop generating legacy session headers (
be38b546) - feat(antigravity): align credential lifecycle and credits fallback (
9910a8f2) - fix(web): simplify Antigravity credits display (
f6f07fae) - fix: simplify Antigravity credits log marker (
c69f099a) - fix(web): populate management panel URL for new channels (
59b0a9bf) - feat(codex): support GPT Image 2.5 via Responses (
33f9455c) - fix(codex): preserve main quota cost when additional limits are active aliases (
67ff10c5) - fix(oauthcost): correct quota reset boundaries before rolling cost (
4918e75a) - feat(codex): support direct GPT Image 2.5 generation and editing (
8f9a2d25) - fix(oauth): prevent cascading quota refreshes and update Codex client identity (
2f6ae79d) - perf(ci): reduce test waits and refresh Go build caches (
e43e2074) - fix(ci): populate complete module cache before saving (
ef9c554e) - build(release): fetch Cursor bridge directly for container images (
4c47bcbd) - fix(proxy): detect stalled HTTP/2 upstream connections with PING (
54f0ae84) - fix(web): clarify model cooldown status with clock icon (
a0b05e2f) - feat: add CodeBuddy OAuth channel and DeepSeek V4.1 Flash pricing (
dfcf56f3) - feat(codebuddy): 完善文件授权并统一模型发现与敏感词处理 (
cfacf5d7) - fix(web): update language changes immediately and refine navigation layout (
345902ed) - feat(codebuddy): add scheduled check-ins and quota queries (
3fe75b40) - fix(proxy): classify Cloudflare challenges and rolling quota resets (
422b63ad) - fix(proxy): enforce token channel limits during cooldown fallback (
b5064663) - fix(web): preserve actual model redirect display (
0843ecd3) - feat(codebuddy): unify domestic and international OAuth (
fb6ae868) - fix(proxy): preserve forbidden status for restricted channels (
380aa2c7) - feat(opencode): show Go subscription usage on API-key channels (
53254343) - chore(cliproxy): sync core to fork/v8.85.0 (
19d76928) - fix(opencode): satisfy usage lint and batch-refresh tests (
c22bdab0) - fix: normalize CodeBuddy protocol conversion (
49c484b7) - fix(codebuddy): classify daily check-in replay by business code and message (
3f5495d3) - fix(channel): persist CodeBuddy check-in audit logs (
b19a1b76) - fix: parse Codex 6004 usage reset cooldown (
35f3c557) - feat(proxy): prefer native Codex for official Responses clients (
63c2c295) - fix(web): resample active channel usage on every list load (
48a9bd24) - fix(cursor): open Dashboard for User API Keys and reject CLI sessions (
cb8645af) - fix(proxy): inject anyrouter Claude Code fallback tools (
06467c7d) - fix(quota): preserve Codex active limit identity (
b680835b) - fix(web): allow Cursor empty credential submit (
601d0e80) - fix(ws): stop inheriting previous instructions (
7fdc2f9d) - fix(cursor): start a new SDK turn when tool session is gone (
0092d71b) - fix(cursor): classify tool turns and normalize SDK model ids (
6c11b1ee) - fix(ws): strip synthesized Codex OAuth instructions (
d18a18e9) - fix(proxy): prevent partial non-stream failover responses (
646b6aa0) - fix(web): derive cache metrics from data, not protocol or model name (
b553605c) - fix(codex): treat keepalive as heartbeat, not semantic output (
675a90b7) - feat(pricing): support custom model pricing (
273ca86c) - fix(pricing): preserve tier semantics and explicit zero high input prices (
db72bcca) - fix(cursor): serialize tool result classification and submission (
1a85573b) - fix(antigravity): restore Gemini quota cooldown and account fallback (
f9bce13b) - fix(codebuddy): match official CLI chat fingerprint and JWT iss host (
fa0df7e9) - fix(models): remove unavailable GPT-5.4 models from presets (
fac3d4d4) - fix(models): remove Codex Spark from model catalog (
75215ee3) - test: remove low-value and redundant assertions (
5444bad7) - fix(antigravity): restore signatures and support Responses web search (
b345a6d1) - chore(protocol): sync CLIProxyAPI core and adapters to fork/v8.90.0 (
bf2ead33) - fix(web): show API key notes and multipliers in model tests (
ca47ff68) - fix(anthropic): strip empty text blocks on native Claude Code passthrough (
26153644) - refactor(anthropic): fold empty-text strip into one Messages exit (
b43f34fc) - fix(failover): treat 413 like 400 so matching-model channels keep trying (
0cda43a9) - fix(failover): preserve websocket message-too-big close semantics (
fdf19dee) - test: remove low-value tests and consolidate contract coverage (
e3253965) - docs(www): update provider and pricing documentation (
f5eae617) - fix: reconcile OAuth quota costs and preserve tool history during retries (
91be8476) - fix(proxy): make operator abort respect downstream commit state (
30033e20) - fix(codex): update quota display when window duration changes (
65fdad19) - feat(channels): support per-key routing priorities (
cd02bfdb) - feat(channels): unify key selection around priorities (
4d471ea8) - feat(channels): add priority sorting dialog and improve editor layout (
108e9668) - fix(proxy): persist antigravity quota cooldown before URL fallback exit (
3bbfe35b) - fix(web): remove backdrop blur from channel editor modal (#160) (
269c4820) - fix(cursor): upgrade pinned bridge automatically and refresh dependencies (
641d3c64) - fix(web): align editor model cooldown time formatting (
8ede28de) - fix: reset plan-change quota state and unify cooldown recovery times (
807a7efa) - fix(proxy): preserve body rules across retries (
0ed9823f) - feat(web): support multiple channel test contents (
bf3d6f71) - refactor(app): simplify proxy hot paths and tests (
94c9a9b7) - fix(codex): isolate reserve quota usage and cost (
854806bb) - feat: 增加API Token登录开关及渠道显示控制的设置项 (
ba3d6565) - fix(web): align stats totals when channels are hidden (
2dc4cc6b) - fix(codex): bind quota costs to identity epochs (
41c7ec8e) - fix(codex): preserve quota epochs across lagging poll claims (
ec8fb1fe) - docs: sync README settings contract with runtime state (
046be046) - fix(antigravity): cap output tokens to target model limit (
1c31ff19) - fix(antigravity): 按实际上游模型裁剪输出上限并忽略大小写 (
0c30dd38) - fix(ws): stop processing SSE events after sending close 1009 for message-too-big (
7dfa6d12) - feat(codex): 将购买额度标准成本从周期窗口中拆出独立累计 (
f653bc5c) - fix(codebuddy): route international edition through WorkBuddy (#164) (
2a6f7365) - fix(codebuddy): align WorkBuddy catalog fingerprint (
81aac092) - feat(pricing): 支持按渠道设置模型价格 (#163) (
37df1301) - fix(pricing): bill Cursor channel tests with channel prices (
36419398) - feat: add Grok 4.7 and optimize batch model addition (
f85e5057) - perf: batch delete models across channels (
7d6990f4) - fix(proxy): 修复 OpenCode namespace 兼容和 Codex Credit 计费归属 (
04a9cb87) - fix(proxy): 批量恢复缺失的 Responses reasoning 历史项 (
74d7c811) - fix(admin): allow chat with disabled configured models (
447467c1) - feat: add TypeSafe error analysis and unify runtime settings (
d9c460c2) - feat(models): update Codex version and model pricing (
da9c7064) - fix(anthropic): bump forged Claude Code pin to 2.1.280 (
bcbb8795) - test(anthropic): use current CLI pin in native anyrouter fixtures (
d71c0e8b) - feat(models): serve Codex model manifest from local catalog (
6e35b6cb) - fix(models): filter Codex catalog by Responses capability (
93ce1cf1) - fix(models): 获取模型列表时使用渠道代理 (
d79f6931) - feat(models): support routed model variants and per-key targets (
6c6c52d4) - fix(models): probe cooling keys during replace refresh (
bfc0c724) - fix(cooldown): recognize INFERENCE_CAP_ERROR and parse "Try again in 2h 18m" (
2dacaa5f) - fix(jev): treat compound durations as a single reset candidate (
9c63e753) - fix(models): align key scopes in routing and checks (
1ac64f36) - fix: 探测失败保留 Key 范围,推断上限只冷却当前模型 (
7d1cb2b4) - fix: keep all models when an unrestricted key probe fails (
111e9131) - fix: preserve key scopes during model refresh (
4379053e) - fix(models): reject conflicting mappings after failed key probes (
7f433ac8) - fix(models): preserve effective routes after failed probes (
f0b1a724) - fix: preserve key model scopes and mixed cooldown fallback (
f9917eca) - fix(models): remove wildcard routing and harden key model scopes (
2592b760) - feat(anthropic): align Claude Code wire and count_tokens with sub2api (
d74eb184) - chore(protocol): sync CLIProxyAPI core and adapters to fork/v8.97.0 (
b2fd26a6) - fix(anthropic): harden Claude Code gateway cooldown, stream and routing (
30eba854) - test: isolate tests and self-tests from host proxy and temp dir (
79ee00f0) - fix(anthropic): isolate account pools and credential failures (
32170ea9) - fix(oauth): isolate HTTP pools by account and proxy (
cb482969) - feat(channels): show token speed in timing column (
bfbbdc75) - feat(anthropic): align OAuth wire with sub2api/CPA sanitizing and tool aliases (
40725a94) - feat(sync): automate core manifest refresh and streamline audits (
d37d5d6a) - feat: 模型id一对多时优化前端页面支持模型显示方式 (
e8a7fa4e) - feat(codex): align OAuth wire with the official client (
63db0e41) - feat(channels): sort request models in editor (
f8249f24) - feat(codex): pin sessions to one account and scope turn-state (
924c2dd9) - fix(codex): harden turn-state metadata tagging (
d461be15) - fix(anthropic): preserve cache controls and align mimic wire (
0f39f835) - fix(anthropic): keep custom system content when dropping CC banner blocks (
6adf6962) - fix(anthropic): align mimic wire with Claude Code 2.1.283 capture (
182a4382) - feat: 日志界面增加实际调用模型的显式显示 (
cdac6089) - feat: API token登陆时增加是否显示重定向模型的设置选项,与是否显示渠道名合并成一个选项 (
33ad4992) - fix(codex): repair malformed SSE with blank lines between event and data (
563c8e0c) - fix(proxy): scope protocol capability cache by model and channel (
05d5a2b1) - fix(jev): only analyze errors unresolved by local rules (
bc68d85d) - feat(oauthcost): add ledger cost view and rollback evidence (
41111b86) - feat(storage): record OAuth quota cost in a durable ledger (
01afbb6d) - feat(oauthcost): read quota costs from durable ledger (
1ee1cec7) - feat(storage): migrate legacy OAuth quota costs into ledger baselines (
9fb96886) - feat(storage): replicate OAuth quota ledger in hybrid mode (
90d492ab) - docs(billing): document the OAuth quota cost ledger contract (
fffb40b2) - fix(oauthcost): bound quota window advancement (
278985bc) - fix(admin): keep learned protocols on protocol-irrelevant channel edits (
713dcf0f) - perf(oauthcost): move ledger sum out of CAS write transaction and deduplicate window scans (
560a821f) - fix(logs): 去掉与实际模型文字重复的重定向角标 (
1e395c3b) - perf(oauthcost): aggregate quota cost views by segment in SQL (
f7ad1ad0) - chore(protocol): sync CLIProxyAPI core and adapters to fork/v9.0.0 (
b1d4626b) - feat(anthropic): query native quota reset credits on demand (
7e5c84ed) - feat(models): add gpt-6.1-sol and claude-sonnet-5-5, bump codex client to 0.159.2 (
280b28f0) - fix(admin): keep protocol capabilities when saving OAuth channels (
268d7fa0) - feat(oauth): add Claude quota redemption and account-bound Codex model capabilities (
838a0f86) - fix(proxy): use Claude uTLS for Anthropic web origins (
5e56f533) - ci: bound Go build caches and reuse caches across release builds (
fef951df) - test: simplify and parallelize batch model refresh tests (
46fe88c1) - test: isolate fixtures and parallelize independent app tests (
d955180b) - ci: avoid restoring stale Go module cache versions (
afcbfa47) - ci: record backend test events and summarize slow tests (
429d13ed) - ci: keep lint cache in GOCACHE and verify web assets in a separate job (
75027c26) - perf: seed default settings with a single multi-row insert (
0624041c) - test: use in-memory fixtures, parallelize app tests and prune low-value cases (
3e7fe75b) - fix(xai): align tool and reasoning protocols and refresh client version (
746b5148) - fix(anthropic): include reset credits in quota refresh (
4b377519) - test: remove low-value and redundant test coverage (
a18860ad) - fix(protocol): sync CLIProxy core and harden apply_patch streaming (
036efaad) - docs: rebuild intro site with promo video and split README into docs/guide (
8b842f53) - fix(usage): preserve cache TTL breakdown for repeated aggregate snapshots (
84037604) - fix(channels): allow Anthropic quota reset with remaining credits (
6032e162) - feat(homebrew): add installation and stable release integration (
6950a0fa) - fix(antigravity): cool model instead of channel on 404 NOT_FOUND (
0165aa32) - feat(web): sort model-test tables by name and dynamic priority, align plan badge colors and auth type order (
d907bb21) - feat(www): pre-render bilingual static site for SEO and clarify positioning (
e54a629a) - feat(www): submit pages to IndexNow on release (
29302577) - feat(anthropic)!: remove SessionKey authorization and align OAuth scopes (
0c9dd14c) - feat(www): replace emoji icons with build-time SVG and refresh visual design (
ac9a9b11) - feat(www): redesign homepage with split hero, bento, feature catalog and CTA (
a96d0d19) - docs(readme): rewrite intro and quick start for first-time users (
ae921f9c) - docs(claude): move upstream checkout and JSON duplicate-key rules into CLAUDE.md (
14973e02) - fix(anthropic): omit invalid thinking signatures on official replay (
aeca6fef) - feat(logs): record count_tokens requests under a dedicated log source (
139807d3) - test(anthropic): use a Claude-shaped signature in native finalize cache_control test (
4046decb) - fix(anthropic): only cloak thinking carriers identified as another provider (
c8467d69) - feat(anthropic): record history thinking omission in the request log (
8b75d1c8) - test(count_tokens): assert upstream failure debug log keeps the official response (
27d435ff) - fix(antigravity): surface in-stream error frames and join multi-line payloads (
e325ceb1) - chore(protocol): sync CLIProxyAPI core and adapters to fork/v10.3.0 (
b8114345) - fix(anthropic): omit Antigravity CAQS thinking on official Anthropic (
157bdd45) - fix(proxy): scope stream terminator synthesis and official Anthropic thinking checks (
e94e1ef6) - feat(web): redesign channel list and editor drawer (
b6267988) - feat(web): refresh topbar and remove nav flicker on page switch (
2c658d7c) - feat(web): rich channel menus, provider icons and OAuth credential restyle (
ad56e197) - feat(web): width-fitted model chips and compact mobile channel cards (
612675cd) - feat(channels): server-side header sorting and unified quota rows (
bc5adfaa) - feat(web): overview dashboard with usage tables and quota hint for API channels (
6c1ff138) - refactor: trim stats payloads and remove unused endpoints and dead code (
67c6d964) - refactor(web): remove redundant overview status badge (
d995214c) - docs: refresh README dashboard and logs screenshots (
6b92430f) - fix(web): stop filter dropdowns truncating labels (
f0119e70) - refactor(settings): hide image-managed update settings in containers (
c7763ffa) - feat(proxy): support specifying channel via x-ccload-channel-id and x-ccload-channel headers (#176) (
d3d4c37f) - refactor(proxy): simplify requested channel header filter (
9de193c5) - feat(metrics): expose rate_limited count in dashboard metrics (
713f1dec) - fix(web): polish admin UI consistency and interaction (
1e365ee0) - fix(web): reduce layout shift and refine dashboard/select UI (
6e47634c) - fix(oauth): follow ledger-confirmed early Codex quota resets (
e837db53) - fix(web): show log cost column with 3 decimal places (
3c57fcf2) - fix: correct channel probes, Anthropic test requests and editor layout (
f187a17f) - fix(web): remove redundant details from settings save confirmation (
cd615005) - style(logs): simplify pending request status appearance (
2c783933) - fix(antigravity): route search-only requests to googleSearch and drop 3.5 models (
0066552e) - refactor: consolidate shared channel and log logic (
95119e12)
Full Changelog: v4.10.2...v4.11.0