989 Commits
Author SHA1 Message Date
musi 057abaa1f9 Merge pull request #1871 from mertkayacs/fix/docker-no-token-in-redirect
fix(docker): stop handing the management token to unauthenticated clients
2026-10-10 11:35:09 +08:00
musistudio 3b0aebf370 Release v3.1.3 with refreshed CDN model catalog v3.1.3 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
musistudio 8e0257a56c Remove ai garbage 2026-10-09 19:17:40 +08:00
musistudio e6a0b76d42 Remove sponsor banner 2026-10-09 19:15:47 +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 d89a57101e Merge pull request #1758 from georgeatparallel/docs/parallel-toolhub-example
docs: add Parallel Search ToolHub setup example
2026-10-09 19:07:39 +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
Mert Kaya ec0cb4fecc fix(docker): stop handing the management token to unauthenticated clients
Nginx redirected GET / (and a token-less index page) to a URL carrying
CCR_WEB_AUTH_TOKEN, so anyone who could reach the published port got the
token from the Location header. The root now redirects to the page and
only passes on a ccr_web_token the caller already supplied. A generated
token is printed once to the container log, as Jupyter does.
2026-10-09 13:51:13 +03: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 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 f2e01bfe0c Merge pull request #1820 from Burlesque1/fix/activity-grid-month-label-height
fix(ui): reserve the month label row's real height in activity grids
2026-09-26 23:00:04 +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
musi 0f7de0eb99 Merge pull request #1827 from diogomcd/fix/opencode-public-free-tier
fix: resolve 403 FreeTierError on public OpenCode Zen providers
2026-09-26 18:13:56 +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
Burlesque1 99715925ee fix(ui): reserve the month label row's real height in activity grids
The activity grids size their cells from the frame's measured height, but
reserve a hard-coded height for the month label row (10px in the dashboard
widget, 8px in the tray widget). The row actually renders ~20px, and its
`mb-1` margin was never accounted for, so the reservation fell short and
`overflow-hidden` on the frame clipped the bottom row.

Measured on v3.1.1, dashboard widget (dimensions 2x2):

  frame (overflow-hidden)  121.5px available
  month label row          20px + 4px margin
  cells grid               7 x 12px + 6 x 3px gap = 102px
  content total            126px  ->  4.5px clipped

Reserve the label row's measured height plus its bottom margin instead, and
drop the vertical use of `monthLabelGap` (it is a column gap). The same
dimensions then compute cellSize 11 instead of 12, giving 119px of content
in the 121.5px frame - no clipping.

Verified in the running dashboard after a rebuild: content 119px vs frame
122px (3px slack), bottom row fully visible.

Fixes #1800
2026-09-22 15:19:21 +00:00
musi 75e9e750c1 Merge pull request #1812 from ysntony/add-kimi-ai-code-link 2026-09-21 06:07:39 +08:00
Tony Yu 0e4f008101 docs: add international Kimi Code link alongside domestic subscription link
kimi.com/code serves mainland China (WeChat / +86 sign-in, Alipay and WeChat Pay), so international readers cannot sign up or pay there.
Add the kimi.ai/code link (Google sign-in, card payment) to the sponsor banner link row and label both plan sites in the intro paragraph of the English and Chinese READMEs, keeping the same aff value.
2026-09-20 23:39:23 +08: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 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 3d6e5dab42 Merge pull request #1771 from ntdatt812/fix/tsconfig-node-project-inputs
fix(tsconfig): give the node project inputs it can actually have
2026-09-16 19:34:42 +08:00
musi a09fedaa6b Merge pull request #1770 from deymosh/fix/log-body.worker.js
fix(docker): include log body worker in UI build
2026-09-16 19:34:14 +08:00
musi 2257535eb5 Merge pull request #1764 from ntdatt812/chore/tsconfig-baseurl
chore(tsconfig): drop baseUrl so the configs survive TypeScript 7
2026-09-16 19:33:49 +08:00