aixautobotaixautobot
写新云 aixautobot 文档

架构与节点协议

SDK=节点 / 网关 三层与 /ws/node

┌────────────┐   /ws/node (注册/派发/设备操作RPC)   ┌──────────────────┐
│  backend   │◄─────────────────────────────────────│ aixautobot (SDK) │
│  (网关)     │   /ws/signal · /api/ice (WebRTC)     │  设备发现/驱动/执行 │
│  无 sdk 依赖 │─────────────────────────────────────►│  aixautosdk::core 驱动  │
└─────┬──────┘                                       └────────┬─────────┘
      │ HTTP /api/*                                           │ adb/WDA/sidecar
      ▼                                                       ▼
  前端 / 其它应用                                        Android / iOS / Desktop
  • aixautobot SDK(crate aixautosdk)= 节点:负责真实设备发现、驱动构建、Flow 执行、屏幕镜像。
  • backend = 瘦网关:持久化 + 排队 + 把运行/设备操作转发给拥有该设备的节点;不依赖 SDK
  • 其它应用(含桌面端):像普通客户端一样接入——要么嵌入 aixautosdk crate 直接驱动设备,要么运行 aixautobot node 并通过 backend 操作设备。

节点协议(/ws/node

节点与网关通过单条 WebSocket 双向通信。

节点 → backend:

Hello{token,node_name,devices}HeartbeatRunEvent{run_id,device_id,event}DeviceOpResult{req_id,ok,result,error}CmdResult{req_id,ok,result,error}FridaEvent{run_id,device_id,name,data}DeviceTunnelData{stream_id,b64}DeviceTunnelClose{stream_id}MacEnvEvent{req_id,event}(mac-env 流式进度,eventRunEvent 同构:started/step/log/finished)。

backend → 节点:

Welcome{node_id}Dispatch{run_id,device_id,flow}DeviceOp{req_id,device_id,op}Cancel{run_id}Error,以及设备控制通道消息:AdbExecWdaReqFridaRunFridaCallFridaCancelDeviceTunnelOpen/Data/Close,以及 Mac 环境底座消息:MacEnvSetup{req_id}MacEnvStatus{req_id}MacEnvTeardown{req_id,purge}(仅 macOS 节点执行,其余返回干净的 “not supported on this host”)。

⚠️ 两份 protocol.rsbackend/src/node/protocol.rssdk/aixautosdk/src/node/protocol.rs)无共享 contract crate,靠各自的 round-trip 测试锁形:新增/改动任一消息务必两处一起改AdbExec / WdaReq 默认随节点 node feature 生效;Frida* 仅在节点以 --features frida 构建时真正执行,否则返回 CmdResult{ok:false,error:"frida not enabled…"}

WebRTC 屏幕镜像

节点发起 offer,浏览器作为 viewer 收画面;信令走 /ws/signal,ICE 走 /api/ice。单设备最大查看端由 AIXAUTOSDK_MAX_VIEWERS 控制(默认 4)。详见 设备 / 账号 / 任务 API