SNA

Client transport と SnaClient

SnaClient constructor、connection lifecycle、low-level request/push API。

Client transport と SnaClient

SnaClient は 1 つの baseUrl から HTTP endpoint と WebSocket endpoint を導出します。状態変更と CRUD には HTTP、push event と permission request には WebSocket、長時間の one-shot stream には SSE を使います。

new SnaClient(options)

Signature

const client = new SnaClient({
  baseUrl: string;
  authToken?: string;
  ws?: boolean;
  http?: boolean;
  reconnect?: boolean;
  reconnectDelay?: number;
  maxReconnectAttempts?: number;
});

Options

FieldRequiredDefaultDescription
baseUrlyesnoneSNA server のアドレスです。localhost:3099http://localhost:3099https://example.com を指定できます。
authTokennononeSNA server が発行した bearer token です。HTTP は Authorization header、WebSocket は browser 互換性のため /ws?token=... を使います。SDK app では通常 handle.connection 経由で受け取ります。
wsnotrueWebSocket transport を有効にします。agent.subscribeonEvent、permission push に必要です。
httpnotrueHTTP transport を有効にします。session CRUD と agent lifecycle command に ordering guarantee を提供します。
reconnectnotrueWebSocket 接続が切れたときに自動 reconnect を試みます。
reconnectDelayno2000reconnect 試行間の待機時間です。単位は ms です。
maxReconnectAttemptsno0最大 reconnect 回数です。0 は無制限を意味します。

Derived endpoints

baseUrlHTTPWebSocket
localhost:3099http://localhost:3099ws://localhost:3099/ws
https://sna.example.comhttps://sna.example.comwss://sna.example.com/ws

認証動作

authToken がある場合、HTTP と SSE request は Authorization: Bearer <authToken> を送ります。WebSocket 接続は browser runtime でも upgrade を認証できるように、同じトークンを ?token=<authToken> として付けます。baseUrlauthToken がずれないよう、 launcher の handle.connection object を渡すのが安全です。

401 はトークンがない、またはサーバーと一致しないことを意味します。403 は request が server の allowedOrigins にない browser Origin から来た ことを意味します。

client.connect()

WebSocket 接続を開始します。すでに接続中または接続済みの場合は no-op です。接続直後に server が sessions.snapshot を push することがあるため、session state が必要な UI では connect の前に sessions.onSnapshot を登録してください。

client.sessions.onSnapshot((sessions) => setSessions(sessions));
client.connect();

client.disconnect()

WebSocket を閉じ、自動 reconnect を停止します。応答待ちの low-level request promise は disconnected error で reject されます。

client.status / client.connected

client.status: "connecting" | "connected" | "disconnected"
client.connected: boolean

Reconnect banner、disabled button、loading state の表示に使います。

client.onConnectionStatus(callback)

const unsubscribe = client.onConnectionStatus(
  (status: "connecting" | "connected" | "disconnected") => void,
);

client.request(type, payload?)

await client.request<T = Record<string, unknown>>(
  type: string,
  payload?: Record<string, unknown>,
): Promise<T>

raw WebSocket request を送り、同じ rid を持つ response を待ちます。通常のアプリケーションでは直接使わず、型付きの client.sessionsclient.agentclient.chat namespace を使ってください。

client.onPush(type, handler)

const unsubscribe = client.onPush(
  type: string,
  handler: (message: WsMessage) => void,
);

sessions.snapshotagent.eventpermission.request など、server が request なしで送る push message を直接購読します。通常は sessions.onSnapshotagent.onEventagent.onPermissionRequest を優先してください。

Transport 選択基準

TransportMethodsGuarantee
HTTPsessions.create/update/remove, agent.start/send/kill/restart/resume/interrupt, getStatus, setModel, setPermissionModeserver operation が commit されたあと promise が resolve されます。
WebSocketconnect, request, onPush, agent.subscribe, agent.onEvent, permission subscriptionspush delivery と reconnect resubscription を提供します。
SSEagent.runOnceStream, agent.streamEventsbrowser と proxy に扱いやすい HTTP-based streaming です。

目次