feat(cli): make reasoning effort session-scoped

This commit is contained in:
YAMAGUCHI Seiji 2026-06-22 09:27:59 +09:00 committed by Teknium
parent 8b6fde3a35
commit 8590c2d0d9
9 changed files with 269 additions and 50 deletions

View file

@ -154,6 +154,60 @@ class TestHandleReasoningCommand(unittest.TestCase):
level = rc.get("effort", "medium")
self.assertEqual(level, "xhigh")
def test_effort_defaults_to_global_save(self):
"""Plain /reasoning <level> keeps the existing config-writing behavior."""
from cli import CLI_CONFIG
from hermes_cli.cli_commands_mixin import CLICommandsMixin
stub = self._make_cli(reasoning_config={"enabled": True, "effort": "medium"})
with patch.dict(CLI_CONFIG.setdefault("agent", {}), {"reasoning_effort": "medium"}), \
patch("cli.save_config_value", return_value=True) as save_config, \
patch("cli._cprint"):
CLICommandsMixin._handle_reasoning_command(stub, "/reasoning high")
self.assertEqual(CLI_CONFIG["agent"]["reasoning_effort"], "high")
save_config.assert_called_once_with("agent.reasoning_effort", "high")
self.assertEqual(stub.reasoning_config, {"enabled": True, "effort": "high"})
self.assertIsNone(stub.agent)
def test_effort_session_flag_does_not_persist_config(self):
"""--session opts into a temporary session-only effort override."""
from hermes_cli.cli_commands_mixin import CLICommandsMixin
stub = self._make_cli(reasoning_config={"enabled": True, "effort": "medium"})
with patch("cli.save_config_value") as save_config, patch("cli._cprint"):
CLICommandsMixin._handle_reasoning_command(stub, "/reasoning high --session")
save_config.assert_not_called()
self.assertEqual(stub.reasoning_config, {"enabled": True, "effort": "high"})
self.assertIsNone(stub.agent)
def test_new_session_clears_session_reasoning_override(self):
"""/new and /clear must not carry a session-only effort override forward."""
from cli import CLI_CONFIG, HermesCLI
agent = SimpleNamespace(
reasoning_config={"enabled": True, "effort": "high"},
reset_session_state=MagicMock(),
)
stub = SimpleNamespace(
agent=agent,
conversation_history=[],
session_id="old-session",
_session_db=None,
_pending_title=None,
_resumed=False,
reasoning_config={"enabled": True, "effort": "high"},
_notify_session_boundary=MagicMock(),
)
with patch.dict(CLI_CONFIG.setdefault("agent", {}), {"reasoning_effort": "medium"}):
HermesCLI.new_session(stub, silent=True)
self.assertEqual(stub.reasoning_config, {"enabled": True, "effort": "medium"})
self.assertEqual(agent.reasoning_config, {"enabled": True, "effort": "medium"})
agent.reset_session_state.assert_called_once()
# ---------------------------------------------------------------------------
# Reasoning extraction and result dict