agentscope-ai / agentscope-ai/agentscope-java

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

Aberta
#1,683 1 comentário 0 reações 0 responsáveis Ver no GitHub
area/harness bug
Linguagem predominante
Java
Estrelas
5.6k
Forks
1.3k
Merge médio
4d 12h
PRs com merge (30d)
77

Descrição

**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.

Guia de contribuição

Abrir o guia de contribuição

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.