Слой архитектора

Дизайн

Имя, адреса, мета и внешний вид этого проекта. Сохранённые настройки читаются на лету — изменение видно при следующей загрузке страницы, без пересборки.

Инструменты

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

Инструмент — переиспользуемая вещь, у которой есть дом. Он живёт в `_tools/<id>/` одной папкой — клиент, сервер, типы — и его берут разные функциональные компоненты, а не владеет им какой-то один. Обрезку изображения зовут два поля этого слоя, голосовой ввод — форма товара и общий контрол. В этом весь замысел: написано один раз, взято много раз.

Инструменты, которые есть в проекте

_tools/chat

Чат

Что умеет
Одна переписка на весь проект, в двух состояниях. Дан обработчик отправки — это чат целиком: лента и поле ввода с прикреплением файла; не дан — лента только на чтение, ровно то, что нужно журналу. Сообщение несёт текст, автора, время, необязательную пометку канала и до шести родов вложений: четыре библиотека узнаёт сама — аудио, изображение, видео, документ — и два наших, место и календарное событие.
Как применять
Лента, сообщение и поле ввода взяты из AI Elements, вендоренной в `components/ai-elements/` шагом 80-2; инструмент решает только, что в них появится. Четыре рода вложений библиотека узнаёт сама по типу содержимого, два наших нарисованы здесь строкой того же вида — чтобы под сообщением был один список, а не два. Прокрутка принадлежит `Conversation`: он держит низ и предлагает вернуться, и своей работы со скроллом здесь больше не появится. В сеть инструмент не ходит: сообщения приходят пропсом, отправленное уезжает наружу, а опрос и курсор остаются у того, кто владеет складом.
Какую пользу даёт
Всё, что показывает череду сообщений, — одна и та же вещь под разными именами: чат с человеком, чат с моделью, лента, журнал бота, входящие. До этого инструмента каждую из них собирали руками, и лента логов 77-5 была сложена из элементов списка при том, что библиотека уже лежала в репозитории. Одна реализация, три потребителя: вид блока, слой архитектора и будущий мессенджер.
Требует:браузер

Нужно поставить пакет: ai, streamdown, use-stick-to-bottom, nanoid

Пока никем не применяется — лежит готовым, ждёт первого вызывающего.

_tools/code-view

Просмотр кода

Что умеет
Показывает исходный код с настоящей подсветкой. Движок — Shiki: он разбирает грамматику языка, а не подбирает регулярные выражения, поэтому вложенный в HTML CSS или дженерик в TypeScript окрашиваются верно, а не «почти верно». Язык берётся из явного пропса или угадывается по имени файла.
Как применять
Shiki грузится лениво и только когда есть что показать: статический импорт заставил бы платить за грамматики языков каждую страницу, где просмотрщик всего лишь может понадобиться. Обе темы получаются сразу (`defaultColor: false` кладёт светлые и тёмные цвета в разметку переменными CSS), поэтому переключение темы перекрашивает код мгновенно и без повторного разбора.
Какую пользу даёт
Один подсветчик в продукте вместо двух. Это единственный инструмент, которому нужен пакет, и пакета в этом репозитории нет: без `shiki` импорт падает внутри `try/catch`, и подсветка молча деградирует в обычный текст. Состояние законное — неподсвеченный код читается, пустой экран нет.
Требует:браузер

Нужно поставить пакет: shiki

Пока никем не применяется — лежит готовым, ждёт первого вызывающего.

_tools/fact-draft

Типизированный черновик из слов

Что умеет
Человек описывает свободными словами, что хочет хранить, и получает заполненную запись: машинное имя, человеческое название, форму значения, инструкцию узнавания и поведение при неудаче. Схема полей приходит параметром — поэтому инструмент годится любому потребителю, а не только реестру признаков.
Как применять
Один вызов модели со схемой полей в промпте и строгим JSON в ответе. Закрытые списки проверяются ЗДЕСЬ, а не обещаются моделью: она охотно вернёт значение вне списка, и выглядеть это будет правдоподобно. Черновик, не прошедший проверку, отбрасывается целиком — наполовину разобранная запись хуже отказа, потому что её сохранят. У поля есть микрофон, а микрофон браузер отдаёт только в защищённом контексте: по http его нет по устройству, и человек печатает.
Какую пользу даёт
Описать вещь словами — единственный способ расширить систему без агента. Инструмент ничего не пишет: он предлагает, а правит и сохраняет человек. Закон взят дословно у socials-ai, потому что модель ошибается тихо, и единственная защита — глаза владельца между предложением и записью.
Требует:браузерключ OpenAI

Уже применяется: architect/facts-registry

_tools/image-crop

Обрезка изображения

Что умеет
Даёт человеку выбрать видимую часть картинки до того, как она сохранена, и отдаёт готовый JPEG. Рамка задаёт пропорцию — 16:9, 1:1 или 9:16, — а не размер; большая сторона ограничена 1200 пикселями. Работа целиком в браузере: холст, перетаскивание, ползунок масштаба. Сервер узнаёт только результат.
Как применять
Открывается поверх любого поля, принимающего картинку: ему отдают `blob:`-ссылку на только что выбранный файл или адрес уже сохранённого, а результат забирают в `onDone` — сам инструмент ничего не сохраняет. Подписи необязательны: у него есть английские значения по умолчанию, поэтому его можно поставить в проект, где нашего словаря нет.
Какую пользу даёт
Картинка приезжает уже кадрированной, а не загруженной целиком и обрезанной стилями. Отсюда одинаковые пропорции у аватаров, логотипов и обложек по всему сайту — и вес файла в килобайтах вместо мегабайт. Прозрачность он сохранить не может: её нет в JPEG, и логотип на прозрачном фоне — не его случай.
Требует:браузер

Уже применяется: architect/image-fieldarchitect/icons-field

_tools/socials-ai

Соцсети из фразы

Что умеет
Человек пишет фразу — название компании, псевдоним, строку о себе, — и инструмент предлагает несколько профилей в соцсетях, которые могут быть его. Каждый кандидат проверяется настоящим обращением к сети, и три исхода выглядят по-разному, а не оттенками одного: найден, не найден и «сеть не отвечает посторонним».
Как применять
Модель только предлагает, выбирает человек. Автоматический выбор самого вероятного ошибётся молча — и ссылка в подвале сайта будет вести на чужой профиль, пока кто-нибудь этого не заметит. `closed` — не «профиля нет»: Instagram и LinkedIn закрываются от ботов независимо от существования профиля, и слова говорят об этом прямо.
Какую пользу даёт
Заполнение соцсетей в подвале без ручного поиска каждого адреса. Он же единственный инструмент, приехавший из панели и заметно переделанный под этот проект — по словам владельца: «он требует адаптации стилей нашим существующим стандартам этого приложения». Так и должен выглядеть перенесённый инструмент после переноса.
Требует:браузерключ OpenAI

Уже применяется: architect/socials-field

_tools/translations-dialog

Диалог переводов

Что умеет
Окно, которое подключает любая сущность с переводимыми полями: продукт сегодня, категория и страница завтра. Карточка на язык, автоперевод, сохранение по одному языку. Одноязычное приложение этого диалога не видит — проверка стоит первой строкой, и вызывающему о ней помнить не надо.
Как применять
Языки берутся из `translations.config` самого приложения, дверь перевода — `/api/i18n/translate`. Весь диалог ограничен 80% высоты окна, а прокручивается только список языков: шапка с кнопками перевода и подвал с сохранением остаются на месте. Крестик значит «пропустить», а не «отменить» — запись уже существует значением языка интерфейса, переводы добавляются позже с карточки.
Какую пользу даёт
Ради него у инструментов и появился дом: он месяцами лежал в `components/i18n/`, не значился ни в одном реестре — и кнопку перевода в панели построили заново, строкой текста вместо окна. Инструмент без дома не существует, как бы хорош он ни был.
Требует:браузерключ OpenAI

Уже применяется: manage/productsmanage/products/[productId]

_tools/video-trim

Монтаж видео

Что умеет
Оставляет середину ролика, отрезая начало и конец. Браузер лишь выбирает две точки на шкале; режет слой данных, ffmpeg с `-c copy` — потоки копируются без перекодировки, поэтому мгновенно, без потерь и без нагрузки на машину владельца.
Как применять
Файл сначала загружается и режется на месте: человек монтирует то, что действительно лежит в хранилище, и может вернуться к монтажу позже из той же строки. После успешной резки инструмент зовёт `router.refresh()` — данные строки приходят с сервера, а не правятся в памяти браузера.
Какую пользу даёт
Монтаж без wasm-редактора на 30 МБ в странице и без перекодировки на ноутбуке. Цена — честное требование ниже: ffmpeg живёт в слое данных, и проект без него получит отказ, а не тихое бездействие.
Требует:браузерffmpeg в слое данных

Пока никем не применяется — лежит готовым, ждёт первого вызывающего.

_tools/voice-input

Голосовой ввод

Что умеет
Маленькая кнопка рядом с полем: удерживаешь — идёт запись, отпустил — уходит на расшифровку. Во время записи полоса в 40 пикселей показывает приходящий звук, а в её центре идёт время. Помнит курсор: расшифровка встаёт туда, где он стоял, а не в конец поля.
Как применять
С шага 32-2 в этом файле только облик; механика — разрешение микрофона, запись, столбики уровня, таймер, расшифровка, память курсора — живёт в `client/use-voice-recorder.ts`, одна на все интерфейсы. Строя второй облик, зовут этот хук, а не копируют работу с `AudioContext`. Внутри намеренно нет ни shadcn, ни lucide, ни sonner: инструмент обязан оставаться архивом, который работает там, куда распакована папка, — поэтому отказ показывается строкой под кнопкой, а не тостом платформы.
Какую пользу даёт
Диктовка вместо набора там, где человек действительно говорит: описание, текст, ответ. Здесь же его граница — микрофон принадлежит тому, что произносят, а не всему текстовому: код подтверждения, координаты и HEX-цвет получают клавиатуру, и это решение владельца от 2026-08-28.
Требует:браузерHTTPSключ OpenAI

Уже применяется: manage/products/formcomponents/form/voice-control

Приборы поверх сайта

Не переиспользуемый инструмент, и стоит здесь намеренным исключением: этот виден вам, а не посетителю.

Индикатор ширины экрана

Кружок в левом нижнем углу: текущая ширина в пикселях и ступень, в которую она попадает. Он позволяет говорить о вёрстке числами, а не ощущениями, — и виден на живом сайте, а не только в разработке.

Включён

Powered by Fractera