dsh-computer-use:用单一 `computer` 工具原生操控 Windows 桌面

前言

在 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,可按上文命令安装、重启并新建会话后使用。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜