agentscope-ai / agentscope-ai/agentscope-java

ToolResultEvictionMiddleware leaves full tool output in Redis AgentState

Aberta
#2,145 3 comentários 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

## Environment

- AgentScope Java source commit: e3a412ed2cc944e401da861c8d5e464b967724e9
- HarnessAgent with RemoteFilesystemSpec(IsolationScope.SESSION)
- RedisDistributedStore backed by Jedis
- ToolResultEvictionConfig maxResultChars=128, previewChars=16

## Reproduction

1. Build a HarnessAgent with a RedisDistributedStore, RemoteFilesystemSpec, and ToolResultEvictionConfig.
2. Run a tool returning a deterministic 500+ character TextBlock.
3. Let the model consume the ToolResultBlock and complete the turn.
4. Read the eviction artifact through WorkspaceManager: the full output is present.
5. Load agent_state from RedisAgentStateStore in the same or a fresh JVM.

## Expected

The persisted AgentState contains the bounded `Tool output was too large...` placeholder, matching the context transformed by ToolResultEvictionMiddleware. A fresh JVM restores the bounded context and can retrieve the full result from `/large_tool_results//`.

## Actual

The remote eviction artifact is written successfully, but persisted AgentState still contains the complete 500+ character ToolResultBlock. A fresh JVM therefore restores the oversized result and defeats long-conversation context bounding.

The existing local acceptance can miss this because the state object and middleware mutation remain visible in-process. The real Redis fresh-client path exposes the persistence ordering difference.

## Suspected cause

`ToolResultEvictionMiddleware` transforms the acting result after the AgentState persistence point. The artifact write succeeds, but the transformed message is not persisted back to the distributed AgentStateStore before turn completion.

## Why this belongs upstream

Tool-result eviction, middleware ordering, and AgentState persistence are Harness/Core runtime facts. Product hosts should not add a second save/eviction owner to patch this behavior.

A useful regression test should use two fresh Redis clients/JVM phases and assert both the bounded persisted placeholder and full remote artifact recovery.

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.