Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
243 commits
Select commit Hold shift + click to select a range
f5484b0
fix(registry): Conform Claude models listing to Anthropic API schema
dcrdev Jun 13, 2026
e3301ec
fix(registry): Emit Claude model created_at as RFC 3339 string
dcrdev Jun 13, 2026
c354f88
feat(api): Route Anthropic /v1/models requests to the Claude format
dcrdev Jun 14, 2026
1ed1f7b
Merge branch 'dev' into main
dcrdev Jun 15, 2026
acaf250
feat(management): add test to validate priority preservation in auth …
luispater Jun 17, 2026
cde5081
test(translator): add tests to validate omission of top-level `output…
luispater Jun 17, 2026
dd49a52
feat(translator): add tests to validate trailing assistant prefill st…
luispater Jun 17, 2026
78ba8ba
chore: remove Gemini CLI-related translator packages and logic
luispater Jun 18, 2026
365e8fc
feat(antigravity): HOME reasoning replay for Gemini models
sususu98 Jun 18, 2026
62c4b37
Revert "feat(antigravity): HOME reasoning replay for Gemini models"
sususu98 Jun 18, 2026
292456a
feat(antigravity): HOME reasoning replay for Gemini models
sususu98 Jun 18, 2026
b17d29a
fix(antigravity): insert replayed functionCall before matching functi…
sususu98 Jun 18, 2026
ef19f5f
fix(antigravity): address review on replay call_id and args parsing
sususu98 Jun 18, 2026
c55157d
fix(antigravity): PR review replay scope, signature merge, and tool keys
sususu98 Jun 18, 2026
ec8c2c2
test(antigravity): cover invalid-signature replay cache clear
sususu98 Jun 18, 2026
ac8fb97
feat(thinking): remove `thinkingConfig` for `ModeNone` with zero budg…
luispater Jun 18, 2026
c13dbcc
feat(translator): add test and logic to ensure `object` schemas inclu…
luispater Jun 18, 2026
41c52b9
test(management): add concurrency test for Codex OAuth session handling
luispater Jun 18, 2026
ae6c5ea
feat(runtime): add support for `gpt-image-1.5` and direct image API p…
luispater Jun 18, 2026
052f193
fix(auth): classify transport errors as `home_unavailable` with retry…
luispater Jun 18, 2026
1d0551a
feat(config): improve config reload handling and introduce async mana…
luispater Jun 18, 2026
c020e2d
feat(translator): drop `apply_patch` custom tool in OpenAI responses
luispater Jun 18, 2026
893412e
feat(translator): normalize `service_tier` in Codex requests and add …
luispater Jun 18, 2026
4926630
feat(translator): support namespace tools in OpenAI response transfor…
luispater Jun 18, 2026
d33ac5e
feat(auth): add transient error cooldown configuration and adjust ret…
luispater Jun 18, 2026
07c297a
feat(auth): add persistent cooldown state management with file-backed…
luispater Jun 18, 2026
aed54ad
feat(translator): preserve structured `tool_choice` in OpenAI respons…
luispater Jun 18, 2026
aa2ad99
feat(translator): preserve `input_image` details in OpenAI response c…
luispater Jun 18, 2026
041a065
Merge branch 'remove-gemini-cli' into dev
luispater Jun 19, 2026
1b849b6
feat(translator): attach `reasoning_content` to assistant and tool me…
luispater Jun 19, 2026
1581700
chore(deps): bump `github.com/jackc/pgx/v5` from v5.7.6 to v5.9.2
luispater Jun 19, 2026
51aa5ba
feat(translator): preserve `input_audio` fields in OpenAI request con…
luispater Jun 19, 2026
34639c3
feat(translator): defer Codex function call starts until function nam…
luispater Jun 19, 2026
c44d4fc
feat(schema): add removal of `$comment` and `enumDescriptions` in JSO…
luispater Jun 19, 2026
4c78e40
feat(auth): unify provider key handling with OpenAI compatibility sup…
luispater Jun 19, 2026
75fa626
feat(executor): normalize `parallel_tool_calls` based on `tools` pres…
luispater Jun 20, 2026
bc652c7
feat(translator): add support for `text.format` conversion in OpenAI …
luispater Jun 20, 2026
28e2f97
feat(executor): add session isolation for `grok-composer` models
luispater Jun 20, 2026
379167c
feat(translator): add benchmarking for `convertSystemRoleToDeveloper`…
luispater Jun 20, 2026
f66376f
feat(auth): add per-auth OAuth model alias support
luispater Jun 20, 2026
790ec30
feat(config): add support for `rebuild_mid_system_message` configuration
luispater Jun 20, 2026
b0ca379
Merge pull request #3834 from dcrdev/main
luispater Jun 20, 2026
a79ae80
feat(registry): improve model fallback logic and refactor Claude mode…
luispater Jun 20, 2026
b4bec34
feat(translator): sanitize `parametersJsonSchema` in OpenAI to Gemini…
luispater Jun 20, 2026
5771abb
feat(management): add `ResetQuota` endpoint and auth manager quota re…
luispater Jun 20, 2026
011ffe1
feat(translator): enforce FIFO order in tool call ID consumption for …
luispater Jun 20, 2026
57e1bf9
feat(translator): ensure preservation of tool and call IDs in Gemini …
luispater Jun 20, 2026
09179a7
feat(registry): add "max" level and remove deprecated Gemini models
luispater Jun 20, 2026
35c3d80
feat(translator): add support for handling video URLs in Gemini requests
luispater Jun 20, 2026
eb8d0d0
Merge pull request #3900 from sususu98/fix/antigravity-replay-fc-orde…
luispater Jun 20, 2026
bb414de
feat(api): add "max" reasoning depth and `service_tiers` to Codex cli…
luispater Jun 20, 2026
9a8098d
feat(api): prioritize non-template Codex client models and adjust pri…
luispater Jun 20, 2026
1f21f94
feat(api): implement support for multi-auth expansion in plugin systems
luispater Jun 20, 2026
31549af
fix(watcher): update Gemini provider name to "gemini-cli" in file syn…
luispater Jun 21, 2026
5bc0c68
feat(pluginhost): improve error handling with HTTP status codes for p…
luispater Jun 21, 2026
babef2a
feat(cliproxy): add `unregisterOpenAICompatExecutor` and sync runtime…
luispater Jun 21, 2026
369e560
feat(api): refactor provider key logic for API key usage and add test…
luispater Jun 21, 2026
1f2504e
fix(claude): bypass signature sanitizer for non-Claude models (#3946)
sususu98 Jun 21, 2026
079ec51
feat(cliproxy): optimize API key alias rebuild with deferred executio…
luispater Jun 22, 2026
36ed0e5
fix(codex): strip model prefix for websocket payloads
fdreamsu Jun 22, 2026
290f421
Merge pull request #3959 from fdreamsu/codex/fix-codex-ws-prefix
luispater Jun 22, 2026
c58da38
feat(plugins): sync home plugin manifests
hkfires Jun 22, 2026
5d9ea16
Merge pull request #3963 from router-for-me/home
luispater Jun 22, 2026
bd64681
test(translator, runtime): ensure empty text parts are skipped withou…
luispater Jun 23, 2026
7c390a7
feat(runtime): add Claude Code session handling with caching and tests
luispater Jun 23, 2026
f1ed891
feat(translator): wrap message-level system roles as user-visible rem…
luispater Jun 23, 2026
53a21df
[codex] Drop foreign encrypted_content before xAI Grok upstream (#3961)
sususu98 Jun 23, 2026
05d1792
feat(xai): replay Grok reasoning for Claude messages (#3962)
sususu98 Jun 23, 2026
e9a11db
feat(home): enhance plugin management and synchronization
hkfires Jun 23, 2026
b89c594
Merge pull request #3973 from router-for-me/home
luispater Jun 23, 2026
70053be
feat(auth): refactor credential kind detection and add dynamic source…
luispater Jun 23, 2026
3a13865
refactor(home): relocate and rename home plugin status reporting logic
luispater Jun 23, 2026
38ed7ae
fix(codex): sanitize downstream UA for direct image calls
sususu98 Jun 24, 2026
fd93ee0
feat(oauth): add force-mapping for upstream response model rewrite
sususu98 Jun 24, 2026
c20ac28
Merge pull request #3981 from sususu98/feat/oauth-model-alias-force-m…
luispater Jun 24, 2026
87e6d9c
feat(videos): add model binding and propagation for video auth manage…
luispater Jun 24, 2026
a183e72
feat(auth): add ParseAuths method for expanding credential payloads i…
hkfires Jun 24, 2026
a725027
fix(oauth): force-map responses to config alias not request suffix (#…
sususu98 Jun 24, 2026
df10a5b
feat(pluginhost): add shadow plugin management and cleanup functionality
hkfires Jun 24, 2026
7712ffe
Merge pull request #3986 from router-for-me/sdk
luispater Jun 24, 2026
b53d1e9
refactor(pluginhost): replace `Snapshot().records` with `activeRecord…
luispater Jun 24, 2026
810abe5
feat(pluginhost): add OAuthProvider field to plugin metadata and upda…
LTbinglingfeng Jun 25, 2026
29b5343
Merge pull request #3998 from router-for-me/feat/plugin-OAuth
LTbinglingfeng Jun 25, 2026
192888f
feat(pluginhost): enhance logging with plugin name and path fields
hkfires Jun 25, 2026
c4cf0fd
Merge pull request #4001 from router-for-me/plugin
luispater Jun 25, 2026
eb2e1e3
fix(auth): rewrite API key alias response models (#4002)
sususu98 Jun 25, 2026
7d1d251
docs: add Universal Chat Provider to "Who is with us?"
maxdew-envelio Jun 25, 2026
abe68cc
Merge pull request #4003 from maxdewald/add-universal-chat-provider
luispater Jun 25, 2026
cb6992e
docs: add Universal Chat Provider section to README files
luispater Jun 25, 2026
65f2288
feat(models): refine Gemini 3.5 Flash variants and add Medium tier
luispater Jun 25, 2026
6a59d64
feat(pluginhost): enhance plugin version management and logging for h…
hkfires Jun 26, 2026
4c0c602
Merge pull request #4009 from router-for-me/plugin
luispater Jun 26, 2026
2fa4dab
feat(executor): improve downstream response ID rewrite and add test f…
luispater Jun 26, 2026
b05a27e
docs(README): add CyberPay to partners section with multilingual updates
luispater Jun 27, 2026
21d8164
feat(handlers): add `disable-cooling` support in OpenAI compatibility…
luispater Jun 28, 2026
1f16e87
feat(pluginstore): introduce support for direct install type and vers…
hkfires Jun 28, 2026
884fc3c
Merge pull request #4035 from router-for-me/plugin
luispater Jun 28, 2026
60eae92
feat(plugins): enhance plugin deletion test and config handling
hkfires Jun 28, 2026
f106c41
Merge pull request #4036 from router-for-me/plugins
luispater Jun 28, 2026
00c0b4d
feat(auth): refactor authentication handling for plugins and add tests
hkfires Jun 28, 2026
c22795a
Merge pull request #4038 from router-for-me/plugins
hkfires Jun 28, 2026
3ea7f18
feat(pluginstore): add API URL to ReleaseAsset and update asset downl…
hkfires Jun 29, 2026
8970873
feat(auth): streamline GitHub token handling and enhance download ass…
hkfires Jun 29, 2026
caf7052
feat(pluginstore): refactor installation tests to improve asset downl…
hkfires Jun 29, 2026
dc43747
Merge pull request #4039 from router-for-me/plugin
hkfires Jun 29, 2026
c48516c
feat(tests): refactor snapshot handling in model registration tests f…
hkfires Jun 29, 2026
4b51f85
fix(translator): map OpenAI Responses reasoning to Gemini two-part si…
sususu98 Jun 29, 2026
3648bc1
fix(translator): align reasoning merge with Responses visible text rules
sususu98 Jun 29, 2026
ca7478a
fix(antigravity): align CLI User-Agent with agy 1.0.13 short form (#4…
sususu98 Jun 29, 2026
8c8009c
Merge pull request #4042 from router-for-me/plugin
luispater Jun 29, 2026
a26d384
Merge pull request #4043 from sususu98/fix/responses-gemini-reasoning…
luispater Jun 29, 2026
150e7f0
fix(auth): repair force-mapped Responses SSE framing for WS forwarder
sususu98 Jun 29, 2026
95b7cd4
Merge pull request #4051 from sususu98/codex/fix-force-mapped-antigra…
luispater Jun 29, 2026
8f68634
fix(responses): full transcript replay on WS-to-SSE Codex paths
sususu98 Jun 29, 2026
00114be
Merge pull request #4052 from sususu98/fix/responses-ws-to-sse-4048
luispater Jun 29, 2026
611d65e
Improve reasoning content handling in response logic
TooYoungTooSimp Jul 1, 2026
956ce7c
fix(registry): add Claude Sonnet 5 model metadata
wolfiesch Jul 1, 2026
e681910
Merge pull request #4069 from TooYoungTooSimp/patch-1
luispater Jul 1, 2026
e130264
feat(plugin): add methods for auth provider handling and plugin metad…
hkfires Jul 2, 2026
cde9336
Merge pull request #4080 from router-for-me/plugin
hkfires Jul 2, 2026
c1b952d
feat(docs): add Claude API sponsorship information to README files
LTbinglingfeng Jul 2, 2026
00787ef
fix(docs): correct link formatting for Claude API sponsorship in README
LTbinglingfeng Jul 2, 2026
87c091e
fix(docs): correct formatting and wording for Claude API sponsorship …
LTbinglingfeng Jul 2, 2026
ac21758
feat(docs): add Code0 sponsorship information to README files in Engl…
LTbinglingfeng Jul 2, 2026
f8334be
docs(README): update VisionCoder URLs in all language versions
luispater Jul 2, 2026
9e9c244
Merge pull request #4095 from router-for-me/readme-add
LTbinglingfeng Jul 3, 2026
5afc0f1
fix(translator): remove temperature parameter handling in Claude requ…
luispater Jul 3, 2026
df08038
fix: allow management access in example API key safe mode
hkfires Jul 4, 2026
4909493
feat(config): default enable WebsocketAuth in LoadConfigOptional and …
hkfires Jul 4, 2026
22bb89a
Merge pull request #4107 from router-for-me/safemode
hkfires Jul 4, 2026
3ef74dc
Merge pull request #4109 from router-for-me/websocket
hkfires Jul 4, 2026
270869d
fix(auth): escalate quota backoff once per cooldown window and jitter…
LTbinglingfeng Jul 5, 2026
0d23f79
fix(auth): keep jittered cooldown waits within max-retry-interval
LTbinglingfeng Jul 5, 2026
4a2a3b2
Merge pull request #4117 from router-for-me/quota-backoff-guard
LTbinglingfeng Jul 6, 2026
8b9c4da
feat(interactions): add support for Google Interactions
luispater Jul 5, 2026
3aa42a6
fix(auth): handle `invalid_grant` errors with retry suspension logic
luispater Jul 7, 2026
ab6ed39
test(executor): add unit test to validate complete SSE event passthro…
luispater Jul 7, 2026
dc77bf4
feat(translator): enhance Claude tool response handling with structur…
luispater Jul 7, 2026
078ed17
feat(openai): add support for input/output modalities in Codex client…
luispater Jul 7, 2026
4f157fb
fix(executor): map `message_too_big` WebSocket errors to structured A…
luispater Jul 7, 2026
dea4787
refactor(executor): centralize OpenAI stream usage handling with `Str…
luispater Jul 7, 2026
14b1396
refactor(translator): simplify response logic and enhance thinking co…
luispater Jul 7, 2026
505c59d
fix(auth): prevent credential overwrites for team-scoped plans with a…
luispater Jul 7, 2026
cdccc72
fix(translator): resolve pending codex tool calls on terminal response
luispater Jul 7, 2026
4f2e190
Update Antigravity hub user agent (#4142)
sususu98 Jul 8, 2026
7c47edb
feat(models): add Grok 4.5 to model registry with extended capabiliti…
luispater Jul 8, 2026
186c87b
feat(models): add `xhigh` targeting option to confidence level settings
luispater Jul 8, 2026
ec3aba2
feat(auth): enable automatic credential refresh on unauthorized errors
luispater Jul 8, 2026
c612108
feat(models): adjust thinking levels by removing "none" and "xhigh" o…
luispater Jul 8, 2026
3fd1892
feat(executor): integrate model registry for reasoning effort support…
luispater Jul 8, 2026
bea9567
feat(translator): add cache control handling for responses and messages
luispater Jul 8, 2026
d899c96
feat(translator): map OpenAI max_tokens to Gemini's maxOutputTokens
luispater Jul 8, 2026
53ebde0
feat(sponsorship): add Fenno.ai sponsorship details and logo to READM…
LTbinglingfeng Jul 9, 2026
bc279c6
feat(sponsorship): add Qiniu Cloud AI sponsorship details and logo to…
LTbinglingfeng Jul 9, 2026
1204101
feat(models): update `zero_allowed` thinking config to `false` in mod…
luispater Jul 9, 2026
ee71dc5
feat(auth/models): implement Claude model ID prefix handling and plug…
luispater Jul 9, 2026
db4f1ce
feat(validation): enhance cross-family level clamping with model type…
luispater Jul 9, 2026
0df267a
fix(xai): prevent Desktop hang on complex tool schemas and set free-u…
Wraient Jul 9, 2026
445de6c
feat(models): add GPT-5.6 models (Sol, Terra, Luna) to registry with …
luispater Jul 9, 2026
f21beb0
feat(models): register additional GPT-5.6 models (Sol, Terra, Luna) t…
luispater Jul 9, 2026
b4c5940
chore(models): update default client version and user agent, revise G…
luispater Jul 9, 2026
ef0a4a5
feat(middleware): support logging for Codex response websockets
luispater Jul 9, 2026
ed29334
fix: expose ultra reasoning effort to Codex clients
kogekiplay Jul 9, 2026
15f3037
feat(models): restrict Codex input modalities to text and image
luispater Jul 9, 2026
5f8899b
chore(models): remove GPT-5.6 Sol from model registry
luispater Jul 9, 2026
26d45fd
feat(models): add model header overrides from configuration
luispater Jul 9, 2026
f9162d3
feat(executor): add image generation function tool checks and corresp…
hkfires Jul 10, 2026
cfa90f9
Merge pull request #4175 from router-for-me/image
luispater Jul 10, 2026
35dba9b
chore(models): update default client version and user agent, revise G…
luispater Jul 10, 2026
20e61f2
Merge pull request #4160 from kogekiplay/fix/codex-client-ultra-reaso…
luispater Jul 10, 2026
bf25331
Merge pull request #4157 from Wraient/fix/xai-desktop-tool-schema-and…
luispater Jul 10, 2026
ca67caf
**fix(xai): improve namespace-specific tool parameter handling and si…
luispater Jul 10, 2026
f084eef
chore(models): remove "ultra" effort level from models.json
luispater Jul 10, 2026
1af2334
fix(oauth): reject unknown completed states
LTbinglingfeng Jul 10, 2026
f081b91
fix(plugin-store): preserve installed source identity
LTbinglingfeng Jul 10, 2026
d1ef06c
fix(oauth): hide completed sessions from legacy getter
LTbinglingfeng Jul 10, 2026
7115e7e
fix(oauth): make session completion idempotent
LTbinglingfeng Jul 10, 2026
0410992
Merge pull request #4185 from router-for-me/codex/fix-p2-oauth-plugin…
LTbinglingfeng Jul 10, 2026
631f7a6
fix(executor): enhance image generation tool handling for responses-l…
LTbinglingfeng Jul 10, 2026
3554b63
Merge pull request #4192 from router-for-me/codex/fix-sol-responses-l…
LTbinglingfeng Jul 10, 2026
abb5224
feat(translator): add support for `cache_write_tokens` in Codex respo…
luispater Jul 10, 2026
cc2095f
chore(docs): remove Unity2.ai sponsorship section from all README tra…
luispater Jul 10, 2026
045a964
feat(handlers): extend image-only model support with `grok-imagine-im…
luispater Jul 10, 2026
dc4be16
feat(usage): report request and response service tiers
LTbinglingfeng Jul 10, 2026
ea20742
fix(usage): retain response tier without usage
LTbinglingfeng Jul 10, 2026
3533484
feat(executor): add chat-proxy-specific headers and improve base URL …
luispater Jul 10, 2026
dc162b9
feat(executor): refactor XAI header application logic and extend test…
luispater Jul 10, 2026
bc812e5
perf(usage): avoid parsing irrelevant stream chunks
LTbinglingfeng Jul 10, 2026
6e819ab
feat(oauth): refactor for device flow and cancelable sessions, extend…
luispater Jul 10, 2026
8c2bf2c
Merge pull request #4202 from router-for-me/codex/issue-33-service-ti…
LTbinglingfeng Jul 10, 2026
aa05fb2
feat(executor, handlers): enhance websocket output restoration and co…
luispater Jul 11, 2026
e99a205
feat(executor): add `using_api` attribute support for API path toggle…
luispater Jul 11, 2026
759b30e
docs: add CPA-Tray-Powershell project
ztzpro Jul 11, 2026
2075f77
feat(executor): enhance `cache_tokens` handling and extend parsing lo…
luispater Jul 11, 2026
9418054
Merge pull request #4230 from IQ-Director/feature/tray-powershell
luispater Jul 11, 2026
f35539c
docs: add Cubence sponsorship details to all README translations
luispater Jul 12, 2026
6fc4f0c
docs: add FastAIToken sponsorship details to all README translations
luispater Jul 12, 2026
46e2894
fix(codex): proxy GPT-5.6 standalone search
Ozwasyd Jul 12, 2026
1a0bbe0
fix(executor): identify Grok CLI OAuth requests
BG-QWQ Jul 12, 2026
6c70996
feat(executor): add logging for resolved xAI base URL and enhance tes…
luispater Jul 12, 2026
042f1fe
feat(handlers): update method names for image execution with auth man…
luispater Jul 12, 2026
0ba5fab
Merge pull request #4240 from BG-QWQ/fix/xai-cli-user-agent-4233
luispater Jul 12, 2026
07455ec
fix(translator): 上游流式 tool_calls 缺少 id 时合成 call_id 保证事件链完整
MoYiC6 Jul 11, 2026
bd7cc64
feat(translator): 支持 Codex additional_tools 工具下发与 custom 工具历史回放
MoYiC6 Jul 11, 2026
bd2aafb
feat(translator): custom 工具调用以 custom_tool_call item 回放给客户端
MoYiC6 Jul 11, 2026
e9d3dfb
fix(translator): 工具输出与 custom input 解包的健壮性改进
MoYiC6 Jul 11, 2026
dc39f44
fix(translator): stabilize Responses Lite tool events
luispater Jul 12, 2026
f4a8aee
feat(translator): support namespace and custom tool handling in OpenA…
luispater Jul 12, 2026
3586d3e
feat(config): add support for configurable model display names across…
luispater Jul 12, 2026
041816c
feat(xai): encrypted reasoning replay for Responses/Claude with harde…
sususu98 Jul 10, 2026
dc551b7
refactor(xai): remove unused assistant content equal helpers
sususu98 Jul 10, 2026
dee653c
Merge PR #4239: fix(codex): proxy GPT-5.6 standalone search
luispater Jul 12, 2026
9c3f720
feat(codex): implement session affinity and request logging for alpha…
luispater Jul 12, 2026
55f4d6e
feat(codex): pass Gin context to auth selection for Alpha search
luispater Jul 12, 2026
3f875ec
fix(xai): avoid ambiguous reasoning replay injection
sususu98 Jul 12, 2026
0e3a3e6
fix(xai): preserve namespace tool routing
huahai0202 Jul 12, 2026
f1e9347
fix(xai): preserve tool-call-only replay batches
sususu98 Jul 12, 2026
c4eda81
fix(xai): address namespace routing review feedback
huahai0202 Jul 12, 2026
487f8af
fix(xai): disable unisolated replay without caller auth
sususu98 Jul 12, 2026
eb6d169
fix(xai): qualify namespaced tool choices
huahai0202 Jul 12, 2026
18d239d
fix(xai): clear replay after compaction
sususu98 Jul 12, 2026
5b7f236
Merge pull request #4190 from sususu98/pr/xai-sse-reasoning-replay
luispater Jul 12, 2026
e0a0b5a
feat(codex): add summary detection and processing for local compactio…
luispater Jul 12, 2026
4123e27
fix(xai): handle additional namespace tools
huahai0202 Jul 13, 2026
19fb0f0
Merge pull request #4251 from huahai0202/fix/xai-namespace-tool-routing
luispater Jul 13, 2026
e674f19
Fix xAI allowed tool namespace choices
luispater Jul 13, 2026
4fe2c60
feat(registry): remote-refresh Codex client model catalog (#4276)
sususu98 Jul 13, 2026
6279bb8
feat(ui): add provider SVG logos and descriptions in multilingual REA…
luispater Jul 13, 2026
ceaeb75
fix(codex): gate tool search by model providers
huahai0202 Jul 13, 2026
e73aad2
fix(codex): require model template for tool search
huahai0202 Jul 13, 2026
7efe8b3
Merge pull request #4278 from huahai0202/fix/disable-custom-tool-search
luispater Jul 13, 2026
7bb8132
fix(xai): normalize custom tool call history
vvanglro Jul 13, 2026
7f6d491
perf(executor): avoid O(n^2) rebuilds when sanitizing reasoning encry…
mazzz1y Jul 13, 2026
caa93a7
fix(xai): filter internal X search calls
vvanglro Jul 13, 2026
194fbce
fix(executor): strip orphan reasoning ids when store is disabled (#4285)
sususu98 Jul 13, 2026
4651c37
perf(xai): reuse parsed input array
vvanglro Jul 13, 2026
4fd81f9
Merge pull request #4284 from vvanglro/codex/fix-xai-x-search-history…
luispater Jul 13, 2026
a5577cc
feat(xai): enhance response filtering with client-declared tool suppo…
luispater Jul 13, 2026
423f3d5
feat(xai): add xAI API key support with comprehensive handling and tests
luispater Jul 13, 2026
a9831c8
fix(xai): sync allowed_tools and prune orphaned choices for x_search …
luispater Jul 13, 2026
2a63b27
fix(release): rename `GOARCH` to `TARGET_GOARCH` in release workflow …
luispater Jul 13, 2026
ea9640c
Merge tag 'v7.2.73' into chore/sync-upstream-v7.2.73
Jul 14, 2026
5a6c273
chore: refresh CI after disabling upstream-specific PR workflows
Jul 14, 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
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Our team doesn't have any GODs or ORACLEs or MIND READERs. Please make sure to a
A clear and concise description of what the bug is.

**CLI Type**
What type of CLI account do you use? (gemini-cli, gemini, codex, claude code or openai-compatibility)
What type of CLI account do you use? (gemini, codex, claude code or openai-compatibility)

**Model Name**
What model are you using? (example: gemini-2.5-pro, claude-sonnet-4-20250514, gpt-5, etc.)
Expand Down
51 changes: 51 additions & 0 deletions .github/scripts/refresh-model-catalogs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/usr/bin/env bash
set -euo pipefail

models_repository="${MODELS_REPOSITORY_URL:-https://github.com/router-for-me/models.git}"
models_ref="${MODELS_REPOSITORY_REF:-main}"
catalog_dir="${MODEL_CATALOG_DIR:-internal/registry/models}"
codex_catalog="$catalog_dir/codex_client_models.json"
codex_candidate="$(mktemp)"
trap 'rm -f "$codex_candidate"' EXIT

git fetch --depth 1 "$models_repository" "$models_ref"
git show FETCH_HEAD:models.json > "$catalog_dir/models.json"

if git show FETCH_HEAD:codex_client_models.json > "$codex_candidate" &&
go run ./cmd/validate_codex_models --file "$codex_candidate"; then
mv "$codex_candidate" "$codex_catalog"
printf 'Refreshed validated Codex client model catalog.\n'
else
printf '::warning::Remote Codex client model catalog is missing or invalid; using embedded fallback.\n'
fi

go run ./cmd/validate_codex_models --file "$codex_catalog"

# --- ampeco Patch 4: strip Claude entries from the antigravity catalog ---
# Antigravity's published catalog advertises Claude models served by Google's
# cloudcode-pa.googleapis.com. With those entries present, an antigravity OAuth
# becomes eligible alongside the Anthropic OAuth pool for `claude-*` selector
# picks; session-affinity then pins entire Claude Code sessions to the
# antigravity OAuth, exhausting its small Sonnet quota within hours. Strip them
# post-refresh so the antigravity OAuth is Gemini-only.
python3 - <<'PY'
import json
p = "internal/registry/models/models.json"
with open(p) as f:
d = json.load(f)
if "antigravity" in d:
before = len(d["antigravity"])
d["antigravity"] = [
m for m in d["antigravity"]
if not (
m.get("id", "").startswith("claude-")
or m.get("type", "") == "claude"
or m.get("owned_by", "") == "anthropic"
)
]
after = len(d["antigravity"])
print(f"antigravity catalog: {before} -> {after} entries ({before - after} claude stripped)")
with open(p, "w") as f:
json.dump(d, f, indent=2)
f.write("\n")
PY
18 changes: 12 additions & 6 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true
- name: Refresh models catalog
run: |
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
run: bash .github/scripts/refresh-model-catalogs.sh
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
Expand Down Expand Up @@ -50,10 +53,13 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true
- name: Refresh models catalog
run: |
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
run: bash .github/scripts/refresh-model-catalogs.sh
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
Expand Down
6 changes: 2 additions & 4 deletions .github/workflows/pr-test-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,13 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Refresh models catalog
run: |
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: go.mod
cache: true
- name: Refresh models catalog
run: bash .github/scripts/refresh-model-catalogs.sh
- name: Build
run: |
go build -o test-output ./cmd/server
Expand Down
176 changes: 21 additions & 155 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -127,51 +127,16 @@ jobs:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true
- name: Refresh models catalog
shell: bash
run: |
set -euo pipefail
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- name: Strip Claude entries from antigravity catalog (ampeco Patch 4)
# Antigravity's published catalog advertises Claude models served by
# Google's cloudcode-pa.googleapis.com. With those entries present, an
# antigravity OAuth becomes eligible alongside the Anthropic OAuth pool
# for `claude-*` selector picks. Session-affinity then pins entire
# Claude Code sessions (parent + sub-agents) to the antigravity OAuth
# whenever the parent request was a Gemini call, exhausting
# Antigravity's small Sonnet quota within hours. Strip them post-refresh
# so the antigravity OAuth is Gemini-only.
shell: bash
run: |
python3 - <<'PY'
import json
p = "internal/registry/models/models.json"
with open(p) as f:
d = json.load(f)
if "antigravity" in d:
before = len(d["antigravity"])
d["antigravity"] = [
m for m in d["antigravity"]
if not (
m.get("id", "").startswith("claude-")
or m.get("type", "") == "claude"
or m.get("owned_by", "") == "anthropic"
)
]
after = len(d["antigravity"])
print(f"antigravity catalog: {before} -> {after} entries ({before - after} claude stripped)")
with open(p, "w") as f:
json.dump(d, f, indent=2)
f.write("\n")
PY
run: bash .github/scripts/refresh-model-catalogs.sh
- name: Fetch tags
shell: bash
run: git fetch --force --tags
- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true
- uses: actions/cache@v4
with:
path: |
Expand Down Expand Up @@ -289,44 +254,13 @@ jobs:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true
- name: Refresh models catalog
shell: bash
run: |
set -euo pipefail
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- name: Strip Claude entries from antigravity catalog (ampeco Patch 4)
# Antigravity's published catalog advertises Claude models served by
# Google's cloudcode-pa.googleapis.com. With those entries present, an
# antigravity OAuth becomes eligible alongside the Anthropic OAuth pool
# for `claude-*` selector picks. Session-affinity then pins entire
# Claude Code sessions (parent + sub-agents) to the antigravity OAuth
# whenever the parent request was a Gemini call, exhausting
# Antigravity's small Sonnet quota within hours. Strip them post-refresh
# so the antigravity OAuth is Gemini-only.
shell: bash
run: |
python3 - <<'PY'
import json
p = "internal/registry/models/models.json"
with open(p) as f:
d = json.load(f)
if "antigravity" in d:
before = len(d["antigravity"])
d["antigravity"] = [
m for m in d["antigravity"]
if not (
m.get("id", "").startswith("claude-")
or m.get("type", "") == "claude"
or m.get("owned_by", "") == "anthropic"
)
]
after = len(d["antigravity"])
print(f"antigravity catalog: {before} -> {after} entries ({before - after} claude stripped)")
with open(p, "w") as f:
json.dump(d, f, indent=2)
f.write("\n")
PY
run: bash .github/scripts/refresh-model-catalogs.sh
- name: Fetch tags
shell: bash
run: git fetch --force --tags
Expand Down Expand Up @@ -452,51 +386,16 @@ jobs:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true
- name: Refresh models catalog
shell: bash
run: |
set -euo pipefail
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- name: Strip Claude entries from antigravity catalog (ampeco Patch 4)
# Antigravity's published catalog advertises Claude models served by
# Google's cloudcode-pa.googleapis.com. With those entries present, an
# antigravity OAuth becomes eligible alongside the Anthropic OAuth pool
# for `claude-*` selector picks. Session-affinity then pins entire
# Claude Code sessions (parent + sub-agents) to the antigravity OAuth
# whenever the parent request was a Gemini call, exhausting
# Antigravity's small Sonnet quota within hours. Strip them post-refresh
# so the antigravity OAuth is Gemini-only.
shell: bash
run: |
python3 - <<'PY'
import json
p = "internal/registry/models/models.json"
with open(p) as f:
d = json.load(f)
if "antigravity" in d:
before = len(d["antigravity"])
d["antigravity"] = [
m for m in d["antigravity"]
if not (
m.get("id", "").startswith("claude-")
or m.get("type", "") == "claude"
or m.get("owned_by", "") == "anthropic"
)
]
after = len(d["antigravity"])
print(f"antigravity catalog: {before} -> {after} entries ({before - after} claude stripped)")
with open(p, "w") as f:
json.dump(d, f, indent=2)
f.write("\n")
PY
run: bash .github/scripts/refresh-model-catalogs.sh
- name: Fetch tags
shell: bash
run: git fetch --force --tags
- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true
- uses: actions/cache@v4
with:
path: |
Expand Down Expand Up @@ -594,7 +493,7 @@ jobs:
runs-on: ubuntu-latest
env:
TARGET: ${{ matrix.target }}
GOARCH: ${{ matrix.goarch }}
TARGET_GOARCH: ${{ matrix.goarch }}
ASSET_ARCH: ${{ matrix.asset_arch }}
ASSET_SUFFIX: ${{ matrix.asset_suffix }}
strategy:
Expand All @@ -615,47 +514,14 @@ jobs:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Refresh models catalog
run: |
git fetch --depth 1 https://github.com/router-for-me/models.git main
git show FETCH_HEAD:models.json > internal/registry/models/models.json
- name: Strip Claude entries from antigravity catalog (ampeco Patch 4)
# Antigravity's published catalog advertises Claude models served by
# Google's cloudcode-pa.googleapis.com. With those entries present, an
# antigravity OAuth becomes eligible alongside the Anthropic OAuth pool
# for `claude-*` selector picks. Session-affinity then pins entire
# Claude Code sessions (parent + sub-agents) to the antigravity OAuth
# whenever the parent request was a Gemini call, exhausting
# Antigravity's small Sonnet quota within hours. Strip them post-refresh
# so the antigravity OAuth is Gemini-only.
run: |
python3 - <<'PY'
import json
p = "internal/registry/models/models.json"
with open(p) as f:
d = json.load(f)
if "antigravity" in d:
before = len(d["antigravity"])
d["antigravity"] = [
m for m in d["antigravity"]
if not (
m.get("id", "").startswith("claude-")
or m.get("type", "") == "claude"
or m.get("owned_by", "") == "anthropic"
)
]
after = len(d["antigravity"])
print(f"antigravity catalog: {before} -> {after} entries ({before - after} claude stripped)")
with open(p, "w") as f:
json.dump(d, f, indent=2)
f.write("\n")
PY
- name: Fetch tags
run: git fetch --force --tags
- uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: true
- name: Refresh models catalog
run: bash .github/scripts/refresh-model-catalogs.sh
- name: Fetch tags
run: git fetch --force --tags
- uses: actions/cache@v4
with:
path: |
Expand Down Expand Up @@ -710,7 +576,7 @@ jobs:
run: |
set -euo pipefail
mkdir -p "dist/${TARGET}/bin"
CGO_ENABLED=0 GOOS=freebsd GOARCH="$GOARCH" go build -buildvcs=false \
CGO_ENABLED=0 GOOS=freebsd GOARCH="$TARGET_GOARCH" go build -buildvcs=false \
-ldflags="-s -w -X main.Version=${RELEASE_VERSION} -X main.Commit=${COMMIT} -X main.BuildDate=${BUILD_DATE}" \
-o "dist/${TARGET}/bin/cli-proxy-api" ./cmd/server/
- name: Package FreeBSD archive
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ static/*

# Authentication data
auths/*
/auths
!auths/.gitkeep

# Documentation
Expand All @@ -38,6 +39,7 @@ GEMINI.md
.worktrees/
.codex/*
.claude/*
.claude
.gemini/*
.serena/*
.agent/*
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ When the credential's API key starts with `sk-ant-oat01-`, route via `Authorizat

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

`internal/registry/models/models.json` and `.github/workflows/release.yaml` (post-refresh step).
`internal/registry/models/models.json` and `.github/scripts/refresh-model-catalogs.sh` (post-refresh strip; the script is invoked by every build job in `release.yaml`).

Antigravity's published catalog includes `claude-opus-4-6-thinking` and `claude-sonnet-4-6` because Google's AI Code Assist tier resells Claude models via `cloudcode-pa.googleapis.com`. With those entries present, an antigravity OAuth becomes eligible alongside the Anthropic OAuth pool when the selector picks for `claude-*` routes. Session-affinity then pins entire Claude Code sessions (parent + sub-agents) to the antigravity OAuth whenever the parent request was a Gemini call, exhausting Antigravity's small Sonnet quota within hours.

Strip every entry whose `id` starts with `claude-`, whose `type` is `claude`, or whose `owned_by` is `anthropic` from the `antigravity` array. Applied both to the in-tree `models.json` (so `go test ./...` and local dev see the patched shape) and to the release workflow's post-refresh step (so upstream catalog refreshes during tagged builds re-apply the strip automatically). After the patch the antigravity OAuth is Gemini-only and Claude requests fall through to the Anthropic OAuth pool.
Strip every entry whose `id` starts with `claude-`, whose `type` is `claude`, or whose `owned_by` is `anthropic` from the `antigravity` array. Applied both to the in-tree `models.json` (so `go test ./...` and local dev see the patched shape) and to `.github/scripts/refresh-model-catalogs.sh` (so upstream catalog refreshes during tagged builds re-apply the strip automatically). After the patch the antigravity OAuth is Gemini-only and Claude requests fall through to the Anthropic OAuth pool.

## Tests

Expand Down
Loading
Loading