Перейти к содержанию

История изменений

Здесь документируются все заметные изменения. Формат основан на Keep a Changelog, а проект придерживается Semantic Versioning.


Unreleased

Изменения в main, которые ещё не вошли в тегированный релиз.


1.3.1 - 2026-05-19

Исправлено

  • Экспорт по регулярному выражению больше не ограничен 100 000 записями; заменён курсорной пагинацией для полного экспорта больших объёмов.
  • Интерфейс больше не зависает при поиске по истории с помощью регулярных выражений; сканирование перенесено в фоновый поток.
  • Расчёт месячных временных диапазонов больше не смещается при переходе на летнее/зимнее время (DST).
  • Фильтр скрытых доменов теперь корректно экранирует символы подстановки LIKE в именах доменов.
  • Подсчёт записей по префиксам URL больше не дублирует перекрывающиеся префиксы.
  • Ошибки очистки WebDAV теперь сообщаются, а не игнорируются молча; метка времени манифеста выровнена по времени загрузки.
  • HTML-экспорт теперь вызывает ошибку при отсутствии маркера инъекции в шаблоне вместо создания повреждённого файла.
  • Сохранение конфигурации при завершении работы подавлено для предотвращения повреждений; неудачные операции продвижения конфигурации теперь корректно откатываются.
  • Исправлена ротация резервных копий конфигурации; добавлена защита от ложных срабатываний при обнаружении миграции.
  • Загрузка данных значков теперь корректно обрабатывает ошибки базы данных без аварийного завершения.
  • Поток резервного копирования экстрактора больше не блокирует неявно основной процесс при завершении работы.
  • Устранена потенциальная взаимная блокировка при экспорте базы данных без FTS.

Сборка

  • Исправлен скрытый импорт WebDAV в spec-файле PyInstaller с webdav4 на webdav3, устраняя ошибки отсутствующего модуля в пакетных сборках.

1.3.0 - 2026-05-14

Добавлено

  • Тема по умолчанию изменена с Dark на System, поэтому приложение сразу следует внешнему виду ОС.
  • Предпросмотр количества записей в диалогах управления чёрным списком и скрытыми доменами, чтобы заранее видеть эффект перед подтверждением.
  • Отдельная история недавних поисков для режима regex, чтобы рабочие сценарии расширенного поиска оставались чище.
  • Переработанная иконка приложения с анимированным SVG-рендерером в трее вместо статических ресурсов.
  • Многоязычный сайт документации на MkDocs.

Исправлено

  • FTS-триггеры, которые могли тихо теряться после сбоя процесса, теперь восстанавливаются перед всеми путями записи истории.
  • Поисковые токены title: и url: больше не перезаписывают друг друга; многословные запросы по полям теперь корректно разбиваются на AND-термы.
  • Скрытые домены теперь корректно фильтруются в быстром поиске overlay.
  • Исправлено граничное условие времени в инкрементальном извлечении Safari.
  • Удалён неверный фильтр путей в browser scanner, который исключал нестандартные установки.
  • Теперь шифртекст пароля WebDAV сохраняется, даже если расшифровка не удалась при загрузке конфигурации.
  • Одноэкземплярный запуск теперь безопасно переключается на fallback, если не удаётся записать token-файл.
  • Исторические записи теперь корректно мигрируются при принятии прежнего device identity.
  • Сигнал sync_progress теперь защищён от аргументов неверного типа, отправленных из рабочего потока.
  • Восстановлен показ прогресса синхронизации в реальном времени; жизненный цикл QThread-обёртки усилен против сбоев destroyed-while-running.
  • Исправлен жизненный цикл потока резервного копирования, а исключения авто-бэкапа теперь изолированы от потока синхронизации.
  • Устранены гонки при межпоточной отправке сигналов и проблемы жизненного цикла QThread во время синхронизации.
  • FTS-триггеры теперь восстанавливаются сразу после исключения upsert, чтобы закрыть окно записи.
  • _ro_lock теперь удерживается на обоих этапах запроса в get_records, что устраняет гонку соединения.
  • Манифест WebDAV sync теперь загружается до очистки старых бэкапов, чтобы после сбоя не оставался устаревший манифест.
  • Записи в кэш доменов теперь защищены блокировкой для предотвращения TOCTOU-гонки.
  • Устаревший page cache теперь вытесняется в regex-пути load-more, чтобы предотвратить пустые строки.
  • Устранено мерцание диалога в левом верхнем углу при первом открытии.
  • Размер шрифта автодополнения теперь ограничивается допустимым диапазоном в Linux.
  • Предотвращена минимизация в трей, если системный трей недоступен.

Производительность

  • O(N) очистка vt_cache заменена на LRU-вытеснение на уровне страниц.
  • Блокировка записи теперь освобождается перед VACUUM INTO в export_without_fts.
  • Общий реестр и наборы фильтров в extractor manager теперь защищены блокировкой для предотвращения гонок данных.

Сборка

  • Добавлен fallback Qt platform для Linux; зависимости xcb теперь пакуются для запуска из коробки.
  • Добавлены подробные правила .gitattributes для окончаний строк и бинарных файлов.

1.2.2 - 2026-04-29

Исправлено

  • Команда CLI restore всегда восстанавливала последний бэкап вместо выбранного пользователем.
  • Команда CLI restore не учитывала флаг восстановления favicon.
  • CLI restore --replace использовал небезопасную замену базы данных.
  • Вводные таймеры планировщика не отменялись, из-за чего после перепланирования срабатывали устаревшие callbacks.
  • Исправлено использование API размера терминала, что восстановило форматирование вывода во всех CLI-командах.

1.2.1 - 2026-04-23

Добавлено

  • Кнопка «Найти в истории» на карточках закладок для быстрого перехода.
  • Нажатие на область тега или заметки на карточке закладки теперь сразу открывает редактор.

Исправлено

  • Устранены конфликты глобальных сочетаний Ctrl+F / Ctrl+R; теперь они надёжно работают в представлении истории.
  • Счётчики посещений на разделителях дат теперь учитывают текущие фильтры и режим просмотра скрытых записей.

1.2.0 - 2026-04-23

Добавлено

  • 14 настраиваемых глобальных и внутриприкладных сочетаний клавиш с отдельной панелью настроек.
  • Режим просмотра Hidden Records: отдельное представление для мягко скрытых записей.
  • Мягкое скрытие домена: возможность скрыть все записи домена без удаления, с отдельным интерфейсом управления.
  • Портативный режим: автоматическое обнаружение файла-маркера .portable в корне приложения и перенаправление всех данных в подкаталог data/.
  • Пункт «Search the Web» в overlay быстрого доступа и в выпадающем списке автодополнения, с настраиваемыми пресетами поисковых систем.
  • Настройка запуска «Стартовать свёрнутым в трей».
  • Режим ленивой минимизации в трей: окно и подсистемы откладываются до первого открытия.
  • Разделители дат теперь восстанавливаются после переключения видимости или перестановки столбцов.
  • Отслеживание системного режима Dark/Light в реальном времени.

Изменено

  • Загрузки WebDAV переведены с chunked на atomic streamed, что заметно повысило надёжность и устранило утечки временных файловых дескрипторов в Windows.
  • В headless-режиме теперь пропускаются GUI-подсистемы и используется меньший кэш SQLite, что снижает потребление памяти в фоне.
  • Вытеснение кэша доменов и иконок изменено с полного clear() на FIFO popitem(), что устранило периодические всплески очистки.
  • Переключатели видимости столбцов перенесены в подменю для более чистой панели инструментов.

Исправлено

  • Несогласованности WAL при чтении после записи устранены за счёт унификации порядка блокировок жизненного цикла соединений.
  • Исправлен сбой VACUUM, вызванный prune_tombstones во время _vacuuming=True.
  • Tombstone-записи теперь очищаются во время VACUUM, чтобы предотвратить неограниченный рост таблицы.
  • Исправлены рывки прокрутки после удаления/скрытия/показа; позиция прокрутки теперь сохраняется вместо прыжка наверх.
  • Длинные заголовки больше не выталкивают кнопки действий за пределы экрана в карточках настроек.
  • Устранён ложный горизонтальный скроллбар после смены темы.
  • Чтение закладок и аннотаций теперь сразу видит свежие данные после записи; проблема устаревшего WAL snapshot устранена.
  • Windows Junction больше не обходятся при BFS-сканировании браузеров.
  • Интервал QTimer теперь ограничивается INT32_MAX, чтобы избежать переполнения целого на очень больших интервалах.
  • BrowserMonitor теперь корректно завершается при выходе из приложения.
  • Многословные CLI-запросы поиска теперь принимаются без кавычек.
  • Длинный табличный вывод в CLI теперь обрезается с многоточием, чтобы не выходить за пределы строки.
  • Ошибки encrypt_text теперь пробрасываются наружу вместо молчаливой потери пароля WebDAV.
  • get_bookmarked_urls теперь использует DISTINCT, чтобы исключить дубли URL в результатах.

Производительность

  • Двухшаговая keyset pagination в get_records устраняет O(N) offset scan на больших историях.
  • Пагинация regex-поиска перенесена на уровень SQL, что устранило полный O(N)-скан таблицы.
  • Уменьшены лаги быстрой прокрутки за счёт оптимизации горячих путей paint, data(), разбора URL и eventFilter.
  • DashboardPage теперь пропускает обновления статуса браузеров, когда окно скрыто.

Безопасность

  • Шифрование обновлено до формата V2 с независимыми HKDF-подключами для шифрования и аутентификации.
  • Для защиты от replay-атак в IPC одноэкземплярного режима добавлена аутентификация на основе nonce.
  • Исправлена XSS-уязвимость в HTML-экспорте: SVG-иконки теперь очищаются перед встраиванием.
  • Таймаут неактивности master password теперь использует time.time(), чтобы корректно считать время во время сна системы.
  • Закрыты лазейки обхода master password и исправлен устаревший UI сессии.

Сборка

  • Добавлен standalone-артефакт tar.gz для macOS.
  • Добавлены portable ZIP и setup installer для Windows.
  • В CI теперь кэшируется standalone Python runtime для Windows, что сокращает время сборки.

1.1.1 - 2026-04-12

Исправлено

  • Исправлен вертикальный дрейф overlay (Ctrl+Shift+H) при повторном открытии.
  • Исправлено случайное появление горизонтального скроллбара в таблице истории.
  • Исправлено отсутствие обновления страницы закладок после изменений из страницы History.
  • Исправлено, что метка времени bookmarked_at не обновлялась при конфликте.
  • Исправлена потенциальная гонка при инициализации клиента WebDAV.
  • Исправлены устаревшие попадания фильтра из-за неочищенного _excl_cache после сброса соединения.

Производительность

  • Запросы истории и загрузка бейджей закладок/аннотаций перенесены в фоновый поток, чтобы не блокировать UI.
  • Отображаемый домен теперь определяется через JOIN с таблицей domains, а не через разбор URL для каждой строки в пути рендера.
  • Удалён лишний второй VACUUM из export_without_fts.
  • Подзапрос NOT IN для hidden_records заменён на более эффективную коррелированную проверку NOT EXISTS.

1.1.0 - 2026-04-11

Добавлено

  • Глобальный overlay быстрого поиска в стиле Spotlight (Ctrl+Shift+H): мгновенный поиск по истории, закладкам и аннотациям из любого приложения.
  • Расширенный синтаксис поиска: domain:, after:, before:, title:, url:, browser:, device:, is:bookmarked, has:note, tag:.
  • Встроенное ghost-text автодополнение и выпадающие подсказки с fuzzy matching в строке поиска.
  • Страница статистики с годовой heatmap в стиле GitHub, круговой диаграммой использования браузеров, 24-часовой гистограммой активности и экспортом изображения высокого разрешения в один клик.
  • Система закладок и аннотаций: помечайте URL тегами и добавляйте rich-text заметки для своей личной базы знаний.
  • Headless CLI hsync с командами sync, backup, search, export, restore, config, db и watch-режимом.
  • Shell completion для hsync через argcomplete для Bash, Zsh и Fish.
  • Управление identity устройства: переименование устройств, удаление устаревших и принятие прежнего identity после переустановки ОС.
  • Восстановление WebDAV теперь сливает данные с локальной базой вместо разрушительной замены.
  • Нативный drag-and-drop экспорт URL из таблицы истории (Alt+перетаскивание или перетаскивание favicon) на рабочий стол или в редакторы.
  • Всплывающий scroll time bubble: показывает дату, ведущий домен и шкалу плотности активности при перетаскивании скроллбара.
  • Добавлена нативная поддержка QQ Browser, Sogou, Twinkstar, CentBrowser, 2345 Explorer, Liebao, UC Browser (Desktop), Quark.
  • Добавлена поддержка форков Firefox: Waterfox, LibreWolf, Pale Moon, Basilisk, SeaMonkey.
  • Добавлена поддержка каналов Canary/Dev/Beta для Chrome, Edge и Brave.
  • Добавлено BFS deep scan для автоматического обнаружения portable и нестандартных установок браузеров.
  • Добавлена анимация fade-in/fade-out для overlay.
  • Переработан мастер первого запуска для более простой начальной настройки.
  • Добавлен мастер миграции для без потерь из установок v1.0.x.
  • Добавлено контекстное меню скроллбара для режимов отображения time bubble.
  • Добавлена инерционная плавная анимация scroll time bubble.

Исправлено

  • Устранены проблемы блокировки файлов при WebDAV-бэкапе в Windows.
  • Исправлен прыжок позиции скроллбара при переключении темы Dark/Light.
  • Многословные FTS-запросы теперь используют семантику AND для более точной выдачи.
  • UPDATE в normalize_domains теперь выполняется пакетами по 5000 строк, чтобы избежать долгих write lock.
  • Скрытые записи исключены из аналитической статистики и быстрого поиска overlay.
  • _ensure_conn теперь защищён флагом _vacuuming, чтобы предотвратить конкурентный доступ во время VACUUM.

Производительность

  • Извлечение SQLite переписано с пакетными вставками и предкомпилированными regex, что снизило потребление памяти и повысило скорость.
  • Рендер favicon оптимизирован с помощью LRU-кэша и перекраски SVG, что устранило подвисания при быстрой прокрутке.
  • Начальная загрузка страницы истории теперь использует постепенную инициализацию, сокращая время до первого отображения.

1.0.0 - 2026-03-24

Первый стабильный релиз.

Добавлено

  • Агрегация истории браузера из Chromium-браузеров, Firefox-браузеров и Safari, включая Chrome, Edge, Brave, Opera, Vivaldi, Arc и другие.
  • Локальная база SQLite с полнотекстовым поиском FTS5 на trigram tokenizer для поиска подстрок с задержкой в миллисекунды.
  • Облачный WebDAV-бэкап и восстановление с ZIP-сжатием и SHA-256 проверкой целостности.
  • Поддержка нескольких браузеров и профилей с WAL-safe копированием базы данных.
  • Виртуальная прокрутка для плавной навигации по спискам истории на миллионы записей.
  • Интеграция с системным треем и уведомлениями о статусе синхронизации.
  • Шифрование WebDAV-учётных данных master password через HKDF-SHA256 с интеграцией системного keyring.
  • Пакеты для Windows и macOS.