前言¶
DeepSeek Harness(简称 DSH)的核心理念是「一切皆插件」:模型适配、工具、会话界面都可以用插件拼起来。网页端对话用久了,会碰到一个很具体的问题:助手回复很长,你其实只想针对其中两三处原文提问,但每次都得把段落复制进输入框、自己编号、再交代「请按条回答」。编号一乱,对照就断了。
dsh-annotation 把这件事收成网页里的选中操作:在助手回复里划一段文字、写批注(也可以只标记不写字),回车后批注块随当前问题一起发给模型,回复按 Annotation 1、Annotation 2 逐条对照。本文按插件目录页、GitHub 仓库 README / package.json 核对后整理,说明它是什么、怎么装、怎么用。社区插件目录是独立站点,与 DeepSeek / 幻方没有官方从属关系,安装前仍应自己看源码和许可证。
这是什么¶
dsh-annotation 是一款面向 DSH Web 界面的界面增强插件,由 GitHub 组织 omdsh-dev 维护,npm 包名为 @omdsh-dev/dsh-annotation。目录页分类为「界面增强」,许可证为 MIT。仓库 package.json 在本文核对时版本为 1.3.16,要求 Node.js >=20,dsh.client.platform 声明为 web。
它解决的是网页对话里「对着原文提问、并按条拿回复」这件事,而不是给 TUI 或无界面 profile 加能力。形态上走的是 DSH 官方 bundle 插件机制:package.json 里声明 dsh.bundle 与 dsh.client,浏览器端由 client-modules 注入;Node 侧 apply() 是空实现,真实逻辑都在 client.js。README 强调 零核心改动——不改 DSH 本体文件,cordis.patch.yml 只 insert 一次自身 id,profile patch 保持空数组。
截至 2026-08-17,GitHub 仓库星标为 67(目录页当时显示 46,以仓库页面为准)。仓库创建于 2026-08-10,目录收录日期为 2026-08-15。
核心功能¶
下面这些能力来自仓库中文 README 的功能表,与目录页简介一致。
选中即批注¶
在助手回复里选中任意文字,工具条出现「批注」,写入说明后保存。批注正文可以留空,效果等于只标记这段原文。点选空白处或按 Esc 可以收起工具条。
原文位置会留下亮蓝色编号脚标和高亮。脚标在视口内锚定,并做碰撞避让;滚出屏幕后也不会丢。
跨回合收集,回车一并发送¶
批注可以跨消息、跨回合累积,编号从 1 起。输入框旁会出现「批注 ×N」标签:鼠标悬停可查看全部内容,也可以逐条删除。
准备好问题后直接回车。发给模型的是:批注块(编号 + 原文 + 批注)+ 输入框里的问题。你自己的气泡里不会出现整段批注文本,只保留问题和「批注 ×N」标签,悬停才能看到内容。README 写明:批注块在浏览器绘制前就从气泡 DOM 里拿掉,用来避免闪一下原文。刷新后,历史消息会再修一次。
回复按编号对照¶
发送时会往消息里注入格式指令,要求模型按「Annotation 1:…」「Annotation N:…」逐条回应。流式结束后,回复里的这些标签会渲染成可悬浮芯片,悬停显示该条对应的原文和你的批注。
和聚焦对话一起用¶
README 写明:它兼容 dsh-focus-chat 的聚焦会话视图。选区批注、回复芯片、角标重新定位在聚焦标签页和主聊天视图里都可以用。这是仓库声明的兼容性,不是第三方评测。
安装与启用¶
目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行:
dsh plugin add github:omdsh-dev/dsh-annotation
该插件只声明了 Web 端,仓库 README 把官方 bundle 安装路径写成指定 web profile(作者称为「唯一」路径),不需要 npm 账号:
dsh plugin --profile web add git+https://github.com/omdsh-dev/dsh-annotation.git
本地开发调试可以在克隆目录里执行 dsh plugin --profile web add .。
需要可复现安装时,目录页建议固定 commit 哈希。本文核对到 main 最新提交为 0b0ceb6415c5c1204b9f73716e905b392acd729b(2026-08-16),可以写成:
dsh plugin add github:omdsh-dev/dsh-annotation#0b0ceb6415c5c1204b9f73716e905b392acd729b
或按 README 的 git URL 形式,在地址后同样加上 #<commit>。commit 会随仓库更新变化,安装前请再核对一次 GitHub。
README 提醒:只通过 dsh plugin add 或只写 bundles 接入;不要再在 profile / home 的 cordis.patch.yml 里对同一个 id 做一次 insert,否则配置里会出现重复项。
安装后按 README 自检(rg 为 ripgrep;Web 默认端口以本机实际为准):
dsh --profile web --dump-config | rg "id: dsh-annotation" # 必须恰好 1 行
curl -s -o /dev/null -w '%{http_code}\n' "http://127.0.0.1:3080/plugins/@omdsh-dev/dsh-annotation/client.js" # 期望 200
README 给出的重启示例如下,这是 macOS 的 launchctl 写法:
launchctl kickstart -k "gui/$(id -u)/com.dsh.web"
其他系统按本机启动 DSH Web 的方式重启即可,仓库没有另写 Linux / Windows 命令。
典型用法¶
交互流程按仓库 README 可以复现如下:
- 在助手气泡里拖选一段文字。
- 点工具条「批注」,写说明或留空保存;原文出现亮蓝编号和高亮。
- 需要的话继续选其他段落,编号依次累加。
- 看输入框旁的「批注 ×N」,悬停核对,删掉不需要的条目。
- 在输入框写下问题,回车发送。
- 看自己的气泡:应只有问题 + 标签,没有整段批注块。
- 等回复结束,按「Annotation 1」「Annotation 2」对照;悬停芯片核对原文。
模型实际收到的协议块,仓库写成下面这种结构(分隔标记是「提问:」,不是「问题:」):
我批注了以下 N 处内容…
1. 原文
批注:…
请用「Annotation 1:…」…
提问:
README 解释了为什么不用「问题:」:助手气泡标题行里的「回答我的问题:」也包含这几个字,若按它切割,气泡隐藏会误命中。这是实现细节,日常使用不必改;如果自己改协议字段,需要避开这个冲突。
中文输入时,Enter 拦截带有 isComposing / keyCode 229 守卫,避免拼音还没上屏就把稿发出去。setDraft 只在提交前一刻拼批注块,不会覆盖输入框里正在写的草稿。
适用场景与注意事项¶
适合已经在用 DSH 网页界面、经常要对长回复里的具体句子追问或纠错的人。纯终端 TUI、headless profile 不在 dsh.client.platform 声明范围内。若同时使用 dsh-focus-chat,仓库声明聚焦视图同样可用。
使用前注意这几件事:
- 权限与来源:目录页写明,插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前检查 GitHub 源码和 MIT 许可证;不信任就不要装。社区目录收录不等于 DeepSeek 官方背书。
- 只装一次 id:
cordis.patch.yml内容是向配置insertid: dsh-annotation与包名@omdsh-dev/dsh-annotation。重复 insert 会导致dump-config里同一 id 出现多行,自检会失败。 - 能力边界:批注对照依赖模型遵守注入的格式指令。仓库没有承诺任何模型 100% 按「Annotation N」输出;回复芯片是在流式结束(
data-streaming去掉)之后才替换标签。 - 实现位置:Node 半边是空的
apply(),不要到lib/index.js里找界面逻辑。浏览器端是手写的 CJSclient.js,无构建步骤,按请求读取且 no-cache。 - 版本:当前 README 将 v1.3.x 记为「回复逐条对照 + 可悬浮芯片」;v1.2.x 是气泡隐藏;v1.x 用 capture Enter 拼稿发送,取代了 v0.9 的 insertReference / slash codec 方案。以仓库版本说明为准。
小结¶
dsh-annotation 把「对着助手原文提问」收成 Web 上的选中批注:划词、编号、回车随消息发送,回复按 Annotation 编号对照,气泡里不刷出整段批注块。它是 omdsh-dev 维护的 MIT 开源 bundle 插件,走 DSH 官方插件机制,不改核心代码,但只覆盖网页端。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-annotation/
GitHub:https://github.com/omdsh-dev/dsh-annotation