0.54.0

Added

  • Token estimation (internal/agent/token_estimator.go) — функция EstimateTokens для оценки токенов в []Message и []providers.Message с учётом tool_calls, tool_call_id, tool_name. Константы DefaultContextWindow (128k), CompactSoftThreshold (0.70), CompactHardThreshold (0.85), ContextSafetyReserve (4096). ResolveContextWindow — таблица context window для 25+ моделей (GPT-4o, Claude, Llama, Mistral, DeepSeek и др.).
  • In-loop compact — проверка токенного бюджета перед каждой итерацией agent loop (runner.go). При превышении 85% порога — автоматический in-memory compact через pruneHistoryByTokens. После завершения turn — async DB-level compact через SessionCompactor, если токены превысили soft threshold (70%).
  • Emergency compact (internal/providers/error_classify.go) — классификация ошибок провайдера IsContextOverflowError. Распознаёт ошибки OpenAI, Anthropic, Ollama по 10 паттернам (context_length_exceeded, prompt is too long, token limit и др.). При context overflow — compact + retry (максимум 1 попытка). Логирование каждого шага.
  • CompactFn в AgentRunSpec — callback для in-memory compact, замыкание создаётся в actor через makeInMemoryCompactFn. Позволяет runner работать без прямых зависимостей от store/memory.

Changed

  • pruneHistoryByTokens в context.go использует estimateMessageTokens вместо прямого tokens.Count() для более точной оценки (учёт tool_calls, tool_call_id).