import React, { useEffect, useState } from 'react'; import { motion, AnimatePresence } from 'motion/react'; import { Terminal, Activity, CheckCircle2, AlertCircle, RefreshCw } from 'lucide-react'; interface GhostLog { id: string; timestamp: number; type: string; payload: any; } export default function AutomationFeed() { const [logs, setLogs] = useState([]); const [status, setStatus] = useState({ status: 'idle', message: 'Waiting for feed...' }); const [isLoading, setIsLoading] = useState(false); const fetchLogs = async () => { try { const [logsRes, statusRes] = await Promise.all([ fetch('/api/logs'), fetch('/api/optimization-status') ]); const logsData = await logsRes.json(); const statusData = await statusRes.json(); setLogs(logsData); setStatus(statusData); } catch (err) { console.error("Failed to fetch logs:", err); } }; useEffect(() => { const interval = setInterval(fetchLogs, 3000); return () => clearInterval(interval); }, []); const triggerOptimization = () => { setIsLoading(true); setTimeout(() => setIsLoading(false), 2000); }; const clearLogs = async () => { try { await fetch('/api/webhook', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ type: 'sys_purge', payload: {} }) }); setLogs([]); } catch(e) {} }; return (
Automation Bridge
{/* Optimization Header */}

Global Pipeline

{status.status === 'perfect' ? ( ) : ( )}

{status.message}

{status.status === 'perfect' ? '10/10' : (status.lastScore ? `${status.lastScore}/10` : 'INIT')}
{/* Real-time Feeds */}

Handshake Terminal

{logs.length > 0 ? logs.map((log) => ( {new Date(log.timestamp).toLocaleTimeString().split(' ')[0]} [{log.type.toUpperCase()}] {log.type === 'report' ? `REPORT_RCVD SC:${log.payload?.statsJson?.overall}` : 'SYNC_SUCCESS'} )) : (
Waiting for Tampermonkey exfiltration...
)}
* Ensure Borepub URL in script points to your development app address + /api/webhook
); }