880 Commits
Author SHA1 Message Date
Kenneth Wong 02c45e088a fix(extended-context): suffix the Fable tier and default it on 1M launches
The previous commit assumed Claude Code's fable resolver strips [1m] and
therefore never wrote the suffix into ANTHROPIC_DEFAULT_FABLE_MODEL. That
premise only holds when ANTHROPIC_BASE_URL is unset or points at
api.anthropic.com. Behind a proxy (CLIProxy, headroom, ...) Claude Code
2.1.259 does the opposite:

- the fable alias resolver passes the env value through untouched, so a
  saved `claude-fable-5-1[1m]` reaches the model picker as-is;
- the context-window resolver grants 1M unconditionally when the model id
  carries [1m], and otherwise trusts a natively-1M model only when the base
  URL is first-party. Bare `claude-fable-5-1` via 127.0.0.1 is clamped to
  200k even though CLIProxy's /v1/models advertises max_input_tokens 1M.

So the suffix is the only thing that turns the long window on for CCS, and
stripping it from the Fable key is what kept `ccs claude --model fable` at
200k. A headroom settings profile with the suffix saved on that key showed
the 1M window in the same Claude Code build, which is how the inversion was
caught.

Changes:

- Drop the suffix-stripping key guard; ANTHROPIC_DEFAULT_FABLE_MODEL now
  receives and keeps [1m] exactly like the opus/sonnet tiers.
- On a long-context launch (explicit --1m, or a saved [1m] on any Anthropic
  tier key) fill a missing Fable tier with the catalog Fable model plus
  [1m]. The model-neutral claude profile pins no Fable model, so `--model
  fable` used to fall back to Claude Code's bare default and lose the window
  even when every other tier asked for 1M. An explicit mapping always wins,
  --no-1m never fills, and providers without a catalog Fable model are left
  alone.
- Add getDefaultFableTierModel() to the model catalog for that default.

Verified with a stub Claude binary that dumps its environment:

  ccs claude --model fable          -> ANTHROPIC_DEFAULT_FABLE_MODEL=claude-fable-5-1[1m]
  ccs claude --1m                   -> ANTHROPIC_DEFAULT_FABLE_MODEL=claude-fable-5-1[1m]
  ccs claude --no-1m --model fable  -> no Fable tier written, ANTHROPIC_MODEL stripped
2026-09-04 02:48:15 +08:00
Kenneth Wong 2b780ceae3 fix(extended-context): never write [1m] into the Fable tier key
Claude Code resolves ANTHROPIC_DEFAULT_FABLE_MODEL through a resolver that
strips the [1m] suffix before use, unlike the opus/sonnet resolvers which
pass their env value through untouched. The stripped value is then treated
as an env-supplied default and held to the standard 200k window instead of
the model's native 1M, so writing [1m] into that key costs the long context
window rather than granting it.

Measured against a Claude Code 2.1.259 session (`/context` on a live proxy
endpoint):

  ANTHROPIC_MODEL=claude-fable-5-1[1m]               -> 1m window
  ANTHROPIC_MODEL=claude-fable-5-1                   -> 200k window
  ANTHROPIC_DEFAULT_FABLE_MODEL=claude-fable-5-1[1m] -> 200k window

The fix is key-scoped rather than model-scoped, since the suffix is what
grants 1M on every other key. Adds envKeyAcceptsExtendedContextSuffix() as
the single place recording which keys reject the suffix, enforces it as a
floor inside applyExtendedContextPreferenceToAnthropicModels() so no caller
can bypass it, and strips a previously saved suffix from that key on the
next launch through the auto path.

Also extends the preference to CLAUDE_CODE_SUBAGENT_MODEL. Subagent windows
come from the same resolver as the main loop (the Explore inheritCap bounds
the model tier, not the context window), so a bare subagent model id sits at
200k while the suffixed form gets 1M. The new key list is kept separate from
ANTHROPIC_MODEL_ENV_KEYS, which also drives routing, model-id normalization
and profile validation.

Claude-Session: https://claude.ai/code/session_01NPkafQjVf4pSwPBwBistGk
2026-09-03 17:08:23 +08:00
Kenneth Wong 3583b544d0 feat(models): add Claude Fable 5.1 and correct Sonnet 5 pricing
Register `claude-fable-5-1` in the CLIProxy model catalog, the dashboard
catalog, and the usage pricing registry.

Pricing is taken from Anthropic's official pricing page:

- Fable 5.1 base rates are $10/$50 per MTok with a $12.50 5m cache write,
  matching Fable 5.
- Cache hits bill at 0.025x base input ($0.25/MTok) rather than the
  standard 0.1x multiplier. Anthropic applies that reduced rate only to
  Fable 5.1 and Mythos 5.1, so this entry cannot derive its cache rates
  from CACHE_READ_MULTIPLIER.

This also corrects Claude Sonnet 5 from $3/$15 to $2/$10 (cache write
$2.50, cache read $0.20). The launch introductory rate became the
standard price and the increase scheduled for 2026-09-01 was cancelled,
so the previous entry over-reported Sonnet 5 usage cost by 50%.

Thinking on Fable 5.1 is always on and can only be steered through
effort levels, so the catalog entry exposes the same `low`..`max` level
surface as Fable 5 and Opus 5 instead of a manual token budget.

The GitHub Copilot catalog is deliberately left unchanged, since Copilot
availability for Fable 5.1 is not verified; surfacing it there would
offer a model the backend may reject.

Regenerates docs/reports/hardening-inventory.{json,md} so the ci-parity
gate matches the source tree.
2026-09-03 16:26:41 +08:00
mardausdennis fde7bd83db feat(dashboard): collapse the CLIProxy status widget
ProxyStatusWidget sits outside the sidebar ScrollArea, so every row it
renders is taken from the provider list. With the proxy running and pool
routing on it renders ten stacked blocks, and the only Collapsible covers
version management, which is already closed in that state.

Add a chevron that collapses the whole widget in local and remote mode,
keeping the status row, version row and action buttons visible. The
preference is stored in localStorage and defaults to expanded, so
existing setups are unchanged. Opening version settings from a collapsed
widget expands it again.
2026-08-22 01:15:41 +02:00
Kai (Tam Nhu) Tran 9d725fcebb Merge pull request #1702 from Marc-oss-hub/feat/orcarouter-preset
feat(api): add OrcaRouter provider preset
2026-08-19 16:32:29 -04:00
Marc-oss-hubandClaude ea7906b975 feat(api): add OrcaRouter provider preset
Add a named 'orcarouter' preset to the shared provider catalog mirroring
the existing OpenRouter entry: OpenAI-compatible base URL
https://api.orcarouter.ai/v1, default model openai/gpt-5.5, sk-orca-...
key placeholder, and a dashboard icon. Regenerate the throw-error
baseline for the line shift in provider-preset-catalog.ts.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-13 22:29:17 +08:00
Khanh.NVMandClaude Fable 5 c30e9ca617 feat(cliproxy): add Grok 4.6 selection
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 16:23:24 +07:00
Kai (Tam Nhu) Tran 16abf18075 Merge pull request #1673 from jeffersongoncalves/feat/i18n-pt-br
feat(i18n): add Brazilian Portuguese (pt-BR) locale
2026-07-29 13:01:58 -04:00
Tam Nhu Tran 0a80dddb9c fix(i18n): complete Brazilian Portuguese locale 2026-07-29 12:54:35 -04:00
Tam Nhu Tran 0629b4a405 test(ui): cover Claude Opus 5 catalog visibility 2026-07-29 12:36:42 -04:00
Jefferson Simão GonçalvesandClaude Sonnet 5 bb2596e296 feat(i18n): add Brazilian Portuguese (pt-BR) locale
Adds a full pt-BR translation of the dashboard UI alongside the
existing en/zh-CN/vi/ja/ko locales, and wires locale detection/
storage to recognize pt-* browser locales.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-27 21:07:38 -03:00
Kenneth Wong ee90dd2640 feat: support claude opus 5 2026-07-27 15:07:26 +08:00
Tam Nhu Tran 1e11335348 docs(contributing): align test and UI guidance 2026-07-26 09:34:18 -04:00
Tam Nhu Tran 2d909a162f Merge remote-tracking branch 'origin/dev' into kai/review/pr-1655-retry-followup 2026-07-22 15:08:11 -04:00
Tam Nhu Tran 480b79551b fix: apply cliproxy retry settings safely 2026-07-22 15:08:06 -04:00
Kai (Tam Nhu) Tran 9cbf02b1be Merge pull request #1652 from minhbi245/feat/fable-tier-mapping
feat(ui): add fable tier row in model mapping
2026-07-22 14:59:24 -04:00
Kai (Tam Nhu) Tran 38fdd4441b Merge pull request #1653 from minhbi245/feat/codex-fast-toggle
feat(ui): add codex fast service-tier toggle
2026-07-22 14:41:11 -04:00
Kai (Tam Nhu) Tran 3608bf71a1 feat: rebrand CCS as Claude Codex Switch (#1658)
Closes #1657
2026-07-22 14:23:42 -04:00
Tam Nhu Tran c23b6bee19 fix(ui): preserve untrusted origins in dev proxy 2026-07-22 10:36:38 -04:00
milesnguyen2405 d5ea4eeea3 feat(cliproxy): expose request retry config
The generated CLIProxy config pinned request-retry and
max-retry-interval to 0 with no way to change them. Add an opt-in
config.cliproxy.retry block (schema validation, generator wiring,
dashboard inputs beside the routing controls, i18n x5). Unset config
keeps the generated output byte-identical; max-retry-interval unit
confirmed as seconds against upstream CLIProxyAPI.
2026-07-22 16:42:36 +07:00
milesnguyen2405 8d1a093cf9 fix(ui): preserve codex tuning metadata in live catalog merge 2026-07-22 15:14:03 +07:00
milesnguyen2405 108ff843f1 feat(ui): add codex fast service-tier toggle 2026-07-22 15:13:42 +07:00
milesnguyen2405 b27a007229 feat(ui): add fable tier row in model mapping 2026-07-22 14:51:40 +07:00
milesnguyen2405 30b54a0966 feat(ui): extend reasoning control to xai grok models 2026-07-22 11:53:07 +07:00
milesnguyen2405 e81fd80944 chore(ui): forward dev proxy origin for dashboard csrf guard 2026-07-22 11:29:45 +07:00
milesnguyen2405 e57bded451 feat(ui): add per-tier codex effort dropdown in model mapping 2026-07-22 11:29:04 +07:00
Tam Nhu Tran 4e4c949967 fix(cliproxy): harden xAI provider contracts 2026-07-18 19:04:07 -04:00
minhbi245 54a2b4759b feat(cliproxy): add xAI Grok provider 2026-07-17 00:02:12 +07:00
Kai (Tam Nhu) Tran 58c02a53d9 Merge pull request #1637 from kaitranntt/kai/feat/1633-gpt-5-6-models
feat(codex): add GPT-5.6 model catalog
2026-07-10 13:20:50 -04:00
Tam Nhu Tran 24eae8ae8f feat(codex): add GPT-5.6 model catalog
Closes #1633
2026-07-10 08:54:48 -04:00
Tam Nhu Tran 77e73dd091 fix(codex): preview joined migration TOML repair
Closes #1635
2026-07-10 08:54:18 -04:00
Tam Nhu Tran c8a4b42990 feat: add Sonnet 5 to Claude provider catalog 2026-07-02 10:31:42 -04:00
Tam Nhu Tran 631a515986 feat: support custom GHCP model selection 2026-07-02 10:10:28 -04:00
Tam Nhu Tran b9356a7ce6 feat(dashboard): promote CCS Bar globally 2026-06-12 14:51:08 -04:00
Tam Nhu Tran 1c90388b5d fix(cliproxy): harden account pools per pre-merge usefulness review
- pool --enable/--disable: refuse remote targets with manual config
  guidance; resolve the lifecycle port instead of assuming 8317
- enablePoolRouting: roll back the pool flag when config regeneration
  fails; already-enabled path re-runs regeneration (repairable state)
- pool opt-in prompt: gate on hasUnifiedConfig (legacy installs skip);
  never auto-accept consent under --yes/CCS_YES
- order show (file mode): render selector pick order incl. residual
  on-disk priorities and surface drift instead of alphabetical order
- order --reset: clear residual priority fields via management-API
  PATCH when proxy runs, atomic direct write when stopped
- quota pool section: classify in-proxy 429 cooldowns as cooling with
  reset times (graceful degradation when proxy or endpoint is absent);
  honest paused label plus resume hint
- routing state: remote targets report pool as not manageable instead
  of echoing the local flag; strategy/affinity apply warns when pool
  routing overrides the change (CLI, API message, and dashboard)
- claude model-neutral: --config explicit pins survive the stale-pin
  migration; remote env path filters historical default pins read from
  claude.settings.json without mutating the file
- cross-lane guard: also checks account-profile CLAUDE_CONFIG_DIR lanes
  for email overlap, not only the ambient ~/.claude login
- onboarding hint: opt-in copy naming ccs cliproxy pool --enable
- dashboard card: pool-ON shows drain-order pointer, pool-OFF shows the
  enable command, local-only note for remote proxies (i18n x5)
2026-06-11 18:50:12 -04:00
Tam Nhu Tran 74894f61da feat(cliproxy): pool visibility in quota output and dashboard routing card
- ccs cliproxy quota: per-provider Pool context section with routing
  mode (pool on/off, strategy, affinity, effective retry cap), drain
  order resolved exactly as the selector picks (incl. residual on-disk
  priorities reordering display + drift warning), and per-account state
  named distinctly: available / cooling-until-<time> / paused - these
  produce different client errors so they read differently
- cooling visibility degrades honestly when pool cooling is disabled
  (no cooldown data exists; renderer says so)
- dashboard routing card: pool badge + retry cap + drain-order hint in
  compact and full variants via additive poolRouting state block
- no Bar summary fields, no per-session pin introspection (cut per
  plan); policy_quota_unsupported semantics untouched

Part of #1464 account pools (phase 6).
2026-06-11 13:10:31 -04:00
Sergey 298c89f2c3 feat(catalog): add Claude Fable 5 to Anthropic model registry 2026-06-10 13:03:38 -04:00
Tam Nhu Tran 1e7ad7e75e feat(bar): add Get CCS Bar dashboard banner and ccs bar docs page
Add a 'Get CCS Bar' promo banner + card to the dashboard (mirroring the
OpenRouter promo pattern + design system) so users discover the macOS menu-bar
app, with a macOS-aware install CTA. Add a user-facing docs/ccs-bar.md covering
what it is, install via 'ccs bar install', launch, what it shows, uninstall,
and the loopback requirement -- closing the docs-sync gap for the new ccs bar
command.
2026-06-09 18:04:53 -04:00
Sergey Galuza 5157a922a5 test(accounts): align stale free-tier expectations with current behavior
Commit 72ea1fc9 ("fix(accounts): simplify codex free tier badges") split
free codex accounts out of the `personal` audience into a distinct
`free` audience and dropped the `'Personal · '` prefix on inlineLabel,
but `account-visual-groups.test.ts` was not updated and has been
failing in CI ever since.

Update expectations to match the shipped behavior:
- `audience` for `-free` tokens is `'free'`, not `'personal'`
- `inlineLabel` for a bare free account is `'Free'`, not `'Personal · Free'`
- `compactDetailLabel` is `null` when no extra parts are present
- Sort order: business -> personal -> free -> unknown

Drive-by fix unrelated to the Opus 4.8 work in this PR but caught
because these tests started failing on every push to the branch.

Built [OnSteroids](https://onsteroids.ai)
2026-05-30 23:01:58 +02:00
Sergey Galuza c74ad22bd4 Merge remote-tracking branch 'upstream/dev' into feat/claude-opus-4-8 2026-05-30 22:31:55 +02:00
Kai (Tam Nhu) Tran b75b8772fb Merge pull request #1424 from kaitranntt/codex/fix-logs-filtering-to-show-dashboard-audits
fix(ui): show dashboard audit logs by default
2026-05-30 16:15:18 -04:00
Kai (Tam Nhu) Tran f41480cdbd Merge pull request #1431 from kaitranntt/codex/fix-privacy-mode-account-label-exposure
fix(ui): blur account identity badges in privacy mode
2026-05-30 16:12:09 -04:00
Kai (Tam Nhu) Tran 7778ab7d39 Merge pull request #1453 from kaitranntt/codex/propose-fix-for-timeline-display-issue
fix(dashboard): respect actual timeline base time
2026-05-30 16:00:33 -04:00
Kai (Tam Nhu) Tran a6ea3f2d19 Merge pull request #1450 from kaitranntt/codex/fix-hidden-stale-default-model-in-live-catalogs
fix: keep live catalog defaults visible
2026-05-30 15:59:59 -04:00
Tam Nhu Tran 3d9636351e Merge remote-tracking branch 'origin/dev' into codex/fix-logs-filtering-to-show-dashboard-audits 2026-05-30 15:57:03 -04:00
Kai (Tam Nhu) Tran 80fcb54c67 Merge pull request #1440 from kaitranntt/codex/fix-log-detail-panel-timestamp-handling
fix(ui): guard invalid log detail timestamps
2026-05-30 15:46:14 -04:00
Kai (Tam Nhu) Tran 7b1e6cd209 Merge pull request #1449 from kaitranntt/codex/fix-gemini-tooltip-rendering-bug
fix(ui): preserve Gemini tier fallback without entitlement
2026-05-30 15:45:44 -04:00
Tam Nhu Tran f592260049 fix(ui): suppress privacy mode account title leaks 2026-05-30 15:37:47 -04:00
Kai (Tam Nhu) Tran f815db391d Merge pull request #1308 from simonsmh/feat/add-qoder-provider
feat(cliproxy): Qoder provider
2026-05-30 15:35:55 -04:00
Kai (Tam Nhu) Tran c0f5413523 fix(ui): preserve distinct log detail rows 2026-05-30 15:29:47 -04:00