export type Environment = 'mac' | 'windows' | 'ubuntu' | 'browser'; export type Button = 'left' | 'right' | 'wheel' | 'back' | 'forward'; import type { RunContext } from './runContext'; import { Expand, SnakeToCamelCase } from './types/helpers'; import type { ComputerAction } from './types/protocol'; type Promisable = T | Promise; /** * Interface to implement for a computer environment to be used by the agent. */ interface ComputerBase { /** * Optional display environment metadata. * Required when targeting preview computer tool wire formats. */ environment?: Environment; /** * Optional display dimensions metadata. * Required when targeting preview computer tool wire formats. */ dimensions?: [number, number]; initRun?(runContext?: RunContext): Promisable; screenshot(runContext?: RunContext): Promisable; click(x: number, y: number, button: Button, runContext?: RunContext): Promisable; doubleClick(x: number, y: number, runContext?: RunContext): Promisable; scroll(x: number, y: number, scrollX: number, scrollY: number, runContext?: RunContext): Promisable; type(text: string, runContext?: RunContext): Promisable; wait(runContext?: RunContext): Promisable; move(x: number, y: number, runContext?: RunContext): Promisable; keypress(keys: string[], runContext?: RunContext): Promisable; drag(path: [number, number][], runContext?: RunContext): Promisable; } type ActionNames = SnakeToCamelCase; /** * Interface representing a fully implemented computer environment. * Combines the base operations with a constraint that no extra * action names beyond those in `ComputerAction` are present. */ export type Computer = Expand, never>>; export {};