13. 프레임 시퀀스 예시
13.1. 초기 세션 수립 흐름
WSS 연결이 최초 수립된 직후, 양측은 능력 협상을 수행하고 클라이언트는 도구 및 명령어 목록을 고지해야 한다 (MUST). 이 초기화 시퀀스가 완료되어야 마스터는 첫 프롬프트를 전송할 수 있다.
[WSS 연결 수립 - RAWP 1.0 §5.3 절차]
Client → Master: session.capabilities (클라이언트 능력 고지)
Master → Client: session.capabilities (마스터 능력 고지)
Client → Master: tool.catalog.publish (사용 가능 도구 목록 고지)
Client → Master: agent.commands.publish (지원 슬래시 명령어 목록 고지)
Client → Master: agent.state.changed (idle 상태 진입 통보)
[초기화 완료 — 마스터는 이 시점부터 control.prompt.request 발송 가능]
순서 규약:
session.capabilities교환은 다른 모든 이벤트에 선행해야 한다 (MUST). 능력 협상이 완료되어야 양측이 어떤 이벤트 타입을 사용할 수 있는지 결정되기 때문이다.tool.catalog.publish와agent.commands.publish는session.capabilities이후, 첫control.prompt.request이전에 발송되어야 한다 (MUST).agent.state.changed(current_state:idle)는 클라이언트가 프롬프트 수신 준비가 완료되었음을 알리는 신호이다 (SHOULD).- 마스터는
agent.state.changed(current_state:idle) 수신 전에control.prompt.request를 발송해서는 안 된다 (SHOULD NOT). 단, 클라이언트가agent.state.changed이벤트를 지원하지 않는 경우(session.capabilities에서 미고지), 마스터는agent.commands.publish수신 완료를 초기화 완료 신호로 간주할 수 있다 (MAY).
13.2. 기본 프롬프트-응답 흐름
Master → Client: control.prompt.request (사용자 입력)
Client → Master: session.turn.start (Turn 시작)
Client → Master: agent.thinking.delta (사고 스트림, 선택적)
Client → Master: agent.thinking.done
Client → Master: agent.text.delta (응답 스트림)
Client → Master: agent.text.delta
Client → Master: agent.text.done (텍스트 완료)
Client → Master: session.turn.end (Turn 종료)
Client → Master: session.usage (사용량 보고)
13.3. 도구 사용 흐름 (승인 포함)
Master → Client: control.prompt.request (사용자: "이 파일을 수정해줘")
Client → Master: session.turn.start
Client → Master: agent.thinking.delta (사고: 어떻게 수정할지 결정)
Client → Master: agent.thinking.done
Client → Master: tool.invoke.request (Edit 도구 호출 요청)
Client → Master: agent.interaction.request (실행 권한 승인 요청)
Master → Client: control.interaction.response (사용자: 승인)
Client → Master: tool.invoke.result (Edit 결과: diff)
Client → Master: agent.text.delta (결과 설명)
Client → Master: agent.text.done
Client → Master: session.turn.end
Client → Master: session.usage
13.4. 병렬 도구 호출 흐름
Client → Master: tool.invoke.request (Bash: git status, parallel_group_id: "pg1")
Client → Master: tool.invoke.request (Bash: git diff, parallel_group_id: "pg1")
Client → Master: tool.invoke.result (git status 결과)
Client → Master: tool.invoke.result (git diff 결과)
13.5. 서브에이전트 위임 흐름
Client → Master: tool.invoke.request (Task: 코드 검색 위임)
Client → Master: tool.invoke.stream (서브에이전트 중간 출력)
Client → Master: tool.invoke.stream
Client → Master: tool.invoke.result (서브에이전트 최종 결과, output_type: agent_result)
13.6. 컨텍스트 압축 흐름
Master → Client: control.session.compact (사용자: /compact 명령)
Client → Master: session.compacted (압축 완료 보고)
Client → Master: session.usage (압축 후 사용량)
13.7. 재연결(Reattach) 후 이력 복구 흐름
[WSS 연결 수립 - RAWP 1.0 §5.3 절차]
Client → Master: session.capabilities (능력 협상)
Master → Client: session.capabilities
Client → Master: session.history (버퍼 이력 전송)
Client → Master: tool.catalog.publish (도구 목록 재고지)
Client → Master: agent.commands.publish (명령어 목록 재고지)
[정상 통신 재개]
13.8. 파일 참조 검색 흐름
[사용자가 입력창에 "@src" 입력 — Edge Node에서 디바운싱 후 Master로 전달]
Master → Client: control.file.search (query: "src", query_id: "q-001")
Client → Master: session.file.candidates (query_id: "q-001", 후보 파일 목록)
[사용자가 추가 타이핑 "@src/auth"]
Master → Client: control.file.search (query: "src/auth", query_id: "q-002")
Client → Master: session.file.candidates (query_id: "q-002", 갱신된 후보 목록)
[사용자가 Enter로 "src/auth.ts" 선택 후 메시지 전송]
Master → Client: control.prompt.request (prompt_text: "분석해줘 <@file:ref_0|src/auth.ts>",
file_references: [{ref_id:"ref_0", path:"src/auth.ts", ...}])