Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1409 commits
Select commit Hold shift + click to select a range
e7f4dd4
fix(openai): keep referenced tool call when deduping websocket input IDs
catoncat Jun 1, 2026
f05d68d
refactor(openai): parse dedupe input item metadata in a single pass
catoncat Jun 1, 2026
959067e
feat(usage): introduce executor type tracking in usage reporting
luispater Jun 1, 2026
f353979
feat(watcher, redisqueue): add usage refresh notification support
luispater Jun 1, 2026
bf04a24
feat(models): add support for `grok-composer-2.5-fast` model
luispater Jun 2, 2026
87d813c
chore(models): remove legacy GPT 5.2 and GPT 5.3 Codex entries from r…
luispater Jun 2, 2026
7cb466a
docs: add Panopticon to "Who is with us?"
eltmon Jun 2, 2026
c9dc6bd
Fix Home auth refresh retry handling
sususu98 Jun 2, 2026
a7bb7a1
Merge remote-tracking branch 'upstream/main' into new
Jun 2, 2026
603a08f
feat(codex): cache reasoning replay items
sususu98 Jun 1, 2026
68282c4
fix(translator): normalize message-level system roles for Gemini
sususu98 Jun 2, 2026
4abd59c
Merge pull request #3679 from sususu98/codex/system-role-to-user-upst…
sususu98 Jun 2, 2026
8306391
Merge pull request #3667 from sususu98/feat/codex-reasoning-replay-ca…
luispater Jun 2, 2026
02d0d92
Merge pull request #3677 from sususu98/codex/home-auth-loop-upstream-dev
luispater Jun 2, 2026
d710248
Merge pull request #3676 from eltmon/add-panopticon-to-users
luispater Jun 2, 2026
28c7f41
docs(readme): update project descriptions and add Panopticon link
luispater Jun 2, 2026
0e3c809
fix(codex): handle non-empty reasoning and content items, add test fo…
luispater Jun 2, 2026
35ab084
refactor(runtime): enhance `NewUtlsHTTPClient` with context-based Rou…
luispater Jun 2, 2026
17af089
fix(codex): avoid replaying orphan tool calls
sususu98 Jun 3, 2026
7682acc
Merge pull request #3688 from sususu98/fix-codex-replay-dev
sususu98 Jun 3, 2026
45f58d4
fix(auth): retry and backoff cloudflare challenge 403 errors
sususu98 Jun 3, 2026
77061aa
refactor(auth): simplify and narrow cloudflare challenge checks
sususu98 Jun 3, 2026
1c9601f
Merge pull request #3689 from sususu98/pr/cloudflare-challenge-retry
luispater Jun 3, 2026
9c02454
Merge pull request #3657 from catoncat/fix/responses-input-id-dedupe-…
luispater Jun 3, 2026
55440f0
feat(auth): add runtime auth removal and unscheduling logic
luispater Jun 3, 2026
1074507
docs: add Tunnel Agent to community projects
Villoh Jun 3, 2026
46a152a
docs: use 智能体 for Agent in Chinese translation
Villoh Jun 3, 2026
fd30944
feat(auth): add error event publishing and Redis queue integration
luispater Jun 3, 2026
bebdaa4
Merge pull request #3702 from Villoh/docs/add-tunnel-agent
luispater Jun 4, 2026
90d46e7
docs: remove outdated Amp CLI and related tool references
luispater Jun 4, 2026
387c783
Merge pull request #3649 from intcua/fix/xai-empty-tools-orphan-tool-…
luispater Jun 4, 2026
5753d1a
feat(logging): enable file-backed request/response sources for enhanc…
luispater Jun 4, 2026
bc38b68
feat(safemode): implement example API key warning server and related …
hkfires Jun 6, 2026
fca12a2
Merge pull request #3735 from router-for-me/safemode
luispater Jun 6, 2026
d625cad
feat(pluginhost): add capabilities for command-line flag handling and…
luispater Jun 6, 2026
3abfc83
Merge branch 'dynamic' into dev
luispater Jun 6, 2026
0ed85bb
feat(pluginhost): refactor and enhance plugin system with new executi…
luispater Jun 6, 2026
bc58c21
chore(build): update dependencies, enhance cross-compilation, and ref…
luispater Jun 6, 2026
9ee6493
chore(build): remove goreleaser configuration and refactor release wo…
luispater Jun 6, 2026
3dedf47
chore(build): set additional environment variables for FreeBSD builds…
luispater Jun 6, 2026
c75fb2c
chore(build): add caching for Go dependencies and FreeBSD-specific ar…
luispater Jun 6, 2026
4567fd1
chore(build): add custom runners and improve Go module handling in Fr…
luispater Jun 6, 2026
43c1214
chore(build): add custom runners and improve Go module handling in Fr…
luispater Jun 6, 2026
6d9014b
chore(build): enhance release workflow with automated asset handling …
luispater Jun 6, 2026
37df0b8
chore(build): update release workflow to include repository reference…
luispater Jun 6, 2026
4f55ecc
chore(build): refactor FreeBSD build process and optimize workflows
luispater Jun 6, 2026
c989cdd
feat(plugin): add Codex Service Tier request normalizer plugin
luispater Jun 6, 2026
365415c
fix(translator): add fallback for `system_instruction` key in Gemini …
luispater Jun 8, 2026
d9a0c9b
chore(build): migrate from Alpine to Debian and update build dependen…
luispater Jun 8, 2026
ec67244
feat(translator): implement signature delta handling and enhance chun…
luispater Jun 8, 2026
69d937a
chore(build): add Linux-specific release workflows and update release…
luispater Jun 8, 2026
d55f215
chore(build): include `ca-certificates` in Docker image for improved …
luispater Jun 8, 2026
6f38e84
docs: add RunAPI sponsorship details to README files
luispater Jun 8, 2026
856dc81
feat(safemode): support `/management.html` route in `ExampleAPIKeyWar…
luispater Jun 8, 2026
07c607b
chore(build): remove checksum generation from release workflows
luispater Jun 8, 2026
702295d
fix: translate codex stream errors for claude
sususu98 Jun 8, 2026
4330b92
perf(codex): avoid rebuilding completed JSON when extracting generate…
Folyd Jun 8, 2026
2e81766
perf(codex): preallocate results and skip empty index sort
Folyd Jun 8, 2026
1762ee0
feat(pluginhost): add support for interceptors and metadata sanitization
luispater Jun 8, 2026
d128578
Merge pull request #3771 from Folyd/perf/codex-image-streaming-memory
luispater Jun 8, 2026
5e41e07
fix(runtime): update formatting in codex image extraction comment
luispater Jun 8, 2026
5830535
feat(jshandler): add new plugin providing JavaScript-based intercepto…
luispater Jun 9, 2026
fabf061
feat(access, pluginhost): add support for exclusive frontend auth pro…
luispater Jun 9, 2026
c7cc3a1
fix: update antigravity version lookup
sususu98 Jun 9, 2026
9fb9e91
Merge pull request #3770 from sususu98/fix/codex-claude-stream-error-…
sususu98 Jun 9, 2026
a2db6a6
Merge pull request #3773 from sususu98/fix/antigravity-version-upstre…
sususu98 Jun 9, 2026
693ce1c
feat(pluginhost, scheduler): introduce Go-based plugin with scheduler…
luispater Jun 9, 2026
41a4dba
feat(auth): enhance plugin scheduler with `HasScheduler` support and …
luispater Jun 9, 2026
556f50a
feat(interceptor, jshandler): enhance request/response handling with …
luispater Jun 9, 2026
1d1ee85
refactor(auth): simplify plugin scheduler by consolidating strategies…
luispater Jun 9, 2026
2aeb41c
feat(pluginhost, jshandler): integrate HostCallbackID with intercepto…
luispater Jun 9, 2026
44ea9ab
feat(pluginhost): introduce browser-navigable plugin resources in Man…
luispater Jun 9, 2026
e1864fb
fix(logging): track Codex backend request IDs
shoucandanghehe Jun 9, 2026
dc3152d
fix(logging): tighten Codex backend request ID prefix
shoucandanghehe Jun 9, 2026
e1081df
merge: sync with upstream/main (70 commits)
Jun 9, 2026
52acc87
feat(models): add Claude Fable 5 to registry
Jun 9, 2026
efd69d8
feat(models): add `Claude Fable 5` to registry
luispater Jun 9, 2026
f4ffea6
feat(models): add Claude Fable 5 with incremental model update
Jun 9, 2026
8caf474
Merge pull request #3788 from shoucandanghehe/fix/codex-backend-reque…
luispater Jun 9, 2026
8e52c40
feat(auth): deduplicate concurrent refresh token requests with `singl…
luispater Jun 9, 2026
21387f5
feat(docs): add Unity2.ai sponsorship details to README
luispater Jun 10, 2026
3c773b6
feat(auto-updater): refactor skip logic and add unit tests for autoUp…
hkfires Jun 10, 2026
1ca048a
feat(auth, interceptor, jshandler): add post-auth request interceptor…
luispater Jun 10, 2026
58bf645
feat(translator): ensure correct finish_reason handling for all respo…
luispater Jun 10, 2026
dc04d8b
feat(translator): enhance response aggregation and annotation handling
luispater Jun 10, 2026
4cbd500
feat(service): add XAIExecutor to home executors registration
hkfires Jun 11, 2026
ca1f627
feat(executor): refactor executor registration
hkfires Jun 11, 2026
9985976
feat(translator, pluginhost): add stream-specific response transforma…
luispater Jun 11, 2026
030c4a9
Merge pull request #3795 from router-for-me/webui
luispater Jun 11, 2026
ac4017e
Merge branch 'dev' of github.com:router-for-me/CLIProxyAPI into dev
luispater Jun 11, 2026
8e39db2
feat(plugin, api): introduce host model callback support with Go exam…
luispater Jun 11, 2026
538e341
feat(plugin, api): prevent plugin recursion on host model callbacks, …
luispater Jun 11, 2026
ed52c61
test(websocket, api): add unit tests for response ID injection and ha…
luispater Jun 11, 2026
5633c93
refactor(release): enhance release workflow with changelog generation…
luispater Jun 12, 2026
9dbf4cd
feat(translator): add usage token details for cache input/output aggr…
luispater Jun 12, 2026
e38ba28
feat(pluginstore): add plugin store support
LTbinglingfeng Jun 12, 2026
0626b22
Merge pull request #3818 from router-for-me/Plugin-stone
luispater Jun 12, 2026
69b7462
refactor(translator): update test strings to use English for consistency
luispater Jun 12, 2026
049ced5
feat(pluginhost, api): add support for "X-CPA-SUPPORT-PLUGIN" header …
luispater Jun 12, 2026
60f6a54
feat(pluginstore, pluginhost): add plugin unload handling and preserv…
luispater Jun 12, 2026
44d3066
feat(htmlsanitize): add HTML and JSON sanitization utilities with int…
luispater Jun 12, 2026
b6c22f2
chore(plugin/jshandler): remove JS handler plugin implementation and …
luispater Jun 12, 2026
40f4b8b
feat(pluginstore): fetch and install plugins from latest release
LTbinglingfeng Jun 12, 2026
220b4e5
feat(management): resolve plugin store versions from latest releases
LTbinglingfeng Jun 12, 2026
b2b5d10
feat(pluginstore): make registry version field optional
LTbinglingfeng Jun 12, 2026
b60ec43
fix(plugins): expose saved plugin config
LTbinglingfeng Jun 12, 2026
cbaea35
Merge pull request #3821 from router-for-me/feat/plugin-latest-releas…
LTbinglingfeng Jun 12, 2026
4f5f1b8
fix(plugins): guard config read with mutex
LTbinglingfeng Jun 12, 2026
b29851d
docs(plugins): document config get endpoint in Chinese readme
LTbinglingfeng Jun 12, 2026
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
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