hermes-agent/tools
Teknium 71252f0dcb
fix(terminal): fall back when the configured cwd is unenterable, not just missing (#66306)
A root-launched CLI session can leak /root into the terminal cwd state a
non-root gateway/cron process later resolves (#65583). os.path.isdir('/root')
is True for a non-root user — stat only needs search permission on / — so
_resolve_safe_cwd returned it and subprocess.Popen(cwd='/root') died with
PermissionError: [Errno 13], failing EVERY cron job's terminal/file/search
tool on every command until restart.

_resolve_safe_cwd now requires X_OK (new _cwd_usable helper) and climbs to
the nearest enterable ancestor, logging a WARNING that names the leak class
when an existing-but-denied cwd is skipped. Missing-cwd recovery (#17558)
behavior unchanged.

E2E-verified: LocalEnvironment constructed with an unenterable cwd now runs
commands from the fallback directory instead of raising.
2026-07-17 06:54:51 -07:00
..
computer_use fix(computer-use): target Linux app windows reliably (#63725) 2026-07-16 00:34:20 +05:30
environments fix(terminal): fall back when the configured cwd is unenterable, not just missing (#66306) 2026-07-17 06:54:51 -07:00
neutts_samples
…
__init__.py
…
ansi_strip.py fix(cli): sanitize terminal escapes when replaying stored history (/resume recap, /status recap) 2026-07-17 04:53:38 -07:00
approval.py fix(approval): unify execution-bearing option detection 2026-07-17 04:53:04 -07:00
async_delegation.py fix(delegation): fail closed on restored completions + stamp CLI dispatch identity 2026-07-14 22:14:10 -07:00
binary_extensions.py
…
blueprints.py fix: widen UTF-8 BOM tolerance to all sibling frontmatter parsers 2026-07-17 04:52:02 -07:00
browser_camofox.py
…
browser_camofox_state.py
…
browser_cdp_tool.py
…
browser_dialog_tool.py
…
browser_supervisor.py
…
browser_tool.py feat(browser): store full snapshots on truncation; make eval denylist opt-in (#65923) 2026-07-16 23:41:26 -07:00
budget_config.py
…
checkpoint_manager.py
…
clarify_gateway.py
…
clarify_tool.py
…
close_terminal_tool.py
…
code_execution_tool.py fix(security): widen non-ASCII compare_digest crash fix to all sibling sites 2026-07-16 07:22:24 -07:00
computer_use_tool.py
…
credential_files.py
…
cronjob_tools.py
…
daemon_pool.py
…
debug_helpers.py
…
delegate_tool.py refactor(file-tools): resolve paths against per-session cwd records (step 2) 2026-07-16 00:18:38 -07:00
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-safety): distinguish safe-root write denial from credential blocks 2026-07-14 17:09:40 +05:30
file_state.py
…
file_tools.py refactor(terminal,file-tools): delete legacy env-side cwd tracking (step 4) 2026-07-16 00:18:38 -07:00
fuzzy_match.py
…
homeassistant_tool.py
…
hook_output_spill.py
…
image_generation_tool.py fix(deepinfra): harden multimodal provider routing 2026-07-14 02:59:39 +05:30
image_source.py
…
interrupt.py
…
kanban_tools.py fix(kanban): guard kanban_attach_url against SSRF via tools.url_safety 2026-07-16 07:33:14 -07:00
lazy_deps.py fix(honcho): update SDK and restore CI coverage 2026-07-16 12:48:48 -07:00
managed_tool_gateway.py
…
mcp_dashboard_oauth.py fix(mcp): preserve live OAuth state during reauth 2026-07-17 04:50:47 -07:00
mcp_oauth.py fix(mcp): preserve live OAuth state during reauth 2026-07-17 04:50:47 -07:00
mcp_oauth_manager.py fix(mcp): preserve live OAuth state during reauth 2026-07-17 04:50:47 -07:00
mcp_stdio_watchdog.py
…
mcp_tool.py fix(mcp): treat non-string nextCursor as end of pagination 2026-07-17 04:57:12 -07:00
memory_tool.py
…
microsoft_graph_auth.py
…
microsoft_graph_client.py
…
neutts_synth.py
…
openrouter_client.py
…
osv_check.py
…
patch_parser.py
…
path_security.py
…
process_registry.py fix(tui): route post-turn completions by owner 2026-07-15 23:51:43 -07:00
project_tools.py
…
read_extract.py
…
read_terminal_tool.py
…
registry.py perf(tools): text prefilter before AST parse in tool discovery 2026-07-13 18:14:15 -04:00
schema_sanitizer.py
…
send_message_tool.py fix(gateway/platforms): migrate all Weixin fallbacks to get_secret() for consistent profile-scoped resolution 2026-07-16 05:39:58 -07:00
session_search_tool.py
…
skill_manager_tool.py fix: widen UTF-8 BOM tolerance to all sibling frontmatter parsers 2026-07-17 04:52:02 -07:00
skill_provenance.py
…
skill_usage.py
…
skills_ast_audit.py
…
skills_guard.py
…
skills_hub.py fix: widen UTF-8 BOM tolerance to all sibling frontmatter parsers 2026-07-17 04:52:02 -07:00
skills_sync.py
…
skills_tool.py
…
slash_confirm.py
…
terminal_tool.py fix(terminal): bridge terminal.backend config in serve/desktop processes lacking a launcher env bridge 2026-07-16 08:55:10 -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 fix(deepinfra): harden multimodal provider routing 2026-07-14 02:59:39 +05:30
tts_tool.py fix(gemini): restrict TTS client context to official host 2026-07-13 22:26:19 -07:00
url_safety.py
…
video_generation_tool.py feat(providers): Support DeepInfra as an LLM provider 2026-07-14 02:59:39 +05:30
vision_tools.py
…
voice_mode.py
…
web_tools.py
…
website_policy.py
…
write_approval.py
…
x_search_tool.py
…
xai_http.py fix(auth): make xAI OAuth pools multi-account resilient 2026-07-17 11:37:25 +05:30
xai_video_tools.py
…
yuanbao_tools.py
…