[Bug]: ConversationCompactor#truncateToolUseArgs drops Msg id/metadata/timestamp/usage and ToolUseBlock content/metadata/state

Chiusa Adatta ai principianti
#3,628 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@xihongshichaojidan8 ci sta già lavorando.

Dal 19/10/2026.

  • #3649 di @xihongshichaojidan8 — aperta

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
82/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
java

Direzione di ricerca

Leggi ConversationCompactor.java in corrispondenza di truncateToolUseArgs e confronta la sua logica di ricostruzione con il modello pruneToolResults di #3326. Aggiungi o estendi i test di troncamento per confermare che l’argomento venga accorciato mentre i campi del messaggio e di ToolUseBlock elencati nell’issue vengono preservati; il lavoro è terminato quando questi test passano.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Describe the bug

When tool-use arguments are truncated during compaction, both the message and the block are rebuilt from scratch, and most of their fields are lost.

  • ConversationCompactor.java#L701:
    return Msg.builder().role(msg.getRole()).name(msg.getName()).content(newBlocks).build();
    
    The rebuilt message gets a new random id, timestamp becomes "now", and metadata and usage are lost.
  • ConversationCompactor.java#L726:
    return ToolUseBlock.builder().id(tu.getId()).name(tu.getName()).input(newInput).build();
    
    The rebuilt block loses content (the raw argument JSON), metadata (for example Gemini's thoughtSignature, see ToolUseBlock.java#L37) and state.

Impact

  • Anything keyed on message id breaks once argument truncation runs. That includes UI deduplication, mapping persisted messages back to rendered ones, and snapshot/rollback comparisons. Application-level markers stored in message metadata disappear as well.
  • Gemini may reject replayed tool calls that no longer carry their thought signature.

To Reproduce

  1. Enable compaction with tool-argument truncation.
  2. Create an assistant message whose ToolUseBlock has a large argument, and set metadata on both the message and the block.
  3. Trigger compaction so that the message lands in the truncation range. The resulting message has a different id, a new timestamp, and no metadata.

Expected behavior

Truncation only shortens the argument values. Identity and metadata are preserved.

Suggested fix

Apply the same pattern as #3326, which did this for pruneToolResults:

Msg.builder().id(msg.getId()).role(msg.getRole()).name(msg.getName())
    .metadata(msg.getMetadata()).timestamp(msg.getTimestamp()).usage(msg.getUsage())
    .content(newBlocks).build();

ToolUseBlock.builder().id(tu.getId()).name(tu.getName()).input(newInput)
    .metadata(tu.getMetadata()).state(tu.getState())
    /* content: regenerate from newInput, or drop, so that it stays consistent with the truncated input */
    .build();

Environment

  • AgentScope-Java Version: 2.0.4 (unchanged since 2.0.3; also on main @035487e)
  • Java Version: 25
  • OS: any
Lingua principale
Java
Stelle
6.1k
Fork
1.5k
Merge medio
1g 10h
PR unite (30g)
151

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di agentscope-ai/agentscope-java

Tutte le issue di agentscope-ai/agentscope-java

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.