Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
406 commits
Select commit Hold shift + click to select a range
3e7a21e
fix(openai): isolate duplex turn reauthorization from gin context and…
luispater Oct 24, 2026
32dd2c8
fix(watcher): preserve file snapshot binding on persisted auth updates
luispater Oct 24, 2026
2155350
fix(auth): restore re-logged credentials to rotation after refresh fa…
luispater Oct 24, 2026
b2fda98
fix(util): defer Gemini array placeholder items until after ref and a…
luispater Oct 24, 2026
6b56ce6
perf(thinking): skip document copies when deleting absent fields
JohnsonRan Oct 24, 2026
e48d780
fix(plugin): preserve caller scope for replayed Claude OAuth MCP tool…
luispater Oct 25, 2026
0c61b12
fix(xai): deduplicate tools when promoting historical additional_tools
luispater Oct 25, 2026
ce433b3
fix(cliproxy): back off home subscriber retries
hkfires Oct 25, 2026
86d951c
fix(openai/responses): drop response.metadata for non-Codex clients
soulmachine Oct 25, 2026
cf4fc4e
Merge pull request #6969 from router-for-me/home
sususu98 Oct 25, 2026
ba06ec5
fix(vertex): default credential location to global
LTbinglingfeng Oct 25, 2026
bdde391
fix(translator): preserve finishReason in Codex and OpenAI to Gemini …
luispater Oct 25, 2026
3dae075
feat(devin): aggregate swe-2 lightning UIDs into swe-2-lightning model
luispater Oct 25, 2026
27f3abf
feat(management): support session-scoped OAuth proxy with per-account…
luispater Oct 25, 2026
0fe4cc2
fix(openai): report buffered stream error when responses websocket da…
luispater Oct 25, 2026
90fe5b2
fix(handlers): report stream cancellation when channel closes with ca…
luispater Oct 25, 2026
84e8344
test(executor): fix race conditions in flaky websocket executor tests
luispater Oct 25, 2026
3078035
fix(aistudio): translate every SSE frame of a relay stream chunk
luispater Oct 25, 2026
712e497
fix(handlers): report cancellation when stream closes before first chunk
luispater Oct 25, 2026
e5321f5
fix(auth,pluginapi,usage): share per-selection ID between Scheduler.P…
luispater Oct 25, 2026
8365de8
docs(readme): update Kimi model availability
kdcokenny Oct 25, 2026
064e008
feat(codex): add full-chain compression for Codex upstream and downst…
luispater Oct 26, 2026
bc80710
perf: index web-search support to remove registry write-lock convoy
Oct 26, 2026
43f5386
fix(translator): map Claude thinking_tokens to reasoning_tokens in Op…
luispater Oct 26, 2026
531721b
fix(codex): restore Codex commentary history via internal thinking si…
luispater Oct 26, 2026
058b803
fix(api): explicitly allow Authorization in CORS preflight responses
luispater Oct 26, 2026
6fe654b
perf(pluginhost): gate request interceptor body delivery behind schem…
luispater Oct 26, 2026
ede07ca
fix(interactions): emit [DONE] sentinel after terminal usage frame in…
luispater Oct 26, 2026
8a982a5
feat(discovery): align TXT schema with draft-su-ai-gateway-discovery-00
sususu98 Oct 26, 2026
b214385
chore(config): deprecate discovery advertise-management
sususu98 Oct 26, 2026
1d45a5f
fix(claude): handle forced tool restrictions in claude 5.5
luispater Oct 26, 2026
37bd18b
fix(antigravity): accept bare content-block lists in interactions input
luispater Oct 26, 2026
11e5f67
fix(discovery): resolve split mDNS responses with scoped bounded caches
sususu98 Oct 26, 2026
999526c
docs(discovery): describe LAN resolution limits and trust boundaries
sususu98 Oct 26, 2026
aa4130e
fix(gemini): keep truncated HTTP 200 streams out of credential cooldo…
luispater Oct 26, 2026
ec81e70
Merge pull request #7010 from sususu98/feat/discovery-ietf-draft
sususu98 Oct 26, 2026
58a4d04
fix(signature): recognize Vertex bare-Tink Gemini thought signatures
sususu98 Oct 26, 2026
1398f27
fix(signature): scope Vertex bare-Tink replay to Vertex targets
sususu98 Oct 26, 2026
1f917e7
docs(readme): remove APIMart sponsor sections and assets
luispater Oct 26, 2026
c376712
Merge pull request #6959 from JohnsonRan/patch/thinking-delete-missin…
luispater Oct 26, 2026
3c948a5
perf(executor): decode upstream zstd synchronously and sniff unlabele…
JohnsonRan Oct 26, 2026
b4cbda5
docs(readme): add GPT-6.1 Terra
kdcokenny Oct 26, 2026
9a35fa1
fix(codex): treat turn_rate_limit_exceeded as transient capacity with…
luispater Oct 26, 2026
1939853
feat(codex): add workspace and cloud agent orchestrator restrictions …
luispater Oct 26, 2026
a8582fb
fix(signature): pin Vertex bare-Tink recognition to observed key ids
sususu98 Oct 27, 2026
023dd2a
Merge pull request #7016 from sususu98/fix/vertex-gemini-thought-sign…
sususu98 Oct 27, 2026
be929f0
fix(interactions): normalize gemini stream sse lines
luispater Oct 27, 2026
7517549
fix(signature): do not reject Antigravity CAQS signatures by channel ID
sususu98 Oct 27, 2026
437386d
Merge pull request #7042 from sususu98/fix/antigravity-caqs-channel-id
sususu98 Oct 27, 2026
908e95d
fix(models): preserve channel prefix in Gemini model names during pre…
luispater Oct 27, 2026
10417e5
feat(registry,management): support on-demand v8 management refresh fo…
luispater Oct 27, 2026
f73e66a
fix(responses-ws): keep downstream websocket open on upstream Codex d…
luispater Oct 27, 2026
b4f59d7
fix(devin): log apply_patch rejection diagnostics and recover complet…
luispater Oct 27, 2026
826bb16
fix(images): apply payload default rules to xAI image endpoints
luispater Oct 27, 2026
6431612
feat(translator): support Vertex streaming functionCall partialArgs c…
luispater Oct 27, 2026
86a1aab
fix(codex): retry another credential on early websocket 429 without c…
luispater Oct 27, 2026
c6425a6
docs: add Ebb to "Who is with us?"
lucasnsaraujo Oct 27, 2026
b744221
fix(auth,usage): snapshot request state to avoid reading reused gin.C…
luispater Oct 27, 2026
477605d
fix(api): prevent incomplete unauthenticated request bodies from exha…
luispater Oct 27, 2026
ad8bdd3
fix(middleware): bound zstd decompression output and window in reques…
luispater Oct 27, 2026
a9e0d48
Merge pull request #7057 from lucasnsaraujo/docs/add-ebb
luispater Oct 27, 2026
f6d29ec
Merge pull request #6989 from kdcokenny/docs/kimi-k31-availability
luispater Oct 27, 2026
ba26dea
Merge pull request #7023 from JohnsonRan/patch/response-decode-sync-zstd
luispater Oct 27, 2026
65889d3
test: update tests for default template changes and environment compa…
luispater Oct 27, 2026
16c6b4b
perf(api): reuse response compression encoders with a smaller zstd wi…
JohnsonRan Oct 26, 2026
12f2caf
test(api): measure open-stream heap with empty encoder pools
JohnsonRan Oct 27, 2026
e30575d
Merge pull request #6995: index web-search support
luispater Oct 28, 2026
58874f3
feat(registry): index web-search support
luispater Oct 28, 2026
f6ee1e6
Merge pull request #7022: reuse response compression encoders
luispater Oct 28, 2026
a3e7689
refactor(api): reuse response compression encoders and add tests
luispater Oct 28, 2026
f7342c3
Merge pull request #6970 from soulmachine/responses-drop-metadata-non…
luispater Oct 28, 2026
ae65e26
feat(api): filter private metadata in OpenAI responses and improve SS…
luispater Oct 28, 2026
9717e32
fix(responses): reject late websocket interrupts after terminal events
luispater Oct 28, 2026
e324e48
perf(pluginhost): allow frontend auth providers to opt out of request…
luispater Oct 28, 2026
0fe3822
feat(pluginhost): support raw request body byte-range patching
luispater Oct 28, 2026
535110e
docs(readme): add Nia Live Demo to "Who is with us?"
nia-teams-admin Oct 28, 2026
3f2b8f2
Merge pull request #7082 from nia-teams-admin/docs/add-nia-live-demo
luispater Oct 28, 2026
90c447d
fix(responses): use tsc_ item id prefix for Gemini tool search calls
luispater Oct 28, 2026
fa42f39
test(openai): assert websocket disconnect error event
sususu98 Oct 29, 2026
02ee313
fix(devin): classify JSON control character errors
sususu98 Oct 29, 2026
56efc81
Merge pull request #7092 from sususu98/fix/slow-test-disconnect
sususu98 Oct 29, 2026
7df437c
fix(aistudio): buffer fragmented relay SSE frames
wozhenbang2004 Oct 29, 2026
498170a
fix(aistudio): add relay SSE frame reassembly helper
wozhenbang2004 Oct 29, 2026
89e472f
feat(usage): capture structured Anthropic Messages upstream usage det…
sususu98 Oct 28, 2026
24840fd
feat(usage): capture structured xAI usage across chat, responses, and…
sususu98 Oct 28, 2026
01551f5
feat(usage): capture structured OpenAI and Codex usage across respons…
sususu98 Oct 28, 2026
bd5ec53
feat(usage): capture structured Gemini, Vertex, AI Studio, and Antigr…
sususu98 Oct 28, 2026
d5eb4ca
perf(usage): optimize stream usage observation and large payload parsing
sususu98 Oct 28, 2026
97dd3a4
fix(usage): preserve stream failure usage, multipart image params, an…
sususu98 Oct 29, 2026
a6b4477
fix(home): restrict websocket access in home mode
hkfires Oct 29, 2026
82deffb
fix(usage): preserve output_item.done tool counts and multiline SSE u…
sususu98 Oct 29, 2026
eabcb1b
Merge pull request #7074 from sususu98/feat/structured-usage-7054
sususu98 Oct 29, 2026
265ca17
Merge pull request #7095: reassemble AI Studio SSE frames
hkfires Oct 29, 2026
d30edd7
Merge pull request #7102 from router-for-me/aistudio
hkfires Oct 29, 2026
4cb98e3
fix(logging): prevent deferred request retention on Responses WebSockets
GavinKung Oct 29, 2026
8dfb45d
Merge pull request #7106 from router-for-me/fix/responses-ws-deferred…
GavinKung Oct 29, 2026
43068c8
fix(auth): write the cooldown state next to the auth file when auth-d…
eaxeax Oct 29, 2026
f013eb6
fix(openai): keep incomplete streams without [DONE] out of credential…
luispater Oct 29, 2026
514d09f
feat(codex): guide recovery when automatic credential renewal becomes…
luispater Oct 29, 2026
12d97cf
fix(translator): translate mid-conversation Claude tool_addition blocks
luispater Oct 30, 2026
67beb7a
Merge pull request #7109 from eaxeax/fix/cooldown-state-relative-auth…
luispater Oct 30, 2026
d9a688e
chore(meta): match Muse Code 1.4.14 client headers
Oct 30, 2026
bc81923
feat(pluginhost): allow model registrars to publish models for multip…
luispater Oct 30, 2026
81de4b9
fix(gemini): preserve Claude tool-result error semantics (#6838)
GavinKung Oct 30, 2026
068fe15
fix(antigravity): preserve Claude tool-result error semantics
sususu98 Oct 30, 2026
dbb7062
fix(codex): expand recognized CPA compaction capsules before forwardi…
luispater Oct 30, 2026
b147b8d
fix(meta): include Muse namespace in tool-bearing requests
Oct 30, 2026
cc4b994
feat(claude): add opt-in visible Codex commentary with preserved replay
luispater Oct 31, 2026
4c46f0a
fix(gemini): strip empty part objects from systemInstruction (#7136)
sususu98 Oct 31, 2026
a8dbeba
feat(pluginhost): allow plugins to register multiple OAuth login entries
luispater Oct 31, 2026
f42f587
fix(antigravity): strip empty part objects from Gemini systemInstruct…
luispater Oct 31, 2026
234217d
fix(antigravity): discard excess functionResponse parts per turn in f…
sususu98 Oct 31, 2026
250d598
perf(antigravity): make selectGroupResponses O(N+M) and deduplicate s…
sususu98 Oct 31, 2026
7d2959a
fix(home): keep the release flusher idle when nothing is pending
Oct 31, 2026
f0ddc38
fix(xai): support Grok Imagine Video 1.5 Lite
gabrielrinaldi Oct 31, 2026
95f125f
fix(auth): skip automatic Codex refresh without renewal credentials
LTbinglingfeng Oct 31, 2026
7b4c64b
fix(auth): preserve disabled credential refresh backoff
LTbinglingfeng Oct 31, 2026
c69cdd9
fix(xai): preserve Lite resolution and catalog fallback
gabrielrinaldi Oct 31, 2026
d00267c
fix(auth): treat Anthropic credit balance 400 errors as payment required
luispater Nov 1, 2026
b63322b
fix(registry): preserve explicit thinkingLevel on Antigravity Claude …
luispater Nov 1, 2026
bf83431
feat(config): add per-api-key connection-pool settings
sususu98 Oct 29, 2026
34a01b7
feat(proxy): pool upstream transports per api key
sususu98 Oct 29, 2026
9f0c9ff
docs(config): document per-api-key connection pools
sususu98 Oct 29, 2026
638f5f5
fix(proxy): honour per-key pool opt-in and isolate pools per runtime
sususu98 Oct 29, 2026
6c231c2
fix(proxy): lazily allocate uTLS pools and close fenced transports
sususu98 Oct 29, 2026
893958e
fix(proxy): decline pooling when http.DefaultTransport is not *http.T…
sususu98 Oct 31, 2026
fd02b72
fix(proxy): stamp keepalive on uTLS dialers, rebind stale compat exec…
sususu98 Nov 1, 2026
f692d93
Merge pull request #7101 from sususu98/feat/proxy-connection-pool
sususu98 Nov 1, 2026
5d8fddd
chore(meta): match Muse Code 1.4.14 client headers
Oct 30, 2026
bb6e1aa
fix(meta): include Muse namespace in tool-bearing requests
Oct 30, 2026
ecbaa6c
fix(devin): route compound fast thinking levels to upstream fast vari…
luispater Nov 1, 2026
a96e640
fix(auth): keep sign-in-required Codex credentials quarantined across…
luispater Nov 1, 2026
675debc
Merge pull request #7141 from Ruanyuxi1337/fix/release-flusher-idle
luispater Nov 1, 2026
41c03b7
fix(pluginhost): normalize same-format plugin executor streams throug…
Rick7C2 Nov 1, 2026
9037d54
fix(openai): drop output-only content_token_count from replayed respo…
luispater Nov 1, 2026
d65840f
fix(xai): append identity hash to credential filenames to prevent col…
luispater Nov 1, 2026
9513c2d
docs(auth): explain Codex refresh token key requirement
LTbinglingfeng Nov 1, 2026
a21814e
docs(config): note connection-pool pruning boundaries on save
sususu98 Nov 1, 2026
8a82bed
fix(helps): release TransportCache mutex on builder panic and retire …
sususu98 Nov 1, 2026
3698b15
fix(pluginhost): scope model execution streams to the owning plugin a…
sususu98 Nov 1, 2026
08437a6
fix(codex): keep shortened gateway mcp tool names readable in claude …
luispater Nov 1, 2026
aca8dfe
Merge pull request #7154
luispater Nov 1, 2026
f7331b5
fix(pluginhost): deframe same-format plugin executor streams and gate…
luispater Nov 1, 2026
8643ea5
fix(config): include connection-pool settings in credential deduplica…
sususu98 Nov 1, 2026
a579504
fix(api/middleware): finalize request logging on handler panic
sususu98 Nov 1, 2026
ce39bc6
feat(pluginstore): support plugin locales normalization and managemen…
luispater Nov 1, 2026
24f9744
Merge pull request #7143 from router-for-me/fix/codex-no-refresh-toke…
luispater Nov 1, 2026
53ff2f9
feat(pluginhost): expose per-entry name and logo for multi-entry OAut…
luispater Nov 1, 2026
ec06c3c
fix(translator): normalize numeric schema constraints when converting…
luispater Nov 1, 2026
4448b96
Merge pull request #7113 from zoidypuh/pr/muse-1414-client-headers
luispater Nov 1, 2026
00b7677
fix(translator): preserve developer roles in responses to chat comple…
luispater Nov 1, 2026
3ac3849
fix(gemini): preserve parallel responses tool output batches across d…
luispater Nov 1, 2026
7cad1cb
Merge pull request #7142 from gabrielrinaldi/fix/grok-video-1.5-lite
luispater Nov 1, 2026
c888ff7
fix(translator): normalize omitted and function roles in Gemini ingre…
sususu98 Nov 2, 2026
06ec5ea
Merge pull request #7187 from sususu98/fix/gemini-omitted-content-rol…
sususu98 Nov 2, 2026
32e3fd5
Merge pull request #7164 from sususu98/fix/transport-cache-panic-unlo…
sususu98 Nov 2, 2026
ef04e83
Merge pull request #7165 from sususu98/fix/credential-dedup-connectio…
sususu98 Nov 2, 2026
f31d60a
Merge pull request #7166 from sususu98/fix/request-logging-finalize-o…
sususu98 Nov 2, 2026
533687e
Merge pull request #6315 from SomSamantray/fix/antigravity-aicode-scope
sususu98 Nov 2, 2026
d96b194
fix(pluginhost): reject model stream registration after concurrent te…
sususu98 Nov 2, 2026
d7af371
Merge pull request #7167 from sususu98/fix/pluginhost-model-stream-ow…
sususu98 Nov 2, 2026
b1a3e50
docs: remove OpenLux sponsorship from READMEs
LTbinglingfeng Nov 2, 2026
be2563f
docs: update Xcode sponsorship copy
LTbinglingfeng Nov 2, 2026
6e6afab
refactor: migrate gjson, sjson, and base64 to MoeForge/moego
luispater Nov 2, 2026
e582706
fix(auth): prevent auto-refresh spin for disabled credentials with re…
luispater Nov 2, 2026
0130d6f
fix(claude): keep Fable-only 429 rejections model-scoped when 5h head…
luispater Nov 3, 2026
e25b7da
fix(devin): sanitize embedded exec tool phrases and stop retrying req…
luispater Nov 3, 2026
24b0454
fix(antigravity): map safety and filter finish reasons to refusal in …
luispater Nov 3, 2026
d389977
fix(management): honor targeted OAuth re-login across all built-in pr…
luispater Nov 3, 2026
a1eeb60
fix(codex): disable supports_image_detail_original for non-codex cata…
luispater Nov 3, 2026
9acf81d
fix(claude): drop replayed web search citations when search results a…
luispater Nov 3, 2026
dde469d
fix(pluginhost): isolate unix plugin dlopen crashes with a preflight …
luispater Nov 3, 2026
54778bd
fix(agents): enforce usage of moego libraries for JSON and Base64 ope…
luispater Nov 3, 2026
6d4102f
feat(config): support native-entrypoints configuration for Claude Cod…
luispater Nov 3, 2026
04208ef
fix(pluginhost): preserve disabled auth state across plugin refreshes
luispater Nov 3, 2026
be86430
fix(translator/gemini): nest Claude tool_result images inside functio…
luispater Nov 3, 2026
b3442f6
fix(devin): keep sealed reasoning items sent back via the Responses API
maomaocun Nov 3, 2026
193debb
Merge pull request #7229 from maomaocun/fix/devin-responses-reasoning…
luispater Nov 3, 2026
cfa25b4
refactor(translator): build Devin thought step with a single ojson.Doc
luispater Nov 3, 2026
01b24f1
fix(codex): preserve and forward max_output_tokens across request tra…
luispater Nov 3, 2026
6d7e6a3
feat(usage): extract cached image/audio and interactions modality tokens
sususu98 Nov 3, 2026
fb30a9e
fix(thinking): prefer Claude mid-conversation effort directives in us…
luispater Nov 3, 2026
061ffe6
fix(devin): honor Claude mid-conversation effort directives when sele…
luispater Nov 3, 2026
606e667
fix(codex): sanitize invalid characters in Codex input item IDs
luispater Nov 3, 2026
6e10359
fix(pluginhost): abort hot reload on quiesce failure and coordinate u…
luispater Nov 3, 2026
196ca83
Merge pull request #7231 from sususu98/feat/usage-cached-modality-tokens
sususu98 Nov 4, 2026
f72f8bf
feat(antigravity): bump fallback version to 2.29.0 and add changelist…
sususu98 Nov 4, 2026
f3762c6
feat(auth): extract Antigravity model discovery to sdk/auth
sususu98 Nov 4, 2026
f49bd5d
refactor(auth): route Antigravity model JSON operations through ojson
sususu98 Nov 4, 2026
cbf0188
Merge pull request #7238 from sususu98/feat/antigravity-models-discov…
sususu98 Nov 4, 2026
0e02765
fix(auth): clone parsed model IDs and preserve nil unknown catalogs
sususu98 Nov 4, 2026
c3938b7
fix(logging,clienterror): classify mid-stream cyber blocks as 400 and…
sususu98 Nov 4, 2026
0a94b2a
fix(logging,executor): preserve Claude Fast classified error status a…
sususu98 Nov 4, 2026
69a032d
perf,fix(logging,websocket): avoid 200 OK body buffering and synchron…
sususu98 Nov 4, 2026
03a8743
fix(executor): classify non-stream Claude policy refusals as 400 requ…
sususu98 Nov 4, 2026
508ac2b
fix(executor,handlers): require stream-level evidence for Gemini filt…
sususu98 Nov 4, 2026
78a9cc9
chore(deps): update github.com/router-for-me/moego to v0.1.2
luispater Nov 4, 2026
ec14dc4
feat(kvstore): add local bbolt key-value store and integration routing
luispater Nov 4, 2026
d57270f
fix(executor): support Codex remote compaction v2 on openai-compatibl…
luispater Nov 4, 2026
e6e5708
feat(claude): persist cloaked session date pins in persistent KV store
luispater Nov 4, 2026
f208c90
fix(handlers): record TTFT for direct plugin executor routes
luispater Nov 4, 2026
7a7d37e
feat(codex): add support for gpt-image-2.6 models
Nov 5, 2026
010de19
Merge pull request #7262 from Nciae-Zyh/feat/codex-gpt-image-26
sususu98 Nov 5, 2026
8c9a785
fix(openai): bridge client tool_search in Chat Completions Responses …
luispater Nov 5, 2026
6044c5d
fix(openai): translate thinking content-part arrays in Claude respons…
luispater Nov 5, 2026
be69162
fix(executor,logging): preserve Antigravity usage evidence, sparse Cl…
sususu98 Nov 5, 2026
6897eeb
Merge pull request #7242 from sususu98/fix/cyber-block-request-fault-…
sususu98 Nov 5, 2026
dfe8b18
fix(codex,auth): bypass SIWC for OpenAI image requests and route dire…
sususu98 Nov 5, 2026
b5e6027
fix(openai): expose terminal 429 error frames on responses websocket
luispater Nov 5, 2026
62c58a7
Merge pull request #7265 from sususu98/fix/codex-openai-image-bypass-…
sususu98 Nov 5, 2026
585f97d
fix(auth): pass context and headers to availableAuthsForSelector in H…
sususu98 Nov 5, 2026
f2e255f
fix(usage): clear consumed queue slot in usage manager dispatcher
luispater Nov 5, 2026
8fb6032
fix(codex): handle Responses-Lite hosted image_generation compatibility
luispater Nov 5, 2026
a3c84a3
feat(devin): update devin_models.json with swe-2-flash, nemotron-3-5-…
sususu98 Nov 5, 2026
1c53721
fix(auth): keep count_tokens 501 and unsupported capability responses…
luispater Nov 5, 2026
c2f402b
fix(meta): send X-Tbh-Contributor-Mode header only for contributor mo…
luispater Nov 5, 2026
c1842be
feat(models): add gpt-6-chat-thinking to registries
luispater Nov 5, 2026
55c05f7
fix(claude): correct gemini tool result and signature translation
luispater Nov 6, 2026
9be4813
fix(codex): normalize small claude output budgets
luispater Nov 6, 2026
e458999
fix(claude): show cooldown retry time in error messages
luispater Nov 6, 2026
1d4e054
fix(auth): preserve terminal responses across execution paths
GavinKung Nov 6, 2026
2c16b1a
Merge pull request #7294 from router-for-me/fix/home-terminal-request…
GavinKung Nov 6, 2026
fb77445
fix(executor): support Codex remote compaction v2 on native Devin route
luispater Nov 6, 2026
d1e5cc6
fix(codex): reject unsupported hosted image requests
GavinKung Nov 6, 2026
e5e6ad1
Merge pull request #7295 from router-for-me/fix/codex-hosted-image-re…
GavinKung Nov 6, 2026
68cd757
fix(codex): prevent replay after uncertain refresh outcomes
luispater Nov 6, 2026
0559fa3
feat(management): expose oauth_provider in credential list
WizisCool Nov 6, 2026
bfac858
fix(codex): normalize small output budgets for all source formats
luispater Nov 6, 2026
2443e88
fix(codex): normalize nested custom tools across Chat Completions rou…
luispater Nov 6, 2026
374056f
fix(codex): preserve prompt cache prefix when loading deferred tools …
luispater Nov 6, 2026
c9f9739
Merge pull request #7308 from WizisCool/feat/management-oauth-provider
luispater Nov 6, 2026
482efbf
feat(auth): enhance OAuth provider handling with explicit hints and m…
luispater Nov 6, 2026
ea0b471
fix(claude): align OAuth authorization state and scopes
GavinKung Nov 7, 2026
eabcd01
Merge pull request #7317 from router-for-me/fix/claude-oauth-authoriz…
GavinKung Nov 7, 2026
2776281
fix(claude): keep mid-session responses system items in place to pres…
luispater Nov 7, 2026
c5251b5
fix(translator): preserve reasoning and text across multi-part gemini…
luispater Nov 7, 2026
5f38d55
fix(auth): keep native Codex available during SIWC recovery
GavinKung Nov 7, 2026
bbefed6
Merge pull request #7305 from router-for-me/fix/codex-refresh-uncerta…
GavinKung Nov 7, 2026
f4d3f06
fix(openai): replace responses websocket transcript when pending tool…
luispater Nov 7, 2026
b5b724d
fix(pluginhost): reuse content-addressed plugin shadow copies across …
luispater Nov 7, 2026
69637a6
fix(openai): skip whitespace-only reasoning when opening Claude think…
luispater Nov 7, 2026
ce38c75
fix(claude): drain streamed response body after message_stop to reuse…
luispater Nov 7, 2026
e6931d5
fix(translator): preserve standalone Claude output_config.effort on O…
luispater Nov 7, 2026
91e0dee
fix(openai): prevent SSE keep-alive injection mid-line during image s…
luispater Nov 7, 2026
1bff119
Merge upstream 91e0dee827ab with Pinable host integration preserved
PinableAgents Nov 8, 2026
8068824
test: expose packaged discovery failures without masking errors
PinableAgents Nov 8, 2026
c9884ca
fix: preserve native discovery metadata and scope across platforms
PinableAgents Nov 8, 2026
a07f3bc
test: verify native metadata and isolate hosted multicast limitations
PinableAgents Nov 8, 2026
3cf816c
test: await websocket handlers before removing log fixtures
PinableAgents Nov 8, 2026
af6b2c2
fix: retain bounded plugin crash diagnostics before closing stderr
PinableAgents Nov 8, 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
  •  
  •  
  •  
10 changes: 9 additions & 1 deletion .github/workflows/pinable-runtime.yml
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ jobs:
shell: bash
run: |
python -m unittest discover -s scripts/pinable -p 'test_*runtime.py' -v
go test ./internal/discovery -run 'Test(MDNSQueryAddr6|ParseBrowsePacketInfo|WindowsBrowsePacketInfoLoopback|UnixBrowsePacketInfoLoopback)' -count=1
go test ./cmd/server ./internal/cmd ./internal/api ./internal/api/handlers/management ./sdk/access ./sdk/cliproxy ./internal/watcher -run 'Test.*(Host|Runtime|Ephemeral|Parent|Version|SafeMode)' -count=1
- name: Build pinned portable runtime (no catalog refresh)
env:
Expand All @@ -127,7 +128,14 @@ jobs:
env:
ARTIFACT_DIR: ${{ runner.temp }}/pinable-runtime-${{ matrix.id }}
shell: bash
run: python scripts/pinable/smoke_runtime.py --artifact-dir "$ARTIFACT_DIR"
run: |
args=()
# Hosted macOS has no LAN multicast route. Keep all other discovery
# errors fatal and label the real LAN scan unverified in smoke output.
if [[ "$TARGET" == darwin/* ]]; then
args+=(--allow-unavailable-multicast)
fi
python scripts/pinable/smoke_runtime.py --artifact-dir "$ARTIFACT_DIR" "${args[@]}"
- uses: actions/upload-artifact@v4
id: upload
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ permissions:

env:
GH_REPO: ${{ github.repository }}
GO_VERSION: '1.26.4'
GO_VERSION: '1.26.10'

jobs:
prepare-release:
Expand Down
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ go build -o test-output ./cmd/server && rm test-output # Verify compile (REQUIRE
- As a rule, do not make standalone changes to `internal/translator/`. You may modify it only as part of broader changes elsewhere.
- If a task requires changing only `internal/translator/`, run `gh repo view --json viewerPermission -q .viewerPermission` to confirm you have `WRITE`, `MAINTAIN`, or `ADMIN`. If you do, you may proceed; otherwise, file a GitHub issue including the goal, rationale, and the intended implementation code, then stop further work.
- `internal/runtime/executor/` should contain executors and their unit tests only. Place any helper/supporting files under `internal/runtime/executor/helps/`.
- Do not use `github.com/tidwall/gjson`, `github.com/tidwall/sjson`, or Go's standard `encoding/base64`. Always use `github.com/MoeForge/moego/ojson` and `github.com/MoeForge/moego/base64` for all JSON and Base64 operations. All JSON write operations (`Set`, `SetRaw`, `Delete`, etc.) MUST be performed on `*ojson.Doc` (`ojson.NewDoc` / `ojson.NewDocString`), passing `*ojson.Doc` across mutation stages and serializing only once at the final exit (`doc.Bytes()` / `doc.String()`), rather than mutating raw `[]byte` or `string` payloads directly.
- Payload configuration MUST be the final semantic barrier before sending requests in every executor, including streaming, WebSocket, continuation, retry/fallback, image, and token-count paths where applicable. Complete all built-in payload translation, normalization, injection, and cleanup first, then evaluate and apply user payload rules exactly once to the final business payload. No subsequent logic may overwrite configured values or restore filtered fields. Only necessary transport framing, serialization, signature calculation, and read-only validation may follow without changing business payload semantics. Add regression tests when introducing or changing request-building paths to enforce this ordering.
- Follow `gofmt`; keep imports goimports-style; wrap errors with context where helpful
- Do not use `log.Fatal`/`log.Fatalf` (terminates the process); prefer returning errors and logging via logrus
Expand Down
53 changes: 31 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ You can access the following providers locally and with multiple CLI accounts th
</tr>
<tr>
<td align="center"><a href="https://www.kimi.com/code/?aff=cliproxyapi"><img src="./assets/logo/kimi.svg" alt="Kimi" width="28" height="28" /></a></td>
<td>Kimi series models (Kimi K3, K2.8 Preview, etc.). <a href="https://platform.kimi.ai/docs/guide/kimi-k3-quickstart">Kimi K3</a> is Moonshot AI’s most capable model and the world’s first open 3T-class model. With 2.8 trillion parameters, native vision, and a 1-million-token context window, K3 is built for long-horizon coding, knowledge work, and reasoning. CLIProxyAPI supports Kimi through OAuth or compatible API interfaces. Try a <strong>Kimi Code plan</strong> (<a href="https://www.kimi.com/code?aff=cliproxyapi">中文站</a> | <a href="https://www.kimi.ai/code?aff=cliproxyapi">Global</a>), or get an <strong>API key</strong> from the Kimi Open Platform (<a href="https://platform.kimi.com?track_id=track-f15622e7182046baa22ca35e006e13a7&aff=cliproxyapi">中文站</a> | <a href="https://platform.kimi.ai?track_id=track-8a28e4b291d84f62af2fccc3e7a21cb3&aff=cliproxyapi">Global</a>). Thanks to Kimi for supporting CLIProxyAPI and the open-source community!</td>
<td>Kimi series models (Kimi K3.1 Pro, K3.1 Pro Highspeed, K3, K2.8 Preview, etc.). <a href="https://platform.kimi.ai/docs/guide/kimi-k3-quickstart">Kimi K3</a> is Moonshot AI’s previous-generation flagship and the world’s first open 3T-class model. With 2.8 trillion parameters, native vision, and a 1-million-token context window, K3 is built for long-horizon coding, knowledge work, and reasoning. CLIProxyAPI supports Kimi through OAuth or compatible API interfaces. Try a <strong>Kimi Code plan</strong> (<a href="https://www.kimi.com/code?aff=cliproxyapi">中文站</a> | <a href="https://www.kimi.ai/code?aff=cliproxyapi">Global</a>), or get an <strong>API key</strong> from the Kimi Open Platform (<a href="https://platform.kimi.com?track_id=track-f15622e7182046baa22ca35e006e13a7&aff=cliproxyapi">中文站</a> | <a href="https://platform.kimi.ai?track_id=track-8a28e4b291d84f62af2fccc3e7a21cb3&aff=cliproxyapi">Global</a>). Thanks to Kimi for supporting CLIProxyAPI and the open-source community!</td>
</tr>
<tr>
<td align="center"><a href="https://developers.openai.com/api/docs/models"><img src="./assets/logo/openai.svg" alt="OpenAI" width="28" height="28" /></a></td>
<td>OpenAI GPT-6 models (GPT-6 Astra, GPT-6.1 Sol, GPT-6 Luna), including access through Codex OAuth. Astra is the flagship for complex reasoning and coding, Sol balances capability and cost, and Luna handles focused, high-volume work.</td>
<td>OpenAI GPT-6 models (GPT-6 Astra, GPT-6.1 Sol, GPT-6.1 Terra, GPT-6 Luna), including access through Codex OAuth. Astra is the flagship for complex reasoning and coding, Sol balances capability and cost, Terra focuses on visual reasoning and computer use, and Luna handles focused, high-volume work.</td>
</tr>
<tr>
<td align="center"><a href="https://www.anthropic.com/claude/fable"><img src="./assets/logo/claude.svg" alt="Anthropic" width="28" height="28" /></a></td>
Expand Down Expand Up @@ -85,10 +85,6 @@ PackyCode provides special discounts for our software users: register using <a h
<td>Bestproxy provides high-purity residential IPs with dedicated one-IP-per-account support. 🟡Residential Proxy - &#36;0.5/GB;🟡Static Residential Proxy - Starting at &#36;3/IP;🟡Unlimited Residential Proxy - Starting at &#36;67/Day. ✅<a href="https://bestproxy.com/?keyword=ayh7otlb">Get Free Trial.</a></td>
</tr>
<tr>
<td width="180"><a href="https://go.apimart.ai/gh-cliproxyapi"><img src="./assets/apimart-en.png" alt="APIMart" width="150"></a></td>
<td>Thanks to APIMart for sponsoring this project! APIMart is a low-cost API platform for AI image &amp; video generation — GPT-Image-2 from &#36;0.006/image, 160+ images per dollar. One async API covers both image and video: submit a task, get an ID, fetch results via polling or callback. Batch tens of thousands of images without timeouts, switch models without changing code. Pay-as-you-go with no monthly fee — <a href="https://go.apimart.ai/gh-cliproxyapi">sign up here</a> to get started.</td>
</tr>
<tr>
<td width="180"><a href="https://www.swiftproxy.net/?code=PR67S9A95"><img src="./assets/swiftproxy.png" alt="Swiftproxy" width="150"></a></td>
<td>Swiftproxy provides 90M+ clean residential IPs across 220+ locations, supporting HTTP(S)/SOCKS5, IP rotation, Sticky Sessions, and precise location targeting. It helps AI API tools and automation workflows access online services reliably from different locations, making it ideal for API requests, web access, data collection, and location-based testing. Residential proxies from &#36;0.7/GB. Free testing is available, with 10% off using code PROXY90. <a href="https://www.swiftproxy.net/?code=PR67S9A95">Try Swiftproxy Now</a></td>
</tr>
Expand All @@ -101,21 +97,28 @@ PackyCode provides special discounts for our software users: register using <a h
<td>PatewayAI is an API relay service provider for experienced AI developers, with full support for the Claude and Codex model families. All models come from high-quality official channels, with no dilution or counterfeiting, and transparent, verifiable billing details. Economy mode starts at just 5% of the official price. Register through <a href="https://pateway.ai/?ch=jjvdb">this link</a> to receive trial credits and participate in occasional promotions for free credits. The platform also supports enterprise-grade concurrency, a dedicated management dashboard, formal contracts and invoices, and two-way referral rewards of up to &#36;150.</td>
</tr>
<tr>
<td width="180"><a href="https://agentmarket.fluxapay.xyz/marketplace/tokenplans"><img src="./assets/fluxa-baidu-ai-cloud.png" alt="FluxA &amp; Baidu AI Cloud" width="150"></a></td>
<td>Thanks to FluxA &amp; Baidu AI Cloud for supporting this project! FluxA and Baidu AI Cloud jointly launched AgenticPlan, enabling AI Agents to autonomously purchase, manage, and use models, APIs, and tools. It includes Baidu Qianfan TokenPlan at prices as low as 60% of the standard rate, with access to flagship models such as DeepSeek V4, GLM 5.2, and Kimi. It also includes FluxA AgentMarket API call credits, unlocking 1,000+ paid APIs for search, data scraping, social media, finance, cryptocurrency, image generation, video, and more.<br><br>With user authorization, AI Agents can also use official Visa card payments to independently procure resources, manage API keys, monitor usage, and plan renewals—helping Agents evolve from “autonomously completing tasks” to truly being able to “autonomously plan budgets and complete tasks.” <a href="https://agentmarket.fluxapay.xyz/marketplace/tokenplans">Learn more about AgenticPlan</a>.</td>
</tr>
<tr>
<td width="180"><a href="https://www.openlux.ai/register?channel=c_6axb1q5n"><img src="./assets/openlux.png" alt="OpenLux" width="150"></a></td>
<td>Thank you to OpenLux for sponsoring this project!<br><br>OpenLux is an all-in-one AI platform for businesses, bringing together leading AI models from major providers worldwide. With fast, reliable service and responsive technical support, OpenLux offers base pricing for Claude, OpenAI, and Gemini models as low as 8.82%, 4%, and 8% of official rates, respectively.<br><br>Exclusive offer for CLI Proxy API users: Sign up through our referral link and enjoy up to 7.5% off credit top-ups!<br><br>Get started with OpenLux → <a href="https://www.openlux.ai/register?channel=c_6axb1q5n">https://www.openlux.ai/register?channel=c_6axb1q5n</a></td>
</tr>
<tr>
<td width="180"><a href="https://modelflare.dev/sign-up?utm_source=github&utm_campaign=cliproxyapi"><img src="./assets/modelflare.png" alt="Modelflare" width="150"></a></td>
<td>Thanks to Modelflare for sponsoring this project! Modelflare: Full strength, stable, nothing watered down. Global SOTA models at a lower cost. Operated by US-based Havenbyte LLC, Modelflare supports GPT, Claude, Gemini, Grok, and other leading models through common compatible protocols, plus 40+ image and video models. Cache compensation is a highlight: selected OpenAI groups (price-first, stable, and premium) guarantee daily cache hit rates of 65%, 75%, or 85%, and if eligible requests fall short, Modelflare refunds the difference, visible on the usage dashboard after settlement. Special offers: a single top-up of US&#36;20 unlocks the GPT discount group at a 0.015x price multiplier, and a single top-up of US&#36;50 unlocks the Claude discount group at a 0.03x multiplier. Register via <a href="https://modelflare.dev/sign-up?utm_source=github&utm_campaign=cliproxyapi">this exclusive link</a> to get started.</td>
</tr>
<tr>
<td width="180"><a href="https://kedaya.ai/register?aff=824X8RAHCYXM"><img src="./assets/kedaya.jpg" alt="kedaya.ai" width="150"></a></td>
<td>kedaya.ai is a stable and efficient AI model API relay service provider, covering leading models including Claude, GPT, Gemini, Grok, Antigravity, and DeepSeek. It supports native OpenAI (including Responses), Anthropic, and Gemini protocols, enabling seamless integration with clients such as CLIProxyAPI, Claude Code, Codex, Gemini CLI, and Grok CLI. OpenAI and Grok model prices can be as low as 0.1% of official rates! <a href="https://kedaya.ai/register?aff=824X8RAHCYXM">Exclusive registration link</a>.</td>
</tr>
<tr>
<td width="180"><a href="https://xcode.best/register?aff=OuDv"><img src="./assets/xcode.gif" alt="Xcode" width="150"></a></td>
<td>
🥚 <b>[Freebie Alert!] Register & submit a ticket with code to grab $5 free credit + 15% OFF first top-up!</b><br>
🚀 <b>More than just API routing — an all-in-one Web workspace:</b> Enjoy Web chat, AI image generation, video creation, and automated workflows right out of the box without any frontend setup.<br>
⚡ <b>All mainstream models supported:</b> High-speed routing for Claude, GPT, Gemini, DeepSeek, and more.<br>
🛡️ <b>Reliable guarantees:</b> Hassle-free refunds | Official invoicing | B2B & individual billing | High-availability customer support ready to help!<br><br>
👉 Xcode VIP Portal: <a href="https://xcode.best/register?aff=OuDv">https://xcode.best</a><br>
💬 Ticket Code: <code>CLIProxyAPI</code> (Submit a ticket to claim your credits instantly)
</td>
</tr>
<tr>
<td width="180"><a href="https://x.com/chenju_ai"><img src="./assets/chenju.png" alt="Chenju" width="150"></a></td>
<td>Thanks to <a href="https://x.com/chenju_ai">陈局 (Chenju)</a> for sponsoring this project! Probably the only slot here that won't ask you to sign up — no signup link, no promo code. Just raising a glass to the maintainers, because good open source deserves to be paid for. Come shoot the breeze on X: <a href="https://x.com/chenju_ai">@chenju_ai</a></td>
</tr>
</tbody>
</table>

Expand All @@ -142,6 +145,8 @@ PackyCode provides special discounts for our software users: register using <a h

CLIProxyAPI Guides: [https://help.router-for.me/](https://help.router-for.me/)

[Claude Code with a Codex backend](examples/claude-code-codex/README.md): optional visible progress, classifier routing, image-tool pass-through, and latency diagnostics.

## Management API

see [MANAGEMENT_API.md](https://help.router-for.me/management/api)
Expand Down Expand Up @@ -204,14 +209,6 @@ Native macOS menu bar app that unifies Claude, Gemini, OpenAI, and Antigravity s

Windows-native CLIProxyAPI fork with TUI, system tray, and multi-provider OAuth for AI coding tools - no API keys needed.

### [Claude Proxy VSCode](https://github.com/uzhao/claude-proxy-vscode)

VSCode extension for quick switching between Claude Code models, featuring integrated CLIProxyAPI as its backend with automatic background lifecycle management.

### [ZeroLimit](https://github.com/0xtbug/zero-limit)

Windows desktop app built with Tauri + React for monitoring AI coding assistant quotas via CLIProxyAPI. Track usage across Gemini, Claude, OpenAI Codex, and Antigravity accounts with real-time dashboard, system tray integration, and one-click proxy control - no API keys needed.

### [CPA-XXX Panel](https://github.com/ferretgeek/CPA-X)

A lightweight web admin panel for CLIProxyAPI with health checks, resource monitoring, real-time logs, auto-update, request statistics and pricing display. Supports one-click installation and systemd service.
Expand Down Expand Up @@ -311,6 +308,18 @@ A modern, responsive web dashboard and management console for CLIProxyAPI built

A Cloudflare-based LLM gateway and proxy server: CLIProxyAPI deployed to Cloudflare Workers + Containers in one click. Logins and config persist in R2, the dashboard sits behind a password, and API calls are refused until a client API key exists.

### [Hermes CLIProxyAPI Provider](https://github.com/duu261/hermes-cliproxyapi-provider)

Model-provider plugin for [Hermes Agent](https://github.com/NousResearch/hermes-agent) that registers one Hermes provider per CLIProxyAPI provider, each on the wire its executor accepts (Anthropic Messages, Responses or Chat Completions), with context windows and reasoning levels read from CLIProxyAPI. Optional read-only Management API pass for exact provider grouping. Listed in the [Hermes plugin catalog](https://hermes-agent.nousresearch.com/docs/plugins/cliproxyapi-provider): `hermes plugins install cliproxyapi-provider`.

### [Ebb](https://github.com/lucasnsaraujo/ebb)

Native macOS menu bar app for CLIProxyAPI pools. It shows how much of the pool's Claude, Codex and other providers' 5-hour and weekly limits is left and when it comes back, and sets each login's routing weight through the Management API so the accounts drain evenly.

### [Nia Live Demo](https://github.com/nia-teams/nia-live-demo)

Real-time full-duplex voice companion with a live, interactive SVG/HTML canvas. It combines two CLIProxyAPI capabilities: the Codex GPT-Live 1.1 media relay (`gpt-live-1-codex`, WebRTC + Sideband) for voice with instant barge-in, and `ultrafast` Responses (`gpt-6.1-sol` / `gpt-6-astra`) for drawing and editing the canvas while you talk.

> [!NOTE]
> If you developed a project based on CLIProxyAPI, please open a PR to add it to this list.

Expand Down
Loading
Loading