0.58.4

Fixed

  • compactInMemory fallback: tool-сообщение вместо user: когда pruneHistoryByTokens не может вместить ничего в budget, fallback брал последнее сообщение из rest — это мог быть tool без родительского assistant. Теперь fallback ищет последнее user-сообщение или создаёт синтетическое
  • ensureHasUser вызывался до removeOrphanedToolMessages: orphan removal удалял tool-сообщения, после которых не оставалось user — но check уже прошёл. Теперь ensureHasUser вызывается последним в SanitizeMessages