前言¶
DSH 的扩展方式是「一切皆插件」。当模型需要操作真实界面时,Android 和 Web 往往要分别处理目标、定位和运行环境。ciky20171114/dsh-plugin-midscene 为 DeepSeek Harness(DSH)提供基于 Midscene 的 AI-driven UI automation:模型看到屏幕,按自然语言描述定位元素,并作用于真实 Android 设备或真实 Chrome 页面。
它通过一个 ctx.midscene 能力接缝提供 android_ui 和 web_ui 两个工具。
这是什么¶
dsh-plugin-midscene 是一个 DSH 插件,由 ciky20171114 维护,许可证为 MIT。
它的能力结构可以概括为:
- 单一接缝:
ctx.midscene - 两个 provider:Android 和 Web
- 两个工具:
android_ui和web_ui
核心功能¶
- Android provider 面向一个 ADB-connected device。
- Web provider 面向已运行 Chrome 的 active page;provider 只连接,不启动 Chrome。
android_ui和web_ui使用单一action参数,支持tap、act、input、query、assert、boolean、back。- 视觉模型通过环境变量配置为 Midscene 兼容模型;资料说明这不是通过 DSH 的
ctx.llm配置。
安装与启用¶
先准备环境:
- DSH CLI 和一个 profile。
- Android 场景:
adb devices能看到设备。 - Web 场景:Chrome 以
--remote-debugging-port=9222 --user-data-dir=<dir>启动;插件只连接,不启动 Chrome。
安装:
dsh plugin --profile mysetup add dsh-plugin-midscene
安装后,在 profile 的 cordis.patch.yml 中添加 exactly one provider row。示例路径:
~/.dsh/profiles/mysetup/cordis.patch.yml
同一 context 中,两个 provider 不能同时拥有 ctx.midscene,所以只能配置一行 provider。
Android 示例:
- insert:
- id: midscene-android
name: dsh-plugin-midscene/android
config:
deviceId: ''
aiActionContext: ''
deviceId 为空表示取 getConnectedDevices() 的第一个设备;aiActionContext 是自由上下文。
Web 示例:
- insert:
- id: midscene-web
name: dsh-plugin-midscene/web
config:
browserWSEndpoint: 'ws://127.0.0.1:9222/devtools/browser/<id>'
aiActionContext: ''
browserWSEndpoint 可以从:
http://127.0.0.1:9222/json/version
的 webSocketDebuggerUrl 获取。Chrome 重启后 id 变化,需要更新 provider row 并 restart dsh。
启动:
dsh --profile mysetup
如果 3080 被占用,可添加:
dsh --profile mysetup --port 3081
本地开发时可以使用:
dsh plugin --profile dev add /path/to/dsh-plugin-midscene
模型配置¶
通过环境变量配置 Midscene 兼容视觉模型:
export MIDSCENE_MODEL_NAME=glm-4.6v
export MIDSCENE_MODEL_BASE_URL=https://open.bigmodel.cn/api/paas/v4/
export MIDSCENE_MODEL_API_KEY=<your key>
export MIDSCENE_MODEL_FAMILY=glm-v
工具与错误语义¶
android_ui 和 web_ui 共用单一 action 参数,模型选择动作后由工具处理。已核实的动作包括:
tap
act
input
query
assert
boolean
back
失败的 assert 是成功结果,表现为 pass: false;基础设施失败才走 error path。
设计边界与限制¶
这个插件的设计边界是 no policy, no recovery:
- 没有 retry
- 没有 precondition checks
- 没有 automatic recovery
其他限制:
- 每个 provider instance 只支持一个 target。
- 无 reconnect;中途断连表现为 rejected call。
@midscene/android与@midscene/web固定在 exactly1.11.0。- Web 的
puppeteer是 peer dependency;Chrome 由部署方提供,不由插件下载。 - Web provider 在 teardown 时 disconnect 而不 close,Chrome 进程由部署方保留。
安装排障¶
pnpm ≥ 10 可能因 sharp / @ffmpeg-installer/linux-x64 的 transitive install scripts 报 ERR_PNPM_IGNORED_BUILDS。需要按 profile 做一次 allowBuilds 修复:打开:
~/.dsh/profiles/<name>/pnpm-workspace.yaml
按 pnpm 输出的 allowBuilds 提示调整相关项,然后重新执行 add 命令。
适用场景与注意¶
适合已经使用 DSH,并需要让模型操作真实 Android 设备或 Chrome 页面的场景。
使用前建议:
- 插件以当前
dsh进程权限运行,安装前应检查源码和许可证。 - 它不负责启动 Chrome,也不会自动恢复异常 UI 状态。
- Web 场景需要部署方提供 Chrome,并由环境解析
puppeteer。 - 视觉模型需要通过环境变量指向可访问的服务。
链接¶
- 插件目录页:https://www.skillhub.cn/plugins/ciky20171114/dsh-plugin-midscene
- GitHub 仓库:https://github.com/ciky20171114/dsh-plugin-midscene