From 9ec3a7a21bcfa973d35cdb715c2740db3daf8b36 Mon Sep 17 00:00:00 2001 From: stablegenius49 <16443023+stablegenius49@users.noreply.github.com> Date: Wed, 11 Mar 2026 09:07:30 -0700 Subject: [PATCH 1/2] fix: mark config set arguments as placeholders --- hermes_cli/config.py | 6 ++--- hermes_cli/setup.py | 2 +- tests/hermes_cli/test_placeholder_usage.py | 29 ++++++++++++++++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 tests/hermes_cli/test_placeholder_usage.py diff --git a/hermes_cli/config.py b/hermes_cli/config.py index 492d00aec..249ae52b4 100644 --- a/hermes_cli/config.py +++ b/hermes_cli/config.py @@ -821,7 +821,7 @@ def migrate_config(interactive: bool = True, quiet: bool = False) -> Dict[str, A print(f" ✓ Saved {name}") print() else: - print(" Set later with: hermes config set KEY VALUE") + print(" Set later with: hermes config set ") # Check for missing config fields missing_config = get_missing_config_fields() @@ -1265,7 +1265,7 @@ def show_config(): print() print(color("─" * 60, Colors.DIM)) print(color(" hermes config edit # Edit config file", Colors.DIM)) - print(color(" hermes config set KEY VALUE", Colors.DIM)) + print(color(" hermes config set ", Colors.DIM)) print(color(" hermes setup # Run setup wizard", Colors.DIM)) print() @@ -1391,7 +1391,7 @@ def config_command(args): key = getattr(args, 'key', None) value = getattr(args, 'value', None) if not key or not value: - print("Usage: hermes config set KEY VALUE") + print("Usage: hermes config set ") print() print("Examples:") print(" hermes config set model anthropic/claude-sonnet-4") diff --git a/hermes_cli/setup.py b/hermes_cli/setup.py index 4a27339ce..7e0a99983 100644 --- a/hermes_cli/setup.py +++ b/hermes_cli/setup.py @@ -602,7 +602,7 @@ def _print_setup_summary(config: dict, hermes_home): print( f" {color('hermes config edit', Colors.GREEN)} Open config in your editor" ) - print(f" {color('hermes config set KEY VALUE', Colors.GREEN)}") + print(f" {color('hermes config set ', Colors.GREEN)}") print(f" Set a specific value") print() print(f" Or edit the files directly:") diff --git a/tests/hermes_cli/test_placeholder_usage.py b/tests/hermes_cli/test_placeholder_usage.py new file mode 100644 index 000000000..ab5234800 --- /dev/null +++ b/tests/hermes_cli/test_placeholder_usage.py @@ -0,0 +1,29 @@ +"""Tests for CLI placeholder text in config/setup output.""" + +import os +from argparse import Namespace +from unittest.mock import patch + +import pytest + +from hermes_cli.config import config_command +from hermes_cli.setup import _print_setup_summary + + +def test_config_set_usage_marks_placeholders(capsys): + args = Namespace(config_command="set", key=None, value=None) + + with pytest.raises(SystemExit) as exc: + config_command(args) + + assert exc.value.code == 1 + out = capsys.readouterr().out + assert "Usage: hermes config set " in out + + +def test_setup_summary_marks_placeholders(tmp_path, capsys): + with patch.dict(os.environ, {"HERMES_HOME": str(tmp_path)}): + _print_setup_summary({"tts": {"provider": "edge"}}, tmp_path) + + out = capsys.readouterr().out + assert "hermes config set " in out From 0d23ad7a152751a1176289f7d4ed3a5f94ae49e3 Mon Sep 17 00:00:00 2001 From: teknium1 Date: Sat, 14 Mar 2026 10:35:14 -0700 Subject: [PATCH 2/2] fix: cover remaining config placeholder help text Update the unknown-subcommand config help output to use placeholder syntax too, and extend the placeholder regression tests to cover show_config() and that fallback help path. --- hermes_cli/config.py | 2 +- tests/hermes_cli/test_placeholder_usage.py | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/hermes_cli/config.py b/hermes_cli/config.py index 249ae52b4..7a932d9e4 100644 --- a/hermes_cli/config.py +++ b/hermes_cli/config.py @@ -1506,7 +1506,7 @@ def config_command(args): print("Available commands:") print(" hermes config Show current configuration") print(" hermes config edit Open config in editor") - print(" hermes config set K V Set a config value") + print(" hermes config set Set a config value") print(" hermes config check Check for missing/outdated config") print(" hermes config migrate Update config with new options") print(" hermes config path Show config file path") diff --git a/tests/hermes_cli/test_placeholder_usage.py b/tests/hermes_cli/test_placeholder_usage.py index ab5234800..3479d8f57 100644 --- a/tests/hermes_cli/test_placeholder_usage.py +++ b/tests/hermes_cli/test_placeholder_usage.py @@ -6,7 +6,7 @@ import pytest -from hermes_cli.config import config_command +from hermes_cli.config import config_command, show_config from hermes_cli.setup import _print_setup_summary @@ -21,6 +21,25 @@ def test_config_set_usage_marks_placeholders(capsys): assert "Usage: hermes config set " in out +def test_config_unknown_command_help_marks_placeholders(capsys): + args = Namespace(config_command="wat") + + with pytest.raises(SystemExit) as exc: + config_command(args) + + assert exc.value.code == 1 + out = capsys.readouterr().out + assert "hermes config set Set a config value" in out + + +def test_show_config_marks_placeholders(tmp_path, capsys): + with patch.dict(os.environ, {"HERMES_HOME": str(tmp_path)}): + show_config() + + out = capsys.readouterr().out + assert "hermes config set " in out + + def test_setup_summary_marks_placeholders(tmp_path, capsys): with patch.dict(os.environ, {"HERMES_HOME": str(tmp_path)}): _print_setup_summary({"tts": {"provider": "edge"}}, tmp_path)