import { Box, Stack, Typography } from '@mui/material'; import MarkdownContent from './MarkdownContent'; import ToolCallGroup from './ToolCallGroup'; import type { Message } from '@/types/agent'; interface AssistantMessageProps { message: Message; /** True when this message is actively receiving streaming chunks. */ isStreaming?: boolean; } export default function AssistantMessage({ message, isStreaming = false }: AssistantMessageProps) { const renderSegments = () => { if (message.segments && message.segments.length > 0) { // Find the index of the last text segment (that's the one being streamed) let lastTextIdx = -1; for (let i = message.segments.length - 1; i >= 0; i--) { if (message.segments[i].type === 'text') { lastTextIdx = i; break; } } return message.segments.map((segment, idx) => { if (segment.type === 'text' && segment.content) { return ( ); } if (segment.type === 'tools' && segment.tools && segment.tools.length > 0) { return ; } return null; }); } // Fallback: render raw content if (message.content) { return ; } return null; }; return ( {/* Role label + timestamp */} Assistant {new Date(message.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} {/* Message bubble */} {renderSegments()} ); }