"use client"; import { useEffect, useState } from "react"; import Image from "next/image"; import { Bug, ExternalLink, RefreshCw } from "lucide-react"; import { EmptyState } from "@/components/layout/empty-state"; import { PageHeader } from "@/components/layout/page-header"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; interface DebugRunSummary { id: string; label: string; startedAt: string; stepCount: number; lastStep?: string | null; } interface DebugRunDetail { run: { id: string; label: string; startedAt: string; steps: Array<{ step: string; at: string; url?: string; screenshot?: string; }>; }; screenshots: string[]; } export default function DebugPage() { const [runs, setRuns] = useState([]); const [selectedId, setSelectedId] = useState(null); const [detail, setDetail] = useState(null); const [loading, setLoading] = useState(true); async function loadRuns() { setLoading(true); const res = await fetch("/api/debug/runs"); const data = await res.json(); const nextRuns = (data.runs ?? []) as DebugRunSummary[]; setRuns(nextRuns); setSelectedId((current) => current ?? nextRuns[0]?.id ?? null); setLoading(false); } useEffect(() => { loadRuns(); }, []); useEffect(() => { if (!selectedId) { setDetail(null); return; } fetch(`/api/debug/runs/${selectedId}`) .then((r) => r.json()) .then((d) => setDetail(d)) .catch(() => setDetail(null)); }, [selectedId]); return (
重新整理 } /> {loading ? (
) : runs.length === 0 ? ( ) : (
紀錄列表 最近 30 次 {runs.map((run) => ( ))} 步驟詳情 {selectedId && ( {selectedId} )} {!detail ? (

選一筆紀錄查看截圖

) : (
{detail.run.steps.map((step) => (

{step.step}

{new Date(step.at).toLocaleTimeString("zh-TW")}

{step.url && ( {step.url} )} {step.screenshot && ( {step.step} )}
))}
)}
)}
); }