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()}
);
}