设备状态监控
实时展示所有设备状态、当前执行任务及进度
设备列表
| 设备 | 型号 | 任务状态 | 前台App | 进度 | 当前任务 | 当前动作 | 最近错误 | 操作 |
|---|
异常汇总
任务运行概况
任务
任务计划定时调度与自定义动作复用管理
| ID | 任务名 | 类型 | 启用 | 目标 | 调度 | 下次运行 | 重试 | 操作 |
|---|
把常用步骤打包成可复用的动作,拖入任务步骤编辑器使用;也可在任务编辑器里"☑选中步骤→打包"生成
| 图标 | 动作名 | 步骤数 | 创建时间 | 操作 |
|---|
步骤默认值:新建步骤时预填这套参数(只影响之后新建的步骤,已有步骤不动;
单步想改就打开那个任务改那一步)。
录制动作:在设备画面上点/划/按键,自动翻译成步骤 —— 既能存成可复用的「自定义动作」, 也能只取一个手势回填到滑动步骤上(步骤编辑器里滑动那一步有「录制手势」按钮)。
录制动作:在设备画面上点/划/按键,自动翻译成步骤 —— 既能存成可复用的「自定义动作」, 也能只取一个手势回填到滑动步骤上(步骤编辑器里滑动那一步有「录制手势」按钮)。
加载中…
📺 实时画面
运行任务时自动跟随操作的设备;
也可手动选择设备观看
也可手动选择设备观看
1️⃣ 说清楚要做什么
AI 会自己在设备上探索,把走通的路径写成任务步骤
2️⃣ 选一台空闲设备
有任务在跑的设备不可选(AI 不与任务抢设备)
3️⃣ 任务设置(可选,留空由 AI 判断)
▸
探索回放
AI 在设备上的每一步(看屏 / 读元素树 / 点按验证)会实时显示在这里。
日志查看
原始文本日志 + 任务步骤明细(结构化,可按设备/任务/时间过滤)
最近运行概览
| 开始 | 设备 | 任务 | 步骤数 | 失败 |
|---|
| 时间 | 设备 | 任务 | 步骤 | 标签 | 类型 | 结果 | 耗时 | 详情 |
|---|
用户管理
管理后台登录用户
| ID | 用户名 | 管理员 | 权限 | 操作 |
|---|
工具
管理员专用:设备工具与应用管理集合
实现:ClipInject APK 透明 Activity 写入剪贴板(Android 10+ 可用,u2 setClipboard 在 Android 12/13 会被系统丢弃);设备需先安装 com.example.clipinject,注入后自动读回比对验证。
点击"刷新设备"加载
选中目标设备后,命令里的
-s <设备> 自动附加,直接写
shell ls /sdcard 即可。离线设备也可选,用"重连设备"恢复。
禁止 kill-server / disconnect(会中断共享的 adb transport,导致设备连接全部重建)。(执行命令后输出显示在这里)
| 主机名 | 显示名 | IP | 系统 | 在线 | 授权 | 密钥过期 | 操作 |
|---|---|---|---|---|---|---|---|
| 点击"刷新设备"加载 | |||||||
"设置IP"可修改设备 IPv4(会断开当前连接,平台 serial 随之变化,需同步设备池);"密钥不过期"= 关闭设备密钥验证,设备不会被定期踢下线;auth key 生成后只显示一次,请立即复制。
| 应用名 | 包名 | 版本 | 大小 | 上传时间 | 操作 |
|---|
📱 设备端应用商店(Agent 直连安装)
设备上装的 Agent 自己来拉这份应用清单 → 在手机上选一个 → 自己下载 → 自己调系统安装器安装。
因为安装由设备上的 App 发起,走的是普通应用安装流程,
不会触发 MIUI 针对 adb 安装的「USB 安装」拦截(那正是
接口契约见
adb install 报 USER_RESTRICTED 的原因)。
适合"人就在机器旁边"的场景(本来就要点一次安装确认)。平台批量推送仍用上面的「安装」按钮。
接口契约见
doc/DEVICE_AGENT.md;令牌属于凭据,别外传。
| 时间 | 设备 | 应用 | 动作 | 说明 |
|---|---|---|---|---|
| 暂无记录(设备还没从商店装过东西) | ||||
| 设备 | 状态 | 版本号 | versionCode |
|---|---|---|---|
| 输入包名后点击"查询版本" | |||
查询所有设备(本地 adb 含 USB + 设备池)上该包名的安装情况与版本号,用于对比各设备 App 版本是否一致;未连接的设备会自动连接(绝不断开,不影响任务)。
| 应用 | 版本号 | versionCode | APK 路径 |
|---|---|---|---|
| 选择设备后点击"查看应用" | |||
| serial | 识别 | 来源 | 首次发现 | 最近发现 | 在线 | 操作 |
|---|---|---|---|---|---|---|
| 尚未扫描 | ||||||
扫描局域网/Tailscale 网段中开放 adb 5555 的设备进入待连接池;
确认后才加入正式设备池(不自动连接、不参与任务调度)。未授权设备(手机未接受 RSA 弹窗)不会出现。
「识别」列:平台按设备指纹认出这台其实就是池中某台设备换了 IP —— 确认后自动认领: 迁移原记录(名称/型号/备注全保留),并把分组与任务里的旧地址一并换成新地址。新设备则必须填名称。
「识别」列:平台按设备指纹认出这台其实就是池中某台设备换了 IP —— 确认后自动认领: 迁移原记录(名称/型号/备注全保留),并把分组与任务里的旧地址一并换成新地址。新设备则必须填名称。
设备池断联设备
(仍在设备池内,扫描线程每轮自动重连;也可手动立即重连)
| serial | 名称 | 型号 | 状态 | 操作 |
|---|---|---|---|---|
| 全部在线 | ||||
| serial | 名称 | 型号 | 在线 | 状态 | 指纹 | 添加时间 | 操作 |
|---|
新增设备流程:手机开 USB 调试 → 连上后「adb 终端」执行
设备名称必填且唯一:它是设备在平台里的身份(分组/任务/日志都按名称认设备); 设备换了 IP 时用「换地址」把记录迁过去,分组与任务的引用会自动同步,不用重新配。
tcpip 5555 转网络调试 →
Tailscale 上线(同一账号)→ 在此添加 IP:5555(自动尝试连接)→
任务运行时 u2 自动推送 atx-agent。停用 = 不参与任务调度,删除 = 从池中移除(不影响其他系统)。设备名称必填且唯一:它是设备在平台里的身份(分组/任务/日志都按名称认设备); 设备换了 IP 时用「换地址」把记录迁过去,分组与任务的引用会自动同步,不用重新配。
| 分组名 | 描述 | 设备数 | 设备列表 | 操作 |
|---|
管理设备分组,用于任务按分组执行。分组内的设备需先在设备池管理中确认(不在池内的设备不参与调度)。
系统
系统数据备份导出/导入(仅管理员)
导出当前系统数据为 zip:把数据库(MySQL 或回退模式的 SQLite)整库一致快照成
清单见预览的「表数据行数」(由模型元数据自动派生,新增表不会漏);备份里记录了来源环境,跨环境导入默认拒绝。
users.db 归档(全部业务表:用户 / 任务计划 / 设备分组 /
自定义动作 / APK 记录 / 设备池 / 待连接设备 / AI 会话 / 经验库 / 经验巡检 / 动作库 / 系统配置)+ 可选的
apks/ 应用文件。恢复用:换机 / 整库迁移 / 出问题前留底。
清单见预览的「表数据行数」(由模型元数据自动派生,新增表不会漏);备份里记录了来源环境,跨环境导入默认拒绝。
⚠️ 备份为全量快照:含用户口令哈希、AI 配置里的 API Key 等敏感信息,请妥善保管,勿外传、勿提交到 git。
导入恢复:上传平台导出的
备份来自另一个环境(dev↔prod)时默认拒绝导入,需在预览页显式勾选「允许跨环境导入」。
.zip 或 .db → 先校验预览 →
确认后系统会自动备份当前库(data/backups/pre_restore_*.zip,可直接再导入回来)并把恢复任务挂起,
重启 web_server 后生效(导入将覆盖现有全部数据;数据替换在单个事务里完成,失败会自动回滚)。
备份来自另一个环境(dev↔prod)时默认拒绝导入,需在预览页显式勾选「允许跨环境导入」。
通知:把平台事件(任务失败/成功、设备上下线、安装完成、备份恢复…)推到 webhook,
例如企业微信群机器人。每条 webhook 自己勾选关心哪些事件——不勾就不推。
为防刷屏:同一条 webhook 默认每 30 秒合并一次同类事件、每分钟最多 18 条 (企业微信硬限 20),超出的会压成一条「被限流折叠」摘要而不是丢掉。详见
为防刷屏:同一条 webhook 默认每 30 秒合并一次同类事件、每分钟最多 18 条 (企业微信硬限 20),超出的会压成一条「被限流折叠」摘要而不是丢掉。详见
doc/NOTIFY.md。
| 名称 | 格式 | URL | 订阅 | 状态 | 操作 |
|---|
发送记录
仅本次运行期间(重启清空);完整历史见
logs/notify.log
| 时间 | Webhook | 事件 | 结果 | 详情 |
|---|