diff --git a/src/renderer/components/ActivityPanel.tsx b/src/renderer/components/ActivityPanel.tsx index 9f4195a..06edbe5 100644 --- a/src/renderer/components/ActivityPanel.tsx +++ b/src/renderer/components/ActivityPanel.tsx @@ -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 = { - 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 ( - - {s.label} - - ); + return ; } return null; })()} diff --git a/src/renderer/components/PatternEditor.tsx b/src/renderer/components/PatternEditor.tsx index 164931c..f5c19a9 100644 --- a/src/renderer/components/PatternEditor.tsx +++ b/src/renderer/components/PatternEditor.tsx @@ -27,7 +27,6 @@ import { providerMeta, findModel, inferProvider, - type ModelProvider, type ModelDefinition, } from '@shared/domain/models'; @@ -203,22 +202,7 @@ function InputField({ ); } -const providerStyles: Record = { - 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' }, -}; - -function ProviderIcon({ provider }: { provider: ModelProvider }) { - const s = providerStyles[provider]; - return ( - - {s.label} - - ); -} +import { ProviderIcon } from './ProviderIcons'; function TierBadge({ tier }: { tier: ModelDefinition['tier'] }) { const styles = { diff --git a/src/renderer/components/ProviderIcons.tsx b/src/renderer/components/ProviderIcons.tsx new file mode 100644 index 0000000..c0907d0 --- /dev/null +++ b/src/renderer/components/ProviderIcons.tsx @@ -0,0 +1,63 @@ +import type { ModelProvider } from '@shared/domain/models'; + +interface ProviderIconProps { + provider: ModelProvider; + className?: string; +} + +function OpenAIIcon({ className }: { className?: string }) { + return ( + + + + ); +} + +function AnthropicIcon({ className }: { className?: string }) { + return ( + + + + ); +} + +function GeminiIcon({ className }: { className?: string }) { + return ( + + + + ); +} + +const iconComponents: Record> = { + openai: OpenAIIcon, + anthropic: AnthropicIcon, + google: GeminiIcon, +}; + +export const providerColors: Record = { + openai: 'text-emerald-400', + anthropic: 'text-orange-400', + google: 'text-blue-400', +}; + +export function ProviderIcon({ provider, className }: ProviderIconProps) { + const Icon = iconComponents[provider]; + const color = providerColors[provider]; + return ; +}