fix(cli): flush un-persisted messages before /resume and /branch end the old session

compress_context() and /new already flush un-persisted messages before
calling end_session() (fixed in #47202), but /resume and /branch still
call end_session() directly. When a turn is interrupted mid-flight and
the user immediately runs /resume or /branch, messages generated during
that turn have not yet been written to state.db and are silently lost on
session rotation.

Add the same best-effort _flush_messages_to_session_db() call before
end_session() in both _handle_resume_command and _handle_branch_command,
mirroring the pattern established in cli.py:new_session().

Regression tests verify the flush is called when an agent is present.
This commit is contained in:
srojk34 2026-06-19 05:19:04 +03:00 committed by kshitij
parent 154c382d65
commit a76aa6198c
3 changed files with 65 additions and 0 deletions

View file

@ -712,6 +712,14 @@ class CLICommandsMixin:
return
old_session_id = self.session_id
# Flush un-persisted messages before ending the old session (#47202).
if self.agent:
try:
self.agent._flush_messages_to_session_db(
self.conversation_history
)
except Exception:
pass
# End current session
try:
self._session_db.end_session(self.session_id, "resumed_other")
@ -851,6 +859,15 @@ class CLICommandsMixin:
# Save the current session's state before branching
parent_session_id = self.session_id
# Flush un-persisted messages before ending the old session (#47202).
if self.agent:
try:
self.agent._flush_messages_to_session_db(
self.conversation_history
)
except Exception:
pass
# End the old session
try:
self._session_db.end_session(self.session_id, "branched")