refactor: consolidate get_hermes_home() and parse_reasoning_effort() (#3062)

Centralizes two widely-duplicated patterns into hermes_constants.py:

1. get_hermes_home() — Path resolution for ~/.hermes (HERMES_HOME env var)
   - Was copy-pasted inline across 30+ files as:
     Path(os.getenv("HERMES_HOME", Path.home() / ".hermes"))
   - Now defined once in hermes_constants.py (zero-dependency module)
   - hermes_cli/config.py re-exports it for backward compatibility
   - Removed local wrapper functions in honcho_integration/client.py,
     tools/website_policy.py, tools/tirith_security.py, hermes_cli/uninstall.py

2. parse_reasoning_effort() — Reasoning effort string validation
   - Was copy-pasted in cli.py, gateway/run.py, cron/scheduler.py
   - Same validation logic: check against (xhigh, high, medium, low, minimal, none)
   - Now defined once in hermes_constants.py, called from all 3 locations
   - Warning log for unknown values kept at call sites (context-specific)

31 files changed, net +31 lines (125 insertions, 94 deletions)
Full test suite: 6179 passed, 0 failed
This commit is contained in:
Teknium 2026-03-25 15:54:28 -07:00 committed by GitHub
parent e0cfc089da
commit 77bcaba2d7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
31 changed files with 125 additions and 94 deletions

View file

@ -8,6 +8,8 @@ import logging
import os
import re
from pathlib import Path
from hermes_constants import get_hermes_home
from typing import Optional
logger = logging.getLogger(__name__)
@ -320,7 +322,7 @@ def build_skills_system_prompt(
match skills by meaning, not just name.
Filters out skills incompatible with the current OS platform.
"""
hermes_home = Path(os.getenv("HERMES_HOME", Path.home() / ".hermes"))
hermes_home = get_hermes_home()
skills_dir = hermes_home / "skills"
if not skills_dir.exists():
@ -449,7 +451,7 @@ def load_soul_md() -> Optional[str]:
except Exception as e:
logger.debug("Could not ensure HERMES_HOME before loading SOUL.md: %s", e)
soul_path = Path(os.getenv("HERMES_HOME", Path.home() / ".hermes")) / "SOUL.md"
soul_path = get_hermes_home() / "SOUL.md"
if not soul_path.exists():
return None
try: