From a148a4a5706d68412b0362124b2790e618df4288 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=87=E8=BD=A9?= Date: Sat, 31 Jan 2026 22:27:32 +0800 Subject: [PATCH 1/2] feat: preserve context in agent streaming calls Add context propagation to agent streaming calls by capturing and writing the current context before execution. This ensures context information is maintained throughout the streaming operation. --- .../src/main/java/io/agentscope/core/agent/AgentBase.java | 4 ++++ .../java/io/agentscope/core/agent/AgentStreamingTest.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/agentscope-core/src/main/java/io/agentscope/core/agent/AgentBase.java b/agentscope-core/src/main/java/io/agentscope/core/agent/AgentBase.java index a494c1c8d..8de57fe6a 100644 --- a/agentscope-core/src/main/java/io/agentscope/core/agent/AgentBase.java +++ b/agentscope-core/src/main/java/io/agentscope/core/agent/AgentBase.java @@ -39,6 +39,7 @@ import reactor.core.publisher.FluxSink; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; +import reactor.util.context.ContextView; /** * Abstract base class for all agents in the AgentScope framework. @@ -672,9 +673,12 @@ private Flux createEventStream(StreamOptions options, Supplier> // Add temporary hook hooks.add(streamingHook); + ContextView ctx = sink.contextView(); + // Execute call and manage hook lifecycle callSupplier .get() + .contextWrite(ctx) .doFinally( signalType -> { // Remove temporary hook diff --git a/agentscope-core/src/test/java/io/agentscope/core/agent/AgentStreamingTest.java b/agentscope-core/src/test/java/io/agentscope/core/agent/AgentStreamingTest.java index cfdc2e439..0c2b57e61 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/agent/AgentStreamingTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/agent/AgentStreamingTest.java @@ -221,7 +221,8 @@ void testStreamWithListOfMessages() { StreamOptions options = StreamOptions.builder().build(); List events = new ArrayList<>(); - agent.stream(inputMsgs, options).doOnNext(events::add).blockLast(); + agent.stream(inputMsgs, options).contextWrite(ctx -> ctx.put("test", "test")) + .doOnNext(events::add).blockLast(); assertFalse(events.isEmpty()); Event lastEvent = events.get(events.size() - 1); From da8af1ebfada4b603b8c0534c8abf7d0e64808b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=87=E8=BD=A9?= Date: Sat, 31 Jan 2026 22:40:54 +0800 Subject: [PATCH 2/2] refactor: remove unnecessary contextWrite in AgentStreamingTest --- .../test/java/io/agentscope/core/agent/AgentStreamingTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/agentscope-core/src/test/java/io/agentscope/core/agent/AgentStreamingTest.java b/agentscope-core/src/test/java/io/agentscope/core/agent/AgentStreamingTest.java index 0c2b57e61..cfdc2e439 100644 --- a/agentscope-core/src/test/java/io/agentscope/core/agent/AgentStreamingTest.java +++ b/agentscope-core/src/test/java/io/agentscope/core/agent/AgentStreamingTest.java @@ -221,8 +221,7 @@ void testStreamWithListOfMessages() { StreamOptions options = StreamOptions.builder().build(); List events = new ArrayList<>(); - agent.stream(inputMsgs, options).contextWrite(ctx -> ctx.put("test", "test")) - .doOnNext(events::add).blockLast(); + agent.stream(inputMsgs, options).doOnNext(events::add).blockLast(); assertFalse(events.isEmpty()); Event lastEvent = events.get(events.size() - 1);