import React, { useState, useEffect } from 'react'; import { Save, Trash2, Calendar, Tag } from 'lucide-react'; export default function MemoryBank() { const [entries, setEntries] = useState([]); const [currentEntry, setCurrentEntry] = useState(''); const [category, setCategory] = useState('general'); const [isLoading, setIsLoading] = useState(true); useEffect(() => { loadEntries(); }, []); const loadEntries = async () => { try { const stored = await window.storage.list('memory:', false); if (stored && stored.keys) { const loadedEntries = await Promise.all( stored.keys.map(async (key) => { const result = await window.storage.get(key, false); return result ? JSON.parse(result.value) : null; }) ); setEntries(loadedEntries.filter(e => e !== null).sort((a, b) => b.timestamp - a.timestamp)); } } catch (error) { console.log('No existing entries or error loading:', error); setEntries([]); } setIsLoading(false); }; const saveEntry = async () => { if (!currentEntry.trim()) return; const entry = { id: Date.now(), text: currentEntry, category: category, timestamp: Date.now(), date: new Date().toLocaleString() }; try { await window.storage.set(`memory:${entry.id}`, JSON.stringify(entry), false); setEntries([entry, ...entries]); setCurrentEntry(''); } catch (error) { alert('Error saving entry: ' + error.message); } }; const deleteEntry = async (id) => { if (!confirm('Delete this memory entry?')) return; try { await window.storage.delete(`memory:${id}`, false); setEntries(entries.filter(e => e.id !== id)); } catch (error) { alert('Error deleting entry: ' + error.message); } }; const clearAll = async () => { if (!confirm('Delete ALL memory entries? This cannot be undone!')) return; try { for (const entry of entries) { await window.storage.delete(`memory:${entry.id}`, false); } setEntries([]); } catch (error) { alert('Error clearing entries: ' + error.message); } }; const exportEntries = () => { const text = entries.map(e => `[${e.date}] [${e.category}]\n${e.text}\n${'='.repeat(80)}\n` ).join('\n'); const blob = new Blob([text], { type: 'text/plain' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `claude-memories-${Date.now()}.txt`; a.click(); }; const categories = ['general', 'cube-solving', 'hexy-patterns', 'programming', 'ideas', 'solutions']; const categoryColors = { 'general': 'bg-gray-100', 'cube-solving': 'bg-blue-100', 'hexy-patterns': 'bg-purple-100', 'programming': 'bg-green-100', 'ideas': 'bg-yellow-100', 'solutions': 'bg-red-100' }; if (isLoading) { return
A persistent memory system for our conversations. Save insights, solutions, and ideas here. They'll be waiting next time we talk.
{entry.text}