import { getVersion } from "@/cli-core"; import { getAgentDisplayInfo } from "@/lib/agents/display"; import { formatDuration } from "@/lib/format"; import type { SessionState } from "@/lib/session-state"; import { TUI_COLORS } from "@/lib/tui/shared/colors"; import type { Config } from "@/lib/types"; interface HeaderProps { projectName: string; branch?: string; elapsed: number; session: SessionState | null; projectPath: string; config?: Config | null; } export interface HeaderAgentDisplays { reviewerDisplay: string; fixerDisplay: string; } const APP_VERSION = getVersion(); export function getHeaderAgentDisplays(config?: Config | null): HeaderAgentDisplays { if (!config) { return { reviewerDisplay: "Unknown (Default, Default)", fixerDisplay: "Unknown (Default, Default)", }; } const reviewer = getAgentDisplayInfo(config.reviewer); const fixer = getAgentDisplayInfo(config.fixer); const reviewerDisplay = `${reviewer.agentName} (${reviewer.modelName} • ${reviewer.reasoning})`; const fixerDisplay = `${fixer.agentName} (${fixer.modelName} • ${fixer.reasoning})`; return { reviewerDisplay, fixerDisplay }; } export function Header({ branch, elapsed, session, projectPath, config }: HeaderProps) { const statusIcon = session ? "●" : "○"; const statusColor = session ? TUI_COLORS.status.success : TUI_COLORS.status.inactive; const homeDir = process.env.HOME || ""; const displayPath = projectPath.startsWith(homeDir) && homeDir !== "" ? projectPath.replace(homeDir, "~") : projectPath; const { reviewerDisplay, fixerDisplay } = getHeaderAgentDisplays(config); return ( {" ██████╗ ██████╗ "} {" ██╔══██╗██╔══██╗"} {" ██████╔╝██████╔╝"} {" ██║ ██║██║ ██║"} {" ╚═╝ ╚═╝╚═╝ ╚═╝"} Ralph Review v{APP_VERSION} Reviewer: {reviewerDisplay} Fixer: {fixerDisplay} {displayPath} {branch && [{branch}]} {statusIcon} Elapsed: {formatDuration(elapsed)} ); }