import type { UseStream } from "@langchain/langgraph-sdk/react"; import { Conversation, ConversationContent, } from "@/components/ai-elements/conversation"; import { extractPresentFilesFromMessage, groupMessages, hasPresentFiles, } from "@/core/messages/utils"; import type { AgentThreadState } from "@/core/threads"; import { cn } from "@/lib/utils"; import { ArtifactFileList } from "../artifacts/artifact-file-list"; import { StreamingIndicator } from "../streaming-indicator"; import { MessageGroup } from "./message-group"; import { MessageListItem } from "./message-list-item"; import { MessageListSkeleton } from "./skeleton"; export function MessageList({ className, threadId, thread, }: { className?: string; threadId: string; thread: UseStream; }) { if (thread.isThreadLoading) { return ; } return ( {groupMessages( thread.messages, (group) => { if (group.type === "human" || group.type === "assistant") { return ( ); } if (group.type === "assistant:present-files") { const files = []; for (const message of group.messages) { if (hasPresentFiles(message)) { files.push(...extractPresentFilesFromMessage(message)); } } return ( ); } return ( ); }, thread.isLoading, )} {thread.isLoading && }
); }