1. 개요 (Introduction)
RAWP-CRS 1.0은 RAWP 1.0 프로토콜 기반의 대화형 에이전트 인터페이스를 구현하는 클라이언트의 시각적 렌더링 및 UX 행동 규격이다. 본 규격은 RAWP 1.0의 제어 평면 이벤트와 RAWP-DPS 1.0의 데이터 평면 이벤트를 사용자에게 시각적으로 전달하는 방법을 정의하며, 대화 메시지의 레이아웃, 콘텐츠 렌더링, 상태 표시, 애니메이션 등 클라이언트 UI 구현에 필요한 모든 시각적 요구사항을 포괄한다.
본 규격은 프론트엔드 또는 시각적 피드백(웹 클라이언트, 데스크톱 앱, 터미널, 대시보드 등)을 구현하는 모든 시스템에 적용된다.
1.1. 요구사항 표기 규약 (Requirements Notation)
본 문서의 "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", "OPTIONAL"은 RFC 2119를 따른다.
1.2. 용어 정의 (Terminology)
| 용어 | 정의 |
|---|---|
| User | 대화 인터페이스를 통해 에이전트와 상호작용하는 최종 사용자. |
| Agent | RAWP 세션 내에서 실행되는 작업 프로세스. 텍스트 응답, 도구 호출, 사고 과정 등 다양한 형식의 출력을 생성한다. |
| System | 프로토콜 또는 클라이언트 자체가 생성하는 메타 정보 메시지. 세션 상태 안내, 에러 표시, 중지 알림 등을 포함한다. |
| Turn | 사용자의 단일 프롬프트(control.prompt.request)에 대한 에이전트의 전체 응답 사이클. session.turn.start부터 session.turn.end까지의 논리적 단위. |
| 버블 (Bubble) | 메시지를 감싸는 둥근 모서리의 배경색 컨테이너. 메신저 앱에서 발신/수신 메시지를 시각적으로 구분하는 관례적 UI 요소. |
| 버블리스 (Bubble-less) | 버블 컨테이너 없이 콘텐츠 자체의 시각적 형태로 렌더링하는 방식. |
| Ephemeral | 대화 이력에 영구적으로 기록되지 않는 일시적 UI 요소. 세션 재연결이나 이력 조회 시 표시되지 않는다. |
1.3. 적용 범위 (Scope)
본 규격은 다음을 정의한다:
- 대화 메시지의 행위자별(User, Agent, System) 시각적 정체성 및 레이아웃 규칙
- 마크다운 콘텐츠 렌더링 컴포넌트 명세
- 실시간 스트리밍 텍스트 렌더링 및 스크롤 제어
- 사고 과정(Thinking), 도구 호출 결과, Code Diff, 태스크 목록의 시각화 규칙
- 에이전트 상태 표시 및 전환 애니메이션
- 슬래시 명령어 자동 완성 UI 및 명령어 실행 버블 렌더링
- 파일 참조 입력(
@트리거 퍼지 검색) 및 인라인 토큰 렌더링 (§3.4) - 시스템 메시지의 생략 금지 원칙 및 드롭다운 패턴
- 비스트리밍 환경(Discord, Slack 등) 적응 규칙
본 규격은 다음을 정의하지 않는다:
- RAWP 제어 평면의 HTTP 엔드포인트 정의 (RAWP 1.0 참조)
- WSS 데이터 프레임의 Envelope 구조 및 이벤트 타입 (RAWP-DPS 1.0 참조)
- 클라이언트-서버 간 인증 및 토큰 교환 절차 (RAWP 1.0 §3 참조)
1.4. 호환성 및 파싱 규약 (Forward Compatibility)
- 알 수 없는 이벤트 무시: 클라이언트의 렌더러는 본 규격에 정의되지 않은
agent.*,tool.*,session.*이벤트 타입을 수신하더라도 UI를 중단하지 않고 조용히 무시해야 한다 (MUST). - 알 수 없는 마크다운 구문 폴백: 렌더러가 지원하지 않는 마크다운 확장 구문을 만나면 원문 텍스트를 그대로 표시해야 한다 (MUST). 렌더링 에러를 발생시키거나 해당 텍스트를 숨겨서는 안 된다.
- 알 수 없는
output_type폴백:tool.invoke.result의output_type이 본 규격에 정의되지 않은 값인 경우, 모노스페이스 텍스트 블록으로 폴백 렌더링해야 한다 (MUST).