0.134.88

Fixed

  • Symlink path traversal в LoadEntryBody: filepath.EvalSymlinks + повторная проверка isUnder(baseDir) для защиты от символьных ссылок, выходящих за пределы каталога логов.
  • FD leak при ошибке записи: при ошибке f.Write файловый дескриптор корректно закрывается и удаляется из внутренних мап Logger.
  • SessionID *int64: тип изменён с int64 на *int64 для корректной обработки SQL NULL в nullable-колонке session_id.
  • Dangling FK REFERENCES sessions(id): миграция 082 убирает FK на несуществующую таблицу sessions (удалена в миграции 049). Первичные миграции 079 (SQLite + PostgreSQL) также исправлены — fresh install больше не ломается.
  • Кнопка «Повторить» в WebUI LLM-логов: заменена toggleExpand на loadDetail с capture idx через @const, корректный рефетч при ошибке.
  • Race condition в SetStore: запись l.store теперь защищена мьютексом l.mu.
  • context.Background()r.Context(): GetEntry и ListEntries принимают context.Context, handler передаёт контекст запроса для корректной отмены при отключении клиента.
  • LastInsertId в SQLite: AddLLMRequestLog теперь записывает сгенерированный ID в entry.ID через res.LastInsertId().
  • normalizeDateFilter с ошибкой: возвращает (string, error) вместо молчаливого возврата невалидной строки; невалидные даты — 400 вместо пустого ответа.
  • Форматирование allowedPurgeTables: выравнивание пробелов.

Changed

  • Константы: maxLimitmaxLogListLimit в SQLite и PostgreSQL; pgLLMRequestLogCols — общая константа для списка колонок в PostgreSQL.
  • RETURNING id: AddLLMRequestLog в PostgreSQL возвращает ID через QueryRow.Scan вместо Exec.
  • Doc comments: ~25 godoc-комментариев на экспортируемые типы и методы в logger.go, dual.go, handler/llmlog.go.

Added

  • TypeScript типы: LLMLogStatus = 'success' | 'error', LLMUsage, LLMLogDetail extends LLMLogEntry, error_message: string | null, session_id: number | null.
  • Тесты LLM Request Log (llm_request_log_test.go): 8 тестов — Add+Get (с SessionID, nil SessionID), NotFound, List по AgentID, Limit cap, Date filter, Purge, Purge keeps newer.
  • Миграция 082: пересоздание таблицы llm_request_log без dangling FK (SQLite + PostgreSQL).