diff --git a/dashboard/app.js b/dashboard/app.js index f8982d4..f192425 100644 --- a/dashboard/app.js +++ b/dashboard/app.js @@ -383,6 +383,21 @@ const PLATFORM_COLORS = { text: 'text-success', label: 'Codex', }, + goose: { + bg: 'bg-purple/10', + text: 'text-purple', + label: 'Goose', + }, + gemini: { + bg: 'bg-accent/10', + text: 'text-accent', + label: 'Gemini CLI', + }, + antigravity: { + bg: 'bg-pink/10', + text: 'text-pink', + label: 'Antigravity IDE', + }, unknown: { bg: 'bg-muted/10', text: 'text-muted', label: 'Unknown' }, }; diff --git a/dashboard/styles.css b/dashboard/styles.css index 1458a19..1802963 100644 --- a/dashboard/styles.css +++ b/dashboard/styles.css @@ -12,6 +12,8 @@ --success: #35c47c; --warning: #f5b84b; --danger: #ff6b6b; + --purple: #a855f7; + --pink: #ec4899; } * { box-sizing: border-box; } @@ -69,6 +71,9 @@ a { color: inherit; } .bg-danger { background-color: var(--danger); } .bg-danger\/10 { background-color: color-mix(in srgb, var(--danger) 10%, transparent); } .bg-info\/10 { background-color: color-mix(in srgb, var(--info) 10%, transparent); } +.bg-accent\/10 { background-color: color-mix(in srgb, var(--accent) 10%, transparent); } +.bg-purple\/10 { background-color: color-mix(in srgb, var(--purple) 10%, transparent); } +.bg-pink\/10 { background-color: color-mix(in srgb, var(--pink) 10%, transparent); } .bg-border\/30 { background-color: color-mix(in srgb, var(--border) 30%, transparent); } .text-text { color: var(--text); } @@ -76,10 +81,13 @@ a { color: inherit; } .text-muted { color: var(--muted); } .text-info { color: var(--info); } .text-info-strong { color: var(--info-strong); } +.text-accent { color: var(--accent); } .text-accent-strong { color: var(--accent); } .text-success { color: var(--success); } .text-warning { color: var(--warning); } .text-danger { color: var(--danger); } +.text-purple { color: var(--purple); } +.text-pink { color: var(--pink); } .text-white { color: #fff; } .border { border-width: 1px; border-style: solid; } diff --git a/src/utils.mjs b/src/utils.mjs index 06de496..04f1b33 100644 --- a/src/utils.mjs +++ b/src/utils.mjs @@ -36,6 +36,8 @@ export function detectPlatform() { if (process.env.CODEX_API_KEY || process.env.CODEX_SESSION_ID) return 'codex'; if (process.env.GOOSE_API_KEY || process.env.GOOSE_SESSION_ID) return 'goose'; if (process.env.CLAUDE_API_KEY || process.env.ANTHROPIC_API_KEY || process.env.CLAUDE_SESSION_ID) return 'claude'; + if (process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY) return 'gemini'; + if (process.env.ANTIGRAVITY_API_KEY || process.env.ANTIGRAVITY_SESSION_ID) return 'antigravity'; return null; } diff --git a/test/utils.test.mjs b/test/utils.test.mjs index 0ce8d5a..0857a9f 100644 --- a/test/utils.test.mjs +++ b/test/utils.test.mjs @@ -74,6 +74,10 @@ describe('Platform Utilities', () => { delete process.env.CLAUDE_SESSION_ID; delete process.env.CLAUDE_API_KEY; delete process.env.ANTHROPIC_API_KEY; + delete process.env.GEMINI_API_KEY; + delete process.env.GOOGLE_API_KEY; + delete process.env.ANTIGRAVITY_API_KEY; + delete process.env.ANTIGRAVITY_SESSION_ID; }; after(() => { @@ -110,6 +114,30 @@ describe('Platform Utilities', () => { assert.strictEqual(detectPlatform(), 'claude'); }); + it('detects gemini via GEMINI_API_KEY', () => { + clearEnv(); + process.env.GEMINI_API_KEY = 'test'; + assert.strictEqual(detectPlatform(), 'gemini'); + }); + + it('detects gemini via GOOGLE_API_KEY', () => { + clearEnv(); + process.env.GOOGLE_API_KEY = 'test'; + assert.strictEqual(detectPlatform(), 'gemini'); + }); + + it('detects antigravity via ANTIGRAVITY_API_KEY', () => { + clearEnv(); + process.env.ANTIGRAVITY_API_KEY = 'test'; + assert.strictEqual(detectPlatform(), 'antigravity'); + }); + + it('detects antigravity via ANTIGRAVITY_SESSION_ID', () => { + clearEnv(); + process.env.ANTIGRAVITY_SESSION_ID = 'test'; + assert.strictEqual(detectPlatform(), 'antigravity'); + }); + it('returns null if no platform detected', () => { clearEnv(); assert.strictEqual(detectPlatform(), null);