From ff560d02633364bded41c0818642cad95e1d0e66 Mon Sep 17 00:00:00 2001
From: Wibias <37517432+Wibias@users.noreply.github.com>
Date: Wed, 5 Aug 2026 02:53:49 +0200
Subject: [PATCH 1/4] fix(gui): colored provider icons and correct OpenCodeX
mark
- opencode.svg is now the real OpenCodeX mark (rounded-square ring with
diagonal slash) in the brand accent instead of the placeholder frame
- all provider icons render with their official brand colors (explicit
fills; monochrome/currentColor variants replaced)
- providers without a logo asset get a deterministic colored
initial-letter tile instead of the generic server icon
- Usage surface marks use the colored variants; dark-mode invert filter
removed so brand colors stay correct
---
gui/public/provider-icons/alibaba-color.svg | 2 +-
.../cloudflare-ai-gateway-color.svg | 2 +-
gui/public/provider-icons/copilot-color.svg | 2 +-
gui/public/provider-icons/deepseek-color.svg | 2 +-
gui/public/provider-icons/firepass-color.svg | 2 +-
gui/public/provider-icons/fireworks-color.svg | 2 +-
.../provider-icons/github-copilot-color.svg | 2 +-
.../provider-icons/gitlab-duo-color.svg | 2 +-
gui/public/provider-icons/grok-color.svg | 2 +-
gui/public/provider-icons/groq-color.svg | 2 +-
.../provider-icons/huggingface-color.svg | 2 +-
gui/public/provider-icons/kimi-color.svg | 2 +-
gui/public/provider-icons/lm-studio-color.svg | 2 +-
gui/public/provider-icons/mistral-color.svg | 2 +-
gui/public/provider-icons/moonshot-color.svg | 2 +-
gui/public/provider-icons/nvidia-color.svg | 2 +-
gui/public/provider-icons/ollama-color.svg | 2 +-
gui/public/provider-icons/openai.svg | 2 +-
gui/public/provider-icons/opencode.svg | 3 ++-
.../provider-icons/openrouter-color.svg | 2 +-
gui/public/provider-icons/qianfan-color.svg | 2 +-
.../provider-icons/qwen-portal-color.svg | 2 +-
.../vercel-ai-gateway-color.svg | 2 +-
gui/public/provider-icons/vllm-color.svg | 2 +-
gui/public/provider-icons/xiaomi-color.svg | 2 +-
.../provider-workspace/ProviderRail.tsx | 27 +++++++++++++++++--
gui/src/pages/Usage.tsx | 4 +--
gui/src/styles.css | 5 ----
gui/src/styles/provider-workspace-shell.css | 14 ++++++++++
gui/tests/usage-grok-filter.test.ts | 2 +-
30 files changed, 68 insertions(+), 35 deletions(-)
diff --git a/gui/public/provider-icons/alibaba-color.svg b/gui/public/provider-icons/alibaba-color.svg
index be1080a1b8..9c042eba29 100644
--- a/gui/public/provider-icons/alibaba-color.svg
+++ b/gui/public/provider-icons/alibaba-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/cloudflare-ai-gateway-color.svg b/gui/public/provider-icons/cloudflare-ai-gateway-color.svg
index cf27626831..9d2ca53d77 100644
--- a/gui/public/provider-icons/cloudflare-ai-gateway-color.svg
+++ b/gui/public/provider-icons/cloudflare-ai-gateway-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/copilot-color.svg b/gui/public/provider-icons/copilot-color.svg
index 95945cd819..1bb3a7e36d 100644
--- a/gui/public/provider-icons/copilot-color.svg
+++ b/gui/public/provider-icons/copilot-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/deepseek-color.svg b/gui/public/provider-icons/deepseek-color.svg
index f25017e006..f53fac74ab 100644
--- a/gui/public/provider-icons/deepseek-color.svg
+++ b/gui/public/provider-icons/deepseek-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/firepass-color.svg b/gui/public/provider-icons/firepass-color.svg
index 7c4766ecb0..7a10d03617 100644
--- a/gui/public/provider-icons/firepass-color.svg
+++ b/gui/public/provider-icons/firepass-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/fireworks-color.svg b/gui/public/provider-icons/fireworks-color.svg
index 7c4766ecb0..7a10d03617 100644
--- a/gui/public/provider-icons/fireworks-color.svg
+++ b/gui/public/provider-icons/fireworks-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/github-copilot-color.svg b/gui/public/provider-icons/github-copilot-color.svg
index 4c1e12c077..4bd84cb856 100644
--- a/gui/public/provider-icons/github-copilot-color.svg
+++ b/gui/public/provider-icons/github-copilot-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/gitlab-duo-color.svg b/gui/public/provider-icons/gitlab-duo-color.svg
index ab1286a210..2099b79f75 100644
--- a/gui/public/provider-icons/gitlab-duo-color.svg
+++ b/gui/public/provider-icons/gitlab-duo-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/grok-color.svg b/gui/public/provider-icons/grok-color.svg
index f34a855c38..7374eefe94 100644
--- a/gui/public/provider-icons/grok-color.svg
+++ b/gui/public/provider-icons/grok-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/groq-color.svg b/gui/public/provider-icons/groq-color.svg
index d2953eedb5..3c34955a59 100644
--- a/gui/public/provider-icons/groq-color.svg
+++ b/gui/public/provider-icons/groq-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/huggingface-color.svg b/gui/public/provider-icons/huggingface-color.svg
index 9f855aaa2c..7a4074c52f 100644
--- a/gui/public/provider-icons/huggingface-color.svg
+++ b/gui/public/provider-icons/huggingface-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/kimi-color.svg b/gui/public/provider-icons/kimi-color.svg
index 580a63be26..2c1ccd0862 100644
--- a/gui/public/provider-icons/kimi-color.svg
+++ b/gui/public/provider-icons/kimi-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/lm-studio-color.svg b/gui/public/provider-icons/lm-studio-color.svg
index f9503437e2..f385720cb1 100644
--- a/gui/public/provider-icons/lm-studio-color.svg
+++ b/gui/public/provider-icons/lm-studio-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/mistral-color.svg b/gui/public/provider-icons/mistral-color.svg
index 70f05829f8..7081654a6b 100644
--- a/gui/public/provider-icons/mistral-color.svg
+++ b/gui/public/provider-icons/mistral-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/moonshot-color.svg b/gui/public/provider-icons/moonshot-color.svg
index 580a63be26..5a2fcc8407 100644
--- a/gui/public/provider-icons/moonshot-color.svg
+++ b/gui/public/provider-icons/moonshot-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/nvidia-color.svg b/gui/public/provider-icons/nvidia-color.svg
index d35752c369..a2873c6d93 100644
--- a/gui/public/provider-icons/nvidia-color.svg
+++ b/gui/public/provider-icons/nvidia-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/ollama-color.svg b/gui/public/provider-icons/ollama-color.svg
index 1c0ab7b629..f11d3de591 100644
--- a/gui/public/provider-icons/ollama-color.svg
+++ b/gui/public/provider-icons/ollama-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/openai.svg b/gui/public/provider-icons/openai.svg
index 78caf4fa20..e0fb25516a 100644
--- a/gui/public/provider-icons/openai.svg
+++ b/gui/public/provider-icons/openai.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/opencode.svg b/gui/public/provider-icons/opencode.svg
index a84a97e6b7..547eb021fa 100644
--- a/gui/public/provider-icons/opencode.svg
+++ b/gui/public/provider-icons/opencode.svg
@@ -1 +1,2 @@
-
+
+
diff --git a/gui/public/provider-icons/openrouter-color.svg b/gui/public/provider-icons/openrouter-color.svg
index 1d1e68cb08..e825d665b6 100644
--- a/gui/public/provider-icons/openrouter-color.svg
+++ b/gui/public/provider-icons/openrouter-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/qianfan-color.svg b/gui/public/provider-icons/qianfan-color.svg
index 89325f6dac..9c1130ed3b 100644
--- a/gui/public/provider-icons/qianfan-color.svg
+++ b/gui/public/provider-icons/qianfan-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/qwen-portal-color.svg b/gui/public/provider-icons/qwen-portal-color.svg
index 27fdc5ade0..bedfd9a1ee 100644
--- a/gui/public/provider-icons/qwen-portal-color.svg
+++ b/gui/public/provider-icons/qwen-portal-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/vercel-ai-gateway-color.svg b/gui/public/provider-icons/vercel-ai-gateway-color.svg
index 956f5c7a99..b3fe44b660 100644
--- a/gui/public/provider-icons/vercel-ai-gateway-color.svg
+++ b/gui/public/provider-icons/vercel-ai-gateway-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/vllm-color.svg b/gui/public/provider-icons/vllm-color.svg
index 672395deed..367570e3d2 100644
--- a/gui/public/provider-icons/vllm-color.svg
+++ b/gui/public/provider-icons/vllm-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/public/provider-icons/xiaomi-color.svg b/gui/public/provider-icons/xiaomi-color.svg
index 44c3b8e33c..9166ecdaed 100644
--- a/gui/public/provider-icons/xiaomi-color.svg
+++ b/gui/public/provider-icons/xiaomi-color.svg
@@ -1 +1 @@
-
+
diff --git a/gui/src/components/provider-workspace/ProviderRail.tsx b/gui/src/components/provider-workspace/ProviderRail.tsx
index 4079e61a12..af12944219 100644
--- a/gui/src/components/provider-workspace/ProviderRail.tsx
+++ b/gui/src/components/provider-workspace/ProviderRail.tsx
@@ -5,7 +5,7 @@
*/
/* eslint-disable react-refresh/only-export-components -- label helpers co-locate with the rail row */
import { useT, type TFn } from "../../i18n/shared";
-import { IconServer, IconStar } from "../../icons";
+import { IconStar } from "../../icons";
import {
binProviderStatus,
isFreeProvider,
@@ -48,18 +48,41 @@ export function ProviderIcon({ name, adapter, baseUrl, cls }: {
baseUrl?: string;
cls: string;
}) {
+ const t = useT();
const src = providerIconSrc(name, { adapter, baseUrl });
return (
{src ? (
) : (
-
+
)}
);
}
+/**
+ * Colored initial-letter tile for providers without a logo asset (long-tail
+ * presets and custom providers). Hue is derived deterministically from the
+ * provider id so the same provider always gets the same color.
+ */
+export function ProviderFallbackMark({ name, label }: { name: string; label: string }) {
+ const hue = [...name].reduce((acc, ch) => acc + ch.charCodeAt(0), 0) % 360;
+ const initial = (label.trim()[0] ?? name[0] ?? "?").toUpperCase();
+ return (
+
+ {initial}
+
+ );
+}
+
export function RailRow({ item, selected, tabbable, modelCount, isDefault, showConfigId, onClick, onFocus }: {
item: WorkspaceItem;
selected: boolean;
diff --git a/gui/src/pages/Usage.tsx b/gui/src/pages/Usage.tsx
index f3e1b215ac..d3e39ce3d7 100644
--- a/gui/src/pages/Usage.tsx
+++ b/gui/src/pages/Usage.tsx
@@ -231,10 +231,10 @@ function UsageFilters({
)}
{choice === "claude" && (
-
+
)}
{choice === "grok" && (
-
+
)}
{label}
diff --git a/gui/src/styles.css b/gui/src/styles.css
index 066316aea3..31ab807b4b 100644
--- a/gui/src/styles.css
+++ b/gui/src/styles.css
@@ -1994,11 +1994,6 @@ button.prov-account-row.active { cursor: default; }
.usage-segmented-btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; border: none; background: transparent; color: var(--muted); padding: 4px 12px; border-radius: var(--radius-pill); cursor: pointer; font: inherit; white-space: nowrap; }
.usage-segmented-btn.active { background: var(--raised); color: var(--text); font-weight: var(--weight-semibold); }
.usage-source-mark { width: var(--icon-sm); height: var(--icon-sm); flex: 0 0 auto; object-fit: contain; }
-:root[data-theme="dark"] .usage-source-mark { filter: invert(1); }
-
-@media (prefers-color-scheme: dark) {
- :root:not([data-theme="light"]) .usage-source-mark { filter: invert(1); }
-}
@media (max-width: 760px) {
.usage-segmented-btn { min-height: var(--control-touch); }
diff --git a/gui/src/styles/provider-workspace-shell.css b/gui/src/styles/provider-workspace-shell.css
index b847a68e70..1fe15f95fb 100644
--- a/gui/src/styles/provider-workspace-shell.css
+++ b/gui/src/styles/provider-workspace-shell.css
@@ -316,6 +316,20 @@
display: block;
}
+/* Colored initial-letter fallback for providers without a logo asset. */
+.provider-icon-fallback {
+ width: 100%;
+ height: 100%;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: var(--radius-xs);
+ font-weight: var(--weight-semibold);
+ font-size: 13px;
+ line-height: 1;
+ user-select: none;
+}
+
.provider-icon-mask {
mask-size: contain;
mask-repeat: no-repeat;
diff --git a/gui/tests/usage-grok-filter.test.ts b/gui/tests/usage-grok-filter.test.ts
index 6d7c505441..7bb5d1570b 100644
--- a/gui/tests/usage-grok-filter.test.ts
+++ b/gui/tests/usage-grok-filter.test.ts
@@ -11,7 +11,7 @@ test("the Usage filter includes grok with its icon", async () => {
const page = await read("../src/pages/Usage.tsx");
expect(page).toContain('"grok"');
expect(page).toContain('(["all", "codex", "claude", "grok"]');
- expect(page).toContain("/provider-icons/grok.svg");
+ expect(page).toContain("/provider-icons/grok-color.svg");
});
test("every locale carries the grok surface label", async () => {
From b4820478fcea6b5061091824afc0314bceb7a5f7 Mon Sep 17 00:00:00 2001
From: Wibias <37517432+Wibias@users.noreply.github.com>
Date: Wed, 5 Aug 2026 03:14:17 +0200
Subject: [PATCH 2/4] fix(provider-icons): restore OpenCodeX mark shape and
normalize icon viewBoxes
- opencode.svg keeps the original frame + inner-field shape (as in the
shipped logo) and is now colored in the brand accent instead of gray
- every provider SVG is normalized to viewBox 0 0 24 24 with no fixed
width/height, so icons render at the CSS size of their slot instead of
intrinsic sizes ranging from 16px (1em) to 800px
---
gui/public/provider-icons/alibaba-color.svg | 2 +-
gui/public/provider-icons/antigravity-color.svg | 2 +-
gui/public/provider-icons/antigravity.svg | 2 +-
gui/public/provider-icons/claude-color.svg | 2 +-
gui/public/provider-icons/claude.svg | 2 +-
gui/public/provider-icons/cline-color.svg | 4 ++--
gui/public/provider-icons/cloudflare-ai-gateway-color.svg | 2 +-
gui/public/provider-icons/copilot-color.svg | 2 +-
gui/public/provider-icons/copilot.svg | 2 +-
gui/public/provider-icons/cursor-color.svg | 2 +-
gui/public/provider-icons/cursor.svg | 2 +-
gui/public/provider-icons/deepseek-color.svg | 2 +-
gui/public/provider-icons/firepass-color.svg | 2 +-
gui/public/provider-icons/fireworks-color.svg | 2 +-
gui/public/provider-icons/gemini-color.svg | 2 +-
gui/public/provider-icons/gemini.svg | 2 +-
gui/public/provider-icons/github-copilot-color.svg | 2 +-
gui/public/provider-icons/gitlab-duo-color.svg | 2 +-
gui/public/provider-icons/grok-color.svg | 2 +-
gui/public/provider-icons/grok.svg | 2 +-
gui/public/provider-icons/groq-color.svg | 2 +-
gui/public/provider-icons/huggingface-color.svg | 2 +-
gui/public/provider-icons/kimi-color.svg | 2 +-
gui/public/provider-icons/kiro-color.svg | 4 ++--
gui/public/provider-icons/kiro.svg | 4 ++--
gui/public/provider-icons/lm-studio-color.svg | 2 +-
gui/public/provider-icons/mistral-color.svg | 2 +-
gui/public/provider-icons/moonshot-color.svg | 2 +-
gui/public/provider-icons/nvidia-color.svg | 2 +-
gui/public/provider-icons/ollama-color.svg | 2 +-
gui/public/provider-icons/openai.svg | 2 +-
gui/public/provider-icons/opencode.svg | 4 ++--
gui/public/provider-icons/openrouter-color.svg | 2 +-
gui/public/provider-icons/pi.svg | 4 ++--
gui/public/provider-icons/qianfan-color.svg | 2 +-
gui/public/provider-icons/qwen-portal-color.svg | 2 +-
gui/public/provider-icons/vercel-ai-gateway-color.svg | 2 +-
gui/public/provider-icons/vllm-color.svg | 2 +-
gui/public/provider-icons/xiaomi-color.svg | 2 +-
39 files changed, 44 insertions(+), 44 deletions(-)
diff --git a/gui/public/provider-icons/alibaba-color.svg b/gui/public/provider-icons/alibaba-color.svg
index 9c042eba29..69e374735d 100644
--- a/gui/public/provider-icons/alibaba-color.svg
+++ b/gui/public/provider-icons/alibaba-color.svg
@@ -1 +1 @@
-
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/antigravity-color.svg b/gui/public/provider-icons/antigravity-color.svg
index 5301a1b1ca..bf746e1246 100644
--- a/gui/public/provider-icons/antigravity-color.svg
+++ b/gui/public/provider-icons/antigravity-color.svg
@@ -1 +1 @@
-
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/antigravity.svg b/gui/public/provider-icons/antigravity.svg
index c0c5b1f168..d24319d7cd 100644
--- a/gui/public/provider-icons/antigravity.svg
+++ b/gui/public/provider-icons/antigravity.svg
@@ -1 +1 @@
-
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/claude-color.svg b/gui/public/provider-icons/claude-color.svg
index 62dc0db12d..9c2cb59c26 100644
--- a/gui/public/provider-icons/claude-color.svg
+++ b/gui/public/provider-icons/claude-color.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/claude.svg b/gui/public/provider-icons/claude.svg
index e29f328257..0c39347f17 100644
--- a/gui/public/provider-icons/claude.svg
+++ b/gui/public/provider-icons/claude.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/cline-color.svg b/gui/public/provider-icons/cline-color.svg
index 317f01c5f5..90a30f1acc 100644
--- a/gui/public/provider-icons/cline-color.svg
+++ b/gui/public/provider-icons/cline-color.svg
@@ -1,5 +1,5 @@
-
\ No newline at end of file
diff --git a/gui/public/provider-icons/cloudflare-ai-gateway-color.svg b/gui/public/provider-icons/cloudflare-ai-gateway-color.svg
index 9d2ca53d77..cf80692961 100644
--- a/gui/public/provider-icons/cloudflare-ai-gateway-color.svg
+++ b/gui/public/provider-icons/cloudflare-ai-gateway-color.svg
@@ -1 +1 @@
-Cloudflare
+Cloudflare
\ No newline at end of file
diff --git a/gui/public/provider-icons/copilot-color.svg b/gui/public/provider-icons/copilot-color.svg
index 1bb3a7e36d..c5b411ad2f 100644
--- a/gui/public/provider-icons/copilot-color.svg
+++ b/gui/public/provider-icons/copilot-color.svg
@@ -1 +1 @@
-Copilot
+Copilot
\ No newline at end of file
diff --git a/gui/public/provider-icons/copilot.svg b/gui/public/provider-icons/copilot.svg
index 95945cd819..2faac23a5f 100644
--- a/gui/public/provider-icons/copilot.svg
+++ b/gui/public/provider-icons/copilot.svg
@@ -1 +1 @@
-Copilot
+Copilot
\ No newline at end of file
diff --git a/gui/public/provider-icons/cursor-color.svg b/gui/public/provider-icons/cursor-color.svg
index f06306d91d..d903610064 100644
--- a/gui/public/provider-icons/cursor-color.svg
+++ b/gui/public/provider-icons/cursor-color.svg
@@ -1,2 +1,2 @@
-Cursor
+Cursor
\ No newline at end of file
diff --git a/gui/public/provider-icons/cursor.svg b/gui/public/provider-icons/cursor.svg
index d583431639..efe0e3c4b2 100644
--- a/gui/public/provider-icons/cursor.svg
+++ b/gui/public/provider-icons/cursor.svg
@@ -1,2 +1,2 @@
-Cursor
+Cursor
\ No newline at end of file
diff --git a/gui/public/provider-icons/deepseek-color.svg b/gui/public/provider-icons/deepseek-color.svg
index f53fac74ab..f3be195b8e 100644
--- a/gui/public/provider-icons/deepseek-color.svg
+++ b/gui/public/provider-icons/deepseek-color.svg
@@ -1 +1 @@
-DeepSeek
+DeepSeek
\ No newline at end of file
diff --git a/gui/public/provider-icons/firepass-color.svg b/gui/public/provider-icons/firepass-color.svg
index 7a10d03617..01f493c58c 100644
--- a/gui/public/provider-icons/firepass-color.svg
+++ b/gui/public/provider-icons/firepass-color.svg
@@ -1 +1 @@
-Fireworks
+Fireworks
\ No newline at end of file
diff --git a/gui/public/provider-icons/fireworks-color.svg b/gui/public/provider-icons/fireworks-color.svg
index 7a10d03617..01f493c58c 100644
--- a/gui/public/provider-icons/fireworks-color.svg
+++ b/gui/public/provider-icons/fireworks-color.svg
@@ -1 +1 @@
-Fireworks
+Fireworks
\ No newline at end of file
diff --git a/gui/public/provider-icons/gemini-color.svg b/gui/public/provider-icons/gemini-color.svg
index 62681dfa7c..822a18de8a 100644
--- a/gui/public/provider-icons/gemini-color.svg
+++ b/gui/public/provider-icons/gemini-color.svg
@@ -1 +1 @@
-Gemini
\ No newline at end of file
+Gemini
\ No newline at end of file
diff --git a/gui/public/provider-icons/gemini.svg b/gui/public/provider-icons/gemini.svg
index 87736bbe09..902293f3d9 100644
--- a/gui/public/provider-icons/gemini.svg
+++ b/gui/public/provider-icons/gemini.svg
@@ -1 +1 @@
-Gemini
\ No newline at end of file
+Gemini
\ No newline at end of file
diff --git a/gui/public/provider-icons/github-copilot-color.svg b/gui/public/provider-icons/github-copilot-color.svg
index 4bd84cb856..e713560a88 100644
--- a/gui/public/provider-icons/github-copilot-color.svg
+++ b/gui/public/provider-icons/github-copilot-color.svg
@@ -1 +1 @@
-GitHub Copilot
+GitHub Copilot
\ No newline at end of file
diff --git a/gui/public/provider-icons/gitlab-duo-color.svg b/gui/public/provider-icons/gitlab-duo-color.svg
index 2099b79f75..562154d5d3 100644
--- a/gui/public/provider-icons/gitlab-duo-color.svg
+++ b/gui/public/provider-icons/gitlab-duo-color.svg
@@ -1 +1 @@
-GitLab
+GitLab
\ No newline at end of file
diff --git a/gui/public/provider-icons/grok-color.svg b/gui/public/provider-icons/grok-color.svg
index 7374eefe94..ba9c46e70e 100644
--- a/gui/public/provider-icons/grok-color.svg
+++ b/gui/public/provider-icons/grok-color.svg
@@ -1 +1 @@
-Grok
+Grok
\ No newline at end of file
diff --git a/gui/public/provider-icons/grok.svg b/gui/public/provider-icons/grok.svg
index f34a855c38..0ca52ec618 100644
--- a/gui/public/provider-icons/grok.svg
+++ b/gui/public/provider-icons/grok.svg
@@ -1 +1 @@
-Grok
+Grok
\ No newline at end of file
diff --git a/gui/public/provider-icons/groq-color.svg b/gui/public/provider-icons/groq-color.svg
index 3c34955a59..2eecc367cc 100644
--- a/gui/public/provider-icons/groq-color.svg
+++ b/gui/public/provider-icons/groq-color.svg
@@ -1 +1 @@
-Groq
+Groq
\ No newline at end of file
diff --git a/gui/public/provider-icons/huggingface-color.svg b/gui/public/provider-icons/huggingface-color.svg
index 7a4074c52f..2267427337 100644
--- a/gui/public/provider-icons/huggingface-color.svg
+++ b/gui/public/provider-icons/huggingface-color.svg
@@ -1 +1 @@
-Hugging Face
+Hugging Face
\ No newline at end of file
diff --git a/gui/public/provider-icons/kimi-color.svg b/gui/public/provider-icons/kimi-color.svg
index 2c1ccd0862..39c3e2f9b2 100644
--- a/gui/public/provider-icons/kimi-color.svg
+++ b/gui/public/provider-icons/kimi-color.svg
@@ -1 +1 @@
-Moonshot AI
+Moonshot AI
\ No newline at end of file
diff --git a/gui/public/provider-icons/kiro-color.svg b/gui/public/provider-icons/kiro-color.svg
index 1905360027..0cf048bec2 100644
--- a/gui/public/provider-icons/kiro-color.svg
+++ b/gui/public/provider-icons/kiro-color.svg
@@ -1,5 +1,5 @@
-
+
Kiro
@@ -12,4 +12,4 @@
-
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/kiro.svg b/gui/public/provider-icons/kiro.svg
index 63c0286dee..418805bd62 100644
--- a/gui/public/provider-icons/kiro.svg
+++ b/gui/public/provider-icons/kiro.svg
@@ -1,5 +1,5 @@
-
+
Kiro
@@ -11,4 +11,4 @@
-
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/lm-studio-color.svg b/gui/public/provider-icons/lm-studio-color.svg
index f385720cb1..c50f3a6526 100644
--- a/gui/public/provider-icons/lm-studio-color.svg
+++ b/gui/public/provider-icons/lm-studio-color.svg
@@ -1 +1 @@
-LM Studio
+LM Studio
\ No newline at end of file
diff --git a/gui/public/provider-icons/mistral-color.svg b/gui/public/provider-icons/mistral-color.svg
index 7081654a6b..a02c1ba31c 100644
--- a/gui/public/provider-icons/mistral-color.svg
+++ b/gui/public/provider-icons/mistral-color.svg
@@ -1 +1 @@
-Mistral AI
+Mistral AI
\ No newline at end of file
diff --git a/gui/public/provider-icons/moonshot-color.svg b/gui/public/provider-icons/moonshot-color.svg
index 5a2fcc8407..ed2bbfbfe5 100644
--- a/gui/public/provider-icons/moonshot-color.svg
+++ b/gui/public/provider-icons/moonshot-color.svg
@@ -1 +1 @@
-Moonshot AI
+Moonshot AI
\ No newline at end of file
diff --git a/gui/public/provider-icons/nvidia-color.svg b/gui/public/provider-icons/nvidia-color.svg
index a2873c6d93..c3ac1b8df2 100644
--- a/gui/public/provider-icons/nvidia-color.svg
+++ b/gui/public/provider-icons/nvidia-color.svg
@@ -1 +1 @@
-NVIDIA
+NVIDIA
\ No newline at end of file
diff --git a/gui/public/provider-icons/ollama-color.svg b/gui/public/provider-icons/ollama-color.svg
index f11d3de591..1e3879cc60 100644
--- a/gui/public/provider-icons/ollama-color.svg
+++ b/gui/public/provider-icons/ollama-color.svg
@@ -1 +1 @@
-Ollama
+Ollama
\ No newline at end of file
diff --git a/gui/public/provider-icons/openai.svg b/gui/public/provider-icons/openai.svg
index e0fb25516a..a25156f3bb 100644
--- a/gui/public/provider-icons/openai.svg
+++ b/gui/public/provider-icons/openai.svg
@@ -1 +1 @@
-OpenAI
\ No newline at end of file
+OpenAI
\ No newline at end of file
diff --git a/gui/public/provider-icons/opencode.svg b/gui/public/provider-icons/opencode.svg
index 547eb021fa..2731f3ec33 100644
--- a/gui/public/provider-icons/opencode.svg
+++ b/gui/public/provider-icons/opencode.svg
@@ -1,2 +1,2 @@
-
-OpenCodeX
+
+OpenCodeX
\ No newline at end of file
diff --git a/gui/public/provider-icons/openrouter-color.svg b/gui/public/provider-icons/openrouter-color.svg
index e825d665b6..e0f98db715 100644
--- a/gui/public/provider-icons/openrouter-color.svg
+++ b/gui/public/provider-icons/openrouter-color.svg
@@ -1 +1 @@
-OpenRouter
+OpenRouter
\ No newline at end of file
diff --git a/gui/public/provider-icons/pi.svg b/gui/public/provider-icons/pi.svg
index c28d624233..976e4ba744 100644
--- a/gui/public/provider-icons/pi.svg
+++ b/gui/public/provider-icons/pi.svg
@@ -1,5 +1,5 @@
-
+
-
+
\ No newline at end of file
diff --git a/gui/public/provider-icons/qianfan-color.svg b/gui/public/provider-icons/qianfan-color.svg
index 9c1130ed3b..fa72fb221b 100644
--- a/gui/public/provider-icons/qianfan-color.svg
+++ b/gui/public/provider-icons/qianfan-color.svg
@@ -1 +1 @@
-Baidu
+Baidu
\ No newline at end of file
diff --git a/gui/public/provider-icons/qwen-portal-color.svg b/gui/public/provider-icons/qwen-portal-color.svg
index bedfd9a1ee..bcbcdd90b8 100644
--- a/gui/public/provider-icons/qwen-portal-color.svg
+++ b/gui/public/provider-icons/qwen-portal-color.svg
@@ -1 +1 @@
-QWen
+QWen
\ No newline at end of file
diff --git a/gui/public/provider-icons/vercel-ai-gateway-color.svg b/gui/public/provider-icons/vercel-ai-gateway-color.svg
index b3fe44b660..054f1df640 100644
--- a/gui/public/provider-icons/vercel-ai-gateway-color.svg
+++ b/gui/public/provider-icons/vercel-ai-gateway-color.svg
@@ -1 +1 @@
-Vercel
+Vercel
\ No newline at end of file
diff --git a/gui/public/provider-icons/vllm-color.svg b/gui/public/provider-icons/vllm-color.svg
index 367570e3d2..f8a5a23134 100644
--- a/gui/public/provider-icons/vllm-color.svg
+++ b/gui/public/provider-icons/vllm-color.svg
@@ -1 +1 @@
-vLLM
+vLLM
\ No newline at end of file
diff --git a/gui/public/provider-icons/xiaomi-color.svg b/gui/public/provider-icons/xiaomi-color.svg
index 9166ecdaed..68457a9783 100644
--- a/gui/public/provider-icons/xiaomi-color.svg
+++ b/gui/public/provider-icons/xiaomi-color.svg
@@ -1 +1 @@
-Xiaomi
+Xiaomi
\ No newline at end of file
From 380f7dbf15bd7ff92c4e55c3bf9dec7c0138eb83 Mon Sep 17 00:00:00 2001
From: Wibias <37517432+Wibias@users.noreply.github.com>
Date: Wed, 5 Aug 2026 03:20:00 +0200
Subject: [PATCH 3/4] fix(provider-icons): drop fake grok-color variant, use
the monochrome grok mark
xAI has no colored logo, so grok-color.svg was a duplicate of grok.svg
that only rendered black. Remove it and point the xai alias and the
Usage surface mark at grok.svg (explicit black fill).
---
gui/public/provider-icons/grok-color.svg | 1 -
gui/public/provider-icons/grok.svg | 2 +-
gui/src/pages/Usage.tsx | 2 +-
gui/src/provider-icons.ts | 2 +-
gui/tests/usage-grok-filter.test.ts | 2 +-
5 files changed, 4 insertions(+), 5 deletions(-)
delete mode 100644 gui/public/provider-icons/grok-color.svg
diff --git a/gui/public/provider-icons/grok-color.svg b/gui/public/provider-icons/grok-color.svg
deleted file mode 100644
index ba9c46e70e..0000000000
--- a/gui/public/provider-icons/grok-color.svg
+++ /dev/null
@@ -1 +0,0 @@
-Grok
\ No newline at end of file
diff --git a/gui/public/provider-icons/grok.svg b/gui/public/provider-icons/grok.svg
index 0ca52ec618..7374eefe94 100644
--- a/gui/public/provider-icons/grok.svg
+++ b/gui/public/provider-icons/grok.svg
@@ -1 +1 @@
-Grok
\ No newline at end of file
+Grok
diff --git a/gui/src/pages/Usage.tsx b/gui/src/pages/Usage.tsx
index d3e39ce3d7..acd0b78de1 100644
--- a/gui/src/pages/Usage.tsx
+++ b/gui/src/pages/Usage.tsx
@@ -234,7 +234,7 @@ function UsageFilters({
)}
{choice === "grok" && (
-
+
)}
{label}
diff --git a/gui/src/provider-icons.ts b/gui/src/provider-icons.ts
index c0e1d0677c..4b1e0871d7 100644
--- a/gui/src/provider-icons.ts
+++ b/gui/src/provider-icons.ts
@@ -43,7 +43,7 @@ const PROVIDER_ICON_ALIASES: Record = {
"qwen-cloud": "qwen-portal-color.svg",
"vercel-ai-gateway": "vercel-ai-gateway-color.svg",
vllm: "vllm-color.svg",
- xai: "grok-color.svg",
+ xai: "grok.svg",
"mimo-free": "xiaomi-color.svg",
xiaomi: "xiaomi-color.svg",
};
diff --git a/gui/tests/usage-grok-filter.test.ts b/gui/tests/usage-grok-filter.test.ts
index 7bb5d1570b..6d7c505441 100644
--- a/gui/tests/usage-grok-filter.test.ts
+++ b/gui/tests/usage-grok-filter.test.ts
@@ -11,7 +11,7 @@ test("the Usage filter includes grok with its icon", async () => {
const page = await read("../src/pages/Usage.tsx");
expect(page).toContain('"grok"');
expect(page).toContain('(["all", "codex", "claude", "grok"]');
- expect(page).toContain("/provider-icons/grok-color.svg");
+ expect(page).toContain("/provider-icons/grok.svg");
});
test("every locale carries the grok surface label", async () => {
From d6dcc946d072529829aa3697662d13a35c8746b9 Mon Sep 17 00:00:00 2001
From: Wibias <37517432+Wibias@users.noreply.github.com>
Date: Wed, 5 Aug 2026 03:32:42 +0200
Subject: [PATCH 4/4] fix(provider-icons): correct OpenCodeX color, drop unused
monochrome duplicates
- opencode.svg renders the brand frame in #211E1E (the warm dark tone from
the official logo asset) with a transparent inner field; no more pink
- remove unused monochrome variants where a -color logo exists and is the
only referenced asset: claude.svg, gemini.svg, copilot.svg,
antigravity.svg, kiro.svg, cursor.svg
---
gui/public/provider-icons/antigravity.svg | 1 -
gui/public/provider-icons/claude.svg | 1 -
gui/public/provider-icons/copilot.svg | 1 -
gui/public/provider-icons/cursor.svg | 2 --
gui/public/provider-icons/gemini.svg | 1 -
gui/public/provider-icons/kiro.svg | 14 --------------
gui/public/provider-icons/opencode.svg | 4 ++--
7 files changed, 2 insertions(+), 22 deletions(-)
delete mode 100644 gui/public/provider-icons/antigravity.svg
delete mode 100644 gui/public/provider-icons/claude.svg
delete mode 100644 gui/public/provider-icons/copilot.svg
delete mode 100644 gui/public/provider-icons/cursor.svg
delete mode 100644 gui/public/provider-icons/gemini.svg
delete mode 100644 gui/public/provider-icons/kiro.svg
diff --git a/gui/public/provider-icons/antigravity.svg b/gui/public/provider-icons/antigravity.svg
deleted file mode 100644
index d24319d7cd..0000000000
--- a/gui/public/provider-icons/antigravity.svg
+++ /dev/null
@@ -1 +0,0 @@
-Antigravity
\ No newline at end of file
diff --git a/gui/public/provider-icons/claude.svg b/gui/public/provider-icons/claude.svg
deleted file mode 100644
index 0c39347f17..0000000000
--- a/gui/public/provider-icons/claude.svg
+++ /dev/null
@@ -1 +0,0 @@
-Claude
\ No newline at end of file
diff --git a/gui/public/provider-icons/copilot.svg b/gui/public/provider-icons/copilot.svg
deleted file mode 100644
index 2faac23a5f..0000000000
--- a/gui/public/provider-icons/copilot.svg
+++ /dev/null
@@ -1 +0,0 @@
-Copilot
\ No newline at end of file
diff --git a/gui/public/provider-icons/cursor.svg b/gui/public/provider-icons/cursor.svg
deleted file mode 100644
index efe0e3c4b2..0000000000
--- a/gui/public/provider-icons/cursor.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-Cursor
\ No newline at end of file
diff --git a/gui/public/provider-icons/gemini.svg b/gui/public/provider-icons/gemini.svg
deleted file mode 100644
index 902293f3d9..0000000000
--- a/gui/public/provider-icons/gemini.svg
+++ /dev/null
@@ -1 +0,0 @@
-Gemini
\ No newline at end of file
diff --git a/gui/public/provider-icons/kiro.svg b/gui/public/provider-icons/kiro.svg
deleted file mode 100644
index 418805bd62..0000000000
--- a/gui/public/provider-icons/kiro.svg
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-Kiro
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/gui/public/provider-icons/opencode.svg b/gui/public/provider-icons/opencode.svg
index 2731f3ec33..d617075e7f 100644
--- a/gui/public/provider-icons/opencode.svg
+++ b/gui/public/provider-icons/opencode.svg
@@ -1,2 +1,2 @@
-
-OpenCodeX
\ No newline at end of file
+
+OpenCodeX