Skip to content

Commit 6a98b01

Browse files
authored
fix: keep current status messages out of task history (a2aproject#1122)
* fix: preserve status message history ordering * test: cover compat status message history Signed-off-by: 1fanwang <1fannnw@gmail.com>
1 parent eb3dc1d commit 6a98b01

4 files changed

Lines changed: 63 additions & 9 deletions

File tree

‎client/base/src/main/java/org/a2aproject/sdk/client/ClientTaskManager.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,12 @@ synchronized Task saveTaskEvent(TaskStatusUpdateEvent taskStatusUpdateEvent) thr
6767
}
6868

6969
Task.Builder taskBuilder = Task.builder(task);
70-
if (taskStatusUpdateEvent.status().message() != null) {
70+
if (task.status().message() != null) {
7171
if (task.history() == null) {
72-
taskBuilder.history(taskStatusUpdateEvent.status().message());
72+
taskBuilder.history(task.status().message());
7373
} else {
7474
List<Message> history = new ArrayList<>(task.history());
75-
history.add(taskStatusUpdateEvent.status().message());
75+
history.add(task.status().message());
7676
taskBuilder.history(history);
7777
}
7878
}

‎client/base/src/test/java/org/a2aproject/sdk/client/ClientTaskManagerTest.java‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,8 @@ public void testSaveTaskEventWithStatusUpdate() throws Exception {
8989

9090
assertEquals(TaskState.TASK_STATE_COMPLETED, updatedTask.status().state());
9191
assertNotNull(updatedTask.history());
92-
assertEquals(1, updatedTask.history().size());
93-
assertEquals(sampleMessage, updatedTask.history().get(0));
92+
assertEquals(0, updatedTask.history().size());
93+
assertEquals(sampleMessage, updatedTask.status().message());
9494
}
9595

9696
@Test
@@ -251,7 +251,8 @@ public void testSaveTaskEventMultipleStatusUpdates() throws Exception {
251251

252252
Task updatedTask1 = taskManager.saveTaskEvent(statusUpdate1);
253253
assertEquals(TaskState.TASK_STATE_WORKING, updatedTask1.status().state());
254-
assertEquals(1, updatedTask1.history().size());
254+
assertEquals(0, updatedTask1.history().size());
255+
assertEquals(sampleMessage, updatedTask1.status().message());
255256

256257
// Second status update
257258
Message secondMessage = Message.builder()
@@ -268,7 +269,9 @@ public void testSaveTaskEventMultipleStatusUpdates() throws Exception {
268269

269270
Task updatedTask2 = taskManager.saveTaskEvent(statusUpdate2);
270271
assertEquals(TaskState.TASK_STATE_COMPLETED, updatedTask2.status().state());
271-
assertEquals(2, updatedTask2.history().size());
272+
assertEquals(1, updatedTask2.history().size());
273+
assertEquals(sampleMessage, updatedTask2.history().get(0));
274+
assertEquals(secondMessage, updatedTask2.status().message());
272275
}
273276

274277
@Test

‎compat-0.3/client/base/src/main/java/org/a2aproject/sdk/compat03/client/ClientTaskManager_v0_3.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ Task_v0_3 saveTaskEvent(TaskStatusUpdateEvent_v0_3 taskStatusUpdateEvent) throws
6767
}
6868

6969
Task_v0_3.Builder taskBuilder = new Task_v0_3.Builder(task);
70-
if (taskStatusUpdateEvent.status().message() != null) {
70+
if (task.status().message() != null) {
7171
List<Message_v0_3> history = new ArrayList<>(task.history());
72-
history.add(taskStatusUpdateEvent.status().message());
72+
history.add(task.status().message());
7373
taskBuilder.history(history);
7474
}
7575
if (taskStatusUpdateEvent.metadata() != null) {
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.a2aproject.sdk.compat03.client;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.util.List;
7+
8+
import org.a2aproject.sdk.compat03.spec.Message_v0_3;
9+
import org.a2aproject.sdk.compat03.spec.TaskState_v0_3;
10+
import org.a2aproject.sdk.compat03.spec.TaskStatusUpdateEvent_v0_3;
11+
import org.a2aproject.sdk.compat03.spec.TaskStatus_v0_3;
12+
import org.a2aproject.sdk.compat03.spec.Task_v0_3;
13+
import org.a2aproject.sdk.compat03.spec.TextPart_v0_3;
14+
import org.junit.jupiter.api.Test;
15+
16+
public class ClientTaskManager_v0_3_Test {
17+
18+
@Test
19+
public void testStatusMessagesMoveToHistoryWhenSuperseded() throws Exception {
20+
ClientTaskManager_v0_3 taskManager = new ClientTaskManager_v0_3();
21+
Message_v0_3 workingMessage = new Message_v0_3.Builder()
22+
.messageId("working-message")
23+
.role(Message_v0_3.Role.AGENT)
24+
.parts(new TextPart_v0_3("working"))
25+
.build();
26+
Message_v0_3 completedMessage = new Message_v0_3.Builder()
27+
.messageId("completed-message")
28+
.role(Message_v0_3.Role.AGENT)
29+
.parts(new TextPart_v0_3("completed"))
30+
.build();
31+
32+
Task_v0_3 workingTask = taskManager.saveTaskEvent(new TaskStatusUpdateEvent_v0_3.Builder()
33+
.taskId("task-123")
34+
.contextId("context-123")
35+
.status(new TaskStatus_v0_3(TaskState_v0_3.WORKING, workingMessage, null))
36+
.build());
37+
38+
assertTrue(workingTask.history().isEmpty());
39+
assertEquals(workingMessage, workingTask.status().message());
40+
41+
Task_v0_3 completedTask = taskManager.saveTaskEvent(new TaskStatusUpdateEvent_v0_3.Builder()
42+
.taskId("task-123")
43+
.contextId("context-123")
44+
.status(new TaskStatus_v0_3(TaskState_v0_3.COMPLETED, completedMessage, null))
45+
.isFinal(true)
46+
.build());
47+
48+
assertEquals(List.of(workingMessage), completedTask.history());
49+
assertEquals(completedMessage, completedTask.status().message());
50+
}
51+
}

0 commit comments

Comments
 (0)