haixunMaster/app/api/debug/runs/route.ts

48 lines
1.4 KiB
TypeScript

import { NextResponse } from "next/server";
import { readdir, readFile, stat } from "fs/promises";
import path from "path";
import { debugDirPath } from "@/lib/threads-browser/debug";
export async function GET() {
try {
const root = debugDirPath();
let entries: string[] = [];
try {
entries = await readdir(root);
} catch {
return NextResponse.json({ runs: [] });
}
const runs = [];
for (const id of entries) {
const dir = path.join(root, id);
const info = await stat(dir).catch(() => null);
if (!info?.isDirectory()) continue;
let manifest: {
label?: string;
startedAt?: string;
steps?: Array<{ step?: string; at?: string; screenshot?: string }>;
} = {};
try {
manifest = JSON.parse(await readFile(path.join(dir, "manifest.json"), "utf8"));
} catch {
// ignore
}
runs.push({
id,
label: manifest.label ?? id,
startedAt: manifest.startedAt ?? info.mtime.toISOString(),
stepCount: manifest.steps?.length ?? 0,
lastStep: manifest.steps?.at(-1)?.step ?? null,
});
}
runs.sort((a, b) => (a.startedAt < b.startedAt ? 1 : -1));
return NextResponse.json({ runs: runs.slice(0, 30) });
} catch (error) {
const message = error instanceof Error ? error.message : "讀取 debug 紀錄失敗";
return NextResponse.json({ error: message }, { status: 500 });
}
}