Skip to content

Port upstream 0.70.0: refresh 16 provider brand accents - #719

Draft
Finesssee wants to merge 1 commit into
port/upstream-0.70.0from
port/micro-0.70.0-brand-colors
Draft

Finesssee wants to merge 1 commit into
port/upstream-0.70.0from
port/micro-0.70.0-brand-colors

Conversation

@Finesssee

@Finesssee Finesssee commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Ports upstream v0.70.0 steipete#4075: the 16 provider accents that upstream's September 2026 palette audit adopted from official brand sources.

Windows keeps each provider's brand color in two tables: the Rust brand_color table and the frontend PROVIDER_ICON_REGISTRY. Both now carry the audited values. The seven provider chart tokens that mirrored the old accents move with them.

  • Accents: Abacus, Amp, Augment, Bedrock, ClinePass, Codebuff, Command Code, Cursor, DeepSeek, Devin, Kiro, LongCat, Mistral, Neuralwatt, Sub2API and Venice take the "Final" value from upstream docs/provider-palette.md. For example, Cursor changes from #00BFA5 to #F54E00, and Kiro from #FF9900 to #9046FF.
  • Chart tokens: --chart-amp, --chart-augment, --chart-codebuff, --chart-cursor, --chart-deepseek, --chart-kiro and --chart-mistral in styles.css equalled the old brand color, so they now equal the new one. The other nine providers have no chart token, as before.
  • Where the colors show: provider icons, the tray panel switcher's weekly bar, the float bar pills, the accent color placeholder and swatch in Settings → Providers, and the chart series of the seven providers above. Per-provider accent overrides (Add per-provider accent color override steipete/CodexBar#2972) are unchanged. The Windows tray icon doesn't use provider accents.
  • Guard rails:
    • A Rust test pins the 16 values.
    • A second Rust test applies upstream's non-regression rule to every change, measured against the accent Windows shipped before. On white and on #222222, the new accent must reach 3:1 or lose less than 0.5 of contrast.
    • A Vitest test fails if the TS registry and the Rust table disagree for any provider, or if a provider chart token drifts from its brand color. Grok is the one exception: its chart token has always been black.

Upstream reference

  • Update provider branding color palettes steipete/CodexBar#4075 "Update provider branding color palettes", merge commit 25bba9b7fd9ce83c33053958f7366e23b2dc8a82. The v0.70.0 release notes say: "Refreshed provider colors: 16 accents now match official brand sources, while colors that would hurt menu bar or widget readability keep their current values (Update provider branding color palettes steipete/CodexBar#4075)."
  • Tag-pinned v0.70.0 sources:
    • docs/provider-palette.md: the audit table with the old, proposed and final values and the contrast decision for each.
    • Sources/CodexBar/ProviderAccentPalette.swift
    • Tests/CodexBarTests/ProviderPaletteRegressionTests.swift: WCAG luminance, white and #222222 surfaces, and the rule "at least 3:1, or a loss under 0.5".

Ported / Deferred

Change Status
The 16 adopted accents in brand_color and PROVIDER_ICON_REGISTRY Ported
Chart tokens that mirrored the old accents (7) Ported
Upstream contrast non-regression rule Ported as Rust tests, measured against the previous Windows accents. The helper reproduces upstream's audit numbers, for example Abacus 5.01:1 on white and 3.17:1 on #222222.
Accents upstream kept (unverified or contrast-reducing proposals) that Windows already matches: AI&, Copilot, Fireworks, JetBrains, Kimi, Notion and OpenCode Unchanged. A test pins them.
Accents upstream kept where Windows already differs (table below) Deferred. Windows shipped these values before this port, and changing them is a separate palette decision that the 0.70.0 port doesn't make.
Codebuff and Sub2API icon glyphs Unchanged. The SVGs are byte-identical to upstream v0.70.0, where menu icons render as system-tinted templates. On Windows, their fixed glyph fills (#44FF00, and #2768FF with #2DC6D8) don't take the accent; the badge, bars and pills do.
Widget colors, confetti palettes, website cards, social preview, docs/provider.md Not applicable. Windows has no widgets, confetti, website or social card in this repo.
ClawRouter and Moonshot rows Not applicable. These providers don't exist on Windows.
Menu-bar icon tinting Not applicable. The Windows tray icon doesn't use provider accents.

Retained upstream accents where Windows already differs:

Provider Windows (unchanged) Upstream final
Chutes #FF5C35 #3184FF
Deepgram #13EF93 #6467F2
Doubao #2563EB #3370FF
Groq #F55036 #F56844
Kilo #5D87FF #F27027
LiteLLM #0EA5E9 #4C89F0
Perplexity #1FB8CD #20B2AA
Qoder #2563EB #10B981
Sakana #0EA5E9 #2975DB
T3 Chat #8B5CF6 #F56647
Warp #6366F1 #938BB4

Deepgram and Groq already use the value that upstream proposed and then declined.

Validation

Run in the worker worktree on Rust 1.98.0 and Node 24 at 40c6c116:

Command Result
cargo +1.98.0 fmt --all --check pass
cargo +1.98.0 clippy --workspace --all-targets -- -D warnings pass
cargo +1.98.0 test -p codexbar --lib core::provider::tests 23 passed
cargo +1.98.0 test -p codexbar 2164 passed, 0 failed, 1 ignored
cargo +1.98.0 test -p codexbar-desktop-tauri -- --skip bootstrap_payload_exposes_every_provider_variant 461 passed, 0 failed
pnpm install --frozen-lockfile pass
pnpm run check-locale 879 keys match between Rust and TS
pnpm test 67 files, 405 tests passed
pnpm run lint 0 errors. The 15 warnings are all in files this PR doesn't touch.
pnpm run build pass

The skipped desktop test is the non-hermetic #684 test, which #711 fixes.

Mutation check: changing Zed's color to #084cce in one table only made the new Rust/TS sync test fail. The change was reverted.

New tests:

  • core::provider::tests:
    • contrast_ratio_matches_upstream_audit_values
    • adopted_upstream_palette_accents_are_pinned
    • adopted_palette_accents_do_not_materially_regress_contrast
    • brand_colors_are_uppercase_hex
  • providerIcons.test.ts:
    • "uses the accents adopted by the upstream 0.70.0 palette audit"
    • "matches the Rust brand_color table for every provider"
    • "keeps provider chart tokens on the brand color"

Affected areas

  • rust/src/core/provider.rs: the brand_color values, its doc comment and the tests.
  • apps/desktop-tauri/src/components/providers/providerIcons.ts: the registry values.
  • apps/desktop-tauri/src/components/providers/providerIcons.test.ts: the sync tests.
  • apps/desktop-tauri/src/styles.css: seven --chart-* tokens.

UI proof

PASS on a fresh debug build of 40c6c116, driven over WebView2 CDP with the browser-use CLI. See the UI proof comment.

  • Settings → Providers: all 16 adopted accents reach the sidebar icons, and the 4 retained controls are unchanged.
  • Accent color field: shows the new default, for example Cursor #f54e00 and Kiro #9046ff.
  • Cursor #F54E00: paints the tray panel switcher's weekly bar and the float bar pill border.
  • Chart tokens: the 7 :root tokens carry the new values.
  • Not covered: the cost and token history charts, because the isolated kit has no spend history.
  • Not applicable: the Windows tray icon.

Adopt the accents upstream CodexBar 0.70.0 took from its palette audit
(steipete#4075): Abacus, Amp, Augment, Bedrock, ClinePass, Codebuff, Command Code,
Cursor, DeepSeek, Devin, Kiro, LongCat, Mistral, Neuralwatt, sub2api and
Venice. The Rust brand_color table, the frontend PROVIDER_ICON_REGISTRY and
the --chart-<id> tokens that mirror them move together.

Tests pin the adopted accents, check upstream's contrast non-regression
rule against the previous Windows accents on white and #222222, and keep
the Rust table, the registry and the chart tokens in sync.
@coderabbitai

coderabbitai Bot commented Sep 30, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Finesssee

Copy link
Copy Markdown
Collaborator Author

UI proof (browser-use)

Result: PASS on build 40c6c1166b17815e0e414f028ae7cbedb90cc421, the current PR head "Port upstream 0.70.0: refresh 16 provider brand accents". All 16 adopted accents reach the Settings → Providers icons, and the four retained controls keep their values. Cursor's new #F54E00 shows in the accent color field, the tray panel switcher's weekly bar and the float bar pill. The seven chart tokens carry the new values.

At the maintainer's direction, this proof drove the app's WebView2 over CDP with the browser-use CLI instead of CUA. It used no keyboard, mouse or focus. The proof windows stayed on the second display, and the kit settings turned the global shortcut off.

Setup

  • Build: pnpm run tauri:build:debug at 40c6c116 in the worker worktree. The exe was copied to the proof kit.
  • Proof-only patch: never committed, and reverted after the build.
    • A workspace Cargo.toml [patch.crates-io] dirs shim for an isolated home, plus the resulting Cargo.lock change.
    • A seed hook. On this base, parse_seed_usage_snapshot in proof_harness.rs accepts only a Codex seed, and Codex's accent doesn't change in this PR. The proof build also accepts a cursor seed.
    • A no-focus overlay, because this base doesn't include Stop CodexBar from stealing focus #713 yet. It changes only window focus, never colors:
      • drops the set_focus calls in the shell window, settings window, flyout and surface command;
      • builds the windows with focused(false) ("focus": false on main);
      • adds SWP_NOACTIVATE to the DWM frame refresh.
  • Data: isolated USERPROFILE, HOME, APPDATA, LOCALAPPDATA and provider homes under the kit. Only Cursor is enabled. Its cookie source is manual with no cookie saved, so nothing is fetched and no browser or keyring is read. The theme is auto, show_as_used is on and the float bar is on.
  • Seed: CODEXBAR_SEED_USAGE_JSON holds one bridge-shaped Cursor snapshot. It has a 30-day Plan window at 37% used that resets 7 days after launch, and errorState: "ready", which is what a successful fetch publishes.
  • Fixture notes:
    • Run 1 seeded a reset in 2099 and no errorState. The 2099 reset is past the int32 setTimeout limit (see Not blocking), so the reset-refresh timer fired at once. It forced a refresh that replaced the seed with Cursor's sign-in error. The Settings assertions (A0–A3, A6) don't read usage data, so run 1's results stand.
    • Run 2 moved the reset to 7 days out. Without errorState, the seed defaults to unknown, which the float bar renders as a problem pill.
    • Run 3 sets ready. A4 and A5 come from run 3.
  • Commands:
    • bash launch.sh settings:providers (run 1) and bash launch.sh trayPanel (runs 2 and 3) export WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--remote-debugging-port=9335 ....
    • Each run was driven with BU_CDP_URL=http://127.0.0.1:9335 BU_NAME=worker-719 BH_TAB_MARKER=0 browser-use < <script>.
    • Before each attach, curl /json/version showed Edg/154 WebView2. The port 9335 listener's parent was this kit's exe.
    • In every run, the foreground window stayed on the desktop's own app.

Results

# Assertion Result
A0 No real email or account from the host is visible. DOM scans of the Settings window, the tray panel and the float bar in all three runs found no @ addresses and no host user name. So did the scan of each sidebar screenshot view. PASS
A1 Dark under theme auto. In Settings and the tray panel: matchMedia('(prefers-color-scheme: dark)') is true, data-theme=dark, body rgb(28, 28, 30) with text rgb(245, 245, 247). The float bar is also data-theme=dark, with its transparent background and text rgba(255, 255, 255, 0.95). PASS
A2 Settings → Providers sidebar (78 rows). For each of the 16 adopted providers, the row --provider-brand, the icon --provider-brand and the icon's computed color equal the new accent. Abacus AI #814ee8, Amp #f34e3f, Augment #1aa049, AWS Bedrock #01a88d, ClinePass #5487c8, Codebuff #00ff95, Command Code #8c4edd, Cursor #f54e00, DeepSeek #4d6bfe, Devin #317cff, Kiro #9046ff, LongCat #29e154, Mistral #ff5229, Neuralwatt #d55934, sub2api #14b8a6, Venice #3c8fdd. The tinted glyphs (11 fills, plus Command Code's stroke="currentColor") and Devin's letter badge render in that color. The retained controls are unchanged: Codex #49a3b0, Copilot #a855f7, Kilo #5d87ff, Claude #cc7c5e. PASS
A3 Accent color field with no override. Reset to default is disabled in all three. PASS
Cursor: placeholder and picker #f54e00, swatch rgb(245, 78, 0), label #f54e00.
Kiro: #9046ff, swatch rgb(144, 70, 255).
Codex (control): #49a3b0, swatch rgb(73, 163, 176).
A4 Tray panel switcher, Cursor item (the overview item is selected). --weekly-color is #f54e00, the bar fill computes to rgb(245, 78, 0), and --weekly-pct is 37%. The icon carries --provider-brand: #f54e00. The switcher still draws its icons white through brightness(0) invert(1), as before. The bridge cache still holds the seed: Cursor 37%, errorState ready, no error. PASS
A5 Float bar, Cursor pill: --brand #f54e00, border 1px solid rgb(245, 78, 0), ok tone. It shows "37%" with the title "Cursor: 37% used / Resets in 6d 23h". Every opaque pixel in the capture is the border color (rgb(245, 77–79, 0)). PASS
A6 :root chart tokens: --chart-amp rgb(243, 78, 63), --chart-augment rgb(26, 160, 73), --chart-codebuff rgb(0, 255, 149), --chart-cursor rgb(245, 78, 0), --chart-deepseek rgb(77, 107, 254), --chart-kiro rgb(144, 70, 255), --chart-mistral rgb(255, 82, 41). --chart-grok stays rgb(0, 0, 0), the known exception. PASS
— Cost and token history charts Not covered: the isolated kit has no spend history. A6 reads the tokens these charts use through providerCostColor.
— Windows tray icon Not applicable: the tray icon renderer (rust/src/tray) doesn't read provider accents.

Validation at 40c6c116

Run in the worker worktree on Rust 1.98.0 and Node 24 before the proof build:

Command Result
cargo +1.98.0 fmt --all --check pass
cargo +1.98.0 clippy --workspace --all-targets -- -D warnings pass
cargo +1.98.0 test -p codexbar --lib core::provider::tests 23 passed
cargo +1.98.0 test -p codexbar 2164 passed, 0 failed, 1 ignored
cargo +1.98.0 test -p codexbar-desktop-tauri -- --skip bootstrap_payload_exposes_every_provider_variant 461 passed, 0 failed. The skipped test is the non-hermetic #684 test, which #711 fixes.
pnpm install --frozen-lockfile pass
pnpm run check-locale 879 keys match between Rust and TS
pnpm test 67 files, 405 tests passed
pnpm run lint 0 errors. The 15 warnings are all in files this PR doesn't touch.
pnpm run build pass

Screenshots

All paths are under C:\Users\FSOS\AppData\Local\Win-CodexBar\port-audit\proof\719\shots\. Disabled sidebar rows are dimmed, so their icons look darker in the captures than the computed colors in A2.

  • bu-01-settings-cursor-accent.png: Cursor selected. The orange icon, and the accent field showing #f54e00.
  • bu-02-settings-kiro-accent-sidebar-kiro-augment-amp.png: Kiro's accent #9046ff, with the Kiro, Augment and Amp rows.
  • bu-03-sidebar-abacus-mistral-bedrock-codebuff.png: Abacus AI, Mistral, AWS Bedrock, Codebuff and DeepSeek.
  • bu-04-sidebar-deepseek.png, bu-05-sidebar-commandcode-venice.png: DeepSeek, Command Code and Venice.
  • bu-06-sidebar-devin-sub2api.png, bu-07-sidebar-sub2api-clinepass-longcat-neuralwatt.png: Devin, sub2api, ClinePass, LongCat and Neuralwatt.
  • bu-08-traypanel-cursor-weekly-track.png: the switcher's Cursor item with the orange weekly bar at 37%.
  • bu-09-floatbar-cursor-pill-raw.png: the Cursor pill with the #f54e00 border. The float bar window is transparent, so the capture is RGBA. bu-09-floatbar-cursor-pill-raw-on-dark.png composites it onto #1c1c1e at 4x.

Not blocking (found on main, not caused by this PR)

  • The reset-refresh timer in useProviders overflows for resets more than about 24.8 days away.
    • The hook arms window.setTimeout(refresh, nextReset - now + 1000). WebView2 stores the delay as a 32-bit signed integer. In run 2's page, a 2280193515000 ms timer (the 2099 reset) fired after 0 ms, while a 7-day control timer did not fire.
    • Real data hits this whenever the soonest reset across enabled providers is between about 24.9 and 49.7 days away. For example, a Cursor-only user early in a billing month. In that case the timer fires at once and calls the forced refresh_providers. Each provider update then re-arms another overflowing timer.
    • The code dates from "Port upstream 0.38.0" (3b39f595). It's tracked separately, and this PR doesn't change it.
  • ClinePass's glyph renders black. Its SVG path has no fill, so the glyph is rgb(0, 0, 0) on the dark sidebar tile whatever the accent. The badge color is correct.
  • Kilo's glyph keeps a fixed dark fill (rgb(26, 26, 24)).

Neither SVG changes in this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant