From 2237e754220b7f8b71b2b9432721cbee60972fb6 Mon Sep 17 00:00:00 2001 From: Factory Agent Date: Fri, 23 Oct 2026 13:55:15 +0700 Subject: [PATCH] Use Pi's official brand color and repository Pi uses the blue from its official logo (#4D9ABF) instead of the generic purple, and its dashboard link points to earendil-works/pi. The pi-mono alias still parses. Pi joins the Mac parity accent table, so the contrast check covers it. Upstream steipete/CodexBar#4690. --- .../providers/providerIcons.test.ts | 1 + .../src/components/providers/providerIcons.ts | 2 +- rust/src/core/provider/id.rs | 22 +++++++++++++++---- rust/src/core/provider/spec.rs | 4 ++-- rust/src/core/provider_registry_snapshot.txt | 4 ++-- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/apps/desktop-tauri/src/components/providers/providerIcons.test.ts b/apps/desktop-tauri/src/components/providers/providerIcons.test.ts index d9215bbff6a..4236a2d5ee0 100644 --- a/apps/desktop-tauri/src/components/providers/providerIcons.test.ts +++ b/apps/desktop-tauri/src/components/providers/providerIcons.test.ts @@ -77,6 +77,7 @@ const MAC_PARITY_ACCENTS: Array<[string, string]> = [ ["openaiapi", "#0f826e"], ["openrouter", "#6467f2"], ["perplexity", "#20b2aa"], + ["pi", "#4d9abf"], ["poe", "#5d5cde"], ["qoder", "#10b981"], ["sakana", "#2975db"], diff --git a/apps/desktop-tauri/src/components/providers/providerIcons.ts b/apps/desktop-tauri/src/components/providers/providerIcons.ts index 83eba181051..775c31fab3d 100644 --- a/apps/desktop-tauri/src/components/providers/providerIcons.ts +++ b/apps/desktop-tauri/src/components/providers/providerIcons.ts @@ -227,7 +227,7 @@ export const PROVIDER_ICON_REGISTRY: Record = { augment: { id: "augment", brandColor: "#1aa049", fallbackLetter: "A", svgPath: RAW.augment }, claude: { id: "claude", brandColor: "#cc7c5e", fallbackLetter: "◈", svgPath: RAW.claude }, claudeplatform: { id: "claudeplatform", brandColor: "#cc7c5e", fallbackLetter: "◈", svgPath: RAW.claudeplatform }, - pi: { id: "pi", brandColor: "#7c3aed", fallbackLetter: "P" }, + pi: { id: "pi", brandColor: "#4d9abf", fallbackLetter: "P" }, codebuff: { id: "codebuff", brandColor: "#00ff95", fallbackLetter: "B", svgPath: RAW.codebuff }, coderabbit: { id: "coderabbit", brandColor: "#ff5c35", fallbackLetter: "C", svgPath: RAW.coderabbit }, codex: { id: "codex", brandColor: "#49a3b0", fallbackLetter: "◆", svgPath: RAW.codex }, diff --git a/rust/src/core/provider/id.rs b/rust/src/core/provider/id.rs index aa48a3144c7..d93cdc25322 100755 --- a/rust/src/core/provider/id.rs +++ b/rust/src/core/provider/id.rs @@ -713,10 +713,11 @@ mod tests { (ProviderId::OpenCode, "#3B82F6"), ]; - /// Mac CodexBar 0.70.0 descriptor colors adopted for parity: (provider, - /// previous Windows accent, Mac color). Source: the `color:` of each - /// `CodexBarCore/Providers//ProviderDescriptor.swift`. - const MAC_PARITY_ACCENTS: [(ProviderId, &str, &str); 24] = [ + /// Mac CodexBar descriptor colors adopted for parity: (provider, previous + /// Windows accent, Mac color). Source: the `color:` of each + /// `CodexBarCore/Providers//ProviderDescriptor.swift`. Pi is + /// the later upstream change to its official brand color (#4690). + const MAC_PARITY_ACCENTS: [(ProviderId, &str, &str); 25] = [ (ProviderId::Chutes, "#FF5C35", "#3184FF"), (ProviderId::Deepgram, "#13EF93", "#6467F2"), (ProviderId::Doubao, "#2563EB", "#3370FF"), @@ -730,6 +731,7 @@ mod tests { (ProviderId::OpenAIApi, "#10A37F", "#0F826E"), (ProviderId::OpenRouter, "#6B7280", "#6467F2"), (ProviderId::Perplexity, "#1FB8CD", "#20B2AA"), + (ProviderId::Pi, "#7C3AED", "#4D9ABF"), (ProviderId::Poe, "#5D5FEF", "#5D5CDE"), (ProviderId::Qoder, "#2563EB", "#10B981"), (ProviderId::Sakana, "#0EA5E9", "#2975DB"), @@ -848,6 +850,18 @@ mod tests { } } + #[test] + fn pi_uses_its_official_brand_color_and_current_repository() { + // Upstream #4690: Pi's logo blue, and the project link it points to. + assert_eq!(brand_color(ProviderId::Pi), "#4D9ABF"); + assert_eq!( + ProviderId::Pi.spec().metadata.dashboard_url, + Some("https://github.com/earendil-works/pi") + ); + // `pi-mono` is kept as a parse alias for existing configs and CLI use. + assert_eq!(ProviderId::from_cli_name("pi-mono"), Some(ProviderId::Pi)); + } + #[test] fn cli_aliases_resolve_back_to_their_provider_and_are_unique() { let mut seen = std::collections::HashMap::new(); diff --git a/rust/src/core/provider/spec.rs b/rust/src/core/provider/spec.rs index 8f119ab2b57..96daa690207 100644 --- a/rust/src/core/provider/spec.rs +++ b/rust/src/core/provider/spec.rs @@ -183,9 +183,9 @@ pub(crate) static SPECS: [ProviderSpec; COUNT] = [ .dashboard("https://platform.claude.com/usage") .status("https://status.claude.com/") .aliases(&["anthropic"]), - spec(P::Pi, "pi", "Pi", "#7C3AED") + spec(P::Pi, "pi", "Pi", "#4D9ABF") .labels("Session", "Weekly") - .dashboard("https://github.com/badlogic/pi-mono") + .dashboard("https://github.com/earendil-works/pi") .parse_aliases(&["pi-mono"]), // Upstream #2338: Cursor has no account credit balance to advertise. spec(P::Cursor, "cursor", "Cursor", "#F54E00") diff --git a/rust/src/core/provider_registry_snapshot.txt b/rust/src/core/provider_registry_snapshot.txt index d2be401361f..400b19956d3 100644 --- a/rust/src/core/provider_registry_snapshot.txt +++ b/rust/src/core/provider_registry_snapshot.txt @@ -6,9 +6,9 @@ Claude cli=claude display="Claude" cookie=Some("claude.ai") color=#CC7C5E deprec map=["anthropic", "claude"] metadata=ProviderMetadata { id: Claude, display_name: "Claude", session_label: "Session (5h)", weekly_label: "Weekly", supports_opus: true, supports_credits: true, default_enabled: true, is_primary: true, dashboard_url: Some("https://platform.claude.com/usage"), status_page_url: Some("https://status.claude.com/"), tertiary_label_key: None } sources=[Auto, OAuth, Web, Cli] oauth=true web=true cli=true -Pi cli=pi display="Pi" cookie=None color=#7C3AED deprecated=false blocking=None +Pi cli=pi display="Pi" cookie=None color=#4D9ABF deprecated=false blocking=None map=["pi"] - metadata=ProviderMetadata { id: Pi, display_name: "Pi", session_label: "Session", weekly_label: "Weekly", supports_opus: false, supports_credits: false, default_enabled: false, is_primary: false, dashboard_url: Some("https://github.com/badlogic/pi-mono"), status_page_url: None, tertiary_label_key: None } + metadata=ProviderMetadata { id: Pi, display_name: "Pi", session_label: "Session", weekly_label: "Weekly", supports_opus: false, supports_credits: false, default_enabled: false, is_primary: false, dashboard_url: Some("https://github.com/earendil-works/pi"), status_page_url: None, tertiary_label_key: None } sources=[Auto] oauth=false web=false cli=false Cursor cli=cursor display="Cursor" cookie=Some("cursor.com") color=#F54E00 deprecated=false blocking=None map=["cursor"]