import UserMessage from './UserMessage';
import AssistantMessage from './AssistantMessage';
import type { Message } from '@/types/agent';
interface MessageBubbleProps {
message: Message;
/** True if this is the user message that starts the last turn. */
isLastTurn?: boolean;
/** Callback to undo (remove) the last turn. */
onUndoTurn?: () => void;
/** Whether the agent is currently processing. */
isProcessing?: boolean;
/** True when this message is actively receiving streaming chunks. */
isStreaming?: boolean;
}
/**
* Thin dispatcher — routes each message to the correct
* specialised component based on its role / content.
*/
export default function MessageBubble({
message,
isLastTurn = false,
onUndoTurn,
isProcessing = false,
isStreaming = false,
}: MessageBubbleProps) {
// Legacy approval-only messages (from old localStorage data) — skip them.
// Approvals are now rendered inline within ToolCallGroup.
if (message.approval && !message.content && !message.segments?.length) {
return null;
}
if (message.role === 'user') {
return (
);
}
if (message.role === 'assistant') {
return ;
}
// Fallback (tool messages, etc.)
return null;
}