from pydantic import BaseModel, Field from typing import Optional, List class ClickRequest(BaseModel): """点击操作请求模型""" x: int = Field(..., description="X坐标", ge=0) y: int = Field(..., description="Y坐标", ge=0) duration: Optional[int] = Field(100, description="点击持续时间(毫秒)", ge=0) class InputRequest(BaseModel): """输入操作请求模型""" text: str = Field(..., description="要输入的文本") clear_first: Optional[bool] = Field(False, description="是否先清空输入框") class ScreenshotResponse(BaseModel): """截图响应模型""" image_data: str = Field(..., description="Base64编码的图片数据") format: str = Field("png", description="图片格式") width: int = Field(..., description="图片宽度") height: int = Field(..., description="图片高度") class InstallRequest(BaseModel): """安装APK请求模型""" apk_path: str = Field(..., description="APK文件路径") package_name: Optional[str] = Field(None, description="包名") class InstallResponse(BaseModel): """安装APK响应模型""" success: bool = Field(..., description="安装是否成功") message: str = Field(..., description="安装结果消息") package_name: Optional[str] = Field(None, description="包名") class LogcatRequest(BaseModel): """日志请求模型""" package_name: Optional[str] = Field(None, description="指定包名过滤") level: Optional[str] = Field("V", description="日志级别") max_lines: Optional[int] = Field(100, description="最大行数") class LogcatResponse(BaseModel): """日志响应模型""" logs: List[str] = Field(..., description="日志内容列表") total_lines: int = Field(..., description="总行数") class ADBDeviceInfo(BaseModel): """ADB设备信息模型""" device_id: str = Field(..., description="设备ID") model: str = Field(..., description="设备型号") android_version: str = Field(..., description="Android版本") sdk_version: int = Field(..., description="SDK版本") status: str = Field(..., description="设备状态")