# Correção: compactação de contexto LLM ## Problema O estado operacional preserva resultados completos de MCP/workflows para auditoria e continuidade. Esses objetos podem conter cópias recursivas de `state`, `input`, `session`, `agent_profile`, `business_events`, `trace`, `nodes` e outros dados técnicos. Quando `build_messages()` serializava diretamente `mcp_results` e `transaction_evidence`, o prompt podia ultrapassar a janela do modelo. Caso observado: `Input length (134212) exceeds model's maximum context length (131072)` no `ContestacaoAgent`. ## Correção - `build_messages()` passa a renderizar business context, MCP results, transaction evidence, RAG metadata e extra sections por um compactador genérico com orçamento de caracteres. - Objetos técnicos recursivos permanecem no estado/checkpoint para auditoria, mas não são reenviados integralmente ao LLM. - Fatos de negócio (tool, subject, status, valores, protocolos e resultados úteis) são preservados dentro do orçamento. - Se o provider ainda rejeitar por limite de contexto, `_invoke_llm_cached()` executa uma única segunda tentativa com orçamento emergencial de mensagens. - Não há loop de retries; qualquer outra exceção continua propagando normalmente. ## Invariantes 1. Estado operacional completo != contexto de prompt. 2. Compactação não altera a execução das tools/workflows. 3. Context-limit error recebe no máximo um retry compactado. 4. A correção é genérica e não contém regra específica do Contas/TIM.