前言¶
在 DeepSeek Harness(DSH)里做 Windows 桌面自动化,常见路径是 Python 常驻服务、MCP 多一跳,或依赖视觉模型逐像素猜控件。对只想让智能体「看屏幕、读控件树、点按、打字、启停应用」的开发者来说,多一层进程和协议往往等于多一层故障面。下面介绍社区插件 dsh-computer-use(维护者 Wonderow666,MIT 许可):把上述能力收进一个原生 computer 工具,底层是约 41 KB 的单文件 C# 桥 bin/cu.exe(Win32 + UI Automation),无 Python、不经 MCP,仓库自带编译产物,装完即用。
这是什么¶
dsh-computer-use 是 DSH 的客户端类插件(仅 win32),面向 Windows 10/11 与 DSH 0.2.x(desktop 或 web profile)。它在模型侧注册一个工具名 computer,通过 action 枚举驱动屏幕截图、UI Automation 控件树、SendInput 键鼠注入、UIA 模式调用(SetValue / Invoke 等,不依赖焦点与像素)、应用启动与结束、剪贴板与进程列表等能力。策略(进程黑名单、是否允许 launch/kill 等)在 Node 插件层;引擎 cu.exe 另有两道与策略无关的物理护栏(目标窗口须在前台才接受带 hwnd 的键入;点击前双证人坐标归属检查)。
插件刻意零第三方 npm 依赖:参数 schema 手写 JSON Schema,校验自实现,只用 node: 内置模块,以便 link: 安装时 profile 里能正常解析。
核心功能¶
单一工具,23 个 action¶
一次调用只选一个 action。README 按类别归纳如下(节选要点):
| 类别 | 代表 action | 作用 |
|---|---|---|
| 预检 | inputcheck |
移动光标再复位,回报落地与完整性;动手输入前建议先跑 |
| 观察 | info、windows / procs、screenshot、snapshot、find / hit、geom、modals、hover |
显示器与 DPI、窗口/进程、PNG 截图路径、控件树(元素 id 如 0.2.1)、几何与模态窗等 |
| 输入 | click、move、scroll、drag、type、key、invoke |
SendInput 或 UIA 驱动;支持 hwnd/title 与 relx/rely(客户区相对坐标) |
| 生命周期 | launch、kill、focus、wait |
启停进程、置前、等待 |
| 杂项 | clipboard |
读写剪贴板 |
设计约定(与用法直接相关):
- 截图不直接回模型文本:PNG 落盘后返回路径与
scale,需再由宿主侧视觉工具读图。 snapshot与find的元素 id 同一套编号,find得到的id可直接传给invoke。- 单次动作一次进程调用,默认超时 30 s(可在配置里改
timeoutMs);无常驻服务。 dryRun: true只解析参数、不注入、不抢焦点,便于预演。
click / move / drag 会在注入后读回光标,偏差超过 2 px 会报错并附诊断,而不是静默成功。
安全边界(插件层)¶
配置见 cordis.patch.yml,profile 的 cordis.patch.yml 可按插件 id 覆盖字段:
blockedProcesses:目标窗口进程名/类名/标题命中则拒绝输入类动作;默认含TslGame.exe/UnrealWindow;只读动作不受影响。refuseFullscreenForeground:目标占满整屏时拒绝注入(默认关)。allowProcessControl: false时禁用launch/kill。- 另有
timeoutMs、enginePath、artifactsDir等。
判定对象是即将接收输入的窗口,不是「当前前台」误伤后台禁运应用。
安装与启用¶
要求:Windows 10/11、DSH 0.2.x、Node ≥ 20。插件版本在 package 中为 0.2.0。
# 方式 A:直接从 GitHub 装(推荐)
dsh plugin --profile desktop add github:Wonderow666/dsh-computer-use
# 方式 B:本地开发(link:,改代码立刻生效,不用重装)
dsh plugin --profile desktop add link:F:\path\to\dsh-computer-use
# 然后在同一 profile 的 package.json 里确认 dsh.profile.bundles 末尾有 "dsh-computer-use"
# (`dsh plugin add` 通常会自动追加;没有就手动加一行)
# 重启 DSH —— 插件在进程启动时挂载
dsh 为 DSH 自带启动器,例如:
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add github:Wonderow666/dsh-computer-use
重启后须开新会话:工具在会话创建时装配,进行中的对话不会热更新。若需确认挂载,可设环境变量 DSH_COMPUTER_USE_DEBUG=1,插件会在 stderr 打出 apply 与 registered tool 'computer'。
仓库已带 bin/cu.exe,无需本地构建即可使用;修改 bridge/cu.cs 时可按 README 用 build.ps1 自编译。
典型用法¶
模型侧一次调用形态示例(来自 README):
{ "action": "screenshot", "hwnd": "656368", "maxw": 1200 } // -> PNG 路径 + scale
{ "action": "snapshot", "hwnd": "656368", "depth": 6 } // -> 控件树 + 元素 id
{ "action": "invoke", "hwnd": "656368", "elementPath": "0.2.1" }
{ "action": "type", "hwnd": "656368", "text": "你好,世界" }
{ "action": "key", "combo": "ctrl+shift+s" }
常见闭环:先 screenshot 或 snapshot 建立状态 → 用 invoke 或带 relx/rely 的 click 操作 → 需要真实键鼠时用 type / key(带 hwnd 时须先 focus 到前台)。README 文档图展示了 UIA SetValue 写输入框、Invoke 点按钮,以及 launch cmd 后打字回车执行命令的控制台闭环。
给了 hwnd / title 时,插件会把目标置前并在结果里回报 focused: true,降低按键落到别窗的风险。
适用场景与注意¶
适合:在 DSH desktop(或对应 profile)里做 Windows 原生 GUI 自动化、希望少依赖 Python/MCP/视觉模型、需要 UIA 稳定元素 id 与可复现点击的 Windows 10/11 开发者。
务必注意:
- 插件与 DSH 进程同一权限运行;安装前请自行审阅源码与 MIT 许可证,理解
blockedProcesses等策略是否满足你的环境。 - 仅 Windows;Linux/macOS 不适用。
- 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文介绍的是其中一款客户端插件。
focus 在 Windows 前台锁下可能逐级尝试仍失败,会返回 ok:false 并说明当前前台是谁——应先处理置前再输入,不要假设每次都能抢焦点。
结尾¶
dsh-computer-use 把 Windows 桌面自动化收成 DSH 原生的一个 computer 工具:观察、输入、应用生命周期与剪贴板在同一 schema 下完成,底层单文件 C# 桥、无 MCP 跳转、输入多层防护。若你在 DSH 里需要「真正动手」操作本机 Windows GUI,可按上文命令安装、重启并新建会话后使用。