agentscope-ai / agentscope-ai/agentscope-java

ToolResultEvictionMiddleware leaves full tool output in Redis AgentState

Abierto
#2,145 3 comentarios 0 reacciones 0 asignados Ver en GitHub
area/harness bug
Lenguaje dominante
Java
Estrellas
5.6k
Forks
1.3k
Merge medio
4 d 12 h
PR fusionados (30 d)
77

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.