forked from Zakaria/hermes-agent
79 lines
3.1 KiB
Python
79 lines
3.1 KiB
Python
"""Tests for agent-settings copy in the interactive setup wizard."""
|
|
|
|
from hermes_cli.setup import setup_agent_settings
|
|
|
|
|
|
def test_setup_agent_settings_uses_displayed_max_iterations_value(tmp_path, monkeypatch, capsys):
|
|
"""The helper text should match the value shown in the prompt.
|
|
|
|
After PR#18413 max_turns is read exclusively from config.yaml — the
|
|
.env `HERMES_MAX_ITERATIONS` fallback was removed because it was
|
|
shadowing the user's current config (see the 60-vs-500 incident).
|
|
"""
|
|
monkeypatch.setenv("HERMES_HOME", str(tmp_path))
|
|
|
|
config = {
|
|
"agent": {"max_turns": 60},
|
|
"display": {"tool_progress": "all"},
|
|
"compression": {"threshold": 0.50},
|
|
"session_reset": {"mode": "both", "idle_minutes": 1440, "at_hour": 4},
|
|
}
|
|
|
|
prompt_answers = iter(["60", "all", "0.5"])
|
|
|
|
monkeypatch.setattr("hermes_cli.setup.prompt", lambda *args, **kwargs: next(prompt_answers))
|
|
monkeypatch.setattr("hermes_cli.setup.prompt_choice", lambda *args, **kwargs: 4)
|
|
monkeypatch.setattr("hermes_cli.setup.save_env_value", lambda *args, **kwargs: None)
|
|
monkeypatch.setattr("hermes_cli.setup.remove_env_value", lambda *args, **kwargs: None)
|
|
monkeypatch.setattr("hermes_cli.setup.save_config", lambda *args, **kwargs: None)
|
|
|
|
setup_agent_settings(config)
|
|
|
|
out = capsys.readouterr().out
|
|
assert "Press Enter to keep 60." in out
|
|
assert "Default is 90" not in out
|
|
|
|
|
|
def test_setup_agent_settings_prefers_config_over_stale_env(tmp_path, monkeypatch, capsys):
|
|
"""Config.yaml wins even when a stale .env value disagrees.
|
|
|
|
Regression guard for the bug where `.env HERMES_MAX_ITERATIONS=60`
|
|
from an old `hermes setup` run shadowed `agent.max_turns: 500` in
|
|
config.yaml. The wizard must now display the config value.
|
|
"""
|
|
monkeypatch.setenv("HERMES_HOME", str(tmp_path))
|
|
|
|
config = {
|
|
"agent": {"max_turns": 500}, # user bumped this in config.yaml
|
|
"display": {"tool_progress": "all"},
|
|
"compression": {"threshold": 0.50},
|
|
"session_reset": {"mode": "both", "idle_minutes": 1440, "at_hour": 4},
|
|
}
|
|
|
|
prompt_answers = iter(["500", "all", "0.5"])
|
|
|
|
# Simulate stale .env value — the wizard must ignore this.
|
|
monkeypatch.setattr(
|
|
"hermes_cli.setup.get_env_value",
|
|
lambda key: "60" if key == "HERMES_MAX_ITERATIONS" else "",
|
|
)
|
|
monkeypatch.setattr("hermes_cli.setup.prompt", lambda *args, **kwargs: next(prompt_answers))
|
|
monkeypatch.setattr("hermes_cli.setup.prompt_choice", lambda *args, **kwargs: 4)
|
|
monkeypatch.setattr("hermes_cli.setup.save_env_value", lambda *args, **kwargs: None)
|
|
|
|
removed_keys: list[str] = []
|
|
monkeypatch.setattr(
|
|
"hermes_cli.setup.remove_env_value",
|
|
lambda key: (removed_keys.append(key), True)[1],
|
|
)
|
|
monkeypatch.setattr("hermes_cli.setup.save_config", lambda *args, **kwargs: None)
|
|
|
|
setup_agent_settings(config)
|
|
|
|
out = capsys.readouterr().out
|
|
# Config value wins
|
|
assert "Press Enter to keep 500." in out
|
|
assert "Press Enter to keep 60." not in out
|
|
# And the stale .env entry gets cleaned up
|
|
assert "HERMES_MAX_ITERATIONS" in removed_keys
|