'use client' import { useEffect, useState } from 'react' import { useAgentStore } from '@/hooks/useAgentStore' import { getMemory } from '@/lib/api' const searchMemory = (q: string) => fetch('/api/v1/memory/search?q=' + encodeURIComponent(q)).then(r => r.json()) import { Brain, Search, RefreshCw, MessageSquare, Settings, Code2, User } from 'lucide-react' import { formatDistanceToNow } from 'date-fns' const TYPE_META: Record = { conversation: { icon: MessageSquare, color: '#22d3ee', label: 'Conversation' }, user_preference: { icon: User, color: '#fbbf24', label: 'Preference' }, user_directive: { icon: User, color: '#fbbf24', label: 'Directive' }, project_context: { icon: Code2, color: '#34d399', label: 'Project' }, general: { icon: Brain, color: '#818cf8', label: 'General' }, } export default function MemoryPanel() { const { sessionId, locale } = useAgentStore() const [memories, setMemories] = useState([]) const [loading, setLoading] = useState(true) const [query, setQuery] = useState('') const [searching, setSearching] = useState(false) const load = async () => { setLoading(true) try { const data = await getMemory() setMemories(Array.isArray(data) ? data : data.memories || []) } catch {} setLoading(false) } const search = async () => { if (!query.trim()) { load(); return } setSearching(true) try { const data = await searchMemory(query) setMemories(Array.isArray(data) ? data : data.results || []) } catch {} setSearching(false) } useEffect(() => { load() }, [sessionId]) return (
{locale === 'my' ? 'မှတ်ဉာဏ်' : 'Memory'} {memories.length > 0 && ( {memories.length} )}
{/* Search */}
setQuery(e.target.value)} onKeyDown={e => e.key === 'Enter' && search()} placeholder={locale === 'my' ? 'မှတ်ဉာဏ်ရှာဖွေရန်...' : 'Search memory...'} className="flex-1 bg-transparent text-[11px] outline-none" style={{ color: 'var(--text-primary)' }} />
{loading ? (
{[...Array(4)].map((_, i) => (
))}
) : memories.length === 0 ? (

{locale === 'my' ? 'မှတ်ဉာဏ်မရှိသေးပါ' : 'No memories yet'}

{locale === 'my' ? 'Conversation များ မှတ်ဉာဏ်တွင် သိမ်းဆည်းမည်' : 'Conversations and context will be saved here automatically'}

) : ( memories.map((mem: any, i: number) => { const tm = TYPE_META[mem.memory_type] || TYPE_META.general const Icon = tm.icon return (
{tm.label} {mem.key && ( {mem.key} )} {mem.created_at ? formatDistanceToNow(new Date(mem.created_at * 1000), { addSuffix: true }) : ''}

{mem.content}

) }) )}
) }