algorembrant's picture
Upload 31 files
d8bad25 verified
import { useRef, useEffect } from 'react';
import { Cpu, Activity } from 'lucide-react';
export default function ReasoningSidebar({ logs, status }) {
const bottomRef = useRef(null);
useEffect(() => {
bottomRef.current?.scrollIntoView({ behavior: 'smooth' });
}, [logs]);
return (
<>
{/* Header */}
<div className="sidebar-header">
<div className="sidebar-header-left">
<Cpu size={16} className={status === 'running' ? 'color-green anim-pulse' : 'color-muted'} />
<span className="sidebar-header-title">GEMINI 3 FLASH</span>
</div>
<div className={`badge ${status === 'running' ? 'badge-green' : 'badge-red'}`}>
{status.toUpperCase()}
</div>
</div>
{/* Log Stream */}
<div className="sidebar-body">
{(!logs || logs.length === 0) && (
<div className="sidebar-empty">
<Activity size={28} strokeWidth={1} />
<span>Waiting for agent thoughts...</span>
</div>
)}
{logs && [...logs].reverse().map((log, i) => (
<div key={i} className="log-entry fade-in">
<div className="log-entry-header">
<span className={`badge ${log.action === 'BUY' ? 'badge-green' :
log.action === 'SELL' ? 'badge-red' :
log.action === 'CLOSE' ? 'badge-blue' :
'badge-neutral'
}`}>
{log.action}
</span>
<div className="confidence-info">
<div className="confidence-bar-track">
<div
className={`confidence-bar-fill ${log.confidence > 0.7 ? 'confidence-bar-high' : 'confidence-bar-low'}`}
style={{ width: `${log.confidence * 100}%` }}
/>
</div>
<span>{(log.confidence * 100).toFixed(0)}%</span>
</div>
</div>
<p className="log-entry-body">{log.reasoning}</p>
<div className="log-entry-footer">
<span>{new Date(log.timestamp).toLocaleTimeString()}</span>
<span>GEMINI-2.0-FLASH</span>
</div>
</div>
))}
<div ref={bottomRef} />
</div>
{/* Footer */}
<div className="sidebar-footer">
<span className="live-dot" />
<span>Live connection established</span>
</div>
</>
);
}