diff --git a/.changeset/claude-code-tab-prefix.md b/.changeset/claude-code-tab-prefix.md new file mode 100644 index 000000000..c7626d5dd --- /dev/null +++ b/.changeset/claude-code-tab-prefix.md @@ -0,0 +1,5 @@ +--- +"aicodeman": patch +--- + +Show the CC prefix on Claude Code terminal tabs. diff --git a/src/web/public/app.js b/src/web/public/app.js index 05577c343..97605e069 100644 --- a/src/web/public/app.js +++ b/src/web/public/app.js @@ -5660,7 +5660,7 @@ class CodemanApp { - ${mode === 'shell' ? '' : mode === 'opencode' ? '' : mode === 'codex' ? '' : mode === 'gemini' ? '' : mode === 'antigravity' ? '' : mode === 'pi' ? '' : mode === 'grok' ? '' : mode === 'deepseek' ? '' : mode === 'omp' ? '' : ''} + ${mode === 'claude' ? '' : mode === 'shell' ? '' : mode === 'opencode' ? '' : mode === 'codex' ? '' : mode === 'gemini' ? '' : mode === 'antigravity' ? '' : mode === 'pi' ? '' : mode === 'grok' ? '' : mode === 'deepseek' ? '' : mode === 'omp' ? '' : ''} ${tabLabel} ${paneExitBadge ? `` : ''} ${inlineSessionActions ? tabActionsHtml : ''} diff --git a/src/web/public/home-sessions.js b/src/web/public/home-sessions.js index eeb12c536..beff4de23 100644 --- a/src/web/public/home-sessions.js +++ b/src/web/public/home-sessions.js @@ -72,6 +72,7 @@ const HOME_SESSIONS_PILL_LABEL = { /** Short backend badge, mirroring `.tab-mode` in the tab strip. */ const HOME_SESSIONS_MODE_BADGE = { + claude: 'cc', shell: 'sh', opencode: 'oc', codex: 'cx', diff --git a/test/claude-tab-prefix.test.ts b/test/claude-tab-prefix.test.ts new file mode 100644 index 000000000..0952fcd1b --- /dev/null +++ b/test/claude-tab-prefix.test.ts @@ -0,0 +1,17 @@ +// @vitest-environment node + +import { readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { describe, expect, it } from 'vitest'; + +const APP = resolve(import.meta.dirname, '../src/web/public/app.js'); + +describe('Claude Code tab prefix', () => { + it('includes CC in the main tab-strip markup', () => { + const app = readFileSync(APP, 'utf8'); + + expect(app).toContain( + "mode === 'claude' ? 'cc'" + ); + }); +}); diff --git a/test/home-sessions.test.ts b/test/home-sessions.test.ts index 67da3e55b..87520396a 100644 --- a/test/home-sessions.test.ts +++ b/test/home-sessions.test.ts @@ -165,25 +165,28 @@ describe('home sessions column: model', () => { const [row] = app.buildHomeSessionRows(); expect(row.caseName).toBe('claudeman'); expect(row.modeBadge).toBe('cx'); - // claude is the default backend and gets no badge — the strip does the same. - const plain = loadHomeSessionsApp({ + const claude = loadHomeSessionsApp({ sessions: sessionMap([{ id: 'a', mode: 'claude' }]), sessionOrder: ['a'], cases: CASES, }); - expect(plain.buildHomeSessionRows()[0].modeBadge).toBe(''); + expect(claude.buildHomeSessionRows()[0].modeBadge).toBe('cc'); }); - it('badges every non-claude backend, so a new run mode cannot read as claude here', () => { + it('badges every supported backend', () => { // The badge map is a per-mode lookup with a '' fallback, so a mode missing from it - // is indistinguishable from claude in this rail while the tab strip badges it fine. + // is visually indistinguishable from an unrecognised session in this rail. for (const [mode, badge] of [ + ['claude', 'cc'], ['shell', 'sh'], ['opencode', 'oc'], ['codex', 'cx'], ['gemini', 'gm'], ['antigravity', 'ag'], ['pi', 'pi'], + ['grok', 'gk'], + ['deepseek', 'ds'], + ['omp', 'om'], ] as const) { const app = loadHomeSessionsApp({ sessions: sessionMap([{ id: 'a', mode }]),