Files
hermes-agent/tests/scripts/test_check_agents_md_size.py
Teknium e1ec584b57 feat(ci): cap every AGENTS.md chain below the context budget it is truncated at
scripts/ci/check_agents_md_size.py (in scripts/check and lint.yml): root <= 12k, every
AGENTS.md plus its ancestors <= 30k (the joined root->cwd block on a 128k window, minus
the per-file labels), every area file <= _MAX_HINT_CHARS read from the source so the two
cannot drift. On origin/main it reports the root and all 11 root-to-area chains over.
2026-10-04 23:05:42 -07:00

38 lines
1.8 KiB
Python

"""scripts/ci/check_agents_md_size.py: every AGENTS.md chain an agent can load stays under the cap it is truncated at."""
import subprocess
import sys
from pathlib import Path
SCRIPT = Path(__file__).resolve().parents[2] / "scripts" / "ci" / "check_agents_md_size.py"
def _repo(tmp_path, files):
(tmp_path / "agent").mkdir(parents=True)
(tmp_path / "agent" / "subdirectory_hints.py").write_text("_MAX_HINT_CHARS = 32_000\n")
for rel, chars in files.items():
(tmp_path / rel).parent.mkdir(parents=True, exist_ok=True)
(tmp_path / rel).write_text("x" * chars)
(tmp_path / "untracked").mkdir()
(tmp_path / "untracked" / "AGENTS.md").write_text("u" * 40_000)
subprocess.run(["git", "init", "-q"], cwd=tmp_path, check=True)
subprocess.run(["git", "add", "agent", *files], cwd=tmp_path, check=True)
return tmp_path
def _check(repo):
return subprocess.run([sys.executable, str(SCRIPT), str(repo)], capture_output=True, text=True, check=False)
def test_budget_is_per_chain_from_the_root_down(tmp_path):
# Each file alone is small; root + app + app/src together is what an agent working in app/src loads.
fits = {"AGENTS.md": 12_000, "app/AGENTS.md": 10_000, "app/src/AGENTS.md": 8_000, "lib/AGENTS.md": 18_000}
ok = _check(_repo(tmp_path / "ok", fits))
assert ok.returncode == 0, ok.stdout
nested = _check(_repo(tmp_path / "nested", {**fits, "app/src/AGENTS.md": 8_001}))
assert nested.returncode == 1
assert "AGENTS.md + app/AGENTS.md + app/src/AGENTS.md: 30001 chars > 30000 chain cap" in nested.stdout
assert "lib/" not in nested.stdout and "untracked" not in nested.stdout
root = _check(_repo(tmp_path / "root", {"AGENTS.md": 12_001}))
assert root.returncode == 1 and "AGENTS.md: 12001 chars > 12000 cap" in root.stdout