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 be1080a1b..9c042eba2 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 cf2762683..9d2ca53d7 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 95945cd81..1bb3a7e36 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 f25017e00..f53fac74a 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 7c4766ecb..7a10d0361 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 7c4766ecb..7a10d0361 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 4c1e12c07..4bd84cb85 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 ab1286a21..2099b79f7 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 f34a855c3..7374eefe9 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 d2953eedb..3c34955a5 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 9f855aaa2..7a4074c52 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 580a63be2..2c1ccd086 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 f9503437e..f385720cb 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 70f05829f..7081654a6 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 580a63be2..5a2fcc840 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 d35752c36..a2873c6d9 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 1c0ab7b62..f11d3de59 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 78caf4fa2..e0fb25516 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 a84a97e6b..547eb021f 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 1d1e68cb0..e825d665b 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 89325f6da..9c1130ed3 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 27fdc5ade..bedfd9a1e 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 956f5c7a9..b3fe44b66 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 672395dee..367570e3d 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 44c3b8e33..9166ecdae 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 4079e61a1..af1294421 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 f3e1b215a..d3e39ce3d 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 066316aea..31ab807b4 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 b847a68e7..1fe15f95f 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 6d7c50544..7bb5d1570 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 9c042eba2..69e374735 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 5301a1b1c..bf746e124 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 c0c5b1f16..d24319d7c 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 62dc0db12..9c2cb59c2 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 e29f32825..0c39347f1 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 317f01c5f..90a30f1ac 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 9d2ca53d7..cf8069296 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 1bb3a7e36..c5b411ad2 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 95945cd81..2faac23a5 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 f06306d91..d90361006 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 d58343163..efe0e3c4b 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 f53fac74a..f3be195b8 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 7a10d0361..01f493c58 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 7a10d0361..01f493c58 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 62681dfa7..822a18de8 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 87736bbe0..902293f3d 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 4bd84cb85..e713560a8 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 2099b79f7..562154d5d 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 7374eefe9..ba9c46e70 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 f34a855c3..0ca52ec61 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 3c34955a5..2eecc367c 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 7a4074c52..226742733 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 2c1ccd086..39c3e2f9b 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 190536002..0cf048bec 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 63c0286de..418805bd6 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 f385720cb..c50f3a652 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 7081654a6..a02c1ba31 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 5a2fcc840..ed2bbfbfe 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 a2873c6d9..c3ac1b8df 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 f11d3de59..1e3879cc6 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 e0fb25516..a25156f3b 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 547eb021f..2731f3ec3 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 e825d665b..e0f98db71 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 c28d62423..976e4ba74 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 9c1130ed3..fa72fb221 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 bedfd9a1e..bcbcdd90b 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 b3fe44b66..054f1df64 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 367570e3d..f8a5a2313 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 9166ecdae..68457a978 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 ba9c46e70..000000000
--- 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 0ca52ec61..7374eefe9 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 d3e39ce3d..acd0b78de 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 c0e1d0677..4b1e0871d 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 7bb5d1570..6d7c50544 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 d24319d7c..000000000
--- 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 0c39347f1..000000000
--- 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 2faac23a5..000000000
--- 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 efe0e3c4b..000000000
--- 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 902293f3d..000000000
--- 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 418805bd6..000000000
--- 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 2731f3ec3..d617075e7 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