diff --git a/admin-compliance/app/sdk/agent/page.tsx b/admin-compliance/app/sdk/agent/page.tsx index 89774b1..aa3ce93 100644 --- a/admin-compliance/app/sdk/agent/page.tsx +++ b/admin-compliance/app/sdk/agent/page.tsx @@ -33,6 +33,10 @@ export default function AgentPage() { }) const [scanProgress, setScanProgress] = useState('') const [activeScanId, setActiveScanId] = useState(() => typeof window !== 'undefined' ? localStorage.getItem('agent-scan-id') || '' : '') + const [scanHistory, setScanHistory] = useState<{ url: string; date: string; findings: number; docs: number }[]>(() => { + if (typeof window === 'undefined') return [] + try { return JSON.parse(localStorage.getItem('agent-scan-history') || '[]') } catch { return [] } + }) const { analyze, answerFollowUp, loading, error, result, history } = useAgentAnalysis() // Persist state to localStorage @@ -62,6 +66,7 @@ export default function AgentPage() { localStorage.setItem('agent-scan-result', JSON.stringify(data.result)) localStorage.removeItem('agent-scan-id') setActiveScanId('') + _addToHistory(data.result) return } if (data.status === 'failed') { @@ -86,6 +91,33 @@ export default function AgentPage() { return () => { cancelled = true } }, []) // eslint-disable-line react-hooks/exhaustive-deps + const _addToHistory = (result: any) => { + const entry = { + url: url || result.url || '', + date: new Date().toISOString(), + findings: result.findings?.length || 0, + docs: result.discovered_documents?.length || 0, + } + const updated = [entry, ...scanHistory.filter(h => h.url !== entry.url)].slice(0, 20) + setScanHistory(updated) + localStorage.setItem('agent-scan-history', JSON.stringify(updated)) + } + + const _loadFromHistory = (entry: { url: string }) => { + setUrl(entry.url) + setTab('scan') + // Load saved result if same URL + try { + const saved = localStorage.getItem('agent-scan-result') + if (saved) { + const parsed = JSON.parse(saved) + if (parsed.url === entry.url) { + setScanData(parsed) + } + } + } catch {} + } + const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!url.trim()) return @@ -129,6 +161,7 @@ export default function AgentPage() { localStorage.setItem('agent-scan-result', JSON.stringify(pollData.result)) localStorage.removeItem('agent-scan-id') setActiveScanId('') + _addToHistory(pollData.result) break } if (pollData.status === 'failed') { @@ -242,6 +275,32 @@ export default function AgentPage() { {tab === 'quick' && ( { setUrl(r.url); analyze(r.url, mode) }} /> )} + + {/* Scan History */} + {tab === 'scan' && scanHistory.length > 0 && ( +
+

Letzte Scans

+
+ {scanHistory.map((h, i) => ( + + ))} +
+
+ )} ) }