fix(setup): drop post-setup chat handoff (#25067)

Removes the 'Launch hermes chat now? (Y/n)' prompt at the end of
hermes setup. The summary already prints 'Ready to go! → hermes'
so the auto-launch was redundant, and on macOS 26+ it could crash
in prompt_toolkit when setup was invoked from the curl install
script with stdin redirected from /dev/tty (#5884, #6128).

After setup, users run 'hermes' themselves like every other CLI
tool. Same pattern applies to the Windows installer.

Closes #6128 (narrower env-var-guarded fix superseded by removing
the prompt outright).
This commit is contained in:
Teknium 2026-05-13 13:28:25 -07:00 committed by GitHub
parent 6f2d1c88b7
commit 256bedb632
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 0 additions and 60 deletions

View file

@ -3246,18 +3246,6 @@ def run_setup_wizard(args):
print_info(f" cp {_backup_path} {config_path}") print_info(f" cp {_backup_path} {config_path}")
_print_setup_summary(config, hermes_home) _print_setup_summary(config, hermes_home)
_offer_launch_chat()
def _offer_launch_chat():
"""Prompt the user to jump straight into chat after setup."""
print()
if not prompt_yes_no("Launch hermes chat now?", True):
return
from hermes_cli.relaunch import relaunch
relaunch(["chat"])
def _run_first_time_quick_setup(config: dict, hermes_home, is_existing: bool): def _run_first_time_quick_setup(config: dict, hermes_home, is_existing: bool):
"""Streamlined first-time setup: provider, model, terminal & messaging. """Streamlined first-time setup: provider, model, terminal & messaging.
@ -3301,8 +3289,6 @@ def _run_first_time_quick_setup(config: dict, hermes_home, is_existing: bool):
_print_setup_summary(config, hermes_home) _print_setup_summary(config, hermes_home)
_offer_launch_chat()
def _run_quick_setup(config: dict, hermes_home): def _run_quick_setup(config: dict, hermes_home):
"""Quick setup — only configure items that are missing.""" """Quick setup — only configure items that are missing."""

View file

@ -573,48 +573,6 @@ def test_vercel_setup_prefills_project_and_team_from_link_file(tmp_path, monkeyp
assert defaults[" Vercel team ID"] == "linked-team" assert defaults[" Vercel team ID"] == "linked-team"
def test_offer_launch_chat_relaunches_via_bin(monkeypatch):
from hermes_cli import setup as setup_mod
from hermes_cli import relaunch as relaunch_mod
monkeypatch.setattr(setup_mod, "prompt_yes_no", lambda *_args, **_kwargs: True)
monkeypatch.setattr(relaunch_mod, "resolve_hermes_bin", lambda: "/usr/local/bin/hermes")
exec_calls = []
def fake_execvp(path, argv):
exec_calls.append((path, argv))
raise SystemExit(0)
monkeypatch.setattr(relaunch_mod.os, "execvp", fake_execvp)
with pytest.raises(SystemExit):
setup_mod._offer_launch_chat()
assert exec_calls == [("/usr/local/bin/hermes", ["/usr/local/bin/hermes", "chat"])]
def test_offer_launch_chat_falls_back_to_module(monkeypatch):
from hermes_cli import setup as setup_mod
from hermes_cli import relaunch as relaunch_mod
monkeypatch.setattr(setup_mod, "prompt_yes_no", lambda *_args, **_kwargs: True)
monkeypatch.setattr(relaunch_mod, "resolve_hermes_bin", lambda: None)
exec_calls = []
def fake_execvp(path, argv):
exec_calls.append((path, argv))
raise SystemExit(0)
monkeypatch.setattr(relaunch_mod.os, "execvp", fake_execvp)
with pytest.raises(SystemExit):
setup_mod._offer_launch_chat()
assert exec_calls == [(sys.executable, [sys.executable, "-m", "hermes_cli.main", "chat"])]
def test_setup_slack_saves_home_channel(monkeypatch): def test_setup_slack_saves_home_channel(monkeypatch):
"""_setup_slack() saves SLACK_HOME_CHANNEL when the user provides one.""" """_setup_slack() saves SLACK_HOME_CHANNEL when the user provides one."""
saved = {} saved = {}

View file

@ -262,7 +262,6 @@ class TestSetupWizardOpenclawIntegration:
patch.object(setup_mod, "setup_tools"), patch.object(setup_mod, "setup_tools"),
patch.object(setup_mod, "save_config"), patch.object(setup_mod, "save_config"),
patch.object(setup_mod, "_print_setup_summary"), patch.object(setup_mod, "_print_setup_summary"),
patch.object(setup_mod, "_offer_launch_chat"),
): ):
setup_mod.run_setup_wizard(args) setup_mod.run_setup_wizard(args)
@ -294,7 +293,6 @@ class TestSetupWizardOpenclawIntegration:
patch.object(setup_mod, "setup_tools"), patch.object(setup_mod, "setup_tools"),
patch.object(setup_mod, "save_config"), patch.object(setup_mod, "save_config"),
patch.object(setup_mod, "_print_setup_summary"), patch.object(setup_mod, "_print_setup_summary"),
patch.object(setup_mod, "_offer_launch_chat"),
): ):
setup_mod.run_setup_wizard(args) setup_mod.run_setup_wizard(args)
@ -327,7 +325,6 @@ class TestSetupWizardOpenclawIntegration:
patch.object(setup_mod, "setup_tools"), patch.object(setup_mod, "setup_tools"),
patch.object(setup_mod, "save_config"), patch.object(setup_mod, "save_config"),
patch.object(setup_mod, "_print_setup_summary"), patch.object(setup_mod, "_print_setup_summary"),
patch.object(setup_mod, "_offer_launch_chat"),
): ):
setup_mod.run_setup_wizard(args) setup_mod.run_setup_wizard(args)

View file

@ -63,7 +63,6 @@ def _enter_existing_install_patches(stack, **extra):
("hermes_cli.setup.get_env_value", {"return_value": None}), ("hermes_cli.setup.get_env_value", {"return_value": None}),
("hermes_cli.auth.get_active_provider", {"return_value": "openrouter"}), ("hermes_cli.auth.get_active_provider", {"return_value": "openrouter"}),
("hermes_cli.setup._print_setup_summary", {}), ("hermes_cli.setup._print_setup_summary", {}),
("hermes_cli.setup._offer_launch_chat", {}),
("hermes_cli.setup._offer_openclaw_migration", {"return_value": False}), ("hermes_cli.setup._offer_openclaw_migration", {"return_value": False}),
]: ]:
stack.enter_context(patch(target, **kwargs)) stack.enter_context(patch(target, **kwargs))