dsh-quick-screenshot:一键截取 DSH 窗口并放入输入框草稿

前言

在 DeepSeek Harness(DSH)里和智能体协作时,经常需要把当前界面、报错弹窗或 Trajectory 里的状态发给模型。常见做法是系统截图工具截屏,再切回浏览器粘贴或拖进附件区,步骤多,还容易截错窗口。DSH 社区插件 dsh-quick-screenshot 把「截屏 → 进草稿」收成一次操作:由 Host 侧调用各平台截图能力生成 PNG,Client 侧把图片放进已挂载的 composer 草稿,或在没有输入框时写入剪贴板。

这是什么

dsh-quick-screenshot 是维护者 JackEngineer 发布的客户端类 DSH 插件(bundle id:screenshot)。它是一个自包含的 DSH bundle:Host 半部通过平台自带工具截取 DSH 窗口(或指定窗口、整屏),经一条带认证的 Fetch 路由提供 PNG;Client 半部以包内 ./client bundle 形式注入界面。

插件在 SkillHub 插件目录 可查;源码与说明见 GitHub 仓库。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

界面入口与手势

插件在两个席位注册同一套相机控件:

席位 效果
shell.overlay 全窗口悬浮相机按钮,任意页面可用(不限于已挂载 composer 的页面);可拖动,锚点保存在 localStorage
conversation.input.left composer 左侧工具行,紧邻 +

捕获目标由手势区分:

手势 捕获目标
单击 标题包含 DeepSeek Harness 的最大可见窗口;找不到则用当前前台窗口
Shift+单击 整块桌面(多显示器)
Alt+单击 当前前台窗口
Ctrl+Shift+S 与单击相同,页面任意处可用

点击使用 mousedown 并阻止默认行为,不会抢走键盘焦点,光标位置不变。捕获过程中控件显示加载状态;成功且放入草稿时会短暂显示「已放入输入框」及像素尺寸;失败则显示 Host 返回的拒绝说明。完整手势与最近一次结果在 tooltip 中。

图片去向

已挂载 composer 时,Client 走与粘贴、拖放相同的路径:

  1. POST /api/quick-screenshot 返回 PNG 及元数据头。
  2. ctx.conversation.createDrafts(sessionId, [file]) 注册浏览器文件并得到 draft id。
  3. 通过 inputActions 的 addAttachments(ids) 写入附件轨;发送时随消息序列化。

未挂载 composer 时(插件页、Trajectory、设置等),同一次捕获写入系统剪贴板,结果气泡会说明;读者进入对话后再粘贴。若剪贴板写入失败,气泡会给出暂存在磁盘上的 PNG 路径。

当上述服务不可用,Client 会对 [data-composer-input="true"] 派发携带文件的合成 paste 事件,行为与手动粘贴一致。

Host 接口与捕获后端

GET /api/quick-screenshot 描述当前 Host 能力(supported、platform、tool、modes、directory 等)。POST /api/quick-screenshot 接受可选 JSON 体并返回 PNG:

{ "mode": "window", "titlePattern": "DeepSeek Harness", "maxDimension": 0 }
字段 含义
mode window(默认)、active 或 screen
titlePattern window 模式下的窗口标题匹配,默认 DeepSeek Harness
maxDimension 最长边上限;0 表示保持原生尺寸

响应为 image/png,Cache-Control: no-store,并通过 X-Screenshot 头携带 percent-encoded 的 JSON 元数据(mode、method、window、width、height、bytes、path 等)。失败时返回 JSON,含稳定 code(如 CAPTURE_UNSUPPORTED、CAPTURE_TIMEOUT、CAPTURE_FAILED、METHOD_NOT_ALLOWED)及面向用户的 message。路由经 ctx.connection.fetch 注册,共享 /api 桥的 Host/Origin 校验与浏览器 cookie 认证。

各平台捕获工具(摘自 README):

平台 工具 说明
Windows powershell.exe + System.Drawing 优先 PrintWindow(PW_RENDERFULLCONTENT);平坦结果时抬窗后从屏幕矩形回退;Per-monitor-v2 DPI
macOS screencapture -x -o 显示器级捕获;window/active 均解析为当前活动显示器
Linux gnome-screenshot、spectacle、grim、import、scrot 中首个可用 显示器级捕获

Windows 可用环境变量 DSH_SCREENSHOT_POWERSHELL 覆盖默认 shell(例如仅安装 PowerShell 7 时)。文件暂存于 <tmpdir>/dsh-screenshot/,目录仅保留最新 24 个文件;并发点击会排队,不会竞态。

安装与启用

从 GitHub 安装无需构建步骤。在 DSH Plugin Manager 中对本目录执行 install_bundle(本地路径),或用 pnpm 安装后写入 profile 的 dsh.profile.bundles 亦可。常用命令如下:

dsh plugin --profile web add github:JackEngineer/dsh-quick-screenshot

修改 Host 半部 lib/index.js 后需重启 DSH Host(Loader 会缓存 Node 模块);lib/client.js 在 bundle 行切换时会按 mtime/ctime/size 从磁盘重读。

典型用法

  1. 安装并启用 bundle 后,在对话页使用 composer 左侧相机按钮,或拖动悬浮相机到顺手位置。
  2. 需要把当前 DSH 主窗口发给模型时:单击相机(或按 Ctrl+Shift+S),等待「已放入输入框」,直接发送或补充文字。
  3. 需要整屏或多显示器内容时:Shift+单击。
  4. 需要前台其他窗口时:Alt+单击。
  5. 在设置页等无 composer 的页面截图后,切换到对话页 粘贴 到输入框。

本地验证(离线,无需浏览器):

node scripts/selftest.mjs        # Host 路由与真实捕获
node scripts/client-smoke.mjs    # Client bundle、控件与附件流

无桌面环境的 CI 可通过 DSH_SCREENSHOT_SKIP_CAPTURE=1 跳过真实捕获(仓库 .github/workflows/test.yml 采用此方式)。

适用场景与注意

适合经常在 DSH 内截主窗口、整屏或前台窗口,并立刻作为消息附件或剪贴板内容的开发者。Windows 上对被遮挡窗口的窗口模式相对友好;macOS / Linux 文档标明为显示器级捕获,与 Windows 窗口语义不完全一致。

README 列出的已知限制包括:窗口捕获不包含独立 popup 上的上下文菜单;PrintWindow 平坦回退到屏幕矩形时需要目标窗口置于前台。安装前请阅读源码与 MIT 许可证;插件以当前 DSH 进程权限调用系统截图工具,应自行评估环境与信任边界。

结尾

dsh-quick-screenshot 把 DSH 窗口(或屏幕、前台窗口)截图与 composer 草稿打通,减少切出浏览器的次数。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

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

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

小夜