--- компонент: Чешуйка «Комикс-завод» (skaz-comics → модуль Кобры) статус: черновик v1 обновлено: 2026-08-30 база: skaz.ai-delivery.ru (репо bot-marketing/skaz-comics, VPS 37.143.13.23, pm2 skaz-comics:3060) решение: вход из Кобры по initData ДОБАВЛЯЕТСЯ, логин/пароль и MCP-OAuth ОСТАЮТСЯ как есть связано: [[chesuyka]] — общие правила · [[iframe]] — рамка и подпись · [[master-app]] — плитка --- # Чешуйка «Комикс-завод» Вселенная COBRA как модуль Кобры: выпуски комиксов и видео-рассказы рождаются прямо из рабочих чатов — и читаются рядом с ними. ## Почему это почти готовая чешуйка По формуле канона («IFrame-интерфейс + MCP-руки») у skaz-comics **уже есть** три четверти: | Требование канона | Что уже есть в skaz-comics | |---|---| | Отдельное веб-приложение на своём домене | ✅ `skaz.ai-delivery.ru` (Next.js, standalone) | | Свой MCP-сервер | ✅ `/api/mcp` — Streamable HTTP, stateless | | Инструменты — глаголами бизнеса | ✅ `get_canon`, `create_story`, `create_hero`, `generate_image`, `generate_story_art`… | | Своё хранилище | ✅ vault (`data/vault/COBRA` — MD + арт), сущность своя, чужих API насквозь нет | | Идентичность авторов | ✅ именные токены, `author:` во frontmatter, OAuth+PKCE с логином на своём домене | | Публичное API для витрины | ✅ `/api/public/*` (CORS), сайт comics.ai-delivery.ru рендерится из него | **Чего не хватает до чешуйки** — ровно то, что перечислено ниже по шагам канона: вход из Кобры (initData), раскладки под три поверхности, SSI, регистрация модуля, `request_feature`, свойства чата, логи-срезы. ## Шаг 1. Боль «Контент вселенной живёт отдельным сайтом: чтобы превратить рабочий кейс в выпуск, нужно уходить из Кобры, помнить каноны и вручную соединять чат → историю → рассказ». Кому больно: маркетинг и владелец (контент), команда (онбординг в мир). Что должно случиться: выпуск создаётся из чата тегом Алины, читается рядом с чатом, видео-продакшн запускается из того же места. Кто пользуется: маркетинг, владелец, любой сотрудник-соавтор; клиенты — читатели кармана. ## Шаг 2. Мерка и раскладки (одно приложение — три поверхности) | Поверхность | Экраны (≤3) | Кто | |---|---|---| | **iFrame (рейл)** | Полка выпусков · Карточка выпуска · Мир (герои/локации) | сотрудник, владелец | | **Доковый (у чата)** | «Выпуски из этого чата» + кнопка «Сделать выпуск из треда» | оператор | | **Карманный** | Читалка выпуска (свайп по кадрам) · Полка | клиент, сотрудник | | **Страница-артефакт** | Витрина вселенной по папке-проекту + недельный срез завода | все в папке | ⚠️ Раскладка рейла живёт **без** `chat`/`client` в подписи — полка и мир не должны рассчитывать на контекст чата. «Сделать выпуск из треда» — только в доке. Мерка: одна боль (контент из будней), один словарь (выпуск/герой/локация/кадр/арка/рассказ), экранов ≤3 на поверхность. Продакшн-конвейер (озвучка, сцены, раскадровка) в док не тащим — это iFrame/полный экран, в доке только чтение и «создать». ## Шаг 3. Своя сущность Уже есть: vault — MD-заметки + арт, ничего сквозного. Буфер синхронизации не нужен (сторонний сервис = сама Кобра, и к ней ходим по её же API при создании из чата). Единственная новая связь: `create_story` из чата пишет в frontmatter выпуска `source: {kind: "cobra-chat", chat_id, workspace_id}` — обратная ссылка на чат-источник. ## Шаг 4. Интерфейс на SDK — сохранив нынешний вход **Ключевое решение: три равноправных пути аутентификации, ни один не убирает другой.** | Путь | Кто им ходит | Что под капотом | |---|---|---| | Логин/пароль (как сейчас) | админы через `/admin/login` | `ADMIN_USERS` → HMAC-кука `admin_session` — **не трогаем** | | MCP Bearer + OAuth/PKCE (как сейчас) | Claude коллег | `/api/mcp` + `/mcp-auth` — **не трогаем** | | **initData от Кобры (новый)** | открытие модуля в Кобре | `POST /api/auth/webapp`: проверка HMAC-SHA256 на секрете интеграции + `auth_date` → выдаётся **та же** `admin_session`-кука (username = email оператора из подписи) | То есть initData — это третий способ получить существующую сессию, а не вторая система сессий. Дальше все админ-маршруты работают без изменений. Сопоставление: `operator.email` из подписи ищется в `ADMIN_USERS` / известных учётках; не нашёлся — read-only режим (смотреть можно, кнопки продакшна не отдаются сервером). Фронт: `npm i @ai-cobra/webapp-sdk` → `createWebapp()`, `applyTheme()`/`onThemeChange`, `ready()`, `clearInitDataFromUrl()`; `defineChatButton({icon: "🎬", label: "Комиксы"})`. Тема хоста поверх нынешней светлой (наш `#faf9f5` ↔ токены `tokens.css`). Проверка зрелости: карточка выпуска читается в панели 380 px и на телефоне. ## Шаг 5. MCP-руки Сервер уже есть; при подключении модуля его адрес `https://skaz.ai-delivery.ru/api/mcp` указывается в Кобре → инструменты становятся доступны Алине/терминалам через `cobra_call_mcp_tool`. Аутентификация MCP остаётся токенной (наш существующий слой). Дополнить словарь: - `create_story_from_chat(chat_id)` — прочитать тред через публичное API Кобры (токен `wat_…`, скоуп `chats:read`) и собрать выпуск: наш «точь-в-точь» пайплайн; - `request_feature(текст, контекст)` — **обязателен по канону**: тикет с дедуп-ключом в `data/feature-requests.json`, агент честно отвечает «пока не умею, записал»; - `list_universe_stats` — для недельного среза. Токен Кобры для чтения чатов: **минимум скоупов** — только `chats:read` (+ `folders:read`, если витрина-артефакт складывается в папку). Не просить `cobra:chat`/`terminals:*`. ## Шаг 6. SSI — настройки установки | Поле | Обяз. | По умолчанию | |---|---|---| | Вселенная (папка vault) | да | `COBRA` | | Секрет интеграции (проверка initData) | да | — | | Токен публичного API Кобры (`wat_…`, `chats:read`) | для «выпуск из чата» | — | | Кто может создавать выпуски | да | owner/admin Кобры + список email | | Показ дока | нет | во всех чатах | | Публичность новых выпусков | нет | `private: true` до ручной публикации | Без секрета интеграции модуль честно показывает «не настроена: нет секрета» — не белый экран. ## Шаг 7. Модуль в Конструкторе и сценарии бота Модуль Конструктора `Модуль: Комикс-завод` — обёртка над нашим MCP для сценариев ботов (агент не ходит к нам напрямую). Сценарий Алины в группе: по тегу («@alina сделай из этого выпуск») → `create_story_from_chat` → ссылка на выпуск в чат. Режим ответа — «по тегу», из SSI. Не умеет → `request_feature` + честный ответ. ## Шаг 8. Свойства чата Объявляем поле `link выпуски` — ссылки созданных из этого чата выпусков; док-раскладка читает его и показывает «выпуски этого чата». ## Шаг 9. Регистрация и права Регистрация — три поля: имя «Комикс-завод», origin `https://skaz.ai-delivery.ru`, URL входа `/cobra` (новый маршрут-раскладка). Точки показа: рейл + вкладка правой панели. Помним: ACL на модуль нет — видят все участники; разграничение (кто может запускать продакшн/публикацию) реализует наш сервер по достроенной роли, скрытая кнопка — не защита. Приватные выпуски (`private: true`) в раскладках Кобры не показываем никому, кроме авторов. ## Шаг 10–11. Документация, песочница, пилот Раздел в единой базе по стандарту #87775 (MCP-инструменты уже описаны в gitlab.com/itinvrn/skaz-mcp — переносится и дополняется SSI/сценариями). Пилот: подключить модуль в пространстве BotMarketing, кнопка в чате «Голова робота» (176) или чате 224, первый выпуск из треда, неделя логов → срез → всем. ## Что при этом НЕ меняется - вход по логину/паролю на `skaz.ai-delivery.ru/admin` — работает как сегодня; - MCP-токены, страница «MCP-доступ», OAuth из claude.ai — как сегодня; - сайт comics.ai-delivery.ru и публичное API — как сегодня; - vault, Obsidian, продакшн рассказов — как сегодня. Чешуйка — это **дополнительная дверь из Кобры** в тот же дом. ## Порядок работ (оценка) 1. ✅ **Сделано 30.08.2026.** `/api/auth/webapp` (проверка HMAC + auth_date ≤ 24ч, timing-safe; email оператора → знакомая учётка ADMIN_USERS → та же admin_session-кука, `SameSite=None` для рамки; незнакомый email → честный 403) + страница входа `/cobra` на `@ai-cobra/webapp-sdk` (тема хоста, ready, вне Кобры → экран с обычным логином). Секрет: env `COBRA_WEBAPP_SECRET` — сейчас временный, заменить на выданный ядром при регистрации модуля. URL входа модуля: `https://skaz.ai-delivery.ru/cobra`. 2. Раскладки `/cobra` (рейл) и `/cobra/dock` (док) поверх готовых страниц + SDK/тема — 1–2 дня. 3. `request_feature` + логи + недельный срез — 0,5 дня. 4. `create_story_from_chat` через `wat_…` — 1 день. 5. Регистрация модуля, SSI, пилот — вместе с ядром (нужны: секрет интеграции, регистрация модуля владельцем, токен `chats:read`). Открытые вопросы к ядру: подтвердить формат регистрации (#87421) и получить секрет интеграции; `folder_id` в подписи для страницы-артефакта (расхождение Р-13 канона). --- _Источник: `cobra-components/cheshuyka-comics.md` в репозитории audio-talks. Эта копия обновляется скриптом `sync-components.mjs` — правки вносить в источник, не здесь._