dsh-plugin-screenshot:让 DSH 会话里的模型真正「看见」屏幕

前言

DeepSeek Harness(DSH)在「电脑使用」场景里预留了工具能力位,但桌面宿主并未自带本机截屏。开发者在调试 UI、对照报错窗口、或让模型根据当前界面给建议时,往往只能口述或手动贴图,会话无法直接读取屏幕状态。

下面介绍社区插件 dsh-plugin-screenshot(维护者 HsgtLgt)。它在 Windows 上向 Cordis 注册名为 screenshot 的工具,模型调用后既能拿到工作区内的 PNG 路径,也能通过 DSH 原生图像块看到画面。SkillHub 目录将其归类为「模型推理」;截至撰写时 GitHub 星标为 0,许可证为 MIT,当前包版本为 0.0.5。

这是什么

dsh-plugin-screenshot 是面向 DeepSeek Harness(Windows 宿主)的截图工具插件。一句话定位:截取整个虚拟桌面或按窗口标题匹配的单窗口,保存为 PNG,并以附件形式回传给会话中的模型与用户。

与仅用 CopyFromScreen 的常见做法相比,本插件针对遮挡、最小化、部分 GPU 应用空白帧等场景做了额外处理(详见后文「能力对照」)。

核心功能

插件在运行时注册 screenshot 工具,主要能力如下(均来自项目 README 与实现说明):

  1. 全屏 / 多显示器:target=screen(默认)时截取多显示器虚拟桌面。
  2. 按标题截窗口:target=window 时通过 window_title 做不区分大小写的标题子串匹配。
  3. 遮挡窗口:使用 PrintWindow(PW_RENDERFULLCONTENT) 让窗口自绘,被其他窗口完全盖住时仍可截到该窗口内容。
  4. GPU 应用空白帧:对 RustDesk、Chrome、Electron 等遮挡后可能返回空白的情况,采样检测后自动「临时前置」窗口,用 CopyFromScreen 兜底,截完再切回原前台。
  5. 最小化窗口:自动还原 → 截图 → 再缩回。
  6. 持久化与展示:PNG 写入会话工作区;同时经 ctx.attachments.saveImage() 校验/降采样后进入 DSH 附件库。工具描述中约定:用户点名某应用时必须用 window 模式;成功后模型应用 ![截图](<路径>) 内嵌展示。

能力对照(普通 CopyFromScreen vs 本插件)

场景 普通 CopyFromScreen dsh-plugin-screenshot
窗口在屏幕上可见 支持 支持
窗口被其他窗口完全遮挡 截到的是上层内容 支持(PrintWindow)
GPU 渲染应用遮挡后空白帧 — 采样 + 临时前置兜底
窗口最小化 不支持 支持(还原后截再缩回)
缩到托盘(无渲染表面) 不支持 明确报错并提示先唤起
远程桌面窗口(RustDesk / ToDesk 等) 不稳定 README 称实测可用

环境与依赖

  • 平台:Windows 10 及以上(README 徽章写明 Windows 10+)。
  • DSH / Cordis:要求 DeepSeek Harness ≥ 0.2.0;对等依赖 @deepseek-ai/dsh-tools、@deepseek-ai/cordis(^0.2.0-rc.2)由运行时树提供,无需在插件目录单独安装。
  • 实现:无额外原生依赖包,通过 PowerShell 调用 user32 与 System.Drawing。
  • 模型侧:需支持图像输入,否则工具返回的图像块无法被模型利用。

安装与启用

官方 README 给出的安装方式为先克隆仓库,再在 DSH 插件管理(plugin_manager)中安装本地 bundle。步骤如下。

1、克隆插件仓库(PowerShell):

git clone https://github.com/HsgtLgt/dsh-plugin-screenshot.git

2、在 plugin_manager 中执行 install_bundle,路径指向克隆目录下的插件根(注意 file: 前缀与完整路径):

file:<克隆目录>/dsh-plugin-screenshot

3、重启 DSH 应用使插件生效。

社区目录页:https://www.skillhub.cn/plugins/HsgtLgt/dsh-plugin-screenshot。SkillHub 为独立社区站点,与 DeepSeek / 幻方无官方从属关系;安装前请自行查阅源码与 MIT 许可证,并知悉插件以当前 DSH 进程权限运行。

工具参数

参数 类型 说明
target screen | window 截图目标,默认 screen
window_title string target=window 时用于标题子串匹配
output_path string 可选;相对会话工作区。默认 screenshots/screenshot-<时间戳>.png

典型用法

模型在会话中调用 screenshot 即可;开发者无需单独写 HTTP 接口。示意性参数组合如下。

截全屏(默认):

{
  "target": "screen"
}

截标题包含某关键字的窗口(用户明确提到某个应用时应使用 window):

{
  "target": "window",
  "window_title": "Visual Studio Code"
}

指定保存路径(相对工作区):

{
  "target": "screen",
  "output_path": "screenshots/debug-ui.png"
}

调用链概要:解析 output_path → 子进程 PowerShell 匹配 HWND、处理最小化/PrintWindow/空白兜底 → 写 PNG → 读回字节 → 附件库持久化 → 返回路径与图像块。

适用场景与注意

适合谁:在 Windows 上使用 DSH、希望模型参与「看屏幕再决策」的智能体或本地助手场景;分类上目录归入「模型推理」,本质是向模型提供视觉输入的工具插件。

已知限制(README 原文):

  • GPU 硬件渲染的窗口若长期被遮挡,偶可能拿到过期帧(非空白但内容旧),重截一次即可。
  • 从未渲染过内容的隐藏/托盘窗口没有可截表面,会明确报错。
  • 仅支持 Windows;不支持的其他平台请勿安装。

安全与信任:插件会启动 PowerShell、操作窗口 Z 序与屏幕像素;安装前请阅读 GitHub 仓库 中 lib/index.js 与 bundle 配置,确认符合你的环境策略。

结尾

dsh-plugin-screenshot 填补了 DSH Windows 桌面宿主缺少一等公民截屏工具的空位,并把遮挡、最小化、部分 GPU 空白帧等实际问题纳入实现。若你的会话需要模型「看见」本机界面,可按上文在 plugin_manager 安装 bundle 并重启 DSH。

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

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

小夜