/** * @fileoverview StatusBar component * * Bottom status bar showing: * - Session status (idle/working) * - Token count * - Cost * - Runtime * - Quick keyboard shortcuts */ import React from 'react'; import { Box, Text } from 'ink'; import type { ScreenSession } from '../../types.js'; interface StatusBarProps { session: ScreenSession | null; } /** * Formats duration from milliseconds to human-readable string */ function formatDuration(ms: number): string { const seconds = Math.floor(ms / 1000); const minutes = Math.floor(seconds / 60); const hours = Math.floor(minutes / 60); if (hours > 0) { return `${hours}h ${minutes % 60}m`; } if (minutes > 0) { return `${minutes}m ${seconds % 60}s`; } return `${seconds}s`; } /** * StatusBar component showing session information */ export function StatusBar({ session }: StatusBarProps): React.ReactElement { if (!session) { return ( No session selected Press ? for help | Esc to go back ); } const runtime = formatDuration(Date.now() - session.createdAt); const statusColor = session.attached ? 'green' : 'red'; const statusText = session.attached ? 'alive' : 'dead'; return ( {/* Left side: Session info */} {'\u25CF'} {statusText} | runtime: {runtime} | mode: {session.mode} | screen: {session.screenName} {/* Right side: Keyboard hints */} ? help | Esc back | Ctrl+C exit ); }