agentscope-ai / agentscope-ai/agentscope-java
[Bug]:HarnessAgent does not forward per-session interrupt methods from ReActAgent
- 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
Đánh giá
Issue này chưa được đánh giá.