5. 시스템 메시지 (System Message)
시스템 메시지의 설계 목표는 대화의 맥락과 상태를 빠짐없이, 직관적으로 전달하는 것이다. 시스템 메시지는 프로토콜 또는 클라이언트가 생성한 상태 안내로, 대화의 두 참여자(User, Agent) 사이의 메타 정보를 전달한다.
5.1. 레이아웃 원칙: 중앙 정렬, 생략 금지
중앙 정렬: 시스템 메시지는 대화 영역의 수평 중앙에 정렬해야 한다 (MUST).
내용 생략 절대 금지 (No Ellipsis, No Truncation): 시스템 메시지의 텍스트는 어떠한 경우에도 말줄임표나 텍스트 잘림으로 생략되어서는 안 된다 (MUST NOT).
짧고 직관적인 메시지: 시스템 메시지의 본문은 최대한 짧고 직관적으로 작성해야 한다 (MUST). 예: ⏹ 응답이 중지되었습니다, ⚠ 세션 연결이 끊어졌습니다.
긴 내용의 드롭다운 처리: 시스템 메시지가 한 줄로 표현하기 어려운 상세 정보를 포함하는 경우 다음의 드롭다운 패턴을 적용해야 한다 (MUST):
- 요약 행: 항상 노출되는 한 줄의 핵심 메시지. 예:
⚠ 도구 실행 실패 — 상세 보기 ▾ - 상세 영역: 요약 행 하단에 접힌 상태로 배치. 사용자가 클릭 시 펼쳐져 전체 내용을 표시한다. 펼침 상태에서도 모든 텍스트가 완전히 노출되어야 하며 (MUST), 내부 스크롤이나 추가 생략을 적용해서는 안 된다 (MUST NOT).
- 펼침/접힘 토글: 요약 행 우측에 화살표(▾/▴)를 배치하여 상세 영역의 존재를 시각적으로 암시한다 (MUST).
시각적 비중 최소화: 시스템 메시지는 사용자 메시지나 에이전트 응답보다 시각적 비중이 낮아야 한다 (SHOULD). 작은 폰트 크기, 연한 텍스트 색상, 배경색 없음 등으로 존재감을 줄이되, 완전히 보이지 않을 정도로 숨겨서는 안 된다.
반응형 너비 확보: 시스템 메시지 컨테이너의 가용 너비는 대화 영역 전체 폭의 60% 이상을 확보해야 한다 (MUST). 최대 너비는 90% 이내로 제한해야 한다 (SHOULD). 뷰포트 너비가 480px 이하인 환경에서는 좌우 여백을 최소화(예: 좌우 각 8~12px)하여 텍스트 영역을 우선 확보해야 한다 (SHOULD). 드롭다운 상세 영역은 요약 행과 동일한 컨테이너 너비를 유지해야 한다 (MUST).
5.2. 사용자 중지 피드백 (Cancellation Feedback)
사용자가 중지 버튼을 눌러 진행 중인 Turn을 취소하면(control.prompt.cancel 발송), 클라이언트는 대화 이력에 시스템 메시지를 삽입하여 취소가 실행되었음을 명시적으로 기록해야 한다 (MUST). 이는 대화 이력에 영구적으로 남는 항목이다.
렌더링 규격: §5.1의 레이아웃 원칙에 따라 중앙 정렬, 연한 텍스트, 배경색 없음으로 표시한다. 간결한 메시지(예: ⏹ 응답이 중지되었습니다)를 사용한다.
삽입 위치 및 타이밍: 에이전트의 마지막 출력 바로 아래에 삽입해야 한다 (MUST). control.prompt.cancel 발송 직후 즉시 표시하여 사용자에게 지체 없이 피드백해야 한다 (SHOULD).
부분 응답 보존: 중지 이전까지 수신된 agent.text.delta 텍스트는 삭제하지 않고 그대로 유지해야 한다 (MUST).
에이전트 상태 정리와의 관계: 시스템 메시지가 삽입되면, §4.7의 에이전트 상태 표시줄은 즉시 제거되어야 한다 (MUST).
5.3. 에러 및 경고 메시지
에이전트 에러(agent.error), 세션 에러(session.error), 연결 단절, 토큰 만료 등의 시스템 이벤트는 시스템 메시지로 표시한다.
심각도별 시각 차등:
| 심각도 | 시각 표현 | 예시 |
|---|---|---|
info |
기본 시스템 메시지 스타일 (연한 텍스트) | ℹ 세션이 재연결되었습니다 |
warning |
주황/노랑 계열 아이콘, 텍스트는 기본 색상 유지 | ⚠ 연결이 불안정합니다 |
fatal |
빨강 계열 아이콘, 텍스트도 강조 색상 적용 | ❌ 세션이 비정상 종료되었습니다 |
에러 상세 정보: 에러 메시지에 기술적 상세가 포함되는 경우, §5.1의 드롭다운 패턴을 적용하여 요약 행 + 접이식 상세 영역으로 구성한다 (MUST).