@@ -141,6 +141,18 @@ async def test_append_event_empty_state_delta(self):
141141 await svc .append_event (session , event )
142142 assert len (session .events ) == 1
143143
144+ async def test_append_event_stores_filtered_events_when_configured (self ):
145+ config = SessionServiceConfig (max_events = 2 , store_historical_events = True )
146+ svc = ConcreteSessionService (session_config = config )
147+ session = _make_session ()
148+
149+ for i in range (6 ):
150+ event = _make_event (author = "user" if i == 2 else "agent" , text = f"msg{ i } " )
151+ await svc .append_event (session , event )
152+
153+ assert [event .get_text () for event in session .events ] == ["msg2" , "msg5" ]
154+ assert [event .get_text () for event in session .historical_events ] == ["msg0" , "msg1" , "msg3" , "msg4" ]
155+
144156
145157class TestBaseSessionServiceTrimTempDeltaState :
146158 """Test _trim_temp_delta_state method."""
@@ -172,10 +184,23 @@ def test_filter_by_num_recent_events(self):
172184 for i in range (10 ):
173185 author = "user" if i == 7 else "agent"
174186 session .events .append (_make_event (author = author , text = f"msg{ i } " ))
175- svc .filter_events (session )
187+ filtered_session = svc .filter_events (session )
188+ assert filtered_session is session
189+ assert [event .get_text () for event in session .events ] == ["msg7" , "msg8" , "msg9" ]
190+
191+ def test_filter_by_num_recent_events_with_copy (self ):
192+ config = SessionServiceConfig (num_recent_events = 3 )
193+ svc = ConcreteSessionService (session_config = config )
194+ session = _make_session ()
195+ for i in range (10 ):
196+ author = "user" if i == 7 else "agent"
197+ session .events .append (_make_event (author = author , text = f"msg{ i } " ))
198+
199+ filtered_session = svc .filter_events (session , need_copy = True )
200+
201+ assert filtered_session is not session
176202 assert len (session .events ) == 10
177- visible_events = [event for event in session .events if event .is_model_visible ()]
178- assert [event .get_text () for event in visible_events ] == ["msg7" , "msg8" , "msg9" ]
203+ assert [event .get_text () for event in filtered_session .events ] == ["msg7" , "msg8" , "msg9" ]
179204
180205 def test_filter_by_event_ttl (self ):
181206 config = SessionServiceConfig (event_ttl_seconds = 5.0 )
@@ -190,18 +215,18 @@ def test_filter_by_event_ttl(self):
190215 new_event .timestamp = time .time ()
191216 session .events .append (new_event )
192217
193- svc .filter_events (session )
194- assert len (session .events ) == 2
195- visible_events = [event for event in session .events if event .is_model_visible ()]
196- assert len (visible_events ) == 1
197- assert visible_events [0 ].get_text () == "new"
218+ filtered_session = svc .filter_events (session )
219+ assert filtered_session is session
220+ assert len (session .events ) == 1
221+ assert session .events [0 ].get_text () == "new"
198222
199223 def test_filter_no_config (self ):
200224 svc = ConcreteSessionService ()
201225 session = _make_session ()
202226 for i in range (5 ):
203227 session .events .append (_make_event (text = f"msg{ i } " ))
204- svc .filter_events (session )
228+ filtered_session = svc .filter_events (session )
229+ assert filtered_session is session
205230 assert len (session .events ) == 5
206231
207232 def test_filter_ttl_removes_all_old (self ):
@@ -212,9 +237,9 @@ def test_filter_ttl_removes_all_old(self):
212237 e = _make_event (text = f"old{ i } " )
213238 e .timestamp = time .time () - 100
214239 session .events .append (e )
215- svc .filter_events (session )
216- assert len ( session . events ) == 5
217- assert all ( not event . is_model_visible () for event in session .events )
240+ filtered_session = svc .filter_events (session )
241+ assert filtered_session is session
242+ assert session .events == []
218243
219244 def test_filter_by_num_recent_events_preserves_summary_anchor (self ):
220245 config = SessionServiceConfig (num_recent_events = 3 )
@@ -227,11 +252,11 @@ def test_filter_by_num_recent_events_preserves_summary_anchor(self):
227252 for i in range (5 ):
228253 session .events .append (_make_event (text = f"agent{ i } " ))
229254
230- svc .filter_events (session )
255+ filtered_session = svc .filter_events (session )
231256
232- visible_events = [ event for event in session . events if event . is_model_visible ()]
233- assert len (visible_events ) == 1
234- assert visible_events [0 ].is_summary_event ()
257+ assert filtered_session is session
258+ assert len (session . events ) == 1
259+ assert session . events [0 ].is_summary_event ()
235260
236261
237262class TestBaseSessionServiceSetSummarizerManager :
0 commit comments