MCPcopy Create free account
hub / github.com/Microck/opencode-studio / LogsPage

Function LogsPage

client-next/src/app/logs/page.tsx:19–136  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

17type LogFilter = "all" | "mcp" | "agent" | "error";
18
19export default function LogsPage() {
20 const [logs, setLogs] = useState<LogEntry[]>([]);
21 const [paused, setPaused] = useState(false);
22 const [autoScroll, setAutoScroll] = useState(true);
23 const [filter, setFilter] = useState<LogFilter>("all");
24 const containerRef = useRef<HTMLDivElement | null>(null);
25 const eventSourceRef = useRef<EventSource | null>(null);
26
27 useEffect(() => {
28 let active = true;
29 const connect = async () => {
30 try {
31 const base = await getApiBaseUrl();
32 if (!active) return;
33 const source = new EventSource(`${base}/logs/stream`);
34 eventSourceRef.current = source;
35
36 source.onmessage = (event) => {
37 if (paused) return;
38 try {
39 const entry = JSON.parse(event.data) as LogEntry;
40 setLogs((prev) => [...prev.slice(-500), entry]);
41 } catch {
42 // ignore parse errors
43 }
44 };
45
46 source.onerror = () => {
47 toast.error("Log stream disconnected");
48 };
49 } catch (err: any) {
50 toast.error(err?.message || "Failed to connect to logs");
51 }
52 };
53
54 connect();
55 return () => {
56 active = false;
57 eventSourceRef.current?.close();
58 };
59 }, [paused]);
60
61 useEffect(() => {
62 if (!autoScroll) return;
63 if (!containerRef.current) return;
64 containerRef.current.scrollTop = containerRef.current.scrollHeight;
65 }, [logs, autoScroll]);
66
67 const filtered = useMemo(() => {
68 if (filter === "all") return logs;
69 if (filter === "mcp") return logs.filter((l) => l.line.includes("[MCP]"));
70 if (filter === "agent") return logs.filter((l) => l.line.includes("[Agent]"));
71 if (filter === "error") {
72 return logs.filter((l) => l.line.includes("[Error]") || l.line.includes("error=") || l.line.includes("status=429"));
73 }
74 return logs;
75 }, [logs, filter]);
76

Callers

nothing calls this directly

Calls 2

cnFunction · 0.90
connectFunction · 0.85

Tested by

no test coverage detected