hermes-agent/tests
ethernet 3f867b2ca9 feat(lints): require an age-gated .npmrc beside every package-lock.json
npm reads the project's own .npmrc, $HOME, and the global config. It
does not walk up parent directories (npm/npm#11437 is still open), so
the root .npmrc gates the root install and nothing else. Two nested
projects were resolving with no supply-chain quarantine at all:
scripts/whatsapp-bridge and plugins/platforms/photon/sidecar. Both now
carry their own gate, and `npm ci` in each returns its lockfile
byte-identical.

A project is a directory holding both package-lock.json and
package.json -- the pair npm resolves against. A lockfile with no
manifest beside it is a vendored artifact; nix/ keeps one for a
hash-pinned fetch that never consults npm config.

The required floor is read from the root .npmrc instead of hardcoded,
so the standard is raised in one place. A nested project may be
stricter, never weaker.
2026-08-14 09:04:06 -04:00
..
acp fix(approval): classify CLI/TUI approval timeouts separately from explicit denials 2026-08-02 20:21:59 -07:00
acp_adapter fix(security): redact terminal exception results and ACP stderr logs (#77484) 2026-08-08 04:19:49 -07:00
agent fix(cli): guard expensive startup model overrides 2026-08-14 01:31:31 -07:00
ci fix(ci): stop running uv lock --check on PRs that can't touch the lockfile (#84675) 2026-08-12 13:30:01 -05:00
cli fix: persist provider on model switch and add billing_provider fallback 2026-08-14 14:39:08 +05:30
computer_use test: run os-specific tests on their real host, not a faked one 2026-08-09 22:09:49 -04:00
conformance test: prune wave 2 + speed fixes — 28,106 → 19,757 test functions, suite wall 315s → 294s 2026-07-29 13:39:40 -07:00
cron test(cron): reconcile summarizer tests with honest chain wording and composed no_agent gate 2026-08-13 11:49:24 -07:00
dashboard test: prune wave 2 + speed fixes — 28,106 → 19,757 test functions, suite wall 315s → 294s 2026-07-29 13:39:40 -07:00
docker fix(docker): update runtime tests and docs for the entrypoint dispatcher 2026-08-01 10:52:34 -07:00
e2e test(relay): gate native Anthropic streaming in e2e 2026-07-28 08:25:25 -07:00
fakes
…
fixtures feat(computer_use): align cua-driver 0.9 contracts 2026-07-29 12:19:37 -07:00
gateway fix(gateway): keep process notification routing off-loop 2026-08-14 01:21:52 -07:00
hermes_cli fix(tests): resolve cost-guard fixture collision between pricing distrust and gpt-5.5-pro confusion nudge (#85970) 2026-08-14 02:03:38 -07:00
hermes_state fix(state): make a rewind truncation recoverable instead of a hard DELETE (#82756) 2026-08-10 11:01:15 +05:30
honcho_plugin fix(honcho): gate memory-file migration on the declared owner 2026-08-13 23:43:15 +05:30
install test(install): prove updating from a release reaches this commit 2026-08-04 17:36:26 -04:00
integration
…
lints feat(lints): require an age-gated .npmrc beside every package-lock.json 2026-08-14 09:04:06 -04:00
manual
…
monitoring fix(otlp): span exporter now inherits configured resource_attributes 2026-08-08 18:11:02 -07:00
openviking_plugin fix(openviking): integrate reliability and configuration hardening 2026-08-03 20:35:47 +05:30
plugins fix(memory): complete discovery and registration parity for out-of-tree providers 2026-08-13 11:49:14 -07:00
providers fix: gate entry-point provider scan on plugins.enabled and skip register(ctx) targets 2026-08-13 11:11:53 -07:00
run_agent fix(compression): clear preflight block on provider-confirmed rearm 2026-08-13 23:43:54 -07:00
scripts test(ci): close the pytest-wrapper gap for check-windows-footguns.py 2026-08-13 02:38:28 -07:00
secret_sources fix(plugins): isolate ownership by profile 2026-08-12 19:13:32 -07:00
skills chore(skills/box): Hermes-compliance polish + docs registration 2026-08-13 22:09:44 -07:00
state fix(state): keep canonical writes available when FTS is corrupt 2026-08-09 14:10:21 -07:00
stress fix(tests): read and write test files as UTF-8 so the suite runs on Windows 2026-08-08 12:33:19 -07:00
tools test: use tmp_path fixture for import test HERMES_HOME 2026-08-14 17:48:28 +05:30
tui_gateway test(approval): cover CLI EXEC_ASK leak and fix slash-worker Path mock 2026-08-14 17:48:28 +05:30
verify Integrate verify subsystem with the existing verification stack 2026-08-07 10:11:05 -07:00
website fix(skills-hub): include owner in ClawHub source URLs and add retry on 429 (#51236) 2026-07-31 22:33:11 -07:00
__init__.py
…
conftest.py fix: scope plugin manager by resolved hermes home (keyed cache) 2026-08-12 19:13:32 -07:00
run_interrupt_test.py
…
test_account_usage.py
…
test_atomic_replace_symlinks.py test(utils): cover contended Windows renames on the Windows CI lane 2026-08-12 17:25:30 -05:00
test_atomic_write_text_metadata.py fix(utils): tighten create_mode semantics and close the yaml 0600 transit window 2026-08-06 05:00:17 +05:30
test_audio_playback_guard.py fix: use handle_request for voice.toggle in audio guard test 2026-08-13 22:44:23 +05:30
test_background_review_list_shapes.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_background_review_session_isolation.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_base_url_hostname.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_batch_runner_checkpoint.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_batch_runner_durability.py refactor: dedupe fallback warning per model, drive pool-cleanup tests through real run() 2026-08-01 15:05:05 +05:30
test_bitwarden_secrets.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_cli_manual_compress.py
…
test_cli_skin_integration.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_code_skew.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_command_secret_source.py fix(gateway): hydrate cold profile secret sources 2026-08-02 00:11:50 -07:00
test_conftest_wal_gate.py
…
test_copilot_initiator.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_credential_file_permissions.py
…
test_ctx_halving_fix.py fix(tests): eliminate flaky/broken tests — shadow sys.path inserts, unmocked network in compressor tests, stale-SDK feishu pin guard, quadratic redact regexes 2026-07-29 15:12:28 -07:00
test_delegate_cascade_49148.py
…
test_dispatch_session_id.py
…
test_empty_model_fallback.py feat(models): add qwen3.8-max to Nous portal + OpenRouter catalogs, replacing qwen3.7-max 2026-08-03 17:19:49 -07:00
test_empty_session_hygiene.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_env_loader_applied_homes.py
…
test_env_loader_op_bootstrap.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_env_loader_secret_sources.py fix(env): seed .op.env bootstrap into cold-profile hydration 2026-08-02 00:11:50 -07:00
test_estop.py fix: post-merge audit follow-ups for #81138/#81139/#81141/#81148 2026-08-08 05:21:09 -07:00
test_evidence_store.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_fast_safe_load.py
…
test_fts_cjk_bigram.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_fts_update_of_narrowing.py fix(state): quarantine CJK when ensure soft-fails after OF migration 2026-08-03 20:30:32 +05:30
test_gateway_streaming_nested_config.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_get_tool_definitions_cache_isolation.py fix(plugins): isolate ownership by profile 2026-08-12 19:13:32 -07:00
test_hermes_bootstrap.py test: run os-specific tests on their real host, not a faked one 2026-08-09 22:09:49 -04:00
test_hermes_constants.py test: run os-specific tests on their real host, not a faked one 2026-08-09 22:09:49 -04:00
test_hermes_home_profile_warning.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_hermes_logging.py test: run os-specific tests on their real host, not a faked one 2026-08-09 22:09:49 -04:00
test_hermes_state.py fix(sessions): close the session_switch legacy gap and fence the resume walker at reset boundaries 2026-08-13 23:45:21 +05:30
test_hermes_state_compression_busy_retry.py fix(sessions): briefly wait out a live compression lock instead of killing the turn 2026-07-31 22:35:07 -07:00
test_hermes_state_compression_locks.py test: run os-specific tests on their real host, not a faked one 2026-08-09 22:09:49 -04:00
test_hermes_state_readonly_preflight.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_hermes_state_wal_fallback.py fix(state): reconcile salvaged WAL fixes with current main 2026-07-29 18:13:09 -07:00
test_hermetic_side_effect_guards.py test: guard browser and Keychain side effects suite-wide (#35404) 2026-07-29 18:55:10 -07:00
test_honcho_client_concurrency.py
…
test_honcho_client_config.py fix(honcho): honor explicit top-level apiKey on local base_urls; warn on keyless profile host blocks 2026-08-13 23:43:15 +05:30
test_honcho_session_context.py
…
test_honcho_startup_fail_open.py fix(honcho): honor writeFrequency in sync_turn by routing through manager.save() 2026-08-13 23:43:15 +05:30
test_install_autostash_conflict_recovery.py
…
test_install_commit_pin_rollback.py fix(installer): never let a stale --commit pin roll an install backwards 2026-07-29 17:35:16 -05:00
test_install_diverged_update.py
…
test_install_lockfile_churn.py
…
test_install_macos_launcher.py fix(install): avoid realpath-dependent uv launcher on macOS 2026-07-26 19:30:32 -07:00
test_install_no_initial_commit.py
…
test_install_ps1_ascii_only.py
…
test_install_ps1_browser_install.py fix(install): stop npm-installing agent-browser eagerly in install.sh/install.ps1 2026-08-13 02:38:28 -07:00
test_install_ps1_native_stderr_eap.py
…
test_install_ps1_node_path_for_npm.py
…
test_install_ps1_python_fallback_venv.py
…
test_install_ps1_uv_powershell_host.py
…
test_install_ps1_venv_process_tree.py fix(install): stop managed runtime child trees on Windows 2026-08-08 19:46:35 -07:00
test_install_ps1_web_server_syntax_probe.py
…
test_install_scripts_computer_use.py feat(computer-use): provision cua-driver at install time and on toolset enable 2026-08-13 02:44:48 -07:00
test_install_sh_acp_launcher.py fix(install): expose hermes-agent and hermes-acp launchers on PATH 2026-07-31 22:39:11 -07:00
test_install_sh_bootstrap_marker.py
…
test_install_sh_browser_install.py fix(install): stop npm-installing agent-browser eagerly in install.sh/install.ps1 2026-08-13 02:38:28 -07:00
test_install_sh_install_method_stamp.py
…
test_install_sh_node_deps_failure.py fix(install): a failed Node dependency install now fails the install instead of printing success (#85537) 2026-08-13 18:39:54 +00:00
test_install_sh_node_global_prefix.py
…
test_install_sh_node_npm_check.py fix(install): a failed Node dependency install now fails the install instead of printing success (#85537) 2026-08-13 18:39:54 +00:00
test_install_sh_pythonpath_sanitization.py
…
test_install_sh_root_fhs_uv_python_path.py
…
test_install_sh_setup_wizard_tty_probe.py
…
test_install_sh_symlink_stomp.py
…
test_install_sh_termux_network_prereqs.py
…
test_install_unmerged_index.py
…
test_ipv4_preference.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_iron_proxy.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_iron_proxy_cli.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_iron_proxy_e2e.py
…
test_journal_mode_config.py fix(state): make journal mode canonical and behaviorally verified 2026-07-29 18:13:09 -07:00
test_lazy_session_regressions.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_list_recent_user_messages_handoffs.py refactor(agent): fold simplify findings — DB picker parity, single scan, canonical strip delegation 2026-08-07 19:44:35 +05:30
test_live_system_guard.py test(tui_gateway): make the tui gateway suite order-independent 2026-07-29 21:30:53 -07:00
test_live_system_guard_self_test.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_log_isolation.py fix(tests): stop the suite writing into the operator's real Hermes logs 2026-07-29 19:53:17 -07:00
test_managed_runtime_resolution.py fix: ASCII-only install.ps1 comment; allow-list install_cli's uv PATH fallback 2026-08-11 17:06:15 -05:00
test_mcp_serve.py fix(mcp): avoid replaying historical events on startup (#13414) 2026-08-01 13:13:30 +05:30
test_message_reactions.py fix(state): make _row_id opt-in per consumer instead of universal 2026-07-30 00:08:28 -05:00
test_mini_swe_runner.py
…
test_minimax_model_validation.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_minimax_oauth.py fix(minimax-oauth): read streamed error bodies inside the client context + real-transport tests 2026-08-03 17:38:13 +05:30
test_minisweagent_path.py
…
test_model_forces_max_completion_tokens.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_model_picker_scroll.py fix(tests): eliminate flaky/broken tests — shadow sys.path inserts, unmocked network in compressor tests, stale-SDK feishu pin guard, quadratic redact regexes 2026-07-29 15:12:28 -07:00
test_model_tools.py Merge updated model metrics into tool metrics 2026-07-31 07:18:02 -07:00
test_model_tools_async_bridge.py
…
test_ollama_num_ctx.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_onepassword_secrets.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_os_marker_gating.py test: convert the last host-OS fakes and guard double markers 2026-08-09 22:09:49 -04:00
test_output_cap_parsing.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_packaging_build_guard.py
…
test_packaging_metadata.py lints: migrate tests + infographic workflow, add dep-specifier lints 2026-08-14 08:33:55 -04:00
test_plugin_skills.py fix: support packaged memory provider skills 2026-08-13 11:49:14 -07:00
test_plugin_utils.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_process_loop_event_loop_warning.py
…
test_profile_isolation_runtime.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_project_metadata.py Revert "remove Vercel AI Gateway and Vercel Sandbox (#33067)" 2026-07-29 19:48:37 -07:00
test_pty_keepalive_ws.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_pty_session.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_redaction_registry.py feat(plugins): per-source pattern attribution + explicit pre-screen rebuild proof 2026-08-12 18:55:14 -07:00
test_resource_limits.py fix(cli): never reap serve processes owned by a valid backend.lock.json 2026-08-10 17:02:56 -07:00
test_retry_utils.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_run_tests_parallel.py fix(testing): tolerate legacy console encodings 2026-08-08 12:33:19 -07:00
test_run_tests_parallel_stdio.py fix(test-runner): native Windows venv probe + glyph-safe stdio 2026-07-29 21:30:53 -07:00
test_sanitize_tool_error.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_schema_read_probe.py fix(dashboard): derive the stale-schema read probe from SCHEMA_SQL 2026-08-07 00:41:58 -04:00
test_search_slow_query_log.py
…
test_secret_scope_plugin_families.py fix(secrets): resolve google_meet realtime key via secret scope at spawn time 2026-08-02 10:04:48 -07:00
test_session_db_read_conn_pool.py state: bound PEAK read connections with a permit, not just pooled returns 2026-08-10 17:02:56 -07:00
test_session_db_read_path_split.py state: pool SessionDB read connections instead of leaking one per (SessionDB x thread) 2026-08-10 17:02:56 -07:00
test_session_skill_previews.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_session_system_prompt_dedup.py fix(state): deduplicate session system prompts 2026-08-03 20:37:17 +05:30
test_session_vacuum_config.py fix(state): make VACUUM interval configurable 2026-08-02 21:32:13 +05:30
test_session_workspace_binding.py
…
test_slack_thread_require_mention.py
…
test_slash_worker_watchdog.py
…
test_sql_injection.py
…
test_sqlite_lock_safe_inspection.py fix(cli): untrack sqlite connections only after close succeeds 2026-07-31 23:18:12 -07:00
test_sqlite_wal_reset_gate.py fix(db): never downgrade journal mode on a database with concurrent openers 2026-08-06 07:49:42 -07:00
test_stale_tool_call_marker_session_repair.py fix(cli): back up state.db before clean-markers writes by default 2026-08-04 11:26:15 +05:30
test_stale_utils_module_import.py
…
test_state_db_malformed_repair.py fix(state): make a refused pre-repair backup a hard stop (#69603) 2026-08-12 19:43:29 -07:00
test_state_db_notadb_selfheal.py fix(state): self-heal 'file is not a database' write connections + retry transient EIO on journal-mode probe 2026-08-12 19:43:41 -07:00
test_state_db_stats.py review follow-ups: canonical classifier in hermes_state, compression-busy=locked, hedged gateway wording, drop dead constant 2026-08-08 14:18:26 +05:30
test_subprocess_home_isolation.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_telegram_polling_progress_ptb.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_termux_all_extra_compat.py
…
test_timezone.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_tini_shim.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_toolset_distributions.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_toolsets.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
test_trajectory_compressor.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_trajectory_compressor_async.py
…
test_transform_api_error_classification_hook.py chore: trim hook test suite to core coverage and condense hooks docs 2026-08-13 09:36:02 -07:00
test_transform_llm_output_hook.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_transform_tool_result_hook.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_tui_entry_mcp_owner.py fix(review): harden portable plugin boundaries 2026-08-07 09:44:21 -07:00
test_tui_gateway_loop_noise.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_tui_gateway_queue_on_busy.py fix(tui): preserve queued image ownership 2026-08-01 15:58:42 +05:30
test_tui_gateway_server.py fix(tui_gateway): restore openrouter provider on session resume 2026-08-14 02:02:18 +05:30
test_tui_gateway_server_crash_history.py fix: preserve session history when a turn crashes 2026-08-06 23:08:23 -05:00
test_tui_gateway_ws.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_tui_mcp_late_refresh.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
test_utils_atomic_roundtrip_yaml_save.py fix(personality): preserve config comments in TUI/gateway config writes 2026-08-09 13:43:14 -07:00
test_utils_truthy_values.py
…
test_voice_max_recording_seconds.py fix(voice): enforce voice.max_recording_seconds (was dead config) 2026-07-28 11:57:37 -07:00
test_wal_checkpoint_strategy.py fix(ci): sync lazy_deps SDK pins + update WAL vacuum test contract 2026-08-12 20:02:07 -07:00
test_web_server.py test: run os-specific tests on their real host, not a faked one 2026-08-09 22:09:49 -04:00
test_web_server_sessiondb_eventloop.py fix(dashboard): preserve maintenance writes on read polling 2026-08-02 21:30:54 +05:30
test_web_server_status_topology_cache.py fix(serve): cache /api/status profile-gateway topology scan 2026-08-02 23:10:28 +05:30
test_windows_subprocess_no_window_flags.py test(browser): cover warm_agent_browser_npx_cache's hardened behavior 2026-08-13 02:38:28 -07:00
test_yaml_indent_consistency_31999.py
…
test_yuanbao_integration.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_yuanbao_markdown.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_yuanbao_pipeline.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_yuanbao_proto.py test: prune low-value tests suite-wide (wave 1) — 46,820 → 28,106 test functions 2026-07-29 13:10:23 -07:00
test_yuanbao_reconnect_set_active.py
…
test_yuanbao_shutdown.py
…
test_zeroed_state_db.py
…