Mount Cortex OS Runtime Health as WebUI panel
This commit is contained in:
parent
1707a7b09d
commit
3685710fe8
@ -9,6 +9,10 @@
|
||||
font: 14px/1.45 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
||||
}
|
||||
|
||||
main.main:not(.svrnty-showing-cortex-os) .cortex-os-runtime-health {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cortex-os-runtime-health h2 {
|
||||
margin: 0 0 8px;
|
||||
font-size: 15px;
|
||||
|
||||
@ -42,7 +42,10 @@
|
||||
panel.appendChild(summary);
|
||||
panel.appendChild(list);
|
||||
|
||||
var target = document.querySelector("main") || document.body;
|
||||
var target = document.querySelector("main.main");
|
||||
if (!target) {
|
||||
return panel;
|
||||
}
|
||||
target.appendChild(panel);
|
||||
return panel;
|
||||
}
|
||||
@ -99,9 +102,17 @@
|
||||
});
|
||||
}
|
||||
|
||||
if (document.readyState === "loading") {
|
||||
document.addEventListener("DOMContentLoaded", loadRuntimeHealth, { once: true });
|
||||
} else {
|
||||
function handlePanelSwitch(event) {
|
||||
var detail = (event && event.detail) || {};
|
||||
if (detail.name === "cortex-os") {
|
||||
loadRuntimeHealth();
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("svrnty:panel-switch", handlePanelSwitch);
|
||||
|
||||
var main = document.querySelector("main.main");
|
||||
if (main && main.classList.contains("svrnty-showing-cortex-os")) {
|
||||
loadRuntimeHealth();
|
||||
}
|
||||
})();
|
||||
|
||||
@ -24,11 +24,14 @@
|
||||
'<path d="M12 2l1.8 5.6L19.4 9.4l-4.5 3.3 1.7 5.7L12 15l-4.6 3.4 1.7-5.7L4.6 9.4l5.6-1.8L12 2z"/>',
|
||||
canvas:
|
||||
'<rect x="3" y="3" width="18" height="18" rx="2"/><path d="M8 3v18M16 3v18M3 8h18M3 16h18"/>',
|
||||
"cortex-os":
|
||||
'<path d="M4 7h16M4 12h16M4 17h10"/><circle cx="17" cy="17" r="3"/>',
|
||||
};
|
||||
const TABS = [
|
||||
{ id: "adwright", label: "Adwright", tooltip: "Adwright — marketing intelligence" },
|
||||
{ id: "bte", label: "BTE", tooltip: "BTE — brand creative studio" },
|
||||
{ id: "canvas", label: "Canvas", tooltip: "Canvas — sovereign UI design" },
|
||||
{ id: "cortex-os", label: "Cortex OS", tooltip: "Cortex OS — Runtime Health" },
|
||||
];
|
||||
|
||||
function _svg(iconPath, size, stroke) {
|
||||
|
||||
@ -22,6 +22,18 @@ def test_runtime_health_display_has_no_hidden_write_surface():
|
||||
"localStorage",
|
||||
"sessionStorage",
|
||||
"document.cookie",
|
||||
"indexedDB",
|
||||
"caches",
|
||||
"navigator.sendBeacon",
|
||||
"WebSocket",
|
||||
"EventSource",
|
||||
"BroadcastChannel",
|
||||
"SharedWorker",
|
||||
"ServiceWorker",
|
||||
"window.open",
|
||||
"eval(",
|
||||
"new Function",
|
||||
"innerHTML",
|
||||
"<form",
|
||||
".submit(",
|
||||
"POST",
|
||||
@ -43,3 +55,15 @@ def test_runtime_health_css_is_scoped_to_panel():
|
||||
assert ".cortex-os-runtime-health" in css
|
||||
assert "body {" not in css
|
||||
assert "#app" not in css
|
||||
|
||||
|
||||
def test_runtime_health_mounts_only_in_cortex_os_panel_context():
|
||||
js = JS.read_text(encoding="utf-8")
|
||||
|
||||
assert 'window.addEventListener("svrnty:panel-switch", handlePanelSwitch)' in js
|
||||
assert 'detail.name === "cortex-os"' in js
|
||||
assert 'document.querySelector("main.main")' in js
|
||||
assert "document.body" not in js
|
||||
assert 'document.addEventListener("DOMContentLoaded", loadRuntimeHealth' not in js
|
||||
assert "loadRuntimeHealth();" in js
|
||||
assert js.count("/api/cortex-os/runtime-health") == 1
|
||||
|
||||
@ -23,3 +23,11 @@ def test_canvas_tab_is_registered():
|
||||
src = NAV_JS.read_text()
|
||||
assert '{ id: "canvas"' in src
|
||||
assert "svrnty-showing-\" + id" in src
|
||||
|
||||
|
||||
def test_cortex_os_tab_is_registered_once():
|
||||
src = NAV_JS.read_text()
|
||||
assert src.count('id: "cortex-os"') == 1
|
||||
assert '"cortex-os":' in src
|
||||
for tab_id in ['id: "adwright"', 'id: "bte"', 'id: "canvas"']:
|
||||
assert tab_id in src
|
||||
|
||||
Loading…
Reference in New Issue
Block a user