推进 INI 面板 shell session handoff summary
This commit is contained in:
82
text12.txt
82
text12.txt
@@ -1926,3 +1926,85 @@ host_wasm_opfs_browser_smokes=ok
|
|||||||
helper(例如 `createIniPanelShellSessionHandoffSummary()`),把 readiness、target page、readonly
|
helper(例如 `createIniPanelShellSessionHandoffSummary()`),把 readiness、target page、readonly
|
||||||
status fields 与 persistence capabilities 压成外部 shell 可直接显示的一页摘要;仍保持只读,不新增
|
status fields 与 persistence capabilities 压成外部 shell 可直接显示的一页摘要;仍保持只读,不新增
|
||||||
控制按钮,不解析 G-code。
|
控制按钮,不解析 G-code。
|
||||||
|
|
||||||
|
二十四、2026-06-15 继续执行记录:INI panel shell session handoff summary helper
|
||||||
|
|
||||||
|
本轮按“第一原则:加快实质性推进”继续推进 OPFS/session persistence 相关外部 shell 接入能力,
|
||||||
|
新增只读 shell session handoff summary helper,把 readiness、target page、readonly status fields
|
||||||
|
与 persistence capabilities 压成外部 shell 可直接显示的一页摘要。
|
||||||
|
|
||||||
|
完成内容:
|
||||||
|
|
||||||
|
- `wasm-port/runtime/ui/ini-panel/ui-shell.js` 新增
|
||||||
|
`createIniPanelShellSessionHandoffSummary()`;
|
||||||
|
- summary 从 integration manifest、readiness 与 workflow plan 派生:
|
||||||
|
- `phase: "ready" | "blocked"`;
|
||||||
|
- `ready`;
|
||||||
|
- `targetPage`;
|
||||||
|
- `readiness.phase`;
|
||||||
|
- `readiness.missing`;
|
||||||
|
- `readiness.counts`;
|
||||||
|
- `readiness.apiNames`;
|
||||||
|
- `persistenceCapabilities`;
|
||||||
|
- `readonlyStatusFields`;
|
||||||
|
- `handoffMethods.loadSessionState`;
|
||||||
|
- `handoffMethods.readStatus`;
|
||||||
|
- `blockingReasons`;
|
||||||
|
- `createIniPanelShellViewModel()` 新增:
|
||||||
|
- `shellSessionHandoffSummary`;
|
||||||
|
- `createShellSessionHandoffSummary`;
|
||||||
|
- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖:
|
||||||
|
- ready handoff summary 完整 shape;
|
||||||
|
- blocked workflow plan 的 blocking reasons;
|
||||||
|
- persistence capabilities 与 readonly status fields 返回值不污染后续 summary;
|
||||||
|
- `verify_ini_panel_ui_shell.mjs` 覆盖 shell view-model 的 handoff summary;
|
||||||
|
- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 记录并校验 handoff summary helper;
|
||||||
|
- 未新增控制按钮;
|
||||||
|
- 未解析 G-code;
|
||||||
|
- 未解释 canonical events;
|
||||||
|
- 未访问 OPFS 或启动 browser/frame;
|
||||||
|
- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或
|
||||||
|
LinuxCNC-owned runtime semantics。
|
||||||
|
|
||||||
|
验证已通过:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git diff --check
|
||||||
|
wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.sh
|
||||||
|
wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh
|
||||||
|
wasm-port/tests/ui/node/verify_ini_panel_entry_docs.sh
|
||||||
|
wasm-port/tests/ui/node/verify_ui_node_smokes.sh
|
||||||
|
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_ini_panel_browser.sh
|
||||||
|
wasm-port/tools/verify_vendor_sync.sh
|
||||||
|
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
|
||||||
|
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
|
||||||
|
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
|
||||||
|
wasm-port/tests/host/verify_host_smokes.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
关键输出:
|
||||||
|
|
||||||
|
```text
|
||||||
|
ini_panel_shell_integration_manifest_node_smoke=ok
|
||||||
|
ini_panel_ui_shell_node_smoke=ok
|
||||||
|
ini_panel_entry_docs_node_smoke=ok
|
||||||
|
ui_node_smokes=ok
|
||||||
|
browser_ini_opfs_smoke=ok
|
||||||
|
browser_ini_control_page_smoke=ok
|
||||||
|
browser_ini_launch_smoke=ok
|
||||||
|
browser_ini_shell_integration_workflow_smoke=ok
|
||||||
|
vendor sync up to date
|
||||||
|
standalone CNC semantics guard complete
|
||||||
|
interp_wasm_node_smoke=ok
|
||||||
|
sim_configs_wasm_node_inventory_executed=28
|
||||||
|
sim_configs_wasm_node_inventory_passed=28
|
||||||
|
sim_configs_wasm_node_inventory_skipped=131
|
||||||
|
sim_configs_wasm_node_inventory_unexpected_fail=0
|
||||||
|
host_wasm_opfs_browser_smokes=ok
|
||||||
|
```
|
||||||
|
|
||||||
|
下一步建议:
|
||||||
|
|
||||||
|
继续推进 browser/UI workflow。下一批建议把 `shellSessionHandoffSummary` 暴露到 launch browser API
|
||||||
|
或 shell integration browser workflow smoke 中,让真实 browser 外部 shell 可以直接读取 summary
|
||||||
|
并与 readonly status handoff 结果交叉校验;仍保持只读,不新增控制按钮,不解析 G-code。
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import {
|
|||||||
createIniPanelShellIntegrationReadiness,
|
createIniPanelShellIntegrationReadiness,
|
||||||
createIniPanelShellIntegrationSchema,
|
createIniPanelShellIntegrationSchema,
|
||||||
createIniPanelShellIntegrationWorkflowPlan,
|
createIniPanelShellIntegrationWorkflowPlan,
|
||||||
|
createIniPanelShellSessionHandoffSummary,
|
||||||
createIniPanelShellViewModel,
|
createIniPanelShellViewModel,
|
||||||
getIniPanelEntryByHref,
|
getIniPanelEntryByHref,
|
||||||
getVisibleIniPanelEntries,
|
getVisibleIniPanelEntries,
|
||||||
@@ -129,6 +130,9 @@ Use `createIniPanelShellIntegrationWorkflowPlan()` when the outer shell needs a
|
|||||||
Node-testable read-only plan for the control-page target, required launch and
|
Node-testable read-only plan for the control-page target, required launch and
|
||||||
control-page API methods, readiness gate, and readonly status handoff fields
|
control-page API methods, readiness gate, and readonly status handoff fields
|
||||||
before opening a browser frame.
|
before opening a browser frame.
|
||||||
|
Use `createIniPanelShellSessionHandoffSummary()` when the outer shell needs one
|
||||||
|
read-only display summary of readiness, target page, persistence capabilities,
|
||||||
|
readonly status fields, handoff methods, and blocking reasons.
|
||||||
The browser workflow smoke
|
The browser workflow smoke
|
||||||
`tests/browser/ini_panel_shell_integration_workflow_smoke.html` verifies the
|
`tests/browser/ini_panel_shell_integration_workflow_smoke.html` verifies the
|
||||||
same external shell handoff: read integration manifest, pass readiness gate,
|
same external shell handoff: read integration manifest, pass readiness gate,
|
||||||
|
|||||||
@@ -380,9 +380,44 @@ export function createIniPanelShellIntegrationWorkflowPlan({
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function createIniPanelShellSessionHandoffSummary({
|
||||||
|
manifest = createIniPanelShellIntegrationManifest(),
|
||||||
|
readiness = createIniPanelShellIntegrationReadiness(manifest),
|
||||||
|
workflowPlan = createIniPanelShellIntegrationWorkflowPlan({ manifest, readiness }),
|
||||||
|
} = {}) {
|
||||||
|
const persistenceCapabilities = Array.isArray(manifest?.persistenceCapabilities)
|
||||||
|
? manifest.persistenceCapabilities.map(({ id, label, scope }) => ({ id, label, scope }))
|
||||||
|
: [];
|
||||||
|
const readonlyStatusFields = Array.isArray(workflowPlan?.readonlyStatusHandoff?.expectedStatusFields)
|
||||||
|
? [...workflowPlan.readonlyStatusHandoff.expectedStatusFields]
|
||||||
|
: [];
|
||||||
|
return {
|
||||||
|
phase: workflowPlan.ready ? "ready" : "blocked",
|
||||||
|
ready: Boolean(workflowPlan.ready),
|
||||||
|
targetPage: workflowPlan.targetPage,
|
||||||
|
readiness: {
|
||||||
|
phase: readiness.phase,
|
||||||
|
missing: [...readiness.missing],
|
||||||
|
counts: { ...readiness.counts },
|
||||||
|
apiNames: { ...readiness.apiNames },
|
||||||
|
},
|
||||||
|
persistenceCapabilities,
|
||||||
|
readonlyStatusFields,
|
||||||
|
handoffMethods: {
|
||||||
|
loadSessionState: workflowPlan.readonlyStatusHandoff.loadSessionStateMethod,
|
||||||
|
readStatus: workflowPlan.readonlyStatusHandoff.readStatusMethod,
|
||||||
|
},
|
||||||
|
blockingReasons: [...workflowPlan.missing],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) {
|
export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) {
|
||||||
const shellIntegrationManifest = createIniPanelShellIntegrationManifest(entries);
|
const shellIntegrationManifest = createIniPanelShellIntegrationManifest(entries);
|
||||||
const shellIntegrationReadiness = createIniPanelShellIntegrationReadiness(shellIntegrationManifest);
|
const shellIntegrationReadiness = createIniPanelShellIntegrationReadiness(shellIntegrationManifest);
|
||||||
|
const shellIntegrationWorkflowPlan = createIniPanelShellIntegrationWorkflowPlan({
|
||||||
|
manifest: shellIntegrationManifest,
|
||||||
|
readiness: shellIntegrationReadiness,
|
||||||
|
});
|
||||||
return {
|
return {
|
||||||
pages: entries.map(({ id, href, title }) => ({
|
pages: entries.map(({ id, href, title }) => ({
|
||||||
id,
|
id,
|
||||||
@@ -393,15 +428,18 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries
|
|||||||
shellIntegrationSchema: createIniPanelShellIntegrationSchema(),
|
shellIntegrationSchema: createIniPanelShellIntegrationSchema(),
|
||||||
shellIntegrationManifest,
|
shellIntegrationManifest,
|
||||||
shellIntegrationReadiness,
|
shellIntegrationReadiness,
|
||||||
shellIntegrationWorkflowPlan: createIniPanelShellIntegrationWorkflowPlan({
|
shellIntegrationWorkflowPlan,
|
||||||
|
shellSessionHandoffSummary: createIniPanelShellSessionHandoffSummary({
|
||||||
manifest: shellIntegrationManifest,
|
manifest: shellIntegrationManifest,
|
||||||
readiness: shellIntegrationReadiness,
|
readiness: shellIntegrationReadiness,
|
||||||
|
workflowPlan: shellIntegrationWorkflowPlan,
|
||||||
}),
|
}),
|
||||||
launchApiSchema: createIniPanelLaunchApiSchema(),
|
launchApiSchema: createIniPanelLaunchApiSchema(),
|
||||||
launchApiManifest: createIniPanelLaunchApiManifest(entries),
|
launchApiManifest: createIniPanelLaunchApiManifest(entries),
|
||||||
isSupportedShellIntegrationManifest: isSupportedIniPanelShellIntegrationManifest,
|
isSupportedShellIntegrationManifest: isSupportedIniPanelShellIntegrationManifest,
|
||||||
createShellIntegrationReadiness: createIniPanelShellIntegrationReadiness,
|
createShellIntegrationReadiness: createIniPanelShellIntegrationReadiness,
|
||||||
createShellIntegrationWorkflowPlan: createIniPanelShellIntegrationWorkflowPlan,
|
createShellIntegrationWorkflowPlan: createIniPanelShellIntegrationWorkflowPlan,
|
||||||
|
createShellSessionHandoffSummary: createIniPanelShellSessionHandoffSummary,
|
||||||
controlPage: {
|
controlPage: {
|
||||||
browserApiSchema: createControlPageBrowserApiSchema(),
|
browserApiSchema: createControlPageBrowserApiSchema(),
|
||||||
browserApiManifest: createControlPageBrowserApiManifest(),
|
browserApiManifest: createControlPageBrowserApiManifest(),
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import {
|
|||||||
createIniPanelShellIntegrationReadiness,
|
createIniPanelShellIntegrationReadiness,
|
||||||
createIniPanelShellIntegrationSchema,
|
createIniPanelShellIntegrationSchema,
|
||||||
createIniPanelShellIntegrationWorkflowPlan,
|
createIniPanelShellIntegrationWorkflowPlan,
|
||||||
|
createIniPanelShellSessionHandoffSummary,
|
||||||
createIniPanelShellViewModel,
|
createIniPanelShellViewModel,
|
||||||
createMachineSessionReadonlyStatus,
|
createMachineSessionReadonlyStatus,
|
||||||
createMachineSessionReadonlyStatusApiManifest,
|
createMachineSessionReadonlyStatusApiManifest,
|
||||||
@@ -65,6 +66,7 @@ const requiredShellExports = [
|
|||||||
"createIniPanelShellIntegrationReadiness",
|
"createIniPanelShellIntegrationReadiness",
|
||||||
"createIniPanelShellIntegrationSchema",
|
"createIniPanelShellIntegrationSchema",
|
||||||
"createIniPanelShellIntegrationWorkflowPlan",
|
"createIniPanelShellIntegrationWorkflowPlan",
|
||||||
|
"createIniPanelShellSessionHandoffSummary",
|
||||||
"createIniPanelShellViewModel",
|
"createIniPanelShellViewModel",
|
||||||
"getIniPanelEntryByHref",
|
"getIniPanelEntryByHref",
|
||||||
"getVisibleIniPanelEntries",
|
"getVisibleIniPanelEntries",
|
||||||
@@ -142,6 +144,14 @@ assert.deepEqual(
|
|||||||
readiness: createIniPanelShellViewModel().shellIntegrationReadiness,
|
readiness: createIniPanelShellViewModel().shellIntegrationReadiness,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
assert.deepEqual(
|
||||||
|
createIniPanelShellViewModel().shellSessionHandoffSummary,
|
||||||
|
createIniPanelShellSessionHandoffSummary({
|
||||||
|
manifest: createIniPanelShellViewModel().shellIntegrationManifest,
|
||||||
|
readiness: createIniPanelShellViewModel().shellIntegrationReadiness,
|
||||||
|
workflowPlan: createIniPanelShellViewModel().shellIntegrationWorkflowPlan,
|
||||||
|
}),
|
||||||
|
);
|
||||||
assert.equal(isSupportedIniPanelShellIntegrationManifest(createIniPanelShellViewModel().shellIntegrationManifest), true);
|
assert.equal(isSupportedIniPanelShellIntegrationManifest(createIniPanelShellViewModel().shellIntegrationManifest), true);
|
||||||
assert.deepEqual(createIniPanelShellViewModel().launchApiSchema, createIniPanelLaunchApiSchema());
|
assert.deepEqual(createIniPanelShellViewModel().launchApiSchema, createIniPanelLaunchApiSchema());
|
||||||
assert.deepEqual(createIniPanelShellViewModel().launchApiManifest, createIniPanelLaunchApiManifest());
|
assert.deepEqual(createIniPanelShellViewModel().launchApiManifest, createIniPanelLaunchApiManifest());
|
||||||
@@ -196,6 +206,7 @@ assert.match(shellText, /\bexport function createIniPanelShellIntegrationSchema\
|
|||||||
assert.match(shellText, /\bexport function createIniPanelShellIntegrationManifest\b/);
|
assert.match(shellText, /\bexport function createIniPanelShellIntegrationManifest\b/);
|
||||||
assert.match(shellText, /\bexport function createIniPanelShellIntegrationReadiness\b/);
|
assert.match(shellText, /\bexport function createIniPanelShellIntegrationReadiness\b/);
|
||||||
assert.match(shellText, /\bexport function createIniPanelShellIntegrationWorkflowPlan\b/);
|
assert.match(shellText, /\bexport function createIniPanelShellIntegrationWorkflowPlan\b/);
|
||||||
|
assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffSummary\b/);
|
||||||
assert.match(shellText, /\bexport function isSupportedIniPanelControlPageApiManifest\b/);
|
assert.match(shellText, /\bexport function isSupportedIniPanelControlPageApiManifest\b/);
|
||||||
assert.match(shellText, /\bexport function isSupportedIniPanelLaunchApiManifest\b/);
|
assert.match(shellText, /\bexport function isSupportedIniPanelLaunchApiManifest\b/);
|
||||||
assert.match(shellText, /\bexport function isSupportedIniPanelShellIntegrationManifest\b/);
|
assert.match(shellText, /\bexport function isSupportedIniPanelShellIntegrationManifest\b/);
|
||||||
@@ -228,6 +239,7 @@ assert.match(docText, /\bcreateIniPanelShellIntegrationManifest\b/);
|
|||||||
assert.match(docText, /\bcreateIniPanelShellIntegrationReadiness\b/);
|
assert.match(docText, /\bcreateIniPanelShellIntegrationReadiness\b/);
|
||||||
assert.match(docText, /\bcreateIniPanelShellIntegrationSchema\b/);
|
assert.match(docText, /\bcreateIniPanelShellIntegrationSchema\b/);
|
||||||
assert.match(docText, /\bcreateIniPanelShellIntegrationWorkflowPlan\b/);
|
assert.match(docText, /\bcreateIniPanelShellIntegrationWorkflowPlan\b/);
|
||||||
|
assert.match(docText, /\bcreateIniPanelShellSessionHandoffSummary\b/);
|
||||||
assert.match(docText, /\bisSupportedIniPanelControlPageApiManifest\b/);
|
assert.match(docText, /\bisSupportedIniPanelControlPageApiManifest\b/);
|
||||||
assert.match(docText, /\bisSupportedIniPanelLaunchApiManifest\b/);
|
assert.match(docText, /\bisSupportedIniPanelLaunchApiManifest\b/);
|
||||||
assert.match(docText, /\bisSupportedIniPanelShellIntegrationManifest\b/);
|
assert.match(docText, /\bisSupportedIniPanelShellIntegrationManifest\b/);
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import {
|
|||||||
createIniPanelShellIntegrationReadiness,
|
createIniPanelShellIntegrationReadiness,
|
||||||
createIniPanelShellIntegrationSchema,
|
createIniPanelShellIntegrationSchema,
|
||||||
createIniPanelShellIntegrationWorkflowPlan,
|
createIniPanelShellIntegrationWorkflowPlan,
|
||||||
|
createIniPanelShellSessionHandoffSummary,
|
||||||
getVisibleIniPanelEntries,
|
getVisibleIniPanelEntries,
|
||||||
isSupportedIniPanelShellIntegrationManifest,
|
isSupportedIniPanelShellIntegrationManifest,
|
||||||
} from "../../../runtime/ui/ini-panel/ui-shell.js";
|
} from "../../../runtime/ui/ini-panel/ui-shell.js";
|
||||||
@@ -28,6 +29,7 @@ const schema = createIniPanelShellIntegrationSchema();
|
|||||||
const manifest = createIniPanelShellIntegrationManifest();
|
const manifest = createIniPanelShellIntegrationManifest();
|
||||||
const readiness = createIniPanelShellIntegrationReadiness(manifest);
|
const readiness = createIniPanelShellIntegrationReadiness(manifest);
|
||||||
const workflowPlan = createIniPanelShellIntegrationWorkflowPlan({ manifest, readiness });
|
const workflowPlan = createIniPanelShellIntegrationWorkflowPlan({ manifest, readiness });
|
||||||
|
const handoffSummary = createIniPanelShellSessionHandoffSummary({ manifest, readiness, workflowPlan });
|
||||||
|
|
||||||
assert.deepEqual(schema, {
|
assert.deepEqual(schema, {
|
||||||
apiName: "ini-panel-shell-integration",
|
apiName: "ini-panel-shell-integration",
|
||||||
@@ -130,6 +132,63 @@ assert.deepEqual(workflowPlan, {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
assert.deepEqual(handoffSummary, {
|
||||||
|
phase: "ready",
|
||||||
|
ready: true,
|
||||||
|
targetPage: {
|
||||||
|
entryId: "control-view",
|
||||||
|
href: "./control-page.html",
|
||||||
|
},
|
||||||
|
readiness: {
|
||||||
|
phase: "ready",
|
||||||
|
missing: [],
|
||||||
|
counts: {
|
||||||
|
pages: 2,
|
||||||
|
launcherLinks: 2,
|
||||||
|
launchMethods: 8,
|
||||||
|
controlPageMethods: 11,
|
||||||
|
persistenceCapabilities: 3,
|
||||||
|
},
|
||||||
|
apiNames: {
|
||||||
|
integration: "ini-panel-shell-integration",
|
||||||
|
launch: "ini-panel-launch",
|
||||||
|
controlPage: "ini-panel-control-page",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
persistenceCapabilities: [
|
||||||
|
{
|
||||||
|
id: "machine-files",
|
||||||
|
label: "Machine text files",
|
||||||
|
scope: "opfs",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "session-snapshot",
|
||||||
|
label: "Machine session snapshot",
|
||||||
|
scope: "opfs",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "readonly-status",
|
||||||
|
label: "Read-only machine session status",
|
||||||
|
scope: "control-page",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
readonlyStatusFields: [
|
||||||
|
"stateBundle",
|
||||||
|
"workflowStatus",
|
||||||
|
"overview",
|
||||||
|
"controlView",
|
||||||
|
"report",
|
||||||
|
"runReadiness",
|
||||||
|
"run",
|
||||||
|
"session",
|
||||||
|
"status",
|
||||||
|
],
|
||||||
|
handoffMethods: {
|
||||||
|
loadSessionState: "loadControlPageSessionState",
|
||||||
|
readStatus: "readControlPageStatus",
|
||||||
|
},
|
||||||
|
blockingReasons: [],
|
||||||
|
});
|
||||||
const blockedManifest = {
|
const blockedManifest = {
|
||||||
...createIniPanelShellIntegrationManifest(),
|
...createIniPanelShellIntegrationManifest(),
|
||||||
compatibility: {
|
compatibility: {
|
||||||
@@ -168,6 +227,18 @@ assert.deepEqual(
|
|||||||
}).missing,
|
}).missing,
|
||||||
["launchCompatibility"],
|
["launchCompatibility"],
|
||||||
);
|
);
|
||||||
|
const blockedWorkflowPlan = createIniPanelShellIntegrationWorkflowPlan({
|
||||||
|
manifest: blockedManifest,
|
||||||
|
readiness: createIniPanelShellIntegrationReadiness(blockedManifest),
|
||||||
|
});
|
||||||
|
assert.deepEqual(
|
||||||
|
createIniPanelShellSessionHandoffSummary({
|
||||||
|
manifest: blockedManifest,
|
||||||
|
readiness: createIniPanelShellIntegrationReadiness(blockedManifest),
|
||||||
|
workflowPlan: blockedWorkflowPlan,
|
||||||
|
}).blockingReasons,
|
||||||
|
["launchCompatibility"],
|
||||||
|
);
|
||||||
const missingTargetPlan = createIniPanelShellIntegrationWorkflowPlan({
|
const missingTargetPlan = createIniPanelShellIntegrationWorkflowPlan({
|
||||||
manifest,
|
manifest,
|
||||||
controlEntryId: "missing-entry",
|
controlEntryId: "missing-entry",
|
||||||
@@ -189,6 +260,10 @@ assert.equal(missingControlMethodPlan.ready, false);
|
|||||||
assert.deepEqual(missingControlMethodPlan.missing, [
|
assert.deepEqual(missingControlMethodPlan.missing, [
|
||||||
"controlPageApi.loadControlPageSessionState",
|
"controlPageApi.loadControlPageSessionState",
|
||||||
]);
|
]);
|
||||||
|
handoffSummary.persistenceCapabilities[0].label = "changed";
|
||||||
|
handoffSummary.readonlyStatusFields.push("changedField");
|
||||||
|
assert.equal(createIniPanelShellSessionHandoffSummary().persistenceCapabilities[0].label, "Machine text files");
|
||||||
|
assert.equal(createIniPanelShellSessionHandoffSummary().readonlyStatusFields.includes("changedField"), false);
|
||||||
const malformedReadiness = createIniPanelShellIntegrationReadiness({
|
const malformedReadiness = createIniPanelShellIntegrationReadiness({
|
||||||
apiName: "other",
|
apiName: "other",
|
||||||
});
|
});
|
||||||
@@ -262,6 +337,7 @@ assert.match(shellText, /\bexport function createIniPanelShellIntegrationSchema\
|
|||||||
assert.match(shellText, /\bexport function createIniPanelShellIntegrationManifest\b/);
|
assert.match(shellText, /\bexport function createIniPanelShellIntegrationManifest\b/);
|
||||||
assert.match(shellText, /\bexport function createIniPanelShellIntegrationReadiness\b/);
|
assert.match(shellText, /\bexport function createIniPanelShellIntegrationReadiness\b/);
|
||||||
assert.match(shellText, /\bexport function createIniPanelShellIntegrationWorkflowPlan\b/);
|
assert.match(shellText, /\bexport function createIniPanelShellIntegrationWorkflowPlan\b/);
|
||||||
|
assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffSummary\b/);
|
||||||
assert.match(shellText, /\bexport function isSupportedIniPanelShellIntegrationManifest\b/);
|
assert.match(shellText, /\bexport function isSupportedIniPanelShellIntegrationManifest\b/);
|
||||||
assert.match(launchText, /\bgetShellIntegrationSchema\b/);
|
assert.match(launchText, /\bgetShellIntegrationSchema\b/);
|
||||||
assert.match(launchText, /\bgetShellIntegrationManifest\b/);
|
assert.match(launchText, /\bgetShellIntegrationManifest\b/);
|
||||||
@@ -269,6 +345,7 @@ assert.match(launchText, /\bgetShellIntegrationReadiness\b/);
|
|||||||
assert.match(docText, /\bcreateIniPanelShellIntegrationManifest\b/);
|
assert.match(docText, /\bcreateIniPanelShellIntegrationManifest\b/);
|
||||||
assert.match(docText, /\bcreateIniPanelShellIntegrationReadiness\b/);
|
assert.match(docText, /\bcreateIniPanelShellIntegrationReadiness\b/);
|
||||||
assert.match(docText, /\bcreateIniPanelShellIntegrationWorkflowPlan\b/);
|
assert.match(docText, /\bcreateIniPanelShellIntegrationWorkflowPlan\b/);
|
||||||
|
assert.match(docText, /\bcreateIniPanelShellSessionHandoffSummary\b/);
|
||||||
assert.match(docText, /\bisSupportedIniPanelShellIntegrationManifest\b/);
|
assert.match(docText, /\bisSupportedIniPanelShellIntegrationManifest\b/);
|
||||||
assert.doesNotMatch(shellText, /\bparseGcode\b|\bcanonicalEvents\b|\btoolTable\b|\bplanner\b/);
|
assert.doesNotMatch(shellText, /\bparseGcode\b|\bcanonicalEvents\b|\btoolTable\b|\bplanner\b/);
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import {
|
|||||||
createIniPanelShellIntegrationReadiness,
|
createIniPanelShellIntegrationReadiness,
|
||||||
createIniPanelShellIntegrationSchema,
|
createIniPanelShellIntegrationSchema,
|
||||||
createIniPanelShellIntegrationWorkflowPlan,
|
createIniPanelShellIntegrationWorkflowPlan,
|
||||||
|
createIniPanelShellSessionHandoffSummary,
|
||||||
createIniPanelShellViewModel,
|
createIniPanelShellViewModel,
|
||||||
createMachineSessionReadonlyStatus,
|
createMachineSessionReadonlyStatus,
|
||||||
createMachineSessionReadonlyStatusApiManifest,
|
createMachineSessionReadonlyStatusApiManifest,
|
||||||
@@ -66,6 +67,7 @@ assert.equal(typeof createIniPanelShellIntegrationManifest, "function");
|
|||||||
assert.equal(typeof createIniPanelShellIntegrationReadiness, "function");
|
assert.equal(typeof createIniPanelShellIntegrationReadiness, "function");
|
||||||
assert.equal(typeof createIniPanelShellIntegrationSchema, "function");
|
assert.equal(typeof createIniPanelShellIntegrationSchema, "function");
|
||||||
assert.equal(typeof createIniPanelShellIntegrationWorkflowPlan, "function");
|
assert.equal(typeof createIniPanelShellIntegrationWorkflowPlan, "function");
|
||||||
|
assert.equal(typeof createIniPanelShellSessionHandoffSummary, "function");
|
||||||
assert.equal(typeof loadMachineSessionForControlPageWorkflow, "function");
|
assert.equal(typeof loadMachineSessionForControlPageWorkflow, "function");
|
||||||
assert.equal(typeof readMachineSessionReadonlyStatus, "function");
|
assert.equal(typeof readMachineSessionReadonlyStatus, "function");
|
||||||
assert.equal(typeof refreshMachineSessionControlPage, "function");
|
assert.equal(typeof refreshMachineSessionControlPage, "function");
|
||||||
@@ -122,6 +124,14 @@ assert.deepEqual(
|
|||||||
readiness: shellViewModel.shellIntegrationReadiness,
|
readiness: shellViewModel.shellIntegrationReadiness,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
assert.deepEqual(
|
||||||
|
shellViewModel.shellSessionHandoffSummary,
|
||||||
|
createIniPanelShellSessionHandoffSummary({
|
||||||
|
manifest: shellViewModel.shellIntegrationManifest,
|
||||||
|
readiness: shellViewModel.shellIntegrationReadiness,
|
||||||
|
workflowPlan: shellViewModel.shellIntegrationWorkflowPlan,
|
||||||
|
}),
|
||||||
|
);
|
||||||
assert.equal(
|
assert.equal(
|
||||||
isSupportedIniPanelShellIntegrationManifest(shellViewModel.shellIntegrationManifest),
|
isSupportedIniPanelShellIntegrationManifest(shellViewModel.shellIntegrationManifest),
|
||||||
true,
|
true,
|
||||||
@@ -154,6 +164,7 @@ assert.equal(shellViewModel.controlPage.createController, createMachineSessionCo
|
|||||||
assert.equal(shellViewModel.isSupportedShellIntegrationManifest, isSupportedIniPanelShellIntegrationManifest);
|
assert.equal(shellViewModel.isSupportedShellIntegrationManifest, isSupportedIniPanelShellIntegrationManifest);
|
||||||
assert.equal(shellViewModel.createShellIntegrationReadiness, createIniPanelShellIntegrationReadiness);
|
assert.equal(shellViewModel.createShellIntegrationReadiness, createIniPanelShellIntegrationReadiness);
|
||||||
assert.equal(shellViewModel.createShellIntegrationWorkflowPlan, createIniPanelShellIntegrationWorkflowPlan);
|
assert.equal(shellViewModel.createShellIntegrationWorkflowPlan, createIniPanelShellIntegrationWorkflowPlan);
|
||||||
|
assert.equal(shellViewModel.createShellSessionHandoffSummary, createIniPanelShellSessionHandoffSummary);
|
||||||
assert.deepEqual(shellViewModel.controlPage.contract, createIniPanelShellControlPageContract());
|
assert.deepEqual(shellViewModel.controlPage.contract, createIniPanelShellControlPageContract());
|
||||||
assert.equal(shellViewModel.controlPage.isSupportedBrowserApiManifest, isSupportedIniPanelControlPageApiManifest);
|
assert.equal(shellViewModel.controlPage.isSupportedBrowserApiManifest, isSupportedIniPanelControlPageApiManifest);
|
||||||
assert.equal(shellViewModel.controlPage.loadSessionState, loadMachineSessionForControlPageWorkflow);
|
assert.equal(shellViewModel.controlPage.loadSessionState, loadMachineSessionForControlPageWorkflow);
|
||||||
|
|||||||
Reference in New Issue
Block a user