前言¶
在 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 可用等价目录联接):
- 将插件目录联接至
~/.dsh/profiles/<profile>/node_modules/dsh-image-annotate。 - 在
~/.dsh/profiles/<profile>/package.json增加依赖:"dsh-image-annotate": "file:<path to checkout>"。 - 在
~/.dsh/profiles/<profile>/cordis.patch.yml的insert中加入:
- id: image-annotate
name: dsh-image-annotate
回滚:删除上述 insert 行、依赖与联接即可。
典型用法¶
- 在 DSH Web 对话页的 composer 中复制一张截图(剪贴板勿夹带文本或其他图片)。
Ctrl+V:overlay 覆盖图片;点铅笔展开工具栏,选颜色与粗细,在图上标注。- 需要说明时用 text 工具点击位置输入文字。
- 满意后按 Send 或
Enter:带标注的 PNG 出现在附件栏,照常发消息。 - 若决定不改动,按
Esc:附件为原始粘贴文件。 - 附件已在 composer 里时,点铅笔可重新标注同一张图。
实现要点(改插件或排错时)¶
| 文件 | 作用 |
|---|---|
index.js |
宿主侧空 apply(),供 loader 挂载与 client 模块扫描 |
lib/client.js |
粘贴拦截、overlay、canvas、flatten、附件写入 |
cordis.patch.yml |
bundle 安装时写入的 loader 行 |
README 强调的四点设计:
- 在
document的 capture 阶段拦截 paste,避免「纯图粘贴」未经标注就进入输入轨;取消时交还原始File。 - overlay 通过 portal 挂到
document.body,避免 composer 祖先 transform 导致position: fixed错位。 - 发送优先走 shell 官方路径:
conversation.createDrafts+inputActions.addAttachments;不可用时回退到[data-composer-input]上的合成ClipboardEvent。 - 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 仓库。