You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
1.1 KiB
36 lines
1.1 KiB
import { ensureArray } from "@/workers/rpa/kernel/context-validator";
|
|
import type {
|
|
CargoStateEvidence,
|
|
CargoStateProbe,
|
|
} from "@/workers/rpa/kernel/state-engine";
|
|
|
|
const EMPTY_CARGO_EVIDENCE: CargoStateEvidence = {
|
|
phase: "no_cargo_inputs",
|
|
mountedCargoFields: [],
|
|
interactiveCargoFields: [],
|
|
blockedCargoFields: [],
|
|
};
|
|
|
|
/** browser evaluate 结果归一化,禁止 undefined 流入 state */
|
|
export function normalizeCargoEvidence(
|
|
raw: CargoStateEvidence | null | undefined,
|
|
): CargoStateEvidence {
|
|
if (!raw || typeof raw !== "object") {
|
|
return EMPTY_CARGO_EVIDENCE;
|
|
}
|
|
return {
|
|
phase: raw.phase ?? "no_cargo_inputs",
|
|
mountedCargoFields: ensureArray(raw.mountedCargoFields),
|
|
interactiveCargoFields: ensureArray(raw.interactiveCargoFields),
|
|
blockedCargoFields: ensureArray(raw.blockedCargoFields),
|
|
};
|
|
}
|
|
|
|
export function buildCargoProbe(
|
|
raw: CargoStateEvidence | null | undefined,
|
|
isReady: (evidence: CargoStateEvidence) => boolean,
|
|
): CargoStateProbe {
|
|
const evidence = normalizeCargoEvidence(raw);
|
|
return { ready: isReady(evidence), evidence };
|
|
}
|