接入 INI panel session readiness workflow

This commit is contained in:
2026-06-16 06:36:45 +08:00
parent 8e37c69bc4
commit 03db34485e
8 changed files with 363 additions and 4 deletions

View File

@@ -52,6 +52,47 @@ export function machineSessionLoadWorkflowLogLines(summary) {
];
}
export function createMachineSessionReadinessFieldState(readiness) {
return {
sessionReadinessPhase: readiness.phase,
sessionReadinessReady: readiness.ready ? "ready" : "blocked",
sessionReadinessMissing: readiness.missing.length === 0 ? "none" : readiness.missing.join(", "),
};
}
export function machineSessionReadinessLogLines(readiness) {
const checks = Array.isArray(readiness.checks) ? readiness.checks : [];
return [
`Session readiness: ${readiness.ready ? "ready" : "blocked"}`,
...checks.map((check) => {
const status = check.ok ? "ok" : `blocked (${check.error})`;
return `${check.name}: ${check.path} -> ${status}`;
}),
...(readiness.snapshotCheck
? [
`snapshot: ${readiness.snapshotCheck.path} -> ${
readiness.snapshotCheck.ok ? "ok" : `blocked (${readiness.snapshotCheck.error})`
}`,
]
: []),
];
}
export async function readMachineSessionReadinessWorkflow({
readiness,
readReadiness,
} = {}) {
const sessionReadiness = readiness ?? await readReadiness?.();
if (!sessionReadiness) {
throw new Error("A machine session readiness reader is required.");
}
return {
readiness: sessionReadiness,
fields: createMachineSessionReadinessFieldState(sessionReadiness),
logLines: machineSessionReadinessLogLines(sessionReadiness),
};
}
export async function loadMachineSessionIntoWasmWorkflow({ loadSession }) {
if (typeof loadSession !== "function") {
throw new Error("A machine session loader is required.");
@@ -114,6 +155,7 @@ export async function restoreMachineSessionSnapshotWorkflow({
snapshotLabel,
loadMachineSessionSnapshot,
loadMachineTextFiles,
readReadiness = null,
loadSession = null,
}) {
const snapshot = await loadMachineSessionSnapshot(
@@ -129,21 +171,36 @@ export async function restoreMachineSessionSnapshotWorkflow({
editorIniText: files.ini,
summary,
fields,
readiness: null,
loadSummary: null,
loadedSession: null,
logLines: sessionSnapshotRestoreLogLines(summary),
};
if (readReadiness) {
const readinessWorkflow = await readMachineSessionReadinessWorkflow({ readReadiness });
result.readiness = readinessWorkflow.readiness;
result.fields = {
...result.fields,
...readinessWorkflow.fields,
};
result.logLines = [
...result.logLines,
...readinessWorkflow.logLines,
];
}
if (loadSession) {
const loadWorkflow = await loadMachineSessionIntoWasmWorkflow({ loadSession });
result.loadedSession = loadWorkflow.loadedSession;
result.loadSummary = loadWorkflow.loadSummary;
result.fields = {
...fields,
...(result.readiness ? createMachineSessionReadinessFieldState(result.readiness) : {}),
...loadWorkflow.fields,
sessionGcode: summary.gcodeOpfsPath,
};
result.logLines = [
...sessionSnapshotSummaryLogLines(summary),
...(result.readiness ? machineSessionReadinessLogLines(result.readiness) : []),
...loadWorkflow.logLines,
`G-code: ${summary.gcodeOpfsPath ?? "-"}`,
];