SNA

React hooks

useAgent、useSessionManager、useResponsiveChat の入力と戻り値。

React hooks

React hook は SNA HTTP API を直接使います。デフォルトでは SnaProviderapiUrlsessionId を読みますが、custom routing が必要な host は hook option で override できます。

useAgent(options?)

declare function useAgent(options?: {
  sessionId?: string;
  baseUrl?: string;
  provider?: string;
  permissionMode?: string;
  reasoningLevel?: 0 | 1 | 2 | 3 | 4 | 5;
  providerOptions?: Record<string, unknown>;
  onEvent?: (event: AgentEvent) => void;
  onThinking?: (event: AgentEvent) => void;
  onAssistant?: (event: AgentEvent) => void;
  onToolResult?: (event: AgentEvent) => void;
  onComplete?: (event: AgentEvent) => void;
  onError?: (event: AgentEvent) => void;
  onInit?: (event: AgentEvent) => void;
}): UseAgentResult;

Returns:

{
  connected: boolean;
  alive: boolean;
  start: (prompt?: string) => Promise<any>;
  send: (message: string) => Promise<any>;
  kill: () => Promise<void>;
  completion: (opts: {
    prompt: string;
    model?: string;
    systemPrompt?: string;
    reasoningLevel?: 0 | 1 | 2 | 3 | 4 | 5;
    providerOptions?: Record<string, unknown>;
  }) => Promise<any>;
}

Options

FieldDefault説明
sessionIdcontext sessionId接続する agent session。
baseUrl${apiUrl}/agentagent HTTP API base URL。
providerclaude-codestart/completion に使う runtime id。
permissionModeruntime defaulttool permission mode。
reasoningLevelruntime defaultruntime-neutral reasoning effort。
providerOptionsnoneランタイム別 option。Codex の serviceTierprofileconfig などを渡します。

動作

項目説明
Event transport/agent/events?session=<id>&since=<cursor>EventSource を開きます。
Cursor 処理先に /agent/status を読み、現在の event count から始めるため、initial mount では過去 event を skip します。
ReconnectSSE error が起きると stream を閉じ、3000ms 後に再接続します。
Runtime defaultprovider のデフォルトは claude-code です。
Session defaultsessionIdSnaContext から取得します。SnaProvider のデフォルトは default です。
alive初期化時に /agent/status から設定し、start または send が local で成功すると optimistic に true にします。

Methods

MethodHTTP routeNotes
start(prompt?)POST /agent/start?session=<id>providerpromptpermissionModereasoningLevelproviderOptions を送ります。
send(message)POST /agent/send?session=<id>Plain text message を送ります。この hook は image attachment を公開しないため、multimodal send には SnaClient.agent.send を使ってください。
kill()POST /agent/kill?session=<id>Runtime を止め、alivefalse にします。
completion(opts)POST /agent/completionHook の runtime と reasoning default を使って stateless completion request を送ります。

Event callbacks

onEvent は parsed AgentEvent をすべて受け取ります。より狭い callback は event type ごとの convenience filter です。

CallbackEvent type
onInitinit
onThinkingthinking
onAssistantassistant
onToolResulttool_result
onCompletecomplete
onErrorerror

この hook は SnaClient を wrap しておらず、WebSocket subscription も使いません。Permission push handling、runOnceStream、message history pagination、WebSocket reconnect resubscription が必要な場合は @sna-sdk/client を使ってください。

useSessionManager(pollInterval?)

declare function useSessionManager(pollInterval?: number): UseSessionManagerResult;

Returns:

{
  sessions: SessionInfo[];
  loading: boolean;
  createSession: (opts?: { label?: string; cwd?: string }) => Promise<string | null>;
  killSession: (id: string) => Promise<void>;
  deleteSession: (id: string) => Promise<void>;
  refresh: () => Promise<void>;
}

pollInterval のデフォルトは 3000 です。Polling を止めたい場合は 0 を渡してください。

MethodRouteNotes
refresh()GET /agent/sessionsSerialized response が変わった場合だけ local state を置き換えます。
createSession(opts?)POST /agent/sessions{ label?, cwd? } を受け取り、新しい session ID または null を返します。
killSession(id)POST /agent/kill?session=<id>Agent process を停止しますが、session record は残します。
deleteSession(id)DELETE /agent/sessions/<id>Server に依頼して session record を削除します。

単純な React state で十分ならこの hook を使ってください。WebSocket snapshot、metadata update、より厳密な command acknowledgement が必要なら SnaClient.sessions を使ってください。

useResponsiveChat()

declare function useResponsiveChat(): { mode: "side-by-side" | "overlay" | "fullscreen" };
WidthModeMeaning
>= 1024pxside-by-sidemain content の横に chat panel を置きます。
768px - 1023pxoverlaycontent の上に chat panel を重ねます。
< 768pxfullscreenchat が viewport 全体を覆います。

目次