diff --git a/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java b/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java index f14ebc0fe..b01dda050 100644 --- a/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java +++ b/server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java @@ -190,6 +190,7 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A .artifactId("artifact-id") .name("artifact-1") .parts(Collections.singletonList(new TextPart("existing content"))) + .metadata(Map.of("key1", "value1")) .build(); Task taskWithArtifact = Task.builder(initialTask) .artifacts(Collections.singletonList(existingArtifact)) @@ -201,6 +202,7 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A .artifactId("artifact-id") .name("artifact-1") .parts(Collections.singletonList(new TextPart("new content"))) + .metadata(Map.of("key2", "value2")) .build(); TaskArtifactUpdateEvent event = TaskArtifactUpdateEvent.builder() .taskId(minimalTask.id()) @@ -217,6 +219,9 @@ public void testTaskArtifactUpdateEventAppendTrueWithExistingArtifact() throws A assertEquals(2, updatedArtifact.parts().size()); assertEquals("existing content", ((TextPart) updatedArtifact.parts().get(0)).text()); assertEquals("new content", ((TextPart) updatedArtifact.parts().get(1)).text()); + + assertEquals("value1", updatedArtifact.metadata().get("key1")); + assertEquals("value2", updatedArtifact.metadata().get("key2")); } @Test diff --git a/spec/src/main/java/io/a2a/util/Utils.java b/spec/src/main/java/io/a2a/util/Utils.java index 792365579..c61784205 100644 --- a/spec/src/main/java/io/a2a/util/Utils.java +++ b/spec/src/main/java/io/a2a/util/Utils.java @@ -3,7 +3,9 @@ import static io.a2a.util.Assert.checkNotNullParam; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.logging.Logger; import com.google.gson.Gson; @@ -129,8 +131,18 @@ public static Task appendArtifactToTask(Task task, TaskArtifactUpdateEvent event log.fine(String.format("Appending parts to artifact id %s for task %s", artifactId, taskId)); List> parts = new ArrayList<>(existingArtifact.parts()); parts.addAll(newArtifact.parts()); + + Map metadata = new HashMap<>(); + if (existingArtifact.metadata() != null) { + metadata.putAll(existingArtifact.metadata()); + } + if (newArtifact.metadata() != null) { + metadata.putAll(newArtifact.metadata()); + } + Artifact updated = Artifact.builder(existingArtifact) .parts(parts) + .metadata(metadata) .build(); artifacts.set(existingArtifactIndex, updated); } else {