推进 INI 面板 workflow status helper

This commit is contained in:
2026-06-14 22:28:44 +08:00
parent a1c34e454e
commit f537a8fa42
6 changed files with 194 additions and 2 deletions

View File

@@ -368,8 +368,12 @@ TOOL_TABLE = browser-tool.tbl
"INI panel OPFS readiness",
);
const uiApi = uiDocument.defaultView.linuxCncIniPanelApi;
if (!uiApi?.getMachineSessionStateReport || !uiApi?.getMachineSessionStateReportExport) {
throw new Error("INI panel API namespace did not expose state report getters");
if (
!uiApi?.getMachineSessionStateReport ||
!uiApi?.getMachineSessionStateReportExport ||
!uiApi?.getMachineSessionWorkflowStatus
) {
throw new Error("INI panel API namespace did not expose state getters");
}
uiDocument.getElementById("ini-editor").value = iniText;
@@ -773,6 +777,37 @@ TOOL_TABLE = browser-tool.tbl
"snapshot",
"UI machine session state report export program source",
);
const machineSessionWorkflowStatus = uiApi.getMachineSessionWorkflowStatus();
assertEqual(
machineSessionWorkflowStatus.lastAction,
"run-gcode",
"UI machine session workflow status last action",
);
assertEqual(
machineSessionWorkflowStatus.error,
null,
"UI machine session workflow status error",
);
assertEqual(
machineSessionWorkflowStatus.readiness.opfs,
"OPFS: ready",
"UI machine session workflow status OPFS readiness",
);
assertEqual(
machineSessionWorkflowStatus.session.workflow,
"save-session-snapshot",
"UI machine session workflow status session workflow",
);
assertEqual(
machineSessionWorkflowStatus.run.status,
"ok",
"UI machine session workflow status run status",
);
assertEqual(
machineSessionWorkflowStatus.run.canonicalEventCount,
2,
"UI machine session workflow status canonical event count",
);
assertEqual(
uiDocument.defaultView.getMachineSessionStateReport().status.lastAction,
machineSessionStateReport.status.lastAction,

View File

@@ -5,6 +5,7 @@ import {
createMachineSessionStateSnapshot,
createMachineSessionStateReport,
createMachineSessionStateReportExport,
createMachineSessionWorkflowStatus,
} from "../../../runtime/ui/ini-panel/panel-state-summary.js";
const summary = createIniPanelStateSummary({
@@ -330,14 +331,63 @@ assert.deepEqual(
},
);
assert.deepEqual(
createMachineSessionWorkflowStatus({
badges: {
ini: "INI WASM: ready",
interp: "Interpreter WASM: ready",
opfs: "OPFS: ready",
},
fields: {
sessionSnapshot: "ui-machine-session/ui-machine-session.json",
sessionIni: "/work/session-machine.ini",
sessionGcode: "linuxcnc/gcode/ui-session.ngc",
runStatus: "ok",
runWorkflow: "save-session-snapshot",
},
run: {
runStatus: "ok",
canonicalEventCount: 2,
motionSnapshotCount: 2,
},
lastAction: "run-gcode",
error: null,
}),
{
readiness: {
ini: "INI WASM: ready",
interp: "Interpreter WASM: ready",
opfs: "OPFS: ready",
},
lastAction: "run-gcode",
error: null,
session: {
snapshotLabel: "ui-machine-session/ui-machine-session.json",
workflow: "save-session-snapshot",
ini: "/work/session-machine.ini",
parameters: null,
toolTable: null,
gcode: "linuxcnc/gcode/ui-session.ngc",
},
run: {
status: "ok",
canonicalEventCount: 2,
motionSnapshotCount: 2,
iniWasmPath: null,
},
},
);
assert.deepEqual(
{
getMachineSessionStateReport: typeof globalThis.window?.linuxCncIniPanelApi?.getMachineSessionStateReport,
getMachineSessionStateReportExport: typeof globalThis.window?.linuxCncIniPanelApi?.getMachineSessionStateReportExport,
getMachineSessionWorkflowStatus: typeof globalThis.window?.linuxCncIniPanelApi?.getMachineSessionWorkflowStatus,
},
{
getMachineSessionStateReport: "undefined",
getMachineSessionStateReportExport: "undefined",
getMachineSessionWorkflowStatus: "undefined",
},
);