dsh-image-annotate:在 DSH Web 输入框里给截图画标注再发送

前言

在 DeepSeek Harness(DSH)里和模型讨论界面问题时,截图往往要圈出按钮、框选区域或补一行说明。若先把图丢进外部编辑器再贴回对话,步骤多、分辨率也容易在来回导出里变样。Cursor 里常见的「粘贴 → 在图上标记 → 发送」流程,DSH 原生输入框并不自带。

dsh-image-annotate 是社区维护的 DSH 客户端插件:在 Web GUI 的 composer 里拦截「仅含一张图」的粘贴,打开全屏 overlay 用画笔、箭头、矩形、椭圆和文字戳标注,发送时把笔迹烘焙成与原图同分辨率的 PNG 附件;不画直接 Esc 则原文件字节级原样入轨。插件注册官方 slot 与 locale、Conversation 等 client 面,不 patch 上游源码,卸载时去掉 loader 一行即可。

维护者:thezavtrak-a11y。社区目录分类为「趣味换装」;包版本 1.0.0,MIT 许可证。目录页:SkillHub。

这是什么

一句话:DeepSeek Harness Web 客户端插件——粘贴截图后在 overlay 上标注,再以普通附件形式进入对话。

包声明 dsh.client(浏览器侧)与 dsh.bundle.patch(loader 行),与常见 DSH 插件安装方式一致。核心逻辑在 lib/client.js:capture 阶段监听粘贴、portal overlay、canvas 绘制、flatten 与附件交接;index.js 仅作宿主挂载占位。

核心功能

下面能力均来自仓库 README 与 package.json 说明。

粘贴与 overlay

  • 剪贴板「只有一张图、没有文本」时,Ctrl+V 打开标注层;带文本或多图的粘贴交给 shell 默认行为。
  • composer 里已有图片时,会出现小铅笔入口,可再次打开 overlay,无需重新粘贴。

工具与样式

  • 工具:pen、arrow、rectangle、ellipse、text 文字戳。
  • 六种颜色(含白色,便于深色截图)与三档粗细;文字工具下三档对应图像坐标中的 12 / 24 / 48 px 字号。
  • 文字:在点击处输入,Enter 插入,Shift+Enter 换行,Esc 取消该条文字(不关闭 overlay)。

撤销与发送

  • 按笔划撤销或清空;支持 Ctrl+Z。
  • Enter 或 Send:笔迹合成 PNG,分辨率与源图 1:1,走 composer 附件流程。
  • Esc 或不标注直接退出:原粘贴文件不重新编码,原样归档。

失败处理

  • 无法解码的图片会提示,仍允许按粘贴原样归档,避免空白框。

安全与隐私(payload 审计约定)

  • 运行时代码不含网络、localStorage 等存储、eval / innerHTML;不请求额外权限,不主动调用 Clipboard API,仅响应用户已发起的 paste。标注状态在 React 状态中,overlay 关闭即丢弃。

安装与启用

安装前请自行阅读源码与 MIT 许可证。插件在 DSH 进程与 Web 客户端上下文中执行,权限边界与当前 profile 一致。

包要求 Node >=22。从本地 checkout 或已发布副本安装:

dsh plugin --profile <profile> add /path/to/dsh-image-annotate

安装后刷新页面一次——新 loader 行在页面构建 module 表时才会被加载。

开发时也可手动挂到 profile(README 中的 Windows 示例;Linux/macOS 可用等价目录联接):

  1. 将插件目录联接至 ~/.dsh/profiles/<profile>/node_modules/dsh-image-annotate。
  2. 在 ~/.dsh/profiles/<profile>/package.json 增加依赖:"dsh-image-annotate": "file:<path to checkout>"。
  3. 在 ~/.dsh/profiles/<profile>/cordis.patch.yml 的 insert 中加入:
- id: image-annotate
  name: dsh-image-annotate

回滚:删除上述 insert 行、依赖与联接即可。

典型用法

  1. 在 DSH Web 对话页的 composer 中复制一张截图(剪贴板勿夹带文本或其他图片)。
  2. Ctrl+V:overlay 覆盖图片;点铅笔展开工具栏,选颜色与粗细,在图上标注。
  3. 需要说明时用 text 工具点击位置输入文字。
  4. 满意后按 Send 或 Enter:带标注的 PNG 出现在附件栏,照常发消息。
  5. 若决定不改动,按 Esc:附件为原始粘贴文件。
  6. 附件已在 composer 里时,点铅笔可重新标注同一张图。

实现要点(改插件或排错时)

文件 作用
index.js 宿主侧空 apply(),供 loader 挂载与 client 模块扫描
lib/client.js 粘贴拦截、overlay、canvas、flatten、附件写入
cordis.patch.yml bundle 安装时写入的 loader 行

README 强调的四点设计:

  1. 在 document 的 capture 阶段拦截 paste,避免「纯图粘贴」未经标注就进入输入轨;取消时交还原始 File。
  2. overlay 通过 portal 挂到 document.body,避免 composer 祖先 transform 导致 position: fixed 错位。
  3. 发送优先走 shell 官方路径:conversation.createDrafts + inputActions.addAttachments;不可用时回退到 [data-composer-input] 上的合成 ClipboardEvent。
  4. slot 渲染抛错会被框架 error boundary 摘掉直至刷新;插件对 overlay 与重标注 chip 自建边界,hook 使用 selector 形式(如 useInput(selectAttachmentIds))。

笔迹存图像坐标,flatten 时按源图原生尺寸写 PNG;文字作为 {tool: 'text', ...} 参与 undo 与导出。

维护者在仓库提供 node --check、tools/smoke.mjs、tools/check-api.mjs 等自检命令;有运行中 GUI 时可用 tools/live-ui.mjs 做端到端粘贴与发送验证。本文不展开具体命令参数,需要时见 GitHub README 的 Verify 一节。

适用场景与注意

适合

  • 在 DSH Web 里向模型指认 UI 元素、框选区域、在截图上补短文字说明。
  • 希望标注后仍以「普通 PNG 附件」进入对话、且导出分辨率与截图一致的场景。

注意

  • 仅对「单图、无文本」粘贴自动打开 overlay;混合剪贴板行为不变。
  • 客户端 slot 若因未捕获异常崩溃,需刷新页面才能恢复插件 UI。
  • 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;插件星标以目录/GitHub 当前显示为准(截至资料抓取时为 0)。
  • 安装插件即信任其客户端代码;发布前仓库用 tools/audit-public.mjs 约束 payload,自行安装仍建议过一遍源码。

结尾

dsh-image-annotate 把「粘贴截图 → 轻量标注 → 1:1 PNG 入轨」收进 DSH Web composer,对齐 Cursor 侧常见工作流,且通过官方 client 注入点接入、不改动上游树。需要试用或看更新时,可打开 SkillHub 目录页 与 GitHub 仓库。

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

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

Xiaoye