feat: use official SVG brand icons for model providers

Replace colored letter badges with official SVG icons sourced from
Simple Icons (Anthropic, Google Gemini) and Wikimedia Commons (OpenAI).

- Create shared ProviderIcons.tsx with OpenAI, Anthropic, and Gemini
  SVG icon components using the official brand marks
- Update PatternEditor ModelSelect dropdown to use real provider icons
- Update ActivityPanel model badges to use real provider icons
- Remove duplicated providerStyles objects from both files

Icons are inline SVG using currentColor for theme-aware coloring.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-03-21 20:58:38 +01:00
co-authored by Copilot
parent d155085d0c
commit 8f668da7f8
3 changed files with 67 additions and 30 deletions
+3 -13
View File
@@ -8,15 +8,10 @@ import {
isAgentActivityCompleted,
type SessionActivityState,
} from '@renderer/lib/sessionActivity';
import { inferProvider, type ModelProvider } from '@shared/domain/models';
import { inferProvider } from '@shared/domain/models';
import type { PatternDefinition } from '@shared/domain/pattern';
import type { SessionRecord } from '@shared/domain/session';
const providerStyles: Record<ModelProvider, { bg: string; text: string; label: string }> = {
openai: { bg: 'bg-emerald-500/15', text: 'text-emerald-400', label: 'AI' },
anthropic: { bg: 'bg-orange-500/15', text: 'text-orange-400', label: 'A' },
google: { bg: 'bg-blue-500/15', text: 'text-blue-400', label: 'G' },
};
import { ProviderIcon } from './ProviderIcons';
function formatModel(model: string): string {
return model.replace(/-/g, '\u2011');
@@ -102,12 +97,7 @@ export function ActivityPanel({ activity, pattern, session }: ActivityPanelProps
{(() => {
const prov = inferProvider(agent.model);
if (prov) {
const s = providerStyles[prov];
return (
<span className={`flex size-3.5 items-center justify-center rounded text-[7px] font-bold ${s.bg} ${s.text}`}>
{s.label}
</span>
);
return <ProviderIcon provider={prov} className="size-3" />;
}
return null;
})()}