前言¶
在 DeepSeek Harness(DSH)里做智能体或会话式开发时,经常需要对照真机或模拟器上的界面:截图进对话、点按验证、拉起 AVD。把 scrcpy、adb、Xcode 模拟器拆到多个终端,和 Web 会话之间来回切换,上下文容易断。社区插件 dsh-device-deck(维护者 zhouatie,分类:客户端)把设备列表、Android 镜像、模拟器管理与少量 Agent 工具收到 Session 顶栏和浮动镜像里,在同一套 Harness Web UI 中完成上述操作。插件当前为 alpha(0.3.0);README 写明 Android 镜像可用,iOS / Web 页面镜像与 AI E2E 测试在路线图上且尚未实现。
这是什么¶
Device Deck 是带 Host 与 Client 两半的 DSH 插件:description 为 “Device mirror, emulator manager, and agent tools for DeepSeek Harness.” Host 注册 /api/device-deck/* 路由并驱动本机 adb、xcrun 等;Client 注入会话头部,渲染设备菜单与镜像浮层。代码采用 MIT 许可证;包内捆绑 scrcpy-server 3.3.3(Apache-2.0),无需单独安装 scrcpy 客户端。插件不依赖云服务,设备命令走本机工具链;截图仅在用户通过输入框 + 菜单加入 composer 并发送时进入当前聊天。
目录页:https://www.skillhub.cn/plugins/zhouatie/dsh-device-deck
源码:https://github.com/zhouatie/dsh-device-deck
核心功能(当前已实现)¶
下面按 README「Available now」归纳;路线图中的 Web 预览、模拟器镜像、E2E、录制回放、多设备 deck 均不算已实现能力。
会话头部的设备菜单¶
Session 右上角设备图标一键展开:运行中的设备、已停止的 Android AVD、iOS 模拟器列表,并支持无线 ADB 配对。
Android 镜像与控制¶
- 使用 scrcpy 推流,页面内用 WebCodecs 解码视频。
- 镜像打开时可通过 scrcpy 控制通道关闭物理屏,关闭镜像后恢复(部分 OEM 可能不生效)。
- 支持点击、滑动、返回、Home、多任务、文本输入、打开 URL / deep link。
- 快捷键 Ctrl+M 打开或关闭镜像。
模拟器与真机管理¶
- Android AVD:列出、无头启动、停止,就绪后打开镜像。
- iOS 模拟器:列出、启动/关闭、打开 Simulator 应用;不提供模拟器画面镜像。
- iOS 真机:用
devicectl列出已连接 iPhone/iPad;通过 WebDriverAgent MJPEG 镜像画面,支持点按、滑动、输入、Home、截图;首次启动会构建 WebDriverAgent(约 2–5 分钟,缓存于~/.dsh/device-deck/wda)。
连接、文件与截图¶
- 无线 ADB:填写
host或host:port(仅 host 时默认端口5555)。 - 文件传输:从本机选文件,经
adb push推到所选设备的/sdcard/Download/<name>(单次一个文件,最大 2 GB)。 - 截图:保存当前画面;最新截图可浏览;输入框
+菜单选 Device screenshot 将选中截图加入 composer。 - Agent 工具:
device_screenshot将当前选中的截图作为图片返回给智能体。
截图目录:~/.dsh/device-deck/screenshots(每设备保留最新 30 张,已选中的截图不会被自动删除)。上传临时文件在 ~/.dsh/device-deck/uploads。
环境与依赖¶
安装前请对照 README「Requirements」:
- 支持插件的 DeepSeek Harness 实例。
- Host 侧 Node.js ≥ 20(
package.json中engines.node)。 - Android:adb(platform-tools)、管理 AVD 时需 Android SDK emulator。
- iOS 模拟器:macOS 上 Xcode 命令行工具。
- iOS 真机:macOS、带 iOS SDK 的 Xcode、iproxy(libimobiledevice)、设备开启开发者模式;Xcode 需登录 Apple ID 做自动签名(免费账号签名约 7 天有效,过期需重新构建 WDA)。
限制摘要:镜像同时仅一台设备;视频 H.264 only(H.265 设备报错);Android 文本输入经 adb shell input text,仅 ASCII;iOS 真机镜像时设备须解锁并保持唤醒;iOS 真机无法像 Android 那样关物理屏推流。
安装与启用¶
官方 README 采用本地目录安装(bundle 链接到该文件夹,移动或删除目录会导致插件失效)。步骤如下。
- 获取源码并进入目录:
git clone https://github.com/zhouatie/dsh-device-deck.git
cd dsh-device-deck
- 安装依赖:
pnpm install
-
在 Harness 中安装该文件夹为 bundle:通过 Settings → Plugins,或使用插件管理器指定该目录的绝对路径。
-
刷新一次 Harness Web 页面。
依赖变更后需在同一目录再次执行 pnpm install。开发自检可运行:
pnpm check
(对 index.js 与 client.js 做 node --check。)
插件以当前 DSH 进程权限运行,可调用本机 adb、xcrun 并读写 ~/.dsh/device-deck/。安装前应自行审阅源码与 MIT / 捆绑 scrcpy 的许可证条款。
典型用法¶
- 打开一个 Session。
- 点击 Session 头部右上角的设备图标。
- 选择已运行的 Android 设备打开镜像,或启动处于停止状态的 AVD。
- 镜像左侧栏:返回、Home、多任务、文本、链接、截图、历史(有截图后出现)、重连、关闭;附件图标可选文件推送到设备。
- 标题栏:设备切换、连接状态、拖拽手柄。
- 若要把画面交给模型:打开输入框
+→ Device screenshot → 选择截图 → 可在 composer 中补充文字后发送。
无线 ADB 示例(在插件提供的连接输入中使用):
192.168.1.102:5555
架构要点¶
Host(index.js)为每台 Android 设备维护 scrcpy 会话,视频经同源分块 HTTP 传到浏览器;Client(client.js)负责头部菜单与 WebCodecs 解码渲染。iOS 真机路径由 Host 构建/启动 WebDriverAgent,iproxy 转发端口并中继 MJPEG,输入走 WDA HTTP API。捆绑的 bin/scrcpy-server 版本为 3.3.3。
适用场景与注意¶
- 适合:已在 DSH 会话里做 Android / iOS 真机联调、需要把设备截图喂给 Agent、或在 Web UI 内管理 AVD / 模拟器而不必频繁切终端的开发者。
- 不适合:依赖路线图中尚未交付的 Web 页面遥控、iOS 模拟器画面镜像、或多设备同屏;需要非 ASCII 输入或 H.265 推流的场景需另寻方案。
- 生态说明:DSH 奉行「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系,本文安装步骤以 GitHub README 为准。
结尾¶
dsh-device-deck 把设备镜像、模拟器管理和 device_screenshot 工具收进 Harness 会话界面,减少 adb / scrcpy / 模拟器与聊天窗口之间的切换。使用前请确认 Node、SDK 与平台依赖齐全,并知晓 alpha 版本与 README「Limitations」中的约束。