export interface DisplayGeometry { id?: number displayId?: number width: number height: number scaleFactor: number originX: number originY: number isPrimary?: boolean name?: string label?: string } export interface ScreenshotResult { base64: string width: number height: number displayWidth: number displayHeight: number displayId?: number originX: number originY: number } export interface FrontmostApp { bundleId: string displayName: string } export interface RunningApp { bundleId: string displayName: string } export interface InstalledApp { bundleId: string displayName: string path: string iconDataUrl?: string } export interface ResolvePrepareCaptureResult extends ScreenshotResult { hidden: string[] display: DisplayGeometry resolvedDisplayId?: number captureError?: string } export interface ComputerExecutor { capabilities: { screenshotFiltering: 'native' | 'none' platform: 'darwin' | 'win32' hostBundleId: string teachMode?: boolean } prepareForAction(allowlistBundleIds: string[], displayId?: number): Promise previewHideSet(allowlistBundleIds: string[], displayId?: number): Promise> getDisplaySize(displayId?: number): Promise listDisplays(): Promise findWindowDisplays(bundleIds: string[]): Promise> resolvePrepareCapture(opts: { allowedBundleIds: string[] preferredDisplayId?: number autoResolve: boolean doHide?: boolean }): Promise screenshot(opts: { allowedBundleIds: string[]; displayId?: number }): Promise zoom( regionLogical: { x: number; y: number; w: number; h: number }, allowedBundleIds: string[], displayId?: number, ): Promise<{ base64: string; width: number; height: number }> key(keySequence: string, repeat?: number): Promise holdKey(keyNames: string[], durationMs: number): Promise type(text: string, opts: { viaClipboard: boolean }): Promise click( x: number, y: number, button: 'left' | 'right' | 'middle', count: 1 | 2 | 3, modifiers?: string[], ): Promise drag( from: { x: number; y: number } | undefined, to: { x: number; y: number }, ): Promise moveMouse(x: number, y: number): Promise scroll(x: number, y: number, deltaX: number, deltaY: number): Promise mouseDown(): Promise mouseUp(): Promise getCursorPosition(): Promise<{ x: number; y: number }> getFrontmostApp(): Promise appUnderPoint(x: number, y: number): Promise<{ bundleId: string; displayName: string } | null> listInstalledApps(): Promise getAppIcon?(path: string): Promise listRunningApps(): Promise openApp(bundleId: string): Promise readClipboard(): Promise writeClipboard(text: string): Promise }