"use client" import { useState, useEffect } from "react" import { motion } from "framer-motion" import { ChatInterface } from "@/components/chat-interface" import type { Agent } from "@/lib/types" export default function Home() { const [selectedAgent, setSelectedAgent] = useState(null) const [isLoading, setIsLoading] = useState(true) const [agents, setAgents] = useState([]) const [agentsError, setAgentsError] = useState(null) const [isAgentsLoading, setIsAgentsLoading] = useState(true) useEffect(() => { // Try to load previously selected agent from localStorage const savedAgent = localStorage.getItem("selected-agent") if (savedAgent) { try { const agent = JSON.parse(savedAgent) setSelectedAgent(agent) } catch (err) { console.error("[home] Failed to load saved agent:", err) } } setIsLoading(false) }, []) useEffect(() => { const fetchAgents = async () => { try { setIsAgentsLoading(true) setAgentsError(null) const response = await fetch("/api/agents") const data = (await response.json()) as { agents?: unknown; error?: string } if (!response.ok || !data.agents) { throw new Error(data.error || "Failed to load agents") } setAgents(data.agents as typeof agents) } catch (err) { setAgents([]) setAgentsError(err instanceof Error ? err.message : "Failed to load agents") } finally { setIsAgentsLoading(false) } } fetchAgents() }, []) useEffect(() => { if (!selectedAgent || agents.length === 0) return const match = agents.find((agent) => agent.id === selectedAgent.id) if (!match) { setSelectedAgent(null) localStorage.removeItem("selected-agent") localStorage.removeItem("selected-agent-id") return } if ( match.name !== selectedAgent.name || match.description !== selectedAgent.description ) { setSelectedAgent(match) localStorage.setItem("selected-agent-id", match.id) localStorage.setItem("selected-agent", JSON.stringify(match)) } }, [agents, selectedAgent]) const handleAgentSelected = (agent: Agent) => { setSelectedAgent(agent) localStorage.setItem("selected-agent-id", agent.id) localStorage.setItem("selected-agent", JSON.stringify(agent)) } if (isLoading) { return null // Avoid hydration mismatch } // If no agent is selected but we have agents loaded, select the first one // This ensures we always show the ChatInterface with its beautiful selection UI const activeAgent = selectedAgent || (agents.length > 0 ? agents[0] : null) if (!activeAgent) { return (
{agentsError ? (

{agentsError}

) : (

Loading agents...

)}
) } return (
) }