import { ControlCommand } from '../../core/ui-control-commands';
import { DeviceClient } from '../device-client';
import { UiControllerClientConnectionState } from '../ui-controller-client-connection-state';
export type AndroidKeyboardMode = 'input-text' | 'adb-keyboard';
export interface AndroidAdbClientArgs {
    /** Select a specific device by its adb serial. Defaults to the first device. */
    readonly id?: string;
    /** Path to the `adb` executable. Defaults to `adb` (must be on PATH). */
    readonly adbPath?: string;
    /** Delay applied after each action, in milliseconds. Defaults to `0`. */
    readonly actionDelayInMs?: number;
    /**
     * How text is typed. `input-text` uses `adb shell input text` (ASCII, no
     * setup). `adb-keyboard` uses the ADBKeyboard IME broadcast for full Unicode
     * support (requires ADBKeyboard installed and set as the default IME).
     * Defaults to `input-text`.
     */
    readonly keyboard?: AndroidKeyboardMode;
}
/**
 * Drives an Android device directly via `adb`, implementing {@link DeviceClient}
 * so it is interchangeable with the desktop AgentOS gRPC client. Replaces the
 * legacy UI Controller's WebSocket/adbkit path: every operation is a plain
 * `adb` invocation, so no separate controller process or binary is required.
 */
export declare class AndroidAdbClient implements DeviceClient {
    private args;
    private static readonly EXEC_MAX_BUFFER;
    connectionState: UiControllerClientConnectionState;
    private readonly adbPath;
    private readonly keyboard;
    private readonly actionDelayInMs;
    private deviceId;
    private screenWidth;
    private screenHeight;
    private mousePosition;
    constructor(args?: AndroidAdbClientArgs);
    private exec;
    private shell;
    private listDevices;
    private resolveDeviceId;
    private updateScreenSize;
    connect(): Promise<UiControllerClientConnectionState>;
    disconnect(): void;
    setActiveDisplay(): Promise<void>;
    private requireConnected;
    private delay;
    requestControl(controlCommand: ControlCommand): Promise<void>;
    private runAction;
    private typeText;
    requestScreenshot(): Promise<string>;
    getStartingArguments(): Promise<Record<string, string | number | boolean>>;
}
