История обновлений ChatGoose
Панель действий на широких окнах: Recap больше не висит посреди пустоты.
Ошибки AI-генерации теперь называют настоящую причину вместо безликого «Agency Hub request failed».
CG-HUB-10. Если Hub не достучался до AI-провайдера (например, умер прокси страницы), карточка прямо говорит: инфраструктура этой страницы, сообщите менеджеру — повторные попытки не помогутГлобальными персонами теперь управляет Agency Hub: расширение читает серверный каталог, хранит привязки аккаунтов и страхует старые локальные тексты.
Model Personalities показывает read-only каталог; глобальные персоны создаёт и редактирует администратор Agency HubDownload legacy persona JSON и Copy legacy persona JSON выгружают snapshot и текущие привязки для ручного импорта; экспорт нужно сделать до удаления расширения или очистки browser storagedefinitionId входит в generation/cache identity, поэтому после админской правки не переиспользуется кэш от другого promptcontractHash и защищённый persona-catalog routeSpenders показывает до 1000 платящих и устойчиво переживает частичные сбои, обновления и быстрый поиск.
В режиме отладки видно настоящий промпт, который сервер отправил ИИ.
Панель действий больше не съезжает при выборе тона.
Первое открытие доски показывает прогресс, а имена перестали перезагружаться после перезапуска браузера.
Доска больше не зависает на «Building the board…».
Доска Spenders называет фанов вашими именами.
Панель действий пересобрана — тоны стали переключателями с эмодзи, Split не слетает при регенерации; доска Spenders видит всех китов ядра, месячный приток и поиск.
Scan читается как досье, а не как простыня сырого текста.
Панель кнопок больше не дёргается при старте генерации.
Кастомные личности работают с ядром, борд честен про невключённые рейтинги, токен устройства не теряется, длинные чаты не роняют генерацию.
Новый фирменный вид со светлой и тёмной темой, вставка ответа кликом и индикатор дневного лимита ИИ.
uiTheme); тёмная тема — чистый свап CSS-токенов под одним классомcolor-scheme хост-страницы; анимации уважают prefers-reduced-motionЧестные ошибки: дневной лимит ИИ и проблемы соединения с хабом теперь называют себя по имени.
CG-HUB-09 честно говорит, что лимит на сегодня исчерпан и сбросится в полночь UTCgate_*), а не по тексту сообщений; текстовый матчинг остался фолбэком для старых ядерПочинен вход по логину и дочищен легаси-код борда.
spendersLegacyRebuild и старый путь «~150 запросов к Fansly» вырезаны — рейтинг только из ядраПереезд на ядро агентства. ChatGoose перестал быть одиноким расширением со своими ключами и промптами в кармане — теперь это клиент ядра агентства (Agency Hub): общего сервера, где живёт весь интеллект — промпты, персоналии, модели, лимиты и деньги. На той же платформе работает десктопный ChatGoose для OnlyFans. Два клиента — один мозг.
Reply/Polish/Hi/Ping/Scan отправляют на сервер только контекст беседы; промпт собирает ядро и стримит ответ обратно. Улучшение промптов доезжает до всей команды мгновенно — без релиза расширенияapi.anthropic.com и openrouter.ai удалены из манифестаФинальная правка панели после отката к старой раскладке: кнопки снова выглядят чисто по умолчанию, а подсказки хоткеев появляются только при наведении или фокусе.
Reply/Polish/Hi/Ping/Scan остаются визуально чистыми, но при hover/focus показывают маленький чип E/F/G/D/S1.5.0. Один горизонтальный ряд, Multi текстом, Scan в ряду, без Casual как отдельного тона⌘⇧O теперь описан как цикл Flirty / Upsell / Horny, потому обычный reply — это дефолт, а не отдельный Casual-режим.chatgoose-toolbar-hotkey и показываются CSS-ом на :hover/:focus-visible, без изменения ширины кнопокScan прячет зелёную ready-точку на hover/focus, чтобы она не накладывалась на хоткей-чип
Откат бара из 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) остались⋯; Scan снова в TOOLBAR_FEATURES с «ready»-точкой, не задевающей чип; порядок cycle-tone выровнен с пилюлями (без casual)
Откат направления 1.5.2/1.5.3 по фидбэку: тон убран из кнопки Reply и снова видим — отдельным компактным рядом пилюль. Multi вернулся в ряд, но компактным значком ⧉, а не текстовой кнопкой. Scan остался в меню ⋯. Бар стал чуть компактнее.
Casual/Flirty/Upsell/Horny стоят отдельным рядом после Polish, а не прячутся в меню у Reply. Клик по пилюле сразу генерит ответ в этом тоне (один клик = одна генерация), активная пилюля показывает заряженный тон — в т.ч. выставленный с ⌘⇧O. Каретка ▾ и тон-меню убраныMulti — компактным значком ⧉. Разбивка на несколько сообщений вернулась в ряд сразу за Reply, но занимает место значка, а не текстовой кнопки: включённый режим подсвечен зелёным. Scan остался в меню ⋯ — зелёная точка «саммари готово» по-прежнему всплывает на самой ⋯onToneSelect → startTonedReply, ⌘⇧O листает тот же набор и отражается активной пилюлей. Multi — aria-pressed + класс .chatgoose-toolbar-toggle-icon, смысл значка несут aria-label/тултип; меню ⋯ теперь держит только ScanMulti-в-меню; проводка в index.ts (тон, режим ответа, хоткеи) не тронута — изменение только в бареMulti и меню ⋯ только со Scan
Продолжение чистки бара из 1.5.2 — по фидбэку операторов. Редкие действия Scan и Multi уехали в выпадающее меню ⋯ у правого края (рядом с именем модели), а смена тона больше не стоит лишнего клика: меню тонов раскрывается по наведению на ▾.
⋯ для Scan и Multi. Кнопки Scan (профиль фаната) и Multi (разбивка на несколько сообщений) убраны из ряда в компактное меню ⋯ у имени модели — бар стал короче. На свёрнутой ⋯ остаются оба сигнала: зелёная точка = саммари готово, синий акцент = Multi включёнReply раскрывается, когда наводишь на ▾ — без отдельного клика «открыть». Навёл → один клик по тону = генерация. Раньше смена тона стоила двух кликов⋯ зеркалит тон-меню (всплывает вверх, выровнено по правому краю — раскрывается влево, за край не вылезает); одновременно открыт только один поповер. S-хоткей Scan работает как преждеPolish/Hi не мигает меню) и grace 160 мс на закрытие (успеть зайти в поповер через зазор); клик по-прежнему переключает⋯ и hover-логики
Точечное улучшение к 1.5.1: бар действий стал компактнее и чище. Тоны ответа (Flirty/Upsell/Horny) переехали из отдельного ряда в выпадающее меню у кнопки Reply — как в десктопной версии, а чипы хоткеев на macOS ужались до буквы. Бар больше не упирается в край узкого диалога.
Reply. Каретка ▾ рядом с Reply открывает список тонов (Casual/Flirty/Upsell/Horny); клик по тону сразу генерит ответ в нём — один клик, одна генерация (как в десктопе). Отдельный ряд из трёх пилюль убран, бар стал заметно у́жеE/F/…), как на Windows/Linux — полное ⌘⇧E осталось в подсказке при наведении и шпаргалке ?. Раньше пять полных комбо распирали рядReply — сплит-контрол (тело + каретка ▾), меню тона всплывает над баром; у тулбара убран скролл-обрез — ряд переносится, а не клипается⌘⇧O по-прежнему листает тон. Меню закрывается по клику вне и Esc, каретка отключается во время операции
Точечное улучшение к 1.5.0: горячие клавиши теперь видно прямо в интерфейсе, а не только в шпаргалке по ?. На кнопках действий и в футере доски «Спендеры» появились чипы-клавиши с сочетанием, плюс подсказка при наведении.
Reply/Polish/Hi/Ping/Scan теперь видно сочетание: на macOS — полное ⌘⇧E, на Windows/Linux — буква (полное комбо в тултипе при наведении). Раньше шорткаты были «скрытыми» — узнать их можно было только через ?J/K/Enter/Esc вместо простого текста.chatgoose-kbd + хелпер makeKbd() — единый визуал клавиши для бара кнопок, футера доски и шпаргалки ? (один источник, чтобы стиль не расходился)aria-hidden), сочетание уходит ассистивным технологиям через aria-keyshortcuts — доступное имя кнопки остаётся чистымПервый релиз с новыми фичами после технической серии 1.4.x. Перенесли два удобных решения из десктопной версии ChatGoose: полноценные горячие клавиши для всех AI-действий прямо в диалоге и доску «Спендеры» — рейтинг фанов по сумме трат.
? — шпаргалка со всеми сочетаниями⌘⇧‹буква›, на 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; тиры считаются на клиенте по порогамgetSpendersList; пороги тиров, сборка списка и движок клавиш — чистые функции с тестамиТехнический релиз вслед за 1.4.0 на пути к 2.0: код разнесён по модулям с явными границами, на входящих сообщениях добавлена валидация, подключён CI, а кэш Fan Summary стал аккуратнее. Новых фич и изменений в работе кнопок нет.
storagepersonalityId (раньше оставались «осиротевшие»)storage сначала освобождаются невалидные записи кэша, и только потом самые старыеshared/protocol.ts с type-guard'ами; runtime-api.ts и port-client.ts валидируют сообщения на границе доверия вместо asOperationRegistry, OperationTimeoutController, operation-cleanup, conversation-context-loadersurface-planner (inline vs overlay как чистая функция), ui/view-helpers; options/index.ts распилен на agency-hub-settings, dom, sessionsstorage-coordinator, migrations, summary-cache (новые хелперы чистки/эвикции кэша).github/workflows/ci.yml) и скрипт npm run check (typecheck + test + build)Большой проход по code review всей кодовой базы, подготовка к 2.0 релизу: устранены утечки, гонки и слабые места в надёжности в background, content и UI. Новых фич нет — только стабильность и корректность.
Retry-After и показывается понятная ошибка про лимит со временем повтораSet отменённых operation id (feature и compare)billing / not foundRetry-After → rate_limited, кап пагинации, общая retry-политикаpersonalities / accountMappings; hi-greeting восстановил prompt caching
Reasoning block теперь не смешивается с prompt debug: LLM Input снова показывает только данные, отправленные в модель.
Reasoning block оставлен только в Pipeline ProfilingLLM Input inspector больше не показывает provider reasoning outputreasoning из PromptDebugSnapshotoperation:debugPrompt снова содержит только system/transcript/data/user prompt
Reasoning block теперь виден прямо в карточке Pipeline Profiling, а не только в нижнем LLM Input inspector.
Pipeline Profiling появилась раскрываемая строка Reasoning blockReasoning requested и Reasoning observedOperationProfilingSnapshot теперь хранит reasoningBlockReasoning debug теперь показывает не только факт thinking-события, но и сам summarized reasoning block, если провайдер прислал его в stream.
Reasoning BlockReasoning observedonReasoningDeltaoperation:debugPromptFollow-up hotfix после review 1.3.10: retry/backoff теперь сохраняет ожидаемое поведение в edge cases.
enqueue() не ставит debounce timer, пока target queue уже flushing; post-flush scheduling выбирает backoff60s Agency Hub retry delay при MAX_ATTEMPTS = 3Hotfix для reasoning stream, provider-aware ключей и Agency Hub usage retry.
Settings → AI Models reasoning-select отключается для моделей/feature, которые реально не отправляют reasoning configllm-ttfb завершается на первый provider event/progress/reasoning signal, а первый text chunk по-прежнему только добавляет текст в UIreasoning property даже при пустой строке
Claude reasoning теперь проще проверить: включённый Anthropic adaptive thinking
запрашивает видимый summarized stream-сигнал, а в настройках появился отдельный
Max.
Settings → AI Models → Reasoning добавлено значение MaxMax уходит в Anthropic как output_config.effort = "max"thinking.display = "summarized", чтобы Reasoning observed мог увидеть thinking-событие в streamtext_delta, поэтому summarized thinking не вставляется в чатMax безопасно мапится в highReasoning visibility теперь вынесена прямо в completed profiling summary, чтобы её было видно после генерации без live log.
Pipeline Profiling появились отдельные строки Reasoning requested и Reasoning observedlogEntries и рендерит их как обычные profiling rowsDebug/profiling теперь показывает, был ли reasoning фактически замечен в ответном stream, а не только выбран в настройках.
Reasoning requested: ... и Reasoning observed: yes/noReasoning observed: yes появляется только если в stream пришёл thinking/redacted thinking block, thinking_delta, signature_delta или reasoning deltaonReasoningObservedno, если reasoning был запрошен, но stream не содержал reasoning-событий
Hotfix для CG-APP-01 после включения reasoning: Anthropic adaptive thinking
теперь не отправляется вместе с temperature, потому что extended/adaptive
thinking несовместим с temperature modifications.
Reply, Fix, Ping, Hi, Help, Summary и Review сохраняют reasoning medium по умолчаниюtemperature, поэтому API не должен отклонять их validation errorOff или выбранная Claude-модель не поддерживает adaptive thinking, temperature продолжает использоваться как раньшеtemperature добавляется только когда thinking не отправляетсяthinking/output_config, но не содержат temperature
Reasoning теперь по умолчанию работает на medium, а в настройках можно
отдельно управлять reasoning effort для каждой feature-модели.
medium: быстрые replies больше не остаются на lowSettings → AI Models у каждой feature-строки появился отдельный селект ReasoningOff, Low, Medium, HighFix, Hi и Compare наследуют reasoning-настройку от Fast ReplyOff полностью убирает thinking/reasoning config из запроса для поддерживаемых моделейsettings.featureReasoning со storage schema 7; старые настройки автоматически получают mediumreasoningEffort вместо feature-hardcodeClaude Direct replies теперь используют Anthropic adaptive thinking для Sonnet 4.6 и Opus 4.6, с большими аварийными output caps, чтобы thinking не обрезал финальный текст.
thinking.type = adaptive и thinking.display = omittedReply, Fix, Ping и Hi включён output_config.effort = lowHelp, Summary и Review включён output_config.effort = medium8000 для коротких replies, 16000 для Help/Review и 24000 для Summaryclaude-sonnet-4-6 и claude-opus-4-6
Hotfix для Gemini replies: thinking остаётся включённым на low,
но ChatGoose больше не вставляет в UI служебные обрывки, prompt-leak текст
и незавершённые ответы.
thinking.display = omitted и output_config.effort = low для коротких insertable-фичmax_tokens[NEXT] / [VARIANT] проходят sanitizer: убираются bracket-обрывки, обрамляющие кавычки, Reply: / Message 1:-префиксы и очевидные meta-leak строки про prompt/instructionsmax_tokens, ChatGoose показывает понятную ошибку и просит regenerate вместо вставки битого текстаreply-output normalizer для background и content UIstop_reason в операцииmax_tokens и unusable-output ошибкиHotfix после OpenRouter/LLM abstraction cleanup: исправлены цены Claude Opus 4.6/4.5, более устойчивый parsing OpenRouter stream и preflight warning для OpenRouter API key.
$5/$25 за MTok вместо старых Opus 4 тарифов $15/$75data: фреймах без явного event:error payload классифицируется как rate limit / balance / API key / provider error, а не превращается в silent empty resultOpenRouterClient выводит effective event из payload.type для Anthropic Messages stream/api/v1/messages по-прежнему reject'ятся как unsupported shapeTabUiState получил provider map по feature models для provider-aware content preflightФикс OpenRouter usage/cost и финальная зачистка AI provider abstraction после добавления Gemini/Grok. Расходы, debug-профилирование и ошибки API key теперь больше не используют Claude-лейблы там, где выбран OpenRouter.
cached_tokens и cache_write_tokens из OpenRouter responses попадают в spend и Agency Hub usagellmSpend, llmUsage, llmCostanthropic* aliases из payload/profiling contractclaude-ttfb / claude-stream timeout и profiling keys заменены на llm-ttfb / llm-streamChatGoose теперь умеет работать не только с Claude Direct, но и с OpenRouter. Это даёт доступ к Gemini и Grok прямо из настроек, без изменения привычного workflow: выбираете модель для каждой функции отдельно, а ChatGoose сам отправляет запрос нужному провайдеру.
anthropic:... и openrouter:...claude-sonnet-4-6 остаются совместимыми и нормализуются автоматически/api/v1/messagesgoogle/gemini-3.1-pro-preview, x-ai/grok-4.20 и x-ai/grok-4.3cache_read_input_tokens, которые OpenRouter возвращает в usagex-ai/grok-4.20 — поддерживаемый slug. x-ai/grok-4.2 не используется и не добавленФинальная v2-проверка PPV в ChatGoose. Главный баг прошлой версии был в том, что расширение смотрело на «куплено» с точки зрения модели / viewer-side флагов Fansly. Для модели свой PPV-контент часто выглядит доступным, поэтому AI мог решить, что фан уже купил видео или бандл, и отвечать так, будто контент разблокирован.
Теперь ChatGoose проверяет покупку с точки зрения конкретного фана. Это снижает риск неправильных PPV-ответов
и ложных предположений о покупке, но не обещает идеальное совпадение со всеми внутренними состояниями Fansly:
если доказательств не хватает, статус остаётся unknown.
purchased ставится только когда найден точный заказ этого фана на этот конкретный PPV-контентnot purchased ставится только после успешной точной проверки /media/orderhistory, если заказ для пары «фан + контент» не найденunknown ставится, когда не удалось определить фана, нет нужных API-данных, проверка заказа не сработала, упала, истекла по таймауту или часть вложений не попала в лимит проверок[Media]media.purchased и похожие model-side/viewer-side флаги больше не считаются доказательством покупки фаном/media/orderhistory check по accountMediaId или accountMediaBundleId и accountIds=<fanAccountId>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-цены/теги фану и не утверждать «купил» или «не купил» при unknownnormalizeTranscript() принимает PurchaseEvidenceOverride: inline /message.accountMediaOrders[] даёт только positive proof, а checkedNotPurchased* приходит только из exact verifieraccountId === 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=100accountMediaOrderHistory[] и fallback aggregationData.accountMediaOrders[]; строки повторно фильтруются по exact fan/content/kind(modelAccountId, fanAccountId, kind, contentId)unknown, а не ломает операцию и не превращается в not purchasedsession-capture теперь знает route key для /api/v1/media/orderhistory, чтобы session/auth check брался из правильного Fansly routeDeep feature message count увеличен до 3000 сообщений/api/v1/ai-usage/batch