PangYiMing/dsh-mobile-control
DSH 插件,用于控制移动设备(ADB/iOS)——DeepSeek Harness 操控手机插件
项目介绍Project Overview
dsh-mobile-control 是 DSH 自动化插件,通过 WebDriverAgent(WDA)驱动 iOS 模拟器,可在 agent 内调用 mobile_status、mobile_wda_up、mobile_tap、mobile_find_element、mobile_screenshot、mobile_accessibility_tree、mobile_open_url、mobile_grant_privacy 八个 mobile_* 工具完成截图、点击、查找元素、导出可访问性树、打开深链及隐私预授权。WDA 跑在模拟器内部,无需 macOS 辅助功能授权,不依赖 idb,可点击任意 app(含系统弹窗)。适用于需要稳定操控 iOS 模拟器、避开 CGEvent 权限限制的自动化场景。注意:需安装完整版 Xcode,真机 WDA 需用含设备 UDID 的描述文件重新签名,无法复用模拟器构建产物。
dsh-mobile-control is a DSH automation plugin that drives the iOS Simulator through WebDriverAgent (WDA). It registers eight mobile_* tools—mobile_status, mobile_wda_up, mobile_tap, mobile_find_element, mobile_screenshot, mobile_accessibility_tree, mobile_open_url, and mobile_grant_privacy—enabling screenshots, taps, element lookup, accessibility-tree dumps, deep-link launching, and privacy pre-authorization. Because WDA runs inside the simulator via XCUITest, it needs no macOS accessibility permission, has no idb dependency, and can tap any app including system dialogs. Use it for stable Simulator automation when CGEvent-based tools fail. Note: a full Xcode install is required, and physical-device WDA must be re-signed with a device-UDID profile—the Simulator build artifacts cannot be reused on real devices.
请帮我了解并安装插件:【dsh-mobile-control】【https://github.com/PangYiMing/dsh-mobile-control】
把上面这条消息直接发给当前会话里的 DSH,让它帮你了解并安装。安装命令不一定准确,发给 DSH 更稳。Send this message to DSH in your current session. CLI install commands may not be accurate across systems — DSH will figure it out for you.
或使用命令行安装(适合开发者)Or use CLI install (for developers)
命令行安装CLI Install
dsh plugin --profile demo add dsh-mobile-control
把 PangYiMing/dsh-mobile-control 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
dsh-mobile-control
DeepSeek Harness 插件 · 操控手机 / DSH plugin for controlling mobile devices
通过 WebDriverAgent(WDA) 驱动 iOS 模拟器:截图、点击、找元素、打开 URL、抓可访问性树。
WDA 是跑在模拟器内部的 XCUITest 运行器,暴露 localhost:8100 HTTP 服务——零 macOS 辅助功能授权、不依赖 idb、能点任意 app(含系统弹窗)。
Drives the iOS simulator through WebDriverAgent (WDA): screenshots, taps, element lookup, URL opening, accessibility-tree dumps. WDA is an in-simulator XCUITest runner exposing an HTTP API on localhost:8100 — no macOS accessibility permission, no idb, and it can tap any app, including system dialogs.
为什么用 WDA(而不是别的)
| 方案 | 问题 |
|---|---|
| idb (Meta) | homebrew-core 的 idb-companion formula 已下架,装不上 |
| cliclick / AppleScript | 走 macOS CGEvent,需要给终端授「辅助功能」权限,否则点了没反应 |
| WDA ✅ | 模拟器内部 XCTest 自动化特权点击,不走 CGEvent,任何 app 都能点 |
快速开始 Quick start
前置:完整版 Xcode(XCUITest 靠 testmanagerd 拉起,纯 simctl launch 起不来 HTTP 服务)。
bash scripts/wda-up.sh [UDID] # 不传 UDID 用当前 Booted 的模拟器
curl -s localhost:8100/status | head -c 200 # 返回 build/os/device 即 OK
幂等设计:已在跑 → 秒返回;有缓存 → 免编译 ~30s;没缓存 → 首次 clone+编译一次(之后一直免编译)。端口自适应:WDA 构建产物的监听端口是编译时写死的(可能是 8100 或 8101 等),脚本从运行日志发现真实端口并写入 ~/.cache/webdriveragent/wda.port,插件和脚本都读它。模拟器包未签名、arch=arm64+x86_64,可跨 Mac 复用:把 Build/Products + .xctestrun 拷给别人,直接 test-without-building,谁都不用再编。真机不能这么白嫖(真机 WDA 必须用含设备 UDID 的描述文件重新签名)。
操控 API
见 docs/wda-drive.md:建会话、找元素、点击、坐标点击、可访问性树、截图、隐私预授权、scheme 打开 URL——全部 curl 可调。
DSH 工具 Tools
安装插件后,以下 mobile_* 工具自动注册进 agent 的工具集:
| 工具 | 说明 |
|---|---|
mobile_status |
检查 WDA 是否在服务(端口自适应,默认 8100) |
mobile_wda_up |
幂等启动 WDA(首次 clone+编译,之后免编译 ~30s) |
mobile_screenshot |
simctl 截图到 PNG |
mobile_find_element |
按 accessibility label / class 找 UI 元素(返回元素 id) |
mobile_tap |
点元素(elementId)或按逻辑点坐标(x/y)点击 |
mobile_accessibility_tree |
导出当前前台 app 的可访问性树 XML |
mobile_open_url |
simctl openurl 打开 URL 或自定义 scheme 深链 |
mobile_grant_privacy |
simctl privacy grant 预授权,避免系统弹窗挡自动化 |
# 安装后直接在 agent 会话里用自然语言触发:
# "用 mobile_wda_up 启动 WDA,然后 mobile_tap 点 (268, 492)"
dsh plugin --profile demo add dsh-mobile-control
路线图 Roadmap
- WDA 幂等启动(
scripts/wda-up.sh) - 建会话 / 找元素 / 点击 / 坐标点击 / 可访问性树
-
simctl截图 + privacy 预授权 - 自定义 scheme 打开 URL(deeplink)
- 封装为 DSH 工具(8 个
mobile_*tools) - Android(ADB)支持
- 元素级滑动 / 长按 / 输入文本
安装 Install
# 发布到 npm 后
dsh plugin --profile demo add dsh-mobile-control
# 或从 GitHub 安装(源码安装需要 prepare 构建)
dsh plugin --profile demo add github:PangYiMing/dsh-mobile-control
nexu-io/open-design
ruvnet/ruflo
amruthpillai/reactive-resume
esengine/DeepSeek-Reasonix
volcengine/OpenViking
Molunerfinn/PicGo
titanwings/distilly
titanwings/colleague-skill