mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-07-20 15:33:54 +00:00
🐛 fix(acp): reset session counters on slash reset
This commit is contained in:
parent
b9858acb0c
commit
6803519aa5
2 changed files with 43 additions and 1 deletions
|
|
@ -1903,7 +1903,18 @@ class HermesACPAgent(acp.Agent):
|
|||
|
||||
def _cmd_reset(self, args: str, state: SessionState) -> str:
|
||||
state.history.clear()
|
||||
self.session_manager.save_session(state.session_id)
|
||||
reset_failed = False
|
||||
try:
|
||||
reset_session_state = getattr(state.agent, "reset_session_state", None)
|
||||
if callable(reset_session_state):
|
||||
reset_session_state()
|
||||
except Exception:
|
||||
reset_failed = True
|
||||
logger.warning("ACP session state reset failed for %s", state.session_id, exc_info=True)
|
||||
finally:
|
||||
self.session_manager.save_session(state.session_id)
|
||||
if reset_failed:
|
||||
return "Conversation history cleared. Agent session state reset failed; see logs."
|
||||
return "Conversation history cleared."
|
||||
|
||||
def _cmd_compact(self, args: str, state: SessionState) -> str:
|
||||
|
|
|
|||
|
|
@ -1541,6 +1541,37 @@ class TestSlashCommands:
|
|||
assert "cleared" in result.lower()
|
||||
assert len(state.history) == 0
|
||||
|
||||
def test_reset_resets_agent_session_state(self, agent, mock_manager):
|
||||
state = self._make_state(mock_manager)
|
||||
state.history = [{"role": "user", "content": "hello"}]
|
||||
state.agent.reset_session_state = MagicMock()
|
||||
|
||||
with patch.object(agent.session_manager, "save_session") as mock_save:
|
||||
result = agent._handle_slash_command("/reset", state)
|
||||
|
||||
assert "cleared" in result.lower()
|
||||
assert state.history == []
|
||||
state.agent.reset_session_state.assert_called_once_with()
|
||||
mock_save.assert_called_once_with(state.session_id)
|
||||
|
||||
def test_reset_saves_session_when_agent_state_reset_fails(self, agent, mock_manager):
|
||||
state = self._make_state(mock_manager)
|
||||
state.history = [{"role": "user", "content": "hello"}]
|
||||
state.agent.reset_session_state = MagicMock(side_effect=RuntimeError("boom"))
|
||||
|
||||
with (
|
||||
patch.object(agent.session_manager, "save_session") as mock_save,
|
||||
patch("acp_adapter.server.logger") as mock_logger,
|
||||
):
|
||||
result = agent._handle_slash_command("/reset", state)
|
||||
|
||||
assert "cleared" in result.lower()
|
||||
assert "state reset failed" in result.lower()
|
||||
assert state.history == []
|
||||
state.agent.reset_session_state.assert_called_once_with()
|
||||
mock_save.assert_called_once_with(state.session_id)
|
||||
mock_logger.warning.assert_called_once()
|
||||
|
||||
def test_version(self, agent, mock_manager):
|
||||
state = self._make_state(mock_manager)
|
||||
result = agent._handle_slash_command("/version", state)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue