Skip to content

Commit c0f34ee

Browse files
fix: clear status.message after adding to history in TaskManager.updateWithMessage #424 (#425)
1 parent 5031b8f commit c0f34ee

File tree

2 files changed

+51
-3
lines changed

2 files changed

+51
-3
lines changed

server-common/src/main/java/io/a2a/server/tasks/TaskManager.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,16 @@ public Event process(Event event) throws A2AServerException {
104104
}
105105

106106
public Task updateWithMessage(Message message, Task task) {
107-
List<Message> history = task.getHistory() == null ? new ArrayList<>() : new ArrayList<>(task.getHistory());
108-
if (task.getStatus().message() != null) {
109-
history.add(task.getStatus().message());
107+
List<Message> history = new ArrayList<>(task.getHistory());
108+
109+
TaskStatus status = task.getStatus();
110+
if (status.message() != null) {
111+
history.add(status.message());
112+
status = new TaskStatus(status.state(), null, status.timestamp());
110113
}
111114
history.add(message);
112115
task = new Task.Builder(task)
116+
.status(status)
113117
.history(history)
114118
.build();
115119
saveTask(task);

server-common/src/test/java/io/a2a/server/tasks/TaskManagerTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,4 +692,48 @@ public void testSaveTaskInternal() throws A2AServerException {
692692
assertEquals("test-context", taskManagerWithoutId.getContextId());
693693
assertSame(savedTask, taskManagerWithoutId.getTask());
694694
}
695+
696+
@Test
697+
public void testUpdateWithMessage() throws A2AServerException {
698+
Message initialMessage = new Message.Builder()
699+
.role(Message.Role.USER)
700+
.parts(Collections.singletonList(new TextPart("initial message")))
701+
.messageId("initial-msg-id")
702+
.build();
703+
704+
TaskManager taskManagerWithInitialMessage = new TaskManager(null, null, taskStore, initialMessage);
705+
706+
Message taskMessage = new Message.Builder()
707+
.role(Message.Role.AGENT)
708+
.parts(Collections.singletonList(new TextPart("task message")))
709+
.messageId("task-msg-id")
710+
.build();
711+
712+
TaskStatusUpdateEvent event = new TaskStatusUpdateEvent.Builder()
713+
.taskId("new-task-id")
714+
.contextId("some-context")
715+
.status(new TaskStatus(TaskState.SUBMITTED, taskMessage, null))
716+
.isFinal(false)
717+
.build();
718+
719+
Task saved = taskManagerWithInitialMessage.saveTaskEvent(event);
720+
721+
Message updateMessage = new Message.Builder()
722+
.role(Message.Role.USER)
723+
.parts(Collections.singletonList(new TextPart("update message")))
724+
.messageId("update-msg-id")
725+
.build();
726+
727+
Task updated = taskManagerWithInitialMessage.updateWithMessage(updateMessage, saved);
728+
729+
// There should now be a history containing the initialMessage, task message and update message
730+
assertNotNull(updated.getHistory());
731+
assertEquals(3, updated.getHistory().size());
732+
assertEquals("initial message", ((TextPart) updated.getHistory().get(0).getParts().get(0)).getText());
733+
734+
// The message in the current state should be null
735+
assertNull(updated.getStatus().message());
736+
assertEquals("task message", ((TextPart) updated.getHistory().get(1).getParts().get(0)).getText());
737+
assertEquals("update message", ((TextPart) updated.getHistory().get(2).getParts().get(0)).getText());
738+
}
695739
}

0 commit comments

Comments
 (0)