Что нового

История обновлений ChatGoose

1.9.9 Текущая

Панель действий на широких окнах: Recap больше не висит посреди пустоты.

Исправлено
  • Recap и чип персоны — единый правый блок. Право-прижатие случайно несли два элемента сразу, и на широком композере свободное место делилось пополам: Recap повисал между двумя провалами. Теперь слева действия, справа блок «про фана» (Recap · персона); на узких окнах вид не меняется
1.9.8

Ошибки AI-генерации теперь называют настоящую причину вместо безликого «Agency Hub request failed».

Диагностика ошибок
  • Новая ошибка CG-HUB-10. Если Hub не достучался до AI-провайдера (например, умер прокси страницы), карточка прямо говорит: инфраструктура этой страницы, сообщите менеджеру — повторные попытки не помогут
  • Техническая строка в карточке и тосте. HTTP-статус и ответ сервера видны прямо в ошибке — скриншот сразу объясняет поддержке, что случилось, без debug-режима
  • Причина с сервера не теряется. Терминальный error-кадр стрима теперь читается; раньше любая ошибка провайдера выглядела как «оборванный стрим» (CG-HUB-07)
1.9.7

Глобальными персонами теперь управляет Agency Hub: расширение читает серверный каталог, хранит привязки аккаунтов и страхует старые локальные тексты.

Изменилось поведение
  • Локальный CRUD убран. Model Personalities показывает read-only каталог; глобальные персоны создаёт и редактирует администратор Agency Hub
  • Никаких автоперезаписей Core. Локальный prompt не отправляется на сервер; при одинаковом ключе исполняется серверная версия
  • Привязки не теряются. Отсутствующая или архивная персона остаётся unavailable, но не может генерировать до ручного импорта или новой привязки
  • После автообновления перезагрузите открытые Fansly и Settings вкладки, чтобы все контексты работали со схемой v14
Миграция без потери текста
  • Write-once snapshot. До первой записи v14 исходные локальные персоны, mappings и aliases сохраняются отдельно, без Hub credentials, и больше не перезаписываются
  • Экспорт в Settings. Download legacy persona JSON и Copy legacy persona JSON выгружают snapshot и текущие привязки для ручного импорта; экспорт нужно сделать до удаления расширения или очистки browser storage
  • Fail closed. Повреждённый snapshot или неизвестная более новая схема блокируют обычные записи и новые сетевые запросы, но оставляют recovery-экспорт
Надёжность
  • Каталог привязан к конкретному Hub и credential; поздний ответ от старого источника не может вернуть устаревшие персоны
  • Точный opaque definitionId входит в generation/cache identity, поэтому после админской правки не переиспользуется кэш от другого prompt
  • Фоновое обновление неизменившегося каталога не пишет его заново и не закрывает открытую доску Spenders
  • Release gate не подпишет XPI, пока production Core не покажет совпадающий contractHash и защищённый persona-catalog route
1.9.6

Spenders показывает до 1000 платящих и устойчиво переживает частичные сбои, обновления и быстрый поиск.

Исправлено
  • Без ложных нулей и NEW. Неполная или недоступная месячная выборка теперь считается неизвестной, а не нулевой
  • Честные состояния. Выключенный источник, неразрешённая страница, ещё не готовая проекция, пустой результат и ошибка больше не смешиваются
  • Необязательные данные деградируют отдельно. Таймаут имён или временный сбой карты чатов не скрывает рейтинг
  • TTL и гонки исправлены. Старый запрос после Refresh или close/reopen не может перезаписать более свежий результат
Изменено
  • До 1000 строк. С обновлённым Core доска забирает до 1000 spenders одним согласованным bounded read; старый Core получает точный fallback на 500
  • Честный scope. Заголовок, поиск и tier-счётчики явно относятся к загруженному top-N, если база больше лимита
  • Честные суммы и свежесть. Пограничное округление не маскирует tier, а время описывает самую новую Hub-проекцию, не общий снимок всех строк
  • Точная подпись чата. Интерфейс говорит, что чат не найден в загруженной недавней выборке, а не заявляет об отсутствии общения
Быстрее
  • Поиск и tier-фильтры переиспользуют оболочку и строки; один delegated listener заменяет сотни row handlers
  • J/K обновляет только две строки, off-screen paint пропускается, close полностью освобождает detached DOM и таймеры
  • Firefox-профиль на 1000 строк не нашёл синхронных операций длиннее 50 мс, поэтому виртуализация пока не нужна
1.9.5

В режиме отладки видно настоящий промпт, который сервер отправил ИИ.

Добавлено
  • Отладка показывает реальный промпт. Раньше в панели «LLM Input» на месте системного и финального промпта стояли заглушки «assembled kernel-side». Теперь при включённом режиме отладки расширение просит у сервера точный собранный промпт (персона, шаблоны, досье фана) и открывает его на отдельной странице расширения. Работает, только пока владелец держит открытым временное окно доступа на сервере
  • Промпт не попадает на страницу Fansly. В оверлей уходит только сводка (счётчики досье, версия, что отброшено) и одноразовый токен; полный текст живёт в памяти расширения и показывается на своей странице расширения
1.9.4

Панель действий больше не съезжает при выборе тона.

Исправлено
  • Тон не расширяет панель. Выбранный 😌/😏/💰/🔥 теперь отмечается фоном и рамкой, но остаётся той же ширины, что и невыбранный. Раньше подпись Casual/Flirt/Sell/Spice сдвигала ряд и обрезала персону LoRA на узком чате
  • Подсказки сохранены. Полное название и русское описание тона по-прежнему доступны при наведении и для экранных дикторов; поведение Reply и ⌘⇧O не менялось
1.9.3

Первое открытие доски показывает прогресс, а имена перестали перезагружаться после перезапуска браузера.

Изменено
  • Прогресс при первой сборке. Пока доска строится, видно, что происходит: сначала загрузка рейтинга, потом «Resolving fan names — 250 of 500…» с полоской прогресса. Раньше это было немое «Building the board…»
  • Имена переживают перезапуск браузера. Кэш имён переехал в постоянное хранилище (6 часов): раньше после закрытия браузера расширение заново выкачивало все имена, теперь — только новых фанов
1.9.2

Доска больше не зависает на «Building the board…».

Исправлено
  • Загрузка имён не блокирует доску. В 1.9.1 подгрузка кастомных имён могла застрять на повторных запросах при рейт-лимите Fansly. Теперь у имён жёсткий лимит времени: что успели получить — показываем, остальное остаётся платформенными именами
  • Имена кэшируются на 6 часов. Повторные открытия доски и Refresh больше не перезагружают имена — подгружаются только новые фаны
1.9.1

Доска Spenders называет фанов вашими именами.

Изменено
  • Кастомные имена на доске. Строки доски теперь подписаны именами, которые вы дали фанам на Fansly («Max/Canada», «Nick/Germany»…) — как в инбоксе. Имя чаттера главное, @хендл остаётся под ним. Поиск по доске находит и эти имена
  • Числовые строки получили имена. Фаны, которых рейтинг знал только по id (строка с «?» вместо аватара), теперь подписаны своим платформенным именем
1.9.0

Панель действий пересобрана — тоны стали переключателями с эмодзи, Split не слетает при регенерации; доска Spenders видит всех китов ядра, месячный приток и поиск.

Изменилось поведение
  • Тоны больше не стреляют сразу. Клик по тону только армирует его для следующего Reply (повторный клик — снимает); запускает генерацию только кнопка Reply. Тонированный ответ — два клика: тон → Reply
Панель действий
  • Тоны — эмодзи-переключатели в жёлобе у Reply. 😌 Casual · 😏 Flirt · 💰 Sell · 🔥 Spice — тон выбирается один, армированный подсвечивается и подписывается словом, наведение показывает описание по-русски. Casual вернулся на панель и в цикл ⌘⇧O
  • Split вместо Multi — и он больше не слетает. Переключатель с квадратной точкой: включён — ответы идут серией, пока не выключишь сам. Раньше режим молча сбрасывался после каждой генерации, и Regenerate терял разбивку; теперь реген повторяет и режим, и тон исходного запроса
  • Сплит надёжнее. Маркер разбивки распознаётся в любом написании ([next], [ NEXT ] — раньше склеивались в одно сообщение), а ядро после ближайшего обновления хаба будет обязано вернуть 2–3 сообщения при включённом Split
  • Переименования. Polish → Fix, Scan → Recap, Multi → Split — панель, оверлей и шпаргалка «?» теперь называют фичи одинаково
  • Панель сгруппирована по смыслу. Reply со своими опциями │ Fix │ Hi · Ping │ справа — Recap и персона
Доска Spenders
  • Видны все спендеры ядра. Раньше кит, не писавший последние 150 чатов, молча выпадал из рейтинга. Теперь в списке все (до 500); у фанов без недавнего чата — пометка «no recent chat», при открытии расширение само находит чат через поиск инбокса
  • Месячный приток и бейдж NEW. Зелёное «+$N» под лайфтаймом — сколько фан принёс в этом месяце; NEW — у тех, чья первая трата случилась в этом месяце
  • Поиск по доске. «/» фокусирует поле, ввод фильтрует по имени и хендлу
  • Честная свежесть. Шапка различает «data as of …» (свежесть данных ядра) и «fetched …» (когда список получен); Refresh забирает последний снапшот хаба
  • Чат открывается без перезагрузки страницы. Enter по строке переключает роут внутри Fansly; если роутер не отреагировал — обычная полная загрузка, как раньше
  • Доска не пересобирается после простоя. Кэш переживает рестарт фонового процесса
1.8.3

Scan читается как досье, а не как простыня сырого текста.

Изменено
  • Scan отформатирован. Ядро отдаёт досье фаната в маркдауне, а панель показывала его сырым — с решётками и дефисами. Теперь заголовки секций, жирные поля («Имя:», «Возраст:»), списки и цитаты рендерятся по-настоящему: секции видно при беглом скролле, нужное поле находится сразу
1.8.2

Панель кнопок больше не дёргается при старте генерации.

Исправлено
  • Тулбар не съезжает при генерации. Спиннер загрузки вставлялся в кнопку рядом с текстом и расширял её — весь ряд прыгал вправо. Теперь спиннер рисуется поверх приглушённого текста кнопки: ширина не меняется, ряд стоит на месте
1.8.1

Кастомные личности работают с ядром, борд честен про невключённые рейтинги, токен устройства не теряется, длинные чаты не роняют генерацию.

Исправлено
  • Кастомные личности заработали. Добавленная в настройках личность раньше существовала только локально — ядро её не знало, и генерация падала с невнятной ошибкой. Теперь личности синхронизируются с ядром: сохранение обновляет, удаление архивирует, при старте досинхронизируется всё созданное раньше
  • Токен устройства больше не теряется. Открытая вкладка настроек могла молча затереть свежевыданный токен отложенным сохранением — креды переехали в отдельные ячейки хранилища (схема v13)
  • Свежий Fan Summary снова кэшируется. Устаревшая проверка модели не пускала результат генерации в кэш — каждый повтор генерировал заново
  • Очень длинные чаты не роняют генерацию. Транскрипт обрезается до лимита ядра (300 тыс. символов), старые сообщения отбрасываются первыми
Изменено
  • Борд честен про пустоту. Если рейтинги трат для страницы ещё не включены на стороне ядра, борд говорит именно это — вместо ложного «No paying fans… updated just now» — и оживает сразу после включения
  • Встроенная личность Lora — только для чтения. Локальные правки встроенной личности молча игнорировались при генерации — карточка честно закрыта; кастомные личности редактируются и синхронизируются
1.8.0

Новый фирменный вид со светлой и тёмной темой, вставка ответа кликом и индикатор дневного лимита ИИ.

Изменено
  • Новый вид. Расширение переехало на общий стиль инструментов агентства: тёплая палитра с терракотовым акцентом, ответы ИИ — серифом в терракотовой рамке, деньги — моноширинным зелёным. Панель в чате, борд, тосты, попап и настройки — всё в одном языке
  • Светлая и тёмная тема. В настройках появился выбор: System (по умолчанию, следует за ОС), Light, Dark — действует на все поверхности расширения
  • Вставка кликом. Клик по тексту черновика вставляет его в поле ответа (кнопка Insert осталась); выделение текста мышью вставку не вызывает. При генерации по тексту бежит терракотовая каретка
  • Лимит ИИ виден заранее. Попап показывает, сколько генераций осталось на сегодня: тихий счётчик → янтарный при ≤20 → красный, когда лимит исчерпан (сброс в полночь UTC)
Технически
  • Настройки: схема v12 (uiTheme); тёмная тема — чистый свап CSS-токенов под одним классом
  • Снапшот квоты из meta-фрейма ядра сохраняется вместо выбрасывания; попап отдаёт свежайший за текущий UTC-день
  • Инъекция стилей не трогает color-scheme хост-страницы; анимации уважают prefers-reduced-motion
1.7.1

Честные ошибки: дневной лимит ИИ и проблемы соединения с хабом теперь называют себя по имени.

Изменено
  • Дневной лимит ИИ — своя карточка. Когда страница выбирает дневную квоту генераций агентства, расширение больше не пишет «лимит запросов — попробуйте чуть позже»: новая ошибка CG-HUB-09 честно говорит, что лимит на сегодня исчерпан и сбросится в полночь UTC
  • Ошибки соединения с хабом диагностируют себя сами. В настройках видно HTTP-статус и ответ сервера («Hub responded 401: …»), текст ошибки называет, какой именно credential отклонён (токен устройства или общий ключ), а каждый неудачный запрос к хабу пишется в консоль фона с именем операции
Технически
  • Продуктовые гейты ядра (мало сообщений, лимит Hi, пинг активному фану, нужен черновик) маппятся по машинным кодам ядра (gate_*), а не по тексту сообщений; текстовый матчинг остался фолбэком для старых ядер
1.7.0

Починен вход по логину и дочищен легаси-код борда.

Исправлено
  • Вход по логину заработал. В 1.6.0 кнопка «Войти» в настройках молча не работала (сообщение не доходило до обработчика). Теперь устройство честно получает свой токен
Изменено
  • Токен устройства — везде. Проверка соединения, профили фанов и телеметрия теперь тоже предпочитают токен устройства; общий API-ключ остаётся запасным входом ещё на один релиз
  • Легаси-пересборка борда удалена. Скрытый флаг spendersLegacyRebuild и старый путь «~150 запросов к Fansly» вырезаны — рейтинг только из ядра
1.6.0 Веха

Переезд на ядро агентства. ChatGoose перестал быть одиноким расширением со своими ключами и промптами в кармане — теперь это клиент ядра агентства (Agency Hub): общего сервера, где живёт весь интеллект — промпты, персоналии, модели, лимиты и деньги. На той же платформе работает десктопный ChatGoose для OnlyFans. Два клиента — один мозг.

Что это дало
  • Ключи вендоров ушли с машин чаттеров. Расширение не знает ни одного ключа Anthropic/OpenRouter — разрешения на их домены удалены из манифеста, так что прямой вызов невозможен физически, а не по договорённости. Поля ключей исчезли из настроек, сохранённые значения стёрты
  • Генерация — через ядро. Reply/Polish/Hi/Ping/Scan отправляют на сервер только контекст беседы; промпт собирает ядро и стримит ответ обратно. Улучшение промптов доезжает до всей команды мгновенно — без релиза расширения
  • Личный вход вместо общего ключа. Логин/пароль → собственный токен устройства: доступ выдаётся и отзывается по-устройственно. Общий API-ключ хаба остался запасным входом ещё на релиз
  • Борд топ-спендеров стал мгновенным. Рейтинг — один запрос к готовой проекции ядра с честной отметкой «данные на …» вместо пересборки из ~150 запросов к Fansly при каждом открытии
  • Персоналии живут в ядре — их видят и расширение, и десктоп; привязки аккаунтов остаются локальными
  • Лимиты и учёт — на ядре. Квоты генераций и стоимость считает сервер; клиенту нечего подделывать и не с чем расходиться
Технически
  • Разрешения на api.anthropic.com и openrouter.ai удалены из манифеста
  • Выбор модели и «reasoning» на клиенте убраны — моделями управляет ядро
1.5.6

Финальная правка панели после отката к старой раскладке: кнопки снова выглядят чисто по умолчанию, а подсказки хоткеев появляются только при наведении или фокусе.

Изменено
  • Хоткеи на кнопках — только по наведению. Reply/Polish/Hi/Ping/Scan остаются визуально чистыми, но при hover/focus показывают маленький чип E/F/G/D/S
  • Бар ближе к старому 1.5.0. Один горизонтальный ряд, Multi текстом, Scan в ряду, без Casual как отдельного тона
  • ⌘⇧O теперь описан как цикл Flirty / Upsell / Horny, потому обычный reply — это дефолт, а не отдельный Casual-режим
Технически
  • Хоткей-чипы рендерятся как декоративные .chatgoose-toolbar-hotkey и показываются CSS-ом на :hover/:focus-visible, без изменения ширины кнопок
  • Scan прячет зелёную ready-точку на hover/focus, чтобы она не накладывалась на хоткей-чип
  • Точечные тесты бара/хоткеев/контент-приложения, typecheck и build проходят
1.5.5

Откат бара из 1.5.4 к привычной раскладке 1.5.0. В 1.5.4 Multi стал значком , а Scan уехал в меню — на практике неудобно. Вернули: Multi — текстовой кнопкой, Scan — видимой кнопкой в ряду. Чипы-хоткеи остались.

Изменено
  • Multi — снова текстовой кнопкой-тумблером сразу за Reply (не значок ); включённый режим подсвечен зелёным
  • Scan — снова видимой кнопкой в ряду (не в меню ); зелёная точка «саммари готово» — прямо на кнопке. Меню убрано
  • Тон — пилюли Flirty / Upsell / Horny (как в 1.5.0). Casual убран из бара и из цикла ⌘⇧O, чтобы пилюли и хоткей совпадали
  • Чипы-хоткеи на кнопках (E/F/G/D/S) остались
Технически
  • Удалён код и CSS значка-тумблера и меню ; Scan снова в TOOLBAR_FEATURES с «ready»-точкой, не задевающей чип; порядок cycle-tone выровнен с пилюлями (без casual)
  • 824 теста проходят (4 skipped), typecheck и build чистые; бар проверен на скриншоте по четырём состояниям
1.5.4

Откат направления 1.5.2/1.5.3 по фидбэку: тон убран из кнопки Reply и снова видим — отдельным компактным рядом пилюль. Multi вернулся в ряд, но компактным значком , а не текстовой кнопкой. Scan остался в меню . Бар стал чуть компактнее.

Новое
  • Тон — снова видимым рядом пилюль. Casual/Flirty/Upsell/Horny стоят отдельным рядом после Polish, а не прячутся в меню у Reply. Клик по пилюле сразу генерит ответ в этом тоне (один клик = одна генерация), активная пилюля показывает заряженный тон — в т.ч. выставленный с ⌘⇧O. Каретка и тон-меню убраны
  • Multi — компактным значком . Разбивка на несколько сообщений вернулась в ряд сразу за Reply, но занимает место значка, а не текстовой кнопки: включённый режим подсвечен зелёным. Scan остался в меню — зелёная точка «саммари готово» по-прежнему всплывает на самой
  • Бар компактнее. Кнопки действий чуть ниже и у́же, ряд плотнее
Технически
  • Тон-пилюли идут через прежний путь onToneSelect → startTonedReply, ⌘⇧O листает тот же набор и отражается активной пилюлей. Multiaria-pressed + класс .chatgoose-toolbar-toggle-icon, смысл значка несут aria-label/тултип; меню теперь держит только Scan
  • Удалён мёртвый CSS и код сплит-каретки, тон-меню и пунктов Multi-в-меню; проводка в index.ts (тон, режим ответа, хоткеи) не тронута — изменение только в баре
  • 827 тестов проходят (4 skipped), typecheck и build чистые; тесты бара переписаны под пилюли, значок-тумблер Multi и меню только со Scan
1.5.3

Продолжение чистки бара из 1.5.2 — по фидбэку операторов. Редкие действия Scan и Multi уехали в выпадающее меню у правого края (рядом с именем модели), а смена тона больше не стоит лишнего клика: меню тонов раскрывается по наведению на .

Новое
  • Меню для Scan и Multi. Кнопки Scan (профиль фаната) и Multi (разбивка на несколько сообщений) убраны из ряда в компактное меню у имени модели — бар стал короче. На свёрнутой остаются оба сигнала: зелёная точка = саммари готово, синий акцент = Multi включён
  • Тон по наведению. Меню тонов у Reply раскрывается, когда наводишь на — без отдельного клика «открыть». Навёл → один клик по тону = генерация. Раньше смена тона стоила двух кликов
Технически
  • Меню зеркалит тон-меню (всплывает вверх, выровнено по правому краю — раскрывается влево, за край не вылезает); одновременно открыт только один поповер. S-хоткей Scan работает как прежде
  • Hover-open у каретки: задержка-намерение 110 мс (быстрый проезд к Polish/Hi не мигает меню) и grace 160 мс на закрытие (успеть зайти в поповер через зазор); клик по-прежнему переключает
  • 829 тестов проходят (4 skipped), typecheck и build чистые; добавлено покрытие меню и hover-логики
1.5.2

Точечное улучшение к 1.5.1: бар действий стал компактнее и чище. Тоны ответа (Flirty/Upsell/Horny) переехали из отдельного ряда в выпадающее меню у кнопки Reply — как в десктопной версии, а чипы хоткеев на macOS ужались до буквы. Бар больше не упирается в край узкого диалога.

Новое
  • Тоны в меню у Reply. Каретка рядом с Reply открывает список тонов (Casual/Flirty/Upsell/Horny); клик по тону сразу генерит ответ в нём — один клик, одна генерация (как в десктопе). Отдельный ряд из трёх пилюль убран, бар стал заметно у́же
  • Компактные чипы хоткеев на macOS. На маке чип теперь показывает только букву (E/F/…), как на Windows/Linux — полное ⌘⇧E осталось в подсказке при наведении и шпаргалке ?. Раньше пять полных комбо распирали ряд
Технически
  • Reply — сплит-контрол (тело + каретка ), меню тона всплывает над баром; у тулбара убран скролл-обрез — ряд переносится, а не клипается
  • Клик по тону армирует тон и сразу запускает fast-reply (как в десктопе); ⌘⇧O по-прежнему листает тон. Меню закрывается по клику вне и Esc, каретка отключается во время операции
  • 824 теста (820 проходят, 4 skipped), typecheck и build чистые; тесты бара переписаны под меню
1.5.1

Точечное улучшение к 1.5.0: горячие клавиши теперь видно прямо в интерфейсе, а не только в шпаргалке по ?. На кнопках действий и в футере доски «Спендеры» появились чипы-клавиши с сочетанием, плюс подсказка при наведении.

Новое
  • Чипы хоткеев на кнопках. На кнопках Reply/Polish/Hi/Ping/Scan теперь видно сочетание: на macOS — полное ⌘⇧E, на Windows/Linux — буква (полное комбо в тултипе при наведении). Раньше шорткаты были «скрытыми» — узнать их можно было только через ?
  • Подсказки в доске «Спендеры». В футере доски — настоящие клавиши-чипы J/K/Enter/Esc вместо простого текста
Технически
  • Переиспользуемый кейкап .chatgoose-kbd + хелпер makeKbd() — единый визуал клавиши для бара кнопок, футера доски и шпаргалки ? (один источник, чтобы стиль не расходился)
  • Чипы внутри кнопок декоративные (aria-hidden), сочетание уходит ассистивным технологиям через aria-keyshortcuts — доступное имя кнопки остаётся чистым
  • 824 теста (820 проходят, 4 skipped), typecheck и build чистые; дифф проверен адверсариально (a11y, вёрстка чипов, порядок спиннера)
1.5.0

Первый релиз с новыми фичами после технической серии 1.4.x. Перенесли два удобных решения из десктопной версии ChatGoose: полноценные горячие клавиши для всех AI-действий прямо в диалоге и доску «Спендеры» — рейтинг фанов по сумме трат.

Новое
  • Горячие клавиши. Все AI-действия в открытом диалоге теперь на клавишах: Fast Reply, Polish, Help, Hi, Ping, Scan, Chat Review, переключение тона и отмена. По ? — шпаргалка со всеми сочетаниями
  • Кросс-платформенно. На macOS — ⌘⇧‹буква›, на Windows/Linux — Alt+Shift+‹буква›: Ctrl+Shift+‹буква› на Windows занят самим Firefox и не перехватывается из страницы, а Alt+Shift свободен и работает надёжно
  • «Спендеры» — доска топ-плательщиков. Рейтинг фанов по сумме всех трат, с разбивкой по тирам (🐳 Кит / ⭐ Топ / ✅ Прайм / Базовый / Низкий / Микро). Открытие кнопкой $ или хоткеем; навигация J/K, открытие чата по Enter/клику, фильтр по тирам, «Обновить»
Технически
  • Чистый движок сопоставления клавиш (shared/keymap.ts) + единая таблица биндингов (shared/hotkeys.ts) с платформо-зависимым модификатором; один центральный keydown-listener вместо разрозненных обработчиков
  • Доска собирается в фоне: messaging/groups + earnings/stats/accounts по каждому фану, затем ранжирование; скан ограничен (top-N недавних), низкая конкуренция и кэш 10 минут, чтобы не нагружать Fansly; тиры считаются на клиенте по порогам
  • Новый runtime-запрос getSpendersList; пороги тиров, сборка списка и движок клавиш — чистые функции с тестами
  • 822 теста (818 проходят, 4 skipped), typecheck и build чистые; дифф проверен адверсариально (корректность ранжирования и интеграция хоткеев)
1.4.1

Технический релиз вслед за 1.4.0 на пути к 2.0: код разнесён по модулям с явными границами, на входящих сообщениях добавлена валидация, подключён CI, а кэш Fan Summary стал аккуратнее. Новых фич и изменений в работе кнопок нет.

Главное
  • Fan Summary: битые/нечитаемые записи кэша вычищаются при загрузке, а не копятся в storage
  • При удалении личности убираются все связанные с ней саммари, включая записи, что ссылаются на неё по personalityId (раньше оставались «осиротевшие»)
  • При переполнении квоты storage сначала освобождаются невалидные записи кэша, и только потом самые старые
  • Расширение устойчивее к неожиданным внутренним сообщениям: входящие runtime/port-сообщения проверяются по форме и отбрасываются, если не подходят
  • В README явно описано, какие данные уходят наружу: Agency Hub — строго opt-in, а usage-метрики не содержат текст переписки, промптов, ключей и Fansly-сессии
Технически
  • Новый shared/protocol.ts с type-guard'ами; runtime-api.ts и port-client.ts валидируют сообщения на границе доверия вместо as
  • Жизненный цикл операций вынесен в OperationRegistry, OperationTimeoutController, operation-cleanup, conversation-context-loader
  • Frontend разнесён по границам: surface-planner (inline vs overlay как чистая функция), ui/view-helpers; options/index.ts распилен на agency-hub-settings, dom, sessions
  • Граница storage подчищена: storage-coordinator, migrations, summary-cache (новые хелперы чистки/эвикции кэша)
  • Добавлен CI (.github/workflows/ci.yml) и скрипт npm run check (typecheck + test + build)
  • Юнит-тесты на новые модули; 783 теста всего (779 проходят, 4 skipped), typecheck и build чистые
1.4.0

Большой проход по code review всей кодовой базы, подготовка к 2.0 релизу: устранены утечки, гонки и слабые места в надёжности в background, content и UI. Новых фич нет — только стабильность и корректность.

Главное
  • Rate limit от Fansly (429) обрабатывается корректно: читается Retry-After и показывается понятная ошибка про лимит со временем повтора
  • Переход между диалогами во время Scan / Summary / Review / Help больше не оставляет зависший overlay и не кэширует результат прошлого фана в новом диалоге
  • Клик по фиче в момент переподключения к фону больше не оставляет кнопку в вечной загрузке
  • Кнопки и overlay восстанавливаются, даже если Fansly пересобрал DOM диалога с задержкой
  • Редактирование личности больше не сбрасывает фокус и курсор; удаление не воскрешает личность из-за отложенного сохранения
  • Поле количества сообщений показывает реально сохранённое (обрезанное) значение
  • Одноимённые личности различаются в списке привязок по короткому id
  • Попап не открывается пустым, если фон временно недоступен
  • Реплики со словом «instructions» (например JOI) больше не вырезаются фильтром meta-leak
  • Активная подписка с прошедшей датой окончания не показывается как «заканчивается через N дней»
Технически
  • Устранены неограниченные утечки Set отменённых operation id (feature и compare)
  • LLM-стримы освобождают reader и HTTP-тело на всех путях выхода, включая throw из середины цикла
  • SSE-парсинг устойчив к CRLF; reasoning-колбэки OpenRouter не срабатывают для отклоняемых chunk-ов
  • Классификация ошибок провайдеров не матчит широкие подстроки billing / not found
  • Конкурентные старты операций сериализуются синхронным резервированием вкладки (TOCTOU)
  • Fansly-клиент: итеративные ретраи, Retry-Afterrate_limited, кап пагинации, общая retry-политика
  • Сессии обновляют креды и disconnect in-place, чтобы in-flight пагинация подхватывала релогин
  • Миграция storage гардит personalities / accountMappings; hi-greeting восстановил prompt caching
  • Добавлено 22 regression-теста (745 всего); typecheck и build чистые
1.3.14

Reasoning block теперь не смешивается с prompt debug: LLM Input снова показывает только данные, отправленные в модель.

Главное
  • Reasoning block оставлен только в Pipeline Profiling
  • Нижний LLM Input inspector больше не показывает provider reasoning output
  • Это убирает путаницу между prompt input и reasoning/debug output
Технически
  • Убрано поле reasoning из PromptDebugSnapshot
  • operation:debugPrompt снова содержит только system/transcript/data/user prompt
  • Regression tests обновлены под единственный источник reasoning block в profiling summary
1.3.13

Reasoning block теперь виден прямо в карточке Pipeline Profiling, а не только в нижнем LLM Input inspector.

Главное
  • В Pipeline Profiling появилась раскрываемая строка Reasoning block
  • Блок расположен сразу рядом с Reasoning requested и Reasoning observed
  • Если provider не прислал текст reasoning, UI остаётся как раньше и показывает только observed-сигнал
Технически
  • OperationProfilingSnapshot теперь хранит reasoningBlock
  • Profiler обновляет reasoning block по мере stream delta в debug mode
  • Добавлены regression tests для profiler snapshot и rendering внутри profiling summary
1.3.12

Reasoning debug теперь показывает не только факт thinking-события, но и сам summarized reasoning block, если провайдер прислал его в stream.

Главное
  • В debug inspector появилась секция Reasoning Block
  • Текст reasoning показывается рядом с system prompt, transcript, spending/subscription data и final user prompt
  • Если provider прислал только redacted/omitted сигнал без текста, UI по-прежнему показывает только Reasoning observed
Технически
  • Anthropic и OpenRouter stream parsers прокидывают отдельный onReasoningDelta
  • Operation debug snapshot накапливает reasoning-текст только в debug mode и добавляет его в operation:debugPrompt
  • Добавлены regression tests для Anthropic/OpenRouter reasoning deltas, operation snapshot и overlay rendering
1.3.11

Follow-up hotfix после review 1.3.10: retry/backoff теперь сохраняет ожидаемое поведение в edge cases.

Главное
  • Agency Hub AI usage reporter больше не обходит retry backoff, если новый usage event пришёл прямо во время failing flush
  • LLM auto-retry снова разрешён после provider progress/reasoning event, если текстовый chunk ещё не приходил
  • Retry-таймеры LLM корректно перевооружаются для новой попытки после pre-text provider activity
Технически
  • enqueue() не ставит debounce timer, пока target queue уже flushing; post-flush scheduling выбирает backoff
  • Retry gating в operations снова опирается на первый text chunk, а provider activity остаётся отдельным сигналом для TTFB/idle timers
  • Убран недостижимый 60s Agency Hub retry delay при MAX_ATTEMPTS = 3
  • Добавлены regression tests для enqueue-during-flush и service_unavailable после provider progress до текста
1.3.10

Hotfix для reasoning stream, provider-aware ключей и Agency Hub usage retry.

Главное
  • Deep-фичи больше не падают по LLM TTFB timeout, когда Claude сначала стримит summarized thinking/reasoning, а текст приходит позже
  • Content UI теперь проверяет API key по провайдеру выбранной модели для каждой feature: OpenRouter-фичи больше не стартуют только с Claude key
  • В Settings → AI Models reasoning-select отключается для моделей/feature, которые реально не отправляют reasoning config
  • Из bundled Lora personality убран TODO-placeholder цен, чтобы он не попадал в prompt
Технически
  • llm-ttfb завершается на первый provider event/progress/reasoning signal, а первый text chunk по-прежнему только добавляет текст в UI
  • Capability rules для Anthropic adaptive thinking и OpenRouter Gemini thinking вынесены в общий helper
  • OpenRouter reasoning detection теперь учитывает наличие reasoning property даже при пустой строке
  • Agency Hub AI usage reporter requeue'ит failed/thrown batches с bounded retry/backoff и max attempts
  • Добавлены regression tests для timeout, provider-aware key gating, OpenRouter reasoning, Options reasoning capabilities, bundled prompt text и usage reporter retries
1.3.9

Claude reasoning теперь проще проверить: включённый Anthropic adaptive thinking запрашивает видимый summarized stream-сигнал, а в настройках появился отдельный Max.

Главное
  • В Settings → AI Models → Reasoning добавлено значение Max
  • Для Claude Sonnet 4.6 и Opus 4.6 Max уходит в Anthropic как output_config.effort = "max"
  • Claude-запросы с reasoning теперь используют thinking.display = "summarized", чтобы Reasoning observed мог увидеть thinking-событие в stream
Технически
  • Reply-текст по-прежнему берётся только из text_delta, поэтому summarized thinking не вставляется в чат
  • Для OpenRouter Gemini значение Max безопасно мапится в high
  • Обновлены regression tests для Claude adaptive request body, OpenRouter Gemini mapping, storage и Options UI
1.3.8

Reasoning visibility теперь вынесена прямо в completed profiling summary, чтобы её было видно после генерации без live log.

Главное
  • В завершённой карточке Pipeline Profiling появились отдельные строки Reasoning requested и Reasoning observed
  • Больше не нужно ловить live profiling log во время генерации: статус reasoning виден рядом с usage/cost/stages
Технически
  • Completed overlay summary извлекает reasoning-события из profiling logEntries и рендерит их как обычные profiling rows
  • Добавлен regression test на отображение reasoning rows в completed overlay
1.3.7

Debug/profiling теперь показывает, был ли reasoning фактически замечен в ответном stream, а не только выбран в настройках.

Главное
  • В debug profiling добавлены строки Reasoning requested: ... и Reasoning observed: yes/no
  • Reasoning observed: yes появляется только если в stream пришёл thinking/redacted thinking block, thinking_delta, signature_delta или reasoning delta
  • Теперь можно отличить “reasoning был включён в request body” от “adaptive thinking реально сработал в этом ответе”
Технически
  • Anthropic и OpenRouter stream parsers прокидывают onReasoningObserved
  • Operation и Compare profiling логируют первый observed reasoning signal и явное no, если reasoning был запрошен, но stream не содержал reasoning-событий
  • Добавлены regression tests на stream-level reasoning detection и profiling log
1.3.6

Hotfix для CG-APP-01 после включения reasoning: Anthropic adaptive thinking теперь не отправляется вместе с temperature, потому что extended/adaptive thinking несовместим с temperature modifications.

Главное
  • Reply, Fix, Ping, Hi, Help, Summary и Review сохраняют reasoning medium по умолчанию
  • Anthropic-запросы с reasoning больше не получают temperature, поэтому API не должен отклонять их validation error
  • Если reasoning выключен через Off или выбранная Claude-модель не поддерживает adaptive thinking, temperature продолжает использоваться как раньше
Технически
  • Request body для Anthropic теперь собирается условно: temperature добавляется только когда thinking не отправляется
  • Добавлены regression checks, что adaptive requests содержат thinking/output_config, но не содержат temperature
1.3.5

Reasoning теперь по умолчанию работает на medium, а в настройках можно отдельно управлять reasoning effort для каждой feature-модели.

Главное
  • Все reasoning defaults подняты до medium: быстрые replies больше не остаются на low
  • В Settings → AI Models у каждой feature-строки появился отдельный селект Reasoning
  • Доступные значения: Off, Low, Medium, High
  • Fix, Hi и Compare наследуют reasoning-настройку от Fast Reply
  • Off полностью убирает thinking/reasoning config из запроса для поддерживаемых моделей
Технически
  • Добавлен settings.featureReasoning со storage schema 7; старые настройки автоматически получают medium
  • Anthropic Direct и OpenRouter clients теперь принимают явный reasoningEffort вместо feature-hardcode
  • Для неподдерживаемых моделей thinking config по-прежнему не отправляется, чтобы не ловить provider errors
  • Добавлены regression tests для storage migration, Options UI, Anthropic adaptive thinking и OpenRouter Gemini thinking
1.3.4

Claude Direct replies теперь используют Anthropic adaptive thinking для Sonnet 4.6 и Opus 4.6, с большими аварийными output caps, чтобы thinking не обрезал финальный текст.

Главное
  • Claude Sonnet 4.6 и Claude Opus 4.6 теперь отправляются с thinking.type = adaptive и thinking.display = omitted
  • Для Reply, Fix, Ping и Hi включён output_config.effort = low
  • Для Help, Summary и Review включён output_config.effort = medium
  • Adaptive-mode caps подняты до больших потолков: 8000 для коротких replies, 16000 для Help/Review и 24000 для Summary
Технически
  • Adaptive thinking включается только для claude-sonnet-4-6 и claude-opus-4-6
  • Claude 4.5 и Haiku 4.5 остаются в обычном режиме, чтобы не отправлять неподдерживаемый adaptive config
  • Добавлены regression tests на Claude adaptive request body, большие caps и fallback без thinking для неподдерживаемых Claude-моделей
1.3.3

Hotfix для Gemini replies: thinking остаётся включённым на low, но ChatGoose больше не вставляет в UI служебные обрывки, prompt-leak текст и незавершённые ответы.

Главное
  • Gemini quick replies теперь идут через OpenRouter Messages API с thinking.display = omitted и output_config.effort = low для коротких insertable-фич
  • Для Gemini quick-фич увеличен output budget, чтобы low thinking не съедал весь лимит и не обрывал финальный reply на границе max_tokens
  • Ответы перед [NEXT] / [VARIANT] проходят sanitizer: убираются bracket-обрывки, обрамляющие кавычки, Reply: / Message 1:-префиксы и очевидные meta-leak строки про prompt/instructions
  • Если модель вернула только meta-текст или поток закончился по max_tokens, ChatGoose показывает понятную ошибку и просит regenerate вместо вставки битого текста
Технически
  • Добавлен общий reply-output normalizer для background и content UI
  • OpenRouter и Anthropic stream clients теперь прокидывают stop_reason в операции
  • Compare cards больше не показывают raw leaked output, если после sanitizer не осталось пригодных частей
  • Добавлены regression tests на Gemini leak, short replies, variant splitting, max_tokens и unusable-output ошибки
1.3.2

Hotfix после OpenRouter/LLM abstraction cleanup: исправлены цены Claude Opus 4.6/4.5, более устойчивый parsing OpenRouter stream и preflight warning для OpenRouter API key.

Главное
  • Claude Opus 4.6 и Claude Opus 4.5 теперь считаются по актуальным тарифам $5/$25 за MTok вместо старых Opus 4 тарифов $15/$75
  • Fan Summary больше не завышает отображаемый spend и Agency Hub usage cost при дефолтной Opus 4.6 модели
  • OpenRouter stream больше не падает на валидных SSE data: фреймах без явного event:
  • OpenRouter in-stream error payload классифицируется как rate limit / balance / API key / provider error, а не превращается в silent empty result
  • Если выбрана OpenRouter-модель и ключей вообще нет, preflight toast теперь просит OpenRouter API key, а не Claude key
Технически
  • OpenRouterClient выводит effective event из payload.type для Anthropic Messages stream
  • OpenAI chat-completion chunks на /api/v1/messages по-прежнему reject'ятся как unsupported shape
  • TabUiState получил provider map по feature models для provider-aware content preflight
  • Добавлены regression tests для Opus pricing, OpenRouter data-only SSE frames, OpenRouter stream errors и OpenRouter missing-key toast
1.3.1

Фикс OpenRouter usage/cost и финальная зачистка AI provider abstraction после добавления Gemini/Grok. Расходы, debug-профилирование и ошибки API key теперь больше не используют Claude-лейблы там, где выбран OpenRouter.

Главное
  • OpenRouter usage теперь корректно считает cached/read/write tokens без double-counting
  • cached_tokens и cache_write_tokens из OpenRouter responses попадают в spend и Agency Hub usage
  • Если выбрана OpenRouter-модель без OpenRouter API key, ChatGoose показывает OpenRouter-specific ошибку, а не Claude key warning
  • Debug/profiling строки для Gemini и Grok больше не подписаны как Claude
  • Grok cache-read pricing помечен approximate, пока cache-read цена не подтверждена надёжным source
Технически
  • Provider-neutral контракт переведён на llmSpend, llmUsage, llmCost
  • Удалены legacy anthropic* aliases из payload/profiling contract
  • claude-ttfb / claude-stream timeout и profiling keys заменены на llm-ttfb / llm-stream
  • OpenRouter adapter поддерживает Anthropic-shaped и OpenAI-shaped usage payloads
  • Unsupported OpenRouter SSE chunk shapes теперь дают ошибку вместо silent empty success
1.3.0

ChatGoose теперь умеет работать не только с Claude Direct, но и с OpenRouter. Это даёт доступ к Gemini и Grok прямо из настроек, без изменения привычного workflow: выбираете модель для каждой функции отдельно, а ChatGoose сам отправляет запрос нужному провайдеру.

Главное
  • Добавлена поддержка OpenRouter как второго AI-провайдера
  • В настройках появилось отдельное поле OpenRouter API Key
  • В выборе моделей появились две группы: Anthropic Direct и OpenRouter
  • Добавлены OpenRouter-модели: Gemini 3.1 Pro Preview, Grok 4.20, Grok 4.3
  • Модель можно выбирать отдельно для каждой функции: Reply, Help Me, Summary, Review и Ping
  • Claude продолжает работать напрямую через Anthropic, как раньше
  • Старые Claude-настройки сохраняются и мигрируют автоматически
Что это даёт
  • Можно тестировать Gemini и Grok на реальных чатах, не отключая Claude
  • Быстрые ответы, summaries и reviews можно сравнивать на разных моделях
  • Для дорогих или экспериментальных моделей можно включать OpenRouter только на отдельных функциях
  • Если OpenRouter key не добавлен, ChatGoose заранее покажет понятное предупреждение
  • OpenRouter-модели не подменяются Claude автоматически: выбранная модель остаётся явной
Технически
  • Новые сохранённые model ids теперь provider-aware: anthropic:... и openrouter:...
  • Старые bare Claude ids вроде claude-sonnet-4-6 остаются совместимыми и нормализуются автоматически
  • OpenRouter работает через Anthropic-compatible endpoint /api/v1/messages
  • Live smoke прошёл для google/gemini-3.1-pro-preview, x-ai/grok-4.20 и x-ai/grok-4.3
  • Стоимость считается из локального model registry
  • Для Grok учитываются cache_read_input_tokens, которые OpenRouter возвращает в usage
  • Для Grok 4.3 оценка стоимости помечается approximate: OpenRouter может применять tiered pricing выше 200k total tokens
  • x-ai/grok-4.20 — поддерживаемый slug. x-ai/grok-4.2 не используется и не добавлен
1.2.17

Финальная v2-проверка PPV в ChatGoose. Главный баг прошлой версии был в том, что расширение смотрело на «куплено» с точки зрения модели / viewer-side флагов Fansly. Для модели свой PPV-контент часто выглядит доступным, поэтому AI мог решить, что фан уже купил видео или бандл, и отвечать так, будто контент разблокирован.

Теперь ChatGoose проверяет покупку с точки зрения конкретного фана. Это снижает риск неправильных PPV-ответов и ложных предположений о покупке, но не обещает идеальное совпадение со всеми внутренними состояниями Fansly: если доказательств не хватает, статус остаётся unknown.

Главное
  • purchased ставится только когда найден точный заказ этого фана на этот конкретный PPV-контент
  • not purchased ставится только после успешной точной проверки /media/orderhistory, если заказ для пары «фан + контент» не найден
  • unknown ставится, когда не удалось определить фана, нет нужных API-данных, проверка заказа не сработала, упала, истекла по таймауту или часть вложений не попала в лимит проверок
  • Чаевые и embed-only сообщения (GIF/превью ссылок) больше не превращаются в ложные [Media]
Подробности
  • Проверка идёт с fan-perspective: media.purchased и похожие model-side/viewer-side флаги больше не считаются доказательством покупки фаном
  • Для неподтверждённых PPV-вложений ChatGoose делает exact /media/orderhistory check по accountMediaId или accountMediaBundleId и accountIds=<fanAccountId>
  • Метки медиа и бандлов стали точнее: nested mimetype fallback, состав через bundleContent[] / accountMediaIds[], правильные формы 1 Photo, 2 Videos
  • Пример новой метки: [Media Bundle: 1 Photo, 2 Videos — PPV $20.00, unknown]
  • Промпты fast-reply, improve-draft, help-me и ping теперь прямо говорят AI не цитировать PPV-цены/теги фану и не утверждать «купил» или «не купил» при unknown
Технически
  • normalizeTranscript() принимает PurchaseEvidenceOverride: inline /message.accountMediaOrders[] даёт только positive proof, а checkedNotPurchased* приходит только из exact verifier
  • Inline single засчитывается только как accountId === fanAccountId + type === 1 + accountMediaId; inline bundle — только type === 2 + accountMediaId. Type-less accountMediaId из обычного inline payload не считается покупкой
  • /media/orderhistory вызывается только для unresolved PPV-вложений: single через accountMediaId, bundle через accountMediaBundleId, всегда с accountIds=<fanAccountId> и limit=100
  • Ответ verifier парсится из accountMediaOrderHistory[] и fallback aggregationData.accountMediaOrders[]; строки повторно фильтруются по exact fan/content/kind
  • Verifier ограничен для быстрых replies: cap 10 уникальных PPV-вложений на операцию, concurrency 3, timeout 3s на запрос, in-memory cache 5 минут по (modelAccountId, fanAccountId, kind, contentId)
  • Любая неполная проверка — cap overflow, timeout, malformed response или API error — fail-open'ится в unknown, а не ломает операцию и не превращается в not purchased
  • session-capture теперь знает route key для /api/v1/media/orderhistory, чтобы session/auth check брался из правильного Fansly route
1.2.15
Исправлено
  • AI больше не предлагает фану купить PPV-контент, который тот уже разблокировал — расширение теперь видит, что конкретное видео или набор уже куплены, и не повторяет питч
  • Чаевые на сообщении больше не считаются разблокировкой PPV — это разные операции в Fansly, путать их нельзя
  • В транскрипте платные вложения помечаются статусом «куплено», «заблокировано» или «неизвестно»; при неизвестном статусе AI не делает уверенных утверждений о покупке
1.2.2
Улучшено
  • Максимальный лимит Deep feature message count увеличен до 3000 сообщений
  • Настройки и документация для Deep-фич синхронизированы с реальным дефолтом 1500 и диапазоном 100–3000
1.2.1
Исправлено
  • Исправлен endpoint отправки AI usage batch в Agency Hub: теперь используется корректный путь /api/v1/ai-usage/batch
1.2.0
Новое
  • После каждого успешно завершённого AI-действия ChatGoose отправляет usage в Agency Hub
  • Учитываются и обычные AI-фичи, и Compare, поэтому видно, кто из чаттеров сколько токенов использует
Улучшено
  • Usage отправляется батчами в фоне и не тормозит работу чаттера
  • В отчёт попадают модель, токены, длительность, conversation id, регенерация и cache hit для fan summary
  • Если Agency Hub недоступен или не настроен, расширение тихо пропускает отправку и продолжает работать как обычно
Исправлено
  • Ошибочные и прерванные операции больше не могут случайно попадать в usage-статистику
1.1.6
Улучшено
  • Сканирование фана теперь использует Claude Opus 4.6 по умолчанию
  • Лимит сообщений для Deep-фич увеличен до 1500 (макс. 2000)
1.1.5
Улучшено
  • Пинг-сообщения стали более персонализированными: бот использует конкретные детали из переписки
  • Оптимизирован prompt caching для пингов — быстрее и дешевле
1.1.4
Новое
  • Страница «Что нового» со всей историей обновлений
  • Ссылки на changelog со страниц установки и руководства
1.1.3
Улучшено
  • Бот теперь старается задавать вопрос в конце сообщения, чтобы поддерживать диалог с фаном
1.1.2
Исправлено
  • Навигация в руководстве больше не прыгает при скролле
1.1.1
Новое
  • Ребрендинг: GooseMuse стал ChatGoose
Исправлено
  • Навигационные ссылки больше не наезжают друг на друга на планшетах
1.1.0
Новое
  • Кнопка Hi для быстрого приветствия новых подписчиков
  • Страница-руководство по использованию расширения
  • Страница установки для Firefox
  • Автоматический деплой Firefox-расширения
1.0.0
Первый релиз
  • Быстрые ответы фанам с учётом персоналити модели
  • Выбор тона ответа: casual, flirty, upsell, spicy
  • Разбивка ответа на несколько сообщений
  • Улучшение черновиков
  • Пинг неактивных фанов
  • Обзор чата и саммари фана
  • Интеграция с Agency Hub
  • Отслеживание расходов на API
  • Встроенная персоналити Lora
  • Поддержка Firefox и Chrome