'use client' import { useState, useEffect, useCallback } from 'react' import AILogCard from './AILogCard' import { fetchAILog, clearAILog } from '@/lib/api/ai' import { cn } from '@/lib/utils' type Filter = 'ALL' | 'FILTER' | 'ADAPT' | 'ERRORS' const LABELS: Record = { ALL: 'All', FILTER: 'Filter calls', ADAPT: 'Adapt calls', ERRORS: 'Errors', } export default function AILogFeed() { const [entries, setEntries] = useState([]) const [debugOn, setDebugOn] = useState(null) const [total, setTotal] = useState(0) const [filter, setFilter] = useState('ALL') const [search, setSearch] = useState('') const load = useCallback(async () => { try { const data = await fetchAILog(200) setEntries(Array.isArray(data.entries) ? data.entries : []) setDebugOn(data.debug_enabled ?? null) setTotal(data.total_in_buffer ?? 0) } catch {} }, []) useEffect(() => { load() const t = setInterval(load, 5000) return () => clearInterval(t) }, [load]) const filtered = entries.filter((e) => { if (filter === 'FILTER' && e.call_type !== 'filter') return false if (filter === 'ADAPT' && e.call_type !== 'adapt') return false if (filter === 'ERRORS' && e.direction !== 'error') return false if (search && !JSON.stringify(e).toLowerCase().includes(search.toLowerCase())) return false return true }) return (
{/* Toolbar */}
{(['ALL', 'FILTER', 'ADAPT', 'ERRORS'] as Filter[]).map((f) => ( ))}
setSearch(e.target.value)} placeholder="Search log…" className="g-input h-8 pl-7 text-xs w-44" />
{/* Status strip */}
{debugOn === false && ( AI Debug is off — enable it in Settings → AI Filter to capture logs )} {debugOn === true && ( AI Debug on )} {total > 0 && {total} entries · showing {filtered.length}}
{/* Entries */}
{filtered.length === 0 ? (

{debugOn === false ? 'Enable AI Debug in Settings to start capturing logs' : 'No AI log entries'}

) : ( [...filtered].reverse().map((e) => ) )}
) }