diff --git a/frontend/src/app/settings/page.tsx b/frontend/src/app/settings/page.tsx index 3608a93..656b82f 100644 --- a/frontend/src/app/settings/page.tsx +++ b/frontend/src/app/settings/page.tsx @@ -104,6 +104,10 @@ export default function SettingsPage() { const [consolidateResult, setConsolidateResult] = useState(""); const fileInputRef = useRef(null); + // Full audit export (memories + entity graph + trust + conflicts) + const [fullExportBusy, setFullExportBusy] = useState<"" | "json" | "sqlite" | "pdf">(""); + const [fullExportError, setFullExportError] = useState(""); + // Backup & restore const [backupPass, setBackupPass] = useState(""); const [backingUp, setBackingUp] = useState(false); @@ -242,6 +246,23 @@ export default function SettingsPage() { setImportingJson(false); }; + const downloadFullExport = async (format: "json" | "sqlite" | "pdf") => { + setFullExportBusy(format); + setFullExportError(""); + try { + const { blob, filename } = await api.exportFull(format); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = filename; + a.click(); + URL.revokeObjectURL(url); + } catch (e) { + setFullExportError(e instanceof Error ? e.message : String(e)); + } + setFullExportBusy(""); + }; + const downloadBackup = async () => { setBackingUp(true); try { @@ -947,6 +968,54 @@ export default function SettingsPage() { /> +
+

+ Full audit export — memories, entity graph, trust scores, and conflict candidates + in one file. For auditing or backing up everything, not just memories. +

+
+ + + +
+ {fullExportError && ( + {fullExportError} + )} +
+