Skip to content

Commit a14fd2e

Browse files
kabirehsavoie
andauthored
feat!: Trim io.a2a.apec package (#556)
Introduce a new jsonrpc-common module, and move the io.a2a.spec Request and Response classes there since they are internal use now. The jsonrpc-common module also gets the JsonUtil and the various MappingExceptions. The spec package exceptions were tied to JSON-RPC. We decided to keep the `code` and `data` fields, which could be useful even when JSON-RPC is not used. But we got rid of the JSONRPCError class, and repurposes the A2AError interface to take its role. Also renamed JSONRPCRequest and JSONRPCResponse to be A2ARequest/-Response. Make A2AError extend RuntimeException rather than Error. --------- Signed-off-by: Emmanuel Hugonnet <[email protected]> Co-authored-by: Emmanuel Hugonnet <[email protected]>
1 parent a2daec9 commit a14fd2e

File tree

214 files changed

+1390
-1336
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

214 files changed

+1390
-1336
lines changed

boms/sdk/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
<artifactId>a2a-java-sdk-common</artifactId>
4040
<version>${project.version}</version>
4141
</dependency>
42+
<dependency>
43+
<groupId>${project.groupId}</groupId>
44+
<artifactId>a2a-java-sdk-jsonrpc-common</artifactId>
45+
<version>${project.version}</version>
46+
</dependency>
4247
<dependency>
4348
<groupId>${project.groupId}</groupId>
4449
<artifactId>a2a-java-sdk-http-client</artifactId>

client/base/src/main/java/io/a2a/client/AbstractClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
import java.util.function.Consumer;
99

1010
import io.a2a.client.transport.spi.interceptors.ClientCallContext;
11+
import io.a2a.jsonrpc.common.wrappers.ListTasksResult;
1112
import io.a2a.spec.A2AClientException;
1213
import io.a2a.spec.AgentCard;
1314
import io.a2a.spec.DeleteTaskPushNotificationConfigParams;
1415
import io.a2a.spec.GetTaskPushNotificationConfigParams;
1516
import io.a2a.spec.ListTaskPushNotificationConfigParams;
1617
import io.a2a.spec.ListTaskPushNotificationConfigResult;
1718
import io.a2a.spec.ListTasksParams;
18-
import io.a2a.spec.ListTasksResult;
1919
import io.a2a.spec.Message;
2020
import io.a2a.spec.PushNotificationConfig;
2121
import io.a2a.spec.Task;

client/base/src/main/java/io/a2a/client/Client.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package io.a2a.client;
22

3+
import static io.a2a.util.Assert.checkNotNullParam;
4+
35
import java.util.List;
46
import java.util.Map;
57
import java.util.function.BiConsumer;
68
import java.util.function.Consumer;
79

810
import io.a2a.client.config.ClientConfig;
9-
import io.a2a.client.transport.spi.interceptors.ClientCallContext;
1011
import io.a2a.client.transport.spi.ClientTransport;
12+
import io.a2a.client.transport.spi.interceptors.ClientCallContext;
13+
import io.a2a.jsonrpc.common.wrappers.ListTasksResult;
1114
import io.a2a.spec.A2AClientError;
1215
import io.a2a.spec.A2AClientException;
1316
import io.a2a.spec.A2AClientInvalidStateError;
@@ -18,7 +21,6 @@
1821
import io.a2a.spec.ListTaskPushNotificationConfigParams;
1922
import io.a2a.spec.ListTaskPushNotificationConfigResult;
2023
import io.a2a.spec.ListTasksParams;
21-
import io.a2a.spec.ListTasksResult;
2224
import io.a2a.spec.Message;
2325
import io.a2a.spec.MessageSendConfiguration;
2426
import io.a2a.spec.MessageSendParams;
@@ -30,9 +32,6 @@
3032
import io.a2a.spec.TaskPushNotificationConfig;
3133
import io.a2a.spec.TaskQueryParams;
3234
import io.a2a.spec.TaskStatusUpdateEvent;
33-
34-
import static io.a2a.util.Assert.checkNotNullParam;
35-
3635
import org.jspecify.annotations.NonNull;
3736
import org.jspecify.annotations.Nullable;
3837

client/base/src/main/java/io/a2a/client/ClientBuilder.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
package io.a2a.client;
22

3+
import java.util.ArrayList;
4+
import java.util.HashMap;
5+
import java.util.LinkedHashMap;
6+
import java.util.List;
7+
import java.util.Map;
8+
import java.util.ServiceLoader;
9+
import java.util.function.BiConsumer;
10+
import java.util.function.Consumer;
11+
312
import io.a2a.client.config.ClientConfig;
413
import io.a2a.client.transport.spi.ClientTransport;
514
import io.a2a.client.transport.spi.ClientTransportConfig;
@@ -9,15 +18,6 @@
918
import io.a2a.spec.AgentCard;
1019
import io.a2a.spec.AgentInterface;
1120
import io.a2a.spec.TransportProtocol;
12-
13-
import java.util.ArrayList;
14-
import java.util.HashMap;
15-
import java.util.LinkedHashMap;
16-
import java.util.List;
17-
import java.util.Map;
18-
import java.util.ServiceLoader;
19-
import java.util.function.BiConsumer;
20-
import java.util.function.Consumer;
2121
import org.jspecify.annotations.NonNull;
2222
import org.jspecify.annotations.Nullable;
2323

client/base/src/main/java/io/a2a/client/config/ClientConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package io.a2a.client.config;
22

3+
import java.util.ArrayList;
4+
import java.util.HashMap;
35
import java.util.List;
46
import java.util.Map;
57

68
import io.a2a.spec.PushNotificationConfig;
7-
import java.util.ArrayList;
8-
import java.util.HashMap;
99
import org.jspecify.annotations.Nullable;
1010

1111
/**

client/base/src/test/java/io/a2a/A2ATest.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package io.a2a;
22

3-
import io.a2a.spec.Message;
4-
import io.a2a.spec.Part;
5-
import io.a2a.spec.TextPart;
6-
import org.junit.jupiter.api.Test;
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
5+
import static org.junit.jupiter.api.Assertions.assertNull;
76

87
import java.util.Arrays;
98
import java.util.Collections;
109
import java.util.List;
1110

12-
import static org.junit.jupiter.api.Assertions.assertEquals;
13-
import static org.junit.jupiter.api.Assertions.assertNotNull;
14-
import static org.junit.jupiter.api.Assertions.assertNull;
11+
import io.a2a.spec.Message;
12+
import io.a2a.spec.Part;
13+
import io.a2a.spec.TextPart;
14+
import org.junit.jupiter.api.Test;
1515

1616
public class A2ATest {
1717

client/transport/grpc/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@
2525
<groupId>${project.groupId}</groupId>
2626
<artifactId>a2a-java-sdk-spec</artifactId>
2727
</dependency>
28+
<dependency>
29+
<groupId>${project.groupId}</groupId>
30+
<artifactId>a2a-java-sdk-jsonrpc-common</artifactId>
31+
<version>${project.version}</version>
32+
</dependency>
2833
<dependency>
2934
<groupId>${project.groupId}</groupId>
3035
<artifactId>a2a-java-sdk-spec-grpc</artifactId>

client/transport/grpc/src/main/java/io/a2a/client/transport/grpc/EventStreamObserver.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package io.a2a.client.transport.grpc;
22

33

4-
import io.a2a.grpc.StreamResponse;
5-
import io.a2a.spec.StreamingEventKind;
6-
import io.grpc.stub.StreamObserver;
4+
import static io.a2a.grpc.utils.ProtoUtils.FromProto;
75

86
import java.util.function.Consumer;
97
import java.util.logging.Logger;
108

11-
import static io.a2a.grpc.utils.ProtoUtils.FromProto;
9+
import io.a2a.grpc.StreamResponse;
10+
import io.a2a.spec.StreamingEventKind;
11+
import io.grpc.stub.StreamObserver;
1212

1313
public class EventStreamObserver implements StreamObserver<StreamResponse> {
1414

client/transport/grpc/src/main/java/io/a2a/client/transport/grpc/GrpcTransport.java

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11
package io.a2a.client.transport.grpc;
22

3+
import static io.a2a.spec.A2AMethods.CANCEL_TASK_METHOD;
4+
import static io.a2a.spec.A2AMethods.DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD;
5+
import static io.a2a.spec.A2AMethods.GET_TASK_METHOD;
6+
import static io.a2a.spec.A2AMethods.GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD;
7+
import static io.a2a.spec.A2AMethods.LIST_TASK_METHOD;
8+
import static io.a2a.spec.A2AMethods.LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD;
9+
import static io.a2a.spec.A2AMethods.SEND_MESSAGE_METHOD;
10+
import static io.a2a.spec.A2AMethods.SEND_STREAMING_MESSAGE_METHOD;
11+
import static io.a2a.spec.A2AMethods.SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD;
12+
import static io.a2a.spec.A2AMethods.SUBSCRIBE_TO_TASK_METHOD;
313
import static io.a2a.util.Assert.checkNotNullParam;
414

515
import java.util.List;
616
import java.util.Map;
717
import java.util.function.Consumer;
818
import java.util.stream.Collectors;
919

10-
import io.a2a.client.transport.spi.interceptors.ClientCallContext;
1120
import io.a2a.client.transport.spi.ClientTransport;
21+
import io.a2a.client.transport.spi.interceptors.ClientCallContext;
1222
import io.a2a.client.transport.spi.interceptors.ClientCallInterceptor;
1323
import io.a2a.client.transport.spi.interceptors.PayloadAndHeaders;
1424
import io.a2a.client.transport.spi.interceptors.auth.AuthInterceptor;
@@ -18,27 +28,17 @@
1828
import io.a2a.grpc.A2AServiceGrpc.A2AServiceStub;
1929
import io.a2a.grpc.utils.ProtoUtils.FromProto;
2030
import io.a2a.grpc.utils.ProtoUtils.ToProto;
31+
import io.a2a.jsonrpc.common.wrappers.ListTasksResult;
2132
import io.a2a.spec.A2AClientException;
2233
import io.a2a.spec.AgentCard;
23-
import io.a2a.spec.CancelTaskRequest;
2434
import io.a2a.spec.DeleteTaskPushNotificationConfigParams;
25-
import io.a2a.spec.DeleteTaskPushNotificationConfigRequest;
2635
import io.a2a.spec.EventKind;
2736
import io.a2a.spec.GetTaskPushNotificationConfigParams;
28-
import io.a2a.spec.GetTaskPushNotificationConfigRequest;
29-
import io.a2a.spec.GetTaskRequest;
3037
import io.a2a.spec.ListTaskPushNotificationConfigParams;
31-
import io.a2a.spec.ListTaskPushNotificationConfigRequest;
3238
import io.a2a.spec.ListTaskPushNotificationConfigResult;
3339
import io.a2a.spec.ListTasksParams;
34-
import io.a2a.spec.ListTasksRequest;
35-
import io.a2a.spec.ListTasksResult;
3640
import io.a2a.spec.MessageSendParams;
37-
import io.a2a.spec.SendMessageRequest;
38-
import io.a2a.spec.SendStreamingMessageRequest;
39-
import io.a2a.spec.SetTaskPushNotificationConfigRequest;
4041
import io.a2a.spec.StreamingEventKind;
41-
import io.a2a.spec.SubscribeToTaskRequest;
4242
import io.a2a.spec.Task;
4343
import io.a2a.spec.TaskIdParams;
4444
import io.a2a.spec.TaskPushNotificationConfig;
@@ -95,7 +95,7 @@ public EventKind sendMessage(MessageSendParams request, @Nullable ClientCallCont
9595
MessageSendParams tenantRequest = createRequestWithTenant(request);
9696

9797
io.a2a.grpc.SendMessageRequest sendMessageRequest = createGrpcSendMessageRequest(tenantRequest, context);
98-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(SendMessageRequest.METHOD, sendMessageRequest,
98+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(SEND_MESSAGE_METHOD, sendMessageRequest,
9999
agentCard, context);
100100

101101
try {
@@ -121,7 +121,7 @@ public void sendMessageStreaming(MessageSendParams request, Consumer<StreamingEv
121121
MessageSendParams tenantRequest = createRequestWithTenant(request);
122122

123123
io.a2a.grpc.SendMessageRequest grpcRequest = createGrpcSendMessageRequest(tenantRequest, context);
124-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(SendStreamingMessageRequest.METHOD,
124+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(SEND_STREAMING_MESSAGE_METHOD,
125125
grpcRequest, agentCard, context);
126126
StreamObserver<io.a2a.grpc.StreamResponse> streamObserver = new EventStreamObserver(eventConsumer, errorConsumer);
127127

@@ -143,7 +143,7 @@ public Task getTask(TaskQueryParams request, @Nullable ClientCallContext context
143143
}
144144
requestBuilder.setTenant(resolveTenant(request.tenant()));
145145
io.a2a.grpc.GetTaskRequest getTaskRequest = requestBuilder.build();
146-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(GetTaskRequest.METHOD, getTaskRequest,
146+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(GET_TASK_METHOD, getTaskRequest,
147147
agentCard, context);
148148

149149
try {
@@ -162,8 +162,7 @@ public Task cancelTask(TaskIdParams request, @Nullable ClientCallContext context
162162
.setName("tasks/" + request.id())
163163
.setTenant(resolveTenant(request.tenant()))
164164
.build();
165-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(CancelTaskRequest.METHOD, cancelTaskRequest,
166-
agentCard, context);
165+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(CANCEL_TASK_METHOD, cancelTaskRequest, agentCard, context);
167166

168167
try {
169168
A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders);
@@ -201,8 +200,7 @@ public ListTasksResult listTasks(ListTasksParams request, @Nullable ClientCallCo
201200
}
202201
requestBuilder.setTenant(resolveTenant(request.tenant()));
203202
io.a2a.grpc.ListTasksRequest listTasksRequest = requestBuilder.build();
204-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(ListTasksRequest.METHOD, listTasksRequest,
205-
agentCard, context);
203+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(LIST_TASK_METHOD, listTasksRequest, agentCard, context);
206204

207205
try {
208206
A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders);
@@ -233,8 +231,7 @@ public TaskPushNotificationConfig setTaskPushNotificationConfiguration(TaskPushN
233231
.setConfigId(configId != null ? configId : request.taskId())
234232
.setTenant(resolveTenant(request.tenant()))
235233
.build();
236-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(SetTaskPushNotificationConfigRequest.METHOD,
237-
grpcRequest, agentCard, context);
234+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(SET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, grpcRequest, agentCard, context);
238235

239236
try {
240237
A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders);
@@ -254,8 +251,7 @@ public TaskPushNotificationConfig getTaskPushNotificationConfiguration(
254251
.setName(getTaskPushNotificationConfigName(request))
255252
.setTenant(resolveTenant(request.tenant()))
256253
.build();
257-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(GetTaskPushNotificationConfigRequest.METHOD,
258-
grpcRequest, agentCard, context);
254+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(GET_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, grpcRequest, agentCard, context);
259255

260256
try {
261257
A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders);
@@ -277,7 +273,7 @@ public ListTaskPushNotificationConfigResult listTaskPushNotificationConfiguratio
277273
.setPageSize(request.pageSize())
278274
.setPageToken(request.pageToken())
279275
.build();
280-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(ListTaskPushNotificationConfigRequest.METHOD,
276+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(LIST_TASK_PUSH_NOTIFICATION_CONFIG_METHOD,
281277
grpcRequest, agentCard, context);
282278

283279
try {
@@ -298,8 +294,7 @@ public void deleteTaskPushNotificationConfigurations(DeleteTaskPushNotificationC
298294
.setName(getTaskPushNotificationConfigName(request.id(), request.pushNotificationConfigId()))
299295
.setTenant(resolveTenant(request.tenant()))
300296
.build();
301-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(DeleteTaskPushNotificationConfigRequest.METHOD,
302-
grpcRequest, agentCard, context);
297+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(DELETE_TASK_PUSH_NOTIFICATION_CONFIG_METHOD, grpcRequest, agentCard, context);
303298

304299
try {
305300
A2AServiceBlockingV2Stub stubWithMetadata = createBlockingStubWithMetadata(context, payloadAndHeaders);
@@ -319,8 +314,7 @@ public void resubscribe(TaskIdParams request, Consumer<StreamingEventKind> event
319314
.setTenant(resolveTenant(request.tenant()))
320315
.setName("tasks/" + request.id())
321316
.build();
322-
PayloadAndHeaders payloadAndHeaders = applyInterceptors(SubscribeToTaskRequest.METHOD,
323-
grpcRequest, agentCard, context);
317+
PayloadAndHeaders payloadAndHeaders = applyInterceptors(SUBSCRIBE_TO_TASK_METHOD, grpcRequest, agentCard, context);
324318

325319
StreamObserver<io.a2a.grpc.StreamResponse> streamObserver = new EventStreamObserver(eventConsumer, errorConsumer);
326320

client/transport/grpc/src/main/java/io/a2a/client/transport/grpc/GrpcTransportConfig.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package io.a2a.client.transport.grpc;
22

3+
import java.util.function.Function;
4+
35
import io.a2a.client.transport.spi.ClientTransportConfig;
46
import io.a2a.util.Assert;
57
import io.grpc.Channel;
68

7-
import java.util.function.Function;
8-
99
public class GrpcTransportConfig extends ClientTransportConfig<GrpcTransport> {
1010

1111
private final Function<String, Channel> channelFactory;

0 commit comments

Comments
 (0)