Preserve MessageMerger insertion order without timestamps

Agent-Logs-Url: https://github.com/microsoft/agent-framework/sessions/4bacd1d2-5911-4fde-8cfb-375ef0808563

Co-authored-by: lokitoth <6936551+lokitoth@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-05-13 18:59:32 +00:00
committed by GitHub
Unverified
parent 175a9c3558
commit 23312ee8b1
@@ -97,23 +97,11 @@ internal sealed class MessageMerger
}
}
private int CompareByDateTimeOffset(AgentResponse left, AgentResponse right)
private int CompareByDateTimeOffset(AgentResponse left, int leftIndex, AgentResponse right, int rightIndex)
{
const int LESS = -1, EQ = 0, GREATER = 1;
if (left.CreatedAt == right.CreatedAt)
if (!left.CreatedAt.HasValue || !right.CreatedAt.HasValue || left.CreatedAt == right.CreatedAt)
{
return EQ;
}
if (!left.CreatedAt.HasValue)
{
return GREATER;
}
if (!right.CreatedAt.HasValue)
{
return LESS;
return leftIndex.CompareTo(rightIndex);
}
return left.CreatedAt.Value.CompareTo(right.CreatedAt.Value);
@@ -136,8 +124,14 @@ internal sealed class MessageMerger
responseList.Add(mergeState.ComputeDangling());
}
responseList.Sort(this.CompareByDateTimeOffset);
responses[responseId] = responseList.Aggregate(MergeResponses);
List<(AgentResponse Response, int Index)> orderedResponseList = responseList
.Select((response, index) => (Response: response, Index: index))
.ToList();
orderedResponseList.Sort((left, right) => this.CompareByDateTimeOffset(left.Response, left.Index, right.Response, right.Index));
responses[responseId] = orderedResponseList
.Select(item => item.Response)
.Aggregate(MergeResponses);
messages.AddRange(GetMessagesWithCreatedAt(responses[responseId]));
}