前言¶
DeepSeek Harness 的核心理念是「一切皆插件」,通过 Cordis 体系扩展工具与技能。对于需要在模拟器中执行复杂交互(看屏幕、点击、滑动、OCR、Shell、多开管理等)的开发者来说,现有方案往往需要编写较多脚本来适配不同的窗口与 API。下面介绍一个由 WSIKUN5 维护的工作流插件,它将 Windows 上的 MuMu 模拟器包装成一组 mumu_* 工具和一个 mumu-skill,让模型可以直接像使用 browser-skill 一样操作模拟器。
插件定位¶
- 名称:dsh-plugin-mumu
- 维护者:WSIKUN5
- 分类:工作流
- 简介:MuMu 模拟器控制插件:给 DeepSeek Harness 提供 mumu_* 工具与 mumu-skill(截图/点击/滑动/按键/OCR/等待/装包/多开)
核心功能¶
插件提供以下工具:
mumu_info:获取实例 / 渲染窗句柄与矩形 / 前台窗口;probe查型号、SDK、分辨率、客户机 IP;all列全部实例mumu_observe:使用 PrintWindow 截图(窗口被遮挡也能截到干净画面),可裁剪 region、可带颜色探针,返回图片 + 帧哈希mumu_tap:在渲染窗像素点击;点击前会校验系统鼠标是否到位,防止与人的鼠标操作冲突mumu_swipe:分步拖动(用于列表滚动、翻页、滑块拖动等)mumu_key:发送 Android 按键(back / home / task / enter / volume… 或数字 keycode)mumu_text:ASCII 文本输入mumu_shell:在客机运行 Android shell(支持 getprop / pm / am / dumpsys / wm 等)mumu_app:list / start / stop / uninstall / install(install 使用宿主 adb + 桥接网络)mumu_wait:本地轮询画面条件,命中后可选立刻点一下(适合 2~3 秒的限时按钮)mumu_scan:横带深色/亮色列聚类 + 亮度采样(读手牌、图标行的通用原语)mumu_ocr:使用 Windows 自带的Windows.Media.Ocr,完全本地离线,返回带渲染窗坐标的文本行(中文/英文)
mumu-skill 是玩法层文档:包含工作流、坐标基准、硬约束、排障手册,以及 references/doudizhu.md 里一份实战验证过的斗地主坐标与判定。
原理与实现¶
MuMu Player 15 把每个 App 放在独立的虚拟显示器上,adb screencap 只能截到 display 0 的桌面,因此插件采用以下方案:
- 截图:使用
PrintWindow(render_wnd, PW_RENDERFULLCONTENT),即使窗口被遮挡也能拿到干净画面 - 点击:
ForceForeground(主窗)+SendInput绝对坐标,并在按下前用GetCursorPos校验光标确实到位 - Android 命令:通过
MuMuManager.exe sh -c "<cmd>"执行 - OCR:使用 PowerShell 7 加载 CsWinRT 投影程序集后调用
Windows.Media.Ocr,完全离线
具体 Win32/P-Invoke 与像素分析都收在 lib/mumu-worker.ps1(常驻 PowerShell 进程,JSON-lines 协议),插件本体 index.js 只负责参数、结果整形和把图片转成 Harness 的 attachment。
环境要求¶
- Windows 10 / 11
- MuMu Player 12/15(默认安装在
D:\MuMuPlayer,可在配置里改) - DeepSeek Harness 桌面版 0.2.x,带 PowerShell 7
- 已在 DeepSeek Harness
0.2.1-rc.3(2026-10-24)上回归验证:11 个工具 +mumu-skill全部正常(截图内联、OCR、wait、shell、插件重载都测过) - 不需要 Node 额外依赖:插件只 import Node 内置模块
安装与启用¶
- 从 Releases 下载 zip 解压,例如放到
D:\dsh-plugin-mumu(也可以先克隆仓库再解压) - 按需修改
cordis.patch.yml里的路径(见下一节) - 在 DeepSeek Harness 里安装 bundle:
plugin_manager({ action: "install_bundle", target: "D:\\dsh-plugin-mumu" })
- 装完后工具直接可用;改了代码后让插件重新加载(
plugin_manager里把dsh-plugin-mumu先false再true)或重启 DSH
本地目录安装是链接,所以以后 git pull / 改文件就是更新插件。
配置(cordis.patch.yml)¶
| 键 | 默认 | 说明 |
|---|---|---|
managerPath |
D:\MuMuPlayer\nx_main\MuMuManager.exe |
MuMuManager 路径 |
adbPath |
与 MuMuManager 同目录的 adb.exe |
仅 mumu_app install 用 |
instance |
0 |
默认操作的实例 index(多开时用) |
captureDir |
D:\MuMuCaptures(配置默认;不配则 %TEMP%\dsh-mumu) |
截图落盘目录 |
pwshPath |
pwsh |
PowerShell 7 路径 |
respectUserMouse |
true |
点击前确认系统鼠标静止(防止和人的手抢鼠标) |
workerIdleTimeoutMs |
600000 |
worker 空闲回收时间 |
典型用法¶
在 DeepSeek Harness 里让模型加载玩法文档:
skill({ name: "mumu-skill" })
然后就能直接下指令,例如「用 mumu 看看模拟器现在什么画面」「帮我把斗地主点进游戏」。模型侧的典型闭环:
mumu_info({ probe: true }) // 实例、渲染窗矩形、客户机 IP
mumu_observe({ maxWidth: 1000 }) // 看画面(图片直接进对话)
mumu_tap({ x: 1504, y: 895 }) // 按渲染窗像素点
mumu_wait({ // 等按钮出现并立刻点(限时环节)
timeoutMs: 30000, intervalMs: 350,
predicate: { type: "color", region: { x0: 590, y0: 520, x1: 750, y1: 560 }, color: { preset: "orange" }, minRatio: 0.5 },
tap: { x: 665, y: 541 }
})
mumu_ocr({ region: { x0: 0, y0: 0, x1: 1763, y1: 200 }, scale: 2 }) // 读文字(带坐标)
mumu_shell({ cmd: "getprop ro.product.model" }) // 客机 shell
mumu_app({ action: "start", package: "com.qqgame.hlddz" }) // 启动 App
mumu_info({ all: true }) // 多开:列实例
mumu_observe({ instance: 1 }) // 多开:操作指定实例
坐标只有一个基准:所有 x/y 都是渲染窗像素(截图左上角 = 0,0,尺寸就是 mumu_info 里的 renderRect 宽高)。不要用屏幕坐标,也不要用 Android 的 1440×2560。
适用场景与注意¶
- 适合需要在模拟器中执行复杂交互的智能体开发场景(如自动化测试、游戏脚本、App 交互测试等)
- 插件以当前 DSH 进程权限运行,安装前应检查源码与许可证
- 当前仅支持 Windows(PowerShell + Win32 API),依赖 MuMu 的
render_wnd结构与MuMuManager - 多开寻址与操作已验证,但窗口注入是串行的,不适合同时对两个实例高频操作
结语¶
该插件将 MuMu 模拟器封装为标准化的 mumu_* 工具与 mumu-skill,让模型可以直接通过自然语言操作模拟器中的任意 App,并内置斗地主场景的坐标与判定参考。通过截图内联、本地 OCR、光标校验、等待与扫描等原语,能够应对复杂的限时与多步骤交互。
- 插件目录页:https://www.skillhub.cn/plugins/WSIKUN5/dsh-plugin-mumu
- GitHub:https://github.com/WSIKUN5/dsh-plugin-mumu