fix(approval): harden YOLO mode env parsing against quoted-bool strings

This commit is contained in:
hharry11
2026-04-27 06:42:32 +03:00
committed by Teknium
parent 158eb32686
commit 24130b7e53
5 changed files with 50 additions and 5 deletions

View File

@@ -1005,6 +1005,21 @@ def test_config_busy_get_and_set(monkeypatch):
assert ("display.busy_input_mode", "interrupt") in writes
def test_config_set_yolo_process_scope_treats_false_like_env_as_disabled(monkeypatch):
monkeypatch.setenv("HERMES_YOLO_MODE", "false")
resp = server.handle_request(
{
"id": "1",
"method": "config.set",
"params": {"key": "yolo"},
}
)
assert resp["result"]["value"] == "1"
assert os.environ.get("HERMES_YOLO_MODE") == "1"
def test_config_get_statusbar_survives_non_dict_display(monkeypatch):
monkeypatch.setattr(server, "_load_cfg", lambda: {"display": "broken"})

View File

@@ -125,6 +125,33 @@ class TestYoloMode:
approval_callback=lambda *a: "deny")
assert not result["approved"]
@pytest.mark.parametrize("value", ["false", "False", "0", "off", "no"])
def test_false_like_yolo_values_do_not_bypass_dangerous_command(self, monkeypatch, value):
"""False-like env strings must not silently enable YOLO bypass."""
monkeypatch.setenv("HERMES_YOLO_MODE", value)
monkeypatch.setenv("HERMES_INTERACTIVE", "1")
monkeypatch.setenv("HERMES_SESSION_KEY", "test-session")
result = check_dangerous_command(
"rm -rf /tmp/stuff",
"local",
approval_callback=lambda *a: "deny",
)
assert not result["approved"]
@pytest.mark.parametrize("value", ["false", "False", "0", "off", "no"])
def test_false_like_yolo_values_do_not_bypass_combined_guard(self, monkeypatch, value):
"""Combined guard must treat false-like YOLO env strings as disabled."""
monkeypatch.setenv("HERMES_YOLO_MODE", value)
monkeypatch.setenv("HERMES_INTERACTIVE", "1")
result = check_all_command_guards(
"rm -rf /tmp/stuff",
"local",
approval_callback=lambda *a: "deny",
)
assert not result["approved"]
def test_session_scoped_yolo_only_bypasses_current_session(self, monkeypatch):
"""Gateway /yolo should only bypass approvals for the active session."""
monkeypatch.delenv("HERMES_YOLO_MODE", raising=False)