0.58.6

Fixed

  • Root cause fix: pruneHistoryByTokens теперь принудительно сохраняет последнее user-сообщение: если бюджет полностью занят tool-группами и user-сообщение остаётся выше точки разреза, оно добавляется в начало результата. Это устраняет первопричину необходимости в синтетическом плейсхолдере для большинства реальных сценариев
  • Понятные плейсхолдеры вместо "...": CompactPlaceholderContent и SanitizePlaceholderUserContent теперь содержат явный текст-маркер, чтобы агент понимал что это автоматически добавленный технический маркер, а не реальное сообщение пользователя (устраняет UX-проблему «вижу пустое сообщение ...»)

Changed

  • Diagnostic logging оптимизирован: «in-loop compact result» переведён на DEBUG-уровень (для production не загромождает логи), buildParams suspicious переименован в invalid и срабатывает только на реально невалидные структуры (не на легитимные one-shot user-вызовы)
  • Удалён избыточный лог «openai compat error — dumping messages» — структура дампится в buildParams invalid message structure при обнаружении проблем

Added

  • Тесты: TestPruneHistoryByTokens_PreservesLastUserWhenBudgetFullOfToolGroups, TestPruneHistoryByTokens_NoUserInHistory, TestCompactInMemory_RealLogScenario, TestCompactInMemory_OnlyToolGroupsHistory — покрывают точный сценарий из production-логов