# WebSocket Transport

Real-time bidirectional communication with InteractiveSession.

## Basic Setup

```typescript
import { InteractiveSession } from '@robota-sdk/agent-framework';
import { AnthropicProvider } from '@robota-sdk/agent-provider/anthropic';
import { createWsTransport } from '@robota-sdk/agent-transport/ws';
import { WebSocketServer } from 'ws';

const wss = new WebSocketServer({ port: 8080 });
const provider = new AnthropicProvider({ apiKey: process.env.ANTHROPIC_API_KEY });

wss.on('connection', async (ws) => {
  const session = new InteractiveSession({ cwd: process.cwd(), provider });
  const transport = createWsTransport({
    send: (msg) => ws.send(JSON.stringify(msg)),
  });

  session.attachTransport(transport);
  await transport.start();

  ws.on('message', (data) => transport.onMessage(String(data)));
  ws.on('close', () => transport.stop());
});
```

## Message Protocol

### Client → Server

```json
{ "type": "submit", "prompt": "Fix the bug" }
{ "type": "command", "name": "clear" }
{ "type": "abort" }
{ "type": "cancel-queue" }
{ "type": "get-messages" }
{ "type": "get-context" }
```

### Server → Client

```json
{ "type": "text_delta", "delta": "Here is..." }
{ "type": "tool_start", "state": { "toolName": "Read", "isRunning": true } }
{ "type": "complete", "result": { "response": "Done." } }
{ "type": "command_result", "name": "clear", "success": true }
```

## Advanced: Direct Handler

For more control, use `createWsHandler` directly:

```typescript
import { createWsHandler } from '@robota-sdk/agent-transport/ws';

wss.on('connection', (ws) => {
  const { onMessage, cleanup } = createWsHandler({
    session: interactiveSession,
    send: (msg) => ws.send(JSON.stringify(msg)),
  });

  ws.on('message', (data) => onMessage(String(data)));
  ws.on('close', cleanup);
});
```
