diff --git a/server-common/src/main/java/io/a2a/server/agentexecution/RequestContext.java b/server-common/src/main/java/io/a2a/server/agentexecution/RequestContext.java index beee9bf7e..a7f0ec184 100644 --- a/server-common/src/main/java/io/a2a/server/agentexecution/RequestContext.java +++ b/server-common/src/main/java/io/a2a/server/agentexecution/RequestContext.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; @@ -198,6 +199,15 @@ public List getRelatedTasks() { return params != null ? params.configuration() : null; } + /** + * Returns the request metadata. + * + * @return the metadata, or null if not available + */ + public @Nullable Map getMetadata() { + return (params != null && params.metadata() != null) ? Collections.unmodifiableMap(params.metadata()) : null; + } + /** * Returns the server call context. *

diff --git a/server-common/src/test/java/io/a2a/server/agentexecution/RequestContextTest.java b/server-common/src/test/java/io/a2a/server/agentexecution/RequestContextTest.java index 2fc0c62e9..7e05ea739 100644 --- a/server-common/src/test/java/io/a2a/server/agentexecution/RequestContextTest.java +++ b/server-common/src/test/java/io/a2a/server/agentexecution/RequestContextTest.java @@ -10,6 +10,7 @@ import static org.mockito.Mockito.mockStatic; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.UUID; @@ -38,6 +39,7 @@ public void testInitWithoutParams() { RequestContext context = new RequestContext.Builder().build(); assertNull(context.getMessage()); + assertNull(context.getMetadata()); assertNotNull(context.getTaskId()); // Generated UUID assertNotNull(context.getContextId()); // Generated UUID assertNull(context.getTask()); @@ -70,6 +72,25 @@ public void testInitWithParamsNoIds() { } } + @Test + public void testInitWithParamsMetadata() { + var message = Message.builder().role(Message.Role.ROLE_USER).parts(List.of(new TextPart(""))).build(); + var metadata = new HashMap(); + metadata.put("key", "value"); + + var params = MessageSendParams.builder() + .message(message) + .metadata(metadata) + .build(); + + RequestContext context = new RequestContext.Builder() + .setParams(params) + .build(); + + assertEquals(metadata, context.getMetadata()); + assertThrows(UnsupportedOperationException.class, () -> context.getMetadata().put("anotherKey", "anotherValue")); + } + @Test public void testInitWithTaskId() { String taskId = "task-123";