refactor: share provider presentation metadata

This commit is contained in:
Sharada Mohanty 2026-04-20 18:51:23 +02:00
parent eb3737f756
commit 563f9c4f1b
3 changed files with 58 additions and 22 deletions

View file

@ -14,6 +14,7 @@ import { createTerminalProgressReporter } from './parse-progress.js'
import { CompareView } from './compare.js'
import { getPlanUsageOrNull, type PlanUsage } from './plan-usage.js'
import { planDisplayName } from './plans.js'
import { providerColor, providerLabel } from './provider-colors.js'
import { join } from 'path'
type Period = 'today' | 'week' | '30days' | 'month' | 'all'
@ -56,15 +57,6 @@ const PANEL_COLORS = {
bash: '#F5A05B',
}
const PROVIDER_COLORS: Record<string, string> = {
claude: '#FF8C42',
codex: '#5BF5A0',
cursor: '#00B4D8',
opencode: '#A78BFA',
pi: '#F472B6',
all: '#FF8C42',
}
const CATEGORY_COLORS: Record<TaskCategory, string> = {
coding: '#5B9EF5',
debugging: '#F55B5B',
@ -490,16 +482,6 @@ function BashBreakdown({ projects, pw, bw }: { projects: ProjectSummary[]; pw: n
)
}
const PROVIDER_DISPLAY_NAMES: Record<string, string> = {
all: 'All',
claude: 'Claude',
codex: 'Codex',
cursor: 'Cursor',
opencode: 'OpenCode',
pi: 'Pi',
}
function getProviderDisplayName(name: string): string { return PROVIDER_DISPLAY_NAMES[name] ?? name }
function PeriodTabs({ active, providerName, showProvider }: { active: Period; providerName?: string; showProvider?: boolean }) {
return (
<Box justifyContent="space-between" paddingX={1}>
@ -510,9 +492,7 @@ function PeriodTabs({ active, providerName, showProvider }: { active: Period; pr
</Text>
))}
</Box>
{showProvider && providerName && (
<Box><Text color={DIM}>| </Text><Text color={ORANGE} bold>[p]</Text><Text bold color={PROVIDER_COLORS[providerName] ?? ORANGE}> {getProviderDisplayName(providerName)}</Text></Box>
)}
{showProvider && providerName && <Box><Text color={DIM}>| </Text><Text color={ORANGE} bold>[p]</Text><Text bold color={providerColor(providerName)}> {providerLabel(providerName)}</Text></Box>}
</Box>
)
}

27
src/provider-colors.ts Normal file
View file

@ -0,0 +1,27 @@
export const PROVIDER_COLORS: Record<string, string> = {
all: '#FF8C42',
claude: '#FF8C42',
codex: '#5BF5A0',
cursor: '#00B4D8',
opencode: '#A78BFA',
pi: '#F472B6',
copilot: '#6495ED',
}
const PROVIDER_LABELS: Record<string, string> = {
all: 'All',
claude: 'Claude',
codex: 'Codex',
cursor: 'Cursor',
opencode: 'OpenCode',
pi: 'Pi',
copilot: 'Copilot',
}
export function providerLabel(name: string): string {
return PROVIDER_LABELS[name] ?? name
}
export function providerColor(name: string): string {
return PROVIDER_COLORS[name] ?? '#CCCCCC'
}

View file

@ -0,0 +1,29 @@
import { describe, it, expect } from 'vitest'
import { PROVIDER_COLORS, providerColor, providerLabel } from '../src/provider-colors.js'
describe('provider presentation metadata', () => {
it('exports the shared provider palette', () => {
expect(PROVIDER_COLORS).toEqual({
all: '#FF8C42',
claude: '#FF8C42',
codex: '#5BF5A0',
cursor: '#00B4D8',
opencode: '#A78BFA',
pi: '#F472B6',
copilot: '#6495ED',
})
})
it('maps provider names to labels', () => {
expect(providerLabel('all')).toBe('All')
expect(providerLabel('opencode')).toBe('OpenCode')
expect(providerLabel('unknown')).toBe('unknown')
})
it('maps provider names to colors with a neutral fallback', () => {
expect(providerColor('all')).toBe('#FF8C42')
expect(providerColor('opencode')).toBe('#A78BFA')
expect(providerColor('unknown')).toBe('#CCCCCC')
})
})