agentscope-ai / agentscope-ai/agentscope-java

[Bug]:HarnessAgent does not forward per-session interrupt methods from ReActAgent

Đang mở
#1,683 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
area/harness bug
Ngôn ngữ chính
Java
Star
5.6k
Fork
1.3k
Merge trung bình
4 ngày 12 giờ
Pull request đã merge (30 ngày)
77

Mô tả

**Describe the bug**

`ReActAgent` provides per-session interrupt methods that are essential for the stateless (singleton) agent pattern introduced in 2.0:

- `interrupt(RuntimeContext ctx)`
- `interrupt(String userId, String sessionId)`
- `interrupt(String userId, String sessionId, Msg msg)`

However, `HarnessAgent` only overrides the deprecated no-arg `interrupt()` and `interrupt(Msg)`, which fall back to `defaultSessionId`. In a multi-session singleton deployment, calling `interrupt()` on a shared `HarnessAgent` cannot target a specific session — it always hits the default session, leaving other concurrent sessions unaffected when they should be interrupted.

**To Reproduce**

1. Build a singleton `HarnessAgent` (no `defaultSessionId` set):
```java
HarnessAgent agent = HarnessAgent.builder()
.name("my-agent")
.model(model)
.stateStore(new MysqlAgentStateStore(dataSource))
.build();
```
2. Start concurrent calls with different `RuntimeContext`:
```java
agent.streamEvents(msgs, RuntimeContext.builder()
.userId("user-1").sessionId("session-A").build());
agent.streamEvents(msgs, RuntimeContext.builder()
.userId("user-2").sessionId("session-B").build());
```
3. Try to interrupt only session-A:
```java
agent.interrupt("user-1", "session-A"); // compile error: method not found
```
4. Workaround via `getDelegate()`:
```java
agent.getDelegate().interrupt("user-1", "session-A"); // works but leaks internals
```

**Expected behavior**

`HarnessAgent` should forward the per-session interrupt methods to its `ReActAgent` delegate, consistent with how it already forwards `interrupt()` and `interrupt(Msg)`:

```java
public void interrupt(RuntimeContext ctx) {
delegate.interrupt(ctx);
}

public void interrupt(String userId, String sessionId) {
delegate.interrupt(userId, sessionId);
}

public void interrupt(String userId, String sessionId, Msg msg) {
delegate.interrupt(userId, sessionId, msg);
}
```

**Environment**
- AgentScope-Java Version: 2.0.0-RC2
- Java Version: 21
- OS: Windows 11

**Additional context**

The `HarnessAgent.getDelegate()` method exists as a workaround, but requiring users to reach through the wrapper defeats the purpose of the facade. Since 2.0 explicitly promotes the stateless singleton pattern, per-session interrupt is a core capability that `HarnessAgent` should expose.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.