前言¶
在 DeepSeek Harness(DSH)里让模型操作本机桌面,常见做法是注册一个 desktop 工具:截图、OCR 找文字、UI Automation 点控件、再发键鼠输入。上游项目 qingying012/dsh-desktop-control 已经提供了这类能力,但在支付按钮、敏感窗口、不可逆提交等场景下,仅靠模型自觉并不够。dsh-visual-safety-control 在同一套截图 / OCR / UIA 能力之上,增加了内容策略、点击与输入校验,以及可在 Harness 设置页直接编辑的策略项。下面介绍它是什么、如何安装,以及典型调用方式。
这是什么¶
dsh-visual-safety-control 是 DSH 的 Windows 客户端插件,维护者为 Kxiaoguai3。仓库基于 qingying012/dsh-desktop-control v0.1.3(MIT)修改,当前 npm 包版本为 0.4.1,许可证 MIT。插件向模型暴露名为 desktop 的工具,在本地完成截图、Windows OCR、UIA 定位与键鼠操作,并在执行前按策略拦截危险标签与敏感窗口,在点击与输入后用 expect、verifyText、UIA 回读等方式校验结果。
社区目录页:skillhub.cn 插件页。源码与说明:GitHub - Kxiaoguai3/dsh-visual-safety-control。
核心功能¶
桌面操作能力¶
| 能力 | 说明 |
|---|---|
| 截图 | 全屏、指定窗口或区域;可选坐标网格、光标标记 |
| OCR | 本地 Windows OCR,返回文字与坐标 |
| 找控件 | 按 OCR 文字或 UIA 控件名定位,可按窗口过滤;多命中时拒绝点击并列出候选 |
| 鼠标 | 坐标点击、UIA 控件点击、移动、拖拽、滚轮 |
| 键盘 | 文本粘贴、组合键;输入前确认窗口在前台、控件可编辑,输入后回读 |
| 窗口 | 列出窗口(HWND / PID / 位置 / 标题),激活指定窗口 |
| 序列 | sequence 一次调用执行多步,减少往返 |
坐标均为物理像素。
内容策略¶
策略在 PowerShell 启动前生效,模型无法通过参数关闭;用户配置里的列表会整表替换默认值。
- 危险标签(支付、转账、删除、卸载等)不点击、不查找
- 敏感窗口(银行、密码、钱包、凭据管理器)不读取、不操作
- 疑似凭据的输入内容可配置为拒绝发送(
refuseSecrets) - 危险组合键拒绝执行
- 不可逆动作(发布、发送、提交、购买等)默认请求用户确认(
irreversibleMode: ask)
动作校验¶
- 点击前用
expect校验落点处文字,降低坐标过期误点 - 点击后用
verifyText校验窗口内是否出现预期结果 - 点击做 hit-test,支持同进程弹窗与 UWP 窗口
- 输入后通过 UI Automation 回读,确认文字已写入
校验状态包括 verified、unverified、unknown、refused(策略拦截、焦点不对、expect 失配等)。
安装与启用¶
环境要求:仅 Windows(os: win32),需要交互式桌面会话;Node.js >= 22。插件以当前 DSH 进程权限运行,安装前应自行查看源码与 MIT 许可证。
不要与 dsh-desktop-control 同时启用:两者都会注册 desktop 工具,重名会导致加载失败。
本地目录安装(将路径换成本仓库绝对路径):
plugin_manager({ action: "install_bundle", target: "<本仓库的绝对路径>" })
npm 安装(发布后):
plugin_manager({ action: "install_bundle", target: "dsh-visual-safety-control" })
GitHub Packages 上有 @kxiaoguai3/dsh-visual-safety-control 镜像,日常安装请使用 npmjs 上的包名 dsh-visual-safety-control。
首次安装后若设置页尚未出现「视觉安全」,刷新一次 Harness 页面(Ctrl+R)以加载新的客户端插件。
典型用法¶
desktop 工具通过 action 区分操作,常用参数见仓库 README 中的用法表(find、elements、ocr、screenshot、windows、click、move / drag / scroll、type、key、activate、pos / wait、sequence)。
示例(与 README 一致):
// 找控件
desktop { action: "find", text: "保存", window: "记事本" }
// 点击前校验文字,点击后校验结果
desktop { action: "click", x: 812, y: 460, window: "记事本", expect: "保存", verifyText: "已保存" }
// 输入并回读
desktop { action: "type", text: "hello", window: "记事本" }
设置与配置¶
装好插件后,打开 设置 → 插件 → 视觉安全 可编辑:启用/关闭内容策略、危险标签与敏感窗口列表、不可逆动作标签及处理方式(请求确认 / 直接拒绝 / 允许)、拒绝的快捷键、序列最大嵌套层数。保存后写入当前 profile 的插件配置,下一次工具调用立即生效,无需重启。与 cordis.patch.yml 中等价配置二选一即可。
片段示例(字段含义以 README 为准):
- id: visual-safety-control
name: dsh-visual-safety-control
config:
policy:
enabled: true
denyLabels: ['支付', '转账', '删除', 'delete', 'pay']
sensitiveWindows: ['银行', 'Password', 'Bank']
refuseSecrets: true
denyKeys: ['alt+f4']
irreversibleLabels: ['发布', '发送', '提交', 'publish', 'send', 'submit']
irreversibleMode: ask # ask | deny | allow
maxSequenceDepth: 5
verifyType: true
verifyClick: true
其他常用选项包括 powershellPath、timeoutMs(默认 30000)、screenshotDir、screenshotMaxWidth、keepShots 等,见 README 配置表。
适用场景与限制¶
适合:在 Windows 上通过 DSH 做本地 GUI 自动化或辅助操作,且希望在模型侧多一层策略与校验,而不是完全依赖提示词约束。
限制(摘自 README):
- 锁屏、UAC 安全桌面、RDP 断开会失败
- 纯坐标点击不受内容策略判断,建议配合
expect/verifyText - 短标签或形近字 OCR 可能误识,可用
exact和index提高精度 - 不可逆动作默认
ask;宿主不支持审批时会直接拒绝
仓库还提供 TESTING.md、OPERATING-RULES.md 等文档,用于测试与操作规范。
结尾¶
dsh-visual-safety-control 在桌面控制 fork 上补齐了策略与校验,适合需要 desktop 工具又关注误点、误读、敏感窗口的场景。安装走官方 plugin_manager 的 install_bundle,并与同名上游插件互斥。
- 目录页:https://www.skillhub.cn/plugins/Kxiaoguai3/dsh-visual-safety-control
- GitHub:https://github.com/Kxiaoguai3/dsh-visual-safety-control