mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-25 00:51:20 +00:00
Deep scan with vulture, pyflakes, and manual cross-referencing identified: - 41 dead functions/methods (zero callers in production) - 7 production-dead functions (only test callers, tests deleted) - 5 dead constants/variables - ~35 unused imports across agent/, hermes_cli/, tools/, gateway/ Categories of dead code removed: - Refactoring leftovers: _set_default_model, _setup_copilot_reasoning_selection, rebuild_lookups, clear_session_context, get_logs_dir, clear_session - Unused API surface: search_models_dev, get_pricing, skills_categories, get_read_files_summary, clear_read_tracker, menu_labels, get_spinner_list - Dead compatibility wrappers: schedule_cronjob, list_cronjobs, remove_cronjob - Stale debug helpers: get_debug_session_info copies in 4 tool files (centralized version in debug_helpers.py already exists) - Dead gateway methods: send_emote, send_notice (matrix), send_reaction (bluebubbles), _normalize_inbound_text (feishu), fetch_room_history (matrix), _start_typing_indicator (signal), parse_feishu_post_content - Dead constants: NOUS_API_BASE_URL, SKILLS_TOOL_DESCRIPTION, FILE_TOOLS, VALID_ASPECT_RATIOS, MEMORY_DIR - Unused UI code: _interactive_provider_selection, _interactive_model_selection (superseded by prompt_toolkit picker) Test suite verified: 609 tests covering affected files all pass. Tests for removed functions deleted. Tests using removed utilities (clear_read_tracker, MEMORY_DIR) updated to use internal APIs directly.
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
"""Shared CLI output helpers for Hermes CLI modules.
|
|
|
|
Extracts the identical ``print_info/success/warning/error`` and ``prompt()``
|
|
functions previously duplicated across setup.py, tools_config.py,
|
|
mcp_config.py, and memory_setup.py.
|
|
"""
|
|
|
|
import getpass
|
|
|
|
from hermes_cli.colors import Colors, color
|
|
|
|
|
|
# ─── Print Helpers ────────────────────────────────────────────────────────────
|
|
|
|
|
|
def print_info(text: str) -> None:
|
|
"""Print a dim informational message."""
|
|
print(color(f" {text}", Colors.DIM))
|
|
|
|
|
|
def print_success(text: str) -> None:
|
|
"""Print a green success message with ✓ prefix."""
|
|
print(color(f"✓ {text}", Colors.GREEN))
|
|
|
|
|
|
def print_warning(text: str) -> None:
|
|
"""Print a yellow warning message with ⚠ prefix."""
|
|
print(color(f"⚠ {text}", Colors.YELLOW))
|
|
|
|
|
|
def print_error(text: str) -> None:
|
|
"""Print a red error message with ✗ prefix."""
|
|
print(color(f"✗ {text}", Colors.RED))
|
|
|
|
|
|
def print_header(text: str) -> None:
|
|
"""Print a bold yellow header."""
|
|
print(color(f"\n {text}", Colors.YELLOW))
|
|
|
|
|
|
# ─── Input Prompts ────────────────────────────────────────────────────────────
|
|
|
|
|
|
def prompt(
|
|
question: str,
|
|
default: str | None = None,
|
|
password: bool = False,
|
|
) -> str:
|
|
"""Prompt the user for input with optional default and password masking.
|
|
|
|
Replaces the four independent ``_prompt()`` / ``prompt()`` implementations
|
|
in setup.py, tools_config.py, mcp_config.py, and memory_setup.py.
|
|
|
|
Returns the user's input (stripped), or *default* if the user presses Enter.
|
|
Returns empty string on Ctrl-C or EOF.
|
|
"""
|
|
suffix = f" [{default}]" if default else ""
|
|
display = color(f" {question}{suffix}: ", Colors.YELLOW)
|
|
|
|
try:
|
|
if password:
|
|
value = getpass.getpass(display)
|
|
else:
|
|
value = input(display)
|
|
value = value.strip()
|
|
return value if value else (default or "")
|
|
except (KeyboardInterrupt, EOFError):
|
|
print()
|
|
return ""
|
|
|
|
|
|
def prompt_yes_no(question: str, default: bool = True) -> bool:
|
|
"""Prompt for a yes/no answer. Returns bool."""
|
|
hint = "Y/n" if default else "y/N"
|
|
answer = prompt(f"{question} ({hint})")
|
|
if not answer:
|
|
return default
|
|
return answer.lower().startswith("y")
|