스킬 자체의 표현으로
이 스킬은 JSON 스펙을 데이터 바인딩, 가시성, 액션, 동적 props를 갖춘 대화형 터미널 컴포넌트 트리로 변환하는 Ink 터미널 렌더러인 @json-render/ink를 다룹니다. Ink 스키마에서 zod로 catalog를 정의하고, registry에 커스텀 컴포넌트만 등록한 뒤, JSONUIProvider 안에서 Renderer로 렌더링하거나 상위 레벨의 createRenderer와 standardComponents를 사용하는 과정을 단계별로 설명합니다.
독자는 root 키를 가진 플랫 요소 맵 스펙 형식, 표준 레이아웃·콘텐츠·인터랙티브 컴포넌트 세트, 상태 및 바인딩 표현식, 이벤트 시스템과 내장된 setState, pushState, removeState 액션, repeat 리스트, useUIStream을 통한 JSONL 스트리밍, provider의 역할, 주요 export, 80-120 컬럼 너비 같은 터미널 디자인 가이드라인을 배웁니다.
산출물
- JSON 스펙으로부터 렌더링된 대화형 터미널 컴포넌트 트리입니다.
- 스펙 작성을 위해 catalog로부터 생성된 AI 시스템 프롬프트입니다.
- 재렌더링을 구동하는 프레임워크에 종속되지 않는 인메모리 StateStore입니다.
작동 방식
- 01Ink 스키마로부터 Catalog 정의하기
@json-render/core에서 defineCatalog를 임포트하고, 허용할 컴포넌트 및 액션 정의와 함께 Ink 스키마를 전달합니다.
- 02커스텀 컴포넌트만 등록하기
defineRegistry는 catalog를 받지만, 표준 컴포넌트 구현은 이미 내장되어 있으므로 커스텀 컴포넌트만 Ink 엘리먼트에 매핑됩니다.
- 03Renderer를 Provider로 감싸기
JSONUIProvider는 상태, 가시성, 액션, 포커스 컨텍스트를 Renderer에 제공하며, Renderer는 스펙과 registry를 전달받습니다.
- 04스펙을 플랫 요소 맵으로 작성하기
스펙은 첫 번째 요소를 지정하는 root 키와, props, children, 선택적 이벤트 바인딩을 가진 타입 지정된 노드들의 elements 맵으로 구성됩니다.
- 05표현식으로 Props 바인딩하기
모든 prop 값은 하드코딩되는 대신 렌더링 시점에 상태, repeat 항목, 조건 또는 문자열 템플릿으로부터 결정될 수 있습니다.
- 06스펙을 점진적으로 스트리밍하기
useUIStream은 API 엔드포인트로부터 JSONL 패치 스트림을 소비하며, 호출자에게 spec, send, isStreaming을 제공합니다.