设备状态监控
实时展示所有设备状态、当前执行任务及进度
设备列表
· 每 5 秒自动刷新 · · 未选中
设备 型号 电量 任务状态 前台App 进度 当前任务 当前动作 最近错误 操作
异常汇总
任务运行概况
账号
每台设备上登录的抖音账号(谁在哪台机器上、卡在不在机内、能不能发视频)
设备号 账号名称 抖音号 手机号 注册时间 卡在机内 可发视频 简介 备注 操作
这张台账有三个用处:① 人在机器旁时对照(手机端 Agent 的「身份大字页」也会显示本机账号); ② 任务的「条件判断」可以直接从这里取号(编辑器里把候选值来源选成「本机台账」, 就不用把几十个号手写进去);③ 设备池里能看到每台登记了几个号。
⚠ 台账里的抖音号是纯号(如 35377983067),只当"比对用的候选值"。 不要拿它去填「去重」的身份元素 —— 身份比对的是元素原文 (抖音号:35377983067),格式不同会让去重静默失效。
发布任务 到点自动跑:推送素材 → 你的抖音步骤 → 标记结果(抖音那几步的选择器要你自己抓一次)
明细表(与时间线同一份数据)
发布日期设备号账号编号视频文件 标题状态分享链接操作
视频文件名规则 手机号_日期_编号(编号可省略,日期如 20260912 就是发布日期); 标题 txt 每行 标题内容_手机号_日期_编号(标题里可以有下划线,# 开头的行忽略)。 手机号必须在「账号台账」里,否则拒收。
上传后自动按 (手机号, 日期, 编号) 配对:有编号按编号精确对,没编号按顺序配 —— 没传标题的视频不会被推送(先在计划页改标题或补传标题)。
平台只负责把视频推到手机(推到 /sdcard/DCIM/Camera/、把文件时间改成"现在"好排在相册最前、触发相册刷新并按路径校验进了索引、 把标题写进手机剪贴板);**抖音里怎么发由你在任务里自己写步骤** —— 步骤顺序是:「推送发布视频」→ 你自己的发布步骤(打开抖音→点+→相册→选视频→下一步→粘贴标题→发布)→ 最后放一个「标记发布结果」。
计划页的「推送到手机」是同一件事的人工入口(推完你在手机上发,发完点「标记已发布」)。
⚠ 发布结果以每行的状态为准:失败(可重试)说明推送都没成功、可以再推; 结果未知(需确认)说明推送之后那一段出了岔子、可能已经发出去了, 要先到抖音里看一眼,再用「已发出 / 未发出」裁决(平台不会自动重发)。
任务
任务计划定时调度与自定义动作复用管理
ID任务名类型启用目标调度下次运行重试操作
把常用步骤打包成可复用的动作,拖入任务步骤编辑器使用;也可在任务编辑器里"☑选中步骤→打包"生成
图标动作名步骤数创建时间操作
步骤默认值:新建步骤时预填这套参数(只影响之后新建的步骤,已有步骤不动; 单步想改就打开那个任务改那一步)。
录制动作:在设备画面上点/划/按键,自动翻译成步骤 —— 既能存成可复用的「自定义动作」, 也能只取一个手势回填到滑动步骤上(步骤编辑器里滑动那一步有「录制手势」按钮)。
加载中…
🤖 AI 控制台
📺 实时画面
运行任务时自动跟随操作的设备;
也可手动选择设备观看
1️⃣ 说清楚要做什么
AI 会自己在设备上探索,把走通的路径写成任务步骤
2️⃣ 选一台空闲设备
有任务在跑的设备不可选(AI 不与任务抢设备)
3️⃣ 任务设置(可选,留空由 AI 判断) ▸
探索回放
AI 在设备上的每一步(看屏 / 读元素树 / 点按验证)会实时显示在这里。
日志查看
原始文本日志 + 任务步骤明细(结构化,可按设备/任务/时间过滤)
~
~
最近运行概览
开始设备任务 步骤数失败
时间设备任务 步骤标签类型 结果耗时详情
用户管理
管理后台登录用户
ID用户名管理员权限操作
工具
管理员专用:设备工具与应用管理集合
注入后需在目标 App 的输入框长按选择"粘贴"
实现: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 版本是否一致;未连接的设备会自动连接(绝不断开,不影响任务)。
应用版本号versionCodeAPK 路径
选择设备后点击"查看应用"
周期 秒 · 网段
serial识别来源首次发现最近发现在线操作
尚未扫描
扫描局域网/Tailscale 网段中开放 adb 5555 的设备进入待连接池; 确认后才加入正式设备池(不自动连接、不参与任务调度)。未授权设备(手机未接受 RSA 弹窗)不会出现。
「识别」列:平台按设备指纹认出这台其实就是池中某台设备换了 IP —— 确认后自动认领: 迁移原记录(名称/型号/备注全保留),并把分组与任务里的旧地址一并换成新地址。新设备则必须填名称。
设备池断联设备 (仍在设备池内,扫描线程每轮自动重连;也可手动立即重连)
serial名称型号状态操作
全部在线
低电量 % · 严重 % 采集间隔 秒
定时用 dumpsys battery(只读)采集池内在线设备的电量,显示在 「监控 → 设备列表」的电量列与大屏卡片上。
低于阈值时推 webhook 通知(事件 device.battery.low,要在「系统 → 通知」里勾选订阅才发): 掉到低电量报一次、掉到严重再报一次、恢复再报一次,不做重复刷屏。
电量只放内存、不落库(重启后重新采一轮),所以不占数据库、不影响备份。 设备离线时显示最后一次读数(置灰),不会变成空白。
serial名称型号在线状态 指纹 账号 添加时间操作
新增设备流程:手机开 USB 调试 → 连上后「adb 终端」执行 tcpip 5555 转网络调试 → Tailscale 上线(同一账号)→ 在此添加 IP:5555(自动尝试连接)→ 任务运行时 u2 自动推送 atx-agent。停用 = 不参与任务调度,删除 = 从池中移除(不影响其他系统)。
设备名称必填且唯一:它是设备在平台里的身份(分组/任务/日志都按名称认设备); 设备换了 IP 时用「换地址」把记录迁过去,分组与任务的引用会自动同步,不用重新配。
分组名描述设备数设备列表操作
管理设备分组,用于任务按分组执行。分组内的设备需先在设备池管理中确认(不在池内的设备不参与调度)。
系统
系统数据备份导出/导入(仅管理员)
导出当前系统数据为 zip:把数据库(MySQL 或回退模式的 SQLite)整库一致快照成 users.db 归档(全部业务表:用户 / 任务计划 / 设备分组 / 自定义动作 / APK 记录 / 设备池 / 待连接设备 / AI 会话 / 经验库 / 经验巡检 / 动作库 / 系统配置)+ 可选的 apks/ 应用文件。恢复用:换机 / 整库迁移 / 出问题前留底。
清单见预览的「表数据行数」(由模型元数据自动派生,新增表不会漏);备份里记录了来源环境,跨环境导入默认拒绝。
⚠️ 备份为全量快照:含用户口令哈希、AI 配置里的 API Key 等敏感信息,请妥善保管,勿外传、勿提交到 git。
导入恢复:上传平台导出的 .zip 或 .db → 先校验预览 → 确认后系统会自动备份当前库(data/backups/pre_restore_*.zip,可直接再导入回来)并把恢复任务挂起, 重启 web_server 后生效(导入将覆盖现有全部数据;数据替换在单个事务里完成,失败会自动回滚)。
备份来自另一个环境(dev↔prod)时默认拒绝导入,需在预览页显式勾选「允许跨环境导入」。
通知:把平台事件(任务失败/成功、设备上下线、安装完成、备份恢复…)推到 webhook, 例如企业微信群机器人。每条 webhook 自己勾选关心哪些事件——不勾就不推。
为防刷屏:同一条 webhook 默认每 30 秒合并一次同类事件、每分钟最多 18 条 (企业微信硬限 20),超出的会压成一条「被限流折叠」摘要而不是丢掉。详见 doc/NOTIFY.md。
默认聚合 秒 · 限流 条/分
名称格式URL订阅状态操作
发送记录 仅本次运行期间(重启清空);完整历史见 logs/notify.log
时间Webhook事件结果详情