From fc736e8a1b3ae105ef4527063e0a8dd978833bb0 Mon Sep 17 00:00:00 2001 From: Kabir Khan Date: Thu, 21 May 2026 21:49:12 +0100 Subject: [PATCH] fix: Don't autogenerate message id (0.3 TCK has a test for a null one) Co-Authored-By: Claude Opus 4.6 --- .../sdk/compat03/grpc/utils/ProtoUtils_v0_3.java | 9 +++------ .../org/a2aproject/sdk/compat03/spec/Message_v0_3.java | 9 ++++----- .../sdk/compat03/spec/TaskSerialization_v0_3_Test.java | 2 ++ 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/compat-0.3/spec-grpc/src/main/java/org/a2aproject/sdk/compat03/grpc/utils/ProtoUtils_v0_3.java b/compat-0.3/spec-grpc/src/main/java/org/a2aproject/sdk/compat03/grpc/utils/ProtoUtils_v0_3.java index cb94fa794..c784afc48 100644 --- a/compat-0.3/spec-grpc/src/main/java/org/a2aproject/sdk/compat03/grpc/utils/ProtoUtils_v0_3.java +++ b/compat-0.3/spec-grpc/src/main/java/org/a2aproject/sdk/compat03/grpc/utils/ProtoUtils_v0_3.java @@ -35,7 +35,6 @@ import org.a2aproject.sdk.compat03.spec.GetTaskPushNotificationConfigParams_v0_3; import org.a2aproject.sdk.compat03.spec.HTTPAuthSecurityScheme_v0_3; import org.a2aproject.sdk.compat03.spec.ImplicitOAuthFlow_v0_3; -import org.a2aproject.sdk.compat03.spec.InvalidParamsError_v0_3; import org.a2aproject.sdk.compat03.spec.InvalidRequestError_v0_3; import org.a2aproject.sdk.compat03.spec.ListTaskPushNotificationConfigParams_v0_3; import org.a2aproject.sdk.compat03.spec.Message_v0_3; @@ -151,7 +150,9 @@ public static org.a2aproject.sdk.compat03.grpc.Task task(Task_v0_3 task) { public static org.a2aproject.sdk.compat03.grpc.Message message(Message_v0_3 message) { org.a2aproject.sdk.compat03.grpc.Message.Builder builder = org.a2aproject.sdk.compat03.grpc.Message.newBuilder(); - builder.setMessageId(message.messageId()); + if (message.messageId() != null) { + builder.setMessageId(message.messageId()); + } if (message.contextId() != null) { builder.setContextId(message.contextId()); } @@ -863,10 +864,6 @@ public static Task_v0_3 task(org.a2aproject.sdk.compat03.grpc.TaskOrBuilder task } public static Message_v0_3 message(org.a2aproject.sdk.compat03.grpc.MessageOrBuilder message) { - if (message.getMessageId().isEmpty()) { - throw new InvalidParamsError_v0_3(); - } - return new Message_v0_3( role(message.getRole()), message.getContentList().stream().map(item -> part(item)).collect(Collectors.toList()), diff --git a/compat-0.3/spec/src/main/java/org/a2aproject/sdk/compat03/spec/Message_v0_3.java b/compat-0.3/spec/src/main/java/org/a2aproject/sdk/compat03/spec/Message_v0_3.java index 860437a60..474d47aff 100644 --- a/compat-0.3/spec/src/main/java/org/a2aproject/sdk/compat03/spec/Message_v0_3.java +++ b/compat-0.3/spec/src/main/java/org/a2aproject/sdk/compat03/spec/Message_v0_3.java @@ -1,6 +1,5 @@ package org.a2aproject.sdk.compat03.spec; - import java.util.List; import java.util.Map; import java.util.UUID; @@ -14,7 +13,7 @@ public record Message_v0_3( Role role, List> parts, - String messageId, + @Nullable String messageId, @Nullable String contextId, @Nullable String taskId, @Nullable List referenceTaskIds, @@ -25,7 +24,7 @@ public record Message_v0_3( public static final String KIND = "message"; - public Message_v0_3(Role role, List> parts, String messageId, @Nullable String contextId, + public Message_v0_3(Role role, List> parts, @Nullable String messageId, @Nullable String contextId, @Nullable String taskId, @Nullable List referenceTaskIds, @Nullable Map metadata, @Nullable List extensions, String kind) { Assert.checkNotNullParam("role", role); @@ -35,7 +34,7 @@ public Message_v0_3(Role role, List> parts, String messageId, @Null throw new IllegalArgumentException("Parts cannot be empty"); } this.parts = List.copyOf(parts); - this.messageId = messageId == null ? UUID.randomUUID().toString() : messageId; + this.messageId = messageId; this.kind = kind != null ? kind : KIND; if (!this.kind.equals(KIND)) { throw new IllegalArgumentException("Invalid Message"); @@ -47,7 +46,7 @@ public Message_v0_3(Role role, List> parts, String messageId, @Null this.extensions = extensions != null ? List.copyOf(extensions) : null; } - public Message_v0_3(Role role, List> parts, String messageId, @Nullable String contextId, + public Message_v0_3(Role role, List> parts, @Nullable String messageId, @Nullable String contextId, @Nullable String taskId, @Nullable List referenceTaskIds, @Nullable Map metadata, @Nullable List extensions) { this(role, parts, messageId, contextId, taskId, referenceTaskIds, metadata, extensions, KIND); diff --git a/compat-0.3/spec/src/test/java/org/a2aproject/sdk/compat03/spec/TaskSerialization_v0_3_Test.java b/compat-0.3/spec/src/test/java/org/a2aproject/sdk/compat03/spec/TaskSerialization_v0_3_Test.java index dbe7e0243..927854a7a 100644 --- a/compat-0.3/spec/src/test/java/org/a2aproject/sdk/compat03/spec/TaskSerialization_v0_3_Test.java +++ b/compat-0.3/spec/src/test/java/org/a2aproject/sdk/compat03/spec/TaskSerialization_v0_3_Test.java @@ -599,6 +599,7 @@ void testDeserializeTaskWithHistoryFromJson() throws JsonProcessingException_v0_ }, "history": [ { + "messageId": "msg-001", "role": "user", "parts": [ { @@ -608,6 +609,7 @@ void testDeserializeTaskWithHistoryFromJson() throws JsonProcessingException_v0_ ] }, { + "messageId": "msg-002", "role": "agent", "parts": [ {