import type { TuiFrame, HandshakeHello, HandshakeAck } from '../platform/tui/protocol.js'; export type WsState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting'; export interface WsClientOpts { /** Client version string sent in handshake.hello */ clientVersion: string; /** Optional project for initial handshake */ project?: string | null; /** Called on successful connection after handshake.ack */ onConnected?: (ack: HandshakeAck) => void; /** Called for every parsed frame received */ onFrame?: (frame: TuiFrame) => void; /** Called when connection closes or fails */ onClose?: (reason: string) => void; /** Called when state changes */ onStateChange?: (state: WsState) => void; /** Called when the exponential backoff cap is exceeded (all attempts exhausted) */ onCapExceeded?: () => void; } export declare class WsClient { private _ws; private _address; private _opts; private _state; private _lastSessionId; private _retryCount; private _retryTimer; private _closed; private _sendBuffer; /** Latest handshake ack data */ private _ack; get state(): WsState; get lastSessionId(): string | null; get ack(): HandshakeAck | null; connect(address: string, opts?: WsClientOpts): void; private _doConnect; send(frame: TuiFrame): void; markAck(ack: HandshakeAck): void; markSessionId(id: string): void; markConnected(): void; private _scheduleReconnect; close(): void; private _setState; } export declare function createHandshakeHello(clientVersion: string, resume?: string | null, project?: string | null): HandshakeHello;