#!/usr/bin/env tsx /** * 有头可视化:依次跑 FTL → Expedited,便于肉眼核对 Shipment Type 卡片与 Step 2 字段 * * npm run visual:priority1-inspect-types */ process.env.RPA_HEADLESS = "false"; process.env.RPA_KEEP_BROWSER_OPEN = "true"; process.env.RPA_SLOW_MO_MS = "200"; process.env.RPA_DWELL_MS = "3500"; process.env.RPA_QUOTE_WAIT_MS = "120000"; import { mkdirSync } from "node:fs"; import { join } from "node:path"; import { DEFAULT_EXPEDITED_DEMO, DEFAULT_FTL_DEMO, formatPriority1InputSummary, } from "@/workers/rpa/priority1/demo-input"; import { getShipmentConfig } from "@/workers/rpa/priority1/shipment-types"; const outRoot = join(process.cwd(), ".rpa", "visual-priority1-inspect"); mkdirSync(outRoot, { recursive: true }); const RUNS = [ { demo: DEFAULT_FTL_DEMO, caseId: "ftl-inspect" }, { demo: DEFAULT_EXPEDITED_DEMO, caseId: "expedited-inspect" }, ] as const; async function main(): Promise { const { runPriority1VisualChain } = await import("./visual-priority1-full-chain"); console.log("\n[inspect] 有头可视化 — 先 FTL,再 Expedited"); console.log("[inspect] 每种类型 Step 1/2 填写后会停留 3.5s;结束后 Ctrl+C 继续下一种\n"); for (let i = 0; i < RUNS.length; i += 1) { const run = RUNS[i]!; const cfg = getShipmentConfig(run.demo.shipmentType); console.log(`\n${"═".repeat(60)}`); console.log(`[inspect] ▶ ${cfg.displayName}`); console.log("─".repeat(60)); console.log(formatPriority1InputSummary(run.demo)); console.log("─".repeat(60)); const result = await runPriority1VisualChain({ demo: run.demo, caseId: run.caseId, outDir: join(outRoot, run.caseId), keepBrowserOpen: true, }); if (!result.ok) { console.error(`[inspect] ${run.caseId} 失败: ${result.error}`); process.exit(1); } if (i < RUNS.length - 1) { console.log( `\n[inspect] ${cfg.displayName} 已完成。请核对 Shipment Type 黑底卡片与 Step 2。`, ); console.log("[inspect] 终端按 Ctrl+C 关闭浏览器并继续 Expedited…\n"); } } console.log("\n[inspect] 两种类型均已跑完。"); console.log(`[inspect] 截图: ${outRoot}`); } main().catch((e) => { console.error(e); process.exit(1); });