'use client' import { useState } from 'react' import type { TodoAgentResponseEvent, TodoAgentToolEvent } from '~/agents/todo' import { useSession } from '~/auth/client' import { ChatBox } from '~/components/ChatBox' import { AssistantMessage, ToolMessage, UserMessage } from '~/components/Message' import { useEvents } from '~/events/client' import { sendMessage } from './ai' type Message = | TodoAgentToolEvent | TodoAgentResponseEvent | { id: string type: 'user_message' message: string } function MessageSwitch({ message }: { message: Message }) { switch (message.type) { case 'user_message': { return {message.message} } case 'assistant_message': { return {message.message.response} } case 'function_call': { return ( ) } } } function ChatMessages({ userId, messages, addMessage }: { userId: string messages: Message[] addMessage: (message: Message) => void }) { useEvents({ id: userId, on: { assistant_message: addMessage } }) return (
{messages.map(message => ( ))}
) } export default function Chat() { const { userId } = useSession() const [messages, setMessages] = useState([]) function addMessage(message: Message) { setMessages(prev => [...prev, message]) } function handleSubmit(message: string) { addMessage({ id: Date.now().toString(), message, type: 'user_message' }) sendMessage({ message, userId }) } return (
) }