hermes-agent/tools
Drexuxux e0b5005985 fix(file-ops): stop read_file blocking forever on non-regular files
The size probe every read path starts with — `wc -c < path` — opens the
path. On a FIFO with no writer, a socket, or a character device that never
reaches EOF, that read never returns, and read_file/read_file_raw/
read_file_bytes all pass no timeout to _exec. The turn wedges until the
process is killed.

The device blocklist in tools/file_tools.py cannot close this: it matches
literal /dev/* names, so it can only ever cover paths someone thought to
enumerate. A FIFO is a file type and can sit at any path.

Gate the probe behind `[ -f ]`, which stats instead of opening, and report
a path that exists but is not a regular file as such. A missing path keeps
its existing not-found handling.
2026-08-10 00:23:45 -07:00
..
computer_use
environments fix(docker): per-session container isolation and session-scoped workspace mounts 2026-08-09 14:35:02 -07:00
neutts_samples
wakewords
__init__.py
ansi_strip.py
approval.py
async_delegation.py
audio_container.py
binary_extensions.py
blueprints.py
browser_camofox.py
browser_camofox_state.py
browser_cdp_tool.py
browser_dialog_tool.py
browser_supervisor.py
browser_tool.py
budget_config.py
checkpoint_manager.py
clarify_gateway.py
clarify_tool.py
close_terminal_tool.py
code_execution_tool.py fix(docker): per-session container isolation and session-scoped workspace mounts 2026-08-09 14:35:02 -07:00
computer_use_tool.py
credential_files.py
cronjob_tools.py
daemon_pool.py
debug_helpers.py
delegate_tool.py fix(docker): per-session container isolation and session-scoped workspace mounts 2026-08-09 14:35:02 -07:00
delegation_live_log.py
delegation_output_schema.py
desktop_ui.py
discord_tool.py
env_passthrough.py
env_probe.py
fal_common.py
feishu_doc_tool.py
feishu_drive_tool.py
file_operations.py fix(file-ops): stop read_file blocking forever on non-regular files 2026-08-10 00:23:45 -07:00
file_state.py
file_tools.py feat(tools): stat-based special-file guard for read_file + readtool eval harness 2026-08-09 23:30:02 -07:00
flux3_video_tool.py
focus_pane_tool.py
fuzzy_match.py
homeassistant_tool.py
hook_output_spill.py
image_generation_tool.py
image_source.py
interrupt.py
kanban_tools.py
lazy_deps.py
managed_tool_gateway.py
mcp_dashboard_oauth.py
mcp_oauth.py
mcp_oauth_manager.py
mcp_schema_cache.py
mcp_stdio_watchdog.py
mcp_tool.py
memory_tool.py
microsoft_graph_auth.py
microsoft_graph_client.py
neutts_synth.py
open_preview_tool.py
openrouter_client.py
osv_check.py
patch_parser.py
path_security.py
process_registry.py fix(process): reject non-positive wait timeouts; distinguish log offset=0 from default 2026-08-10 00:23:41 -07:00
project_tools.py
react_to_message_tool.py
read_extract.py
read_preview_tool.py
read_terminal_tool.py
read_window_tool.py
registry.py
schema_sanitizer.py
self_repo_guard.py
send_message_tool.py
session_search_tool.py
skill_linter.py
skill_manager_tool.py
skill_provenance.py
skill_usage.py
skills_ast_audit.py
skills_guard.py
skills_hub.py feat(skills-hub): fall back to live repo for optional skills missing from local checkout 2026-08-09 23:14:18 -07:00
skills_sync.py
skills_sync_client.py
skills_tool.py
slash_confirm.py
terminal_hints.py
terminal_tool.py fix(docker): per-session container isolation and session-scoped workspace mounts 2026-08-09 14:35:02 -07:00
thread_context.py
threat_patterns.py
tirith_security.py
todo_tool.py
tool_backend_helpers.py
tool_output_limits.py
tool_result_storage.py
tool_search.py
transcription_tools.py
tts_streaming.py
tts_text_normalize.py
tts_tool.py
url_safety.py
video_generation_tool.py
vision_tools.py
voice_mode.py
wake_word.py
web_tools.py
website_policy.py
working_diff.py
write_approval.py
x_search_tool.py
xai_http.py
xai_video_tools.py
yuanbao_tools.py