/** * Computer Use MCP Client — typed API over MCP protocol. */ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; export interface ToolResult { content: Array<{ type: 'text'; text: string; } | { type: 'image'; data: string; mimeType: string; }>; isError?: boolean; } export type FocusStrategy = 'strict' | 'best_effort' | 'none'; /** Optional window-targeting and focus strategy options for input methods. */ export interface WindowTargetOpts { targetWindowId?: number; focusStrategy?: FocusStrategy; } /** Options for semantic mutating tools — window_id is already required positionally. */ export interface SemanticOpts { focusStrategy?: FocusStrategy; } /** Criteria for find_element — at least one must be present. */ export interface FindElementCriteria { role?: string; label?: string; value?: string; maxResults?: number; } /** A single field for fill_form. */ export interface FillFormField { role: string; label: string; value: string; } export interface ComputerUseClient { listTools(): Promise>; callTool(name: string, args?: Record): Promise; close(): Promise; screenshot(args?: { width?: number; quality?: number; target_app?: string; target_window_id?: number; provider?: 'anthropic' | 'openai' | 'openai-low' | 'gemini' | 'llama' | 'grok' | 'mistral' | 'qwen' | 'nova' | 'deepseek-vl' | 'phi' | 'auto'; }): Promise; zoom(region: [number, number, number, number], quality?: number): Promise; click(x: number, y: number, targetApp?: string, opts?: WindowTargetOpts): Promise; doubleClick(x: number, y: number, targetApp?: string, opts?: WindowTargetOpts): Promise; tripleClick(x: number, y: number, targetApp?: string, opts?: WindowTargetOpts): Promise; rightClick(x: number, y: number, targetApp?: string, opts?: WindowTargetOpts): Promise; middleClick(x: number, y: number, targetApp?: string, opts?: WindowTargetOpts): Promise; moveMouse(x: number, y: number, targetApp?: string, opts?: WindowTargetOpts): Promise; drag(to: [number, number], from?: [number, number], targetApp?: string, opts?: WindowTargetOpts): Promise; mouseDown(x: number, y: number, targetApp?: string, opts?: WindowTargetOpts): Promise; mouseUp(x: number, y: number, targetApp?: string, opts?: WindowTargetOpts): Promise; type(text: string, targetApp?: string, opts?: WindowTargetOpts & { clear?: boolean; pressEnter?: boolean; caretPosition?: 'start' | 'end' | 'idle'; }): Promise; key(combo: string, targetApp?: string, opts?: WindowTargetOpts & { repeat?: number; }): Promise; holdKey(keys: string[], durationSecs: number, targetApp?: string, opts?: WindowTargetOpts): Promise; scroll(x: number, y: number, direction: 'up' | 'down' | 'left' | 'right', amount?: number, targetApp?: string, opts?: WindowTargetOpts): Promise; readClipboard(): Promise; writeClipboard(text: string): Promise; openApp(bundleId: string): Promise; getFrontmostApp(): Promise; listWindows(bundleId?: string): Promise; cursorPosition(): Promise; wait(seconds: number): Promise; listRunningApps(): Promise; hideApp(bundleId: string): Promise; unhideApp(bundleId: string): Promise; getDisplaySize(displayId?: number): Promise; listDisplays(): Promise; getWindow(windowId: number): Promise; getCursorWindow(): Promise; activateApp(bundleId: string, timeoutMs?: number): Promise; activateWindow(windowId: number, timeoutMs?: number): Promise; getUiTree(windowId: number, maxDepth?: number): Promise; getFocusedElement(): Promise; findElement(windowId: number, criteria: FindElementCriteria): Promise; clickElement(windowId: number, role: string, label: string, opts?: SemanticOpts): Promise; setValue(windowId: number, role: string, label: string, value: string, opts?: SemanticOpts): Promise; pressButton(windowId: number, label: string, opts?: SemanticOpts): Promise; selectMenuItem(bundleId: string, menu: string, item: string, submenu?: string): Promise; listMenuBar(bundleId: string): Promise; fillForm(windowId: number, fields: FillFormField[], opts?: SemanticOpts): Promise; runScript(language: 'applescript' | 'javascript' | 'powershell', script: string, timeoutMs?: number): Promise; getAppDictionary(bundleId: string, suite?: string): Promise; getToolGuide(taskDescription: string): Promise; getAppCapabilities(bundleId: string): Promise; listSpaces(): Promise; getActiveSpace(): Promise; createAgentSpace(): Promise; moveWindowToSpace(windowId: number, spaceId: number): Promise; removeWindowFromSpace(windowId: number, spaceId: number): Promise; destroySpace(spaceId: number): Promise; getToolMetadata(toolName: string): Promise; filesystem(mode: string, path: string, opts?: Record): Promise; processKill(mode: 'list' | 'kill', opts?: { name?: string; pid?: number; force?: boolean; }): Promise; registry(mode: string, path: string, opts?: { name?: string; value?: string; type?: string; }): Promise; notification(title: string, message: string, appId?: string): Promise; multiSelect(locs?: [number, number][], opts?: { labels?: string[]; pressCtrl?: boolean; targetApp?: string; }): Promise; multiEdit(locs?: [number, number, string][], opts?: { labels?: [string, string][]; targetApp?: string; }): Promise; scrape(url: string, opts?: { query?: string; useDom?: boolean; }): Promise; resizeWindow(opts: { windowName?: string; windowId?: number; windowSize?: [number, number]; windowLoc?: [number, number]; }): Promise; snapshot(opts?: { useVision?: boolean; useAnnotation?: boolean; gridLines?: [number, number]; display?: number[]; width?: number; targetApp?: string; }): Promise; } export declare function connectStdio(command: string, args: string[], cwd?: string): Promise; export declare function connectInProcess(server: McpServer): Promise;