From 9102d4a588c84096f648a99d2a8fc10b154d118f Mon Sep 17 00:00:00 2001 From: Gille <4317663+helix4u@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:06:29 -0600 Subject: [PATCH] fix(dashboard): show Windows 11 in host panel (#44511) --- hermes_cli/web_server.py | 53 +++++++++++++++++-- .../hermes_cli/test_system_stats_platform.py | 44 +++++++++++++++ 2 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 tests/hermes_cli/test_system_stats_platform.py diff --git a/hermes_cli/web_server.py b/hermes_cli/web_server.py index 7813fb0d05..a3f503afaf 100644 --- a/hermes_cli/web_server.py +++ b/hermes_cli/web_server.py @@ -1638,6 +1638,49 @@ async def get_status(): } +_WINDOWS_11_MIN_BUILD = 22000 + + +def _windows_build_number(version: str, platform_label: str) -> Optional[int]: + """Extract the Windows NT build number from stdlib platform strings.""" + for value in (version or "", platform_label or ""): + match = re.search(r"(?:^|[^\d])10\.0\.(\d{5,})(?:[^\d]|$)", value) + if not match: + continue + try: + return int(match.group(1)) + except ValueError: + continue + return None + + +def _display_system_platform( + *, + system: str, + release: str, + version: str, + platform_label: str, +) -> Dict[str, str]: + """Return host OS fields for display while preserving stdlib detail.""" + if system == "Windows" and release == "10": + build = _windows_build_number(version, platform_label) + if build is not None and build >= _WINDOWS_11_MIN_BUILD: + platform_label = re.sub( + r"^Windows-10(?=-)", + "Windows-11", + platform_label, + count=1, + ) + release = "11" + + return { + "os": system, + "os_release": release, + "os_version": version, + "platform": platform_label, + } + + @app.get("/api/system/stats") async def get_system_stats(): """Host + process system stats for the System page. @@ -1649,10 +1692,12 @@ async def get_system_stats(): import platform as _platform info: Dict[str, Any] = { - "os": _platform.system(), - "os_release": _platform.release(), - "os_version": _platform.version(), - "platform": _platform.platform(), + **_display_system_platform( + system=_platform.system(), + release=_platform.release(), + version=_platform.version(), + platform_label=_platform.platform(), + ), "arch": _platform.machine(), "hostname": _platform.node(), "python_version": _platform.python_version(), diff --git a/tests/hermes_cli/test_system_stats_platform.py b/tests/hermes_cli/test_system_stats_platform.py new file mode 100644 index 0000000000..03556dde3a --- /dev/null +++ b/tests/hermes_cli/test_system_stats_platform.py @@ -0,0 +1,44 @@ +from hermes_cli.web_server import _display_system_platform + + +def test_windows_11_build_displays_as_windows_11(): + info = _display_system_platform( + system="Windows", + release="10", + version="10.0.26200", + platform_label="Windows-10-10.0.26200-SP0", + ) + + assert info["os"] == "Windows" + assert info["os_release"] == "11" + assert info["os_version"] == "10.0.26200" + assert info["platform"] == "Windows-11-10.0.26200-SP0" + + +def test_windows_10_build_keeps_windows_10_label(): + info = _display_system_platform( + system="Windows", + release="10", + version="10.0.19045", + platform_label="Windows-10-10.0.19045-SP0", + ) + + assert info["os"] == "Windows" + assert info["os_release"] == "10" + assert info["platform"] == "Windows-10-10.0.19045-SP0" + + +def test_non_windows_platform_unchanged(): + info = _display_system_platform( + system="Linux", + release="6.8.0", + version="#1 SMP", + platform_label="Linux-6.8.0-x86_64-with-glibc2.39", + ) + + assert info == { + "os": "Linux", + "os_release": "6.8.0", + "os_version": "#1 SMP", + "platform": "Linux-6.8.0-x86_64-with-glibc2.39", + }