본문으로 건너뛰기

협업

SOP Studio는 실시간 협업 편집을 지원하여 여러 사용자가 동시에 같은 SOP를 작업할 수 있습니다. 변경 사항은 WebSocket 연결을 통해 동기화되며 충돌은 자동으로 해결됩니다.

협업 활성화

협업에는 WebSocket을 지원하는 실행 중인 레지스트리가 필요합니다. WebSocket이 활성화된 상태에서 레지스트리 인스턴스를 시작하세요:

export KP_WEBSOCKET_ENABLED=true
bun run registry/src/index.ts

SOP 공유

  1. 편집기에서 SOP를 엽니다.
  2. 도구 모음에서 "Share" 버튼을 클릭합니다.
  3. 생성된 공유 링크를 복사하거나 에이전트 ID로 협력자를 초대합니다.

접근 수준

수준권한
ViewerSOP에 대한 읽기 전용 접근
Editor노드, 엣지, 속성 수정 가능
Owner공유 및 삭제를 포함한 전체 제어

실시간 편집

여러 사용자가 같은 SOP를 편집할 때:

  • 커서 프레즌스 -- 각 협력자의 커서가 색상 표시와 에이전트 ID와 함께 캔버스에 표시됩니다.
  • 노드 잠금 -- 사용자가 노드를 선택하면 누가 편집 중인지 나타내는 색상 테두리가 표시됩니다. 다른 사용자는 해당 노드가 선택 해제될 때까지 볼 수는 있지만 수정할 수 없습니다.
  • 실시간 업데이트 -- 노드 추가, 삭제, 엣지 변경, 속성 편집이 밀리초 이내에 동기화됩니다.

WebSocket 연결

SOP Studio는 실시간 업데이트를 위해 레지스트리에 지속적인 WebSocket 연결을 유지합니다.

연결 수명 주기

1. Client opens SOP → WebSocket CONNECT to /v1/sop/:id/ws
2. Server sends current state + active collaborators
3. Client sends edits as JSON patches
4. Server broadcasts patches to all connected clients
5. Client closes tab → Server removes from presence list

재연결

연결이 끊어지면 SOP Studio는 지수 백오프로 자동 재연결을 시도합니다:

시도지연
11초
22초
34초
4+8초 (최대)

연결이 끊어진 동안의 편집은 로컬에 대기열로 저장되며 재연결 시 재생됩니다.

충돌 해결

SOP Studio는 충돌 해결을 위해 운영 변환(OT) 전략을 사용합니다:

  • 속성 편집 -- 타임스탬프 순서에 따른 최종 쓰기 우선. 두 사용자가 같은 노드 속성을 동시에 편집하면 가장 최근 편집이 우선합니다.
  • 구조적 변경 -- 노드 추가와 삭제는 교환 가능합니다. 한 사용자가 노드를 추가하는 동안 다른 사용자가 다른 노드를 삭제하면 두 변경 사항이 모두 깔끔하게 적용됩니다.
  • 엣지 충돌 -- 한 사용자가 노드를 삭제하는 동안 다른 사용자가 해당 노드로의 엣지를 만들면 엣지 생성이 거부되고 사용자에게 알림이 전송됩니다.

프레즌스 표시

편집기 상단의 협력자 바에는 다음이 표시됩니다:

  • 각 활성 협력자의 아바타 또는 이니셜
  • 상태를 나타내는 색상 코드 점 (녹색 = 활성, 노란색 = 유휴)
  • 에이전트 ID와 현재 선택 항목이 포함된 툴팁

권한 및 보안

  • 모든 WebSocket 연결은 초기 HTTP 업그레이드 요청을 통한 유효한 API 키가 필요합니다.
  • 협력자는 최소한 read 스코프가 필요합니다. 편집에는 write 스코프가 필요합니다.
  • SOP 가시성 설정 (private, org, network)이 공유 링크에 접근할 수 있는 사람을 제어합니다.
  • WebSocket 메시지는 REST API에서 사용되는 것과 동일한 Zod 스키마로 유효성 검사됩니다.