diff --git a/nanobot/agent/tools/shell.py b/nanobot/agent/tools/shell.py index 23da2c10f..eb786e9f4 100644 --- a/nanobot/agent/tools/shell.py +++ b/nanobot/agent/tools/shell.py @@ -218,6 +218,12 @@ class ExecTool(Tool): "TMP": os.environ.get("TMP", f"{sr}\\Temp"), "PATHEXT": os.environ.get("PATHEXT", ".COM;.EXE;.BAT;.CMD"), "PATH": os.environ.get("PATH", f"{sr}\\system32;{sr}"), + "APPDATA": os.environ.get("APPDATA", ""), + "LOCALAPPDATA": os.environ.get("LOCALAPPDATA", ""), + "ProgramData": os.environ.get("ProgramData", ""), + "ProgramFiles": os.environ.get("ProgramFiles", ""), + "ProgramFiles(x86)": os.environ.get("ProgramFiles(x86)", ""), + "ProgramW6432": os.environ.get("ProgramW6432", ""), } home = os.environ.get("HOME", "/tmp") return { diff --git a/tests/tools/test_exec_platform.py b/tests/tools/test_exec_platform.py index aa3ffee71..b24d01ac4 100644 --- a/tests/tools/test_exec_platform.py +++ b/tests/tools/test_exec_platform.py @@ -5,12 +5,18 @@ strategy, and sandbox behaviour per platform — without actually running platform-specific binaries (all subprocess calls are mocked). """ +import sys from unittest.mock import AsyncMock, patch import pytest from nanobot.agent.tools.shell import ExecTool +_WINDOWS_ENV_KEYS = { + "APPDATA", "LOCALAPPDATA", "ProgramData", + "ProgramFiles", "ProgramFiles(x86)", "ProgramW6432", +} + # --------------------------------------------------------------------------- # _build_env @@ -21,7 +27,10 @@ class TestBuildEnvUnix: def test_expected_keys(self): with patch("nanobot.agent.tools.shell._IS_WINDOWS", False): env = ExecTool()._build_env() - assert set(env) == {"HOME", "LANG", "TERM"} + expected = {"HOME", "LANG", "TERM"} + assert expected <= set(env) + if sys.platform != "win32": + assert set(env) == expected def test_home_from_environ(self, monkeypatch): monkeypatch.setenv("HOME", "/Users/dev") @@ -45,6 +54,7 @@ class TestBuildEnvWindows: _EXPECTED_KEYS = { "SYSTEMROOT", "COMSPEC", "USERPROFILE", "HOMEDRIVE", "HOMEPATH", "TEMP", "TMP", "PATHEXT", "PATH", + *_WINDOWS_ENV_KEYS, } def test_expected_keys(self):