@@ -333,22 +333,21 @@ public Task<ListTasksResult> ListTasksAsync(
333333 }
334334 }
335335
336- // Stream enumeration - filter by session, exclude expired
337- var query = _tasks . Values
338- . Where ( e => sessionId == null || e . SessionId == sessionId )
339- . Where ( e => ! IsExpired ( e ) ) ;
340-
341- // Order by (CreatedAt, TaskId) for stable, deterministic pagination
336+ // Stream enumeration - filter by session, exclude expired, order by (CreatedAt, TaskId) for stable pagination
342337 // Must sort BEFORE applying keyset filter to ensure consistent comparison
343- var orderedQuery = query . OrderBy ( e => ( e . CreatedAt , e . TaskId ) ) ;
338+ IEnumerable < TaskEntry > query = _tasks . Values
339+ . Where ( e => sessionId == null || e . SessionId == sessionId )
340+ . Where ( e => ! IsExpired ( e ) )
341+ . OrderBy ( e => ( e . CreatedAt , e . TaskId ) ) ;
344342
345343 // Apply keyset filter if cursor provided: (CreatedAt, TaskId) > cursor
346344 // This runs on sorted data, so we skip items until we pass the cursor position
347- IEnumerable < TaskEntry > filteredQuery = parsedCursor is { } parsedCursorValue
348- ? orderedQuery . SkipWhile ( e => ( e . CreatedAt , e . TaskId ) . CompareTo ( parsedCursorValue ) <= 0 )
349- : orderedQuery ;
345+ if ( parsedCursor is { } parsedCursorValue )
346+ {
347+ query = query . SkipWhile ( e => ( e . CreatedAt , e . TaskId ) . CompareTo ( parsedCursorValue ) <= 0 ) ;
348+ }
350349
351- var page = filteredQuery
350+ var page = query
352351 . Take ( _pageSize + 1 ) // Take one extra to check if there's a next page
353352 . Select ( e => e . ToMcpTask ( ) )
354353 . ToList ( ) ;
0 commit comments