export interface ScreenInfo { id: string; name: string; x: number; y: number; width: number; height: number; scaleFactor: number; } export type InputMessageType = 'mouseMove' | 'mouseMoveRelative' | 'mouseDown' | 'mouseUp' | 'leftClick' | 'rightClick' | 'doubleClick' | 'scrollUp' | 'scrollDown' | 'scrollLeft' | 'scrollRight' | 'keyboardPressKey' | 'keyboardReleaseKey' | 'keyboardDownKey' | 'keyboardType'; export interface InputMessage { type: InputMessageType; x?: number; y?: number; dx?: number; dy?: number; button?: 'left' | 'right'; key?: string[]; amount?: number; screenId?: string; } export type RemoteDesktopCapability = 'remote-desktop:view' | 'remote-desktop:mouse' | 'remote-desktop:keyboard' | 'remote-desktop:file-upload' | 'remote-desktop:clipboard' | 'remote-desktop:scroll'; export interface RemoteDesktopMessage { type: string; sessionId: string; data?: unknown; } export interface ScreenshotResult { data: Buffer; width: number; height: number; } export interface TileRect { x: number; y: number; w: number; h: number; data: Buffer; } export type CaptureFrame = { kind: "full"; data: Buffer; width: number; height: number; } | { kind: "partial"; width: number; height: number; tiles: TileRect[]; }; export type RemoteDesktopQuality = "sd" | "hd" | "original"; export interface StartResult { sessionId: string; screens: ScreenInfo[]; permissions: RemoteDesktopCapability[]; } export type ConnectionState = 'idle' | 'connecting' | 'authenticating' | 'connected' | 'disconnected' | 'error'; export interface DesktopWindowInfo { hwnd: string; title: string; pid?: number; processName?: string; } export interface OpenWithApp { name: string; command: string; isDefault?: boolean; } export interface DesktopFileEntry { name: string; path: string; type: "file" | "directory" | "symlink" | "other"; size?: number; mtime?: number; isHidden?: boolean; } export interface AppInfo { pid: number; name: string; isForeground: boolean; windowTitle?: string; windowBounds?: { x: number; y: number; width: number; height: number; }; } export interface UIElement { id: string; role: string; name?: string; value?: string; automationId?: string; fingerprint?: string; bounds?: { x: number; y: number; width: number; height: number; }; actions?: string[]; children?: UIElement[]; isFocused?: boolean; isEditable?: boolean; } export interface FlatNode { path: string; role: string; name?: string; value?: string; aid?: string; x: number; y: number; w: number; h: number; actions?: string[]; fingerprint?: string; } export interface StateDiff { added: UIElement[]; removed: UIElement[]; changed: Array<{ before: UIElement; after: UIElement; }>; changedSummary: string; } export interface ActionVerification { stateBefore: string; stateAfter: string; changed: boolean; diff?: StateDiff; toastDetected?: boolean; windowChanged?: boolean; summary: string; } export interface ActionResult { ok: boolean; elementId?: string; x?: number; y?: number; verification?: ActionVerification; }