import { html, useEffect, useRef } from '../lib/preact.js'; import { getStatusMeta } from '../utils/status.js'; import { formatDuration, getContextUsageSummary } from '../utils/formatting.js'; import { ChatMessages } from './ChatMessages.js'; import { QuestionBlock } from './QuestionBlock.js'; import { SimpleInput } from './SimpleInput.js'; export function SessionCard({ session, onClick, conversation, onFetchConversation, onRespond, onDismiss }) { const hasQuestions = session.pending_questions && session.pending_questions.length > 0; const statusMeta = getStatusMeta(session.status); const agent = session.agent === 'codex' ? 'codex' : 'claude'; const agentHeaderClass = agent === 'codex' ? 'agent-header-codex' : 'agent-header-claude'; const contextUsage = getContextUsageSummary(session.context_usage); // Fetch conversation when card mounts useEffect(() => { if (!conversation && onFetchConversation) { onFetchConversation(session.session_id, session.project_dir, agent); } }, [session.session_id, session.project_dir, agent, conversation, onFetchConversation]); const chatPaneRef = useRef(null); // Scroll chat pane to bottom when conversation loads or updates useEffect(() => { const el = chatPaneRef.current; if (el) el.scrollTop = el.scrollHeight; }, [conversation]); const handleDismissClick = (e) => { e.stopPropagation(); onDismiss(session.session_id); }; return html`