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