dsh-desktop-control
Verifieddsh-desktop-control · v0.1.3 · MIT
DeepSeek Harness plugin: a desktop tool that screenshots the Windows screen (labelled coordinate grid), reads UI Automation and OCR, and drives the mouse and keyboard.
Install
dsh plugin add dsh-desktop-control Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Tags
Creators
Readme
dsh-desktop-control
一个 DeepSeek Harness 插件:给模型一个原生的 desktop 工具,截屏看屏幕、按文字定位控件、移动/点击鼠标、输入文字和组合键。
它把 gui.ps1 脚本(截图 + Win32 输入 + 本地 OCR + UI Automation)包进 DSH 插件,模型直接调用工具,不用每次手拼 PowerShell 命令。
Windows only。插件包内自带
assets/gui.ps1(UTF-8 BOM),不依赖工作区里的脚本。
工具动作
| action | 作用 | 主要参数 |
|---|---|---|
find |
本地 OCR 找屏幕文字,直接返回屏幕坐标(可顺手点击),不产生图片 | text / window / click / threshold / screen |
elements |
枚举窗口的 UIA 控件:名称 + 中心坐标,不用图 | window / filter / depth / all |
ocr |
本地 OCR 一张图:文字 + 每行框坐标 | imagePath / filter |
screenshot |
截图并返回 PNG 路径,默认标出光标 | window / region / print / grid / cursor / maxWidth |
windows |
列出可见窗口(HWND、PID、矩形、标题) | top |
click |
移动并点击;也支持按控件名点击 | x y / uia invoke / button count |
move |
移动光标 | x y |
drag |
按住拖拽 | x y x2 y2 |
scroll |
滚轮 | x y amount |
type |
粘贴文本(走剪贴板,Unicode 安全) | text |
key |
组合键,如 ctrl+s、alt+f4 |
key |
activate |
把窗口提到前台 | window |
pos |
光标当前位置 | — |
wait |
等待 | waitMs |
sequence |
一次调用跑多个动作(含截图) | steps |
坐标全部是物理像素,脚本内部开启 per-monitor DPI aware v2。
为什么它更省 token
真正的开销不是图,是轮次:每多一次工具往返,整段历史就要重放一遍。所以顺序是「先用不产生图的动作,再考虑截图」。
find优先——find text:"保存"用系统自带 OCR 直接在屏幕上找字,返回一行坐标:# find "保存" | window 1296x828 at 312,110 | 64 lines | matches=1 356,358,42,12|1.00|保存实测 87 字符(约 25 token),而让视觉模型读同一屏产生的结构化证据是 4,000–9,500 字符(1,300–3,100 token)。省 97% 以上,且不消耗任何读图额度。加
click:true就连点击一起完成,一次往返。elements其次——原生控件直接给「名称 + 中心坐标」,70–120 token。截图是最后手段——必要时只截目标窗口/区域,
maxWidth压尺寸。sequence合并动作——点击、等待、验证截图一次跑完;实测 3 个动作从 1650ms/3 次往返降到 535ms/1 次。
典型循环:
find "插件" -> 命中就 click(或 find click:true) -> 只在需要视觉确认时 screenshot
精度设计
find的坐标来自 OCR 文字框的真实中心,不是模型目测,天然对齐。- OCR 前自动放大 2 倍(12px 中文小字放大后可读),坐标再除回来。
- 去掉汉字间空格(Windows OCR 会插空格),提高匹配率。
- 模糊匹配:完全相等 1.00、包含 0.92、反向包含 0.78、字符重叠兜底。OCR 错字也能命中,可用
threshold调松紧。 - 未命中时返回最接近的 3 行,模型换个关键词即可,不必重读整屏。
- 截图默认标光标;
grid:true可叠坐标网格(标签就是屏幕像素),但网格标签会被 OCR 读成文字,默认关闭。
安装
客户端(Electron):插件 → + 添加插件,填入 dsh-desktop-control,安装后 立即启用。
CLI profile:
dsh plugin --profile web add dsh-desktop-control
本地开发(改源码立即生效):在客户端「插件」页先移除 npm 版,再把本地目录路径填进安装框。
配置
- id: dsh-desktop-control
name: dsh-desktop-control
config:
enabled: true
powershellPath: powershell.exe # 不在 PATH 时再改
timeoutMs: 30000
screenshotDir: '' # 空 = $DSH_HOME/desktop-control
screenshotMaxWidth: 1440 # 截图长边上限,0 = 不缩放
screenshotGrid: false # 网格默认关(标签会被 OCR 读成文字)
screenshotCursor: true # 默认画光标
keepShots: 40 # 只保留最近 N 张截图
elementsMaxRows: 140 # elements 输出行数上限
| 选项 | 默认值 | 说明 |
|---|---|---|
enabled |
true |
设为 false 时不注册工具 |
powershellPath |
powershell.exe |
PowerShell 可执行文件 |
timeoutMs |
30000 |
单次调用超时 |
screenshotDir |
$DSH_HOME/desktop-control |
截图落盘目录 |
screenshotMaxWidth |
1440 |
截图长边上限,超出等比缩小并回传 scale |
screenshotGrid |
false |
截图是否叠坐标网格(视觉直接看图时才建议开) |
screenshotCursor |
true |
截图是否标出光标 |
keepShots |
40 |
截图保留数量,超出删最旧 |
elementsMaxRows |
140 |
elements 输出截断行数(all:true 可绕开) |
和直接跑 gui.ps1 的区别
gui.ps1 + pwsh 工具 |
本插件 | |
|---|---|---|
| 调用方式 | 每次拼命令行 | 原生工具调用,参数结构化 |
| 执行策略 | 受 Restricted 影响,要绕 | 插件内部固定 -ExecutionPolicy Bypass |
| 沙箱降权 | DSH 的 pwsh 子进程会被降为 Low 完整性,鼠标键盘常被拒 | 插件在宿主进程内 spawn,不经过 pwsh 沙箱 |
| 截图路径 | 自己管理 | 自动落盘到 DSH home 并返回绝对路径 |
也就是说:用插件通常不需要切
danger-full-access,这是它比脚本顺手的地方。
已知限制(重要)
find依赖 OCR,短词和生僻字会漏检或错字。实测「插入」「工作区」这类 2–4 字菜单项在放大 2 倍后能精确命中 1.00;「幻灯片放映」被识别成「幻灯片囗节」,只命中「幻灯片」(0.78)。漏检时工具会给出最接近的行,据此换词。- 后台截图对部分应用是空白。窗口不在前台时用
PrintWindow,PowerPoint 等 GPU 渲染程序会返回空图;此时find会提示「先 activate」。前台窗口走真实屏幕像素,不受影响。 - UIA 看不到 Chromium/Electron/Qt 自绘界面的内容。实测 DSH 客户端(Electron)、Edge(Chromium)、Abaqus(Qt)都只能拿到窗口外壳、标题栏按钮、菜单栏。这类界面的内容请用
find或screenshot。 - 指定
window但找不到、或窗口已最小化时直接报错,不会静默退回全屏(避免截到别的窗口后点错位置)。 - 截图是静态图,
sequence里的鼠标动作不会等界面动画;需要等就插一条wait。 - UAC 安全桌面、登录界面、锁屏无法操作;部分游戏/反作弊/终端会屏蔽模拟输入。
- 仅 Windows(依赖 PowerShell + user32/gdi32 + Windows.Media.Ocr)。
自测
npm run selftest
只测参数构建和校验(不截图、不动鼠标):截图默认项、find 各参数、elements、ocr 绝对路径、click uia、sequence 展开、type -- 保护等。
License
MIT