From 933eea4399318436a8d461236265024fd15b1932 Mon Sep 17 00:00:00 2001 From: guslegend <1670547022@qq.com> Date: Sun, 28 Jun 2026 07:19:33 +0800 Subject: [PATCH 1/2] fix(event): avoid Jackson 3 type property conflict --- .../io/agentscope/core/event/AgentEvent.java | 5 +- .../core/event/AgentEventStreamTest.java | 56 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/agentscope-core/src/main/java/io/agentscope/core/event/AgentEvent.java b/agentscope-core/src/main/java/io/agentscope/core/event/AgentEvent.java index 3aad2d7130..44bf836a0b 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/event/AgentEvent.java +++ b/agentscope-core/src/main/java/io/agentscope/core/event/AgentEvent.java @@ -32,7 +32,10 @@ */ @JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) -@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") +@JsonTypeInfo( + use = JsonTypeInfo.Id.NAME, + include = JsonTypeInfo.As.EXISTING_PROPERTY, + property = "type") @JsonSubTypes({ @JsonSubTypes.Type(value = AgentStartEvent.class, name = "AGENT_START"), @JsonSubTypes.Type(value = AgentEndEvent.class, name = "AGENT_END"), diff --git a/agentscope-core/src/test/java/io/agentscope/core/event/AgentEventStreamTest.java b/agentscope-core/src/test/java/io/agentscope/core/event/AgentEventStreamTest.java index e66ce444e0..8f7a5bb474 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/event/AgentEventStreamTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/event/AgentEventStreamTest.java @@ -16,10 +16,12 @@ package io.agentscope.core.event; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; @@ -39,6 +41,60 @@ */ class AgentEventStreamTest { + @Nested + @DisplayName("AgentEvent Jackson contract") + class AgentEventJacksonContract { + + private final ObjectMapper mapper = new ObjectMapper(); + + @Test + @DisplayName("AgentStartEvent serializes with a single type property") + void agentStartEventSerializesWithSingleTypeProperty() throws Exception { + AgentStartEvent event = new AgentStartEvent("session-1", "reply-1", "assistant"); + + String serialized = mapper.writeValueAsString(event); + JsonNode json = mapper.readTree(serialized); + + assertEquals("AGENT_START", json.path("type").asText()); + assertEquals(7, json.size()); + assertEquals(1, serialized.split("\"type\"", -1).length - 1); + assertEquals("session-1", json.path("sessionId").asText()); + assertEquals("reply-1", json.path("replyId").asText()); + assertEquals("assistant", json.path("name").asText()); + assertEquals("assistant", json.path("role").asText()); + assertTrue(json.hasNonNull("id")); + assertTrue(json.hasNonNull("createdAt")); + } + + @Test + @DisplayName("AgentEvent deserializes polymorphically from type") + void agentEventDeserializesPolymorphically() throws Exception { + String json = + """ + { + "type": "AGENT_START", + "id": "evt_1", + "createdAt": "2026-06-27T14:14:24Z", + "sessionId": "session-1", + "replyId": "reply-1", + "name": "assistant", + "role": "assistant" + } + """; + + AgentEvent event = mapper.readValue(json, AgentEvent.class); + + AgentStartEvent startEvent = assertInstanceOf(AgentStartEvent.class, event); + assertEquals(AgentEventType.AGENT_START, startEvent.getType()); + assertEquals("evt_1", startEvent.getId()); + assertEquals("2026-06-27T14:14:24Z", startEvent.getCreatedAt()); + assertEquals("session-1", startEvent.getSessionId()); + assertEquals("reply-1", startEvent.getReplyId()); + assertEquals("assistant", startEvent.getName()); + assertEquals("assistant", startEvent.getRole()); + } + } + @Nested @DisplayName("Legacy event-name aliases round-trip via Jackson") class JsonAliasRoundTrip { From 842c69ff5c8717e9e547ec0221129be49e4b2dc4 Mon Sep 17 00:00:00 2001 From: guslegend <1670547022@qq.com> Date: Sun, 28 Jun 2026 19:21:23 +0800 Subject: [PATCH 2/2] test(event): relax fragile field-count assertion --- .../test/java/io/agentscope/core/event/AgentEventStreamTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/agentscope-core/src/test/java/io/agentscope/core/event/AgentEventStreamTest.java b/agentscope-core/src/test/java/io/agentscope/core/event/AgentEventStreamTest.java index 8f7a5bb474..21a19bd506 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/event/AgentEventStreamTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/event/AgentEventStreamTest.java @@ -56,7 +56,6 @@ void agentStartEventSerializesWithSingleTypeProperty() throws Exception { JsonNode json = mapper.readTree(serialized); assertEquals("AGENT_START", json.path("type").asText()); - assertEquals(7, json.size()); assertEquals(1, serialized.split("\"type\"", -1).length - 1); assertEquals("session-1", json.path("sessionId").asText()); assertEquals("reply-1", json.path("replyId").asText());