/** * Flock Freight RPA 探针(PRD §14.7) * 用法:RPA_MOCK_MODE=true npm run probe:flock-rpa * 或真实模式 FLOCK_RPA_ENABLED=true npm run probe:flock-rpa */ import { runFlockQuoteRpa } from "@/workers/rpa/flock/run-quote"; import { DEFAULT_FLOCK_DEMO } from "@/workers/rpa/flock/demo-input"; import type { FlockQuoteInput } from "@/workers/rpa/flock/types"; /** 与 flock-manual-20260713-152051.js 录制样例一致 */ const sample: FlockQuoteInput = { pickupDate: DEFAULT_FLOCK_DEMO.pickupDateDisplay, pickupZip: DEFAULT_FLOCK_DEMO.pickupZip, deliveryZip: DEFAULT_FLOCK_DEMO.deliveryZip, palletCount: DEFAULT_FLOCK_DEMO.palletCount, totalWeightLb: DEFAULT_FLOCK_DEMO.totalWeightLb, lengthIn: DEFAULT_FLOCK_DEMO.lengthIn, widthIn: DEFAULT_FLOCK_DEMO.widthIn, heightIn: DEFAULT_FLOCK_DEMO.heightIn, }; async function main() { const rounds = Number(process.env.FLOCK_PROBE_ROUNDS ?? "1"); let ok = 0; for (let i = 1; i <= rounds; i++) { console.log(`[probe-flock] round ${i}/${rounds} …`); console.log( `[probe-flock] sample ${sample.pickupZip}→${sample.deliveryZip} ` + `${sample.palletCount}pl ${sample.totalWeightLb}lb`, ); const result = await runFlockQuoteRpa(sample); if (result.ok && result.quotes.length >= 2) { ok += 1; console.log( `[probe-flock] OK ref=${result.reference ?? "-"} prices=${result.quotes .map((q) => `${q.label}:$${q.totalUsd}`) .join(", ")}`, ); } else { console.error(`[probe-flock] FAIL: ${result.errorMessage ?? "unknown"}`); process.exitCode = 1; return; } } console.log(`[probe-flock] passed ${ok}/${rounds}`); } main().catch((error) => { console.error("[probe-flock] fatal:", error); process.exit(1); });