Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
506 commits
Select commit Hold shift + click to select a range
05e7232
fix(httpwire): retain request state after partial writes
sususu98 Aug 2, 2026
2228847
fix(claude): close the count_tokens cloaking gap
sususu98 Aug 2, 2026
ce7fcd9
fix(claude): keep client cancellation availability-neutral
sususu98 Aug 2, 2026
497cf49
fix(claude): pass Fast errors through without retry
sususu98 Aug 2, 2026
2959f9e
fix(claude): align OAuth exchange and account inspection
sususu98 Aug 2, 2026
3c58d18
test(claude): preserve adaptive thinking signatures
sususu98 Aug 2, 2026
7079349
feat(claude): enable TLS session resumption
sususu98 Aug 2, 2026
a5f6390
fix(claude): harden request lifecycle
sususu98 Aug 3, 2026
1214326
fix(claude): align OAuth betas with native accounts
sususu98 Aug 3, 2026
3e70208
fix(claude): keep custom token counts local
sususu98 Aug 3, 2026
903e41b
docs(claude): clarify exact fingerprint baseline
sususu98 Aug 3, 2026
43f8146
Merge pull request #4752 from sususu98/fix/claude-fingerprint-2.1.220
sususu98 Aug 3, 2026
56e533f
fix(claude): pair diagnostics with cache beta
sususu98 Aug 3, 2026
3904c40
fix(antigravity): strip propertyNames inside a property named "proper…
sususu98 Aug 3, 2026
26609e0
Merge pull request #4757 from sususu98/fix/antigravity-strip-property…
sususu98 Aug 3, 2026
3fac4a0
fix(claude): preserve cloak system block boundaries
sususu98 Aug 3, 2026
1e38a3a
fix: retry Home OAuth requests after unauthorized
LTbinglingfeng Jul 31, 2026
d952cb4
fix(home): reject disabled refreshed credentials
LTbinglingfeng Aug 1, 2026
063f9d3
fix(auth): reprepare Home credentials after refresh
LTbinglingfeng Aug 1, 2026
1df21b1
fix(usage): update token fingerprint after refresh
LTbinglingfeng Aug 1, 2026
b437d87
fix(auth): validate stream retry results
LTbinglingfeng Aug 1, 2026
a81b9e9
fix(home): report every unauthorized attempt
LTbinglingfeng Aug 1, 2026
0fc0286
chore: exclude test changes from Home fixes
LTbinglingfeng Aug 1, 2026
6f8f11a
fix(claude): carry caller system inputs into Claude system blocks
sususu98 Aug 3, 2026
9b11423
fix(claude): rebuild the Responses reasoning chain
sususu98 Aug 3, 2026
a88197f
Merge pull request #4698 from router-for-me/fix/home-401-refresh-reco…
LTbinglingfeng Aug 3, 2026
7fe8473
feat(codex): prepare multi-agent v2 tool definitions at the Responses…
luispater Aug 3, 2026
8cf1d46
fix(usage): account for Claude thinking tokens
sususu98 Aug 3, 2026
8d65350
Merge pull request #4767 from sususu98/fix/claude-thinking-tokens-usage
sususu98 Aug 3, 2026
4f5ec10
fix(codex): set `multi_agent_version` to v2 when optimizeMultiAgentV2…
luispater Aug 3, 2026
44d5e0b
fix(codex): preserve base64 PDF document blocks when converting Claud…
luispater Aug 3, 2026
7ea5e3a
fix: honor router skips for prepared stream routes
FlameMida Aug 3, 2026
50e2a99
chore: add .pi to .gitignore
sususu98 Aug 4, 2026
b782d43
feat(api): add Grok Shell-aware `/v1/models` handling with dedicated …
luispater Aug 4, 2026
9b8d974
fix(responses): preserve original request model on response.created/r…
luispater Aug 4, 2026
82d6242
fix(responses): always emit `response.usage.output_tokens_details.rea…
luispater Aug 4, 2026
41fc0ba
docs: change Kimi open platform links in READMEs
luispater Aug 4, 2026
f27be00
Merge pull request #4771 from FlameMida/fix/prepared-route-skip-recur…
luispater Aug 4, 2026
32f1069
Merge pull request #4668 from oscarbrey/fix/grok-imagine-video-1.5-ga
luispater Aug 4, 2026
42eef10
feat(antigravity): obfuscate sensitive words in system instructions
luispater Aug 4, 2026
29bdd3c
docs: remove AICodeMirror sponsor section from all READMEs and delete…
luispater Aug 4, 2026
690f93d
fix(openai): drop OpenAI stream chunks after `[DONE]`
luispater Aug 4, 2026
6e92e3e
docs: add EasyCLIProxyAPI desktop client recommendation to README tra…
luispater Aug 4, 2026
e400d71
feat(xai): bump client version to 0.2.120 and include Grok Shell auth…
luispater Aug 4, 2026
076ec64
fix(home): preserve requested usage metadata before auth preparation
sususu98 Aug 5, 2026
533b69e
fix(claude): skip context management when thinking is disabled
DefinitelyNotSpammy Aug 5, 2026
ea37d13
fix(responses): support custom tool calls and namespace collisions in…
luispater Aug 5, 2026
e5ea945
feat(codex): add model-level `is-compat` flag to rewrite MultiAgentV2…
luispater Aug 5, 2026
7fef08e
feat(codex): add model-level `is-compat` flag to rewrite MultiAgentV2…
luispater Aug 5, 2026
94808f1
fix(responses): correct request wrapper detection in antigravity resp…
luispater Aug 5, 2026
2e91e99
fix(responses): translate `text.format` into `response_format` in req…
luispater Aug 5, 2026
65fc536
fix(auth): preserve session affinity across priorities
sususu98 Aug 6, 2026
dcee14d
feat(compat): preserve compat-mode thinking/signature blocks for API-…
luispater Aug 6, 2026
f1a21a9
fix(responses): merge consecutive OpenAI response turns and align too…
luispater Aug 6, 2026
71e8711
fix(claude): accumulate consecutive role turns during request conversion
luispater Aug 6, 2026
fe28d58
fix(openai): expose only client-fault streaming errors
sususu98 Aug 6, 2026
c1d69e7
fix(auth): avoid penalizing credentials for client faults
sususu98 Aug 6, 2026
579f5e3
fix(auth): rotate credentials for unknown upstream failures
sususu98 Aug 6, 2026
b148af8
fix(api): escape the model name in the unroutable model error
sususu98 Aug 6, 2026
1674aaf
fix(cliproxy): canonicalize thinking-suffix model states for cooldown…
luispater Aug 6, 2026
8392b18
fix(cliproxy): avoid credential cooldown for connection-lifecycle dis…
luispater Aug 6, 2026
148eff2
feat(docs): add Infistar.ai sponsorship information and logo to docum…
LTbinglingfeng Aug 6, 2026
5e25566
fix(codex): normalize reasoning and function_call item IDs during inp…
luispater Aug 6, 2026
0a95fa6
feat(compat): preserve Claude thinking/tool-call content for is-compa…
luispater Aug 6, 2026
dd67f56
fix(xai): remap bad-credentials 403s to unauthorized
luispater Aug 6, 2026
a4a8773
chore(.gitignore): add missing entries for AGENTS.override.md, .gocac…
sususu98 Aug 7, 2026
9e9230a
Merge branch 'docs/add-infistar-sponsor' into dev
LTbinglingfeng Aug 7, 2026
d40bd77
fix(.gitignore): update .llm-wiki entry to exclude trailing slash
sususu98 Aug 7, 2026
34364ff
Prevent large Gemini payloads from being duplicated during normalization
Aug 7, 2026
c30e60a
Reduce Codex request amplification for large payloads
Aug 7, 2026
035f548
Revert "docs: remove AICodeMirror sponsor section from all READMEs an…
luispater Aug 7, 2026
31a4e9b
fix(cliproxy): preserve route model on built-in selector cooldown errors
luispater Aug 7, 2026
37609fa
fix(claude): synthesize belated tool_use starts for empty-name calls
luispater Aug 7, 2026
4b3cc55
fix(cliproxy): centralize client error status mapping and apply conte…
luispater Aug 7, 2026
3693634
fix(kimi): canonicalize K2.7 Code model aliases to official Kimi-For-…
luispater Aug 7, 2026
e64cdbf
fix(codex): resolve credential-aware model before forwarding API-key …
luispater Aug 7, 2026
01a21b7
fix(cliproxy): delegate OpenAI-compatible OAuth refresh to plugin aut…
luispater Aug 7, 2026
9829bd9
fix(cliproxy): stop non-streaming keep-alive after OpenAI handler exe…
luispater Aug 7, 2026
aff2095
fix(codex): deduplicate Responses tools when converting to OpenAI Cha…
luispater Aug 7, 2026
8558f44
feat(signature): identify Kimi thinking signatures by fixed size
sususu98 Aug 7, 2026
4abb0e6
feat(signature): add Grok as a target-only provider family
sususu98 Aug 7, 2026
197f520
fix(codex): normalize `custom_tool_call` IDs with `ctc_` prefix durin…
luispater Aug 8, 2026
ea8882b
Add a no-copy GJSON parse helper
sususu98 Aug 8, 2026
b7a4415
Reduce Antigravity request amplification for large payloads
sususu98 Aug 8, 2026
9992920
Avoid copying large payloads in Antigravity reads
sususu98 Aug 8, 2026
1737596
Make the payload-reuse guards able to fail
sususu98 Aug 8, 2026
b921b5d
Review: tighten the in-place byte write guard
sususu98 Aug 8, 2026
3522e48
fix(openai): emit `response.failed` stream errors for Codex requests
luispater Aug 8, 2026
2e6b1d8
fix(claude): add Claude-compatible thinking replay persistence for mu…
luispater Aug 8, 2026
4906ead
fix(openai): finalize open response items on `[DONE]` when final chun…
luispater Aug 8, 2026
3741184
fix(openai,claude): normalize Responses custom tool-call identity wit…
luispater Aug 9, 2026
5314b29
fix(codex): forward sequential cutoff reasoning summaries
shoucandanghehe Aug 9, 2026
673bac5
fix(codex): normalize `custom_tool_call_output` IDs with `ctco_` pref…
luispater Aug 9, 2026
6710a5a
Merge pull request #4865 from shoucandanghehe/fix/codex-sequential-cu…
luispater Aug 9, 2026
a6825fe
fix(xai): normalize forced web_search `tool_choice` during Responses …
luispater Aug 9, 2026
93c378b
fix(claude): recover malformed OAuth MCP aliases when reverse-remappi…
luispater Aug 9, 2026
ecc9aa7
fix(openai): preserve assistant content when converting Responses too…
luispater Aug 9, 2026
45ffd11
fix(auth): rotate keys after DeepSeek insufficient balance
sususu98 Aug 10, 2026
d0d7718
fix(auth): rotate DeepSeek authentication failures
sususu98 Aug 10, 2026
9c8e4a0
fix(auth): prioritize rate-limit status over error body
sususu98 Aug 10, 2026
bd34cec
feat(codex): add realtime hangup forwarding and local client-secret s…
luispater Aug 10, 2026
5d9b629
fix(runtime): close per-request uTLS HTTP/2 connections with request …
luispater Aug 10, 2026
ba5ab79
feat(plugin): add schema-v3 stream chunk contract to omit payload req…
luispater Aug 10, 2026
9eedbc2
perf(antigravity): index reasoning replay requests
sususu98 Aug 10, 2026
0e4c0da
refactor(antigravity): document replay index lifecycle and align empt…
sususu98 Aug 10, 2026
984836b
refactor(antigravity): route replay merge through the request index
sususu98 Aug 10, 2026
bb7278a
perf(antigravity): skip replay index rebuilds no item can observe
sususu98 Aug 10, 2026
177c761
test(antigravity): clear credits state in place to fix a cleanup data…
sususu98 Aug 10, 2026
d5f6885
perf(antigravity): batch pre-upstream JSON rewrites
sususu98 Aug 11, 2026
cf8c27f
perf(antigravity): translate each upstream request once
sususu98 Aug 11, 2026
5fa6629
fix(antigravity): preserve request plugin hook semantics
sususu98 Aug 11, 2026
c33a33e
perf(antigravity): reuse native upstream connections
sususu98 Aug 11, 2026
516ec3a
fix(antigravity): harden per-credential transport pooling
sususu98 Aug 11, 2026
f0034ca
fix(claude): restore cloaked prompt-cache ownership and native shape
sususu98 Aug 11, 2026
a8bbbea
fix(claude): recognize and pass through native Haiku helpers
sususu98 Aug 11, 2026
8638f28
fix(claude): drop auto context_management without eligible thinking
sususu98 Aug 11, 2026
189776a
fix(claude): validate legacy-model system turns before sending
sususu98 Aug 11, 2026
db143ae
fix(codex): make input ID sanitization collision-resistant and determ…
luispater Aug 11, 2026
a59caeb
fix(kimi): treat `[reasoning unavailable]` as unusable reasoning in m…
luispater Aug 11, 2026
e9c44ae
fix(codex): fall back to current tool-call state when item IDs don’t …
luispater Aug 11, 2026
934da23
fix(openai): preserve structured and stringified custom tool outputs …
luispater Aug 11, 2026
522b4de
fix(openai): handle premature SSE stream termination with terminal er…
luispater Aug 12, 2026
b08fe3b
fix(codex): preserve multi-agent-v2 namespace handling across increme…
luispater Aug 12, 2026
17a479a
feat(management): add request-scoped proxy override for APICall
luispater Aug 12, 2026
a2337be
fix(kimi): select upstream request format from source format (Claude/…
luispater Aug 12, 2026
c845ce1
fix(openai): refactor websocket responses request merge/repair path
luispater Aug 12, 2026
2ab25ea
fix(codex): strip unsupported prompt_cache_options from OpenAI Respon…
luispater Aug 12, 2026
5b5f428
fix(claude): recover OAuth tool names with duplicated server alias pr…
luispater Aug 12, 2026
133047d
fix(codex): clear multi-agent-v2 optimization state on namespace conf…
luispater Aug 12, 2026
f43aad7
fix(codex): normalize request session header to `Session-Id` and prel…
luispater Aug 12, 2026
f9bd9de
perf(openai): reduce websocket transcript merge allocations
ramapitecusment Aug 12, 2026
e7c3fb1
test: make race detector suite deterministic
ramapitecusment Aug 12, 2026
f8bcd1c
test(openai): harden websocket transcript allocation coverage
ramapitecusment Aug 12, 2026
49b2f89
fix(openai): preserve duplicate websocket input semantics
ramapitecusment Aug 12, 2026
baa11ed
fix(openai): match websocket item metadata case-insensitively
ramapitecusment Aug 12, 2026
75d2c4a
fix(openai): avoid JSON copies in websocket responses tool-call repai…
luispater Aug 12, 2026
8b54db3
fix(translator): drop Gemini hidden thought parts during request conv…
luispater Aug 12, 2026
6f2cea9
feat(config): add per-credential request-retry override support
luispater Aug 12, 2026
db35b91
feat(openai): add xAI Grok Imagine Image 2.0 image model support
luispater Aug 13, 2026
323b727
feat(registry): add model modality metadata to registry definitions
luispater Aug 13, 2026
a40d0e6
fix(docs): update FennoAI sponsorship details and links in README files
LTbinglingfeng Aug 13, 2026
d757063
fix(docs): update RunAPI registration links in README files
LTbinglingfeng Aug 13, 2026
7ea9c67
feat(registry): add Gemini 3.7 Flash High model definition
luispater Aug 13, 2026
f2d272d
fix(claude): recover OAuth tool aliases for repeated prefixes and mal…
luispater Aug 14, 2026
7cf9279
fix(gemini): skip zero-token usage placeholders and always finalize s…
luispater Aug 14, 2026
f6f03e4
fix(claude): use BIP-39 words for OAuth MCP tool aliases
sususu98 Aug 14, 2026
bdde638
fix(claude): pass through caller MCP tools on alias server collision
sususu98 Aug 14, 2026
8d670b9
fix(translator): make Gemini tool call IDs deterministic and robustly…
luispater Aug 14, 2026
b90d8ee
fix(auth): preserve custom auth-file metadata during token refresh an…
luispater Aug 14, 2026
6edf9c4
fix(translator): strip nested `prompt_cache_breakpoint` from Codex Re…
luispater Aug 14, 2026
fab077a
fix(claude): map refusal and sensitive stop reasons to `content_filter`
luispater Aug 14, 2026
98c98d6
fix(codex): cache multi-agent spawn-agent model data and invalidate o…
luispater Aug 14, 2026
78f0c40
fix(openai): mark truncated/filtered responses as incomplete and avoi…
luispater Aug 14, 2026
61c4fd8
fix(gemini): preserve `additionalProperties:false` for Antigravity re…
luispater Aug 14, 2026
8b02fed
Merge pull request #4928 from ramapitecusment/codex/websocket-transcr…
luispater Aug 14, 2026
810d4dd
Merge pull request #4360 from router-for-me/perf/skip-inactive-reques…
luispater Aug 14, 2026
203f5b1
fix(auth): avoid cooldown for request-scoped 401 request-faults
luispater Aug 14, 2026
297139c
fix(claude): keep tool_result blocks first when injecting currentDate
mardausdennis Aug 14, 2026
ac82bed
fix(claude): add Anthropic unified rate-limit parsing helpers
luispater Aug 15, 2026
e0b4956
fix(openai): ensure Responses usage includes token detail fields
luispater Aug 15, 2026
dd21444
feat(models): add GPT-5.6 Sol Work Mode model registrations and Codex…
luispater Aug 15, 2026
046b59e
feat(models): add max_completion_tokens to model definitions and resp…
hkfires Aug 15, 2026
9169ad5
fix(auth): make session-affinity updates safe for rebound sessions
luispater Aug 15, 2026
48d0218
Merge pull request #4994 from router-for-me/models
hkfires Aug 15, 2026
f53a2b6
fix(gemini): merge conditional schema branches during JSON schema cle…
luispater Aug 15, 2026
10afcc8
fix(openai): propagate environment context and sanitize antigravity g…
luispater Aug 15, 2026
c1ff55f
chore(models): remove GPT-5.6 Sol Work Mode registrations from model …
luispater Aug 15, 2026
1ecb7df
fix(claude): deduplicate duplicate tool outputs in OpenAI-to-Claude r…
luispater Aug 15, 2026
616d1b1
fix(claude,gemini,antigravity): centralize tool-call ID generation an…
luispater Aug 15, 2026
124dab6
perf(translator): batch assemble response arrays and merge multi-choi…
luispater Aug 15, 2026
a581838
fix(gemini): simplify OpenAI chat response content and choices serial…
luispater Aug 15, 2026
0c58c3c
perf(translator): batch assemble translation arrays before writing JSON
luispater Aug 15, 2026
8b3b304
perf(translator): switch response translators to batched raw-array in…
luispater Aug 15, 2026
7efe0a7
pref(claude): keep raw Claude tool IDs for deduplication in request t…
luispater Aug 15, 2026
92f03e6
fix(claude,gemini,openai): preserve upstream stream errors when no da…
luispater Aug 15, 2026
7eefab9
feat(claude): map OpenAI `service_tier` to Claude `speed` in response…
luispater Aug 15, 2026
e23395a
test(antigravity): cover schema sanitizer semantics
Aug 16, 2026
7d55d0d
fix(antigravity): preserve schema semantics
Aug 16, 2026
361fe95
Merge pull request #5008 from shengyy/fix/antigravity-schema-semantics
luispater Aug 16, 2026
aa10847
feat(auth): add request-scoped error action handling in conductor
luispater Aug 16, 2026
00c4377
fix(auth): share session affinity across model variant suffixes
luispater Aug 16, 2026
75e2454
docs(readme): remove obsolete ecosystem links for PPAP and Alex
luispater Aug 16, 2026
b8fbe70
fix(auth): stop old selectors when replacing manager selector and har…
luispater Aug 16, 2026
5bffd15
Refactor cooling management across configuration and handlers
hkfires Aug 17, 2026
745fb38
chore(models): update GPT-5.6 context limits in registry metadata
luispater Aug 17, 2026
856ddd8
Merge pull request #5026 from router-for-me/cooling
luispater Aug 17, 2026
a8f9814
fix(claude): keep Fable-only rate limits model scoped
DEAN-Cherry Aug 17, 2026
7815449
add bestproxy sponser
LTbinglingfeng Aug 17, 2026
d3a5988
docs: temporarily hide Qiniu Cloud and FennoAI sponsors
LTbinglingfeng Aug 17, 2026
45c90e8
fix(websocket): drop consumed compaction triggers
DragonFSKY Aug 17, 2026
628f535
docs(readme): link Bestproxy free trial
LTbinglingfeng Aug 18, 2026
20f84e7
fix(gemini): support mixed and structured `function_call_output` hand…
luispater Aug 18, 2026
3230e37
fix(claude): accept both `max_tokens` and `max_completion_tokens` in …
luispater Aug 18, 2026
d388a4b
Merge pull request #5043 from DragonFSKY/fix/consumed-compaction-trigger
luispater Aug 18, 2026
9826bd7
Merge pull request #5050 from router-for-me/sponsor/add-bestproxy
LTbinglingfeng Aug 18, 2026
ee2c494
fix: update LMU registration links in README files
LTbinglingfeng Aug 18, 2026
f985a5c
Merge pull request #5033 from DEAN-Cherry/fix/claude-fable-model-scop…
luispater Aug 18, 2026
f1b0431
feat(claude): add fingerprint-profile=claude-code-cli for API keys an…
sususu98 Aug 18, 2026
aec70df
fix(claude): gate CCH signing by upstream origin and validate fingerp…
sususu98 Aug 18, 2026
f3e836c
refactor(claude): deduplicate CLI identity application and tidy helpers
sususu98 Aug 18, 2026
e424bfa
feat(executor): support `$`-based custom headers from downstream requ…
luispater Aug 18, 2026
4ac37ed
fix(claude): always send `stop` as an array when converting `stop_seq…
luispater Aug 18, 2026
497673b
feat(antigravity): add `video_url` content part support to OpenAI req…
luispater Aug 18, 2026
55397bf
fix: remove temporarily hidden sponsorship details from README files
LTbinglingfeng Aug 19, 2026
62f5a27
fix(executor): prepend empty user turn for model-first Gemini/Antigra…
sususu98 Aug 19, 2026
79ef361
fix(antigravity): attach sibling tool images to the nearest functionR…
sususu98 Aug 19, 2026
0f69f09
fix(logging): exclude HTTP 499 and client cancellations from forced e…
sususu98 Aug 16, 2026
5fef17e
fix(claude): pass incoming headers when applying custom headers in ca…
sususu98 Aug 19, 2026
ac0d188
fix(gemini): strip 'encrypted' metadata from tool parameters schemas …
sususu98 Aug 19, 2026
2005788
fix(codex): filter out `prompt_cache_retention` in OpenAI→Codex respo…
luispater Aug 19, 2026
ec105da
fix(cliproxy): handle `responses/compact` auth cooldowns and fallback…
luispater Aug 19, 2026
788e9b7
fix(claude): restore tool_search_tool_result references and recognize…
sususu98 Aug 19, 2026
8aa6868
fix(claude): support setup-tokens and gracefully handle 403 OAuth pro…
sususu98 Aug 19, 2026
85d2fad
fix(claude): preserve native subagent and environment headers (#4982)…
sususu98 Aug 19, 2026
9dc51b1
feat(cliproxy): add OAuth request-scoped error rules support
luispater Aug 19, 2026
4874971
fix(cliproxy): add warn-level diagnostics for auth cooldown and upstr…
luispater Aug 19, 2026
556328c
feat(gemini): add namespace-aware OpenAI Responses tool resolution an…
luispater Aug 20, 2026
92d96e0
fix(cliproxy): support base_URL-only config credentials and skip stal…
luispater Aug 20, 2026
4b9d404
feat(codex): add opt-in stream bootstrap buffering and overload failo…
sususu98 Aug 20, 2026
9d6b5cd
fix(xai): treat response.incomplete as terminal success (#5113)
YogaSakti Aug 20, 2026
42d8e74
fix(claude): avoid long global cooldowns for Fable-only 7d_oi rate li…
luispater Aug 20, 2026
aa5dccc
fix(claude): use `message.reasoning_content` for converted thinking o…
luispater Aug 20, 2026
8eb3ac2
`fix(openai): fallback to `reasoning` when `reasoning_content` is mis…
luispater Aug 20, 2026
3db591e
fix(gemini): preserve Gemini thought signatures in non-stream Claude …
luispater Aug 20, 2026
5b232e3
fix(gemini): generate deterministic sequential IDs for Gemini tool ca…
luispater Aug 20, 2026
68e96c2
fix(openai): map `max_completion_tokens` to Antigravity `maxOutputTok…
luispater Aug 20, 2026
a8693c7
Merge pull request #5124 from YogaSakti/fix/xai-response-incomplete
luispater Aug 20, 2026
b1c0005
fix(gemini): include empty annotations/logprobs in `response.output_i…
luispater Aug 20, 2026
4053c02
fix(executor): sanitize thought signatures in Gemini and Gemini Verte…
warelik Aug 21, 2026
1d5b761
fix(cliproxy): add protocol-aware plugin executor usage parsing for r…
luispater Aug 21, 2026
85e7add
feat(models): add Gemini 3.7 Flash model registrations to model registry
luispater Aug 21, 2026
601ca43
feat(auth): add credential retry round contract
hkfires Aug 21, 2026
0a14eb7
feat(auth): add retry round credential filtering
hkfires Aug 21, 2026
e04d620
feat(auth): normalize credential metadata keys
hkfires Aug 22, 2026
71c3c14
fix(registry): detect gemini interactions changes
hkfires Aug 22, 2026
dfdf183
fix(xai): keep image_generation on grok-4.6+ conversation requests
HuiCheng Aug 22, 2026
87fb01b
fix(xai): drop orphaned tool_choice after compact strips tools
HuiCheng Aug 22, 2026
d9869ed
test(openai): expand reasoning fallback coverage in OpenAI responses …
luispater Aug 22, 2026
65071f7
test(claude): expand OpenAI conversion tests for `reasoning_content` …
luispater Aug 22, 2026
a834917
fix(antigravity): raise the fallback client version to 2.9.1 (#5175)
YogaSakti Aug 22, 2026
b3f72ce
fix(gemini): normalize Claude thinking signatures in Gemini request a…
luispater Aug 22, 2026
ab8f00d
fix(claude): derive stable request-scoped `metadata.user_id` for conv…
luispater Aug 22, 2026
ebda750
feat(auth): enhance key deletion and patching with base URL validation
hkfires Aug 22, 2026
eeaa2e1
Merge pull request #5176 from router-for-me/auth
luispater Aug 22, 2026
d5b57a2
fix(openai): validate and filter thought signatures in responses conv…
luispater Aug 22, 2026
4d68ca8
fix(codex): convert Grok client keepalive SSE frames to comments
luispater Aug 22, 2026
7d5b23f
Merge pull request #5174 from HuiCheng/fix/xai-keep-image-generation-…
luispater Aug 22, 2026
1be8417
Merge pull request #5177 from YogaSakti/fix/antigravity-fallback-version
luispater Aug 22, 2026
a7e3596
fix(gemini): normalize malformed schema nodes before cleanup
luispater Aug 22, 2026
ccad731
Merge tag 'v7.2.140' into chore/sync-upstream-v7.2.140
Aug 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 12 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ config.yaml

# Generated content
bin/*
logs/*
/logs
conv/*
temp/*
refs/*
Expand All @@ -33,6 +33,7 @@ docs/*
AGENTS.md
CLAUDE.md
GEMINI.md
AGENTS.override.md

# Tooling metadata
.vscode/*
Expand All @@ -44,15 +45,24 @@ GEMINI.md
.serena/*
.agent/*
.agents
.pi
.agents/*
.opencode/*
.idea/*
.beads/*
.bmad/*
_bmad/*
_bmad-output/*
.gocache/
.gitnexus/

# macOS
.DS_Store
._*
.gocache/

# docker
docker-compose.override.yml


# Local LLM Wiki vault
.llm-wiki
11 changes: 4 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,9 @@ When `reasoning_content` is absent or empty in the upstream response, fall back

Remove `cache_control` from `messages[].content[]`, `system[]`, `tools[]`, and message-level fields before translation.

### Patch 3 — OAuth access tokens use `Authorization: Bearer …` (Claude executor auth)
### Patch 3 — RETIRED (upstream since v7.2.140, deployment uses OAuth files)

`internal/runtime/executor/claude_executor.go` (two call sites: `PrepareRequest` and `applyClaudeHeaders`).

When the credential's API key starts with `sk-ant-oat01-`, route via `Authorization: Bearer …` instead of `x-api-key`. Real `sk-ant-api03-*` API keys keep the existing `x-api-key` routing.
Previously: OAuth access tokens (`sk-ant-oat01-*`) stored in `claude-api-key:` entries were routed via `Authorization: Bearer …` instead of `x-api-key`. Retired in the v7.2.140 sync because (a) upstream now detects OAuth tokens natively (`isClaudeOAuthToken` in `internal/runtime/executor/claude_executor_request.go` forces Bearer on the request path), and (b) the AMPECO deployment migrated from `claude-api-key:` token entries to OAuth credential files (`--claude-login`), so the api-key code path no longer carries OAuth tokens at all.

### Patch 4 — strip Claude entries from the `antigravity` model catalog

Expand All @@ -35,9 +33,8 @@ Strip every entry whose `id` starts with `claude-`, whose `type` is `claude`, or
## Tests

```bash
go test ./internal/translator/openai/claude/... # Patches 1 + 2
go test ./internal/runtime/executor/ -run 'OAuthAccessTokenUsesBearerAuth|ApiKeyStillUsesXApiKey' # Patch 3
go test ./internal/registry/... # Patch 4 (catalog integrity)
go test ./internal/translator/openai/claude/... # Patches 1 + 2
go test ./internal/registry/... # Patch 4 (catalog integrity)
```

## Rebase
Expand Down
52 changes: 33 additions & 19 deletions README_CN.md

Large diffs are not rendered by default.

50 changes: 32 additions & 18 deletions README_JA.md

Large diffs are not rendered by default.

Binary file added assets/bestproxy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed assets/catapi.png
Binary file not shown.
Binary file added assets/infistar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/lmuai.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 5 additions & 1 deletion assets/logo/kimi.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
67 changes: 58 additions & 9 deletions cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import (
"github.com/router-for-me/CLIProxyAPI/v7/internal/util"
sdkAuth "github.com/router-for-me/CLIProxyAPI/v7/sdk/auth"
coreauth "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/auth"
sdkpluginstore "github.com/router-for-me/CLIProxyAPI/v7/sdk/pluginstore"
log "github.com/sirupsen/logrus"
)

Expand Down Expand Up @@ -152,6 +153,7 @@ func main() {
var configLoadedFromHome bool
var homeClient *home.Client
var homePluginSyncReport homeplugins.SyncReport
var homePluginStatusReady bool
var (
usePostgresStore bool
pgStoreDSN string
Expand Down Expand Up @@ -282,7 +284,11 @@ func main() {
homeCfg.DisableClusterDiscovery = true
}
homeClient = home.New(homeCfg)
defer homeClient.Close()
defer func() {
if homeClient != nil {
homeClient.Close()
}
}()

ctxHomeConfig, cancelHomeConfig := context.WithTimeout(context.Background(), 30*time.Second)
raw, errGetConfig := homeClient.GetConfig(ctxHomeConfig)
Expand All @@ -303,16 +309,53 @@ func main() {
parsed.Home = homeCfg
parsed.Port = 8317 // Default to 8317 for home mode, can be overridden by home config
parsed.UsageStatisticsEnabled = true
ctxHomePlugins, cancelHomePlugins := context.WithTimeout(context.Background(), 30*time.Second)
pluginSyncCfg := *parsed
parsed.Plugins.StoreAuth = nil
var errHomePlugins error
homePluginSyncReport, errHomePlugins = homeplugins.SyncWithReport(ctxHomePlugins, parsed, pluginHost)
cancelHomePlugins()
errReportPlugins := home.ReportPluginStatus(context.Background(), homeClient, homeCfg.NodeID, homePluginSyncReport)
platform := homeplugins.CurrentPlatform()
if pluginSyncCfg.Plugins.Enabled {
ctxHomePlugins, cancelHomePlugins := context.WithTimeout(context.Background(), 30*time.Second)
installedVersions, errInstalledPlugins := homeplugins.InstalledVersions(&pluginSyncCfg)
if errInstalledPlugins != nil {
homePluginStatusReady = true
errHomePlugins = errInstalledPlugins
homePluginSyncReport = homeplugins.CompletedSyncReport(platform, errInstalledPlugins)
} else {
pluginSyncRequest := sdkpluginstore.PluginSyncRequest{
SchemaVersion: sdkpluginstore.PluginSyncSchemaVersion,
GOOS: platform.GOOS,
GOARCH: platform.GOARCH,
InstalledVersions: installedVersions,
}
pluginSyncResponse, errFetchPlugins := homeClient.GetPluginSync(ctxHomePlugins, pluginSyncRequest)
errHomePlugins = errFetchPlugins
switch {
case errHomePlugins == nil:
homePluginStatusReady = true
homePluginSyncReport, errHomePlugins = homeplugins.SyncResolvedWithReport(ctxHomePlugins, &pluginSyncCfg, pluginSyncResponse.Items, pluginSyncResponse.ExpiresAt, pluginSyncRequest.InstalledVersions, pluginHost)
case errors.Is(errHomePlugins, home.ErrPluginSyncUnsupported):
homePluginStatusReady = true
homePluginSyncReport, errHomePlugins = homeplugins.SyncWithReport(ctxHomePlugins, &pluginSyncCfg, pluginHost)
default:
homePluginStatusReady = true
homePluginSyncReport = homeplugins.CompletedSyncReport(platform, errHomePlugins)
}
pluginSyncRequest.Clear()
pluginSyncResponse.Clear()
}
cancelHomePlugins()
} else {
homePluginStatusReady = true
homePluginSyncReport = homeplugins.CompletedSyncReport(platform, nil)
}
if errHomePlugins != nil {
log.Errorf("failed to fetch plugins from home: %v", errHomePlugins)
log.Errorf("failed to sync plugins from home: %v", errHomePlugins)
}
if errReportPlugins != nil {
log.Warnf("failed to report home plugin sync status: %v", errReportPlugins)
if homePluginStatusReady {
errReportPlugins := home.ReportPluginStatus(context.Background(), homeClient, homeCfg.NodeID, homePluginSyncReport)
if errReportPlugins != nil {
log.Warnf("failed to report home plugin sync status: %v", errReportPlugins)
}
}
if errHomePlugins != nil {
return
Expand Down Expand Up @@ -570,7 +613,7 @@ func main() {
// Register built-in access providers before constructing services.
configaccess.Register(&cfg.SDKConfig)
pluginHost.ApplyConfig(context.Background(), cfg)
if configLoadedFromHome {
if configLoadedFromHome && homePluginStatusReady {
errHomePluginLoad := homeplugins.MarkLoadResults(&homePluginSyncReport, pluginHost)
errReportPlugins := home.ReportPluginStatus(context.Background(), homeClient, cfg.Home.NodeID, homePluginSyncReport)
if errHomePluginLoad != nil {
Expand All @@ -583,6 +626,12 @@ func main() {
return
}
}
if homeClient != nil {
// The bootstrap client is not owned by the runtime service. Close it after
// the final startup report so it cannot retain an idle RESP connection.
homeClient.Close()
homeClient = nil
}
if pluginHost.HasTriggeredCommandLineFlags() {
if exitCode, handled := pluginHost.ExecuteCommandLine(context.Background(), os.Args[0], os.Args[1:], configFilePath, flag.CommandLine); handled {
if exitCode != 0 {
Expand Down
Loading
Loading