mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-31 19:16:29 +00:00
Systematic prune per AGENTS.md test policy, one pass over every major test tree (gateway, hermes_cli, tools, agent, run_agent, plugins, cli, cron, tui_gateway, honcho/openviking, root-level): - DELETE: source-reading tests (read_text/getsource on prod files), change-detector tests (exact catalog counts, model-name snapshots, config version literals), mock-echo tests (assert a mock returns what it was told), assertion-free/trivial tests, near-duplicate parametrizations (boundaries + one representative kept), async/sync twin duplicates, cosmetic within-file variations. - KEEP (mandatory): security/redaction/approval guards, message-role alternation invariants, prompt-caching/deterministic-call-id invariants, issue-number regression tests (deduped), E2E tests. - 6 test files deleted outright (script-style/no-assert or fully redundant); conftest.py, fakes/, fixtures/ untouched. - tests/acp/conftest.py added: autouse fixture stubs the live models.dev/GitHub/Copilot/Anthropic inventory fetches that ACP server tests performed on every session create — test_server.py 147s → 3.4s, and the tests are now genuinely hermetic. - Sleep-based slowness shrunk where safe (codex_ttfb_watchdog, compression_concurrent_fork, etc.); no wall-clock assertion tightened. Verification: full hermetic suite via scripts/run_tests.sh — 2439 files, 31,130 tests passed, 0 failed, 0 flaky retries, 315s wall (baseline: 583s wall, 13,564s subprocess CPU).
47 lines
2 KiB
Python
47 lines
2 KiB
Python
"""Regression tests for the home-directory RuntimeError bug.
|
|
|
|
Without the fix to ``agent/subdirectory_hints.py`` (add ``RuntimeError`` to
|
|
the three ``except`` clauses around ``Path.expanduser()`` /
|
|
``Path.home()``), the first two tests raise ``RuntimeError`` from inside
|
|
the hint walker on POSIX systems.
|
|
|
|
These tests use pytest's built-in ``tmp_path`` fixture and intentionally
|
|
do not depend on the richer ``project`` fixture from
|
|
``test_subdirectory_hints.py`` so the file is runnable standalone.
|
|
"""
|
|
|
|
from agent.subdirectory_hints import SubdirectoryHintTracker
|
|
|
|
|
|
class TestSubdirectoryHintTrackerTildeRobustness:
|
|
"""Regression: literal ``~`` in tool-call args must not crash the walker."""
|
|
|
|
def test_tilde_approximately_in_command_does_not_crash(self, tmp_path):
|
|
"""LLMs use ``~`` for "approximately" (e.g. ``~500 agencies``).
|
|
|
|
``pathlib.Path('~500-700').expanduser()`` raises ``RuntimeError`` —
|
|
the walker must catch this, not propagate it as a tool failure.
|
|
"""
|
|
tracker = SubdirectoryHintTracker(working_dir=str(tmp_path))
|
|
# Heredoc-style terminal command body containing "~500-700"
|
|
# used as "approximately 500-700"
|
|
cmd = (
|
|
"cat > out.md <<EOF\n"
|
|
"Segment size signal: ~500-700 agencies in DACH region.\n"
|
|
"CVE volume: ~45,000 disclosed in 2025.\n"
|
|
"Founder blended rate: ~80/hr.\n"
|
|
"EOF"
|
|
)
|
|
# Must not raise — return value can be None / empty
|
|
tracker.check_tool_call("terminal", {"command": cmd})
|
|
|
|
|
|
def test_valid_tilde_user_still_works(self, tmp_path):
|
|
"""The fix must not regress the legitimate-tilde-user path.
|
|
|
|
``~`` alone resolves to ``Path.home()`` and should still be
|
|
recognised as a candidate path (no exception either way).
|
|
"""
|
|
tracker = SubdirectoryHintTracker(working_dir=str(tmp_path))
|
|
tracker.check_tool_call("terminal", {"command": "ls ~/Documents"})
|
|
# No exception, no assertion required
|