landing 26.700.0: Copilot-чат для сайтов снят, генерация переехала на Tailwind
Модуль лендингов развернул подход к генерации сайтов: отдельный чат-бот Copilot удалён вместе с публичными экшенами, а вместо него — сборка страницы Tailwind-блоками и набор инструментов для AI-ассистента. Релиз ломающий: удалены и AJAX-экшены, и целые классы, и часть шагов генерации переехала в другие неймспейсы.
Что удалено
Список стоит прочитать целиком, если вы что-то делали вокруг Copilot в лендингах:
- AJAX-экшены
Controller\Copilot:addChatToSiteAction,checkBlockGeneratableAction,executeBlockGenerationAction,sendBlockGenerationNeedSelectMessageAction,sendBlockGenerationWrongSelectMessageAction. Остался толькоexecuteGenerationAction. - Классы чат-ботов:
Copilot\Connector\Chat\{ChangeBlockChatBot, Chat, ChatBotMessageDto, CopilotChatBot, CreateSiteChatBot, ICopilotChatBot}и JS-расширениеlanding/copilot/chat. Copilot\Generation::getChatId()/setChatId(),IScenario::getChatbot(), ORM-классCopilot\Model\SiteToChatTable. Таблицаb_landing_copilot_site_to_chatв install.sql при этом осталась — класса для работы с ней нет, данные остались висеть.- Шаги генерации переехали в поднеймспейсы:
Step\AIStep,BaseStep,TaskStep,RequestMultiple,RequestSingle→Step\Base\*иStep\Request\*. Старые FQCN не работают.
Смысл перестройки: генерация сайта перестала быть диалогом в отдельном чат-боте и стала функцией общего AI-ассистента. Держать под это собственную инфраструктуру чатов, привязку сайта к чату и своих ботов больше незачем — отсюда и объём удалённого.
Tailwind вместо блоков из репозитория
Новый пакет Bitrix\Landing\AI\SiteBuilder\*: DTO (EnhancedInputDto, TailwindBlockSpecDto, DevContextDto), сервисы (EnhancedInputService, TailwindStructureService, TailwindBlockHtmlService, TailwindRuntime*), нормализация HTML, шрифтов и якорей. В таблице b_landing_copilot_generations появилась колонка HTML_BLOCKS (mediumtext в MySQL, text в pgsql).
Разница по сути: раньше AI подбирал готовые блоки из репозитория и заполнял их текстом — то есть был ограничен тем, что уже нарисовано. Tailwind-подход позволяет генерировать разметку блока целиком, а утилитарные классы дают модели предсказуемый словарь оформления вместо произвольного CSS. Отсюда же нормализаторы: сгенерированный HTML нужно привести в вид, который переживёт редактор.
Управляют этим контроллеры Controller\AiBlocks (magicSiteStart/Resume/Status, changeAiSiteStart/Resume/Status, convert) и Controller\Tailwind::saveCssAction, сценарии Copilot\Generation\Scenario\CreateAiSite и ChangeAiSite.
Предупреждение на будущее: Controller\AiBlocks проживёт недолго — в landing 26.900.0 он удалён целиком. Если планируете на него завязываться, не стоит.
Тулы AI-ассистента
Integration\AiAssistant\ToolSet\LandingToolSet с инструментами создания, изменения, удаления и поиска сайта и CRM-форм, таблица b_landing_ai_site_binding (USER_ID, SITE_ID, GENERATION_ID, уникальные индексы user+site и generation) с ORM AiSiteBindingTable, триггер AiSiteChatTrigger (регистрируется при установке через AiSiteChatTriggerRegistrar::register()). Конфиг ассистента лежит в config/marta.php и подключается как aiassistant.marta.
Именно эта таблица заменила SiteToChatTable: связь «пользователь ↔ сайт ↔ генерация» вместо «сайт ↔ чат».
Realtime и остальное
Bitrix\Landing\Realtime\EventDispatcherплюс JSlanding/realtime,landing/editor/realtime,landing/site-list/realtime— события правок расходятся через Pull. Для генерации, которая идёт долго и шагами, это обязательное условие: пользователь должен видеть прогресс, а не ждать ответа.- REST-обёртка
PublicAction\AiBlock(createTemplate,addToLanding,repo*). History\Action\MoveBlockAction,Landing\BlockOrderService,Site\Creator,Block\StickyWrapperDetector,LocalTemplates.- UI: шаблон
landing.site_copilot/templates/ai, онбординг страниц, compact/floating/simple-link панели, Tailwind runtime.
Что делать
- Проверьте свой JS и интеграции на удалённые экшены
Controller\Copilot— их пять. - Найдите старые FQCN шагов генерации (
Step\AIStepи соседи) — они переехали вStep\Base\*/Step\Request\*. - Если использовали
SiteToChatTable— класса нет; данные в таблице остались, но работать с ними теперь нечем. - Не строить новое на
Controller\AiBlocks— его удалят через два релиза.