Builds the renderable conversation timeline from the loaded detail rows (chronological,
as the engine returns them):
rows WITHOUT an AgentSessionID pass through unchanged, in order;
rows WITH one collapse into ONE session block per session id, positioned where the
session's FIRST stamped row sits. Later stamped rows of the same session (even when
interleaved with normal messages) fold into that same block — one element per
session, period.
Session-id comparison is case-insensitive (NormalizeUUID) so SQL Server
(uppercase) and PostgreSQL (lowercase) ids group identically.
Builds the renderable conversation timeline from the loaded detail rows (chronological, as the engine returns them):
AgentSessionIDpass through unchanged, in order;Session-id comparison is case-insensitive (NormalizeUUID) so SQL Server (uppercase) and PostgreSQL (lowercase) ids group identically.