mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-09 13:21:42 +00:00
hermes --tui launches the native OpenTUI engine (Bun) when HERMES_TUI_ENGINE=opentui (env) or display.tui_engine=opentui (config); Ink stays the default and the shipping path is untouched. - _resolve_tui_engine() (env > config > ink); refuses opentui on Windows/Termux (no Bun) -> falls back to ink with a notice. - _make_opentui_argv() -> [bun, src/entry.real.tsx] (no build step). - _bun_bin() with HERMES_BUN override. - Branch at top of _make_tui_argv BEFORE _ensure_tui_node (Bun-only host must not bootstrap Node). - Gate _launch_tui NODE_OPTIONS/--max-old-space-size on engine==ink (Bun is JSC; the V8 flag errors/ignores). Verified end-to-end via tmux: real hermes --tui -> Bun -> OpenTUI -> real Python gateway streamed a real reply. No-flag default still ink.
47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
"""
|
|
Hermes CLI - Unified command-line interface for Hermes Agent.
|
|
|
|
Provides subcommands for:
|
|
- hermes chat - Interactive chat (same as ./hermes)
|
|
- hermes gateway - Run gateway in foreground
|
|
- hermes gateway start - Start gateway service
|
|
- hermes gateway stop - Stop gateway service
|
|
- hermes setup - Interactive setup wizard
|
|
- hermes status - Show status of all components
|
|
- hermes cron - Manage cron jobs
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
|
|
__version__ = "0.16.0"
|
|
__release_date__ = "2026.6.5"
|
|
|
|
|
|
def _ensure_utf8():
|
|
"""Force UTF-8 stdout/stderr on Windows to prevent UnicodeEncodeError.
|
|
|
|
Windows services and terminals default to cp1252, which cannot encode
|
|
box-drawing characters used in CLI output. This causes unhandled
|
|
UnicodeEncodeError crashes on gateway startup.
|
|
"""
|
|
if sys.platform != "win32":
|
|
return
|
|
os.environ.setdefault("PYTHONUTF8", "1")
|
|
os.environ.setdefault("PYTHONIOENCODING", "utf-8")
|
|
for stream_name in ("stdout", "stderr"):
|
|
stream = getattr(sys, stream_name, None)
|
|
if stream is None:
|
|
continue
|
|
try:
|
|
if getattr(stream, "encoding", "").lower().replace("-", "") != "utf8":
|
|
new_stream = open(
|
|
stream.fileno(), "w", encoding="utf-8",
|
|
buffering=1, closefd=False,
|
|
)
|
|
setattr(sys, stream_name, new_stream)
|
|
except (AttributeError, OSError):
|
|
pass
|
|
|
|
|
|
_ensure_utf8()
|