10 KiB
Архетипы экрана KT AI
Архетип — это форма главной рабочей области под задачу процесса. Набор открыт: archetypes/registry.json — это каталог-данные, а не зашитый список. Добавление архетипа = запись в реестр + рендерер + пример, без правки валидатора и ядра. Неизвестный или ещё не реализованный архетип безопасно деградирует в queue.
Это прямой ответ на вопрос «а если архетипов больше?»: система относится к архетипам как к данным. Реестр растёт; контракт (product.schema.json) общий; валидатор (scripts/validate_product.py) читает реестр и не меняется; рантайм (templates/kt-ai-app-shell.html) подбирает рендерер по id с фолбэком.
Галерея
Все архетипы живьём в одном экране: examples/gallery.html (табы, генерируется scripts/build_gallery.py после пересборки прототипов). У каждого stable-архетипа есть отгружаемый пример.
Контракт записи реестра
{
"id": "compare", // lowercase id, = значение product.archetype
"title": "Сверка источников",
"whenToUse": "когда применять (1 фраза)",
"requires": ["table", "compare"], // блоки контракта, без которых архетип не имеет смысла → ERROR
"recommends": ["scenario", "drawer"], // желательные блоки → WARN, если их нет
"forbids": [], // блоки, которых быть не должно → ERROR
"renderer": "renderCompare", // имя функции-рендерера в app-shell (null, если ещё нет)
"runtimes": ["html", "kit"], // где архетип РЕАЛЬНО реализован
"status": "stable" // stable – рендерится; planned – пока деградирует в fallback
}
runtimes — обязательное поле, и его держит в согласии с кодом гейт 21.
status: stable говорит только о том, что архетип рендерится; в каком рантайме
— не говорит. Пока поля не было, реестр объявлял stable все пятнадцать
архетипов, а React-кит рисовал шесть: продукт на Next выбирал inbox, получал
деградацию в queue и узнавал об этом, увидев не тот экран. Ни реестр, ни
валидатор, ни гейт не произносили ни слова.
Теперь валидатор пишет об этом заметкой при проверке конфига, а гейт 21 сверяет
реестр с тем, что действительно реализовано в kt-ai-screen.tsx. Реализовали
архетип в ките — допишите kit в runtimes, иначе сборка ДС покраснеет.
В ките сегодня: queue, dashboard, cockpit, compare, conversational,
custom. Остальные девять — только HTML-рантайм.
Валидатор по этой записи проверяет конфиг автоматически — для любого числа архетипов код не меняется.
Реализованные (stable)
| id | Когда | Главная область | Референс |
|---|---|---|---|
queue |
5+ записей со статусом/сроком/суммой; проверить и закрыть (дефолт) | таблица + drawer | — |
dashboard |
управление метрикой процесса | KPI-табы → большой чарт периода + разборы (top/share/cards) + «требует внимания» | ElevenLabs dashboard (Mobbin) |
cockpit |
один фокусный объект с сигналами + решение | карточка решения + очередь сбоку | ElevenLabs TTS playground (рабочая область + тихая панель) |
compare |
попарная сверка двух источников/версий | две панели, расхождения подсвечены | — |
conversational |
чат как главная область, человек вне построчной очереди | центрированный чат, орб-аватар, prompt-bar | ElevenLabs Conversational AI |
custom |
экран не подходит ни под один архетип (запасной) | центрированная колонка секций-карточек | ElevenLabs settings-detail |
document |
документоцентричный процесс: вычитка одного документа (договор, письмо, ТЗ) | документ с diff-правками агента по фрагментам, принять/отклонить каждую | Harvey, «договоры/письма Lotus» |
copilot |
агент производит файл/документ/слайды в диалоге | чат слева + живой предпросмотр артефакта справа | ChatGPT Canvas, Claude Artifacts |
wizard |
пошаговая подача заявки/оформление с автозаполнением агентом | степпер + поля с бейджем «заполнил агент», Назад/Далее | госуслуги, Typeform |
kanban |
поток работ по стадиям, важно распределение | колонки = statuses, карточки = table.rows (без новых блоков) | Trello, Linear board |
inbox |
входящие с длинным текстом (обращения, письма) | список слева + постоянная панель чтения с разбором агента | почтовые клиенты, Front |
analytics |
главная ценность — анализ и выводы, не построчная работа | сводка агента + чарты (bar/line/donut, чистый SVG) + «Выводы агента» | Amplitude, Metabase |
calendar |
работа привязана к датам и слотам | события по дням, тон-подсветка конфликтов | календарь-агенда |
map |
объекты распределены в пространстве (станции, площадки) | SVG-схема с точками-статусами и связями; не геокарта с тайлами | схемы линий метро |
timeline |
разбор одного дела/инцидента во времени | вертикальная лента: время, событие, актор (шаги агента помечены) | audit log, Intercom timeline |
Заявленные (planned)
— нет. Все архетипы реестра реализованы.
Когда экран не подходит ни под один архетип
Это штатная ситуация, не ошибка. Два пути:
- Явно — поставить
archetype: "custom"и описатьcontract.sections(заголовок + опц. описание/текст/поля). Рендерится колонкой карточек в духе ElevenLabs detail-страниц. - Автоматически — если архетип неизвестен или не реализован,
mainByLayoutподбирает форму по данным: естьsections→ custom; есть таблица с рядами → queue; иначе → custom (пустой с подсказкой). Экран никогда не падает и не показывает пустую таблицу не к месту.
Набор открыт
Реестр прямо перечисляет очевидных кандидатов (open_set_examples): gantt, gallery, editor, org. Это не обещания — маркер того, что список не закрыт. До появления их рендереров такие экраны делает custom.
Как добавить архетип
По «правилу двух продуктов» (DESIGN.md): архетип появляется, когда он нужен второму продукту, не раньше.
- Реестр. Добавить запись в
archetypes/registry.json(status:"planned",renderer:null— на этом шаге уже можно валидировать контракт). - Рендерер. Написать
renderXxx()вtemplates/kt-ai-app-shell.htmlи ветку вmainByLayout(); перевести запись вstatus:"stable",renderer:"renderXxx". Главную оболочку (sidebar/topbar/тема/орб Төре) не трогать — меняется только главная область. - Контракт. Если архетипу нужен новый блок данных (как
compare), добавить его вproduct.schema.json. - Пример. Положить эталонный конфиг в
examples/и прогнатьscripts/validate_product.py. - Док. Дописать строку в таблицу выше.
Деградация
- Неизвестный
archetype→ WARN + рендеритсяqueue. status:"planned"→ WARN + рендеритсяfallback(queue).compareбезcompare.pairs→ WARN + рендеритсяqueue.
Прототип никогда не падает из-за архетипа — в худшем случае показывает надёжную таблицу-очередь.