fix(cli): remove input() from /tools disable that freezes the terminal (#3918)
input() hangs inside prompt_toolkit's TUI event loop — this is a known pitfall (AGENTS.md). The /tools disable and /tools enable commands used input() for a Y/N confirmation prompt, causing the terminal to freeze with no way to type a response. Fix: remove the confirmation prompt. The user typing '/tools disable web' is implicit consent. The change is applied directly with a status message.
This commit is contained in:
20
cli.py
20
cli.py
@@ -2789,22 +2789,12 @@ class HermesCLI:
|
|||||||
print(f" MCP tool: /tools {subcommand} github:create_issue")
|
print(f" MCP tool: /tools {subcommand} github:create_issue")
|
||||||
return
|
return
|
||||||
|
|
||||||
# Confirm session reset before applying
|
# Apply the change directly — the user typing the command is implicit
|
||||||
verb = "Disable" if subcommand == "disable" else "Enable"
|
# consent. Do NOT use input() here; it hangs inside prompt_toolkit's
|
||||||
|
# TUI event loop (known pitfall).
|
||||||
|
verb = "Disabling" if subcommand == "disable" else "Enabling"
|
||||||
label = ", ".join(names)
|
label = ", ".join(names)
|
||||||
_cprint(f"{_GOLD}{verb} {label}?{_RST}")
|
_cprint(f"{_GOLD}{verb} {label}...{_RST}")
|
||||||
_cprint(f"{_DIM}This will save to config and reset your session so the "
|
|
||||||
f"change takes effect cleanly.{_RST}")
|
|
||||||
try:
|
|
||||||
answer = input(" Continue? [y/N] ").strip().lower()
|
|
||||||
except (EOFError, KeyboardInterrupt):
|
|
||||||
print()
|
|
||||||
_cprint(f"{_DIM}Cancelled.{_RST}")
|
|
||||||
return
|
|
||||||
|
|
||||||
if answer not in ("y", "yes"):
|
|
||||||
_cprint(f"{_DIM}Cancelled.{_RST}")
|
|
||||||
return
|
|
||||||
|
|
||||||
tools_disable_enable_command(
|
tools_disable_enable_command(
|
||||||
Namespace(tools_action=subcommand, names=names, platform="cli"))
|
Namespace(tools_action=subcommand, names=names, platform="cli"))
|
||||||
|
|||||||
Reference in New Issue
Block a user