import React, { useState, useEffect, useRef } from 'react'; import axios from 'axios'; import './App.css'; function App() { const [query, setQuery] = useState(''); const [messages, setMessages] = useState([]); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(null); const [currentView, setCurrentView] = useState('blocks'); const [responseData, setResponseData] = useState(null); const [isOnline, setIsOnline] = useState(false); // Added state const messagesEndRef = useRef(null); useEffect(() => { scrollToBottom(); }, [messages]); // Added: checks /health const checkHealth = async () => { try { await axios.get('http://0.0.0.0:8000/health'); setIsOnline(true); console.log('System is online'); } catch { setIsOnline(false); console.log('System is offline'); } }; const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }; useEffect(() => { if (currentView === 'screenshot') { let isMounted = true; const fetchScreenshot = async () => { try { const res = await axios.get('http://0.0.0.0:8000/screenshots/updated_screen.png', { responseType: 'blob', params: { t: new Date().getTime() } }); if (isMounted) { console.log('Screenshot fetched successfully'); const imageUrl = URL.createObjectURL(res.data); setResponseData((prev) => { if (prev?.screenshot && prev.screenshot !== 'placeholder.png') { URL.revokeObjectURL(prev.screenshot); } return { ...prev, screenshot: imageUrl, screenshotTimestamp: new Date().getTime() }; }); } } catch (err) { console.error('Error fetching screenshot:', err); if (isMounted) { setResponseData((prev) => ({ ...prev, screenshot: 'placeholder.png', screenshotTimestamp: new Date().getTime() })); } } }; fetchScreenshot(); const interval = setInterval(fetchScreenshot, 1000); return () => { isMounted = false; clearInterval(interval); if (responseData?.screenshot && responseData.screenshot !== 'placeholder.png') { URL.revokeObjectURL(responseData.screenshot); } }; } }, [currentView]); const handleSubmit = async (e) => { e.preventDefault(); checkHealth(); if (!query.trim()) { console.log('Empty query'); return; } setMessages((prev) => [...prev, { type: 'user', content: query }]); setIsLoading(true); setError(null); try { console.log('Sending query:', query); const res = await axios.post('http://0.0.0.0:8000/query', { query, tts_enabled: false }); console.log('Response:', res.data); const data = res.data; setResponseData(data); setMessages((prev) => [ ...prev, { type: 'agent', content: data.answer, agentName: data.agent_name }, ]); } catch (err) { console.error('Error:', err); setError('Failed to process query.'); setMessages((prev) => [ ...prev, { type: 'error', content: 'Error: Unable to get a response.' }, ]); } finally { console.log('Query completed'); setIsLoading(false); setQuery(''); } }; const handleGetScreenshot = async () => { try { console.log('Fetching screenshot...'); const res = await axios.get('http://0.0.0.0:8000/screenshots/updated_screen.png'); setResponseData((prev) => ({ ...prev, screenshot: res.data.screenshot })); setCurrentView('screenshot'); } catch (err) { console.error('Error fetching screenshot:', err); setError('Browser not in use'); } }; return (

AgenticSeek

C H A T


{messages.length === 0 ? (

No messages yet. Type below to start!

) : ( messages.map((msg, index) => (
{msg.type === 'agent' && ( {msg.agentName} )}

{msg.content}

)) )}
{isOnline && isLoading &&
Thinking...
} {!isLoading && !isOnline &&

System offline. Deploy backend first.

}
setQuery(e.target.value)} placeholder="Type your query..." disabled={isLoading} />

I N T E R F A C E


{error &&

{error}

} {currentView === 'blocks' ? (
{responseData && responseData.blocks && Object.values(responseData.blocks).length > 0 ? ( Object.values(responseData.blocks).map((block, index) => (

Tool: {block.tool_type}

{block.block}

Feedback: {block.feedback}

Success: {block.success ? 'Yes' : 'No'}

)) ) : (

Tool: No tool in use

No file opened
)}
) : (
Screenshot { e.target.src = 'placeholder.png'; console.error('Failed to load screenshot'); }} key={responseData?.screenshotTimestamp || 'default'} // Force re-render />
)}
); } export default App;