363 Commits
Author SHA1 Message Date
musistudio 3b0aebf370 Release v3.1.3 with refreshed CDN model catalog 2026-10-09 19:37:21 +08:00
musistudio bc0f8c35d7 Merge origin/main into feat/v3.1.3 for release 2026-10-09 19:21:26 +08:00
musi 1cade32175 Merge pull request #1849 from jiweiyeah/feat/y-api-preset
feat(providers): add Y-API preset
2026-10-09 19:07:58 +08:00
musi 61108c11ff Merge pull request #1847 from zhi1ong/feat/preserve-upstream-protocol
fix(gateway): preserve protocol selection for provider aliases
2026-10-09 19:07:52 +08:00
musi 2b1fe376f6 Merge pull request #1834 from ronicayu/fix/provider-base-url-models-path
fix(providers): keep custom base paths ending in /models
2026-10-09 19:07:46 +08:00
musi abe8459a10 Merge pull request #1756 from pacocartones/fix/openrouter-provider-catalog-timeout
fix(providers): bound OpenRouter provider-catalog fetches with a timeout
2026-10-09 19:07:31 +08:00
musistudio 0f8af313ba feat: update bundled model catalog from R2 CDN 2026-10-09 18:11:41 +08:00
musistudio 915c5f8e9a Fix October routing and gateway issues and remove dependency patches
Preserve Windows Pi dispatch arguments, serialize raw trace adoption, recover
unexpected core exits without overriding manual stop/start, and avoid unused
token estimation and repeated route script body copies. Preserve custom token
counts and select the configured protocol for bare runtime provider IDs.

Remove all gateway dependency patches and build directly from upstream commit
0a2c0abd48d2144ed0ac2ce4d954a661c51ffcb1. Include reproducing regressions and
update desktop/Docker release packaging and development records.

Validation: CCR targeted regressions 270 passed, 2 Windows skips; upstream
full suite 931 passed, 7 skips; bundled HTTP/SSE/SQLite/process tests 4 passed.
Type checks and both production builds passed.
2026-10-09 17:51:08 +08:00
musi 499b7f6310 Merge pull request #1865 from Burlesque1/fix/rawtrace-preserve-fallback-attempts
fix: stop raw-trace sync from clobbering gateway response headers
2026-10-09 11:55:18 +08:00
musi 4b31d1d6cd Merge pull request #1866 from uta-a/fix/codex-session-affinity
fix(core): send session_id header for Codex Responses prompt cache affinity
2026-10-09 11:55:08 +08:00
musi 861c09f91f Merge pull request #1858 from Louayzouaoui1/fix/econnreset-stream-errors
fix(gateway): propagate upstream stream resets instead of crashing the core
2026-10-09 11:54:41 +08:00
uta-aandClaude Opus 5.5 b6f4d6a9fc fix(core): send session_id header for Codex Responses prompt cache affinity
The Codex backend routes prompt caching by the session_id request header;
prompt_cache_key in the body alone does not hit the cache. Codex upstreams
were skipped entirely, so Claude Code sessions routed to Codex got almost
no cache reads. Add the session_id header (unless already present) and
prompt_cache_key (unless caller-supplied) for Codex, still without metadata.
Fall back to the session id embedded in metadata.user_id and drop values
unsafe for HTTP headers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0199MDCTCCgDMRPaiKkrXEGA
2026-10-08 21:59:42 +09:00
Burlesque1 23bf32654b fix: stop raw-trace sync from clobbering gateway response headers
raw-trace updates rewrote request_logs.response_headers with the upstream
header set (or "{}" when the set was empty), wiping the gateway-inserted
x-ccr-fallback-attempts header that powers the R{n} retry badge on the log
page. Since updateFromRawTrace only refines rows the gateway already
inserted, keep the incoming headers for usage/billing extraction below but
stop persisting them to the response_headers column.

Adds a regression test asserting x-ccr-fallback-attempts survives raw-trace
updates carrying both a non-empty header set and an empty {} set.

Fixes #1864
2026-10-08 11:15:13 +00:00
musistudio 858189daba chore(release): v3.1.2 2026-10-08 18:37:56 +08:00
musistudio 26e7b0b72c fix codex worksapce error 2026-10-08 18:19:30 +08:00
Burlesque1 c3bb363640 fix: disambiguate bare model ids by request protocol in model registry
A bare model id registered under multiple providers with disjoint
protocol capabilities resolved to undefined, so hop 1 failed locally
and the request silently fell through to the global fallback chain on
a different model. ModelRegistry.resolve() now accepts the request
protocol and uses it to break ties between bare-id matches;
genuinely ambiguous ids (no protocol given, same protocol declared
on both providers, or providers without capability metadata) keep
the previous undefined behavior instead of guessing.

Fixes #1860.
2026-10-08 10:10:24 +00:00
Louay Zouaoui f070c9443b fix(gateway): propagate upstream stream resets instead of crashing the core
Readable.fromWeb(upstream.body).pipe(transform) leaves the source with no
'error' listener, so an upstream ECONNRESET mid-stream ("TypeError:
terminated") became an unhandled 'error' event and killed the core gateway
process. Use stream.pipeline() in the live token rate transform and the
Codex apply-patch / multi-agent bridges so the error destroys the whole
chain and reaches the response consumer.

The main-process proxy already listens for errors on every stage, but
.pipe() never ended the client response, so the client hung until its own
timeout. Destroy the response once the stream error is logged.

Fixes #1846
2026-10-06 01:58:50 +01:00
yeheboo 69b9d5ae06 feat(providers): register Y-API in providerPresets 2026-10-02 17:42:09 +08:00
yeheboo 26337fadf1 feat(providers): add Y-API preset 2026-10-02 17:42:00 +08:00
Alex Liu ded1a9a4e5 fix(gateway): preserve protocol selection for provider aliases 2026-10-01 17:13:41 +08:00
musistudio ff3c99aef2 Verify issue reproductions and close remaining regression gaps 2026-09-28 00:03:19 +08:00
RonicaandClaude Opus 5.5 6a38bf4625 fix(providers): keep custom base paths ending in /models
Base URL normalization stripped any trailing /models, so a custom
provider URL like https://host/platform/models became
https://host/platform. Only treat /models as the model-list endpoint
when it sits at the root or directly under an API version segment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 14:50:20 +08:00
musistudio 849aa46df3 Fix recent issue regressions in config, OAuth, routing and observability 2026-09-27 11:34:24 +08:00
musi f60a9d4f90 Merge pull request #1821 from googio/feat/serply-search
feat(fusion): add Serply as a web search provider
2026-09-26 18:14:36 +08:00
musi 5469ecdfc9 Merge pull request #1824 from pomelogo/fix/compact-handoff-keep-tool-result
fix(context-archive): keep trailing tool_result when replacing Claude Code compact prompt
2026-09-26 18:13:58 +08:00
Diogo Macedo 5488e6635e fix: make public OpenCode Zen free-tier imports pass the client check 2026-09-25 22:04:14 -03:00
liuzechen c7850e1ce2 fix(context-archive): keep trailing tool_result when replacing Claude Code compact prompt 2026-09-23 14:44:06 +08:00
serply 7c3e6465b2 feat(fusion): add Serply as a web search provider
Adds Serply to the hosted web search providers and the built-in Fusion
web_search MCP tool, alongside Brave, Bing, Google CSE, Serper, SerpAPI,
Tavily and Exa. Configured with SERPLY_API_KEY and an optional
SERPLY_SEARCH_ENDPOINT override, like the other providers.
2026-09-22 22:01:16 -04:00
musistudio 86dfac1c67 Preserve Codex approval reviewer settings 2026-09-20 11:14:00 +08:00
musistudio e52f037d38 Support DeepSeek cache usage for OpenCode Go 2026-09-18 10:22:55 +08:00
musistudio cb88b31668 Coalesce adjacent unsigned Anthropic reasoning fragments 2026-09-17 20:13:02 +08:00
musistudio b7eb827d65 Reuse shared Windows batch escaping helpers 2026-09-17 20:05:29 +08:00
musistudio 503a8c17ae Translate context-limit errors and resolve API key helper conflicts 2026-09-17 20:00:46 +08:00
musistudio aad384b3cf Refresh routed model header on fallback attempts 2026-09-17 19:47:21 +08:00
musistudio a034b0c51c update models.json 2026-09-17 10:02:45 +08:00
musistudio 471e715c20 chore(release): v3.1.1 2026-09-16 20:09:27 +08:00
musistudio e6207860c1 Merge remote-tracking branch 'origin/main' into feat/v3.1.1 2026-09-16 19:50:08 +08:00
musi 8eefcca276 Merge pull request #1774 from zeal-up/fix/usage-client-visible-selector-attribution
fix(usage): attribute client-visible provider-prefixed response models to the bare model
2026-09-16 19:18:05 +08:00
musistudio 7a711b9006 Merge branch 'main' into feat/v3.1.1 2026-09-16 11:08:47 +08:00
musi 175109d4bb Merge pull request #1786 from Aser-Osama/feat/opencode-go-support
feat(opencode): add first-class OpenCode Go local import
2026-09-15 20:11:34 +08:00
musi 8fa1a666ab Merge pull request #1790 from cpruijsen/fix/issue-1787
fix(usage): price routed models instead of rule aliases (#1787)
2026-09-15 19:58:34 +08:00
musi ef02b463a7 Merge pull request #1794 from fszcd/fix/gateway-config-acceptance-timeout
fix(gateway): raise and make configurable the core config-acceptance timeout
2026-09-15 19:48:45 +08:00
musi 570d0793ce Merge pull request #1773 from zeal-up/fix/aggregate-error-attempt-details
fix(gateway): surface per-attempt failure details in aggregate error messages
2026-09-15 19:35:21 +08:00
musistudio 1691980170 Default Codex app approvals to user review 2026-09-15 19:31:54 +08:00
musistudio 774bfb85b7 Add live token rate tracking and stream metrics 2026-09-14 10:45:53 +08:00
ggbond 35207da958 fix(gateway): raise and make configurable the core config-acceptance timeout (#1761) 2026-09-13 22:12:14 +08:00
Christopher Pruijsen 6922a7130c fix(usage): price routed models instead of rule aliases (#1787) 2026-09-12 04:10:11 +01:00
Aser-Osama 0c070c6201 fix(opencode-go): read account usage from the official usage endpoint 2026-09-12 00:01:56 +03:00
Aser-Osama 3f3bc9be88 fix(opencode-go): harden discovery and session precedence 2026-09-11 05:07:30 +03:00
Aser-Osama e84d6927e5 fix(opencode-go): align credentials and discovered models 2026-09-11 04:09:27 +03:00