1.0.1 ko public

스펙

RAWP

Current RAWP specification.

5. Phase 3: 세션 라이프사이클 및 연결 (Session & I/O)

세션 생명주기: INITRUNNINGDETACHED(소켓 단절 시) → TERMINATED

5.1. 세션 초기화 및 재연결 (Session Initialization)

신규 에이전트 실행 또는 DETACHED 상태 프로세스에 WSS 바인딩을 위한 티켓을 발급한다.

Endpoint: POST /v1/session/init (Local Client 제공)

Request:

{
  "session_id": "String (필수, UUID v4)",
  "agent_name": "String (reattach: false 시 필수)",
  "workspace_path": "String (reattach: false 시 필수)",
  "ticket": "String (필수, WSS 연결 인증용 난수 티켓)",
  "reattach": "Boolean (선택, 기본값 false. true 시 기존 구동 중 프로세스 바인딩)",
  "last_sync_timestamp": "String (선택, ISO 8601)",
  "last_message_id": "String (선택, UUID)"
}

제약 조건: reattach: true이나 해당 session_id가 존재하지 않거나 종료된 경우 404 Not Found 반환 (MUST).

Config 바인딩 제약 조건: 마스터 서버는 reattach: false로 세션을 초기화할 때, §4.1.8에 따라 양쪽 Config Scope(limits, capabilities)의 최신 스냅샷을 해당 세션에 바인딩해야 한다 (MUST). 양쪽 스코프의 초기 동기화(§4.1.2)가 완료되지 않은 클라이언트에 대해서는 세션 초기화를 시도해서는 안 된다 (MUST NOT).

5.2. 세션 명시적 종료 (Session Termination)

Endpoint: DELETE /v1/session/{session_id} (Local Client 제공)

제약 조건: 클라이언트는 자식 프로세스에 SIGTERM을 전송하고, 5초 내 종료되지 않으면 SIGKILL로 강제 종료 후 메모리 버퍼 및 소켓을 파기해야 한다 (MUST).

5.3. WebSocket 연결 수립 (WebSocket Upgrade)

Connection URI: wss://{client_address}/v1/ws/stream?ticket={ticket}&session_id={session_id}

인가 절차 (MUST):

  1. 클라이언트는 HTTP Upgrade 요청 수신 시 HTTP 헤더의 Sec-WebSocket-Protocol을 확인해야 한다. RAWP-DPS 1.0 적용 시 rawp-dps-1.0을 우선 수락하고, 미지원 시 rawp-1.0으로 폴백한다. 양측 모두 미지원 시 426 또는 400을 반환해야 한다.
  2. Query Parameter의 ticketsession_id를 검증하고, 만료되거나 불일치 시 401 Unauthorized를 반환 후 연결을 거절한다.
  3. 사용된 티켓은 1회 사용 시 즉시 무효화(Burn)해야 한다.

변경 사항: RAWP-DPS 1.0 적용에 따라 Sec-WebSocket-Protocol 협상 절차가 확장되었다. rawp-dps-1.0이 우선이며, 레거시 호환을 위해 rawp-1.0도 수락 가능하다. 자세한 프로토콜 협상 규칙은 RAWP-DPS 1.0 §1.3을 참조한다.

참조