diff --git a/text13.txt b/text13.txt index 2f8ec15..94df51b 100644 --- a/text13.txt +++ b/text13.txt @@ -1311,3 +1311,91 @@ host_wasm_opfs_browser_smokes=ok `createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel()` 或等价 helper,把 embedding report 压成稳定 `title/statusText/detailText/rows`,供 launch 页面、workflow overview 页面或外部 shell 直接渲染该 report;仍保持只读,不新增控制按钮,不解析 G-code。 + +十二、2026-06-15 继续执行记录:INI panel workflow overview embedding display view-model + +本轮按 `text13.txt` 执行,不扩展 `text12.txt`。继续推进 browser/UI workflow,新增只读 +workflow-overview embedding display view-model,把 embedding report 压成稳定 +`title/statusText/detailText/rows`,便于 launch 页面、workflow overview 页面和外部 shell +直接渲染 report。 + +完成内容: + +- `ui-shell.js` 新增 `createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel()`; +- display view-model 输出: + - `phase: "ready" | "blocked"`; + - `title: "Workflow overview embedding"`; + - `statusText: "Ready" | "Blocked"`; + - `detailText`; + - `rows`; +- `createIniPanelLaunchApiManifest().methods` 新增 + `getWorkflowOverviewEmbeddingDisplayViewModel`; +- `launch.html` 的 `window.linuxCncIniPanelLaunchApi` 新增真实 browser 入口 + `getWorkflowOverviewEmbeddingDisplayViewModel()`; +- `workflow-overview.html` 的 `window.linuxCncIniPanelWorkflowOverviewApi` 新增 + `getWorkflowOverviewEmbeddingDisplayViewModel()`; +- `verify_ini_panel_ui_shell.mjs` 覆盖 display view-model 的 blocked shape 与 view-model helper + 聚合关系; +- `verify_ini_panel_launch_api_manifest.mjs` 覆盖 launch manifest 与 launch 页面真实 API; +- `verify_ini_panel_shell_integration_manifest.mjs` 覆盖 helper export、默认 display view-model、 + launch method count 与文档记录; +- `verify_ini_panel_entry_docs.mjs` 与 `docs/panel-entry.md` 同步记录新 helper/API; +- `ini_panel_workflow_overview_smoke.html` 校验 workflow overview iframe 自身 display view-model API; +- `ini_panel_launch_smoke.html` 校验真实 launch iframe 读取真实 workflow overview iframe 的 + embedding display view-model; +- `ini_panel_shell_integration_workflow_smoke.html` 校验外部 shell workflow 读取同一 display + view-model; +- 未新增控制按钮; +- 未执行 action-plan; +- 未解析 G-code; +- 未解释 canonical events; +- 未新增 JS CNC 语义; +- 未改变 OPFS/session persistence、LinuxCNC interpreter、tool、parameter、planner 或 + LinuxCNC-owned runtime semantics。 + +验证已通过: + +```bash +git diff --check +wasm-port/tests/ui/node/verify_ini_panel_ui_shell.sh +wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.sh +wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.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_ui_shell_node_smoke=ok +ini_panel_launch_api_manifest_node_smoke=ok +ini_panel_shell_integration_manifest_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_workflow_overview_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。下一批建议新增只读 +`createIniPanelShellWorkflowOverviewEmbeddingRenderState()` 或等价 helper,把 embedding display +view-model 压成稳定 `statusLine/dataset/rows`,供 launch 页面或外部 shell 用同一 DOM renderer +显示 overview embedding report;仍保持只读,不新增控制按钮,不解析 G-code。 diff --git a/wasm-port/docs/panel-entry.md b/wasm-port/docs/panel-entry.md index 0bf17d2..a7db3bb 100644 --- a/wasm-port/docs/panel-entry.md +++ b/wasm-port/docs/panel-entry.md @@ -42,6 +42,7 @@ import { createIniPanelShellWorkflowOverviewContract, createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -310,7 +311,13 @@ shell needs display-ready diagnostics for overview API readiness, missing methods, embedding readiness, mount phase, render row count, and embedding errors. The workflow overview page also exposes `linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingReport()` for -the same report shape. +the same report shape. Use +`createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel()` or +`linuxCncIniPanelLaunchApi.getWorkflowOverviewEmbeddingDisplayViewModel()` when +an outer shell needs that report compressed into stable `title`, `statusText`, +`detailText`, and read-only label/value rows for direct rendering. The workflow +overview page also exposes +`linuxCncIniPanelWorkflowOverviewApi.getWorkflowOverviewEmbeddingDisplayViewModel()`. Use `renderIniPanelShellSessionHandoffMountState()` or `linuxCncIniPanelLaunchApi.renderShellSessionHandoffMountState()` when an outer diff --git a/wasm-port/runtime/ui/ini-panel/launch.html b/wasm-port/runtime/ui/ini-panel/launch.html index a293862..857c0f9 100644 --- a/wasm-port/runtime/ui/ini-panel/launch.html +++ b/wasm-port/runtime/ui/ini-panel/launch.html @@ -282,6 +282,9 @@ getWorkflowOverviewEmbeddingReport: (embeddingResult, contract) => ( shellViewModel.createWorkflowOverviewEmbeddingReport(embeddingResult, contract) ), + getWorkflowOverviewEmbeddingDisplayViewModel: (report) => ( + shellViewModel.createWorkflowOverviewEmbeddingDisplayViewModel(report) + ), isSupportedShellSessionHandoffPackage: shellViewModel.isSupportedShellSessionHandoffPackage, getLauncherLinks: () => shellViewModel.launcherLinks, getControlPageApiMethods: () => shellViewModel.controlPage.browserApiMethods, diff --git a/wasm-port/runtime/ui/ini-panel/ui-shell.js b/wasm-port/runtime/ui/ini-panel/ui-shell.js index be13cd7..ddee9ac 100644 --- a/wasm-port/runtime/ui/ini-panel/ui-shell.js +++ b/wasm-port/runtime/ui/ini-panel/ui-shell.js @@ -160,6 +160,7 @@ export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntr "getWorkflowOverviewReadiness", "mountWorkflowOverviewEmbedding", "getWorkflowOverviewEmbeddingReport", + "getWorkflowOverviewEmbeddingDisplayViewModel", "isSupportedShellSessionHandoffPackage", "getLauncherLinks", "getControlPageApiMethods", @@ -1888,6 +1889,26 @@ export function createIniPanelShellWorkflowOverviewEmbeddingReport( }; } +export function createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel( + report = createIniPanelShellWorkflowOverviewEmbeddingReport(), +) { + const blockingReasons = Array.isArray(report?.blockingReasons) ? report.blockingReasons : []; + const rows = Array.isArray(report?.rows) + ? report.rows.map(({ id, label, value }) => ({ + id, + label, + value: value == null ? "" : String(value), + })) + : []; + return { + phase: report?.phase === "ready" ? "ready" : "blocked", + title: "Workflow overview embedding", + statusText: report?.ready ? "Ready" : "Blocked", + detailText: blockingReasons.length === 0 ? "No blocking reasons" : blockingReasons.join(", "), + rows, + }; +} + export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) { const shellIntegrationManifest = createIniPanelShellIntegrationManifest(entries); const shellIntegrationReadiness = createIniPanelShellIntegrationReadiness(shellIntegrationManifest); @@ -2047,6 +2068,7 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries createWorkflowOverviewReadiness: createIniPanelShellWorkflowOverviewReadiness, mountWorkflowOverviewEmbedding: mountIniPanelShellWorkflowOverviewEmbedding, createWorkflowOverviewEmbeddingReport: createIniPanelShellWorkflowOverviewEmbeddingReport, + createWorkflowOverviewEmbeddingDisplayViewModel: createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, isSupportedShellSessionHandoffPackage: isSupportedIniPanelShellSessionHandoffPackage, controlPage: { browserApiSchema: createControlPageBrowserApiSchema(), diff --git a/wasm-port/runtime/ui/ini-panel/workflow-overview.html b/wasm-port/runtime/ui/ini-panel/workflow-overview.html index ad131d2..ca4f9ef 100644 --- a/wasm-port/runtime/ui/ini-panel/workflow-overview.html +++ b/wasm-port/runtime/ui/ini-panel/workflow-overview.html @@ -90,6 +90,7 @@ createIniPanelShellWorkflowOverviewContract, createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -135,6 +136,9 @@ getWorkflowOverviewEmbeddingReport: (embeddingResult, contract) => ( createIniPanelShellWorkflowOverviewEmbeddingReport(embeddingResult, contract) ), + getWorkflowOverviewEmbeddingDisplayViewModel: (report) => ( + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel(report) + ), }; diff --git a/wasm-port/tests/browser/ini_panel_launch_smoke.html b/wasm-port/tests/browser/ini_panel_launch_smoke.html index 835fef8..12173d4 100644 --- a/wasm-port/tests/browser/ini_panel_launch_smoke.html +++ b/wasm-port/tests/browser/ini_panel_launch_smoke.html @@ -104,6 +104,7 @@ !launchApi?.getWorkflowOverviewReadiness || !launchApi?.mountWorkflowOverviewEmbedding || !launchApi?.getWorkflowOverviewEmbeddingReport || + !launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel || !launchApi?.isSupportedShellSessionHandoffPackage || !launchApi?.getLauncherLinks || !launchApi?.getControlPageApiMethods @@ -629,7 +630,8 @@ !workflowOverviewApi?.getWorkflowOverviewContract || !workflowOverviewApi?.getWorkflowOverviewReadinessFromApi || !workflowOverviewApi?.mountWorkflowOverviewEmbedding || - !workflowOverviewApi?.getWorkflowOverviewEmbeddingReport + !workflowOverviewApi?.getWorkflowOverviewEmbeddingReport || + !workflowOverviewApi?.getWorkflowOverviewEmbeddingDisplayViewModel ) { throw new Error("workflow overview API namespace did not expose shell helpers"); } @@ -642,6 +644,9 @@ const workflowOverviewEmbeddingReport = launchApi.getWorkflowOverviewEmbeddingReport( workflowOverviewEmbedding, ); + const workflowOverviewEmbeddingDisplay = launchApi.getWorkflowOverviewEmbeddingDisplayViewModel( + workflowOverviewEmbeddingReport, + ); assertEqual(workflowOverviewApi.getWorkflowOverviewContract().pageHref, "./workflow-overview.html", "workflow overview page contract"); assertEqual(workflowOverviewReadiness.ready, true, "workflow overview readiness"); assertEqual(workflowOverviewReadiness.missing.join(","), "", "workflow overview readiness missing"); @@ -657,10 +662,15 @@ assertEqual(workflowOverviewEmbeddingReport.missingMethods.join(","), "", "workflow overview embedding report missing methods"); assertEqual(workflowOverviewEmbeddingReport.renderRowCount, 5, "workflow overview embedding report row count"); assertEqual(workflowOverviewEmbeddingReport.rows.length, 6, "workflow overview embedding report rows"); + assertEqual(workflowOverviewEmbeddingDisplay.title, "Workflow overview embedding", "workflow overview embedding display title"); + assertEqual(workflowOverviewEmbeddingDisplay.statusText, "Blocked", "workflow overview embedding display status"); + assertEqual(workflowOverviewEmbeddingDisplay.rows.length, 6, "workflow overview embedding display rows"); assertEqual( - workflowOverviewApi.getWorkflowOverviewEmbeddingReport(workflowOverviewEmbedding).renderRowCount, - workflowOverviewEmbeddingReport.renderRowCount, - "workflow overview self embedding report", + workflowOverviewApi.getWorkflowOverviewEmbeddingDisplayViewModel( + workflowOverviewApi.getWorkflowOverviewEmbeddingReport(workflowOverviewEmbedding), + ).rows.length, + workflowOverviewEmbeddingDisplay.rows.length, + "workflow overview self embedding display", ); status.textContent = "browser_ini_launch_smoke=ok"; console.log("browser_ini_launch_smoke=ok"); diff --git a/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html b/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html index e36890d..e29a90e 100644 --- a/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html +++ b/wasm-port/tests/browser/ini_panel_shell_integration_workflow_smoke.html @@ -106,6 +106,7 @@ TOOL_TABLE = browser-shell-tool.tbl !launchApi?.getWorkflowOverviewReadiness || !launchApi?.mountWorkflowOverviewEmbedding || !launchApi?.getWorkflowOverviewEmbeddingReport || + !launchApi?.getWorkflowOverviewEmbeddingDisplayViewModel || !launchApi?.isSupportedShellSessionHandoffPackage ) { throw new Error("launch API namespace did not expose shell integration helpers"); @@ -292,6 +293,9 @@ TOOL_TABLE = browser-shell-tool.tbl const workflowOverviewEmbeddingReport = launchApi.getWorkflowOverviewEmbeddingReport( workflowOverviewEmbedding, ); + const workflowOverviewEmbeddingDisplay = launchApi.getWorkflowOverviewEmbeddingDisplayViewModel( + workflowOverviewEmbeddingReport, + ); assertEqual(workflowOverviewReadiness.ready, true, "shell workflow overview iframe readiness"); assertEqual(workflowOverviewReadiness.missing.join(","), "", "shell workflow overview iframe missing methods"); assertEqual(workflowOverviewEmbedding.apiName, "ini-panel-shell-workflow-overview-embedding", "shell workflow overview embedding API"); @@ -302,6 +306,8 @@ TOOL_TABLE = browser-shell-tool.tbl assertEqual(workflowOverviewEmbeddingReport.rows.length, 6, "shell workflow overview embedding report rows"); assertEqual(workflowOverviewEmbeddingReport.renderRowCount, 5, "shell workflow overview embedding report row count"); assertEqual(workflowOverviewEmbeddingReport.error, null, "shell workflow overview embedding report error"); + assertEqual(workflowOverviewEmbeddingDisplay.statusText, "Blocked", "shell workflow overview embedding display status"); + assertEqual(workflowOverviewEmbeddingDisplay.rows.length, 6, "shell workflow overview embedding display rows"); const controlDoc = await loadFrame(`../../runtime/ui/ini-panel/${controlTarget.href.slice(2)}`); const controlPageApi = controlDoc.defaultView.linuxCncIniPanelControlPageApi; diff --git a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html index 94a697c..cb83933 100644 --- a/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html +++ b/wasm-port/tests/browser/ini_panel_workflow_overview_smoke.html @@ -36,7 +36,8 @@ !workflowApi?.renderWorkflowOverview || !workflowApi?.mountWorkflowOverview || !workflowApi?.createWorkflowOverviewRenderState || - !workflowApi?.getWorkflowOverviewEmbeddingReport + !workflowApi?.getWorkflowOverviewEmbeddingReport || + !workflowApi?.getWorkflowOverviewEmbeddingDisplayViewModel ) { throw new Error("workflow overview API namespace did not expose overview helpers"); } @@ -60,6 +61,7 @@ mountResult, error: null, }); + const embeddingDisplay = workflowApi.getWorkflowOverviewEmbeddingDisplayViewModel(embeddingReport); assertEqual(summary.summaryVersion, 1, "workflow overview summary version"); assertEqual(displayViewModel.title, "Shell handoff workflow", "workflow overview display title"); @@ -75,6 +77,9 @@ assertEqual(embeddingReport.ready, false, "workflow overview embedding report readiness"); assertEqual(embeddingReport.renderRowCount, 5, "workflow overview embedding report row count"); assertEqual(embeddingReport.rows.length, 6, "workflow overview embedding report rows"); + assertEqual(embeddingDisplay.title, "Workflow overview embedding", "workflow overview embedding display title"); + assertEqual(embeddingDisplay.statusText, "Blocked", "workflow overview embedding display status"); + assertEqual(embeddingDisplay.rows.length, 6, "workflow overview embedding display rows"); assertEqual( workflowDoc.querySelector("[data-handoff-workflow]").dataset.handoffScope, "workflow", diff --git a/wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs b/wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs index 6e45516..d7fa07b 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_entry_docs.mjs @@ -40,6 +40,7 @@ import { createIniPanelShellWorkflowOverviewContract, createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -122,6 +123,7 @@ const requiredShellExports = [ "createIniPanelShellWorkflowOverviewContract", "createIniPanelShellWorkflowOverviewReadiness", "createIniPanelShellWorkflowOverviewEmbeddingReport", + "createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel", "mountIniPanelShellWorkflowOverviewEmbedding", "renderIniPanelShellSessionHandoffWorkflowState", "mountIniPanelShellSessionHandoffWorkflow", @@ -423,6 +425,7 @@ assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffSnap assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffSummary\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffSummarySchema\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingReport\b/); +assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel\b/); assert.match(shellText, /\bexport function isSupportedIniPanelControlPageApiManifest\b/); assert.match(shellText, /\bexport function isSupportedIniPanelLaunchApiManifest\b/); assert.match(shellText, /\bexport function isSupportedIniPanelShellIntegrationManifest\b/); @@ -452,6 +455,7 @@ assert.match(launchText, /\bgetShellSessionHandoffPackageSchema\b/); assert.match(launchText, /\bgetShellSessionHandoffPackage\b/); assert.match(launchText, /\bgetShellSessionHandoffPackageReport\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingReport\b/); +assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDisplayViewModel\b/); assert.match(launchText, /\bisSupportedShellSessionHandoffPackage\b/); assert.match(launchText, /\bdata-handoff-shell\b/); assert.match(launchText, /\bdata-handoff-status\b/); @@ -486,6 +490,7 @@ assert.match(docText, /\bcreateIniPanelShellSessionHandoffSnapshot\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffSummary\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffSummarySchema\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingReport\b/); +assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel\b/); assert.match(docText, /\bisSupportedIniPanelControlPageApiManifest\b/); assert.match(docText, /\bisSupportedIniPanelLaunchApiManifest\b/); assert.match(docText, /\bisSupportedIniPanelShellIntegrationManifest\b/); @@ -510,6 +515,7 @@ assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getShellSessionHandoffPackag assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getShellSessionHandoffPackage\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getShellSessionHandoffPackageReport\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingReport\b/); +assert.match(docText, /\blinuxCncIniPanelLaunchApi\.getWorkflowOverviewEmbeddingDisplayViewModel\b/); assert.match(docText, /\blinuxCncIniPanelLaunchApi\.isSupportedShellSessionHandoffPackage\b/); assert.match(docText, /\bdata-handoff-shell\b/); assert.match(docText, /\bdata-handoff-status\b/); diff --git a/wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs b/wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs index 2bc4a5c..e8e6527 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_launch_api_manifest.mjs @@ -80,6 +80,7 @@ assert.deepEqual(manifest, { "getWorkflowOverviewReadiness", "mountWorkflowOverviewEmbedding", "getWorkflowOverviewEmbeddingReport", + "getWorkflowOverviewEmbeddingDisplayViewModel", "isSupportedShellSessionHandoffPackage", "getLauncherLinks", "getControlPageApiMethods", @@ -224,6 +225,7 @@ assert.match(launchText, /\bgetWorkflowOverviewContract\b/); assert.match(launchText, /\bgetWorkflowOverviewReadiness\b/); assert.match(launchText, /\bmountWorkflowOverviewEmbedding\b/); assert.match(launchText, /\bgetWorkflowOverviewEmbeddingReport\b/); +assert.match(launchText, /\bgetWorkflowOverviewEmbeddingDisplayViewModel\b/); assert.match(launchText, /\bisSupportedShellSessionHandoffPackage\b/); assert.match(launchText, /\bdata-handoff-workflow\b/); assert.match(launchText, /\bdata-handoff-workflow-status\b/); diff --git a/wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs b/wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs index b6ab6a5..632ec9f 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_shell_integration_manifest.mjs @@ -36,6 +36,7 @@ import { createIniPanelShellWorkflowOverviewContract, createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -165,7 +166,7 @@ assert.deepEqual(readiness, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 43, + launchMethods: 44, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -227,7 +228,7 @@ assert.deepEqual(handoffSummary, { counts: { pages: 3, launcherLinks: 3, - launchMethods: 43, + launchMethods: 44, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -769,6 +770,12 @@ assert.deepEqual(createIniPanelShellWorkflowOverviewContract(), { assert.equal(createIniPanelShellWorkflowOverviewReadiness().ready, false); assert.equal(createIniPanelShellWorkflowOverviewEmbeddingReport().ready, false); assert.equal(createIniPanelShellWorkflowOverviewEmbeddingReport().rows.length, 6); +assert.equal( + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel( + createIniPanelShellWorkflowOverviewEmbeddingReport(), + ).title, + "Workflow overview embedding", +); assert.deepEqual( createIniPanelShellWorkflowOverviewReadiness({ overviewApi: { @@ -1197,7 +1204,7 @@ assert.deepEqual(createIniPanelShellIntegrationReadiness(blockedManifest), { counts: { pages: 3, launcherLinks: 3, - launchMethods: 43, + launchMethods: 44, controlPageMethods: 11, persistenceCapabilities: 3, }, @@ -1380,6 +1387,7 @@ assert.match(shellText, /\bexport function renderIniPanelShellSessionHandoffWork assert.match(shellText, /\bexport function mountIniPanelShellSessionHandoffWorkflow\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageReport\b/); assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingReport\b/); +assert.match(shellText, /\bexport function createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageRenderState\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffPackageSchema\b/); assert.match(shellText, /\bexport function createIniPanelShellSessionHandoffRenderState\b/); @@ -1418,6 +1426,7 @@ assert.match(docText, /\brenderIniPanelShellSessionHandoffWorkflowState\b/); assert.match(docText, /\bmountIniPanelShellSessionHandoffWorkflow\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffPackageReport\b/); assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingReport\b/); +assert.match(docText, /\bcreateIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffPackageRenderState\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffPackageSchema\b/); assert.match(docText, /\bcreateIniPanelShellSessionHandoffRenderState\b/); diff --git a/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs b/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs index 4cd09f3..60e2f51 100644 --- a/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs +++ b/wasm-port/tests/ui/node/verify_ini_panel_ui_shell.mjs @@ -36,6 +36,7 @@ import { createIniPanelShellWorkflowOverviewContract, createIniPanelShellWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewEmbeddingReport, + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, mountIniPanelShellWorkflowOverviewEmbedding, renderIniPanelShellSessionHandoffWorkflowState, mountIniPanelShellSessionHandoffWorkflow, @@ -123,6 +124,7 @@ assert.equal(typeof createIniPanelShellSessionHandoffWorkflowDomReadiness, "func assert.equal(typeof createIniPanelShellWorkflowOverviewContract, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewReadiness, "function"); assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingReport, "function"); +assert.equal(typeof createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, "function"); assert.equal(typeof mountIniPanelShellWorkflowOverviewEmbedding, "function"); assert.equal(typeof renderIniPanelShellSessionHandoffWorkflowState, "function"); assert.equal(typeof mountIniPanelShellSessionHandoffWorkflow, "function"); @@ -793,6 +795,10 @@ assert.equal(shellViewModel.createWorkflowOverviewContract, createIniPanelShellW assert.equal(shellViewModel.createWorkflowOverviewReadiness, createIniPanelShellWorkflowOverviewReadiness); assert.equal(shellViewModel.mountWorkflowOverviewEmbedding, mountIniPanelShellWorkflowOverviewEmbedding); assert.equal(shellViewModel.createWorkflowOverviewEmbeddingReport, createIniPanelShellWorkflowOverviewEmbeddingReport); +assert.equal( + shellViewModel.createWorkflowOverviewEmbeddingDisplayViewModel, + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel, +); assert.equal(shellViewModel.createShellSessionHandoffPackageReport, createIniPanelShellSessionHandoffPackageReport); assert.equal(shellViewModel.createShellSessionHandoffPackageSchema, createIniPanelShellSessionHandoffPackageSchema); assert.equal(shellViewModel.isSupportedShellSessionHandoffPackage, isSupportedIniPanelShellSessionHandoffPackage); @@ -1179,7 +1185,8 @@ assert.equal(workflowOverviewEmbedding.ready, false); assert.equal(workflowOverviewEmbedding.renderState.statusLine, "Blocked: mount:blocked"); assert.equal(workflowOverviewEmbedding.mountResult.renderResult.rowCount, 5); assert.equal(workflowOverviewEmbedding.error, null); -assert.deepEqual(createIniPanelShellWorkflowOverviewEmbeddingReport(workflowOverviewEmbedding), { +const workflowOverviewEmbeddingReport = createIniPanelShellWorkflowOverviewEmbeddingReport(workflowOverviewEmbedding); +assert.deepEqual(workflowOverviewEmbeddingReport, { apiName: "ini-panel-shell-workflow-overview-embedding-report", reportVersion: 1, phase: "blocked", @@ -1228,6 +1235,16 @@ assert.deepEqual(createIniPanelShellWorkflowOverviewEmbeddingReport(workflowOver }, ], }); +assert.deepEqual( + createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel(workflowOverviewEmbeddingReport), + { + phase: "blocked", + title: "Workflow overview embedding", + statusText: "Blocked", + detailText: "embedding:blocked, mount:blocked", + rows: workflowOverviewEmbeddingReport.rows, + }, +); assert.deepEqual( mountIniPanelShellWorkflowOverviewEmbedding({ overviewApi: null }).readiness.missing, shellViewModel.shellWorkflowOverviewContract.methodNames,