"use client"; import { CopilotKit, useCoAgent, useCoAgentStateRender, } from "@copilotkit/react-core"; import { CopilotChat } from "@copilotkit/react-ui"; import "@copilotkit/react-ui/styles.css"; import StateDisplay from "./StateDisplay"; interface ResearchState { question: string; phase: string; // idle|planning|searching|analyzing|evaluating|done status: string; plan: Array<{ id: number; question: string; status: string; // pending|searching|done }>; current_question_index: number; current_search: { query: string; type: string; results?: Array<{ chunk: string; score: number; source: string; expanded: boolean; }>; } | null; insights: Array<{ summary: string; confidence: number; sources: string[]; }>; confidence: number; final_report: { title: string; summary: string; findings: string[]; conclusions: string[]; sources: string[]; } | null; } function AgentContent() { // Use useCoAgent to sync state with the backend research agent const { state } = useCoAgent({ name: "research_agent", initialState: { question: "", phase: "idle", status: "", plan: [], current_question_index: 0, current_search: null, insights: [], confidence: 0.0, final_report: null, }, }); // Log state changes console.log("[FRONTEND] Current state:", state); // Render state updates from the research agent useCoAgentStateRender({ name: "research_agent", render: ({ state: newState }) => { console.log("[FRONTEND] State render update:", newState); // Show different messages based on phase let phaseMessage = ""; switch (newState.phase) { case "planning": phaseMessage = "Planning research..."; break; case "searching": phaseMessage = newState.current_search ? `Searching: ${newState.current_search.query}` : "Searching..."; break; case "analyzing": phaseMessage = "Extracting insights..."; break; case "evaluating": phaseMessage = `Evaluating confidence: ${(newState.confidence * 100).toFixed(0)}%`; break; case "synthesizing": phaseMessage = "Generating final report..."; break; case "done": phaseMessage = "Research complete!"; break; default: phaseMessage = newState.status || "Ready"; } return (
Research Update: {phaseMessage}
); }, }); return ( <>
{/* Chat on the left */}
{/* State display on the right */}

Research State

Live updates from the research agent

); } export default function Agent() { return ( ); }