dsh-screenshot:在 DSH 输入框里截区域图并当附件发送

前言

在 DeepSeek Harness(DSH)里和模型对话时,经常需要把界面、日志或报错贴进输入框。纯文字说不清时,一张裁好的截图比整屏粘贴更省事。浏览器或客户端自带的截图往往和 DSH 窗口叠在一起,要么截不到「窗口后面的内容」,要么还得手动拖文件进输入框。

下面介绍的 dsh-screenshot 是社区维护的 DSH 客户端插件(维护者 Dcmwfg),在 Composer 的 + 菜单里增加 Screenshot(截图) 入口:可选隐藏 DSH 窗口后在真实桌面上框选,标注后把 PNG 作为待发送附件放进输入框,随下一条消息一起发出。仓库在 GitHub 上约 1 star,社区目录 SkillHub 将其归类为「客户端」;当前资料中的版本号为 v0.5.1。目录站与 DeepSeek / 幻方无官方从属关系,插件按 DSH「一切皆插件」的方式单独安装启用。

这是什么

dsh-screenshot 面向 DeepSeek Harness 的 Composer,做区域截图并写回输入框。同一 GitHub 仓库拆成两个互不复用原生代码的包:Windows 10/11 用 dsh-screenshot(WinForms 全虚拟桌面选区,路由 /dsh-shot/*),macOS 用 dsh-screenshot-mac(系统 screencapture -i,路由 /dsh-shot-mac/*)。只安装与当前系统匹配的那一个;各包在 package.json 里声明了 os,装错会自行提示而不是静默失败。Linux 无实现路径。

运行依赖:能暴露 commandUi 与 webServer + connection 的 DSH 桌面版(发行版 desktop profile)。Windows 需 PowerShell 5.1,选区由 Add-Type 现场编译 C#;macOS 需系统 bash、screencapture、osascript,且须在「系统设置 → 隐私与安全性 → 录屏与系统录音」中授权 DSH。

核心功能

经 README 核实,主要能力如下。

入口与两种模式

  • Composer + → Screenshot:每次提供相同两项——隐藏窗口截图(DSH 外壳隐藏或浏览器最小化,截完恢复)与保留窗口截图(客户端可留在画面内)。
  • 所选模式写入 localStorage:Windows 键名 dsh-screenshot.mode,macOS 为 dsh-screenshot-mac.mode。

Windows 选区与标注

在冻结的桌面上操作(整段虚拟屏 1:1,非页面内 DOM overlay):

  • 拖拽拉出选区;八个白色抓手调整大小(最小 6×6);框内拖拽平移。
  • 按住 Ctrl 在框内拖拽画矩形标注(红色);Ctrl+Z 或 ↶ 撤销最后一笔。
  • Enter 或绿勾确认;Esc、红叉或右键取消。确认后 PNG 进入输入框附件区,在发送前不会自动发出消息。

macOS 行为差异

选区 UI 完全由系统 screencapture 提供(准星、放大镜、空格抓整窗等);插件只接收区域 PNG 并恢复应用前台,不复刻 Windows 上的抓手与 Ctrl 标注。

窗口让开(Windows)

「隐藏窗口截图」时,宿主可能是 dsh-app:// 桌面版(按标题隐藏)、带内嵌 WebView 的套壳启动器(隐藏),或真浏览器标签(最小化)。认不出目标窗口时不移动任何窗口,照常截图并在控制台打警告——画面里带上 DSH 优于误藏他人程序。句柄写入记录文件,可用 snip.ps1 -RestoreOnly(macOS 为 snip-mac.sh --restore-only)在进程异常退出后尝试恢复窗口。

实现要点(便于排错)

  • 选区在原生层完成,避免「只能在窗口视口里框屏幕照片」的旧方案。
  • 客户端通过模拟带 DataTransfer 的 drop 事件,走与手动拖文件相同的附件路径。
  • 开始截图前会轮询等待模式选择面板关闭(最多约 1.5 s),避免「保留窗口」模式把面板冻进画面。

安装与启用

每个平台包是标准 DSH bundle(package.json、index.js、client.js、cordis.patch.yml、scripts/)。不要把仓库根目录(workspace 容器)链进 profile,只链 packages/windows 或 packages/macos。

从 GitHub 仓库 取得对应平台包目录后,在 profile 目录(示例:%USERPROFILE%\.dsh\profiles\desktop 或 macOS 的 ~/.dsh/profiles/desktop)按下面步骤操作。以下路径请换成你本机存放包的真实位置。

  1. 在 profile 的 package.json 增加依赖(路径必须指向包目录,不是仓库根):
"dependencies": { "dsh-screenshot": "link:E:/dsh-plugins/dsh-screenshot/packages/windows" }

macOS 将依赖名与路径改为 dsh-screenshot-mac 与 link:.../packages/macos。

  1. 在同一文件的 dsh.profile.bundles 中登记 bundle 名:
"dsh": { "profile": { "bundles": ["...", "dsh-screenshot"] } }

macOS 使用 "dsh-screenshot-mac"。

  1. 在 profile 的 node_modules 下建立 junction,指向同一包目录(Windows 示例):
New-Item -ItemType Junction -Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-screenshot" `
  -Target "E:\dsh-plugins\dsh-screenshot\packages\windows"
  1. 重启 DSH。新 bundle 在启动时组装;修改源码后同样需重启(junction 便于改代码即测)。

浏览器侧若由远端页面连本机 DSH 宿主,也可按 README「Using it from the browser build」将同名 bundle 链入 web profile:截图仍在宿主机器桌面上执行,而非浏览器所在设备。

安装前请自行阅读仓库源码与 MIT 许可证。插件原生脚本在 DSH 进程权限下运行,具备截屏与操控窗口的能力,只应从可信来源安装。

典型用法

  1. 打开 Composer 的 + 菜单,点 截图(与 文件 相邻;插件会把命令行重排到文件旁)。
  2. 选择「隐藏窗口」或「保留窗口」;选择会被记住。
  3. 在暗幕冻结的桌面上框选区域(Windows 上可 Ctrl 标注);macOS 使用系统选区。
  4. 按 Enter 或绿勾确认。
  5. 输入框上方出现 PNG 草稿附件;编辑文字后回车发送。

若菜单中没有截图项,检查 bundles 与 node_modules junction 后重启。窗口卡住未恢复时,可按 README 故障表执行 -RestoreOnly / --restore-only,或从任务栏 / Dock 切回 DSH。

适用场景与注意

适合:在 DSH 对话里快速贴区域截图(UI 问题、终端输出、多显示器局部画面);需要在「先藏开 DSH 再截后面内容」与「把 DSH 自己也框进去」之间切换时。

注意:

  • 仅 Windows 10/11 与 macOS;SkillHub 简介侧重 Windows,但仓库明确提供 macOS 包。
  • 标注、跨屏坐标等细节以 Windows 包为准;macOS 遵循系统截屏行为。
  • 「保留窗口截图」截的是当前屏幕所见,要把 DSH 拍进去需先把它置前。
  • 社区目录与 GitHub 是事实来源;星标、版本以页面显示为准(资料中 v0.5.1)。

结尾

dsh-screenshot 把区域截图收进 DSH Composer 的发送流程:原生选区、可选隐藏宿主窗口、PNG 作为待发送附件。需要功能细节、HTTP 路由与自检命令时,以仓库 README(含 中文版)为准。

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

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

小夜