UI extension point
UI extension은 Host의 노출 위치와 Runtime config를 연결합니다.
{
"id": "school_life.home",
"point": "screen",
"title": "학교 생활",
"order": 10,
"permissions": ["network", "storage"],
"config": {
"ui_schema": 2,
"view": {"type": "text", "props": {"text": "오늘 학교 생활"}}
}
}
point 선택
일반 Tool/Skill은 자동으로 workspace가 되지 않습니다. AI 작업 공간 UI가 필요할 때만 별도
workspace extension을 선언합니다. Slash Command와 Tool discovery도 별도 계약입니다.
response는 Runtime v2와 config.a2ui가 모두 필수입니다. 활성 Instance의 권한과 capability
data source가 확인되면 Host가 plugin.<extension-id> 컴포넌트로 동적 등록하고, AI가 최종 답변에
필요하다고 명시적으로 선택한 경우에만 렌더링합니다. 다른 point에 a2ui를 선언하거나 기존
Runtime v1 Response 형식을 사용하는 것은 오류입니다.
Home placement
Runtime v2의 card와 action은 고유 section을 만들 수 있습니다.
{
"placement": {
"section_id": "school_life.home",
"section_title": "학교 생활",
"section_order": 15,
"layout": "grid",
"show_header": true
}
}
layout은 stack, horizontal, grid입니다. 같은 플러그인에서 같은 section_id를 사용한
extension은 함께 배치됩니다. 다른 플러그인의 ID와 겹치지 않게 package namespace를 붙입니다.
placement는 card와 action에서만 사용할 수 있습니다.
권한과 action
UI permissions는 Manifest 전역 권한의 부분집합입니다. 화면이 참조하는 capability도 자신의 권한을
따로 가집니다. UI가 표시됐다는 사실만으로 capability 권한이 허용되는 것은 아닙니다. invoke는
enabled, generation, granted permission, timeout을 Host 실행 경계에서 다시 확인합니다.
Runtime v1 호환
ui_schema가 없는 기존 extension은 sections, actions, form, shorthand capability/label을
사용하는 Runtime v1으로 읽힙니다. v1은 Response 이외의 기존 설치 호환용입니다. 새 서비스형
화면에는 state, data source, navigation, theme를 함께 사용할 수 있는 Runtime v2를 사용합니다.
Runtime v1 action style은 primary 또는 secondary이고, form field는 text, integer,
select만 지원합니다. v1 JSON에 v2 필드를 섞으면 오류입니다.
다음은 UI Runtime v2 레퍼런스입니다.