dsh-gui-control:把 Windows 桌面操作固化成可重复任务

前言

在 DeepSeek Harness 里接桌面能力,常见路径是截图后让模型猜坐标、一步一步点。每步都要回模型,链路长;点没点上往往只能再截一张图猜。若同一条流程要反复跑,成本更高,失败后的重试也缺少统一语义。

dsh-gui-control(维护者 seetown,npm 包名 dsh-gui-control,当前版本 0.1.3,MIT 许可证)面向 Windows:优先读无障碍树、按控件名操作,并支持声明式任务文件与投递判定。社区目录归类为工作流,见 SkillHub 目录页;源码与说明见 GitHub。DSH 生态是「一切皆插件」;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

这是什么

一句话:给 DeepSeek Harness 用的 Windows 桌面操控插件——不是单次「帮我点一下」,而是把一串动作写成任务文件,一次工具调用跑完,跑任务文件时模型可不参与循环。

平台与依赖(README 原文):

  • 仅 Windows(Win32 + UI Automation)
  • Windows 10 1809+、PowerShell 5.1
  • DeepSeek Harness 0.1.5-rc.2 ~ 0.2.x
  • Node(package.json):^22.19.0 || >=24.0.0

和常见桌面 Agent 的差异

常见做法 dsh-gui-control
感知 截图 → 模型猜坐标 无障碍树优先,按控件名定位;树不可用时才截图
一次任务的往返 每步一次模型调用 一次调用跑完整个任务文件
失败之后 不知道点没点上 投递判定:没发出去 / 可能发出去了 / 已验证
重复执行 每次重跑一遍 任务文件可复用,带条件等待与重试

README 中的演示方向包括:打开 B 站搜番并选集、通过 UI Automation Invoke 做「零像素位移」语义点击、在表格类场景用多步任务一次填完(文档示例为 17 步 / 0.9 秒 / 一次调用)。

核心功能:三个工具

插件向 Harness 暴露三个工具,分工如下。

工具 作用
gui_snapshot 读窗口的无障碍树(文本),或带屏幕坐标刻度尺的截图
gui_act 执行单个动作,带身份校验和投递判定
gui_task 跑声明式任务文件:一次调用多步,带条件、重试、风险闸门

下面先读树,再按文本点控件,是 README 推荐的路径。

读记事本窗口的无障碍树:

gui_snapshot { window: "Notepad", mode: "tree" }
→ Butto 关闭标签页 / Docum 文本编辑器 / MenuI 文件 ...

按控件名点击(优先于坐标;可走 Invoke,鼠标可不动):

gui_act { action: "click_text", window: "Notepad", text: "最大化" }
→ click ok via InvokePattern | verified: text appeared

投递语义

每个动作返回三选一,决定是否可安全重试:

判定 含义 能否重试
not_delivered 什么都没发出去(派发前就被拒) 安全可重试
delivered_unverified 发出去了,效果未确认 不能盲目重放
delivered_verified 发出去了,且后置条件验证通过 不宜盲目重放

文档指出,这一条直接影响「发消息 / 删文件 / 提交表单」等不可逆操作能否稳妥自动化;结果不明时绝不自动重试。

任务文件

任务用 JSON 描述步骤。示例(摘自 README):

{
  "name": "fill-sheet",
  "steps": [
    { "do": "activate", "win": "工作簿1" },
    { "do": "type", "text": "项目" },
    { "do": "key", "key": "tab" },
    { "do": "type", "text": "金额" },
    { "do": "key", "key": "enter",
      "until": { "op": "pathexists", "text": "C:\\out\\report.xlsx" }, "untilTimeout": 10 }
  ]
}

每步除 do 与动作参数外,还可带 until(轮询到条件成立才算过)、untilTimeout、retry、risk。

  • risk: "high" 的步骤默认拒绝执行,须显式 confirm: true
  • dryRun: true 只返回计划,不碰桌面

安装与启用

在已满足 Windows 与 Harness 版本的前提下,在 Harness 环境中执行官方安装命令:

dsh plugin add dsh-gui-control

也可按仓库路径安装(README 原文):

dsh plugin add seetown/dsh-gui-control

装完不需要重启 Harness。首次调用会预热常驻进程(文档约 1 秒),之后动作为本机 loopback 往返;服务只监听 127.0.0.1:38471,不对外暴露。

性能与限制(README 实测与说明)

文档给出的部分耗时参考(环境以作者实测为准,非性能承诺):

操作 耗时
单步动作(常驻进程) 10.8 ms
语义点击(UIA 树) 26–34 ms
紧凑树读取 86 ms,865 字符
7 步任务(含启动计算器) 680 ms,一次调用
WPS 填 2×3 表格 0.9 s,17 步

已知限制:

  • 画布类应用(WPS 表格、游戏、自绘列表)常无完整无障碍树,只能截图 + OCR,准确率下降
  • 网页任务目前基于截图;CDP 通道已实现但尚未接入工具
  • Roadmap 含 Set-of-Marks 截图、CDP 网页选择器、任务库与意图路由、macOS / Linux 适配(均未在文中标明完成)

安全与适用注意

插件能操控本机真实鼠标键盘,以当前 DSH 进程权限运行。安装与启用前建议阅读 源码 与 MIT 许可证,仅在可信环境使用。

README 列出的安全措施包括:loopback 监听、密码字段输出 <redacted>、高风险步骤需显式确认、投递未验证时不自动重试。

适合:需要在 Windows 上把重复 GUI 流程交给 Harness、且希望少依赖坐标猜测与逐步模型调用的工作流场景。不适合:非 Windows、或强依赖无无障碍树画布且不能接受 OCR 降级的场景。

结尾

dsh-gui-control 把「看树 → 按名操作 → 判定是否投递成功 → 任务文件一次跑完」收成一套 DSH 工具面,定位是工作流型桌面控制而非单次救火。

  • 目录页:https://www.skillhub.cn/plugins/seetown/dsh-gui-control
  • GitHub:https://github.com/seetown/dsh-gui-control
羽毛球分组比赛记分
小程序二维码

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

Xiaoye