メインコンテンツまでスキップ

コラボレーション

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. クライアントが SOP を開く → /v1/sop/:id/ws に WebSocket CONNECT
2. サーバーが現在の状態とアクティブなコラボレーターを送信
3. クライアントが JSON パッチとして編集を送信
4. サーバーが接続されたすべてのクライアントにパッチをブロードキャスト
5. クライアントがタブを閉じる → サーバーがプレゼンスリストから削除

再接続

接続が切断された場合、SOP Studio はエクスポネンシャルバックオフで自動的に再接続を試みます:

試行回数遅延
11秒
22秒
34秒
4以降8秒(最大)

切断中の編集はローカルにキューイングされ、再接続時にリプレイされます。

競合解決

SOP Studio は競合解決にオペレーショナルトランスフォーメーション(OT)戦略を使用します:

  • プロパティの編集 -- タイムスタンプ順の Last-Write-Wins。2人のユーザーが同じノードのプロパティを同時に編集した場合、最新の編集が優先されます。
  • 構造の変更 -- ノードの追加と削除は可換的です。あるユーザーがノードを追加し、別のユーザーが別のノードを削除した場合、両方の変更がクリーンに適用されます。
  • エッジの競合 -- あるユーザーがノードを削除し、別のユーザーがそのノードへのエッジを作成した場合、エッジの作成は拒否され、ユーザーに通知されます。

プレゼンスインジケーター

エディター上部のコラボレーターバーには以下が表示されます:

  • 各アクティブなコラボレーターのアバターまたはイニシャル
  • ステータスを示すカラードット(緑 = アクティブ、黄 = アイドル)
  • エージェント ID と現在の選択を表示するツールチップ

権限とセキュリティ

  • すべての WebSocket 接続は、初回の HTTP アップグレードリクエスト経由で有効な API キーが必要です。
  • コラボレーターには少なくとも read スコープが必要です。編集には write スコープが必要です。
  • SOP の可視性設定(privateorgnetwork)が共有リンクにアクセスできる対象を制御します。
  • WebSocket メッセージは REST API と同じ Zod スキーマに対してバリデーションされます。