hermes-agent/tools
hellno d7348bf24b fix(interrupt): run user-approved commands from a clean interrupt slate
A user-approved terminal/execute_code command could be SIGINT-killed
(exit 130 + "[Command interrupted]") by a stale interrupt bit that landed
on the execution thread during the blocking approval-wait, while the
result still carried the "...approved by the user." note. The terminal
tool runs sequentially inline on the execution thread, and nothing
cleared or re-checked the bit between approval-grant and env.execute.

Clear the current thread's interrupt bit once before an approved command
spawns its child (terminal foreground; execute_code local + remote), and
enrich the note to "...approved by the user, then interrupted." on a
genuine post-start interrupt instead of implying success. A genuine
interrupt arriving after execution starts (or during a retry backoff)
still SIGINTs the command; non-approved commands keep current behavior.

Adds regression tests covering stale-bit-clears, genuine-interrupt-still-
kills, the retry-backoff window, natural-exit-130 (not mislabeled), and
execute_code local + remote.
2026-07-06 04:58:42 -07:00
..
computer_use fix(computer-use): sanitize env on the 4 remaining cua-driver spawn sites (#59165) 2026-07-05 14:48:20 -07:00
environments fix(file-sync): re-deliver deferred Ctrl+C via raise_signal, not os.kill (Windows hard-kill) 2026-07-06 01:55:58 -07:00
neutts_samples
__init__.py
ansi_strip.py
approval.py feat(approvals): user-defined deny rules that block commands even under yolo (#59164) 2026-07-05 14:48:40 -07:00
async_delegation.py
binary_extensions.py
blueprints.py
browser_camofox.py fix(browser): block Camofox input on private pages 2026-07-03 03:27:47 -07:00
browser_camofox_state.py
browser_cdp_tool.py fix(browser): apply private-page guard to browser_cdp frame_id routing 2026-07-03 03:27:47 -07:00
browser_dialog_tool.py
browser_supervisor.py
browser_tool.py
budget_config.py
checkpoint_manager.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
clarify_gateway.py
clarify_tool.py
close_terminal_tool.py
code_execution_tool.py fix(interrupt): run user-approved commands from a clean interrupt slate 2026-07-06 04:58:42 -07:00
computer_use_tool.py
credential_files.py fix(vision): unified image-source resolver + terminal-backend confinement 2026-07-04 15:30:50 -07:00
cronjob_tools.py
daemon_pool.py
debug_helpers.py
delegate_tool.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
discord_tool.py perf: cut first-turn time-to-first-token by ~80% (all platforms) (#59332) 2026-07-05 21:37:33 -07:00
env_passthrough.py
env_probe.py perf: cut first-turn time-to-first-token by ~80% (all platforms) (#59332) 2026-07-05 21:37:33 -07:00
fal_common.py
feishu_doc_tool.py
feishu_drive_tool.py
file_operations.py
file_state.py
file_tools.py fix: disclose mid-line clamp in truncation hint 2026-07-05 14:42:05 -07:00
fuzzy_match.py
homeassistant_tool.py
hook_output_spill.py feat(hooks): spill oversized hook-injected context to disk (#20468) 2026-07-05 13:51:26 -07:00
image_generation_tool.py
image_source.py security(vision): route local-file inputs through the shared credential-read guard 2026-07-05 00:47:54 -07:00
interrupt.py fix(interrupt): run user-approved commands from a clean interrupt slate 2026-07-06 04:58:42 -07:00
kanban_tools.py
lazy_deps.py fix(update): skip unsupported Matrix refresh on Windows 2026-07-04 13:40:59 -07:00
managed_tool_gateway.py
mcp_oauth.py refactor(mcp): DRY the non-interactive OAuth guard + positive-control test 2026-07-04 14:10:33 +05:30
mcp_oauth_manager.py
mcp_tool.py fix(mcp): wake stale cached servers on session startup + AUTHOR_MAP 2026-07-05 21:48:36 -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
project_tools.py
read_extract.py
read_terminal_tool.py
registry.py
schema_sanitizer.py
send_message_tool.py fix: remove dead f-string prefixes via ruff F541 (216 sites) (#52336) 2026-07-05 13:42:46 -07:00
session_search_tool.py
skill_manager_tool.py
skill_provenance.py
skill_usage.py
skills_ast_audit.py
skills_guard.py
skills_hub.py fix(skills): don't request Brotli for the centralized skills index 2026-07-05 22:21:05 -07:00
skills_sync.py
skills_tool.py
slash_confirm.py
terminal_tool.py fix(interrupt): run user-approved commands from a clean interrupt slate 2026-07-06 04:58:42 -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_tool.py fix(tts): coerce direct-only OpenAI model on the managed audio gateway 2026-07-03 05:30:16 -05:00
url_safety.py
video_generation_tool.py
vision_tools.py security(vision): route local-file inputs through the shared credential-read guard 2026-07-05 00:47:54 -07:00
voice_mode.py
web_tools.py fix(web): correct 'disabled plugin' diagnosis for web backends (#59573) 2026-07-06 04:38:17 -07:00
website_policy.py fix(website-policy): key blocklist cache on the real default config path 2026-07-04 15:08:49 -07:00
write_approval.py
x_search_tool.py
xai_http.py
xai_video_tools.py
yuanbao_tools.py