fix: avoid replaying older long turns

Treat the current live user message as the replay boundary for normal user turns, while keeping user-turn extension for history and consolidation paths that need it. Add regression coverage for the user-triggered long tool-turn case.
This commit is contained in:
chengyongru
2026-06-18 00:03:22 +08:00
committed by Xubin Ren
parent 09962895fb
commit fc635377bc
5 changed files with 108 additions and 6 deletions
@@ -660,6 +660,23 @@ def test_get_history_can_extend_to_user_for_long_recent_turn():
_assert_no_orphans(extended)
def test_get_history_extend_to_user_keeps_newer_user_inside_window():
session = Session(key="test:history-extend-newer-user")
session.messages.append({"role": "user", "content": "old"})
session.messages.append({"role": "assistant", "content": "old answer"})
session.messages.append({"role": "user", "content": "long older turn"})
for i in range(8):
session.messages.extend(_tool_turn("older", i))
session.messages.append({"role": "assistant", "content": "older final"})
session.messages.append({"role": "user", "content": "new question"})
session.messages.append({"role": "assistant", "content": "new answer"})
history = session.get_history(max_messages=6, extend_to_user=True)
assert [m["content"] for m in history] == ["new question", "new answer"]
_assert_no_orphans(history)
# --- enforce_file_cap archive correctness (issue #4128) ---