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.
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
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.
OpenCode Go now requires x-opencode-session on requests to
https://opencode.ai/zen/go/v1; without it users receive 400 MissingSessionID
(#1754, #1780). Injecting that header safely requires CCR to know which
provider is really Go, so OpenCode Go is now a distinct local provider from
Zen when reading OpenCode configuration, credentials, and cached catalog
metadata.
- Read opencode and opencode-go entries independently from models.json,
opencode.json[c], auth.json, and OPENCODE_GO_API_KEY.
- Add x-opencode-session only for the official Go endpoint: explicit
configuration wins, otherwise forward x-claude-code-session-id or
x-claude-session-id, then metadata.user_id, then a stable process-level
fallback; values are sanitized for header safety.
- Keep Zen discovery/import unchanged, including public models, candidate
ids, fallback models, plugin suffixes, and the model cap.
- Keep Go and Zen separately importable and scope provider model discovery
to the requested protocol so Go providers only list models that work on
that protocol.
- Preserve catalog model ids, display names, and protocol classification;
surface locked Go candidates with actionable guidance; update EN/ZH docs.
Fixes#1246. Parse --daemon for service commands and route serve/web
through startService when it is set so foreground serve can run in the
background. start and ui already daemonize by default; the flag is now
accepted for backward compatibility with documented usage.
Tests: npm --workspace @musistudio/claude-code-router test (6 passed)