import { useEffect, useRef, useState } from "react"; import { useHarnessState } from "../assistant/HarnessContext"; import type { HarnessEvent } from "@agent-studio/shared"; type Filter = "all" | "run" | "skill" | "tool" | "approval" | "model"; export function TimelinePanel() { const { events } = useHarnessState(); const [filter, setFilter] = useState("all"); const viewport = useRef(null); const atBottom = useRef(true); const visible = events.filter((event) => filter === "all" || event.type.startsWith(`${filter}.`) || (filter === "tool" && event.type.startsWith("attachment."))); useEffect(() => { if (atBottom.current) viewport.current?.scrollTo({ top: viewport.current.scrollHeight }); }, [visible.length]); return ; } function EventRow({ event }: { event: HarnessEvent }) { const [open, setOpen] = useState(false); return
{open &&
{JSON.stringify(event.payload, null, 2)}
}
; }