0.89.0

Changed

  • Двухзонная схема контекста истории — вместо многоуровневой системы (120 → cut to 30 → prune by tokens → compact in-loop → async compact) реализована простая двухзонная схема: старые сообщения суммаризируются через LLM (с кэшем в БД), свежие передаются как есть. Настройки: history_window (default 50) и history_verbatim (default 10).
  • Summary кэшируется в БД — summary хранится как сообщение с role='summary' и полем summary_up_to_msg_id. Пересуммаризация происходит каждые history_verbatim новых сообщений, не на каждый запрос.
  • Убраны pruneHistoryByTokens и CompactHardThreshold — история больше не режется по токен-бюджету. Модель сама определяет контекстное окно.

Removed

  • history_message_limit (default 30) — заменён на history_window (default 50).
  • In-loop compact (maybeInLoopCompact) — удалён.
  • Async compact (maybeAsyncCompact) — удалён.
  • compactInMemory — заменён на emergencyCompact (только для overflow-ошибок от LLM).

Added

  • Токены контекста в чате — WebUI показывает «Контекст: 4,200 / 128,000 токенов» под полем ввода. Данные приходят через WebSocket turn_end событие.
  • Миграция 047: колонка summary_up_to_msg_id в таблице messages.
  • Store-методы GetLatestSummary и DeleteSummaryBefore для работы с кэшем summary.