/** * WebSocketClientTransport — connects to a skaile serve WebSocket server. * * Handles connection, reconnection with exponential backoff, heartbeat, * and JSON serialization. Implements ClientTransport from @skaile/workspaces/types. */ import type { AgentCommand, AgentEvent, ClientTransport } from "@skaile/workspaces/types"; /** * Options for {@link WebSocketClientTransport}. * * @param url - WebSocket server URL to connect to (e.g. `ws://localhost:8080`). * @param reconnect - Exponential-backoff reconnect policy. Defaults: 5 attempts, 1s base, 30s max. * @param heartbeatMs - Interval in milliseconds between WebSocket ping frames. Default: 30 000. * @param connectTimeoutMs - Maximum time in milliseconds to wait for the initial handshake. Default: 10 000. * @param onLog - Optional callback for internal log lines (connection state, errors). * @param auth - Optional bearer token sent via the WebSocket subprotocol; must * match the server's `authToken` or the handshake is rejected with HTTP 401. * * @docLink packages/transport/dev-guide#websocket-client-transport */ export interface WebSocketClientOptions { url: string; reconnect?: { maxAttempts?: number; baseMs?: number; maxMs?: number; }; heartbeatMs?: number; connectTimeoutMs?: number; onLog?: (line: string) => void; auth?: string; } /** * `ClientTransport` implementation that connects to a skaile agent server over WebSocket. * * Uses the browser-standard `WebSocket` API so it works in both Bun and browser * environments. On an unintentional disconnect it automatically retries with * exponential backoff (default: 5 attempts, 1s base, 30s max). A periodic ping * keeps the connection alive through NAT and load-balancer idle timeouts. All * `AgentCommand` / `AgentEvent` messages are JSON-serialised on the wire. * * @example * ```ts * const transport = new WebSocketClientTransport({ url: 'ws://localhost:8080' }); * await transport.connect(); * transport.send({ type: 'prompt', prompt: 'Hello' }); * ``` * * @docLink packages/transport/dev-guide#websocket-client-transport */ export declare class WebSocketClientTransport implements ClientTransport { private ws; private readonly url; private readonly reconnectConfig; private readonly heartbeatMs; private readonly connectTimeoutMs; private readonly log; private readonly subprotocols; private heartbeatTimer; private reconnectAttempts; private intentionalClose; private readonly messageHandlers; private readonly disconnectHandlers; constructor(options: WebSocketClientOptions); connect(): Promise; disconnect(): Promise; send(command: AgentCommand): void; onMessage(handler: (event: AgentEvent) => void): () => void; onDisconnect(handler: () => void): () => void; get connected(): boolean; private doConnect; private scheduleReconnect; private startHeartbeat; private clearHeartbeat; } //# sourceMappingURL=client.d.ts.map