// Sidebar — driven by real persisted threads. const { useState: useStateSb } = React; const Sidebar = ({ threads, active, onSelect, onNew, onDelete, onClose, onOpenSaved, onOpenSettings, onOpenSources }) => { const [query, setQuery] = useStateSb(''); const AGENTS = window.OMNI_DATA.AGENTS; const realThreads = threads || []; const filtered = realThreads.filter(h => !query || (h.title || '').toLowerCase().includes(query.toLowerCase())); const agentOf = (id) => AGENTS.find(a => a.id === id) || AGENTS.find(a => a.id === 'mydash'); const relWhen = (ts) => { if (!ts) return ''; const diff = Date.now() - ts; const min = Math.floor(diff / 60000); if (min < 1) return 'now'; if (min < 60) return min + 'm'; const hr = Math.floor(min / 60); if (hr < 24) return hr + 'h'; const d = Math.floor(hr / 24); if (d < 7) return d + 'd'; return new Date(ts).toLocaleDateString(undefined, { month: 'short', day: 'numeric' }); }; const renderItem = (h) => { const A = agentOf(h.agent); return (