前言¶
在 DeepSeek Harness(DSH)里做桌面相关任务时,常见做法是让用户手动描述界面、复制窗口标题,或自己截图再贴进会话。智能体缺少对真实桌面的结构化感知,也很难按坐标点击、切前台窗口或敲组合键。若你希望 Host 侧直接提供「列窗口、截图」以及可选的键鼠驱动,且能在设置里把「动手」一键关掉,社区插件 桌面操控(仓库名 dsh-bundle-screen-view,维护者 OraSkyC)就是面向 Windows 客户端场景的一条路径。它注册 7 个工具:2 个只读、5 个会真的操作桌面,并附带多层安全闸门与可选的操作前确认。
这是什么¶
桌面操控 是一个 DSH bundle 插件:通过 Host 的 tools 服务向智能体暴露 Windows 桌面能力——截取屏幕、列出顶层窗口,以及在用户授权与配置允许时驱动真实鼠标与键盘。插件以前曾叫「屏幕视野」;现名强调除「看」之外还有输入类工具。
- 目录页:SkillHub 插件页
- 源码与文档:GitHub — OraSkyC/dsh-bundle-screen-view
- 分类:客户端(仅
win32) - 当前包版本(
package.json):1.4.0 - 许可证:MIT
DSH 社区目录(如 SkillHub)是独立生态站点,与 DeepSeek / 幻方无官方从属关系;安装插件前建议自行阅读源码与许可证。
核心功能:七个工具¶
工具分两类。被授予输入类工具的智能体,在权限允许且闸门打开时,理论上能完成与你本机用户相近的 UI 操作(点按、输入、alt+f4 等)。安装前请先理解下表。
只读(不移动光标、不按键)¶
| 工具 | 作用 |
|---|---|
window_list |
列出可见顶层窗口,前台优先;返回 hwnd、标题、屏幕矩形。 |
screenshot |
截主屏或指定窗口,返回可见图片与文字摘要。可选 window(标题子串,不区分大小写)、maxWidth(默认 2560,超出等比缩小)。 |
会操作桌面(请谨慎)¶
| 工具 | 作用 |
|---|---|
window_activate |
将窗口带到前台(最小化会先还原);在 type_text / key 前常用,保证输入落到目标窗口。 |
mouse_click |
移动光标到虚拟屏幕坐标 (x, y) 并点击;button 为 left / right / middle,clicks 为 1–3。 |
type_text |
向当前焦点窗口输入 Unicode 文本(可含换行)。 |
key |
单键或组合键,如 enter、ctrl+a、alt+f4、f5 等。 |
scroll |
在鼠标位置滚动;可给 x,y 先移动光标;deltaY 中 120 约为一格,向上为正。 |
四个输入类工具在说明中均提醒:仅应在用户要求操作 UI 时使用,并优先针对单个窗口。
截图实现与使用注意¶
实现上优先用屏幕 DC + BitBlt 做窗口截图(从 DWM 合成后的屏幕 DC 裁窗口矩形);必要时兜底 PrintWindow。因此 窗口截图是「该矩形位置上可见的像素」——若被其它窗口遮挡,截到的可能是遮挡内容。典型顺序是先 window_activate 再 screenshot。
安装与启用¶
要求:Windows;DSH 为 web 或任何带 Host tools 服务的 profile;Node >= 22.19.0;无 npm 构建步骤。插件硬依赖 Host 的 tools、attachments、webServer 服务。
- 在 DSH 中打开 设置 → 插件 → 添加插件,填入仓库地址;或命令行安装(profile 以你环境为准,README 示例为
desktop):
dsh plugin --profile desktop add https://github.com/OraSkyC/dsh-bundle-screen-view
- 安装完成后 重启 DSH。
设置与安全闸门¶
在 设置 → 插件 → 桌面操控 中修改用户层配置 立即生效,无需重启;关闭输入组后,5 个输入类工具会从当前会话中消失。
配置两层(优先级从低到高):
| 层 | 位置 | 生效 |
|---|---|---|
| 部署默认 | 包内 cordis.patch.yml |
改后需重启 DSH |
| 用户覆盖 | %USERPROFILE%\.dsh\state\dsh-bundle-screen-view\settings.json |
立即生效(稀疏存储,仅保存你改过的键) |
安全相关键(节选)¶
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关;关后不再注册任何工具。 |
allowCapture |
true |
是否注册 window_list、screenshot(只读,但会把屏幕内容交给模型)。 |
allowInput |
true |
是否注册五个输入工具;只想「看」请设为 false。 |
confirmInput |
false |
输入操作前是否弹窗征求同意(见下节)。默认关闭:权限允许则直接执行。 |
行为相关键(节选)¶
| 键 | 默认 | 说明 |
|---|---|---|
captureMaxWidth |
2560 |
截图默认最大宽度(320–8192)。 |
imageCacheSize |
64 |
截图引用缓存张数(4–512)。 |
excludeWindowTitles |
[] |
逗号分隔标题子串;命中窗口不会出现在 window_list,也不能被截图或操作。 |
默认不弹窗:未开启 confirmInput 时,只要工具已注册且 DSH 权限预设允许,智能体调用 mouse_click 等不会先征求同意。降低风险可组合使用:关 allowInput、收紧权限预设、开启 confirmInput、或用完停用/卸载插件。
操作前征求同意(confirmInput)¶
自版本 1.3.0 起提供可选闸门。打开 confirmInput 后,五个输入工具每次调用会通过 ctx.userQuestions 三选一:允许本次操作、允许本次会话所有操作、不允许。弹窗会展示具体操作内容(如 type_text 的字符数与截断后的文本、mouse_click 的坐标等)。拿不到明确同意则 拒绝执行;子智能体需继承主会话的「允许本次会话」授权,否则拒绝。
相关超时配置:confirmTimeoutSeconds 默认 300(0 表示不超时);confirmAllowOnTimeout 默认 false(超时视为不同意)。显式设为 true 会在无人应答时放行单次调用,面板会以红底警告提示,并统计「已因超时放行」次数。
只读工具 screenshot、window_list 不在该闸门内。
典型用法思路¶
README 未给出固定「一键脚本」式示例,但工具参数组合可复现常见流程:
- 调用
window_list,根据标题找到目标窗口的hwnd或标题子串。 - 需要操作或干净截图时,先
window_activate指定窗口。 - 用
screenshot观察界面(必要时设window或maxWidth);涉密窗口可通过excludeWindowTitles排除。 - 仅在用户明确要求改 UI 时,使用
mouse_click、type_text、key、scroll完成点击、输入与滚动。
输入前切前台、截图前切前台,是文档明确提到的使用习惯。
怎么降低风险(五层)¶
- 操作前征求同意(
confirmInput,默认关)。 - 插件闸门:关
allowInput只保留「看」。 - DSH 权限预设(如
read-only/workspace-write/danger-full-access)。 - 不装即无:未加载插件则无这些工具。
- 提示词约束:工具描述要求模型仅在用户要求时操作 UI。
插件以 当前 DSH 进程所在 Windows 用户权限 运行;勿在不可信提示词或网页驱动下开放输入工具。
结尾¶
桌面操控 把 Windows 桌面的「看」与「动」拆成可配置的 Host 工具集,适合需要在 DSH 里做窗口定位、截图辅助和受控 UI 自动化的开发者;平台限定 Windows,安全默认偏「顺畅执行」,需要保守时请关输入、开确认或收紧权限。
- 目录页:https://www.skillhub.cn/plugins/OraSkyC/dsh-bundle-screen-view
- GitHub:https://github.com/OraSkyC/dsh-bundle-screen-view