Pareamento de Tool Results
Todatool_use (chamada de ferramenta pelo modelo) deve ter um tool_result correspondente no histórico de conversacao. Quando essa correspondencia quebra — por interrupcao, timeout ou erro silencioso — a API rejeita o histórico.
O sistema EnsureToolResultPairing valida e repara automaticamente:
Resultados Sinteticos
Quando uma tool_use não tem resultado correspondente, o ChatCLI injeta:Validação em 3 Fases
1
Coleta de IDs
Percorre todo o histórico coletando IDs de
tool_use (de mensagens assistant) e IDs de tool_result (de mensagens tool).2
Detecção de Desalinhamentos
Compara os dois conjuntos de IDs. Tool uses sem resultado sao “missing”. Tool results sem uso sao “orphans”. IDs duplicados sao marcados para dedup.
3
Reconstrucao do Histórico
Reconstroi o histórico: remove orphans, faz dedup de tool_use IDs e injeta resultados sinteticos após mensagens assistant com tool_uses sem resultado.
Orcamento de Resultados (Budget Enforcement)
Resultados de ferramentas como leitura de arquivos grandes ou saida de comandos podem consumir rapidamente a janela de contexto. O sistema de orcamento limita o tamanho agregado em três niveis:Per-tool truncation (capability)
Plugins que implementamplugins.TruncationAware declaram seu próprio cap — útil quando o tool tem necessidade de contexto fora do padrão:
A truncação preserva o shape historic head/tail (preview 5000 chars + suffix 1000 chars + marker
[TRUNCATED N chars omitted, M kept]).
Como Funciona o Enforcement
O orcamento e aplicado em duas passadas:- Passada 1: Por Resultado
- Passada 2: Por Turno
Cada resultado individual e verificado contra
DefaultPerResultMaxChars (20KB). Se exceder, o conteúdo completo e salvo em disco e substituido por um preview:Persistência em Disco
Resultados truncados são salvos em arquivos temporários dentro do Workspace de Sessão, em vez do antigo diretório global/tmp/chatcli-tool-results/:
- Isolamento entre sessões. Múltiplas instâncias de
chatclirodando em paralelo no mesmo host não compartilham mais o pool de overflow. - Leitura sob demanda pelo agente. O scratch dir está na allowlist de leitura do agente, então quando o modelo encontra a marca
[full output saved to ...]no preview, ele consegue abrir o arquivo comread_file:
Preview: Head + Tail
O preview mantem o inicio e o final do resultado para maximizar utilidade:Microcompactacao Progressiva
A microcompactacao reduz progressivamente o tamanho de resultados antigos de ferramentas conforme a conversa avanca, sem perder informação crítica:
Com a camada de compressão ativa, os dois níveis são sem perda: o resultado original é arquivado no store CCR antes do corte e o preview/summary carrega um marcador
<<ccr:KEY>> (preservado entre níveis) que o modelo expande com @recall.
Detecção de Tipo de Conteúdo
O resumo identifica automaticamente o tipo do conteúdo para contexto:Configuração da Microcompactacao
Apenas resultados com mais de 3.000 chars sao compactados. Resultados pequenos sao sempre preservados. Resultados de ferramentas de escrita e execução sao preservados por conterem informações críticas de erro.
Fluxo Completo
O gerenciamento de resultados e aplicado nesta ordem durante o loop do agente:Configuração Completa
Próximos Passos
Workspace de Sessão
Onde os arquivos de overflow vivem e como o agente os lê.
Subagent Delegation
Estratégia complementar para evitar saturar o contexto com dados brutos.
Recuperação de Contexto
O que acontece quando mesmo com orçamento o contexto transborda.
Cost Tracking
Monitore o consumo de tokens incluindo tool results.