164 lines
5.3 KiB
Markdown
164 lines
5.3 KiB
Markdown
# UI Session Summary Helpers
|
|
|
|
## Purpose
|
|
|
|
`runtime/ui/ini-panel/session-summary.js` contains small host-boundary helpers
|
|
for summarizing machine session snapshot state.
|
|
`runtime/ui/ini-panel/session-load-summary.js` contains the matching helpers
|
|
for machine-session load state. These helpers are pure so browser UI panels,
|
|
SDK-facing wrappers, and Node smoke tests can share the same data shape without
|
|
parsing log text.
|
|
`runtime/ui/ini-panel/session-workflow.js` contains the reusable UI workflows
|
|
for saving, restoring, and restore-loading a machine session snapshot as
|
|
host-boundary operations.
|
|
|
|
The helpers do not implement CNC behavior. G-code execution, canonical events,
|
|
tool handling, parameters, kinematics, and planner behavior remain owned by the
|
|
vendored LinuxCNC runtime.
|
|
|
|
## `createSessionSnapshotSummary(snapshot, fallbackLabel)`
|
|
|
|
`snapshot` is the saved machine session snapshot loaded by the UI.
|
|
`fallbackLabel` is the UI-selected label to prefer when present.
|
|
|
|
The returned summary has this shape:
|
|
|
|
```js
|
|
{
|
|
snapshotLabel: "ui-machine-session/ui-machine-session.json",
|
|
workflow: "save-session-snapshot",
|
|
defaultGcodeOpfsPath: "linuxcnc/gcode/ui-session.ngc",
|
|
iniOpfsPath: "linuxcnc/machines/xyzab-tdr/machine.ini",
|
|
parameterOpfsPath: "linuxcnc/machines/xyzab-tdr/linuxcnc.var",
|
|
toolTableOpfsPath: "linuxcnc/machines/xyzab-tdr/tool.tbl",
|
|
gcodeOpfsPath: "linuxcnc/gcode/ui-session.ngc"
|
|
}
|
|
```
|
|
|
|
## `createMachineSessionLoadSummary(session)`
|
|
|
|
`session` is the loaded interpreter/session bridge result. The helper extracts
|
|
the OPFS and WASM path mapping plus the captured parameter/tool-table result
|
|
texts.
|
|
|
|
The returned summary has this shape:
|
|
|
|
```js
|
|
{
|
|
iniOpfsPath: "linuxcnc/machines/xyzab-tdr/machine.ini",
|
|
iniWasmPath: "/work/session-machine.ini",
|
|
parameterOpfsPath: "linuxcnc/machines/xyzab-tdr/linuxcnc.var",
|
|
parameterWasmPath: "/work/session-linuxcnc.var",
|
|
parameterResult: "restore_parameters=0",
|
|
toolTableOpfsPath: "linuxcnc/machines/xyzab-tdr/tool.tbl",
|
|
toolTableWasmPath: "/work/session-tool.tbl",
|
|
toolTableResult: "tooldata_load=0"
|
|
}
|
|
```
|
|
|
|
## `saveMachineSessionSnapshotWorkflow(input)`
|
|
|
|
The workflow writes the current INI/tool/parameter text files, writes the
|
|
default G-code program, saves the machine session snapshot, and returns the
|
|
snapshot summary, field state, and log lines for UI consumers.
|
|
|
|
The persistence functions are injected by the caller:
|
|
|
|
```js
|
|
{
|
|
saveMachineTextFiles,
|
|
saveGcodeProgram,
|
|
saveMachineSessionSnapshot
|
|
}
|
|
```
|
|
|
|
## `restoreMachineSessionSnapshotWorkflow(input)`
|
|
|
|
The workflow loads the machine session snapshot, loads the persisted machine
|
|
text files so the editor can be restored, and optionally loads the machine
|
|
session into the interpreter WASM filesystem.
|
|
|
|
When `loadSession` is omitted, the returned `fields` contain the OPFS snapshot
|
|
paths. When `loadSession` is supplied, the returned `fields` contain the loaded
|
|
WASM paths for INI/parameter/tool-table files and the snapshot G-code OPFS
|
|
path.
|
|
|
|
The returned object has this shape:
|
|
|
|
```js
|
|
{
|
|
snapshot: { ... },
|
|
editorIniText: "[EMC]\n...",
|
|
summary: { snapshotLabel: "...", workflow: "save-session-snapshot" },
|
|
fields: {
|
|
sessionIni: "/work/session-machine.ini",
|
|
sessionParameters: "/work/session-linuxcnc.var",
|
|
sessionToolTable: "/work/session-tool.tbl",
|
|
sessionGcode: "linuxcnc/gcode/ui-session.ngc",
|
|
sessionSnapshot: "ui-machine-session/ui-machine-session.json"
|
|
},
|
|
loadSummary: { iniWasmPath: "/work/session-machine.ini" },
|
|
loadedSession: { ... },
|
|
logLines: [
|
|
"Snapshot: ui-machine-session/ui-machine-session.json",
|
|
"Workflow: save-session-snapshot"
|
|
]
|
|
}
|
|
```
|
|
|
|
The returned object has this shape:
|
|
|
|
```js
|
|
{
|
|
snapshot: { ... },
|
|
summary: { snapshotLabel: "...", workflow: "save-session-snapshot" },
|
|
fields: {
|
|
sessionIni: "linuxcnc/machines/xyzab-tdr/machine.ini",
|
|
sessionParameters: "linuxcnc/machines/xyzab-tdr/linuxcnc.var",
|
|
sessionToolTable: "linuxcnc/machines/xyzab-tdr/tool.tbl",
|
|
sessionGcode: "linuxcnc/gcode/ui-session.ngc",
|
|
sessionSnapshot: "ui-machine-session/ui-machine-session.json"
|
|
},
|
|
logLines: [
|
|
"Snapshot: ui-machine-session/ui-machine-session.json",
|
|
"Workflow: save-session-snapshot"
|
|
]
|
|
}
|
|
```
|
|
|
|
## Log Helpers
|
|
|
|
- `sessionSnapshotSummaryLogLines(summary)` renders snapshot label, workflow,
|
|
and default G-code path.
|
|
- `sessionSnapshotMetadataLogLines(summary)` renders the metadata subset used in
|
|
save/restore log summaries.
|
|
- `machineSessionLoadLogLines(summary)` renders the interpreter/session
|
|
OPFS-to-WASM mapping and captured result lines.
|
|
- `sessionSnapshotSaveLogLines(summary)` renders the save-workflow snapshot
|
|
paths used by the INI panel.
|
|
- `sessionSnapshotRestoreLogLines(summary)` renders the restore-workflow
|
|
snapshot paths used by the INI panel.
|
|
|
|
## Boundary Rules
|
|
|
|
- Do not parse G-code text in these helpers.
|
|
- Do not infer tool, parameter, kinematics, planner, or modal semantics.
|
|
- Do not derive new CNC behavior from the load result strings.
|
|
- Keep new fields limited to host/runtime boundary facts already produced by the
|
|
LinuxCNC-owned runtime or UI staging layer.
|
|
|
|
## Validation
|
|
|
|
Run the focused Node smoke after changing these helpers:
|
|
|
|
```bash
|
|
wasm-port/tests/ui/node/verify_ini_panel_session_summary.sh
|
|
wasm-port/tests/ui/node/verify_ini_panel_session_workflow.sh
|
|
```
|
|
|
|
The aggregate UI Node smoke is:
|
|
|
|
```bash
|
|
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
|
```
|