import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { createMemoryApi, previewDuplicatesApi } from "../api/client.ts"; export function CreateMemory() { const navigate = useNavigate(); const [title, setTitle] = useState(""); const [content, setContent] = useState(""); const [summary, setSummary] = useState(""); const [memoryType, setMemoryType] = useState("guidance"); const [sourceType, setSourceType] = useState("instruction"); const [language, setLanguage] = useState("typescript"); const [tags, setTags] = useState(""); const [sourceUrl, setSourceUrl] = useState(""); const [projectName, setProjectName] = useState(""); const [confidence, setConfidence] = useState("0.5"); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); // Duplicate preview const [dupPreview, setDupPreview] = useState<{ outcome: string; reason: string; target_memory_id?: string; } | null>(null); const [checkingDupes, setCheckingDupes] = useState(false); async function handleCheckDuplicates() { if (!title.trim() || !content.trim()) return; setCheckingDupes(true); setDupPreview(null); try { const result = await previewDuplicatesApi({ title, content, summary: summary || title, language, }); setDupPreview(result); } catch (err) { setError(err instanceof Error ? err.message : "Duplicate check failed"); } finally { setCheckingDupes(false); } } async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setSaving(true); setError(null); try { const result = await createMemoryApi({ title, content, summary: summary || title, memory_type: memoryType as "guidance" | "anti_pattern", source_type: sourceType as "correction" | "discovery" | "instruction", language, tags: tags ? tags.split(",").map((t) => t.trim()).filter(Boolean) : undefined, source_url: sourceUrl || undefined, project_name: projectName || undefined, confidence: Number(confidence), }); if (result.memory?.id) { navigate(`/memories/${result.memory.id}`); } else { navigate("/"); } } catch (err) { setError(err instanceof Error ? err.message : "Failed to create memory"); } finally { setSaving(false); } } return (

Create Memory

{error &&

{error}

}
setTitle(e.target.value)} required style={inputStyle} />