Skip to content

Commit b0e1255

Browse files
authored
feat!: Update TaskState enums (#660)
Use the protobuf names for the TaskState enums and remove their textual representations so that the enum names are consistent with their String name. Rename UNKNOWN to UNRECOGNIZED to be consistent with the Protobuf definitions. TaskState.TASK_STATE_SUBMITTED is a mouthful but we have static imports for a reason :) This impacts the JPA serialization but I think it's worth having the same textual representation for the task state on the wire and the DB. Remove the TaskStateAdapter that is no longer needed for the JSON serialization. This fixes #652. Signed-off-by: Jeff Mesnil <jmesnil@ibm.com>
1 parent 14e5eeb commit b0e1255

55 files changed

Lines changed: 400 additions & 525 deletions

File tree

Some content is hidden

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

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public Task saveTaskEvent(TaskStatusUpdateEvent taskStatusUpdateEvent) throws A2
6060
Task task = currentTask;
6161
if (task == null) {
6262
task = Task.builder()
63-
.status(new TaskStatus(TaskState.UNKNOWN))
63+
.status(new TaskStatus(TaskState.UNRECOGNIZED))
6464
.id(taskId)
6565
.contextId(contextId == null ? "" : contextId)
6666
.build();
@@ -96,7 +96,7 @@ public Task saveTaskEvent(TaskArtifactUpdateEvent taskArtifactUpdateEvent) {
9696
Task task = currentTask;
9797
if (task == null) {
9898
task = Task.builder()
99-
.status(new TaskStatus(TaskState.UNKNOWN))
99+
.status(new TaskStatus(TaskState.UNRECOGNIZED))
100100
.id(taskId)
101101
.contextId(contextId == null ? "" : contextId)
102102
.build();

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

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void setUp() {
3737
sampleTask = Task.builder()
3838
.id("task123")
3939
.contextId("context456")
40-
.status(new TaskStatus(TaskState.WORKING))
40+
.status(new TaskStatus(TaskState.TASK_STATE_WORKING))
4141
.build();
4242

4343
sampleMessage = Message.builder()
@@ -82,12 +82,12 @@ public void testSaveTaskEventWithStatusUpdate() throws Exception {
8282
TaskStatusUpdateEvent statusUpdate = TaskStatusUpdateEvent.builder()
8383
.taskId(sampleTask.id())
8484
.contextId(sampleTask.contextId())
85-
.status(new TaskStatus(TaskState.COMPLETED, sampleMessage, null))
85+
.status(new TaskStatus(TaskState.TASK_STATE_COMPLETED, sampleMessage, null))
8686
.build();
8787

8888
Task updatedTask = taskManager.saveTaskEvent(statusUpdate);
8989

90-
assertEquals(TaskState.COMPLETED, updatedTask.status().state());
90+
assertEquals(TaskState.TASK_STATE_COMPLETED, updatedTask.status().state());
9191
assertNotNull(updatedTask.history());
9292
assertEquals(1, updatedTask.history().size());
9393
assertEquals(sampleMessage, updatedTask.history().get(0));
@@ -104,7 +104,7 @@ public void testSaveTaskEventWithStatusUpdateAndMetadata() throws Exception {
104104
TaskStatusUpdateEvent statusUpdate = TaskStatusUpdateEvent.builder()
105105
.taskId(sampleTask.id())
106106
.contextId(sampleTask.contextId())
107-
.status(new TaskStatus(TaskState.WORKING))
107+
.status(new TaskStatus(TaskState.TASK_STATE_WORKING))
108108
.metadata(metadata)
109109
.build();
110110

@@ -143,15 +143,15 @@ public void testSaveTaskEventCreatesTaskIfNotExists() throws Exception {
143143
TaskStatusUpdateEvent statusUpdate = TaskStatusUpdateEvent.builder()
144144
.taskId("new_task")
145145
.contextId("new_context")
146-
.status(new TaskStatus(TaskState.WORKING))
146+
.status(new TaskStatus(TaskState.TASK_STATE_WORKING))
147147
.build();
148148

149149
Task updatedTask = taskManager.saveTaskEvent(statusUpdate);
150150

151151
assertNotNull(updatedTask);
152152
assertEquals("new_task", updatedTask.id());
153153
assertEquals("new_context", updatedTask.contextId());
154-
assertEquals(TaskState.WORKING, updatedTask.status().state());
154+
assertEquals(TaskState.TASK_STATE_WORKING, updatedTask.status().state());
155155
}
156156

157157
@Test
@@ -182,7 +182,7 @@ public void testUpdateWithMessage() {
182182
Task taskWithHistory = Task.builder()
183183
.id("task123")
184184
.contextId("context456")
185-
.status(new TaskStatus(TaskState.WORKING))
185+
.status(new TaskStatus(TaskState.TASK_STATE_WORKING))
186186
.build();
187187

188188
Task updatedTask = taskManager.updateWithMessage(sampleMessage, taskWithHistory);
@@ -203,7 +203,7 @@ public void testUpdateWithMessageMovesStatusMessage() {
203203
Task taskWithStatusMessage = Task.builder()
204204
.id("task123")
205205
.contextId("context456")
206-
.status(new TaskStatus(TaskState.WORKING, statusMessage, null))
206+
.status(new TaskStatus(TaskState.TASK_STATE_WORKING, statusMessage, null))
207207
.build();
208208

209209
Task updatedTask = taskManager.updateWithMessage(sampleMessage, taskWithStatusMessage);
@@ -226,7 +226,7 @@ public void testUpdateWithMessagePreservesExistingHistory() {
226226
Task taskWithHistory = Task.builder()
227227
.id("task123")
228228
.contextId("context456")
229-
.status(new TaskStatus(TaskState.WORKING))
229+
.status(new TaskStatus(TaskState.TASK_STATE_WORKING))
230230
.history(List.of(existingMessage))
231231
.build();
232232

@@ -246,11 +246,11 @@ public void testSaveTaskEventMultipleStatusUpdates() throws Exception {
246246
TaskStatusUpdateEvent statusUpdate1 = TaskStatusUpdateEvent.builder()
247247
.taskId(sampleTask.id())
248248
.contextId(sampleTask.contextId())
249-
.status(new TaskStatus(TaskState.WORKING, sampleMessage, null))
249+
.status(new TaskStatus(TaskState.TASK_STATE_WORKING, sampleMessage, null))
250250
.build();
251251

252252
Task updatedTask1 = taskManager.saveTaskEvent(statusUpdate1);
253-
assertEquals(TaskState.WORKING, updatedTask1.status().state());
253+
assertEquals(TaskState.TASK_STATE_WORKING, updatedTask1.status().state());
254254
assertEquals(1, updatedTask1.history().size());
255255

256256
// Second status update
@@ -263,11 +263,11 @@ public void testSaveTaskEventMultipleStatusUpdates() throws Exception {
263263
TaskStatusUpdateEvent statusUpdate2 = TaskStatusUpdateEvent.builder()
264264
.taskId(sampleTask.id())
265265
.contextId(sampleTask.contextId())
266-
.status(new TaskStatus(TaskState.COMPLETED, secondMessage, null))
266+
.status(new TaskStatus(TaskState.TASK_STATE_COMPLETED, secondMessage, null))
267267
.build();
268268

269269
Task updatedTask2 = taskManager.saveTaskEvent(statusUpdate2);
270-
assertEquals(TaskState.COMPLETED, updatedTask2.status().state());
270+
assertEquals(TaskState.TASK_STATE_COMPLETED, updatedTask2.status().state());
271271
assertEquals(2, updatedTask2.history().size());
272272
}
273273

@@ -311,7 +311,7 @@ public void testSaveTaskEventWithEmptyContextId() throws Exception {
311311
TaskStatusUpdateEvent statusUpdate = TaskStatusUpdateEvent.builder()
312312
.taskId("task_with_empty_context")
313313
.contextId("")
314-
.status(new TaskStatus(TaskState.SUBMITTED))
314+
.status(new TaskStatus(TaskState.TASK_STATE_SUBMITTED))
315315
.build();
316316

317317
Task updatedTask = taskManager.saveTaskEvent(statusUpdate);

client/transport/jsonrpc/src/test/java/io/a2a/client/transport/jsonrpc/JSONRPCTransportStreamingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public void testA2AClientSubscribeToTask() throws Exception {
158158
Task task = (Task) eventKind;
159159
assertEquals("2", task.id());
160160
assertEquals("context-1234", task.contextId());
161-
assertEquals(TaskState.COMPLETED, task.status().state());
161+
assertEquals(TaskState.TASK_STATE_COMPLETED, task.status().state());
162162
List<Artifact> artifacts = task.artifacts();
163163
assertEquals(1, artifacts.size());
164164
Artifact artifact = artifacts.get(0);

client/transport/jsonrpc/src/test/java/io/a2a/client/transport/jsonrpc/JSONRPCTransportTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ public void testA2AClientSendMessage() throws Exception {
122122
Task task = (Task) result;
123123
assertEquals("de38c76d-d54c-436c-8b9f-4c2703648d64", task.id());
124124
assertNotNull(task.contextId());
125-
assertEquals(TaskState.COMPLETED,task.status().state());
125+
assertEquals(TaskState.TASK_STATE_COMPLETED,task.status().state());
126126
assertEquals(1, task.artifacts().size());
127127
Artifact artifact = task.artifacts().get(0);
128128
assertEquals("artifact-1", artifact.artifactId());
@@ -235,7 +235,7 @@ public void testA2AClientGetTask() throws Exception {
235235
10), null);
236236
assertEquals("de38c76d-d54c-436c-8b9f-4c2703648d64", task.id());
237237
assertEquals("c295ea44-7543-4f78-b524-7a38915ad6e4", task.contextId());
238-
assertEquals(TaskState.COMPLETED, task.status().state());
238+
assertEquals(TaskState.TASK_STATE_COMPLETED, task.status().state());
239239
assertEquals(1, task.artifacts().size());
240240
Artifact artifact = task.artifacts().get(0);
241241
assertEquals(1, artifact.parts().size());
@@ -287,7 +287,7 @@ public void testA2AClientCancelTask() throws Exception {
287287
Task task = client.cancelTask(new TaskIdParams("de38c76d-d54c-436c-8b9f-4c2703648d64"), null);
288288
assertEquals("de38c76d-d54c-436c-8b9f-4c2703648d64", task.id());
289289
assertEquals("c295ea44-7543-4f78-b524-7a38915ad6e4", task.contextId());
290-
assertEquals(TaskState.CANCELED, task.status().state());
290+
assertEquals(TaskState.TASK_STATE_CANCELED, task.status().state());
291291
assertTrue(task.metadata().isEmpty());
292292
}
293293

@@ -457,7 +457,7 @@ public void testA2AClientSendMessageWithFilePart() throws Exception {
457457
Task task = (Task) result;
458458
assertEquals("de38c76d-d54c-436c-8b9f-4c2703648d64", task.id());
459459
assertNotNull(task.contextId());
460-
assertEquals(TaskState.COMPLETED, task.status().state());
460+
assertEquals(TaskState.TASK_STATE_COMPLETED, task.status().state());
461461
assertEquals(1, task.artifacts().size());
462462
Artifact artifact = task.artifacts().get(0);
463463
assertEquals("artifact-1", artifact.artifactId());
@@ -517,7 +517,7 @@ public void testA2AClientSendMessageWithDataPart() throws Exception {
517517
Task task = (Task) result;
518518
assertEquals("de38c76d-d54c-436c-8b9f-4c2703648d64", task.id());
519519
assertNotNull(task.contextId());
520-
assertEquals(TaskState.COMPLETED, task.status().state());
520+
assertEquals(TaskState.TASK_STATE_COMPLETED, task.status().state());
521521
assertEquals(1, task.artifacts().size());
522522
Artifact artifact = task.artifacts().get(0);
523523
assertEquals("artifact-1", artifact.artifactId());
@@ -575,7 +575,7 @@ public void testA2AClientSendMessageWithMixedParts() throws Exception {
575575
Task task = (Task) result;
576576
assertEquals("de38c76d-d54c-436c-8b9f-4c2703648d64", task.id());
577577
assertNotNull(task.contextId());
578-
assertEquals(TaskState.COMPLETED, task.status().state());
578+
assertEquals(TaskState.TASK_STATE_COMPLETED, task.status().state());
579579
assertEquals(1, task.artifacts().size());
580580
Artifact artifact = task.artifacts().get(0);
581581
assertEquals("artifact-1", artifact.artifactId());

client/transport/jsonrpc/src/test/java/io/a2a/client/transport/jsonrpc/sse/SSEEventListenerTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public void testOnEventWithTaskResult() throws Exception {
5050
Task task = (Task) receivedEvent.get();
5151
assertEquals("task-123", task.id());
5252
assertEquals("context-456", task.contextId());
53-
assertEquals(TaskState.WORKING, task.status().state());
53+
assertEquals(TaskState.TASK_STATE_WORKING, task.status().state());
5454
}
5555

5656
@Test
@@ -104,7 +104,7 @@ public void testOnEventWithTaskStatusUpdateEventEvent() throws Exception {
104104
assertEquals("1", taskStatusUpdateEvent.taskId());
105105
assertEquals("2", taskStatusUpdateEvent.contextId());
106106
assertFalse(taskStatusUpdateEvent.isFinal());
107-
assertEquals(TaskState.SUBMITTED, taskStatusUpdateEvent.status().state());
107+
assertEquals(TaskState.TASK_STATE_SUBMITTED, taskStatusUpdateEvent.status().state());
108108
}
109109

110110
@Test
@@ -184,7 +184,7 @@ public void testOnFailure() {
184184

185185
@Test
186186
public void testFinalTaskStatusUpdateEventCancels() {
187-
TaskStatus completedStatus = new TaskStatus(TaskState.COMPLETED);
187+
TaskStatus completedStatus = new TaskStatus(TaskState.TASK_STATE_COMPLETED);
188188
// Use constructor since Builder doesn't have isFinal method
189189
TaskStatusUpdateEvent tsue = new TaskStatusUpdateEvent(
190190
"1234",
@@ -243,7 +243,7 @@ public void testOnEventWithFinalTaskStatusUpdateEventEventCancels() throws Excep
243243
assertEquals("1", taskStatusUpdateEvent.taskId());
244244
assertEquals("2", taskStatusUpdateEvent.contextId());
245245
assertTrue(taskStatusUpdateEvent.isFinal());
246-
assertEquals(TaskState.COMPLETED, taskStatusUpdateEvent.status().state());
246+
assertEquals(TaskState.TASK_STATE_COMPLETED, taskStatusUpdateEvent.status().state());
247247

248248
assertTrue(future.cancelHandlerCalled);
249249
}

client/transport/rest/src/main/java/io/a2a/client/transport/rest/RestTransport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ private String buildListTasksQueryString(ListTasksParams request) {
250250
queryParts.add("contextId=" + URLEncoder.encode(request.contextId(), StandardCharsets.UTF_8));
251251
}
252252
if (request.status() != null) {
253-
queryParts.add("status=" + request.status().asString());
253+
queryParts.add("status=" + request.status());
254254
}
255255
if (request.pageSize() != null) {
256256
queryParts.add("pageSize=" + request.pageSize());

client/transport/rest/src/test/java/io/a2a/client/transport/rest/RestTransportTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public void testSendMessage() throws Exception {
136136
Task task = (Task) result;
137137
assertEquals("9b511af4-b27c-47fa-aecf-2a93c08a44f8", task.id());
138138
assertEquals("context-1234", task.contextId());
139-
assertEquals(TaskState.SUBMITTED, task.status().state());
139+
assertEquals(TaskState.TASK_STATE_SUBMITTED, task.status().state());
140140
assertNull(task.status().message());
141141
assertNull(task.metadata());
142142
assertEquals(true, task.artifacts().isEmpty());
@@ -174,7 +174,7 @@ public void testCancelTask() throws Exception {
174174
RestTransport instance = new RestTransport(CARD);
175175
Task task = instance.cancelTask(new TaskIdParams("de38c76d-d54c-436c-8b9f-4c2703648d64"), context);
176176
assertEquals("de38c76d-d54c-436c-8b9f-4c2703648d64", task.id());
177-
assertEquals(TaskState.CANCELED, task.status().state());
177+
assertEquals(TaskState.TASK_STATE_CANCELED, task.status().state());
178178
assertNull(task.status().message());
179179
assertNotNull(task.metadata());
180180
assertTrue(task.metadata().isEmpty());
@@ -200,7 +200,7 @@ public void testGetTask() throws Exception {
200200
RestTransport instance = new RestTransport(CARD);
201201
Task task = instance.getTask(request, context);
202202
assertEquals("de38c76d-d54c-436c-8b9f-4c2703648d64", task.id());
203-
assertEquals(TaskState.COMPLETED, task.status().state());
203+
assertEquals(TaskState.TASK_STATE_COMPLETED, task.status().state());
204204
assertNull(task.status().message());
205205
assertNotNull(task.metadata());
206206
assertTrue(task.metadata().isEmpty());
@@ -438,7 +438,7 @@ public void testSubscribe() throws Exception {
438438
Task task = (Task) eventKind;
439439
assertEquals("2", task.id());
440440
assertEquals("context-1234", task.contextId());
441-
assertEquals(TaskState.COMPLETED, task.status().state());
441+
assertEquals(TaskState.TASK_STATE_COMPLETED, task.status().state());
442442
List<Artifact> artifacts = task.artifacts();
443443
assertEquals(1, artifacts.size());
444444
Artifact artifact = artifacts.get(0);

client/transport/rest/src/test/java/io/a2a/client/transport/rest/sse/SSEEventListenerTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public void testOnMessageWithTaskResult() {
9191
Task task = (Task) receivedEvent.get();
9292
assertEquals("task-123", task.id());
9393
assertEquals("context-456", task.contextId());
94-
assertEquals(TaskState.WORKING, task.status().state());
94+
assertEquals(TaskState.TASK_STATE_WORKING, task.status().state());
9595
}
9696

9797
@Test
@@ -165,7 +165,7 @@ public void testOnMessageWithStatusUpdateEvent() {
165165
TaskStatusUpdateEvent taskStatusUpdateEvent = (TaskStatusUpdateEvent) receivedEvent.get();
166166
assertEquals("1", taskStatusUpdateEvent.taskId());
167167
assertEquals("2", taskStatusUpdateEvent.contextId());
168-
assertEquals(TaskState.SUBMITTED, taskStatusUpdateEvent.status().state());
168+
assertEquals(TaskState.TASK_STATE_SUBMITTED, taskStatusUpdateEvent.status().state());
169169
assertEquals(false, taskStatusUpdateEvent.isFinal());
170170
}
171171

@@ -200,7 +200,7 @@ public void testOnMessageWithFinalStatusUpdateEventCancels() {
200200
assertTrue(receivedEvent.get() instanceof TaskStatusUpdateEvent);
201201
TaskStatusUpdateEvent received = (TaskStatusUpdateEvent) receivedEvent.get();
202202
assertTrue(received.isFinal());
203-
assertEquals(TaskState.COMPLETED, received.status().state());
203+
assertEquals(TaskState.TASK_STATE_COMPLETED, received.status().state());
204204

205205
// Verify the future was cancelled (auto-close on final event)
206206
assertTrue(future.wasCancelled());
@@ -236,7 +236,7 @@ public void testOnMessageWithCompletedTaskCancels() {
236236
assertNotNull(receivedEvent.get());
237237
assertTrue(receivedEvent.get() instanceof Task);
238238
Task task = (Task) receivedEvent.get();
239-
assertEquals(TaskState.COMPLETED, task.status().state());
239+
assertEquals(TaskState.TASK_STATE_COMPLETED, task.status().state());
240240

241241
// Verify the future was cancelled (auto-close on final task state)
242242
assertTrue(future.wasCancelled());

0 commit comments

Comments
 (0)