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-логов