mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-29 16:12:06 -04:00
fix(hwfit): repair remote Windows hardware scan over SSH (#4674)
Remote Cookbook hwfit probes failed on Windows hosts because the PowerShell script was sent as nested -Command quoting through OpenSSH. Use -EncodedCommand for remote probes, auto-detect platform when omitted (including Darwin for Mac SSH hosts), and return a clearer error when SSH works but the probe fails. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -538,6 +538,32 @@ def _powershell_exe():
|
|||||||
path so we don't depend on a particular PATH ordering."""
|
path so we don't depend on a particular PATH ordering."""
|
||||||
return shutil.which("pwsh") or shutil.which("powershell") or "powershell"
|
return shutil.which("pwsh") or shutil.which("powershell") or "powershell"
|
||||||
|
|
||||||
|
def _powershell_encoded_for_ssh(script: str):
|
||||||
|
"""Run a PowerShell script on a remote Windows host over SSH.
|
||||||
|
|
||||||
|
Nested quotes in powershell -Command break when passed through Windows
|
||||||
|
OpenSSH's cmd wrapper; -EncodedCommand avoids that.
|
||||||
|
"""
|
||||||
|
import base64
|
||||||
|
encoded = base64.b64encode(script.encode("utf-16-le")).decode("ascii")
|
||||||
|
return _run(f"powershell -NoProfile -EncodedCommand {encoded}")
|
||||||
|
|
||||||
|
|
||||||
|
def _probe_remote_platform():
|
||||||
|
"""Best-effort OS detection over SSH when the caller didn't pass platform."""
|
||||||
|
out = _run("echo %OS%")
|
||||||
|
if out and "Windows_NT" in out:
|
||||||
|
return "windows"
|
||||||
|
uname = (_run(["uname", "-s"]) or "").strip().lower()
|
||||||
|
if uname == "darwin":
|
||||||
|
# Mac uses the linux detection path (_detect_apple_silicon over SSH).
|
||||||
|
return "linux"
|
||||||
|
if uname == "linux":
|
||||||
|
out = _run("test -d /data/data/com.termux && echo termux || echo linux")
|
||||||
|
if out and "termux" in out:
|
||||||
|
return "termux"
|
||||||
|
return "linux"
|
||||||
|
|
||||||
|
|
||||||
def _detect_windows():
|
def _detect_windows():
|
||||||
"""Detect Windows hardware via PowerShell/WMI.
|
"""Detect Windows hardware via PowerShell/WMI.
|
||||||
@@ -600,9 +626,8 @@ def _detect_windows():
|
|||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
if _remote_host:
|
if _remote_host:
|
||||||
# Remote: ship a single command string over SSH. The remote shell parses
|
# Remote: use -EncodedCommand so OpenSSH/cmd quoting does not break the script.
|
||||||
# the quoting; PowerShell on the far side runs the -Command payload.
|
out = _powershell_encoded_for_ssh(ps_cmd.strip())
|
||||||
out = _run(f'powershell -Command "{ps_cmd}"')
|
|
||||||
else:
|
else:
|
||||||
# Local: pass a LIST argv straight to subprocess so the OS hands ps_cmd
|
# Local: pass a LIST argv straight to subprocess so the OS hands ps_cmd
|
||||||
# to PowerShell verbatim — no fragile string-level quote escaping. Prefer
|
# to PowerShell verbatim — no fragile string-level quote escaping. Prefer
|
||||||
@@ -773,6 +798,13 @@ def detect_system(host="", ssh_port="", platform="", fresh=False):
|
|||||||
"""
|
"""
|
||||||
global _remote_host, _remote_port, _remote_platform
|
global _remote_host, _remote_port, _remote_platform
|
||||||
|
|
||||||
|
if host and not platform:
|
||||||
|
_remote_host = host
|
||||||
|
_remote_port = ssh_port or None
|
||||||
|
platform = _probe_remote_platform()
|
||||||
|
_remote_host = None
|
||||||
|
_remote_port = None
|
||||||
|
|
||||||
cache_key = _cache_key(host, ssh_port, platform)
|
cache_key = _cache_key(host, ssh_port, platform)
|
||||||
now = time.time()
|
now = time.time()
|
||||||
if not fresh and cache_key in _cache_by_host:
|
if not fresh and cache_key in _cache_by_host:
|
||||||
@@ -793,8 +825,8 @@ def detect_system(host="", ssh_port="", platform="", fresh=False):
|
|||||||
_remote_platform = None
|
_remote_platform = None
|
||||||
_cache_by_host[cache_key] = (now, result)
|
_cache_by_host[cache_key] = (now, result)
|
||||||
return result
|
return result
|
||||||
# If Windows detection failed, return error
|
# SSH may work while the PowerShell hardware probe still fails.
|
||||||
result = {"error": f"Cannot connect to {host}", "host": host}
|
result = {"error": f"Windows hardware probe failed for {host}", "host": host}
|
||||||
_remote_host = None
|
_remote_host = None
|
||||||
_remote_platform = None
|
_remote_platform = None
|
||||||
_cache_by_host[cache_key] = (now, result)
|
_cache_by_host[cache_key] = (now, result)
|
||||||
|
|||||||
@@ -72,3 +72,50 @@ def test_gguf_alternate_still_recommended_on_windows():
|
|||||||
still appear on Windows even though the AWQ variant is hidden."""
|
still appear on Windows even though the AWQ variant is hidden."""
|
||||||
names = {r["name"] for r in rank_models(_windows_system(), limit=900)}
|
names = {r["name"] for r in rank_models(_windows_system(), limit=900)}
|
||||||
assert "Qwen/Qwen2.5-3B-Instruct" in names
|
assert "Qwen/Qwen2.5-3B-Instruct" in names
|
||||||
|
|
||||||
|
|
||||||
|
def test_remote_windows_probe_uses_encoded_command(monkeypatch):
|
||||||
|
"""Remote Windows hwfit must not use nested -Command quoting over SSH."""
|
||||||
|
from services.hwfit import hardware
|
||||||
|
|
||||||
|
calls = []
|
||||||
|
monkeypatch.setattr(hardware, "_remote_host", "user@winpc")
|
||||||
|
monkeypatch.setattr(hardware, "_remote_port", None)
|
||||||
|
|
||||||
|
def fake_run(cmd):
|
||||||
|
calls.append(cmd)
|
||||||
|
if isinstance(cmd, str) and "EncodedCommand" in cmd:
|
||||||
|
return (
|
||||||
|
'{"ram_gb":64,"avail_gb":32,"cpu_name":"Test CPU",'
|
||||||
|
'"cpu_cores":8,"arch":64}'
|
||||||
|
)
|
||||||
|
return None
|
||||||
|
|
||||||
|
monkeypatch.setattr(hardware, "_run", fake_run)
|
||||||
|
result = hardware._detect_windows()
|
||||||
|
assert result is not None
|
||||||
|
assert result["total_ram_gb"] == 64
|
||||||
|
assert len(calls) == 1
|
||||||
|
assert "EncodedCommand" in calls[0]
|
||||||
|
assert '-Command "' not in calls[0]
|
||||||
|
|
||||||
|
|
||||||
|
def test_probe_remote_platform_detects_windows(monkeypatch):
|
||||||
|
from services.hwfit import hardware
|
||||||
|
|
||||||
|
monkeypatch.setattr(hardware, "_run", lambda cmd: "Windows_NT\n")
|
||||||
|
assert hardware._probe_remote_platform() == "windows"
|
||||||
|
|
||||||
|
|
||||||
|
def test_probe_remote_platform_detects_darwin(monkeypatch):
|
||||||
|
from services.hwfit import hardware
|
||||||
|
|
||||||
|
def fake_run(cmd):
|
||||||
|
if cmd == "echo %OS%":
|
||||||
|
return "%OS%"
|
||||||
|
if cmd == ["uname", "-s"]:
|
||||||
|
return "Darwin"
|
||||||
|
raise AssertionError(f"unexpected probe cmd: {cmd!r}")
|
||||||
|
|
||||||
|
monkeypatch.setattr(hardware, "_run", fake_run)
|
||||||
|
assert hardware._probe_remote_platform() == "linux"
|
||||||
|
|||||||
Reference in New Issue
Block a user