推进 INI 面板 workflow overview embedding DOM readiness

This commit is contained in:
2026-06-15 18:28:58 +08:00
parent 3cfd4b371e
commit 6856721695
12 changed files with 236 additions and 9 deletions

View File

@@ -291,6 +291,9 @@
getWorkflowOverviewEmbeddingDomContract: (options) => (
shellViewModel.createWorkflowOverviewEmbeddingDomContract(options)
),
getWorkflowOverviewEmbeddingDomReadiness: (options) => (
shellViewModel.createWorkflowOverviewEmbeddingDomReadiness(options)
),
isSupportedShellSessionHandoffPackage: shellViewModel.isSupportedShellSessionHandoffPackage,
getLauncherLinks: () => shellViewModel.launcherLinks,
getControlPageApiMethods: () => shellViewModel.controlPage.browserApiMethods,

View File

@@ -163,6 +163,7 @@ export function createIniPanelLaunchApiManifest(entries = getVisibleIniPanelEntr
"getWorkflowOverviewEmbeddingDisplayViewModel",
"getWorkflowOverviewEmbeddingRenderState",
"getWorkflowOverviewEmbeddingDomContract",
"getWorkflowOverviewEmbeddingDomReadiness",
"isSupportedShellSessionHandoffPackage",
"getLauncherLinks",
"getControlPageApiMethods",
@@ -1969,6 +1970,37 @@ export function createIniPanelShellWorkflowOverviewEmbeddingDomContract({
};
}
export function createIniPanelShellWorkflowOverviewEmbeddingDomReadiness({
rowDatasetPrefix = "workflowOverviewEmbedding",
contract = createIniPanelShellWorkflowOverviewEmbeddingDomContract({ rowDatasetPrefix }),
documentRef = globalThis.document,
mountNode = documentRef?.querySelector?.(contract.selectors.mount),
statusNode = documentRef?.querySelector?.(contract.selectors.status),
rowsNode = documentRef?.querySelector?.(contract.selectors.rows),
} = {}) {
const checks = {
document: Boolean(documentRef?.createElement),
mount: Boolean(mountNode),
status: Boolean(statusNode),
rows: Boolean(rowsNode),
rowDatasetPrefix: Boolean(contract.rowDatasetPrefix),
};
const missing = Object.entries(checks)
.filter(([, passed]) => !passed)
.map(([name]) => name);
const ready = missing.length === 0;
return {
apiName: "ini-panel-shell-workflow-overview-embedding-dom-readiness",
readinessVersion: 1,
phase: ready ? "ready" : "blocked",
ready,
missing,
checks,
contract,
};
}
export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries()) {
const shellIntegrationManifest = createIniPanelShellIntegrationManifest(entries);
const shellIntegrationReadiness = createIniPanelShellIntegrationReadiness(shellIntegrationManifest);
@@ -2131,6 +2163,7 @@ export function createIniPanelShellViewModel(entries = getVisibleIniPanelEntries
createWorkflowOverviewEmbeddingDisplayViewModel: createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel,
createWorkflowOverviewEmbeddingRenderState: createIniPanelShellWorkflowOverviewEmbeddingRenderState,
createWorkflowOverviewEmbeddingDomContract: createIniPanelShellWorkflowOverviewEmbeddingDomContract,
createWorkflowOverviewEmbeddingDomReadiness: createIniPanelShellWorkflowOverviewEmbeddingDomReadiness,
isSupportedShellSessionHandoffPackage: isSupportedIniPanelShellSessionHandoffPackage,
controlPage: {
browserApiSchema: createControlPageBrowserApiSchema(),

View File

@@ -93,6 +93,7 @@
createIniPanelShellWorkflowOverviewEmbeddingDisplayViewModel,
createIniPanelShellWorkflowOverviewEmbeddingRenderState,
createIniPanelShellWorkflowOverviewEmbeddingDomContract,
createIniPanelShellWorkflowOverviewEmbeddingDomReadiness,
mountIniPanelShellWorkflowOverviewEmbedding,
renderIniPanelShellSessionHandoffWorkflowState,
mountIniPanelShellSessionHandoffWorkflow,
@@ -147,6 +148,9 @@
getWorkflowOverviewEmbeddingDomContract: (options) => (
createIniPanelShellWorkflowOverviewEmbeddingDomContract(options)
),
getWorkflowOverviewEmbeddingDomReadiness: (options) => (
createIniPanelShellWorkflowOverviewEmbeddingDomReadiness(options ?? { documentRef: document })
),
};
</script>
</body>