From 765c3fd0bfa08fd59d3013c407aad1313dc51d3f Mon Sep 17 00:00:00 2001 From: Ihar Yakimush Date: Fri, 27 Feb 2026 17:13:17 +0300 Subject: [PATCH 1/2] fix .NET: [Bug]: When converting from AGUIToolMessage to ChatMessage, the MessageId is lost. #4342 --- .../Shared/AGUIChatMessageExtensions.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dotnet/src/Microsoft.Agents.AI.AGUI/Shared/AGUIChatMessageExtensions.cs b/dotnet/src/Microsoft.Agents.AI.AGUI/Shared/AGUIChatMessageExtensions.cs index 506956cac8..fefbc969ba 100644 --- a/dotnet/src/Microsoft.Agents.AI.AGUI/Shared/AGUIChatMessageExtensions.cs +++ b/dotnet/src/Microsoft.Agents.AI.AGUI/Shared/AGUIChatMessageExtensions.cs @@ -51,7 +51,10 @@ public static IEnumerable AsChatMessages( new FunctionResultContent( toolMessage.ToolCallId, result) - ]); + ]) + { + MessageId = message.Id + }; break; } From 6b0bd91045e5eb435df05c07a2c5ee67847d0295 Mon Sep 17 00:00:00 2001 From: Ihar Yakimush Date: Fri, 27 Feb 2026 17:32:57 +0300 Subject: [PATCH 2/2] add tests for https://github.com/microsoft/agent-framework/issues/4342 --- .../AGUIChatMessageExtensionsTests.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dotnet/tests/Microsoft.Agents.AI.AGUI.UnitTests/AGUIChatMessageExtensionsTests.cs b/dotnet/tests/Microsoft.Agents.AI.AGUI.UnitTests/AGUIChatMessageExtensionsTests.cs index bc3a73fb4c..40b723b7bc 100644 --- a/dotnet/tests/Microsoft.Agents.AI.AGUI.UnitTests/AGUIChatMessageExtensionsTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.AGUI.UnitTests/AGUIChatMessageExtensionsTests.cs @@ -102,18 +102,20 @@ public void AsChatMessages_MapsAllSupportedRoleTypes_Correctly() new AGUISystemMessage { Id = "msg1", Content = "System message" }, new AGUIUserMessage { Id = "msg2", Content = "User message" }, new AGUIAssistantMessage { Id = "msg3", Content = "Assistant message" }, - new AGUIDeveloperMessage { Id = "msg4", Content = "Developer message" } + new AGUIDeveloperMessage { Id = "msg4", Content = "Developer message" }, + new AGUIToolMessage { Id = "msg5", Content = "Tool message" } ]; // Act List chatMessages = aguiMessages.AsChatMessages(AGUIJsonSerializerContext.Default.Options).ToList(); // Assert - Assert.Equal(4, chatMessages.Count); + Assert.Equal(5, chatMessages.Count); Assert.Equal(ChatRole.System, chatMessages[0].Role); Assert.Equal(ChatRole.User, chatMessages[1].Role); Assert.Equal(ChatRole.Assistant, chatMessages[2].Role); Assert.Equal("developer", chatMessages[3].Role.Value); + Assert.Equal(ChatRole.Tool, chatMessages[4].Role); } [Fact] @@ -192,6 +194,7 @@ public void AsAGUIMessages_PreservesMessageId_WhenPresent() [InlineData(AGUIRoles.User, "user")] [InlineData(AGUIRoles.Assistant, "assistant")] [InlineData(AGUIRoles.Developer, "developer")] + [InlineData(AGUIRoles.Tool, "tool")] public void MapChatRole_WithValidRole_ReturnsCorrectChatRole(string aguiRole, string expectedRoleValue) { // Arrange & Act @@ -283,6 +286,7 @@ public void AsChatMessages_WithToolMessage_DeserializesResultCorrectly() // Assert ChatMessage message = Assert.Single(chatMessages); Assert.Equal(ChatRole.Tool, message.Role); + Assert.Equal("msg1", message.MessageId); FunctionResultContent result = Assert.IsType(message.Contents[0]); Assert.Equal("call_abc", result.CallId); Assert.NotNull(result.Result);