hermes-agent/tests/tools
Teknium a0bd11d022
fix(tests): catch up 25 stale tests after recent merges (#28626)
Sweep of all CI failures on origin/main, grouped by drift source:

Telegram allowlist gate (db50af910 added user-authz to _should_process_message):
- Hardcoded "[Telegram]" prefix in the logger.warning so the call no
  longer dereferences self.name → self.platform, which test fixtures
  built via object.__new__ never set.
- test_telegram_format / test_allowed_channels_widening fixtures stub
  _is_callback_user_authorized → True so the new gate doesn't reject
  guest-mode / allowed-channels test messages.
- test_telegram_approval_buttons::test_update_prompt_callback_not_affected
  sets TELEGRAM_ALLOWED_USERS="*" so the fail-closed default doesn't
  reject the callback before it writes .update_response.

Approval surface (6d495d9e7 renamed status, 214b95392 detached stdin):
- test_no_callback_returns_approval_required: status is now
  "pending_approval" (was "approval_required").
- test_close_stdin_allows_eof_driven_process_to_finish: switch to
  use_pty=True; non-PTY now uses stdin=DEVNULL.

Mattermost (send() now resolves root_id via _api_get first):
- test_send_with_thread_reply mocks _session.get with a thread-root
  response so the new resolver doesn't TypeError on a bare AsyncMock.

Kanban (d8ad431de rename, f55d94a1e review column, _kanban_worker_skill_available):
- _safe_int → _to_epoch in the two test_kanban_db tests.
- Spawn-skills tests (×3) monkey-patch _kanban_worker_skill_available
  to True since the isolated kanban_home fixture has no devops/kanban-worker tree.
- test_gateway_dispatcher_disables_corrupt_board: connect count
  3 → 5 (review-column probe now also runs per tick).

Aux-config severity at_or_above (a94ddd807):
- test_diagnostics_endpoint_severity_filter expects warning filter to
  include error+critical now (was exact-match).

Anthropic error handling (conversation loop extracted from run_agent):
- _no_backoff_wait fixture patches BOTH run_agent.jittered_backoff AND
  agent.conversation_loop.jittered_backoff. The latter is the actual
  call site; without the second patch tests burn ~2s per retry and
  hit the 30s SIGALRM timeout on CI.

Other test pollution / drift:
- test_auto_does_not_select_copilot_from_github_token: patch
  agent.bedrock_adapter.has_aws_credentials → False so boto3's
  credential chain can't auto-pick Bedrock from developer ~/.aws.
- test_setup_openclaw_migration: patch hermes_cli.gateway.get_env_value
  in addition to setup_mod.get_env_value — _platform_status reads
  through the gateway module's binding.
- test_gateway_prefix: COMPONENT_PREFIXES["gateway"] now includes
  "hermes_plugins" too.
- test_recommended_update_command_defaults_to_hermes_update: also
  short-circuit get_managed_update_command in case a stray
  ~/.hermes/.managed marker is present.
- test_user_id_is_not_explicit: _parse_target_ref now returns
  is_explicit=False for Slack U.../W... IDs (chat.postMessage rejects
  them — a DM must be opened first via conversations.open).
2026-05-19 01:28:32 -07:00
..
__init__.py
test_accretion_caps.py
test_ansi_strip.py
test_approval.py Inspired by Claude Code: tighten dangerous-command detection (#26829) 2026-05-16 01:24:25 -07:00
test_approval_heartbeat.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_approval_plugin_hooks.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_base_environment.py
test_browser_camofox.py
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 feat(browser): support externally managed Camofox sessions 2026-05-12 15:14:49 -07:00
test_browser_cdp_override.py
test_browser_cdp_tool.py
test_browser_chromium_check.py fix(install): skip browser download when system chromium exists 2026-05-13 22:07:02 -07:00
test_browser_cleanup.py
test_browser_cloud_fallback.py
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
test_browser_content_none_guard.py
test_browser_eval_supervisor_path.py perf(browser): route browser_console eval through supervisor's persistent CDP WS (180x faster) (#23226) 2026-05-10 07:37:55 -07:00
test_browser_hardening.py
test_browser_homebrew_paths.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_browser_hybrid_routing.py
test_browser_lightpanda.py
test_browser_orphan_reaper.py test: migrate stale os.kill monkeypatches to gateway.status._pid_exists 2026-05-08 14:27:40 -07:00
test_browser_secret_exfil.py
test_browser_ssrf_local.py
test_browser_supervisor.py perf(browser): route browser_console eval through supervisor's persistent CDP WS (180x faster) (#23226) 2026-05-10 07:37:55 -07:00
test_browser_supervisor_healthcheck.py
test_budget_config.py
test_checkpoint_manager.py fix(checkpoint): guard _touch_project against non-dict project metadata 2026-05-09 17:53:13 -07:00
test_clarify_gateway.py fix(gateway): enable text-intercept for multi-choice clarify fallback (#25567) 2026-05-14 07:59:12 -07:00
test_clarify_tool.py
test_clipboard.py fix(clipboard): reject non-png clipboard images when png normalization fails 2026-05-13 22:54:21 -07:00
test_code_execution.py fix(windows): enable execute_code — stale AF_UNIX gate was blocking the tool 2026-05-08 14:27:40 -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 execute_code: set PYTHONIOENCODING=utf-8 + PYTHONUTF8=1 in child env 2026-05-08 14:27:40 -07:00
test_command_guards.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_computer_use.py fix(agent): keep image tool results from poisoning text-only sessions 2026-05-14 14:52:15 -07:00
test_config_null_guard.py
test_credential_files.py
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 fix(approval): cron jobs must not be treated as gateway context 2026-05-08 07:30:14 -07:00
test_cron_prompt_injection.py
test_cronjob_tools.py fix(cron): allow emoji ZWJ sequences in prompts 2026-05-19 00:10:43 -07:00
test_daytona_environment.py fix(daytona): migrate legacy-sandbox lookup to cursor-based list() (#24587) 2026-05-12 16:31:46 -07:00
test_debug_helpers.py
test_delegate.py test(delegation): add regression test for runtime missing 'provider' key 2026-05-17 11:40:05 -07:00
test_delegate_composite_toolsets.py
test_delegate_subagent_timeout_diagnostic.py
test_delegate_toolset_scope.py
test_discord_tool.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_docker_environment.py
test_docker_find.py
test_dockerfile_node_modules_perms.py
test_dockerfile_pid1_reaping.py fix(docker): preload messaging gateway deps 2026-05-17 11:51:46 -07:00
test_env_passthrough.py
test_feishu_tools.py
test_file_operations.py test(file_ops): add regression tests for git baseline warning in write_file 2026-05-19 00:06:55 -07:00
test_file_operations_edge_cases.py
test_file_ops_cwd_tracking.py
test_file_read_guards.py
test_file_staleness.py
test_file_state_registry.py
test_file_sync.py
test_file_sync_back.py fix: move pytest.importorskip below pytest import in skip-guarded tests 2026-05-09 11:12:03 -07:00
test_file_sync_perf.py
test_file_tools.py test(patch-tool): collapse 9 schema-shape tests into 2 invariants 2026-05-08 16:59:24 -07:00
test_file_tools_container_config.py
test_file_tools_live.py
test_file_write_safety.py
test_force_dangerous_override.py
test_fuzzy_match.py
test_hardline_blocklist.py fix(terminal): block sudo -S password guessing when SUDO_PASSWORD is not set 2026-05-11 06:56:30 -07:00
test_heartbeat_stale_thresholds.py
test_hidden_dir_filter.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_homeassistant_tool.py
test_image_generation.py
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
test_init_session_cwd_respect.py
test_interrupt.py
test_kanban_codex_lane_skill.py docs: add kanban codex lane skill 2026-05-18 21:01:14 -07:00
test_kanban_tools.py feat(kanban): stamp originating ACP session_id on tasks 2026-05-18 21:15:21 -07:00
test_lazy_deps.py fix(update): refresh lazy-installed backends on hermes update (#25766) 2026-05-14 08:03:40 -07:00
test_llm_content_none_guard.py feat(session_search): single-shape tool with discovery, scroll, browse — no LLM (#27590) 2026-05-17 23:28:45 -07:00
test_local_background_child_hang.py
test_local_env_blocklist.py
test_local_env_cwd_recovery.py
test_local_env_windows_msys.py fix(windows): stop spamming cwd-missing + tirith-spawn warnings on every terminal call 2026-05-15 16:25:31 -07:00
test_local_interrupt_cleanup.py
test_local_shell_init.py
test_local_tempdir.py
test_managed_browserbase_and_modal.py fix(browser): self-review pass — dead-import, log levels, future-proofing 2026-05-17 04:04:15 -07:00
test_managed_media_gateways.py
test_managed_modal_environment.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_managed_tool_gateway.py
test_mcp_cancelled_error_propagation.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_mcp_circuit_breaker.py
test_mcp_dynamic_discovery.py
test_mcp_empty_error_message.py
test_mcp_image_content.py
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_oauth.py fix(mcp-oauth): print SSH tunnel hint in _redirect_handler 2026-05-17 02:29:37 -07:00
test_mcp_oauth_bidirectional.py
test_mcp_oauth_cold_load_expiry.py
test_mcp_oauth_integration.py
test_mcp_oauth_manager.py
test_mcp_oauth_metadata.py
test_mcp_probe.py fix(async): close unscheduled coroutines in all threadsafe bridges (#26584) 2026-05-15 14:00:01 -07:00
test_mcp_reconnect_signal.py
test_mcp_sse_transport.py
test_mcp_stability.py fix(mcp): use module-level time so test patches do not race background sleepers 2026-05-17 13:33:26 -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 fix(mcp): prevent parallel-safe prefix collisions 2026-05-17 11:41:26 -07:00
test_mcp_tool_401_handling.py
test_mcp_tool_issue_948.py
test_mcp_tool_session_expired.py
test_mcp_utility_capability_gating.py
test_memory_tool.py
test_memory_tool_import_fallback.py
test_memory_tool_schema.py
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
test_modal_bulk_upload.py
test_modal_sandbox_fixes.py
test_modal_snapshot_isolation.py
test_notify_on_complete.py
test_osv_check.py
test_parse_env_var.py
test_patch_parser.py
test_process_registry.py fix(tests): catch up 25 stale tests after recent merges (#28626) 2026-05-19 01:28:32 -07:00
test_read_loop_detection.py
test_registry.py test(ci): stabilize shared optional dependency baselines 2026-05-13 17:32:22 -07:00
test_resolve_path.py
test_schema_sanitizer.py fix(xai-responses): strip enum values containing '/' from tool schemas 2026-05-18 10:37:35 -07:00
test_search_hidden_dirs.py
test_send_message_missing_platforms.py
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 test(send_message): add thread-not-found retry tests for Telegram topics 2026-05-18 22:32:00 -07:00
test_session_search.py feat(session_search): single-shape tool with discovery, scroll, browse — no LLM (#27590) 2026-05-17 23:28:45 -07:00
test_shared_container_task_id.py
test_signal_media.py
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
test_skill_improvements.py
test_skill_manager_tool.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_skill_provenance.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_skill_size_limits.py
test_skill_usage.py
test_skill_view_path_check.py
test_skill_view_traversal.py
test_skills_guard.py
test_skills_hub.py chore: ruff auto-fix PLR6201 resweep — tuple → set in membership tests (#27355) 2026-05-17 02:29:41 -07:00
test_skills_hub_clawhub.py fix(skills-hub): cover remaining SSRF fetch paths after #10029 2026-05-09 17:52:12 -07:00
test_skills_sync.py
test_skills_tool.py fix(tools): refuse skill_view name collisions instead of guessing 2026-05-13 13:29:28 -07:00
test_slash_confirm.py
test_spotify_client.py
test_ssh_bulk_upload.py
test_ssh_environment.py
test_symlink_prefix_confusion.py
test_sync_back_backends.py
test_terminal_compound_background.py
test_terminal_config_env_sync.py fix(terminal): bridge docker_env config to TERMINAL_DOCKER_ENV 2026-05-09 17:53:35 -07:00
test_terminal_exit_semantics.py
test_terminal_foreground_timeout_cap.py
test_terminal_none_command_guard.py
test_terminal_output_transform_hook.py
test_terminal_requirements.py
test_terminal_task_cwd.py fix(acp): honor task cwd for foreground terminal commands 2026-05-09 14:46:34 -07:00
test_terminal_timeout_output.py
test_terminal_tool.py
test_terminal_tool_pty_fallback.py
test_terminal_tool_requirements.py
test_threaded_process_handle.py
test_tirith_security.py fix(tirith): suppress .app lookalike_tld false positives in warn verdicts 2026-05-18 10:20:07 -07:00
test_todo_tool.py
test_tool_backend_helpers.py
test_tool_output_limits.py
test_tool_result_storage.py fix(tool-result-storage): persist via stdin to bypass 128 KB exec-arg cap (#22913) 2026-05-09 18:44:58 -07:00
test_transcription.py test(ci): stabilize shared optional dependency baselines 2026-05-13 17:32:22 -07:00
test_transcription_dotenv_fallback.py fix(tests): stabilize xai env and provider parity 2026-05-17 11:55:25 -07:00
test_transcription_tools.py fix(security): reduce unnecessary shell=True in subprocess calls 2026-05-13 10:31:22 -07:00
test_tts_command_providers.py
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
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_tts_mistral.py fix(deps): unbreak [all] install — drop mistralai while PyPI quarantined (#24205) 2026-05-11 23:02:15 -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_piper.py
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_url_safety.py fix(url_safety): block IPv4-mapped IPv6 addresses to prevent SSRF bypass 2026-05-18 10:51:15 -07:00
test_vercel_sandbox_environment.py test: remove 50 stale/broken tests to unblock CI (#22098) 2026-05-08 14:55:40 -07:00
test_video_analyze.py
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 feat(video_gen): unified video_generate tool with pluggable provider backends (#25126) 2026-05-13 16:39:41 -07:00
test_vision_native_fast_path.py fix(dashboard): UI polish — modals, layout, consistency, test fixes 2026-05-12 13:59:22 -04:00
test_vision_tools.py
test_voice_cli_integration.py test(voice_cli): drop stale ≥1 requirement for force=True error _vprint calls 2026-05-17 13:09:24 -07:00
test_voice_mode.py
test_watch_patterns.py
test_web_providers.py fix(web): preserve top-level error envelope on unconfigured systems 2026-05-13 22:31:28 -07:00
test_web_providers_brave_free.py refactor(web): remove legacy in-tree provider modules 2026-05-13 22:31:28 -07:00
test_web_providers_ddgs.py refactor(web): remove legacy in-tree provider modules 2026-05-13 22:31:28 -07:00
test_web_providers_searxng.py refactor(web): remove legacy in-tree provider modules 2026-05-13 22:31:28 -07:00
test_web_tools_config.py refactor(web): dispatch all three tools through web_search_registry 2026-05-13 22:31:28 -07:00
test_web_tools_tavily.py
test_website_policy.py feat(web): firecrawl plugin natively supports crawl; delete legacy inline path 2026-05-13 22:31:28 -07:00
test_windows_compat.py
test_windows_native_support.py feat(security): supply-chain advisory checker + lazy-install framework + tiered install fallback (#24220) 2026-05-12 01:02:25 -07:00
test_write_deny.py
test_x_search_tool.py feat(x_search): gated X (Twitter) search tool with OAuth-or-API-key auth (#26763) 2026-05-16 00:58:27 -07:00
test_yolo_mode.py
test_zombie_process_cleanup.py