1.0.1 ko public

스펙

RAWP-DPS

Data processing specification for RAWP integrations.

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 발송 가능]

순서 규약:

  1. session.capabilities 교환은 다른 모든 이벤트에 선행해야 한다 (MUST). 능력 협상이 완료되어야 양측이 어떤 이벤트 타입을 사용할 수 있는지 결정되기 때문이다.
  2. tool.catalog.publishagent.commands.publishsession.capabilities 이후, 첫 control.prompt.request 이전에 발송되어야 한다 (MUST).
  3. agent.state.changed(current_state: idle)는 클라이언트가 프롬프트 수신 준비가 완료되었음을 알리는 신호이다 (SHOULD).
  4. 마스터는 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", ...}])

참조