docs(design): DEAI-2 逐条处理情况与不做原因;补下载器原因码

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-29 21:10:46 +08:00
1 parent 8cc2e86935
commit 6e68ea5a9d
5 files changed
+94 -2

No files matched your search

+4 -1
View File
@@ -25,6 +25,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "~
import { Textarea } from "~/components/ui/textarea.tsx";
import { errorMessage } from "~/lib/api.ts";
import { actorText } from "~/lib/labels.ts";
import { humanizeReason } from "~/lib/reasons.ts";
import { useSse, useSseStatus } from "~/lib/sse.ts";
import { formatDateTime } from "~/lib/utils.ts";
@@ -377,7 +378,9 @@ function DecisionCard({ d }: { d: Decision }) {
</span>
</div>
<h3 className="mt-2 text-body font-medium break-words text-foreground">{d.title}</h3>
{d.summary ? <p className="mt-1 text-caption break-words text-muted-foreground">{d.summary}</p> : null}
{d.summary ? (
<p className="mt-1 text-caption break-words text-muted-foreground">{humanizeReason(d.summary)}</p>
) : null}
<GroupReleases d={d} />
<div className="mt-3">
<Evidence d={d} />
+1 -1
View File
@@ -179,7 +179,7 @@ export default function OrganizeRecordPage() {
<StatusBadge tone={RECORD_STATUS_TONE[r.status]}>{RECORD_STATUS_LABEL[r.status]}</StatusBadge>
<span className="text-meta text-muted-foreground tabular-nums">
{[
`${TRIGGER_LABEL[r.trigger]}${ACTION_LABEL[r.action]}`,
`${ACTION_LABEL[r.action]} · ${TRIGGER_LABEL[r.trigger]}`,
r.counts.total ? `${r.counts.succeeded}/${r.counts.total} 个文件成功` : null,
r.counts.failed ? `${r.counts.failed} 个失败` : null,
r.counts.skipped ? `${r.counts.skipped} 个跳过` : null,
+37
View File
@@ -0,0 +1,37 @@
import { existsSync } from "node:fs";
import { chromium } from "playwright-core";
const OUT = "/opt/uhd_media_tool-deai2/apps/web/test/screenshots/deai2";
const PAGES = [
["01-home", "/console"],
["02-inbox", "/console/inbox"],
["03-schedules", "/console/schedules"],
["04-agent-run", "/console/agent/a01dccf0-383f-46a9-acec-c2ca3cf571f8"],
["05-organize-detail", "/console/organize/33000000-0000-4000-8000-000000000903"],
["06-download-detail", "/console/downloads/33000000-0000-4000-8000-000000000802"],
["07-tasks", "/console/tasks"],
["08-settings-interface", "/console/settings#interface"],
];
const exe = ["/usr/bin/chromium", "/usr/bin/google-chrome"].find((p) => existsSync(p));
const browser = await chromium.launch({ executablePath: exe, headless: true, args: ["--no-sandbox"] });
for (const [tag, port] of (process.env.ONLY === "after" ? [["after", 5192]] : [["before", 5191], ["after", 5192]])) {
const base = `http://127.0.0.1:${port}`;
for (const [mode, vp, theme] of [["desk-light", { width: 1440, height: 900 }, "light"], ["desk-dark", { width: 1440, height: 900 }, "dark"], ["mobile", { width: 390, height: 844 }, "light"]]) {
const ctx = await browser.newContext({ viewport: vp, colorScheme: theme, deviceScaleFactor: mode === "mobile" ? 2 : 1 });
await ctx.addInitScript((t) => localStorage.setItem("umt-theme", t), theme);
const page = await ctx.newPage();
await page.goto(`${base}/login`, { waitUntil: "networkidle" });
await page.fill("#username", "w31-admin");
await page.fill("#password", "deai2-shots-pass");
await page.click('button[type="submit"]');
await page.waitForURL((u) => u.pathname.startsWith("/console"), { timeout: 20_000 });
for (const [name, path] of PAGES) {
if (tag === "before" && name === "08-settings-interface") continue;
await page.goto(base + path, { waitUntil: "networkidle" }).catch(() => {});
await page.waitForTimeout(1500);
await page.screenshot({ path: `${OUT}/${name}-${mode}-${tag}.png`, fullPage: true });
}
await ctx.close();
}
}
await browser.close();
console.log("done");