diff --git a/README.md b/README.md index 4e58db1d3..9339b08e5 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ The A2A Java SDK provides a Java server implementation of the [Agent2Agent (A2A) - [Add a class that creates an A2A Agent Executor](#3-add-a-class-that-creates-an-a2a-agent-executor) - [Add an A2A Java SDK Server Maven dependency to your project](#4-add-an-a2a-java-sdk-server-maven-dependency-to-your-project) -### 1. Add the A2A Java SDK Core Maven dependency to your project +### 1. Add the A2A Java SDK Maven dependencies to your project > **Note**: The A2A Java SDK isn't available yet in Maven Central but will be soon. For now, be > sure to check out the latest tag (you can see the tags [here](https://github.com/a2aproject/a2a-java/tags)), build from the tag, and reference that version below. For example, if the latest tag is `0.2.3`, you can use the following dependency. @@ -42,7 +42,12 @@ The A2A Java SDK provides a Java server implementation of the [Agent2Agent (A2A) ```xml io.a2a.sdk - a2a-java-sdk-core + a2a-java-sdk-client + 0.2.3 + + + io.a2a.sdk + a2a-java-sdk-server-common 0.2.3 ``` diff --git a/client/pom.xml b/client/pom.xml new file mode 100644 index 000000000..975fb2928 --- /dev/null +++ b/client/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + + io.a2a.sdk + a2a-java-sdk-parent + 0.2.4-SNAPSHOT + + a2a-java-sdk-client + + jar + + Java SDK A2A Client + Java SDK for the Agent2Agent Protocol (A2A) - Client + + + + ${project.groupId} + a2a-java-sdk-common + ${project.version} + + + + ${project.groupId} + a2a-java-sdk-spec + ${project.version} + + + + org.junit.jupiter + junit-jupiter-api + test + + + + org.mock-server + mockserver-netty + test + + + + \ No newline at end of file diff --git a/core/src/main/java/io/a2a/spec/A2A.java b/client/src/main/java/io/a2a/A2A.java similarity index 79% rename from core/src/main/java/io/a2a/spec/A2A.java rename to client/src/main/java/io/a2a/A2A.java index 4f3d2381c..c8dca80e4 100644 --- a/core/src/main/java/io/a2a/spec/A2A.java +++ b/client/src/main/java/io/a2a/A2A.java @@ -1,4 +1,4 @@ -package io.a2a.spec; +package io.a2a; import java.util.Collections; import java.util.Map; @@ -6,6 +6,11 @@ import io.a2a.client.A2ACardResolver; import io.a2a.http.A2AHttpClient; import io.a2a.http.JdkA2AHttpClient; +import io.a2a.spec.A2AClientError; +import io.a2a.spec.A2AClientJSONError; +import io.a2a.spec.AgentCard; +import io.a2a.spec.Message; +import io.a2a.spec.TextPart; /** @@ -13,17 +18,6 @@ */ public class A2A { - public static final String CANCEL_TASK_METHOD = "tasks/cancel"; - public static final String GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD = "tasks/pushNotificationConfig/get"; - public static final String GET_TASK_METHOD = "tasks/get"; - public static final String SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD = "tasks/pushNotificationConfig/set"; - public static final String SEND_TASK_RESUBSCRIPTION_METHOD = "tasks/resubscribe"; - public static final String SEND_STREAMING_MESSAGE_METHOD = "message/stream"; - public static final String SEND_MESSAGE_METHOD = "message/send"; - - public static final String JSONRPC_VERSION = "2.0"; - - /** * Convert the given text to a user message. * @@ -133,16 +127,4 @@ public static AgentCard getAgentCard(A2AHttpClient httpClient, String agentUrl, A2ACardResolver resolver = new A2ACardResolver(httpClient, agentUrl, relativeCardPath, authHeaders); return resolver.getAgentCard(); } - - protected static boolean isValidMethodName(String methodName) { - return methodName != null && (methodName.equals(CANCEL_TASK_METHOD) - || methodName.equals(GET_TASK_METHOD) - || methodName.equals(GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD) - || methodName.equals(SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD) - || methodName.equals(SEND_TASK_RESUBSCRIPTION_METHOD) - || methodName.equals(SEND_MESSAGE_METHOD) - || methodName.equals(SEND_STREAMING_MESSAGE_METHOD)); - - } - } diff --git a/core/src/main/java/io/a2a/client/A2ACardResolver.java b/client/src/main/java/io/a2a/client/A2ACardResolver.java similarity index 100% rename from core/src/main/java/io/a2a/client/A2ACardResolver.java rename to client/src/main/java/io/a2a/client/A2ACardResolver.java diff --git a/core/src/main/java/io/a2a/client/A2AClient.java b/client/src/main/java/io/a2a/client/A2AClient.java similarity index 94% rename from core/src/main/java/io/a2a/client/A2AClient.java rename to client/src/main/java/io/a2a/client/A2AClient.java index 3a35f0b67..ea08baea4 100644 --- a/core/src/main/java/io/a2a/client/A2AClient.java +++ b/client/src/main/java/io/a2a/client/A2AClient.java @@ -1,16 +1,6 @@ package io.a2a.client; -import static io.a2a.spec.A2A.CANCEL_TASK_METHOD; -import static io.a2a.spec.A2A.GET_TASK_METHOD; -import static io.a2a.spec.A2A.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; -import static io.a2a.spec.A2A.JSONRPC_VERSION; -import static io.a2a.spec.A2A.SEND_MESSAGE_METHOD; -import static io.a2a.spec.A2A.SEND_STREAMING_MESSAGE_METHOD; -import static io.a2a.spec.A2A.SEND_TASK_RESUBSCRIPTION_METHOD; -import static io.a2a.spec.A2A.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; import static io.a2a.util.Assert.checkNotNullParam; -import static io.a2a.util.Utils.OBJECT_MAPPER; -import static io.a2a.util.Utils.unmarshalFrom; import java.io.IOException; import java.util.Map; @@ -24,7 +14,7 @@ import io.a2a.http.A2AHttpClient; import io.a2a.http.A2AHttpResponse; import io.a2a.http.JdkA2AHttpClient; -import io.a2a.spec.A2A; +import io.a2a.A2A; import io.a2a.spec.A2AClientError; import io.a2a.spec.A2AClientJSONError; import io.a2a.spec.A2AServerException; @@ -36,6 +26,7 @@ import io.a2a.spec.GetTaskRequest; import io.a2a.spec.GetTaskResponse; import io.a2a.spec.JSONRPCError; +import io.a2a.spec.JSONRPCMessage; import io.a2a.spec.JSONRPCResponse; import io.a2a.spec.MessageSendParams; import io.a2a.spec.PushNotificationConfig; @@ -49,6 +40,7 @@ import io.a2a.spec.TaskPushNotificationConfig; import io.a2a.spec.TaskQueryParams; import io.a2a.spec.TaskResubscriptionRequest; +import io.a2a.util.Utils; /** * An A2A client. @@ -158,8 +150,8 @@ public SendMessageResponse sendMessage(MessageSendParams messageSendParams) thro */ public SendMessageResponse sendMessage(String requestId, MessageSendParams messageSendParams) throws A2AServerException { SendMessageRequest.Builder sendMessageRequestBuilder = new SendMessageRequest.Builder() - .jsonrpc(JSONRPC_VERSION) - .method(SEND_MESSAGE_METHOD) + .jsonrpc(JSONRPCMessage.JSONRPC_VERSION) + .method(SendMessageRequest.METHOD) .params(messageSendParams); if (requestId != null) { @@ -210,8 +202,8 @@ public GetTaskResponse getTask(TaskQueryParams taskQueryParams) throws A2AServer */ public GetTaskResponse getTask(String requestId, TaskQueryParams taskQueryParams) throws A2AServerException { GetTaskRequest.Builder getTaskRequestBuilder = new GetTaskRequest.Builder() - .jsonrpc(JSONRPC_VERSION) - .method(GET_TASK_METHOD) + .jsonrpc(JSONRPCMessage.JSONRPC_VERSION) + .method(GetTaskRequest.METHOD) .params(taskQueryParams); if (requestId != null) { @@ -260,8 +252,8 @@ public CancelTaskResponse cancelTask(TaskIdParams taskIdParams) throws A2AServer */ public CancelTaskResponse cancelTask(String requestId, TaskIdParams taskIdParams) throws A2AServerException { CancelTaskRequest.Builder cancelTaskRequestBuilder = new CancelTaskRequest.Builder() - .jsonrpc(JSONRPC_VERSION) - .method(CANCEL_TASK_METHOD) + .jsonrpc(JSONRPCMessage.JSONRPC_VERSION) + .method(CancelTaskRequest.METHOD) .params(taskIdParams); if (requestId != null) { @@ -310,8 +302,8 @@ public GetTaskPushNotificationConfigResponse getTaskPushNotificationConfig(TaskI */ public GetTaskPushNotificationConfigResponse getTaskPushNotificationConfig(String requestId, TaskIdParams taskIdParams) throws A2AServerException { GetTaskPushNotificationConfigRequest.Builder getTaskPushNotificationRequestBuilder = new GetTaskPushNotificationConfigRequest.Builder() - .jsonrpc(JSONRPC_VERSION) - .method(GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD) + .jsonrpc(JSONRPCMessage.JSONRPC_VERSION) + .method(GetTaskPushNotificationConfigRequest.METHOD) .params(taskIdParams); if (requestId != null) { @@ -353,8 +345,8 @@ public SetTaskPushNotificationConfigResponse setTaskPushNotificationConfig(Strin public SetTaskPushNotificationConfigResponse setTaskPushNotificationConfig(String requestId, String taskId, PushNotificationConfig pushNotificationConfig) throws A2AServerException { SetTaskPushNotificationConfigRequest.Builder setTaskPushNotificationRequestBuilder = new SetTaskPushNotificationConfigRequest.Builder() - .jsonrpc(JSONRPC_VERSION) - .method(SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD) + .jsonrpc(JSONRPCMessage.JSONRPC_VERSION) + .method(SetTaskPushNotificationConfigRequest.METHOD) .params(new TaskPushNotificationConfig(taskId, pushNotificationConfig)); if (requestId != null) { @@ -403,8 +395,8 @@ public void sendStreamingMessage(String requestId, MessageSendParams messageSend checkNotNullParam("failureHandler", failureHandler); SendStreamingMessageRequest.Builder sendStreamingMessageRequestBuilder = new SendStreamingMessageRequest.Builder() - .jsonrpc(JSONRPC_VERSION) - .method(SEND_STREAMING_MESSAGE_METHOD) + .jsonrpc(JSONRPCMessage.JSONRPC_VERSION) + .method(SendStreamingMessageRequest.METHOD) .params(messageSendParams); if (requestId != null) { @@ -462,8 +454,8 @@ public void resubscribeToTask(String requestId, TaskIdParams taskIdParams, Consu checkNotNullParam("failureHandler", failureHandler); TaskResubscriptionRequest.Builder taskResubscriptionRequestBuilder = new TaskResubscriptionRequest.Builder() - .jsonrpc(JSONRPC_VERSION) - .method(SEND_TASK_RESUBSCRIPTION_METHOD) + .jsonrpc(JSONRPCMessage.JSONRPC_VERSION) + .method(TaskResubscriptionRequest.METHOD) .params(taskIdParams); if (requestId != null) { @@ -502,13 +494,13 @@ private A2AHttpClient.PostBuilder createPostBuilder(Object value) throws JsonPro return httpClient.createPost() .url(agentUrl) .addHeader("Content-Type", "application/json") - .body(OBJECT_MAPPER.writeValueAsString(value)); + .body(Utils.OBJECT_MAPPER.writeValueAsString(value)); } private T unmarshalResponse(String response, TypeReference typeReference) throws A2AServerException, JsonProcessingException { - T value = unmarshalFrom(response, typeReference); + T value = Utils.unmarshalFrom(response, typeReference); JSONRPCError error = value.getError(); if (error != null) { throw new A2AServerException(error.getMessage() + (error.getData() != null ? ": " + error.getData() : "")); diff --git a/core/src/main/java/io/a2a/client/sse/SSEEventListener.java b/client/src/main/java/io/a2a/client/sse/SSEEventListener.java similarity index 100% rename from core/src/main/java/io/a2a/client/sse/SSEEventListener.java rename to client/src/main/java/io/a2a/client/sse/SSEEventListener.java diff --git a/core/src/main/java/io/a2a/http/A2AHttpClient.java b/client/src/main/java/io/a2a/http/A2AHttpClient.java similarity index 100% rename from core/src/main/java/io/a2a/http/A2AHttpClient.java rename to client/src/main/java/io/a2a/http/A2AHttpClient.java diff --git a/core/src/main/java/io/a2a/http/A2AHttpResponse.java b/client/src/main/java/io/a2a/http/A2AHttpResponse.java similarity index 100% rename from core/src/main/java/io/a2a/http/A2AHttpResponse.java rename to client/src/main/java/io/a2a/http/A2AHttpResponse.java diff --git a/core/src/main/java/io/a2a/http/JdkA2AHttpClient.java b/client/src/main/java/io/a2a/http/JdkA2AHttpClient.java similarity index 100% rename from core/src/main/java/io/a2a/http/JdkA2AHttpClient.java rename to client/src/main/java/io/a2a/http/JdkA2AHttpClient.java diff --git a/client/src/main/resources/META-INF/beans.xml b/client/src/main/resources/META-INF/beans.xml new file mode 100644 index 000000000..e69de29bb diff --git a/core/src/test/java/io/a2a/client/A2ACardResolverTest.java b/client/src/test/java/io/a2a/client/A2ACardResolverTest.java similarity index 100% rename from core/src/test/java/io/a2a/client/A2ACardResolverTest.java rename to client/src/test/java/io/a2a/client/A2ACardResolverTest.java diff --git a/core/src/test/java/io/a2a/client/A2AClientStreamingTest.java b/client/src/test/java/io/a2a/client/A2AClientStreamingTest.java similarity index 100% rename from core/src/test/java/io/a2a/client/A2AClientStreamingTest.java rename to client/src/test/java/io/a2a/client/A2AClientStreamingTest.java diff --git a/core/src/test/java/io/a2a/client/A2AClientTest.java b/client/src/test/java/io/a2a/client/A2AClientTest.java similarity index 100% rename from core/src/test/java/io/a2a/client/A2AClientTest.java rename to client/src/test/java/io/a2a/client/A2AClientTest.java diff --git a/core/src/test/java/io/a2a/client/JsonMessages.java b/client/src/test/java/io/a2a/client/JsonMessages.java similarity index 100% rename from core/src/test/java/io/a2a/client/JsonMessages.java rename to client/src/test/java/io/a2a/client/JsonMessages.java diff --git a/core/src/test/java/io/a2a/client/JsonStreamingMessages.java b/client/src/test/java/io/a2a/client/JsonStreamingMessages.java similarity index 100% rename from core/src/test/java/io/a2a/client/JsonStreamingMessages.java rename to client/src/test/java/io/a2a/client/JsonStreamingMessages.java diff --git a/core/src/test/java/io/a2a/client/sse/SSEEventListenerTest.java b/client/src/test/java/io/a2a/client/sse/SSEEventListenerTest.java similarity index 100% rename from core/src/test/java/io/a2a/client/sse/SSEEventListenerTest.java rename to client/src/test/java/io/a2a/client/sse/SSEEventListenerTest.java diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 000000000..3b6aabc36 --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,26 @@ + + + 4.0.0 + + + io.a2a.sdk + a2a-java-sdk-parent + 0.2.4-SNAPSHOT + + a2a-java-sdk-common + + jar + + Java SDK A2A Common + Java SDK for the Agent2Agent Protocol (A2A) - Common + + + + org.slf4j + slf4j-api + + + + \ No newline at end of file diff --git a/core/src/main/java/io/a2a/util/Assert.java b/common/src/main/java/io/a2a/util/Assert.java similarity index 100% rename from core/src/main/java/io/a2a/util/Assert.java rename to common/src/main/java/io/a2a/util/Assert.java diff --git a/core/src/main/java/io/a2a/util/NotNull.java b/common/src/main/java/io/a2a/util/NotNull.java similarity index 100% rename from core/src/main/java/io/a2a/util/NotNull.java rename to common/src/main/java/io/a2a/util/NotNull.java diff --git a/core/src/main/resources/META-INF/beans.xml b/core/src/main/resources/META-INF/beans.xml deleted file mode 100644 index 9dfae34df..000000000 --- a/core/src/main/resources/META-INF/beans.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - \ No newline at end of file diff --git a/core/src/test/java/io/a2a/util/AssertTest.java b/core/src/test/java/io/a2a/util/AssertTest.java deleted file mode 100644 index 247764dac..000000000 --- a/core/src/test/java/io/a2a/util/AssertTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package io.a2a.util; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import org.junit.jupiter.api.Test; - -/** - * Tests for Assert utility class - */ -class AssertTest { - - @Test - void testCheckNotNullParam_WithValidValue() { - // Test normal case - String testValue = "test"; - String result = Assert.checkNotNullParam("testParam", testValue); - assertEquals(testValue, result); - } - - @Test - void testCheckNotNullParam_WithNullValue() { - // Test that null value throws exception - assertThrows(IllegalArgumentException.class, () -> { - Assert.checkNotNullParam("testParam", null); - }); - } - - @Test - void testCheckNotNullParam_WithNullName() { - // Test that null name parameter throws exception - assertThrows(IllegalArgumentException.class, () -> { - Assert.checkNotNullParam(null, "testValue"); - }); - } - - @Test - void testCheckNotNullParam_WithEmptyName() { - // Test empty string name parameter - String testValue = "test"; - String result = Assert.checkNotNullParam("", testValue); - assertEquals(testValue, result); - } - - @Test - void testIsNullOrStringOrInteger_WithNull() { - // Test null value - assertDoesNotThrow(() -> { - Assert.isNullOrStringOrInteger(null); - }); - } - - @Test - void testIsNullOrStringOrInteger_WithString() { - // Test String type - assertDoesNotThrow(() -> { - Assert.isNullOrStringOrInteger("test"); - }); - } - - @Test - void testIsNullOrStringOrInteger_WithInteger() { - // Test Integer type - assertDoesNotThrow(() -> { - Assert.isNullOrStringOrInteger(123); - }); - } - - @Test - void testIsNullOrStringOrInteger_WithLong() { - // Test that Long type throws exception - assertThrows(IllegalArgumentException.class, () -> { - Assert.isNullOrStringOrInteger(123L); - }); - } - - @Test - void testIsNullOrStringOrInteger_WithDouble() { - // Test that Double type throws exception - assertThrows(IllegalArgumentException.class, () -> { - Assert.isNullOrStringOrInteger(123.45); - }); - } - - @Test - void testIsNullOrStringOrInteger_WithBoolean() { - // Test that Boolean type throws exception - assertThrows(IllegalArgumentException.class, () -> { - Assert.isNullOrStringOrInteger(true); - }); - } - - @Test - void testIsNullOrStringOrInteger_WithObject() { - // Test that Object type throws exception - assertThrows(IllegalArgumentException.class, () -> { - Assert.isNullOrStringOrInteger(new Object()); - }); - } -} diff --git a/core/src/test/java/io/a2a/util/UtilsTest.java b/core/src/test/java/io/a2a/util/UtilsTest.java deleted file mode 100644 index a9f7953f3..000000000 --- a/core/src/test/java/io/a2a/util/UtilsTest.java +++ /dev/null @@ -1,169 +0,0 @@ -package io.a2a.util; - - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import com.fasterxml.jackson.core.type.TypeReference; -import org.junit.jupiter.api.Test; - -import java.util.List; -import java.util.Map; - -/** - * Tests for Utils utility class - */ -class UtilsTest { - - @Test - void testDefaultIfNull_WithNullValue() { - // Test that null value returns default value - String result = Utils.defaultIfNull(null, "default"); - assertEquals("default", result); - } - - @Test - void testDefaultIfNull_WithNonNullValue() { - // Test that non-null value returns original value - String value = "test"; - String result = Utils.defaultIfNull(value, "default"); - assertEquals(value, result); - } - - @Test - void testDefaultIfNull_WithNullDefault() { - // Test case where default value is null - String value = "test"; - String result = Utils.defaultIfNull(value, null); - assertEquals(value, result); - } - - @Test - void testDefaultIfNull_WithBothNull() { - // Test case where both value and default are null - String result = Utils.defaultIfNull(null, null); - assertNull(result); - } - - @Test - void testDefaultIfNull_WithDifferentTypes() { - // Test with different types - Integer intValue = 123; - Integer result = Utils.defaultIfNull(intValue, 456); - assertEquals(intValue, result); - } - - @Test - void testUnmarshalFrom_WithValidJson() throws Exception { - // Test with valid JSON string - String json = "{\"name\":\"test\",\"value\":123}"; - TypeReference> typeRef = new TypeReference>() {}; - - Map result = Utils.unmarshalFrom(json, typeRef); - - assertNotNull(result); - assertEquals("test", result.get("name")); - assertEquals(123, result.get("value")); - } - - @Test - void testUnmarshalFrom_WithArrayJson() throws Exception { - // Test with array JSON - String json = "[\"item1\",\"item2\",\"item3\"]"; - TypeReference> typeRef = new TypeReference>() {}; - - List result = Utils.unmarshalFrom(json, typeRef); - - assertNotNull(result); - assertEquals(3, result.size()); - assertEquals("item1", result.get(0)); - assertEquals("item2", result.get(1)); - assertEquals("item3", result.get(2)); - } - - @Test - void testUnmarshalFrom_WithInvalidJson() { - // Test with invalid JSON string - String invalidJson = "{invalid json}"; - TypeReference> typeRef = new TypeReference>() {}; - - assertThrows(Exception.class, () -> { - Utils.unmarshalFrom(invalidJson, typeRef); - }); - } - - @Test - void testUnmarshalFrom_WithEmptyJson() throws Exception { - // Test with empty JSON object - String json = "{}"; - TypeReference> typeRef = new TypeReference>() {}; - - Map result = Utils.unmarshalFrom(json, typeRef); - - assertNotNull(result); - assertTrue(result.isEmpty()); - } - - @Test - void testRethrow_WithRuntimeException() { - // Test rethrowing RuntimeException - RuntimeException originalException = new RuntimeException("test exception"); - - assertThrows(RuntimeException.class, () -> { - Utils.rethrow(originalException); - }); - } - - @Test - void testRethrow_WithCheckedException() { - // Test rethrowing checked exception - Exception originalException = new Exception("test checked exception"); - - assertThrows(Exception.class, () -> { - Utils.rethrow(originalException); - }); - } - - @Test - void testRethrow_WithCustomException() { - // Test rethrowing custom exception - IllegalArgumentException originalException = new IllegalArgumentException("test illegal argument"); - - assertThrows(IllegalArgumentException.class, () -> { - Utils.rethrow(originalException); - }); - } - - @Test - void testObjectMapper_IsNotNull() { - // Test that OBJECT_MAPPER is not null - assertNotNull(Utils.OBJECT_MAPPER); - } - - @Test - void testObjectMapper_CanSerializeAndDeserialize() throws Exception { - // Test that OBJECT_MAPPER can serialize and deserialize properly - TestObject original = new TestObject("test", 123); - - String json = Utils.OBJECT_MAPPER.writeValueAsString(original); - TestObject deserialized = Utils.OBJECT_MAPPER.readValue(json, TestObject.class); - - assertEquals(original.name, deserialized.name); - assertEquals(original.value, deserialized.value); - } - - // Simple class for testing - static class TestObject { - public String name; - public int value; - - public TestObject() {} - - public TestObject(String name, int value) { - this.name = name; - this.value = value; - } - } -} diff --git a/examples/helloworld/client/pom.xml b/examples/helloworld/client/pom.xml index 4626af575..9750da890 100644 --- a/examples/helloworld/client/pom.xml +++ b/examples/helloworld/client/pom.xml @@ -18,7 +18,7 @@ io.a2a.sdk - a2a-java-sdk-core + a2a-java-sdk-client diff --git a/examples/helloworld/client/src/main/java/io/a2a/examples/helloworld/HelloWorldClient.java b/examples/helloworld/client/src/main/java/io/a2a/examples/helloworld/HelloWorldClient.java index cea945492..45f202b96 100644 --- a/examples/helloworld/client/src/main/java/io/a2a/examples/helloworld/HelloWorldClient.java +++ b/examples/helloworld/client/src/main/java/io/a2a/examples/helloworld/HelloWorldClient.java @@ -5,7 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.a2a.client.A2AClient; -import io.a2a.spec.A2A; +import io.a2a.A2A; import io.a2a.spec.AgentCard; import io.a2a.spec.Message; import io.a2a.spec.MessageSendParams; diff --git a/examples/helloworld/pom.xml b/examples/helloworld/pom.xml index b7c70b08c..672d76655 100644 --- a/examples/helloworld/pom.xml +++ b/examples/helloworld/pom.xml @@ -28,7 +28,7 @@ io.a2a.sdk - a2a-java-sdk-core + a2a-java-sdk-client ${project.version} diff --git a/examples/helloworld/server/src/main/java/io/a2a/examples/helloworld/AgentExecutorProducer.java b/examples/helloworld/server/src/main/java/io/a2a/examples/helloworld/AgentExecutorProducer.java index e5392ca45..1d7519b60 100644 --- a/examples/helloworld/server/src/main/java/io/a2a/examples/helloworld/AgentExecutorProducer.java +++ b/examples/helloworld/server/src/main/java/io/a2a/examples/helloworld/AgentExecutorProducer.java @@ -6,7 +6,7 @@ import io.a2a.server.agentexecution.AgentExecutor; import io.a2a.server.agentexecution.RequestContext; import io.a2a.server.events.EventQueue; -import io.a2a.spec.A2A; +import io.a2a.A2A; import io.a2a.spec.JSONRPCError; import io.a2a.spec.UnsupportedOperationError; diff --git a/pom.xml b/pom.xml index 4950c6bbd..2cf37a9c7 100644 --- a/pom.xml +++ b/pom.xml @@ -184,9 +184,10 @@ - - core sdk-server-common + common + spec + client sdk-jakarta sdk-quarkus tck diff --git a/sdk-jakarta/pom.xml b/sdk-jakarta/pom.xml index 91e6155b4..af290970e 100644 --- a/sdk-jakarta/pom.xml +++ b/sdk-jakarta/pom.xml @@ -55,7 +55,7 @@ ${project.groupId} - a2a-java-sdk-core + a2a-java-sdk-spec ${project.version} diff --git a/sdk-jakarta/src/main/java/io/a2a/server/apps/jakarta/A2ARequestFilter.java b/sdk-jakarta/src/main/java/io/a2a/server/apps/jakarta/A2ARequestFilter.java index 59e332109..32e47e783 100644 --- a/sdk-jakarta/src/main/java/io/a2a/server/apps/jakarta/A2ARequestFilter.java +++ b/sdk-jakarta/src/main/java/io/a2a/server/apps/jakarta/A2ARequestFilter.java @@ -1,17 +1,16 @@ package io.a2a.server.apps.jakarta; -import static io.a2a.spec.A2A.CANCEL_TASK_METHOD; -import static io.a2a.spec.A2A.GET_TASK_METHOD; -import static io.a2a.spec.A2A.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; -import static io.a2a.spec.A2A.SEND_MESSAGE_METHOD; -import static io.a2a.spec.A2A.SEND_STREAMING_MESSAGE_METHOD; -import static io.a2a.spec.A2A.SEND_TASK_RESUBSCRIPTION_METHOD; -import static io.a2a.spec.A2A.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import io.a2a.spec.CancelTaskRequest; +import io.a2a.spec.GetTaskPushNotificationConfigRequest; +import io.a2a.spec.GetTaskRequest; +import io.a2a.spec.SendMessageRequest; +import io.a2a.spec.SendStreamingMessageRequest; +import io.a2a.spec.SetTaskPushNotificationConfigRequest; +import io.a2a.spec.TaskResubscriptionRequest; import jakarta.ws.rs.container.ContainerRequestContext; import jakarta.ws.rs.container.ContainerRequestFilter; import jakarta.ws.rs.container.PreMatching; @@ -50,16 +49,16 @@ public void filter(ContainerRequestContext requestContext) { } private static boolean isStreamingRequest(String requestBody) { - return requestBody.contains(SEND_STREAMING_MESSAGE_METHOD) || - requestBody.contains(SEND_TASK_RESUBSCRIPTION_METHOD); + return requestBody.contains(SendStreamingMessageRequest.METHOD) || + requestBody.contains(TaskResubscriptionRequest.METHOD); } private static boolean isNonStreamingRequest(String requestBody) { - return requestBody.contains(GET_TASK_METHOD) || - requestBody.contains(CANCEL_TASK_METHOD) || - requestBody.contains(SEND_MESSAGE_METHOD) || - requestBody.contains(SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD) || - requestBody.contains(GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD); + return requestBody.contains(GetTaskRequest.METHOD) || + requestBody.contains(CancelTaskRequest.METHOD) || + requestBody.contains(SendMessageRequest.METHOD) || + requestBody.contains(SetTaskPushNotificationConfigRequest.METHOD) || + requestBody.contains(GetTaskPushNotificationConfigRequest.METHOD); } private static void putAcceptHeader(ContainerRequestContext requestContext, String mediaType) { diff --git a/sdk-jakarta/src/test/java/io/a2a/server/apps/jakarta/JakartaA2AServerTest.java b/sdk-jakarta/src/test/java/io/a2a/server/apps/jakarta/JakartaA2AServerTest.java index 159ac79bc..5bdb5225c 100644 --- a/sdk-jakarta/src/test/java/io/a2a/server/apps/jakarta/JakartaA2AServerTest.java +++ b/sdk-jakarta/src/test/java/io/a2a/server/apps/jakarta/JakartaA2AServerTest.java @@ -34,8 +34,10 @@ public JakartaA2AServerTest() { @Deployment public static WebArchive createTestArchive() throws IOException { final List prefixes = List.of( - "a2a-java-sdk-core", + "a2a-java-sdk-client", + "a2a-java-sdk-common", "a2a-java-sdk-server-common", + "a2a-java-sdk-spec", "jackson", "mutiny", "slf4j", diff --git a/sdk-quarkus/pom.xml b/sdk-quarkus/pom.xml index bacccc073..6e232d297 100644 --- a/sdk-quarkus/pom.xml +++ b/sdk-quarkus/pom.xml @@ -19,7 +19,7 @@ ${project.groupId} - a2a-java-sdk-core + a2a-java-sdk-spec ${project.version} diff --git a/sdk-quarkus/src/main/java/io/a2a/server/apps/quarkus/A2AServerRoutes.java b/sdk-quarkus/src/main/java/io/a2a/server/apps/quarkus/A2AServerRoutes.java index 4246e965e..827cc7041 100644 --- a/sdk-quarkus/src/main/java/io/a2a/server/apps/quarkus/A2AServerRoutes.java +++ b/sdk-quarkus/src/main/java/io/a2a/server/apps/quarkus/A2AServerRoutes.java @@ -18,7 +18,6 @@ import com.fasterxml.jackson.core.io.JsonEOFException; import io.a2a.server.ExtendedAgentCard; import io.a2a.server.requesthandlers.JSONRPCHandler; -import io.a2a.spec.A2A; import io.a2a.spec.AgentCard; import io.a2a.spec.CancelTaskRequest; import io.a2a.spec.GetTaskPushNotificationConfigRequest; @@ -214,16 +213,16 @@ private JSONRPCResponse generateErrorResponse(JSONRPCRequest request, JSON } private static boolean isStreamingRequest(String requestBody) { - return requestBody.contains(A2A.SEND_STREAMING_MESSAGE_METHOD) || - requestBody.contains(A2A.SEND_TASK_RESUBSCRIPTION_METHOD); + return requestBody.contains(SendStreamingMessageRequest.METHOD) || + requestBody.contains(TaskResubscriptionRequest.METHOD); } private static boolean isNonStreamingRequest(String requestBody) { - return requestBody.contains(A2A.GET_TASK_METHOD) || - requestBody.contains(A2A.CANCEL_TASK_METHOD) || - requestBody.contains(A2A.SEND_MESSAGE_METHOD) || - requestBody.contains(A2A.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD) || - requestBody.contains(A2A.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD); + return requestBody.contains(GetTaskRequest.METHOD) || + requestBody.contains(CancelTaskRequest.METHOD) || + requestBody.contains(SendMessageRequest.METHOD) || + requestBody.contains(SetTaskPushNotificationConfigRequest.METHOD) || + requestBody.contains(GetTaskPushNotificationConfigRequest.METHOD); } static void setStreamingMultiSseSupportSubscribedRunnable(Runnable runnable) { diff --git a/sdk-server-common/pom.xml b/sdk-server-common/pom.xml index 4cf02b5a6..848f943fe 100644 --- a/sdk-server-common/pom.xml +++ b/sdk-server-common/pom.xml @@ -19,7 +19,12 @@ ${project.groupId} - a2a-java-sdk-core + a2a-java-sdk-spec + ${project.version} + + + ${project.groupId} + a2a-java-sdk-client ${project.version} diff --git a/sdk-server-common/src/main/java/io/a2a/server/events/EventConsumer.java b/sdk-server-common/src/main/java/io/a2a/server/events/EventConsumer.java index 7a693d610..f43aec9cc 100644 --- a/sdk-server-common/src/main/java/io/a2a/server/events/EventConsumer.java +++ b/sdk-server-common/src/main/java/io/a2a/server/events/EventConsumer.java @@ -1,6 +1,5 @@ package io.a2a.server.events; - import java.util.concurrent.Flow; import io.a2a.spec.A2AServerException; diff --git a/sdk-server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java b/sdk-server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java index 1ca4ca158..5d6cbec84 100644 --- a/sdk-server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java +++ b/sdk-server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java @@ -16,12 +16,6 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Supplier; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.inject.Inject; - -import io.a2a.server.agentexecution.AgentExecutor; -import io.a2a.server.agentexecution.RequestContext; -import io.a2a.server.agentexecution.SimpleRequestContextBuilder; import io.a2a.server.events.EnhancedRunnable; import io.a2a.server.events.EventConsumer; import io.a2a.server.events.EventQueue; @@ -46,6 +40,12 @@ import io.a2a.spec.TaskPushNotificationConfig; import io.a2a.spec.TaskQueryParams; import io.a2a.spec.UnsupportedOperationError; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +import io.a2a.server.agentexecution.AgentExecutor; +import io.a2a.server.agentexecution.RequestContext; +import io.a2a.server.agentexecution.SimpleRequestContextBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/sdk-server-common/src/main/java/io/a2a/server/tasks/TaskManager.java b/sdk-server-common/src/main/java/io/a2a/server/tasks/TaskManager.java index a0b5a31bd..089dc7abe 100644 --- a/sdk-server-common/src/main/java/io/a2a/server/tasks/TaskManager.java +++ b/sdk-server-common/src/main/java/io/a2a/server/tasks/TaskManager.java @@ -6,9 +6,9 @@ import java.util.ArrayList; import java.util.List; -import io.a2a.spec.Event; import io.a2a.spec.A2AServerException; import io.a2a.spec.Artifact; +import io.a2a.spec.Event; import io.a2a.spec.InvalidParamsError; import io.a2a.spec.Message; import io.a2a.spec.Part; diff --git a/sdk-server-common/src/test/java/io/a2a/server/agentexecution/RequestContextTest.java b/sdk-server-common/src/test/java/io/a2a/server/agentexecution/RequestContextTest.java index 8e3f04af6..c9bb79061 100644 --- a/sdk-server-common/src/test/java/io/a2a/server/agentexecution/RequestContextTest.java +++ b/sdk-server-common/src/test/java/io/a2a/server/agentexecution/RequestContextTest.java @@ -1,5 +1,12 @@ package io.a2a.server.agentexecution; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; + import io.a2a.spec.InvalidParamsError; import io.a2a.spec.Message; import io.a2a.spec.MessageSendParams; @@ -14,13 +21,6 @@ import java.util.List; import java.util.UUID; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.mockStatic; - public class RequestContextTest { @Test diff --git a/sdk-server-common/src/test/java/io/a2a/server/requesthandlers/JSONRPCHandlerTest.java b/sdk-server-common/src/test/java/io/a2a/server/requesthandlers/JSONRPCHandlerTest.java index d394db2bb..49913c0b6 100644 --- a/sdk-server-common/src/test/java/io/a2a/server/requesthandlers/JSONRPCHandlerTest.java +++ b/sdk-server-common/src/test/java/io/a2a/server/requesthandlers/JSONRPCHandlerTest.java @@ -21,6 +21,7 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; +import io.a2a.spec.InternalError; import jakarta.enterprise.context.Dependent; import io.a2a.http.A2AHttpClient; diff --git a/core/pom.xml b/spec/pom.xml similarity index 69% rename from core/pom.xml rename to spec/pom.xml index 8aed247f4..450db7489 100644 --- a/core/pom.xml +++ b/spec/pom.xml @@ -9,14 +9,20 @@ a2a-java-sdk-parent 0.2.4-SNAPSHOT - a2a-java-sdk-core + a2a-java-sdk-spec jar - Java SDK A2A Core - Java SDK for the Agent2Agent Protocol (A2A) - Core + Java SDK A2A Spec + Java SDK for the Agent2Agent Protocol (A2A) - Spec + + ${project.groupId} + a2a-java-sdk-common + ${project.version} + + com.fasterxml.jackson.core jackson-databind @@ -25,21 +31,12 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 + org.junit.jupiter junit-jupiter-api test - - org.mockito - mockito-core - test - - - org.mock-server - mockserver-netty - test - \ No newline at end of file diff --git a/core/src/main/java/io/a2a/spec/A2AClientError.java b/spec/src/main/java/io/a2a/spec/A2AClientError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/A2AClientError.java rename to spec/src/main/java/io/a2a/spec/A2AClientError.java diff --git a/core/src/main/java/io/a2a/spec/A2AClientHTTPError.java b/spec/src/main/java/io/a2a/spec/A2AClientHTTPError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/A2AClientHTTPError.java rename to spec/src/main/java/io/a2a/spec/A2AClientHTTPError.java diff --git a/core/src/main/java/io/a2a/spec/A2AClientJSONError.java b/spec/src/main/java/io/a2a/spec/A2AClientJSONError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/A2AClientJSONError.java rename to spec/src/main/java/io/a2a/spec/A2AClientJSONError.java diff --git a/core/src/main/java/io/a2a/spec/A2AError.java b/spec/src/main/java/io/a2a/spec/A2AError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/A2AError.java rename to spec/src/main/java/io/a2a/spec/A2AError.java diff --git a/core/src/main/java/io/a2a/spec/A2AException.java b/spec/src/main/java/io/a2a/spec/A2AException.java similarity index 100% rename from core/src/main/java/io/a2a/spec/A2AException.java rename to spec/src/main/java/io/a2a/spec/A2AException.java diff --git a/core/src/main/java/io/a2a/spec/A2AServerException.java b/spec/src/main/java/io/a2a/spec/A2AServerException.java similarity index 100% rename from core/src/main/java/io/a2a/spec/A2AServerException.java rename to spec/src/main/java/io/a2a/spec/A2AServerException.java diff --git a/core/src/main/java/io/a2a/spec/APIKeySecurityScheme.java b/spec/src/main/java/io/a2a/spec/APIKeySecurityScheme.java similarity index 100% rename from core/src/main/java/io/a2a/spec/APIKeySecurityScheme.java rename to spec/src/main/java/io/a2a/spec/APIKeySecurityScheme.java diff --git a/core/src/main/java/io/a2a/spec/AgentCapabilities.java b/spec/src/main/java/io/a2a/spec/AgentCapabilities.java similarity index 100% rename from core/src/main/java/io/a2a/spec/AgentCapabilities.java rename to spec/src/main/java/io/a2a/spec/AgentCapabilities.java diff --git a/core/src/main/java/io/a2a/spec/AgentCard.java b/spec/src/main/java/io/a2a/spec/AgentCard.java similarity index 100% rename from core/src/main/java/io/a2a/spec/AgentCard.java rename to spec/src/main/java/io/a2a/spec/AgentCard.java diff --git a/core/src/main/java/io/a2a/spec/AgentExtension.java b/spec/src/main/java/io/a2a/spec/AgentExtension.java similarity index 100% rename from core/src/main/java/io/a2a/spec/AgentExtension.java rename to spec/src/main/java/io/a2a/spec/AgentExtension.java diff --git a/core/src/main/java/io/a2a/spec/AgentProvider.java b/spec/src/main/java/io/a2a/spec/AgentProvider.java similarity index 100% rename from core/src/main/java/io/a2a/spec/AgentProvider.java rename to spec/src/main/java/io/a2a/spec/AgentProvider.java diff --git a/core/src/main/java/io/a2a/spec/AgentSkill.java b/spec/src/main/java/io/a2a/spec/AgentSkill.java similarity index 100% rename from core/src/main/java/io/a2a/spec/AgentSkill.java rename to spec/src/main/java/io/a2a/spec/AgentSkill.java diff --git a/core/src/main/java/io/a2a/spec/Artifact.java b/spec/src/main/java/io/a2a/spec/Artifact.java similarity index 100% rename from core/src/main/java/io/a2a/spec/Artifact.java rename to spec/src/main/java/io/a2a/spec/Artifact.java diff --git a/core/src/main/java/io/a2a/spec/AuthenticationInfo.java b/spec/src/main/java/io/a2a/spec/AuthenticationInfo.java similarity index 100% rename from core/src/main/java/io/a2a/spec/AuthenticationInfo.java rename to spec/src/main/java/io/a2a/spec/AuthenticationInfo.java diff --git a/core/src/main/java/io/a2a/spec/AuthorizationCodeOAuthFlow.java b/spec/src/main/java/io/a2a/spec/AuthorizationCodeOAuthFlow.java similarity index 100% rename from core/src/main/java/io/a2a/spec/AuthorizationCodeOAuthFlow.java rename to spec/src/main/java/io/a2a/spec/AuthorizationCodeOAuthFlow.java diff --git a/core/src/main/java/io/a2a/spec/CancelTaskRequest.java b/spec/src/main/java/io/a2a/spec/CancelTaskRequest.java similarity index 90% rename from core/src/main/java/io/a2a/spec/CancelTaskRequest.java rename to spec/src/main/java/io/a2a/spec/CancelTaskRequest.java index 3349ceb5c..39c370ae3 100644 --- a/core/src/main/java/io/a2a/spec/CancelTaskRequest.java +++ b/spec/src/main/java/io/a2a/spec/CancelTaskRequest.java @@ -1,7 +1,5 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.CANCEL_TASK_METHOD; -import static io.a2a.spec.A2A.JSONRPC_VERSION; import static io.a2a.util.Utils.defaultIfNull; import java.util.UUID; @@ -20,6 +18,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public final class CancelTaskRequest extends NonStreamingJSONRPCRequest { + public static final String METHOD = "tasks/cancel"; + @JsonCreator public CancelTaskRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id") Object id, @JsonProperty("method") String method, @JsonProperty("params") TaskIdParams params) { @@ -27,7 +27,7 @@ public CancelTaskRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty( throw new IllegalArgumentException("Invalid JSON-RPC protocol version"); } Assert.checkNotNullParam("method", method); - if (! method.equals(CANCEL_TASK_METHOD)) { + if (! method.equals(METHOD)) { throw new IllegalArgumentException("Invalid CancelTaskRequest method"); } Assert.checkNotNullParam("params", params); @@ -39,13 +39,13 @@ public CancelTaskRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty( } public CancelTaskRequest(Object id, TaskIdParams params) { - this(null, id, CANCEL_TASK_METHOD, params); + this(null, id, METHOD, params); } public static class Builder { private String jsonrpc; private Object id; - private String method = CANCEL_TASK_METHOD; + private String method = METHOD; private TaskIdParams params; public CancelTaskRequest.Builder jsonrpc(String jsonrpc) { diff --git a/core/src/main/java/io/a2a/spec/CancelTaskResponse.java b/spec/src/main/java/io/a2a/spec/CancelTaskResponse.java similarity index 100% rename from core/src/main/java/io/a2a/spec/CancelTaskResponse.java rename to spec/src/main/java/io/a2a/spec/CancelTaskResponse.java diff --git a/core/src/main/java/io/a2a/spec/ClientCredentialsOAuthFlow.java b/spec/src/main/java/io/a2a/spec/ClientCredentialsOAuthFlow.java similarity index 100% rename from core/src/main/java/io/a2a/spec/ClientCredentialsOAuthFlow.java rename to spec/src/main/java/io/a2a/spec/ClientCredentialsOAuthFlow.java diff --git a/core/src/main/java/io/a2a/spec/ContentTypeNotSupportedError.java b/spec/src/main/java/io/a2a/spec/ContentTypeNotSupportedError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/ContentTypeNotSupportedError.java rename to spec/src/main/java/io/a2a/spec/ContentTypeNotSupportedError.java diff --git a/core/src/main/java/io/a2a/spec/DataPart.java b/spec/src/main/java/io/a2a/spec/DataPart.java similarity index 100% rename from core/src/main/java/io/a2a/spec/DataPart.java rename to spec/src/main/java/io/a2a/spec/DataPart.java diff --git a/core/src/main/java/io/a2a/spec/Event.java b/spec/src/main/java/io/a2a/spec/Event.java similarity index 100% rename from core/src/main/java/io/a2a/spec/Event.java rename to spec/src/main/java/io/a2a/spec/Event.java diff --git a/core/src/main/java/io/a2a/spec/EventKind.java b/spec/src/main/java/io/a2a/spec/EventKind.java similarity index 100% rename from core/src/main/java/io/a2a/spec/EventKind.java rename to spec/src/main/java/io/a2a/spec/EventKind.java diff --git a/core/src/main/java/io/a2a/spec/FileContent.java b/spec/src/main/java/io/a2a/spec/FileContent.java similarity index 100% rename from core/src/main/java/io/a2a/spec/FileContent.java rename to spec/src/main/java/io/a2a/spec/FileContent.java diff --git a/core/src/main/java/io/a2a/spec/FileContentDeserializer.java b/spec/src/main/java/io/a2a/spec/FileContentDeserializer.java similarity index 100% rename from core/src/main/java/io/a2a/spec/FileContentDeserializer.java rename to spec/src/main/java/io/a2a/spec/FileContentDeserializer.java diff --git a/core/src/main/java/io/a2a/spec/FilePart.java b/spec/src/main/java/io/a2a/spec/FilePart.java similarity index 100% rename from core/src/main/java/io/a2a/spec/FilePart.java rename to spec/src/main/java/io/a2a/spec/FilePart.java diff --git a/core/src/main/java/io/a2a/spec/FileWithBytes.java b/spec/src/main/java/io/a2a/spec/FileWithBytes.java similarity index 100% rename from core/src/main/java/io/a2a/spec/FileWithBytes.java rename to spec/src/main/java/io/a2a/spec/FileWithBytes.java diff --git a/core/src/main/java/io/a2a/spec/FileWithUri.java b/spec/src/main/java/io/a2a/spec/FileWithUri.java similarity index 100% rename from core/src/main/java/io/a2a/spec/FileWithUri.java rename to spec/src/main/java/io/a2a/spec/FileWithUri.java diff --git a/core/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigRequest.java b/spec/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigRequest.java similarity index 86% rename from core/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigRequest.java rename to spec/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigRequest.java index ba84b0231..ab39015bb 100644 --- a/core/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigRequest.java +++ b/spec/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigRequest.java @@ -1,17 +1,13 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; -import static io.a2a.spec.A2A.JSONRPC_VERSION; -import static io.a2a.util.Utils.defaultIfNull; - -import java.util.UUID; - import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; - import io.a2a.util.Assert; +import io.a2a.util.Utils; + +import java.util.UUID; /** * A get task push notification request. @@ -20,6 +16,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public final class GetTaskPushNotificationConfigRequest extends NonStreamingJSONRPCRequest { + public static final String METHOD = "tasks/pushNotificationConfig/get"; + @JsonCreator public GetTaskPushNotificationConfigRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id") Object id, @JsonProperty("method") String method, @JsonProperty("params") TaskIdParams params) { @@ -27,18 +25,18 @@ public GetTaskPushNotificationConfigRequest(@JsonProperty("jsonrpc") String json throw new IllegalArgumentException("Invalid JSON-RPC protocol version"); } Assert.checkNotNullParam("method", method); - if (! method.equals(GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD)) { + if (! method.equals(METHOD)) { throw new IllegalArgumentException("Invalid GetTaskPushNotificationRequest method"); } Assert.isNullOrStringOrInteger(id); - this.jsonrpc = defaultIfNull(jsonrpc, JSONRPC_VERSION); + this.jsonrpc = Utils.defaultIfNull(jsonrpc, JSONRPC_VERSION); this.id = id; this.method = method; this.params = params; } public GetTaskPushNotificationConfigRequest(String id, TaskIdParams params) { - this(null, id, GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, params); + this(null, id, METHOD, params); } public static class Builder { diff --git a/core/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigResponse.java b/spec/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigResponse.java similarity index 100% rename from core/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigResponse.java rename to spec/src/main/java/io/a2a/spec/GetTaskPushNotificationConfigResponse.java diff --git a/core/src/main/java/io/a2a/spec/GetTaskRequest.java b/spec/src/main/java/io/a2a/spec/GetTaskRequest.java similarity index 92% rename from core/src/main/java/io/a2a/spec/GetTaskRequest.java rename to spec/src/main/java/io/a2a/spec/GetTaskRequest.java index 6c62cc265..f31237af0 100644 --- a/core/src/main/java/io/a2a/spec/GetTaskRequest.java +++ b/spec/src/main/java/io/a2a/spec/GetTaskRequest.java @@ -1,7 +1,5 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.GET_TASK_METHOD; -import static io.a2a.spec.A2A.JSONRPC_VERSION; import static io.a2a.util.Utils.defaultIfNull; import java.util.UUID; @@ -20,6 +18,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public final class GetTaskRequest extends NonStreamingJSONRPCRequest { + public static final String METHOD = "tasks/get"; + @JsonCreator public GetTaskRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id") Object id, @JsonProperty("method") String method, @JsonProperty("params") TaskQueryParams params) { @@ -27,7 +27,7 @@ public GetTaskRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id throw new IllegalArgumentException("Invalid JSON-RPC protocol version"); } Assert.checkNotNullParam("method", method); - if (! method.equals(GET_TASK_METHOD)) { + if (! method.equals(METHOD)) { throw new IllegalArgumentException("Invalid GetTaskRequest method"); } Assert.checkNotNullParam("params", params); @@ -39,7 +39,7 @@ public GetTaskRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id } public GetTaskRequest(Object id, TaskQueryParams params) { - this(null, id, GET_TASK_METHOD, params); + this(null, id, METHOD, params); } diff --git a/core/src/main/java/io/a2a/spec/GetTaskResponse.java b/spec/src/main/java/io/a2a/spec/GetTaskResponse.java similarity index 100% rename from core/src/main/java/io/a2a/spec/GetTaskResponse.java rename to spec/src/main/java/io/a2a/spec/GetTaskResponse.java diff --git a/core/src/main/java/io/a2a/spec/HTTPAuthSecurityScheme.java b/spec/src/main/java/io/a2a/spec/HTTPAuthSecurityScheme.java similarity index 100% rename from core/src/main/java/io/a2a/spec/HTTPAuthSecurityScheme.java rename to spec/src/main/java/io/a2a/spec/HTTPAuthSecurityScheme.java diff --git a/core/src/main/java/io/a2a/spec/IdJsonMappingException.java b/spec/src/main/java/io/a2a/spec/IdJsonMappingException.java similarity index 100% rename from core/src/main/java/io/a2a/spec/IdJsonMappingException.java rename to spec/src/main/java/io/a2a/spec/IdJsonMappingException.java diff --git a/core/src/main/java/io/a2a/spec/ImplicitOAuthFlow.java b/spec/src/main/java/io/a2a/spec/ImplicitOAuthFlow.java similarity index 100% rename from core/src/main/java/io/a2a/spec/ImplicitOAuthFlow.java rename to spec/src/main/java/io/a2a/spec/ImplicitOAuthFlow.java diff --git a/core/src/main/java/io/a2a/spec/IntegerJsonrpcId.java b/spec/src/main/java/io/a2a/spec/IntegerJsonrpcId.java similarity index 100% rename from core/src/main/java/io/a2a/spec/IntegerJsonrpcId.java rename to spec/src/main/java/io/a2a/spec/IntegerJsonrpcId.java diff --git a/core/src/main/java/io/a2a/spec/InternalError.java b/spec/src/main/java/io/a2a/spec/InternalError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/InternalError.java rename to spec/src/main/java/io/a2a/spec/InternalError.java diff --git a/core/src/main/java/io/a2a/spec/InvalidAgentResponseError.java b/spec/src/main/java/io/a2a/spec/InvalidAgentResponseError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/InvalidAgentResponseError.java rename to spec/src/main/java/io/a2a/spec/InvalidAgentResponseError.java diff --git a/core/src/main/java/io/a2a/spec/InvalidParamsError.java b/spec/src/main/java/io/a2a/spec/InvalidParamsError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/InvalidParamsError.java rename to spec/src/main/java/io/a2a/spec/InvalidParamsError.java diff --git a/core/src/main/java/io/a2a/spec/InvalidParamsJsonMappingException.java b/spec/src/main/java/io/a2a/spec/InvalidParamsJsonMappingException.java similarity index 100% rename from core/src/main/java/io/a2a/spec/InvalidParamsJsonMappingException.java rename to spec/src/main/java/io/a2a/spec/InvalidParamsJsonMappingException.java diff --git a/core/src/main/java/io/a2a/spec/InvalidRequestError.java b/spec/src/main/java/io/a2a/spec/InvalidRequestError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/InvalidRequestError.java rename to spec/src/main/java/io/a2a/spec/InvalidRequestError.java diff --git a/core/src/main/java/io/a2a/spec/JSONErrorResponse.java b/spec/src/main/java/io/a2a/spec/JSONErrorResponse.java similarity index 100% rename from core/src/main/java/io/a2a/spec/JSONErrorResponse.java rename to spec/src/main/java/io/a2a/spec/JSONErrorResponse.java diff --git a/core/src/main/java/io/a2a/spec/JSONParseError.java b/spec/src/main/java/io/a2a/spec/JSONParseError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/JSONParseError.java rename to spec/src/main/java/io/a2a/spec/JSONParseError.java index 244ae39ec..2e3e96dbe 100644 --- a/core/src/main/java/io/a2a/spec/JSONParseError.java +++ b/spec/src/main/java/io/a2a/spec/JSONParseError.java @@ -1,12 +1,12 @@ package io.a2a.spec; -import static io.a2a.util.Utils.defaultIfNull; - import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import static io.a2a.util.Utils.defaultIfNull; + @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonIgnoreProperties(ignoreUnknown = true) public class JSONParseError extends JSONRPCError implements A2AError { diff --git a/core/src/main/java/io/a2a/spec/JSONRPCError.java b/spec/src/main/java/io/a2a/spec/JSONRPCError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/JSONRPCError.java rename to spec/src/main/java/io/a2a/spec/JSONRPCError.java diff --git a/core/src/main/java/io/a2a/spec/JSONRPCErrorDeserializer.java b/spec/src/main/java/io/a2a/spec/JSONRPCErrorDeserializer.java similarity index 100% rename from core/src/main/java/io/a2a/spec/JSONRPCErrorDeserializer.java rename to spec/src/main/java/io/a2a/spec/JSONRPCErrorDeserializer.java diff --git a/core/src/main/java/io/a2a/spec/JSONRPCErrorResponse.java b/spec/src/main/java/io/a2a/spec/JSONRPCErrorResponse.java similarity index 100% rename from core/src/main/java/io/a2a/spec/JSONRPCErrorResponse.java rename to spec/src/main/java/io/a2a/spec/JSONRPCErrorResponse.java diff --git a/core/src/main/java/io/a2a/spec/JSONRPCErrorSerializer.java b/spec/src/main/java/io/a2a/spec/JSONRPCErrorSerializer.java similarity index 100% rename from core/src/main/java/io/a2a/spec/JSONRPCErrorSerializer.java rename to spec/src/main/java/io/a2a/spec/JSONRPCErrorSerializer.java diff --git a/core/src/main/java/io/a2a/spec/JSONRPCMessage.java b/spec/src/main/java/io/a2a/spec/JSONRPCMessage.java similarity index 83% rename from core/src/main/java/io/a2a/spec/JSONRPCMessage.java rename to spec/src/main/java/io/a2a/spec/JSONRPCMessage.java index 95cadfd94..20d3a117a 100644 --- a/core/src/main/java/io/a2a/spec/JSONRPCMessage.java +++ b/spec/src/main/java/io/a2a/spec/JSONRPCMessage.java @@ -5,6 +5,8 @@ */ public sealed interface JSONRPCMessage permits JSONRPCRequest, JSONRPCResponse { + String JSONRPC_VERSION = "2.0"; + String getJsonrpc(); Object getId(); diff --git a/core/src/main/java/io/a2a/spec/JSONRPCRequest.java b/spec/src/main/java/io/a2a/spec/JSONRPCRequest.java similarity index 96% rename from core/src/main/java/io/a2a/spec/JSONRPCRequest.java rename to spec/src/main/java/io/a2a/spec/JSONRPCRequest.java index f01318974..a88de90f1 100644 --- a/core/src/main/java/io/a2a/spec/JSONRPCRequest.java +++ b/spec/src/main/java/io/a2a/spec/JSONRPCRequest.java @@ -1,6 +1,5 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.JSONRPC_VERSION; import static io.a2a.util.Utils.defaultIfNull; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/core/src/main/java/io/a2a/spec/JSONRPCRequestDeserializerBase.java b/spec/src/main/java/io/a2a/spec/JSONRPCRequestDeserializerBase.java similarity index 82% rename from core/src/main/java/io/a2a/spec/JSONRPCRequestDeserializerBase.java rename to spec/src/main/java/io/a2a/spec/JSONRPCRequestDeserializerBase.java index 2cdc61668..fe21ffab8 100644 --- a/core/src/main/java/io/a2a/spec/JSONRPCRequestDeserializerBase.java +++ b/spec/src/main/java/io/a2a/spec/JSONRPCRequestDeserializerBase.java @@ -1,17 +1,7 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.CANCEL_TASK_METHOD; -import static io.a2a.spec.A2A.GET_TASK_METHOD; -import static io.a2a.spec.A2A.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; -import static io.a2a.spec.A2A.SEND_MESSAGE_METHOD; -import static io.a2a.spec.A2A.SEND_STREAMING_MESSAGE_METHOD; -import static io.a2a.spec.A2A.SEND_TASK_RESUBSCRIPTION_METHOD; -import static io.a2a.spec.A2A.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; -import static io.a2a.spec.A2A.isValidMethodName; import static io.a2a.util.Utils.OBJECT_MAPPER; -import java.io.IOException; - import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; @@ -19,6 +9,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import java.io.IOException; + public abstract class JSONRPCRequestDeserializerBase extends StdDeserializer> { public JSONRPCRequestDeserializerBase() { @@ -39,19 +31,19 @@ public JSONRPCRequest deserialize(JsonParser jsonParser, DeserializationConte JsonNode paramsNode = treeNode.get("params"); switch (method) { - case GET_TASK_METHOD: + case GetTaskRequest.METHOD: return new GetTaskRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskQueryParams.class)); - case CANCEL_TASK_METHOD: + case CancelTaskRequest.METHOD: return new CancelTaskRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskIdParams.class)); - case SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD: + case SetTaskPushNotificationConfigRequest.METHOD: return new SetTaskPushNotificationConfigRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskPushNotificationConfig.class)); - case GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD: + case GetTaskPushNotificationConfigRequest.METHOD: return new GetTaskPushNotificationConfigRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskIdParams.class)); - case SEND_MESSAGE_METHOD: + case SendMessageRequest.METHOD: return new SendMessageRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, MessageSendParams.class)); - case SEND_TASK_RESUBSCRIPTION_METHOD: + case TaskResubscriptionRequest.METHOD: return new TaskResubscriptionRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskIdParams.class)); - case SEND_STREAMING_MESSAGE_METHOD: + case SendStreamingMessageRequest.METHOD: return new SendStreamingMessageRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, MessageSendParams.class)); default: throw new MethodNotFoundJsonMappingException("Invalid method", getIdIfPossible(treeNode, jsonParser)); @@ -71,7 +63,7 @@ protected T getAndValidateParams(JsonNode paramsNode, JsonParser jsonParser, protected String getAndValidateJsonrpc(JsonNode treeNode, JsonParser jsonParser) throws JsonMappingException { JsonNode jsonrpcNode = treeNode.get("jsonrpc"); - if (jsonrpcNode == null || ! jsonrpcNode.asText().equals(A2A.JSONRPC_VERSION)) { + if (jsonrpcNode == null || ! jsonrpcNode.asText().equals(JSONRPCMessage.JSONRPC_VERSION)) { throw new IdJsonMappingException("Invalid JSON-RPC protocol version", getIdIfPossible(treeNode, jsonParser)); } return jsonrpcNode.asText(); @@ -112,4 +104,15 @@ protected Object getIdIfPossible(JsonNode treeNode, JsonParser jsonParser) { return null; } } + + protected static boolean isValidMethodName(String methodName) { + return methodName != null && (methodName.equals(CancelTaskRequest.METHOD) + || methodName.equals(GetTaskRequest.METHOD) + || methodName.equals(GetTaskPushNotificationConfigRequest.METHOD) + || methodName.equals(SetTaskPushNotificationConfigRequest.METHOD) + || methodName.equals(TaskResubscriptionRequest.METHOD) + || methodName.equals(SendMessageRequest.METHOD) + || methodName.equals(SendStreamingMessageRequest.METHOD)); + + } } diff --git a/core/src/main/java/io/a2a/spec/JSONRPCResponse.java b/spec/src/main/java/io/a2a/spec/JSONRPCResponse.java similarity index 97% rename from core/src/main/java/io/a2a/spec/JSONRPCResponse.java rename to spec/src/main/java/io/a2a/spec/JSONRPCResponse.java index 91b9443ee..1be348043 100644 --- a/core/src/main/java/io/a2a/spec/JSONRPCResponse.java +++ b/spec/src/main/java/io/a2a/spec/JSONRPCResponse.java @@ -1,6 +1,5 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.JSONRPC_VERSION; import static io.a2a.util.Utils.defaultIfNull; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; diff --git a/core/src/main/java/io/a2a/spec/JsonrpcId.java b/spec/src/main/java/io/a2a/spec/JsonrpcId.java similarity index 100% rename from core/src/main/java/io/a2a/spec/JsonrpcId.java rename to spec/src/main/java/io/a2a/spec/JsonrpcId.java diff --git a/core/src/main/java/io/a2a/spec/Message.java b/spec/src/main/java/io/a2a/spec/Message.java similarity index 100% rename from core/src/main/java/io/a2a/spec/Message.java rename to spec/src/main/java/io/a2a/spec/Message.java diff --git a/core/src/main/java/io/a2a/spec/MessageSendConfiguration.java b/spec/src/main/java/io/a2a/spec/MessageSendConfiguration.java similarity index 100% rename from core/src/main/java/io/a2a/spec/MessageSendConfiguration.java rename to spec/src/main/java/io/a2a/spec/MessageSendConfiguration.java diff --git a/core/src/main/java/io/a2a/spec/MessageSendParams.java b/spec/src/main/java/io/a2a/spec/MessageSendParams.java similarity index 100% rename from core/src/main/java/io/a2a/spec/MessageSendParams.java rename to spec/src/main/java/io/a2a/spec/MessageSendParams.java diff --git a/core/src/main/java/io/a2a/spec/MethodNotFoundError.java b/spec/src/main/java/io/a2a/spec/MethodNotFoundError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/MethodNotFoundError.java rename to spec/src/main/java/io/a2a/spec/MethodNotFoundError.java diff --git a/core/src/main/java/io/a2a/spec/MethodNotFoundJsonMappingException.java b/spec/src/main/java/io/a2a/spec/MethodNotFoundJsonMappingException.java similarity index 100% rename from core/src/main/java/io/a2a/spec/MethodNotFoundJsonMappingException.java rename to spec/src/main/java/io/a2a/spec/MethodNotFoundJsonMappingException.java diff --git a/core/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequest.java b/spec/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequest.java similarity index 100% rename from core/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequest.java rename to spec/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequest.java diff --git a/core/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequestDeserializer.java b/spec/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequestDeserializer.java similarity index 80% rename from core/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequestDeserializer.java rename to spec/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequestDeserializer.java index a1db9f5c8..f2978b66f 100644 --- a/core/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequestDeserializer.java +++ b/spec/src/main/java/io/a2a/spec/NonStreamingJSONRPCRequestDeserializer.java @@ -1,18 +1,12 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.CANCEL_TASK_METHOD; -import static io.a2a.spec.A2A.GET_TASK_METHOD; -import static io.a2a.spec.A2A.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; -import static io.a2a.spec.A2A.SEND_MESSAGE_METHOD; -import static io.a2a.spec.A2A.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; - -import java.io.IOException; - import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonNode; +import java.io.IOException; + public class NonStreamingJSONRPCRequestDeserializer extends JSONRPCRequestDeserializerBase> { public NonStreamingJSONRPCRequestDeserializer() { @@ -33,19 +27,19 @@ public NonStreamingJSONRPCRequest deserialize(JsonParser jsonParser, Deserial JsonNode paramsNode = treeNode.get("params"); switch (method) { - case GET_TASK_METHOD: + case GetTaskRequest.METHOD: return new GetTaskRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskQueryParams.class)); - case CANCEL_TASK_METHOD: + case CancelTaskRequest.METHOD: return new CancelTaskRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskIdParams.class)); - case SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD: + case SetTaskPushNotificationConfigRequest.METHOD: return new SetTaskPushNotificationConfigRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskPushNotificationConfig.class)); - case GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD: + case GetTaskPushNotificationConfigRequest.METHOD: return new GetTaskPushNotificationConfigRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskIdParams.class)); - case SEND_MESSAGE_METHOD: + case SendMessageRequest.METHOD: return new SendMessageRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, MessageSendParams.class)); default: diff --git a/core/src/main/java/io/a2a/spec/OAuth2SecurityScheme.java b/spec/src/main/java/io/a2a/spec/OAuth2SecurityScheme.java similarity index 100% rename from core/src/main/java/io/a2a/spec/OAuth2SecurityScheme.java rename to spec/src/main/java/io/a2a/spec/OAuth2SecurityScheme.java diff --git a/core/src/main/java/io/a2a/spec/OAuthFlows.java b/spec/src/main/java/io/a2a/spec/OAuthFlows.java similarity index 100% rename from core/src/main/java/io/a2a/spec/OAuthFlows.java rename to spec/src/main/java/io/a2a/spec/OAuthFlows.java diff --git a/core/src/main/java/io/a2a/spec/OpenIdConnectSecurityScheme.java b/spec/src/main/java/io/a2a/spec/OpenIdConnectSecurityScheme.java similarity index 100% rename from core/src/main/java/io/a2a/spec/OpenIdConnectSecurityScheme.java rename to spec/src/main/java/io/a2a/spec/OpenIdConnectSecurityScheme.java diff --git a/core/src/main/java/io/a2a/spec/Part.java b/spec/src/main/java/io/a2a/spec/Part.java similarity index 100% rename from core/src/main/java/io/a2a/spec/Part.java rename to spec/src/main/java/io/a2a/spec/Part.java diff --git a/core/src/main/java/io/a2a/spec/PasswordOAuthFlow.java b/spec/src/main/java/io/a2a/spec/PasswordOAuthFlow.java similarity index 100% rename from core/src/main/java/io/a2a/spec/PasswordOAuthFlow.java rename to spec/src/main/java/io/a2a/spec/PasswordOAuthFlow.java diff --git a/core/src/main/java/io/a2a/spec/PushNotificationAuthenticationInfo.java b/spec/src/main/java/io/a2a/spec/PushNotificationAuthenticationInfo.java similarity index 100% rename from core/src/main/java/io/a2a/spec/PushNotificationAuthenticationInfo.java rename to spec/src/main/java/io/a2a/spec/PushNotificationAuthenticationInfo.java diff --git a/core/src/main/java/io/a2a/spec/PushNotificationConfig.java b/spec/src/main/java/io/a2a/spec/PushNotificationConfig.java similarity index 100% rename from core/src/main/java/io/a2a/spec/PushNotificationConfig.java rename to spec/src/main/java/io/a2a/spec/PushNotificationConfig.java diff --git a/core/src/main/java/io/a2a/spec/PushNotificationNotSupportedError.java b/spec/src/main/java/io/a2a/spec/PushNotificationNotSupportedError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/PushNotificationNotSupportedError.java rename to spec/src/main/java/io/a2a/spec/PushNotificationNotSupportedError.java diff --git a/core/src/main/java/io/a2a/spec/SecurityScheme.java b/spec/src/main/java/io/a2a/spec/SecurityScheme.java similarity index 100% rename from core/src/main/java/io/a2a/spec/SecurityScheme.java rename to spec/src/main/java/io/a2a/spec/SecurityScheme.java diff --git a/core/src/main/java/io/a2a/spec/SendMessageRequest.java b/spec/src/main/java/io/a2a/spec/SendMessageRequest.java similarity index 92% rename from core/src/main/java/io/a2a/spec/SendMessageRequest.java rename to spec/src/main/java/io/a2a/spec/SendMessageRequest.java index 620335aa7..d31f364e4 100644 --- a/core/src/main/java/io/a2a/spec/SendMessageRequest.java +++ b/spec/src/main/java/io/a2a/spec/SendMessageRequest.java @@ -1,7 +1,5 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.JSONRPC_VERSION; -import static io.a2a.spec.A2A.SEND_MESSAGE_METHOD; import static io.a2a.util.Utils.defaultIfNull; import java.util.UUID; @@ -20,6 +18,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public final class SendMessageRequest extends NonStreamingJSONRPCRequest { + public static final String METHOD = "message/send"; + @JsonCreator public SendMessageRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id") Object id, @JsonProperty("method") String method, @JsonProperty("params") MessageSendParams params) { @@ -30,7 +30,7 @@ public SendMessageRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty throw new IllegalArgumentException("Invalid JSON-RPC protocol version"); } Assert.checkNotNullParam("method", method); - if (! method.equals(SEND_MESSAGE_METHOD)) { + if (! method.equals(METHOD)) { throw new IllegalArgumentException("Invalid SendMessageRequest method"); } Assert.checkNotNullParam("params", params); @@ -42,7 +42,7 @@ public SendMessageRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty } public SendMessageRequest(Object id, MessageSendParams params) { - this(JSONRPC_VERSION, id, SEND_MESSAGE_METHOD, params); + this(JSONRPC_VERSION, id, METHOD, params); } public static class Builder { diff --git a/core/src/main/java/io/a2a/spec/SendMessageResponse.java b/spec/src/main/java/io/a2a/spec/SendMessageResponse.java similarity index 96% rename from core/src/main/java/io/a2a/spec/SendMessageResponse.java rename to spec/src/main/java/io/a2a/spec/SendMessageResponse.java index 80b97e272..fa95bad36 100644 --- a/core/src/main/java/io/a2a/spec/SendMessageResponse.java +++ b/spec/src/main/java/io/a2a/spec/SendMessageResponse.java @@ -1,13 +1,11 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.JSONRPC_VERSION; import static io.a2a.util.Utils.defaultIfNull; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; - import io.a2a.util.Assert; /** diff --git a/core/src/main/java/io/a2a/spec/SendStreamingMessageRequest.java b/spec/src/main/java/io/a2a/spec/SendStreamingMessageRequest.java similarity index 89% rename from core/src/main/java/io/a2a/spec/SendStreamingMessageRequest.java rename to spec/src/main/java/io/a2a/spec/SendStreamingMessageRequest.java index 6503f03e7..c4ebe8315 100644 --- a/core/src/main/java/io/a2a/spec/SendStreamingMessageRequest.java +++ b/spec/src/main/java/io/a2a/spec/SendStreamingMessageRequest.java @@ -1,18 +1,15 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.JSONRPC_VERSION; -import static io.a2a.spec.A2A.SEND_STREAMING_MESSAGE_METHOD; import static io.a2a.util.Utils.defaultIfNull; -import java.util.UUID; - import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; - import io.a2a.util.Assert; +import java.util.UUID; + /** * Used to initiate a task with streaming. */ @@ -20,6 +17,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public final class SendStreamingMessageRequest extends StreamingJSONRPCRequest { + public static final String METHOD = "message/stream"; + @JsonCreator public SendStreamingMessageRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id") Object id, @JsonProperty("method") String method, @JsonProperty("params") MessageSendParams params) { @@ -27,7 +26,7 @@ public SendStreamingMessageRequest(@JsonProperty("jsonrpc") String jsonrpc, @Jso throw new IllegalArgumentException("Invalid JSON-RPC protocol version"); } Assert.checkNotNullParam("method", method); - if (! method.equals(SEND_STREAMING_MESSAGE_METHOD)) { + if (! method.equals(METHOD)) { throw new IllegalArgumentException("Invalid SendStreamingMessageRequest method"); } Assert.checkNotNullParam("params", params); @@ -39,13 +38,13 @@ public SendStreamingMessageRequest(@JsonProperty("jsonrpc") String jsonrpc, @Jso } public SendStreamingMessageRequest(Object id, MessageSendParams params) { - this(null, id, SEND_STREAMING_MESSAGE_METHOD, params); + this(null, id, METHOD, params); } public static class Builder { private String jsonrpc; private Object id; - private String method = SEND_STREAMING_MESSAGE_METHOD; + private String method = METHOD; private MessageSendParams params; public Builder jsonrpc(String jsonrpc) { diff --git a/core/src/main/java/io/a2a/spec/SendStreamingMessageResponse.java b/spec/src/main/java/io/a2a/spec/SendStreamingMessageResponse.java similarity index 96% rename from core/src/main/java/io/a2a/spec/SendStreamingMessageResponse.java rename to spec/src/main/java/io/a2a/spec/SendStreamingMessageResponse.java index 3a1cc3553..b3597bfb6 100644 --- a/core/src/main/java/io/a2a/spec/SendStreamingMessageResponse.java +++ b/spec/src/main/java/io/a2a/spec/SendStreamingMessageResponse.java @@ -1,13 +1,11 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.JSONRPC_VERSION; import static io.a2a.util.Utils.defaultIfNull; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; - import io.a2a.util.Assert; /** diff --git a/core/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigRequest.java b/spec/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigRequest.java similarity index 88% rename from core/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigRequest.java rename to spec/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigRequest.java index b042f6218..7d53083a1 100644 --- a/core/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigRequest.java +++ b/spec/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigRequest.java @@ -1,7 +1,5 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.JSONRPC_VERSION; -import static io.a2a.spec.A2A.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; import static io.a2a.util.Utils.defaultIfNull; import java.util.UUID; @@ -20,6 +18,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public final class SetTaskPushNotificationConfigRequest extends NonStreamingJSONRPCRequest { + public static final String METHOD = "tasks/pushNotificationConfig/set"; + @JsonCreator public SetTaskPushNotificationConfigRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id") Object id, @JsonProperty("method") String method, @JsonProperty("params") TaskPushNotificationConfig params) { @@ -27,7 +27,7 @@ public SetTaskPushNotificationConfigRequest(@JsonProperty("jsonrpc") String json throw new IllegalArgumentException("Invalid JSON-RPC protocol version"); } Assert.checkNotNullParam("method", method); - if (! method.equals(SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD)) { + if (! method.equals(METHOD)) { throw new IllegalArgumentException("Invalid SetTaskPushNotificationRequest method"); } Assert.checkNotNullParam("params", params); @@ -39,13 +39,13 @@ public SetTaskPushNotificationConfigRequest(@JsonProperty("jsonrpc") String json } public SetTaskPushNotificationConfigRequest(String id, TaskPushNotificationConfig taskPushConfig) { - this(null, id, SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, taskPushConfig); + this(null, id, METHOD, taskPushConfig); } public static class Builder { private String jsonrpc; private Object id; - private String method = SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD; + private String method = METHOD; private TaskPushNotificationConfig params; public SetTaskPushNotificationConfigRequest.Builder jsonrpc(String jsonrpc) { diff --git a/core/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigResponse.java b/spec/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigResponse.java similarity index 100% rename from core/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigResponse.java rename to spec/src/main/java/io/a2a/spec/SetTaskPushNotificationConfigResponse.java diff --git a/core/src/main/java/io/a2a/spec/StreamingEventKind.java b/spec/src/main/java/io/a2a/spec/StreamingEventKind.java similarity index 100% rename from core/src/main/java/io/a2a/spec/StreamingEventKind.java rename to spec/src/main/java/io/a2a/spec/StreamingEventKind.java diff --git a/core/src/main/java/io/a2a/spec/StreamingJSONRPCRequest.java b/spec/src/main/java/io/a2a/spec/StreamingJSONRPCRequest.java similarity index 100% rename from core/src/main/java/io/a2a/spec/StreamingJSONRPCRequest.java rename to spec/src/main/java/io/a2a/spec/StreamingJSONRPCRequest.java diff --git a/core/src/main/java/io/a2a/spec/StreamingJSONRPCRequestDeserializer.java b/spec/src/main/java/io/a2a/spec/StreamingJSONRPCRequestDeserializer.java similarity index 87% rename from core/src/main/java/io/a2a/spec/StreamingJSONRPCRequestDeserializer.java rename to spec/src/main/java/io/a2a/spec/StreamingJSONRPCRequestDeserializer.java index 4360e52f7..236ad547a 100644 --- a/core/src/main/java/io/a2a/spec/StreamingJSONRPCRequestDeserializer.java +++ b/spec/src/main/java/io/a2a/spec/StreamingJSONRPCRequestDeserializer.java @@ -1,8 +1,5 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.SEND_STREAMING_MESSAGE_METHOD; -import static io.a2a.spec.A2A.SEND_TASK_RESUBSCRIPTION_METHOD; - import java.io.IOException; import com.fasterxml.jackson.core.JsonParser; @@ -30,10 +27,10 @@ public StreamingJSONRPCRequest deserialize(JsonParser jsonParser, Deserializa JsonNode paramsNode = treeNode.get("params"); switch (method) { - case SEND_TASK_RESUBSCRIPTION_METHOD: + case TaskResubscriptionRequest.METHOD: return new TaskResubscriptionRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, TaskIdParams.class)); - case SEND_STREAMING_MESSAGE_METHOD: + case SendStreamingMessageRequest.METHOD: return new SendStreamingMessageRequest(jsonrpc, id, method, getAndValidateParams(paramsNode, jsonParser, treeNode, MessageSendParams.class)); default: diff --git a/core/src/main/java/io/a2a/spec/StringJsonrpcId.java b/spec/src/main/java/io/a2a/spec/StringJsonrpcId.java similarity index 100% rename from core/src/main/java/io/a2a/spec/StringJsonrpcId.java rename to spec/src/main/java/io/a2a/spec/StringJsonrpcId.java diff --git a/core/src/main/java/io/a2a/spec/Task.java b/spec/src/main/java/io/a2a/spec/Task.java similarity index 100% rename from core/src/main/java/io/a2a/spec/Task.java rename to spec/src/main/java/io/a2a/spec/Task.java diff --git a/core/src/main/java/io/a2a/spec/TaskArtifactUpdateEvent.java b/spec/src/main/java/io/a2a/spec/TaskArtifactUpdateEvent.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskArtifactUpdateEvent.java rename to spec/src/main/java/io/a2a/spec/TaskArtifactUpdateEvent.java diff --git a/core/src/main/java/io/a2a/spec/TaskIdParams.java b/spec/src/main/java/io/a2a/spec/TaskIdParams.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskIdParams.java rename to spec/src/main/java/io/a2a/spec/TaskIdParams.java diff --git a/core/src/main/java/io/a2a/spec/TaskNotCancelableError.java b/spec/src/main/java/io/a2a/spec/TaskNotCancelableError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskNotCancelableError.java rename to spec/src/main/java/io/a2a/spec/TaskNotCancelableError.java diff --git a/core/src/main/java/io/a2a/spec/TaskNotFoundError.java b/spec/src/main/java/io/a2a/spec/TaskNotFoundError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskNotFoundError.java rename to spec/src/main/java/io/a2a/spec/TaskNotFoundError.java index 61b1857c5..26ee264e3 100644 --- a/core/src/main/java/io/a2a/spec/TaskNotFoundError.java +++ b/spec/src/main/java/io/a2a/spec/TaskNotFoundError.java @@ -1,12 +1,12 @@ package io.a2a.spec; -import static io.a2a.util.Utils.defaultIfNull; - import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; +import static io.a2a.util.Utils.defaultIfNull; + @JsonInclude(JsonInclude.Include.NON_ABSENT) @JsonIgnoreProperties(ignoreUnknown = true) public class TaskNotFoundError extends JSONRPCError { diff --git a/core/src/main/java/io/a2a/spec/TaskPushNotificationConfig.java b/spec/src/main/java/io/a2a/spec/TaskPushNotificationConfig.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskPushNotificationConfig.java rename to spec/src/main/java/io/a2a/spec/TaskPushNotificationConfig.java diff --git a/core/src/main/java/io/a2a/spec/TaskQueryParams.java b/spec/src/main/java/io/a2a/spec/TaskQueryParams.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskQueryParams.java rename to spec/src/main/java/io/a2a/spec/TaskQueryParams.java diff --git a/core/src/main/java/io/a2a/spec/TaskResubscriptionRequest.java b/spec/src/main/java/io/a2a/spec/TaskResubscriptionRequest.java similarity index 88% rename from core/src/main/java/io/a2a/spec/TaskResubscriptionRequest.java rename to spec/src/main/java/io/a2a/spec/TaskResubscriptionRequest.java index 7380cddd1..de0c88c62 100644 --- a/core/src/main/java/io/a2a/spec/TaskResubscriptionRequest.java +++ b/spec/src/main/java/io/a2a/spec/TaskResubscriptionRequest.java @@ -1,18 +1,15 @@ package io.a2a.spec; -import static io.a2a.spec.A2A.JSONRPC_VERSION; -import static io.a2a.spec.A2A.SEND_TASK_RESUBSCRIPTION_METHOD; import static io.a2a.util.Utils.defaultIfNull; -import java.util.UUID; - import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; - import io.a2a.util.Assert; +import java.util.UUID; + /** * Used to resubscribe to a task. */ @@ -20,6 +17,8 @@ @JsonIgnoreProperties(ignoreUnknown = true) public final class TaskResubscriptionRequest extends StreamingJSONRPCRequest { + public static final String METHOD = "tasks/resubscribe"; + @JsonCreator public TaskResubscriptionRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonProperty("id") Object id, @JsonProperty("method") String method, @JsonProperty("params") TaskIdParams params) { @@ -27,7 +26,7 @@ public TaskResubscriptionRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonP throw new IllegalArgumentException("Invalid JSON-RPC protocol version"); } Assert.checkNotNullParam("method", method); - if (! method.equals(SEND_TASK_RESUBSCRIPTION_METHOD)) { + if (! method.equals(METHOD)) { throw new IllegalArgumentException("Invalid TaskResubscriptionRequest method"); } Assert.checkNotNullParam("params", params); @@ -38,13 +37,13 @@ public TaskResubscriptionRequest(@JsonProperty("jsonrpc") String jsonrpc, @JsonP } public TaskResubscriptionRequest(Object id, TaskIdParams params) { - this(null, id, SEND_TASK_RESUBSCRIPTION_METHOD, params); + this(null, id, METHOD, params); } public static class Builder { private String jsonrpc; private Object id; - private String method = SEND_TASK_RESUBSCRIPTION_METHOD; + private String method = METHOD; private TaskIdParams params; public TaskResubscriptionRequest.Builder jsonrpc(String jsonrpc) { diff --git a/core/src/main/java/io/a2a/spec/TaskState.java b/spec/src/main/java/io/a2a/spec/TaskState.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskState.java rename to spec/src/main/java/io/a2a/spec/TaskState.java diff --git a/core/src/main/java/io/a2a/spec/TaskStatus.java b/spec/src/main/java/io/a2a/spec/TaskStatus.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskStatus.java rename to spec/src/main/java/io/a2a/spec/TaskStatus.java diff --git a/core/src/main/java/io/a2a/spec/TaskStatusUpdateEvent.java b/spec/src/main/java/io/a2a/spec/TaskStatusUpdateEvent.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TaskStatusUpdateEvent.java rename to spec/src/main/java/io/a2a/spec/TaskStatusUpdateEvent.java diff --git a/core/src/main/java/io/a2a/spec/TextPart.java b/spec/src/main/java/io/a2a/spec/TextPart.java similarity index 100% rename from core/src/main/java/io/a2a/spec/TextPart.java rename to spec/src/main/java/io/a2a/spec/TextPart.java diff --git a/core/src/main/java/io/a2a/spec/UnsupportedOperationError.java b/spec/src/main/java/io/a2a/spec/UnsupportedOperationError.java similarity index 100% rename from core/src/main/java/io/a2a/spec/UnsupportedOperationError.java rename to spec/src/main/java/io/a2a/spec/UnsupportedOperationError.java diff --git a/core/src/main/java/io/a2a/util/Utils.java b/spec/src/main/java/io/a2a/util/Utils.java similarity index 100% rename from core/src/main/java/io/a2a/util/Utils.java rename to spec/src/main/java/io/a2a/util/Utils.java diff --git a/spec/src/main/resources/META-INF/beans.xml b/spec/src/main/resources/META-INF/beans.xml new file mode 100644 index 000000000..e69de29bb diff --git a/core/src/test/java/io/a2a/spec/JSONRPCErrorSerializationTest.java b/spec/src/test/java/io/a2a/spec/JSONRPCErrorSerializationTest.java similarity index 100% rename from core/src/test/java/io/a2a/spec/JSONRPCErrorSerializationTest.java rename to spec/src/test/java/io/a2a/spec/JSONRPCErrorSerializationTest.java diff --git a/tck/pom.xml b/tck/pom.xml index b89071fc1..ceaf52f45 100644 --- a/tck/pom.xml +++ b/tck/pom.xml @@ -16,6 +16,11 @@ Server example to use with the A2A TCK + + io.a2a.sdk + a2a-java-sdk-spec + ${project.version} + io.a2a.sdk a2a-java-sdk-server-quarkus diff --git a/tests/server-common/pom.xml b/tests/server-common/pom.xml index 866b379c0..394320f6c 100644 --- a/tests/server-common/pom.xml +++ b/tests/server-common/pom.xml @@ -20,7 +20,12 @@ ${project.groupId} - a2a-java-sdk-core + a2a-java-sdk-spec + ${project.version} + + + ${project.groupId} + a2a-java-sdk-client ${project.version}