Словами самого skill
Skill охватывает @json-render/ink — рендерер терминала на Ink, который превращает JSON-спецификации в интерактивные древовидные структуры компонентов терминала с привязкой данных, видимостью, действиями и динамическими props. В нём разбирается, как определить каталог из схемы Ink с помощью zod, регистрировать в реестре только кастомные компоненты и выполнять рендеринг с помощью Renderer внутри JSONUIProvider или с помощью более высокоуровневых createRenderer и standardComponents.
Читатели изучают формат плоской карты элементов спецификации с корневым ключом, стандартные наборы компонентов для layout, контента и интерактивности, выражения состояния и привязки, систему событий и встроенные действия setState, pushState и removeState, повторяющиеся списки, потоковую передачу JSONL через useUIStream, роли провайдеров, ключевые экспорты, а также рекомендации по дизайну для терминала, такие как ширина 80-120 колонок.
Что он выдаёт
- Интерактивное дерево компонентов терминала, отрендеренное из JSON-спецификации.
- Системный промпт для AI, сгенерированный из каталога для написания спецификаций.
- Не зависящий от фреймворка in-memory StateStore, который управляет повторными рендерами.
Как это работает
- 01Определите каталог из схемы Ink
Импортируйте defineCatalog из @json-render/core и передайте схему Ink вместе с определениями компонентов и действий, которые вы хотите разрешить.
- 02Регистрируйте только свои кастомные компоненты
defineRegistry принимает каталог, но стандартные реализации компонентов уже встроены, поэтому в элементы Ink сопоставляются только кастомные.
- 03Оберните Renderer в провайдеры
JSONUIProvider предоставляет контексты состояния, видимости, действий и фокуса для Renderer, который получает спецификацию и реестр.
- 04Пишите спецификации как плоскую карту элементов
Спецификация содержит корневой ключ, называющий первый элемент, и карту элементов типизированных узлов с props, children и опциональными привязками событий.
- 05Привязывайте props с помощью выражений
Любое значение prop может вычисляться во время рендеринга из состояния, элементов повторения, условий или строковых шаблонов вместо того, чтобы быть жёстко заданным.
- 06Передавайте спецификации потоково и постепенно
useUIStream потребляет потоки JSONL-патчей из эндпоинта API и предоставляет вызывающему коду spec, send и isStreaming.