Дата аудиту: 2026-06-13
Директорія: /Users/admin/_Projects/hermes-agent-evolution
Версія проєкту: 0.16.0 (hermes_cli/__init__.py:17)
Upstream sync: v2026.6.5 (.evolution/upstream-sync-state.json)
| Показник | Значення |
|---|---|
| Python-файлів | 2239 |
| Рядків Python-коду | ~515 660 |
| Рядків Python-тестів | ~544 163 |
| Співвідношення тест/код | 1.06× |
| TypeScript/TSX-файлів | 833 |
| Рядків TS/TSX-коду | ~126 000 |
| Загальна кількість тестів | 30 619+ |
| Залежностей у venv | 136 |
Розмір uv.lock |
618 KB |
| Активність за 30 днів | 3046 комітів |
- Ізоляція тестів —
scripts/run_tests_parallel.pyзапускає кожен тестовий файл у окремому процесі, що закриває міжфайлове забруднення стану. - Hermetic fixtures —
tests/conftest.pyскидає credential-змінні середовища, ізолюєHERMES_HOME, фіксуєTZ=UTCіPYTHONHASHSEED=0. - Windows-footguns guard —
scripts/check-windows-footguns.pyпройшов без знахідок (624 file(s) scanned). - Guard оновлення —
_validate_critical_files_syntax()уhermes_cli/main.pyперевіряє синтаксис критичних файлів післяgit pull. - CODEOWNERS для evolution — критичні шляхи self-update, CI, cron та evolution-skills вимагають рев’ю власника (
.github/CODEOWNERS). - UV lockfile синхронізований —
uv lock --checkпройшов успішно. - Політика pinning —
pyproject.tomlвикористовує exact-pinned залежності в ядрі з чітким обґрунтуванням безпеки. - Багатий CI/CD — 17 workflow у
.github/workflows/: тести, lint, supply-chain audit, OSV scanner, Nix, Docker. - Безпечний YAML frontmatter —
agent/skill_utils.py:76використовуєCSafeLoader/SafeLoader. - Актуальна upstream sync-інформація —
.evolution/upstream-sync-state.jsonвідображає synced_through_tag =v2026.6.5.
README.md:7— значокLicense: Apache 2.0.README.md:148— текстApache License 2.0.EVOLUTION_README.md:261—Apache 2.0.LICENSE,pyproject.toml:22,package.json:29,README.ur-pk.md,README.zh-CN.md— MIT.
Виправлення: привести README.md та EVOLUTION_README.md до MIT або змінити LICENSE і всі metadata на Apache 2.0. Рекомендовано MIT, оскільки більшість файлів уже вказують MIT.
package.json:3—"version": "1.0.0"(не відповідаєpyproject.toml:10=0.16.0).package.json:27—repository.url=https://github.com/NousResearch/Hermes-Agent.git.
Виправлення:
"version": "0.16.0",
"repository": {
"type": "git",
"url": "git+https://github.com/Lexus2016/hermes-agent-evolution.git"
}Запущено 2 з 6 slices:
- Slice 1/6: 139 passed, 6 failed (
tests/hermes_cli/test_gateway_service.py) — через відсутність user systemd/D-Bus на macOS. - Slice 2/6: 252 passed, 13 failed:
tests/hermes_cli/test_gateway_service.py(6) — systemd;tests/hermes_cli/test_gateway_wsl.py(2) — WSL-only;tests/agent/test_bedrock_integration.py(1) — AWS credentials;tests/acp/test_permissions.py::test_scheduler_failure_closes_permission_coroutine— coroutine frame cleanup;tests/tools/test_file_state_registry.py(2) —/var/folders/...визнається sensitive system path;tests/test_tui_gateway_server.py::test_browser_manage_connect_default_local_reports_launch_hint.
Виправлення: додати @pytest.mark.skipif(sys.platform == "darwin", ...) або подібні guards для платформо-специфічних тестів.
tests/tools/test_file_state_registry.py:283 падає з помилкою:
{'error': 'Refusing to write to sensitive system path: /var/folders/...'}Логіка в tools/file_operations.py/tools/write_file вважає /var/folders системним шляхом, хоча це стандартний macOS temp.
Виправлення: розширити білий список temp-директорій для macOS (/var/folders/).
Команда ty check --output-format concise . завершилася з:
Found 8913 diagnostics
WARN A fatal error occurred while checking some files.
Приклади:
utils.py:195:28—Expected Path, found str.utils.py:261:28—Expected Path, found str.tui_gateway/server.py:9308:50— type mismatch.
Вплив: регресії типів не ловляться CI, бо lint.yml використовує ty лише в advisory-режимі (--exit-zero).
Покращення: виправляти критичні типи поступово, починаючи з core (run_agent.py, model_tools.py, hermes_state.py, utils.py).
Великі модулі без відповідних тестів:
| Файл | Рядків |
|---|---|
gateway/run.py |
16 015 |
cli.py |
13 701 |
hermes_cli/main.py |
11 730 |
tui_gateway/server.py |
9 468 |
hermes_cli/auth.py |
7 864 |
plugins/platforms/discord/adapter.py |
6 633 |
gateway/platforms/telegram.py |
6 179 |
run_agent.py |
5 361 |
gateway/platforms/yuanbao.py |
5 057 |
gateway/platforms/base.py |
4 841 |
agent/conversation_loop.py |
4 221 |
Покращення: рефакторити на mixins/модулі та додати unit-тести.
Розподілені по cli.py, batch_runner.py, hermes_cli/main.py, hermes_cli/web_server.py тощо.
Покращення: замінити на structured logging (hermes_logging.py).
hermes_cli/xai_retirement.py:207:yaml = YAML(typ="rt") doc = yaml.load(fh)
ruamel.yaml.YAML(typ="rt")— round-trip loader, безпечний для довірених файлів, але краще явно використовуватиSafeLoader.
Покращення: додати коментар або перейти на SafeLoader.
cli.py:7545— quick commands (user-defined).tools/transcription_tools.py:1236— local STT command template з user env varLOCAL_STT_COMMAND_ENV.hermes_cli/tools_config.py:813— встановленняcua-driverчерезcurl | bash.hermes_cli/mcp_catalog.py:367— bootstrap commands для MCP catalog.
Ризик: command injection у місцях, де вхідні дані можуть містити пробіли/метасимволи.
Покращення: де можливо, використовувати список аргументів замість shell; для обов’язкових shell-викликів додати валідацію вхідних даних.
У .env.example є:
HERMES_QWEN_BASE_URL(рядок 116)HERMES_DOCKER_BINARY(рядок 179)HERMES_HUMAN_DELAY_MODE/HERMES_HUMAN_DELAY_MIN_MS/HERMES_HUMAN_DELAY_MAX_MS(рядки 375–377)
AGENTS.md прямо забороняє нові HERMES_* env-змінні для non-secret config; усе поведінкове налаштування має йти в config.yaml.
Виправлення: перенести ці параметри в config.yaml/hermes_cli/config.py.
pytest.mark.xdist_groupуtests/hermes_cli/test_dashboard_auth_*.py.pytest.mark.sshуtests/tools/test_file_sync_perf.py.
Викликає PytestUnknownMarkWarning і може ламати запуск з --strict-markers.
Виправлення: додати marks у [tool.pytest.ini_options] markers у pyproject.toml:
markers = [
"integration: ...",
"real_concurrent_gate: ...",
"xdist_group: ...",
"ssh: ...",
]EVOLUTION_README.md:253:Запустіть тести:
pytest tests/
Канонічний запуск — python scripts/run_tests_parallel.py або scripts/run_tests.sh.
Виправлення: оновити інструкцію.
tests/acp_adapter/tests/hermes_state/tests/openviking_plugin/tests/plugins/dashboard_auth/tests/plugins/model_providers/tests/scripts/tests/skills/tests/stress/tests/tool_cache/
Це не критично для pytest, але може викликати проблеми з імпортами.
README.md не згадує, що це форк, і спрощує ризики автономного self-merging.
Покращення: додати посилання на SECURITY_EVOLUTION.md та EVOLUTION_README.md в шапці README.md.
toolsets.py:_HERMES_CORE_TOOLS містить 35+ інструментів. Хоча багато gated через check_fn, сама схема велика.
Покращення: перенести менш універсальні інструменти (kanban, computer-use) у service-gated extras або MCP.
scripts/release.py:1303:"23yntong@stu.edu.cn": "iuyup", # PR #6155 salvage (shell=True hardening)
Перевірити, чи це справжній обліковий запис/ключ. Коментар виглядає підозрілим.
discord-py імпортує audioop, який deprecated у Python 3.12 і буде видалений у 3.13.
Покращення: оновити discord-py або додати fallback.
3046 комітів за 30 днів. Ймовірно, це squash/rebase-імпорт upstream або автоматичні коміти evolution.
Ризик: важко рев’ювити історію та бісектити регресії.
Покращення: впровадити політику squash merge та осмислені commit messages.
- Виправити ліцензію в
README.mdтаEVOLUTION_README.mdна MIT. - Оновити
package.json:version→0.16.0,repository.url→ форк. - Пофіксити macOS-специфічні тести (
test_file_state_registry.py,test_gateway_service.py,test_gateway_wsl.py). - Зареєструвати
xdist_groupтаsshmarks уpyproject.toml.
- Перенести
HERMES_QWEN_BASE_URL,HERMES_DOCKER_BINARY,HERMES_HUMAN_DELAY_*з.env.exampleуconfig.yaml. - Додати
__init__.pyу тестові пакети, де цього бракує. - Перевірити
scripts/release.py:1303та видалити/пояснити hardcoded значення. - Додати platform-guards для systemd/WSL-тестів.
- Виправити
yaml.loadуhermes_cli/xai_retirement.py.
- Почати рефакторинг god-файлів (
gateway/run.py,cli.py,hermes_cli/main.py) на mixins. - Поступово знижувати кількість
tydiagnostics (ціль: <1000). - Замінити частину
print()на logging. - Зменшити кількість core tools у схемі, переносячи нішеві інструменти в extras/MCP.
Проєкт hermes-agent-evolution — це масштабний, активно розвиваний форк Hermes Agent із сильними інженерними практиками (isolated tests, supply-chain pinning, Windows guards, evolution safety gate). Основні ризики зараз — це документаційні невідповідності, платформо-специфічні падіння тестів на macOS та велика технічна заборгованість у типах і розмірі модулів. Критичні проблеми не блокують production на Linux, але ускладнюють локальну розробку та довгострокову підтримку.