import { useState } from "react"; import type { ChatMessage } from "../../types/message"; import { useAvatars } from "../../context/AvatarContext"; import { downloadTextFile, messageMarkdownFilename, singleAssistantMarkdown, } from "../../utils/exportConversation"; import { renderMarkdown } from "../../utils/markdown"; import { imageToDataUrl } from "../../utils/images"; import { CompactionSummaryBlock } from "./CompactionSummaryBlock"; import { ToolCallBlock } from "./ToolCallBlock"; import { ThinkingBlock } from "./ThinkingBlock"; import { BashOutputBlock } from "./BashOutputBlock"; import styles from "./MessageList.module.css"; interface MessageBubbleProps { message: ChatMessage; agentGutter?: "avatar" | "spacer" | "none"; toolsExpanded?: boolean; } function ChatAvatar({ src, className }: { src: string; className: string }) { const [failed, setFailed] = useState(false); if (!src || failed) return null; return ( setFailed(true)} /> ); } function AgentSideGutter({ mode, avatarUrl }: { mode: "avatar" | "spacer"; avatarUrl: string }) { if (mode === "spacer") { return