hermes-agent/tests/tools
Ben Barclay 4440d77bf3
fix(update): scope install-method stamp to the code tree, not $HERMES_HOME (#48188)
The install method (docker/git/pip/...) describes the *running binary*, but
detect_install_method() read it from $HERMES_HOME/.install_method — a shared
DATA directory. The Docker docs deliberately bind-mount $HERMES_HOME
(~/.hermes:/opt/data) so config/sessions/memory persist and can be shared with
a host-side Desktop/CLI install.

When a containerized gateway and a host install share one $HERMES_HOME, the
home-scoped stamp is a single slot describing two installs: the published image
stamps 'docker' on every boot, the host install then reads 'docker' and the
in-app updater refuses to run 'hermes update' ("doesn't apply inside the Docker
container"). Reinstalling the Desktop app from the DMG doesn't help because the
contaminated stamp is re-read every time.

Fix (option 1 — code-scoped stamp):
- detect_install_method() reads <install tree>/.install_method first (next to
  the running code, immune to the shared data dir). It falls back to the legacy
  $HERMES_HOME stamp for back-compat, but IGNORES a 'docker' home stamp when
  not actually containerized — so already-poisoned shared homes self-heal.
- stamp_install_method() writes the code-scoped stamp.
- install.sh stamps $INSTALL_DIR instead of $HERMES_HOME.
- Dockerfile bakes 'docker' into /opt/hermes/.install_method at build time
  (inside the immutable block); stage2-hook.sh no longer writes the home stamp
  and proactively removes a stale 'docker' one to heal existing shared homes.

Genuine containers still resolve to 'docker' (baked stamp, or legacy home stamp
honored when containerized). Unstamped installs in generic containers still fall
through to git/pip (preserves the #34397 fix).
2026-06-18 14:14:41 +10:00
..
__init__.py
conftest.py test(tools): centralize disable_lazy_stt_install fixture in conftest 2026-05-22 03:33:01 -07:00
test_accretion_caps.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_ansi_strip.py
test_approval.py fix(approval): gate in-place edits to sensitive user files 2026-06-13 14:35:27 -07:00
test_approval_heartbeat.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_approval_plugin_hooks.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_async_delegation.py feat(delegation): async background subagents via delegate_task(background=true) (#40946) 2026-06-15 13:33:12 -07:00
test_base_environment.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_blueprints.py refactor(cron): rebrand Cron Recipes -> Automation Blueprints 2026-06-11 10:49:47 -07:00
test_browser_camofox.py fix(browser): rewrite Camofox Docker loopback URLs (#25541) 2026-05-29 15:43:55 +10:00
test_browser_camofox_persistence.py feat(browser): support externally managed Camofox sessions 2026-05-12 15:14:49 -07:00
test_browser_camofox_state.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_browser_cdp_override.py Support browser CDP URL from config 2026-04-17 16:05:04 -07:00
test_browser_cdp_tool.py fix(tests): resolve 17 persistent CI test failures (#15084) 2026-04-24 03:46:46 -07:00
test_browser_chromium_check.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_browser_cleanup.py
test_browser_cloud_fallback.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_browser_cloud_provider_cache.py fix(browser_tool): fall through to autodetect on config read failure 2026-05-09 13:35:39 -07:00
test_browser_console.py refactor(vision): consolidate native fast-path gate into one shared helper 2026-05-29 03:58:56 -07:00
test_browser_content_none_guard.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_browser_eval_supervisor_path.py fix(browser): recover from CDP DOM-node serialization crash in browser_console (#35385) 2026-05-30 07:31:25 -07:00
test_browser_hardening.py fix: harden salvaged session and browser improvements 2026-06-15 07:46:34 -07:00
test_browser_homebrew_paths.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_browser_hybrid_routing.py feat(browser): auto-spawn local Chromium for LAN/localhost URLs in cloud mode (#16136) 2026-04-26 09:57:58 -07:00
test_browser_lightpanda.py fix(browser): tighten Lightpanda fallback edge cases 2026-05-06 03:41:21 -07:00
test_browser_orphan_reaper.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_browser_secret_exfil.py fix(tools): percent-encode non-ascii URL components 2026-06-07 11:42:26 -06:00
test_browser_ssrf_local.py fix(browser): enforce cloud-metadata SSRF floor in hybrid routing (#16234) (#21228) 2026-05-07 05:38:05 -07:00
test_browser_supervisor.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_browser_supervisor_healthcheck.py test(browser_supervisor): cover cache-hit healthcheck on dead thread/loop 2026-04-30 20:33:33 -07:00
test_budget_config.py
test_checkpoint_manager.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_clarify_gateway.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_clarify_tool.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_clipboard.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_code_execution.py perf(execute-code): stop waiting on idle RPC accept (#45948) 2026-06-13 21:57:15 -07:00
test_code_execution_modes.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_code_execution_windows_env.py fix(code-exec): restore approval context in execute_code RPC threads + guard entry 2026-05-29 03:44:49 -07:00
test_command_guards.py fix(approval): honor glob command allowlist entries (#43051) 2026-06-18 12:48:36 +10:00
test_computer_use.py fix(xai): accept Grok Build code during loopback wait + tiny screenshot guard 2026-06-09 23:21:24 -07:00
test_computer_use_capture_routing.py fix(xai): accept Grok Build code during loopback wait + tiny screenshot guard 2026-06-09 23:21:24 -07:00
test_computer_use_vision_routing.py fix(computer_use): honor custom vision routing 2026-06-07 02:09:20 -07:00
test_config_null_guard.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_credential_files.py fix(slack): make video attachments available to agents (#45512) 2026-06-13 03:33:27 -07:00
test_credential_pool_env_fallback.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_cron_approval_mode.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_cron_prompt_injection.py
test_cronjob_tools.py test(cron): cover provider "custom" → providers.custom resolution 2026-06-10 14:39:03 -07:00
test_cross_profile_guard.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_daytona_environment.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_debug_helpers.py
test_delegate.py feat(desktop): stream subagent activity into watch windows (#47060) 2026-06-16 14:30:11 -04:00
test_delegate_composite_toolsets.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_delegate_subagent_timeout_diagnostic.py feat(desktop): stream subagent activity into watch windows (#47060) 2026-06-16 14:30:11 -04:00
test_delegate_toolset_scope.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_discord_tool.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_docker_config_migrate.py fix(config): preserve custom-provider models maps and metadata through v11->v12 migration (#40573) 2026-06-06 18:43:20 -07:00
test_docker_environment.py test: update docker preflight assertion for stdin=DEVNULL kwarg 2026-06-08 22:46:57 -07:00
test_docker_find.py
test_docker_orphan_reaper_integration.py fix(docker): startup orphan reaper for crashed-process containers 2026-05-29 11:49:54 +10:00
test_dockerfile_immutable_install.py fix(update): scope install-method stamp to the code tree, not $HERMES_HOME (#48188) 2026-06-18 14:14:41 +10:00
test_dockerfile_node_modules_perms.py Harden hosted Docker install tree against self-modification (#47490) 2026-06-18 09:09:21 +10:00
test_dockerfile_pid1_reaping.py fix(docker): pre-install matrix deps in Docker image (#30399) (#42413) 2026-06-10 19:23:06 +10:00
test_env_passthrough.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_env_probe.py feat(prompt): universal task-completion guidance + local Python toolchain probe (#34340) 2026-05-28 22:26:09 -07:00
test_execute_code_approval_cluster.py fix(approval): check is_approved in execute_code guard (#39275) 2026-06-04 19:40:30 -07:00
test_feishu_tools.py feat: add Feishu document comment intelligent reply with 3-tier access control 2026-04-17 19:04:11 -07:00
test_file_operations.py feat(search_files): headroom compression evaluation report + lossless densification (#47866) 2026-06-17 13:45:25 -07:00
test_file_operations_edge_cases.py perf(read_file): compact line-number gutter — ~14% fewer tokens per read (#35368) 2026-05-30 07:01:22 -07:00
test_file_ops_cwd_tracking.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_file_read_guards.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_file_staleness.py fix(file_tools): resolve bookkeeping paths against live terminal cwd 2026-04-23 15:11:52 -07:00
test_file_state_registry.py feat(delegate): cross-agent file state coordination for concurrent subagents (#13718) 2026-04-21 16:41:26 -07:00
test_file_sync.py
test_file_sync_back.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_file_sync_perf.py
test_file_tools.py fix(file_tools): block agent writes to ~/.hermes/config.yaml to prevent silent approval bypass 2026-06-01 03:29:48 -07:00
test_file_tools_container_config.py fix(tools): respect session cwd in file tools 2026-06-15 14:00:42 +05:30
test_file_tools_cwd_resolution.py fix(tools): respect session cwd in file tools 2026-06-15 14:00:42 +05:30
test_file_tools_live.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_file_write_safety.py fix(file-tools): handle UTF-8 BOM in read_file / write_file / patch (#35278) 2026-05-30 06:25:50 -07:00
test_force_dangerous_override.py
test_fuzzy_match.py fix(patch): widen new_string \t/\r unescape to all match strategies (#33733) 2026-05-28 03:27:20 -07:00
test_gateway_cwd_contract.py test(tools): characterize tool-surface TERMINAL_CWD contract (#29265) 2026-06-01 16:55:04 -07:00
test_hardline_blocklist.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_heartbeat_stale_thresholds.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_hidden_dir_filter.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_homeassistant_tool.py test: use subprocesses for each test file (#29016) 2026-05-21 16:40:04 +05:30
test_image_generation.py feat(image-gen): add GPT Image 2 to FAL catalog (#13677) 2026-04-21 13:35:31 -07:00
test_image_generation_artifacts.py fix(image_gen): expose backend-visible artifact paths 2026-06-06 13:19:07 -07:00
test_image_generation_env.py feat(image-gen): actionable setup message when no FAL backend is reachable (#26222) 2026-05-15 01:33:13 -07:00
test_image_generation_plugin_dispatch.py fix(image-gen): force-refresh plugin providers in long-lived sessions 2026-04-23 03:01:18 -07:00
test_init_session_cwd_respect.py fix(cli): respect terminal.cwd config in local terminal backend 2026-04-28 22:16:08 -07:00
test_interrupt.py test(interrupt): assert no leaked tid instead of no-op block 2026-05-30 07:28:11 -07:00
test_kanban_tools.py fix(kanban): kanban_create inherits the spawning worker's task workspace (#37182) 2026-06-01 21:26:29 -07:00
test_lazy_deps.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_line_ending_preservation.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_llm_content_none_guard.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_local_background_child_hang.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_local_env_blocklist.py fix(terminal): complete sane PATH entries on POSIX (salvage of #35614) (#42653) 2026-06-09 02:21:12 -07:00
test_local_env_cwd_recovery.py fix(local): test root as ancestor candidate; use real pipe for fake stdout 2026-05-04 15:31:47 -07:00
test_local_env_windows_msys.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_local_interrupt_cleanup.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_local_shell_init.py fix(coding): teach agents terminal env state persists 2026-06-11 19:50:08 -05:00
test_local_tempdir.py
test_managed_browserbase_and_modal.py test(approval): regression for shell-escape denylist bypass (#36846, #36847) 2026-06-07 03:57:21 -07:00
test_managed_media_gateways.py test(video_gen): cover gateway decision matrix gaps and 4xx error path 2026-05-29 22:26:24 +05:30
test_managed_modal_environment.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_managed_tool_gateway.py fix(managed-gateway): keep tool availability scans off the Nous token-refresh path 2026-05-30 07:58:08 -07:00
test_mcp_cancelled_error_propagation.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_mcp_capability_gating.py fix(mcp): capability-gate tools/list so prompt-only MCP servers can connect (#44550) 2026-06-11 17:34:49 -07:00
test_mcp_circuit_breaker.py test(mcp): add failing tests for circuit-breaker recovery 2026-04-21 05:19:03 -07:00
test_mcp_client_cert.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_mcp_dynamic_discovery.py fix(ci): recover 38 failing tests on main (#17642) 2026-04-29 20:05:32 -07:00
test_mcp_empty_error_message.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_mcp_image_content.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_mcp_invalid_url.py fix(mcp): validate remote URLs up-front with a clear error (#27105) 2026-05-16 13:06:56 -07:00
test_mcp_loop_profile_override.py fix(mcp): propagate HERMES_HOME override onto the MCP event loop (#44220) 2026-06-11 04:37:01 -07:00
test_mcp_oauth.py fix(mcp): fail fast for noninteractive oauth without tokens 2026-06-15 04:22:07 -07:00
test_mcp_oauth_bidirectional.py fix(mcp-oauth): bidirectional auth_flow bridge + absolute expires_at (salvage #12025) (#12717) 2026-04-19 16:31:07 -07:00
test_mcp_oauth_cold_load_expiry.py fix(mcp-oauth): bidirectional auth_flow bridge + absolute expires_at (salvage #12025) (#12717) 2026-04-19 16:31:07 -07:00
test_mcp_oauth_integration.py fix(mcp): fail fast for noninteractive oauth without tokens 2026-06-15 04:22:07 -07:00
test_mcp_oauth_manager.py fix(mcp): fail fast for noninteractive oauth without tokens 2026-06-15 04:22:07 -07:00
test_mcp_oauth_metadata.py fix(mcp-oauth): persist OAuth server metadata across process restarts (#21226) 2026-05-07 05:35:33 -07:00
test_mcp_preflight_content_type.py fix(mcp): make non-MCP HTTP endpoint fast-fail robust and non-retryable 2026-06-01 19:49:50 -07:00
test_mcp_probe.py fix(mcp): preserve loop during probes 2026-06-14 02:09:45 -07:00
test_mcp_reconnect_signal.py
test_mcp_sse_transport.py fix(mcp): forward OAuth auth and bump sse_read_timeout on SSE transport (#21323) 2026-05-07 07:08:04 -07:00
test_mcp_stability.py fix(mcp): preserve loop during probes 2026-06-14 02:09:45 -07:00
test_mcp_structured_content.py fix(async): close unscheduled coroutines in all threadsafe bridges (#26584) 2026-05-15 14:00:01 -07:00
test_mcp_tool.py refactor: remove agent-callable send_message tool (#47856) 2026-06-17 07:11:23 -07:00
test_mcp_tool_401_handling.py
test_mcp_tool_issue_948.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_mcp_tool_session_expired.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_mcp_utility_capability_gating.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_memory_tool.py fix(memory): instruct in-turn consolidation + retry on overflow (#41755) 2026-06-07 22:16:28 -07:00
test_memory_tool_import_fallback.py
test_memory_tool_schema.py fix(memory): remove dead allOf schema block at the source 2026-05-07 07:03:21 -07:00
test_microsoft_graph_auth.py test(msgraph): cover concurrent token cache reuse 2026-05-08 09:27:26 -07:00
test_microsoft_graph_client.py fix(msgraph): stream download_to_file body instead of buffering 2026-05-08 09:27:26 -07:00
test_mixture_of_agents_tool.py chore(release): map devorun author + convert MoA defaults test to invariant 2026-04-23 15:14:11 -07:00
test_modal_bulk_upload.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_modal_sandbox_fixes.py remove Vercel AI Gateway and Vercel Sandbox (#33067) 2026-05-27 00:43:32 -07:00
test_modal_snapshot_isolation.py
test_notify_on_complete.py fix(process): label background completion causes (#46659) 2026-06-15 07:08:24 -07:00
test_osv_check.py fix(osv_check): honor npx --package/-p install target when parsing package arg (#40567) 2026-06-06 18:30:39 -07:00
test_parse_env_var.py guard terminal_tool import-time env parsing 2026-04-22 14:45:50 -07:00
test_patch_failure_tracking.py feat(patch): indentation preservation, CRLF preservation, per-file failure escalation (#507) (#32273) 2026-05-25 15:18:45 -07:00
test_patch_parser.py fix(lint): skip per-file shell linter when LSP will handle the file (#29054) 2026-05-20 01:46:40 -05:00
test_pr_6656_regressions.py test(skills): widen assertion in PR#6656 regression to accept new validator msg 2026-05-25 06:13:36 -07:00
test_process_registry.py fix(process): label background completion causes (#46659) 2026-06-15 07:08:24 -07:00
test_read_extract.py feat(read): extract notebook and office documents (#37082) 2026-06-13 14:42:51 -07:00
test_read_loop_detection.py feat(search_files): headroom compression evaluation report + lossless densification (#47866) 2026-06-17 13:45:25 -07:00
test_registry.py test(ci): stabilize shared optional dependency baselines 2026-05-13 17:32:22 -07:00
test_resolve_path.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_schema_sanitizer.py fix(tools): strip default from $ref nodes in tool schemas 2026-06-12 00:30:51 -05:00
test_search_budget_truncation.py fix(search): keep partial results on search timeout (#36142) 2026-06-13 14:35:21 -07:00
test_search_error_guard.py fix(file-ops): make rg/grep search error guard reachable and preserve partial matches (#39858) 2026-06-05 17:44:52 -07:00
test_search_hidden_dirs.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_send_message_missing_platforms.py refactor(gateway): migrate Home Assistant adapter to bundled plugin 2026-06-06 11:46:24 -07:00
test_send_message_react.py feat(messaging): expose action='unreact' in send_message + react dispatch tests 2026-06-12 01:07:38 -07:00
test_send_message_target_parse.py fix: harden WhatsApp target alias salvage 2026-06-15 05:51:47 -07:00
test_send_message_telegram_proxy.py test+release: align send_message mocks for MessageEntity import; map @fonhal 2026-05-18 22:19:50 -07:00
test_send_message_tool.py fix(messaging): route WhatsApp group JIDs to the target, not the home DM 2026-06-15 05:51:47 -07:00
test_session_search.py feat(desktop): drag sessions into chat as @session links + spawn loader 2026-06-04 19:41:51 -05:00
test_shared_container_task_id.py fix(terminal): collapse CWD-only overrides to shared container 2026-06-07 23:04:54 -07:00
test_signal_media.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_singularity_preflight.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_skill_env_passthrough.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skill_improvements.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skill_manager_tool.py fix(skills): guard recursive skill delete against tree-escape (#46929) 2026-06-15 17:14:59 -07:00
test_skill_provenance.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skill_size_limits.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skill_usage.py fix(curator): stop restore from matching unrelated skills by name prefix 2026-06-17 06:04:03 -07:00
test_skill_view_path_check.py
test_skill_view_traversal.py fix(skills): block path traversal via skill_view name argument (#40566) 2026-06-06 18:29:52 -07:00
test_skills_ast_audit.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_skills_guard.py fix(skills-guard): stop flagging benign skill content + honor skill ignore files (#36231) 2026-06-01 01:58:48 -07:00
test_skills_hub.py fix(skills): honour overall_timeout and bound ClawHub catalog walk 2026-06-09 23:22:54 -07:00
test_skills_hub_browse_sh.py fix(browse-sh): fetch SKILL.md via /api/skills/{slug}+skillMdUrl 2026-05-19 14:17:38 -07:00
test_skills_hub_clawhub.py fix(skills): let ClawHub index build walk past the 12s browse budget (#44500) 2026-06-11 18:03:11 -04:00
test_skills_sync.py test(skills): add regression tests for bundled-update backup recovery 2026-06-13 15:01:42 -07:00
test_skills_tool.py fix(skills): ignore support docs in skill discovery 2026-06-16 13:08:34 -07:00
test_slash_confirm.py feat(gateway,cli): confirm /reload-mcp to warn about prompt cache invalidation 2026-04-29 21:56:47 -07:00
test_spotify_client.py refactor(spotify): convert to built-in bundled plugin under plugins/spotify (#15174) 2026-04-24 07:06:11 -07:00
test_ssh_bulk_upload.py fix(ssh): handle WinError 1314 symlink failure with shutil.copy2 fallback 2026-06-04 18:06:21 -07:00
test_ssh_environment.py fix(tools): keep SSH ControlMaster socket path under macOS 104-byte limit 2026-04-20 03:07:32 -07:00
test_stage2_hook_gateway_bootstrap_state.py fix(docker): seed gateway_state.json from HERMES_GATEWAY_BOOTSTRAP_STATE on first boot (#37896) 2026-06-03 15:11:15 +10:00
test_stage2_hook_immutable_install.py Harden hosted Docker install tree against self-modification (#47490) 2026-06-18 09:09:21 +10:00
test_stage2_hook_install_method_stamp.py fix(update): scope install-method stamp to the code tree, not $HERMES_HOME (#48188) 2026-06-18 14:14:41 +10:00
test_stage2_hook_log_dir_seed.py fix(s6): make profile gateway log parent writable (#46291) 2026-06-15 13:47:05 +10:00
test_stage2_hook_puid_pgid.py fix(docker): run config migrations during container boot (salvage #35508) (#36627) 2026-06-04 11:11:27 +10:00
test_stage2_hook_toplevel_chown.py fix(docker): chown hermes-owned top-level state files on boot (#35098) (#36236) 2026-06-01 14:38:08 +10:00
test_stage2_hook_unraid_uid.py fix(docker): accept Unraid uid mappings (#38098) 2026-06-04 12:38:24 +10:00
test_stage2_hook_user_flag_guard.py fix(docker): reject unsupported --user <arbitrary-uid> start with clear guidance (#38579) 2026-06-04 10:51:51 +10:00
test_subprocess_stdin_guard.py test: guard OAuth setup-token stays interactive + marker exemption 2026-06-08 22:46:57 -07:00
test_symlink_prefix_confusion.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_sync_back_backends.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_terminal_compound_background.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_terminal_config_env_sync.py fix(test): track TERMINAL_CONFIG_ENV_MAP after env-sync consolidation (#42695) 2026-06-09 02:11:46 -07:00
test_terminal_exit_semantics.py
test_terminal_foreground_timeout_cap.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_terminal_none_command_guard.py
test_terminal_output_transform_hook.py test: stop testing mutable data — convert change-detectors to invariants (#13363) 2026-04-20 23:20:33 -07:00
test_terminal_requirements.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_terminal_task_cwd.py fix(terminal): guard os.getcwd() against a deleted CWD 2026-06-04 23:39:34 -07:00
test_terminal_timeout_output.py
test_terminal_tool.py fix(coding): teach agents terminal env state persists 2026-06-11 19:50:08 -05:00
test_terminal_tool_pty_fallback.py
test_terminal_tool_requirements.py remove Vercel AI Gateway and Vercel Sandbox (#33067) 2026-05-27 00:43:32 -07:00
test_threaded_process_handle.py
test_threat_patterns.py feat(security): promptware defense — shared threat patterns + memory load-time scan + tool-result delimiters (#32269) 2026-05-25 14:52:24 -07:00
test_tirith_security.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_todo_tool.py hardening(todo): bound TodoStore item content length and count 2026-06-07 18:06:27 -07:00
test_tool_backend_helpers.py fix(tools): guard Path.home() against PermissionError in has_direct_modal_credentials (#33528) 2026-05-29 13:35:39 +10:00
test_tool_output_limits.py fix(gateway): detach pending_watchers batch + normalize LRU caches + align test fixtures + AUTHOR_MAP 2026-05-31 00:50:19 -07:00
test_tool_result_storage.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_tool_search.py test: restore unrelated trailing newlines in cwd/tool-search tests 2026-06-03 06:36:46 -07:00
test_transcription.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_transcription_command_providers.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_transcription_dotenv_fallback.py Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
test_transcription_plugin_dispatch.py feat(stt): add register_transcription_provider() plugin hook 2026-05-25 01:41:19 -07:00
test_transcription_tools.py Add Hermes desktop app (#20059) 2026-05-31 17:46:56 -05:00
test_tts_command_providers.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_tts_dotenv_fallback.py fix(xai-http): preserve ~/.hermes/.env fallback and XAI_STT_BASE_URL precedence 2026-05-15 12:11:32 -07:00
test_tts_gemini.py feat(tts): add Gemini audio tag rewrite 2026-06-10 02:57:39 -07:00
test_tts_kittentts.py test(ci): stabilize shared optional dependency baselines 2026-05-13 17:32:22 -07:00
test_tts_max_text_length.py test: port voice-reply suffix assertions, fix change-detector cap test, add AUTHOR_MAP entry 2026-06-10 02:57:39 -07:00
test_tts_mistral.py fix(stt,tts): restore mistralai — 2.4.8 is clean, ban lifted (#34841) 2026-05-29 13:24:12 -07:00
test_tts_opus_routing.py fix(tts): keep native audio outside Telegram voice delivery 2026-05-18 22:29:45 -07:00
test_tts_path_traversal.py fix(tts): reject '..' traversal in output_path 2026-05-25 05:15:55 -07:00
test_tts_piper.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_tts_plugin_dispatch.py feat(tts): add register_tts_provider() plugin hook (closes #30398) 2026-05-24 18:04:54 -07:00
test_tts_speed.py fix(tts): align MiniMax TTS defaults with current API and add GroupId support 2026-05-13 22:04:28 -07:00
test_tts_xai_speech_tags.py test(tts): regression coverage for #29417 double-[pause] fix 2026-05-25 14:30:06 -07:00
test_url_safety.py fix(tools): percent-encode non-ascii URL components 2026-06-07 11:42:26 -06:00
test_video_analyze.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_video_generation_dispatch.py feat(video_gen): unified video_generate tool with pluggable provider backends (#25126) 2026-05-13 16:39:41 -07:00
test_video_generation_dynamic_schema.py feat(video_gen): unified video_generate tool with pluggable provider backends (#25126) 2026-05-13 16:39:41 -07:00
test_video_generation_tool_surface_matrix.py fix(xai): route video models by modality 2026-06-01 19:00:30 -07:00
test_vision_native_fast_path.py fix(vision): cap embedded image size before it wedges a session (#35732) 2026-05-31 00:12:09 -07:00
test_vision_tools.py fix(web): run URL SSRF checks off the event loop in async paths 2026-06-04 18:04:47 -07:00
test_voice_cli_integration.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_voice_mode.py fix(voice): allow /voice over SSH when a sound server is reachable (#35719) 2026-05-31 00:11:52 -07:00
test_watch_patterns.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00
test_web_providers.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
test_web_providers_brave_free.py fix(test): patch async_is_safe_url in web-provider SSRF mocks 2026-06-04 18:04:47 -07:00
test_web_providers_ddgs.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
test_web_providers_searxng.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
test_web_providers_xai.py chore(web): remove web_crawl tool + provider crawl plumbing (#33824) 2026-05-28 04:52:42 -07:00
test_web_tools_config.py revert(web): remove keyless Parallel search fallback (#46350) 2026-06-14 16:47:57 -07:00
test_web_tools_tavily.py chore(web): remove web_crawl tool + provider crawl plumbing (#33824) 2026-05-28 04:52:42 -07:00
test_website_policy.py fix(web): run URL SSRF checks off the event loop in async paths 2026-06-04 18:04:47 -07:00
test_windows_compat.py
test_windows_native_support.py fix(terminal): complete sane PATH entries on POSIX (salvage of #35614) (#42653) 2026-06-09 02:21:12 -07:00
test_write_approval.py fix(memory,skills): repair write-approval inline prompt, gateway staging, and gateway /skills review (#43452) 2026-06-10 02:57:15 -07:00
test_write_deny.py fix(file-safety): relax user-write deny policy (#45947) 2026-06-14 02:07:32 -07:00
test_x_search_tool.py fix(x_search): surface degraded results + validate dates 2026-05-21 02:38:45 +05:30
test_yolo_mode.py fix(approval): harden YOLO bypass, LLM parsing, auto-approve audit, pipe pattern (#23835) 2026-05-25 03:35:33 -07:00
test_zombie_process_cleanup.py chore: prune unused imports and duplicate import redefinitions 2026-05-28 22:26:25 -07:00