hermes-agent/tests/tools
Teknium cbb8cee47d fix(read_file): surface document extraction failures instead of the generic binary-file error
When extraction of a binary document format (.pdf, .docx, .xlsx, Office,
EPUB…) fails for a specific reason — the anydoc size cap, an encrypted or
malformed file — read_file previously swallowed the ExtractionError at
debug level and fell through to the generic 'Cannot read binary file'
guard, so the agent never saw the actionable reason (e.g. 'Document too
large to convert (N bytes, limit is 52,428,800)').

read_file now returns the specific extraction failure for binary document
formats. Fallthrough behavior is preserved where a raw read is still
useful: .ipynb (plain JSON) and converter-unavailable PDFs keep their
historical raw-read path, and the 'Unsupported document type' shape (no
extra information) keeps the generic guard.

Follow-up to #80004, where the size-cap message was being generated but
never reached the agent.
2026-08-08 05:40:45 -07:00
..
__init__.py
…
conftest.py
…
test_accretion_caps.py
…
test_ansi_strip.py
…
test_approval.py Merge branch 'main' into feat/hermes-relay-tool-metrics 2026-08-04 12:43:38 -04:00
test_approval_config_readonly.py
…
test_approval_deny_rules.py
…
test_approval_interrupt.py
…
test_approval_mode_parity.py
…
test_approval_plugin_hooks.py
…
test_approved_command_clean_slate.py
…
test_async_delegation.py
…
test_async_delegation_fd_leak.py
…
test_audio_container.py
…
test_base_environment.py fix(tools): allocate snapshot temp paths with mktemp instead of $BASHPID 2026-08-03 13:47:29 +05:30
test_blocked_command_guidance.py feat(terminal): auto-save parser-limit-blocked payloads as runnable scripts 2026-08-02 15:11:21 -07:00
test_blueprints.py
…
test_browser_camofox.py
…
test_browser_camofox_auth.py
…
test_browser_camofox_ensure_tab.py
…
test_browser_camofox_persistence.py
…
test_browser_camofox_private_page_guard.py
…
test_browser_camofox_state.py
…
test_browser_camofox_timeout.py
…
test_browser_cdp_override.py
…
test_browser_cdp_tool.py
…
test_browser_chromium_autoinstall.py
…
test_browser_chromium_check.py
…
test_browser_cleanup.py
…
test_browser_cloud_fallback.py
…
test_browser_cloud_provider_cache.py
…
test_browser_command_timeout_race.py
…
test_browser_console.py
…
test_browser_console_ssrf.py
…
test_browser_content_none_guard.py
…
test_browser_eval_ssrf.py
…
test_browser_eval_supervisor_path.py
…
test_browser_get_images_ssrf.py
…
test_browser_hardening.py
…
test_browser_headed_mode.py
…
test_browser_homebrew_paths.py
…
test_browser_hybrid_routing.py
…
test_browser_lightpanda.py
…
test_browser_open_timeout.py
…
test_browser_orphan_reaper.py
…
test_browser_private_page_action_guard.py
…
test_browser_secret_exfil.py
…
test_browser_snapshot_ssrf.py
…
test_browser_ssrf_local.py
…
test_browser_supervisor.py
…
test_browser_supervisor_healthcheck.py
…
test_browser_type_redaction.py
…
test_browser_use_session_expiry.py
…
test_budget_config.py
…
test_build_subprocess_env.py
…
test_checkpoint_manager.py
…
test_clarify_gateway.py
…
test_clarify_tool.py
…
test_clipboard.py
…
test_code_execution.py
…
test_code_execution_modes.py
…
test_code_execution_windows_env.py
…
test_command_guards.py
…
test_computer_use.py
…
test_computer_use_approval_isolation.py
…
test_computer_use_capture_routing.py
…
test_computer_use_cua_0_9.py
…
test_computer_use_cua_0_10_permissions.py
…
test_computer_use_cua_backend_linux.py
…
test_computer_use_delivery_ladder.py
…
test_computer_use_null_pid_windows.py
…
test_computer_use_vision_routing.py
…
test_config_null_guard.py
…
test_container_cwd_sanitize.py
…
test_credential_files.py
…
test_credential_pool_env_fallback.py
…
test_cron_approval_mode.py
…
test_cron_prompt_injection.py
…
test_cronjob_run_background.py fix(cron): deliver manual runs on gateway loop 2026-08-06 23:14:55 -07:00
test_cronjob_run_immediate.py fix(cron): thread per-run prompt through cronjob(action='run') (#57331) 2026-08-06 23:14:55 -07:00
test_cronjob_tools.py
…
test_cross_profile_guard.py
…
test_daemon_pool.py
…
test_daytona_environment.py
…
test_debug_helpers.py
…
test_delegate.py feat(delegation): validate batch task quality before spawning children 2026-08-07 08:57:57 -07:00
test_delegate_apiserver_background.py
…
test_delegate_batch_validation.py fix: post-merge audit follow-ups for #81138/#81139/#81141/#81148 2026-08-08 05:21:09 -07:00
test_delegate_composite_toolsets.py
…
test_delegate_cost_footer.py feat(delegation): surface per-delegation cost in the result entry 2026-08-07 08:58:02 -07:00
test_delegate_kanban_isolation.py
…
test_delegate_output_schema.py test: use valid 2-task batches in schema-rejection tests 2026-08-07 09:07:42 -07:00
test_delegate_subagent_timeout_diagnostic.py
…
test_delegate_summary_budget.py
…
test_delegate_toolset_scope.py
…
test_delegation_live_log.py
…
test_denial_circuit_breaker.py
…
test_desktop_ui.py
…
test_discord_send_message_caption.py
…
test_discord_tool.py
…
test_docker_cgroup_limits.py
…
test_docker_config_migrate.py
…
test_docker_daemon_redirect.py
…
test_docker_environment.py
…
test_docker_find.py
…
test_docker_network_config.py
…
test_docker_orphan_reaper_integration.py
…
test_docker_rebootstrap_nous_session.py
…
test_dockerfile_immutable_install.py
…
test_dockerfile_node_modules_perms.py
…
test_dockerfile_pid1_reaping.py
…
test_ensure_task_env.py fix(tools): lazily bring up sandbox for vision_analyze reads 2026-08-07 09:11:48 -07:00
test_env_passthrough.py
…
test_env_probe.py
…
test_execute_code_approval_cluster.py
…
test_execution_flag_detection.py
…
test_fal_common.py
…
test_feishu_tools.py
…
test_file_operations.py feat(file): raise read_file default limit from 500 to 2000 lines 2026-08-02 15:09:33 -07:00
test_file_operations_edge_cases.py fix(file): align grep fallback regex behavior 2026-08-06 05:31:17 +05:30
test_file_ops_cwd_tracking.py
…
test_file_read_guards.py
…
test_file_staleness.py
…
test_file_state_registry.py
…
test_file_sync.py fix(file-sync): serialize concurrent sync cycles 2026-08-03 22:53:32 +05:30
test_file_sync_back.py
…
test_file_sync_perf.py
…
test_file_sync_sigint.py
…
test_file_tools.py feat(file): raise read_file default limit from 500 to 2000 lines 2026-08-02 15:09:33 -07:00
test_file_tools_container_config.py
…
test_file_tools_cwd_resolution.py
…
test_file_tools_live.py
…
test_file_tools_tilde_profile.py
…
test_file_write_safety.py feat(security): protected agent-instruction files always require write approval 2026-08-07 08:58:38 -07:00
test_find_shell.py
…
test_flux3_video_tool.py
…
test_focus_pane_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
test_force_dangerous_override.py
…
test_fuzzy_match.py
…
test_gateway_cwd_contract.py
…
test_generation_source_confinement.py fix(image_gen): confine generation source images to the terminal backend 2026-08-08 04:19:38 -07:00
test_gnu_long_option_abbreviation_bypass.py
…
test_hardline_blocklist.py fix(approval): stop treating newlines inside quoted arguments as command starts 2026-08-02 23:11:56 -07:00
test_heartbeat_stale_thresholds.py
…
test_hermes_subprocess_env.py
…
test_hidden_dir_filter.py
…
test_homeassistant_tool.py
…
test_hook_output_spill.py
…
test_hub_lock_non_utf8_68053.py
…
test_image_generation.py test: convert NB2 catalog snapshot test to invariants; live-verified t2i+edit 2026-08-08 05:31:38 -07:00
test_image_generation_artifacts.py fix(file-sync): serialize concurrent sync cycles 2026-08-03 22:53:32 +05:30
test_image_generation_env.py
…
test_image_generation_image_to_image.py
…
test_image_generation_plugin_dispatch.py
…
test_image_source.py fix(vision): retry container exec-read for Docker cold-start, surface stderr (#76566) 2026-08-08 03:59:42 -07:00
test_init_session_cwd_respect.py
…
test_interrupt.py
…
test_kanban_comment_injection.py
…
test_kanban_redaction.py
…
test_kanban_tools.py
…
test_lazy_deps.py refactor: derive teams install hint via feature_install_command(venv_pip=True) 2026-08-07 13:28:43 +05:30
test_lazy_deps_durable_target.py fix(tools): preserve document extraction boundaries 2026-08-08 05:13:46 -07:00
test_lazy_deps_managed.py fix(lazy-deps): skip the install ladder on package-manager installs 2026-08-03 14:09:46 +05:30
test_line_ending_preservation.py
…
test_llm_content_none_guard.py
…
test_local_background_child_hang.py
…
test_local_cwd_permission_fallback.py
…
test_local_env_blocklist.py
…
test_local_env_cwd_recovery.py
…
test_local_env_relative_cwd.py
…
test_local_env_session_leak.py
…
test_local_env_windows_msys.py
…
test_local_interrupt_cleanup.py
…
test_local_shell_init.py
…
test_local_tempdir.py
…
test_managed_browserbase_and_modal.py test: stub EnvironmentConnectionError in environments.base module stub 2026-08-07 09:07:55 -07:00
test_managed_media_gateways.py
…
test_managed_modal_environment.py
…
test_managed_tool_gateway.py
…
test_mcp_bridge_single_failure.py
…
test_mcp_cancelled_error_propagation.py
…
test_mcp_capability_gating.py
…
test_mcp_circuit_breaker.py
…
test_mcp_client_cert.py
…
test_mcp_config_whitespace_warning.py
…
test_mcp_dashboard_oauth.py
…
test_mcp_discovery_cross_process.py
…
test_mcp_dynamic_discovery.py
…
test_mcp_elicitation.py
…
test_mcp_empty_error_message.py
…
test_mcp_failure_classification.py fix(mcp): let a server that 401s at startup come back after re-login 2026-08-08 02:21:36 -05:00
test_mcp_identity_header.py feat(kanban,mcp): orphaned-card reconciliation + per-server MCP identity header 2026-08-07 08:58:20 -07:00
test_mcp_image_content.py
…
test_mcp_initial_connect_shutdown.py fix(mcp): let a server that 401s at startup come back after re-login 2026-08-08 02:21:36 -05:00
test_mcp_invalid_url.py
…
test_mcp_lazy_start.py polish(mcp): simplify-pass folds on the lazy-startup salvage 2026-08-03 14:24:37 +05:30
test_mcp_list_pagination.py
…
test_mcp_loop_profile_override.py
…
test_mcp_oauth.py
…
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_parked_self_probe.py
…
test_mcp_poll_loop_oom_integration.py
…
test_mcp_preflight_content_type.py
…
test_mcp_probe.py
…
test_mcp_rapid_drop_budget.py
…
test_mcp_reconnect_log_hygiene.py
…
test_mcp_reconnect_retry_reset.py
…
test_mcp_reconnect_signal.py
…
test_mcp_register_wakes_stale.py
…
test_mcp_resource_content.py
…
test_mcp_schema_cache.py polish(mcp): simplify-pass folds on the lazy-startup salvage 2026-08-03 14:24:37 +05:30
test_mcp_server_log_notifications.py
…
test_mcp_sse_transport.py
…
test_mcp_stability.py
…
test_mcp_stdio_encoding_handler.py
…
test_mcp_stdio_init_timeout.py
…
test_mcp_stdio_watchdog.py
…
test_mcp_structured_content.py
…
test_mcp_tool.py fix(plugins): address portable MCP review feedback 2026-08-07 09:44:21 -07:00
test_mcp_tool_401_handling.py
…
test_mcp_tool_issue_948.py
…
test_mcp_tool_session_expired.py
…
test_mcp_transport_group_reconnect.py
…
test_mcp_trust_gating.py feat(mcp): trust-tier gating for write-capable MCP tools via readOnlyHint 2026-08-07 08:58:32 -07:00
test_mcp_utility_capability_gating.py
…
test_media_caption_split.py
…
test_memory_tool.py
…
test_memory_tool_import_fallback.py
…
test_memory_tool_schema.py
…
test_microsoft_graph_auth.py
…
test_microsoft_graph_client.py
…
test_modal_bulk_upload.py
…
test_modal_sandbox_fixes.py
…
test_modal_snapshot_isolation.py
…
test_notify_on_complete.py
…
test_open_preview_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
test_osv_check.py
…
test_parse_env_var.py
…
test_patch_already_applied.py feat(patch): detect already-applied edits and return success no-op 2026-08-02 15:09:53 -07:00
test_patch_failure_tracking.py
…
test_patch_multimatch_locations.py feat(patch): list match locations in ambiguous old_string errors 2026-08-02 15:51:43 -07:00
test_patch_parser.py refactor(file-ops): fold simplify-pass findings 2026-08-04 14:34:24 +05:30
test_patch_ws_diagnosis.py feat(patch): whitespace-visualized diagnosis on residual no-match errors 2026-08-02 15:12:02 -07:00
test_pr_6656_regressions.py
…
test_process_registry.py fix(gateway): close ambiguous recovery cleanup gaps 2026-08-08 01:12:16 +05:30
test_process_wait_clarity.py fix(process): wait timeout result reads as status, not failure 2026-08-02 15:11:02 -07:00
test_read_extract.py fix(read_file): surface document extraction failures instead of the generic binary-file error 2026-08-08 05:40:45 -07:00
test_read_loop_detection.py
…
test_read_preview_tool.py fix(agent): the desktop's tools reach it on remote and cloud backends too 2026-08-06 19:35:47 -06:00
test_refresh_agent_mcp_tools.py
…
test_registry.py fix(tools): bound the exception text dispatch writes into its own log line 2026-08-08 14:56:38 +05:30
test_request_tool_approval.py Merge updated model metrics into tool metrics 2026-08-02 20:11:20 -07:00
test_resolve_path.py
…
test_restored_delegation_ownership.py
…
test_sandbox_failure_hints.py feat(execute_code): recovery hints for known sandbox failure classes 2026-08-02 15:13:24 -07:00
test_schema_sanitizer.py feat(mcp): collapse const-only anyOf/oneOf unions to property enums 2026-08-07 08:58:25 -07:00
test_search_auto_multiline.py feat(search): auto-enable multiline mode for newline patterns 2026-08-02 15:13:04 -07:00
test_search_budget_truncation.py
…
test_search_error_guard.py
…
test_search_hidden_dirs.py test(search): update grep command mirrors to -rnHE for fidelity with production 2026-08-06 05:31:17 +05:30
test_search_zero_match_and_multipath.py test(search): guard zero-match hint wiring on both engines 2026-08-02 15:42:44 -07:00
test_self_repo_guard.py fix(tools): keep non-bash -c invocations covered by the shell guard 2026-08-08 14:56:38 +05:30
test_send_message_missing_platforms.py
…
test_send_message_react.py
…
test_send_message_slack.py
…
test_send_message_target_parse.py
…
test_send_message_telegram_proxy.py
…
test_send_message_tool.py
…
test_session_cwd_store.py
…
test_session_search.py perf(session-search): project fields before enrichment 2026-08-03 17:50:58 +05:30
test_shared_container_task_id.py
…
test_shell_bypass_denylist.py
…
test_signal_media.py
…
test_singularity_preflight.py
…
test_skill_bundle_provenance.py
…
test_skill_env_passthrough.py
…
test_skill_improvements.py
…
test_skill_manager_tool.py
…
test_skill_provenance.py
…
test_skill_size_limits.py
…
test_skill_usage.py
…
test_skill_view_dedup.py feat(skills): dedup repeat skill_view calls with an unchanged-content stub 2026-08-02 15:12:43 -07:00
test_skill_view_path_check.py
…
test_skill_view_traversal.py
…
test_skills_ast_audit.py
…
test_skills_guard.py
…
test_skills_hub.py Merge updated tool metrics into skill metrics 2026-08-02 20:12:37 -07:00
test_skills_hub_browse_sh.py
…
test_skills_hub_clawhub.py
…
test_skills_list_modified_diff.py
…
test_skills_sync.py
…
test_skills_sync_client.py
…
test_skills_tool.py
…
test_skills_tool_discovery_cache.py
…
test_skills_tool_profile_scope.py
…
test_slack_send_message_media.py
…
test_slash_confirm.py
…
test_smart_approval_injection.py
…
test_smart_approval_policy.py
…
test_snapshot_multiline_session_env_injection.py
…
test_snapshot_session_id_leak.py fix(tools): allocate snapshot temp paths with mktemp instead of $BASHPID 2026-08-03 13:47:29 +05:30
test_spotify_client.py
…
test_ssh_bulk_upload.py
…
test_ssh_environment.py
…
test_stage2_hook_seed_one_symlinks.py
…
test_stage2_hook_symlink_chown.py
…
test_stt_cloud_trim.py refactor(stt): fold review findings into the cloud silence trim 2026-08-07 19:26:04 +05:30
test_stt_default_language.py
…
test_stt_idle_unload.py fix(stt): close idle-unload races — strong model ref, single long-lived watcher 2026-08-07 19:26:12 +05:30
test_stt_language_resolution.py
…
test_stt_silence_hallucinations.py fix(stt): thread confidence thresholds into faster-whisper's own gate (#74178) 2026-08-03 14:30:05 +05:30
test_subagent_steer.py fix(delegation): bind steering to session generation 2026-08-06 09:40:27 -07:00
test_subprocess_stdin_guard.py
…
test_subprocess_utf8_encoding.py
…
test_symlink_prefix_confusion.py
…
test_sync_back_backends.py
…
test_telegram_send_message_caption.py
…
test_terminal_compound_background.py
…
test_terminal_config_env_sync.py
…
test_terminal_cwd_echo.py feat(terminal): echo cwd in result when a command changes the working directory 2026-08-02 15:10:13 -07:00
test_terminal_degraded_mode.py feat(terminal): graceful degradation for remote backend connection failures 2026-08-07 09:07:55 -07:00
test_terminal_env_bridge.py fix(terminal): preserve SSH remote home cwd 2026-08-07 18:41:57 -06:00
test_terminal_error_redaction.py fix(terminal-tool): redact terminal error result fields 2026-08-08 04:28:19 -07:00
test_terminal_exit_semantics.py
…
test_terminal_foreground_timeout_cap.py
…
test_terminal_hints.py feat(terminal): output-pattern failure hints for common error classes 2026-08-02 15:08:35 -07:00
test_terminal_none_command_guard.py
…
test_terminal_output_transform_hook.py
…
test_terminal_requirements.py
…
test_terminal_self_repo_guard.py fix(tools): harden live source checkout guard 2026-08-08 14:56:38 +05:30
test_terminal_task_cwd.py
…
test_terminal_timeout_output.py
…
test_terminal_tool.py fix(tools): allow Unicode letters in workdir validation 2026-08-03 13:47:29 +05:30
test_terminal_tool_exception_redaction.py fix(security): redact terminal exception results and ACP stderr logs (#77484) 2026-08-08 04:19:49 -07:00
test_terminal_tool_pty_fallback.py
…
test_terminal_tool_requirements.py
…
test_terminal_truncation_spill.py feat(terminal): recoverable truncation — spill full output + report pre-truncation size 2026-08-02 15:52:14 -07:00
test_termux_api_detection.py
…
test_threaded_process_handle.py
…
test_threat_patterns.py
…
test_tirith_security.py
…
test_todo_tool.py
…
test_todo_tool_type_coercion.py
…
test_tool_backend_helpers.py
…
test_tool_output_limits.py
…
test_tool_result_storage.py
…
test_tool_search.py Merge branch 'main' into feat/hermes-relay-tool-metrics 2026-08-04 12:43:38 -04:00
test_tool_search_context_provider.py
…
test_transcription.py
…
test_transcription_command_providers.py
…
test_transcription_deepinfra.py
…
test_transcription_dotenv_fallback.py
…
test_transcription_plugin_dispatch.py
…
test_transcription_tools.py
…
test_tts_command_providers.py
…
test_tts_container_repair.py
…
test_tts_deepinfra.py
…
test_tts_dotenv_fallback.py
…
test_tts_gemini.py
…
test_tts_instructions.py
…
test_tts_kittentts.py
…
test_tts_macos_output.py
…
test_tts_max_text_length.py
…
test_tts_minimax_region.py
…
test_tts_mistral.py
…
test_tts_model_cache_lru.py
…
test_tts_openai_config.py
…
test_tts_opus_routing.py
…
test_tts_output_timestamp.py
…
test_tts_path_traversal.py
…
test_tts_piper.py
…
test_tts_plugin_dispatch.py
…
test_tts_prepare_spoken.py
…
test_tts_provider_base_urls.py
…
test_tts_pythonpath_fallback.py
…
test_tts_response_body_cap.py
…
test_tts_speed.py
…
test_tts_streaming.py perf(tts): pipeline sync per-sentence synthesis with playback 2026-08-03 10:25:15 +05:30
test_tts_streaming_e2e.py
…
test_tts_text_normalize.py
…
test_tts_xai_speech_tags.py
…
test_url_safety.py
…
test_vercel_sandbox_environment.py
…
test_video_analyze.py fix(video): route terminal-backend reads through the shared media resolver 2026-08-08 03:59:39 -07:00
test_video_generation_dispatch.py
…
test_video_generation_dynamic_schema.py
…
test_video_generation_tool_surface_matrix.py feat: add new FAL video families and image models 2026-08-08 04:31:55 -07:00
test_vision_native_fast_path.py
…
test_vision_region.py feat(vision): optional region zoom crop on vision_analyze 2026-08-07 08:58:49 -07:00
test_vision_tools.py feat(vision): optional region zoom crop on vision_analyze 2026-08-07 08:58:49 -07:00
test_voice_cli_integration.py fix(voice): early-exit sliding window on match, clear barge phase in finally, fix test helper 2026-08-07 14:38:02 +05:30
test_voice_credential_pool_resolution.py
…
test_voice_mode.py
…
test_voice_mode_playback_env_scrub.py
…
test_voice_stop_phrase.py
…
test_voice_thinking_sound.py
…
test_voice_tts_echo_guard.py fix(voice): require minimum evidence for fragment echo matching, use char windows 2026-08-07 14:38:02 +05:30
test_voice_wsl_pipewire.py
…
test_wake_word.py test(wake-word): verify resampled audio values 2026-08-08 13:49:24 +05:30
test_watch_patterns.py
…
test_web_extract_robustness.py
…
test_web_providers.py
…
test_web_providers_brave_free.py
…
test_web_providers_ddgs.py
…
test_web_providers_searxng.py
…
test_web_providers_xai.py
…
test_web_tools_config.py
…
test_web_tools_dict_urls.py
…
test_web_tools_tavily.py
…
test_web_tools_truncate.py
…
test_website_policy.py
…
test_whatsapp_send_message_media.py
…
test_windows_compat.py fix: relax start_new_session assertion for systemd scope path 2026-08-08 01:12:16 +05:30
test_windows_native_support.py
…
test_working_diff.py
…
test_write_approval.py
…
test_write_deny.py
…
test_write_file_syntax_gate.py
…
test_write_verification.py feat(file): verify write_file content on disk and say so (verified: true) 2026-08-02 15:12:23 -07:00
test_x_search_tool.py
…
test_xai_http_credentials.py
…
test_xai_http_storage.py
…
test_yolo_mode.py
…
test_zombie_process_cleanup.py
…