Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1518 commits
Select commit Hold shift + click to select a range
c006e67
Merge pull request #3822 from router-for-me/fix/plugin-config-get-end…
LTbinglingfeng Jun 12, 2026
2659e49
fix: expose plugin support header for CORS
LTbinglingfeng Jun 12, 2026
7cd5b15
fix: precompute exposed CORS headers
LTbinglingfeng Jun 12, 2026
6a0b198
Merge pull request #3823 from router-for-me/fix/cors-expose-plugin-su…
LTbinglingfeng Jun 12, 2026
48dcadd
feat(antigravity): bridge Claude WebSearch to native googleSearch
sususu98 Jun 10, 2026
94c5a7f
Merge pull request #3824 from sususu98/codex/antigravity-websearch-na…
luispater Jun 13, 2026
b94178b
chore(docker): simplify `.dockerignore` patterns by removing wildcard…
luispater Jun 13, 2026
57971d7
docs: add Quotio Desktop to the projects list
Jun 13, 2026
8223520
feat: add Kimi K2.7 Code model (kimi-k2.7-code)
Jun 13, 2026
d6c4fc2
feat(translator): consolidate mid-conversation system messages into i…
luispater Jun 13, 2026
c5cfdb1
Add plugin delete management endpoint
LTbinglingfeng Jun 13, 2026
b79647d
Document plugin delete endpoint
LTbinglingfeng Jun 13, 2026
b39ee66
Add plugin store install timeout
LTbinglingfeng Jun 13, 2026
9cdb18e
refactor(plugin): remove timeout handling from plugin installation logic
LTbinglingfeng Jun 13, 2026
83c53d0
Merge pull request #3830 from router-for-me/codex/add-plugin-delete-api
LTbinglingfeng Jun 13, 2026
8d4a7f1
feat(config): add "passthrough" mode for disable-image-generation
haowang02 Jun 13, 2026
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
6d472d7
feat(models): increase `context_length` for Composer 2.5 Fast to 200,000
luispater Jun 13, 2026
eebb873
Merge pull request #3832 from haowang02/feat/disable-image-generation…
luispater Jun 13, 2026
964e86f
Merge pull request #3827 from iamkhalidbashir/add-kimi-k2.7-code
luispater Jun 13, 2026
e0cb43f
Merge pull request #3825 from xiaocoss/add-quotio-desktop
luispater Jun 13, 2026
c354f88
feat(api): Route Anthropic /v1/models requests to the Claude format
dcrdev Jun 14, 2026
8122b9f
feat!: remove amp integration support
hkfires Jun 14, 2026
b4054e1
refactor(config): remove legacy migration code
hkfires Jun 14, 2026
79db0e5
refactor(api): remove deprecated route module interfaces
hkfires Jun 14, 2026
f6aa9a0
Merge pull request #3846 from router-for-me/remove_amp
luispater Jun 14, 2026
2a050dc
feat: enhance fault tolerance for kv-based caching and introduce addi…
luispater Jun 14, 2026
b5da088
fix(home): forward credentials for home models
hkfires Jun 14, 2026
64a8957
fix(auth): map credential errors to unauthorized
hkfires Jun 14, 2026
c59eee6
Merge pull request #3847 from router-for-me/home
luispater Jun 14, 2026
6f923a2
feat(pluginhost): implement host authentication callbacks and add tests
luispater Jun 14, 2026
529d9e9
feat(executor): add support for compact response handling in XAIExecutor
luispater Jun 14, 2026
303c0f2
feat(pluginstore): add support for third-party plugin store sources a…
LTbinglingfeng Jun 14, 2026
239d7ee
feat(pluginstore): refactor plugin store source handling to use strin…
LTbinglingfeng Jun 14, 2026
3b96119
feat(websockets): handle terminal events and improve error propagation
luispater Jun 14, 2026
6f3bd76
feat(pluginstore): improve nil checks in pluginStoreSnapshot function
LTbinglingfeng Jun 14, 2026
ea4e978
Merge pull request #3848 from router-for-me/feat/Community_Plugins
LTbinglingfeng Jun 14, 2026
7de9757
feat: add OpenAI video support with improved error handling and respo…
luispater Jun 14, 2026
c61453a
Add log cursor helpers
LTbinglingfeng Jun 14, 2026
95a72a4
Tail management logs with cursors
LTbinglingfeng Jun 14, 2026
331daa2
Read management logs from cursors
LTbinglingfeng Jun 14, 2026
0d82dac
Preserve management log line counts
LTbinglingfeng Jun 14, 2026
d417fa5
Bound management log cursor reads
LTbinglingfeng Jun 14, 2026
56988ae
feat(websockets): add Codex websocket passthrough support with tests
luispater Jun 14, 2026
ea90ab6
feat(websockets): implement XAIWebsocketsExecutor with enhanced execu…
luispater Jun 15, 2026
f33bc56
feat(websockets): add transcript state tracking and compaction trigge…
luispater Jun 15, 2026
f85768e
feat(auth): add config API key exclusion management with tests
luispater Jun 15, 2026
bbef8da
feat(videos): add video authentication binding and update handler beh…
luispater Jun 15, 2026
3b0cc91
feat(plugins): implement asynchronous config reload after plugin dele…
LTbinglingfeng Jun 15, 2026
917cec3
Continue log cursors across rotation
LTbinglingfeng Jun 15, 2026
db3fdea
Disambiguate zero-offset log cursors
LTbinglingfeng Jun 15, 2026
a47c386
Avoid counting all logs for tail reads
LTbinglingfeng Jun 15, 2026
5036513
Fix ambiguous empty log cursor handling
LTbinglingfeng Jun 15, 2026
0b21b07
fix log cursor rotation gap
LTbinglingfeng Jun 15, 2026
1ed1f7b
Merge branch 'dev' into main
dcrdev Jun 15, 2026
e405998
Merge pull request #3850 from router-for-me/feat/log-feat
LTbinglingfeng Jun 15, 2026
844b855
feat(executor): sanitize web search tool domains to meet Anthropic re…
luispater Jun 15, 2026
2406daf
feat(util): normalize Claude tool_result content and improve Gemini i…
luispater Jun 16, 2026
8fad0d0
feat(config+executor): add global Claude cloak mode toggle and improv…
luispater Jun 16, 2026
907e349
docs: update VisionCoder details in README files
luispater Jun 16, 2026
9f940f1
fix(pluginhost): keep stream callbacks alive until stream close
sususu98 Jun 16, 2026
87132e5
feat(plugin): add ModelRouter before auth with single-slot routing ta…
sususu98 Jun 16, 2026
f63cf98
docs: add CatAPI sponsorship details to README files
luispater Jun 16, 2026
2884a67
feat(videos): add support for video_url extraction and validation in …
luispater Jun 16, 2026
30dc2e7
fix(translator): emit Claude server tool blocks for Codex web_search_…
sususu98 Jun 16, 2026
f49d179
feat(translator): add namespace and function call mapping for Claude …
luispater Jun 16, 2026
a5cb883
feat(translator): enhance content block handling and add stream-speci…
luispater Jun 16, 2026
13f51d9
fix(pluginhost): avoid holding host lock during plugin lifecycle
LTbinglingfeng Jun 16, 2026
a65ced4
fix(management): reload plugins asynchronously after changes
LTbinglingfeng Jun 16, 2026
7f026e1
Add runtime config clone
LTbinglingfeng Jun 16, 2026
a4756ab
Use config snapshots for management reload
LTbinglingfeng Jun 16, 2026
7b16321
Stabilize management reload race tests
LTbinglingfeng Jun 16, 2026
a3c87ce
Fix management reload snapshot ordering
LTbinglingfeng Jun 16, 2026
09596d2
Treat loading plugins as busy
LTbinglingfeng Jun 16, 2026
125c092
Merge pull request #3872 from router-for-me/codex/pluginhost-async-re…
luispater Jun 16, 2026
8d2c00c
feat(plugin-config): update default plugin `Enabled` behavior to fals…
luispater Jun 16, 2026
b9d024a
feat(executor): handle usage limit errors and enhance retry logic
luispater Jun 16, 2026
8c6f279
refactor(tests): remove obsolete test files and update reasoning effo…
hkfires Jun 17, 2026
0e81dee
Merge pull request #3873 from router-for-me/thinking
luispater Jun 17, 2026
c296790
feat(misc): align Antigravity runtime UA with agy CLI version sources
sususu98 Jun 17, 2026
29f22ac
Merge pull request #3877 from sususu98/feat/antigravity-cli-ua-upstre…
luispater Jun 17, 2026
96a8b0c
feat(executor): normalize reasoning text events and enhance handling …
luispater Jun 17, 2026
644ba74
feat(videos): implement auth binding for video requests and enhance p…
luispater Jun 17, 2026
f23fb12
feat(translator): ensure tool uses stay adjacent to tool results in m…
luispater Jun 17, 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
9a50fd6
merge: sync with upstream/main (172 commits)
Jun 21, 2026
dd39317
docs(journal): record 2026-06-21 upstream merge (172 commits) and TDD
Jun 21, 2026
4b8fd3d
docs(plan,env): record 2026-06-21 upstream merge plan and merge-strat…
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
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
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
6a958e2
Merge remote-tracking branch 'upstream/main' into new
Jul 10, 2026
2942b3b
docs(journal,plan): record 2026-07-10 upstream merge (107 commits)
Jul 10, 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
  •  
  •  
  •  
41 changes: 23 additions & 18 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Git and GitHub folders
.git/*
.github/*
.git
.github

# Docker and CI/CD related files
docker-compose.yml
Expand All @@ -10,27 +10,32 @@ docker-compose.yml
Dockerfile

# Documentation and license
docs/*
docs
README.md
README_CN.md
LICENSE

# Runtime data folders (should be mounted as volumes)
auths/*
logs/*
conv/*
auths
logs
conv
config.yaml

# Development/editor
bin/*
.vscode/*
.claude/*
.codex/*
.gemini/*
.serena/*
.agent/*
.agents/*
.opencode/*
.bmad/*
_bmad/*
_bmad-output/*
bin
.vscode
.claude
.codex
.codex-worktrees
.gemini
.serena
.agent
.agents
.antigravitycli
.opencode
.idea
.junie
.worktrees
.bmad
_bmad
_bmad-output
5 changes: 5 additions & 0 deletions .env.cluster.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Cluster JWT example.
# After deploying https://github.com/router-for-me/CLIProxyAPIHome, get the JWT value with:
# curl -sS -X POST "http://<home-host>:8327/v0/management/certificates/clients" -H "X-MANAGEMENT-KEY: <management-key>" | jq -r '.home_jwt'
# Then paste it into HOME_JWT here or export it before starting Compose.
HOME_JWT=your-home-jwt-here
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
124 changes: 113 additions & 11 deletions .github/workflows/docker-image.yml
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
name: docker-image

on:
workflow_dispatch:
push:
tags:
- v*

env:
APP_NAME: CLIProxyAPI
DOCKERHUB_REPO: eceasy/cli-proxy-api
DOCKERHUB_REPO: ${{ secrets.DOCKERHUB_USERNAME }}/cli-proxy-api-plus

jobs:
docker:
docker_amd64:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- 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 Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
Expand All @@ -26,21 +29,120 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate Build Metadata
run: |
echo VERSION=`git describe --tags --always --dirty` >> $GITHUB_ENV
echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV
- name: Build and push
- name: Build and push (amd64)
uses: docker/build-push-action@v6
with:
context: .
platforms: |
linux/amd64
linux/arm64
platforms: linux/amd64
push: true
build-args: |
VERSION=${{ env.VERSION }}
COMMIT=${{ env.COMMIT }}
BUILD_DATE=${{ env.BUILD_DATE }}
tags: |
${{ env.DOCKERHUB_REPO }}:latest
${{ env.DOCKERHUB_REPO }}:${{ env.VERSION }}
${{ env.DOCKERHUB_REPO }}:latest-amd64
${{ env.DOCKERHUB_REPO }}:${{ env.VERSION }}-amd64

docker_arm64:
runs-on: ubuntu-24.04-arm
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 Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate Build Metadata
run: |
echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV
- name: Build and push (arm64)
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/arm64
push: true
build-args: |
VERSION=${{ env.VERSION }}
COMMIT=${{ env.COMMIT }}
BUILD_DATE=${{ env.BUILD_DATE }}
tags: |
${{ env.DOCKERHUB_REPO }}:latest-arm64
${{ env.DOCKERHUB_REPO }}:${{ env.VERSION }}-arm64

docker_manifest:
runs-on: ubuntu-latest
needs:
- docker_amd64
- docker_arm64
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Generate Build Metadata
run: |
echo "VERSION=${GITHUB_REF_NAME}" >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV
- name: Create and push multi-arch manifests
run: |
docker buildx imagetools create \
--tag "${DOCKERHUB_REPO}:latest" \
"${DOCKERHUB_REPO}:latest-amd64" \
"${DOCKERHUB_REPO}:latest-arm64"
docker buildx imagetools create \
--tag "${DOCKERHUB_REPO}:${VERSION}" \
"${DOCKERHUB_REPO}:${VERSION}-amd64" \
"${DOCKERHUB_REPO}:${VERSION}-arm64"
- name: Cleanup temporary tags
continue-on-error: true
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
run: |
set -euo pipefail
namespace="${DOCKERHUB_REPO%%/*}"
repo_name="${DOCKERHUB_REPO#*/}"

token="$(
curl -fsSL \
-H 'Content-Type: application/json' \
-d "{\"username\":\"${DOCKERHUB_USERNAME}\",\"password\":\"${DOCKERHUB_TOKEN}\"}" \
'https://hub.docker.com/v2/users/login/' \
| python3 -c 'import json,sys; print(json.load(sys.stdin)["token"])'
)"

delete_tag() {
local tag="$1"
local url="https://hub.docker.com/v2/repositories/${namespace}/${repo_name}/tags/${tag}/"
local http_code
http_code="$(curl -sS -o /dev/null -w "%{http_code}" -X DELETE -H "Authorization: JWT ${token}" "${url}" || true)"
if [ "${http_code}" = "204" ] || [ "${http_code}" = "404" ]; then
echo "Docker Hub tag removed (or missing): ${DOCKERHUB_REPO}:${tag} (HTTP ${http_code})"
return 0
fi
echo "Docker Hub tag delete failed: ${DOCKERHUB_REPO}:${tag} (HTTP ${http_code})"
return 0
}

delete_tag "latest-amd64"
delete_tag "latest-arm64"
delete_tag "${VERSION}-amd64"
delete_tag "${VERSION}-arm64"
4 changes: 4 additions & 0 deletions .github/workflows/pr-test-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ 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:
Expand Down
85 changes: 85 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: Build and Publish

on:
push:
branches: [main]
tags: ['v*']
workflow_dispatch:
inputs:
platforms:
description: 'Target platforms to build'
required: true
default: 'linux/amd64'
type: choice
options:
- 'linux/amd64'
- 'linux/arm64'
- 'linux/amd64,linux/arm64'

permissions:
contents: read
packages: write

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up QEMU
if: contains(github.event.inputs.platforms || 'linux/amd64', 'arm64')
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Generate Build Metadata
run: |
echo VERSION=`git describe --tags --always --dirty` >> $GITHUB_ENV
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=semver,pattern={{version}}
type=sha
type=raw,value=latest

- name: Determine platforms
id: platforms
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "platforms=${{ github.event.inputs.platforms }}" >> $GITHUB_OUTPUT
else
# Default to amd64 only for push events (faster builds)
echo "platforms=linux/amd64" >> $GITHUB_OUTPUT
fi

- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
push: true
platforms: ${{ steps.platforms.outputs.platforms }}
build-args: |
VERSION=${{ env.VERSION }}
COMMIT=${{ env.COMMIT }}
BUILD_DATE=${{ env.BUILD_DATE }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
Loading