dsh-annotation:在 DSH 里对回复与侧边栏文档做行内批注并一次性发给 Agent

前言

在 DeepSeek Harness(DSH)里和 Agent 协作时,经常要对某段回复或预览文档里的几句话单独发表意见。把整段复制到输入框再写注释,容易打乱上下文,也不利于一次说明多处修改点。社区插件 dsh-annotation(npm 包名 @fanfan4589/dsh-annotation)走另一条路:在对话正文或右侧栏可选中文本上直接弹出批注框,批注汇总成输入框上方的「N notes」卡片,再按需一次性发给 AI。

下面介绍插件定位、能力边界、安装方式与典型操作;事实以 GitHub 仓库 README 为准。

这是什么

dsh-annotation 是由维护者 feifandiv 发布的 客户端 类 DSH 插件。当前 npm 版本为 2.3.0,许可证 MIT,要求宿主 DSH >= 0.2.1-rc.1。

插件实现的是「行内批注」:选中 DeepSeek Harness 回复正文,或右侧栏里 Markdown / 纯文本 / 代码等预览中的文字,旁边出现批注输入框;确认后批注进入聚合卡片,可用快捷键把全部待发送批注作为一条用户消息交给 Agent。README 英文简介概括为:对回复与侧边栏文档做 inline annotation,在 composer 上方收集笔记并发送给 agent。

实现上为 纯客户端 bundle:index.js 的 apply() 为空,逻辑在 client.js;通过 DSH 的 additive slots(overlay、composer 上方卡片、右侧栏 tab、侧栏底栏入口等)挂载 UI,不替换内置界面。批注高亮使用 CSS Custom Highlight API,避免直接改动 React 持有的 DOM。

目录页:SkillHub — feifandiv/dsh-annotation。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

选文批注与快捷键

操作 效果
选中文字 选区旁出现批注框并聚焦
输入后 Enter 确认批注,收入 composer 上方的「N notes」卡片
Cmd/Ctrl + Enter 确认并立即把当前所有待发送批注发给 AI(可在批注框内,或没有任何输入聚焦时)
Shift + Enter 批注框内换行
批注框内无选中文本时 Cmd/Ctrl + C 复制打开批注框时所选原文
Esc 关闭批注框
点击「N notes」卡片 展开引用与笔记,可跳转或删除
composer 里已有正文时发送 已输入文字与全部待发送批注合并为一条消息(附件保留)
点击编号圆点 / 高亮文字 编辑或删除对应批注,编号与列表一致
侧栏底栏 → Annotations 在右侧以原生 tab 打开批注列表(与对话并列,不遮挡聊天)

发给 Agent 的消息格式

批注批量发送时,AI 收到结构化说明(语言随当前 DSH UI 语言),例如:

I annotated 2 specific places below. Please review and act on each one:

1. Quote: "…"
   Location: conversation reply
   Note: …
2. Quote: "…"
   Location: `docs/report.md`
   Note: …

可用表面与限制

表面 是否支持
对话中的助手回复(含展开的 reasoning) 是
右侧栏 Markdown / 纯文本 / 代码预览 是
右侧栏 PDF、Word/PPT 转 PDF 的可选中文本层 是(文本可选时)
右侧栏 Excel 预览 否(网格非文档文本)
右侧栏 HTML / 网页预览 否(opaque-origin iframe,父页面无法读选区)
图片、终端 否

上述限制来自宿主对各表面的渲染方式,非插件单独裁切。

设计与数据生命周期

  • 高亮颜色单一,强调放在批注文字上;批注不会把大段文字贴进 composer,而是聚合在卡片里。
  • 批注保存在浏览器 localStorage,键名 dsh.annotation.v1(按浏览器配置隔离,同配置多窗口通过 storage 事件同步)。
  • 列表展示当前会话的对话批注加上文档批注;删除的会话在启动或打开列表后会自动清理对话批注;归档会话的批注会保留直至手动「Clean up」。
  • 文档批注在批量发送后约一秒清除;对话批注发送后需通过「Clean up → Clean sent annotations」清理。
  • 插件不提供导出、复制合集或诊断等额外功能,只做批注与发送。

安装与启用

从 npm 安装(命令来自官方 README):

dsh plugin --profile <profile> add @fanfan4589/dsh-annotation

也可让 DSH Agent 通过 plugin_manager 的 install_bundle 安装 checkout,刷新页面一次后生效。卸载走 Plugin Manager;卸载后 localStorage 中的批注仍会保留。

安装前建议自行查看 源码与 LICENSE;客户端插件随当前 DSH 进程与页面环境运行,权限边界与浏览器配置一致。

典型用法

1、在助手回复里选中需要质疑或修改的句子,在弹出框里写简短说明,按 Enter 确认。可继续在其他位置选文添加批注。

2、需要让 Agent 一并处理时,在批注框或空闲焦点下按 Cmd/Ctrl + Enter,或在 composer 写好补充说明后正常发送;待发送批注会随同一条消息发出。

3、批注较多时,点击 composer 上方的「N notes」或侧栏底栏 Annotations,在右侧 tab 中展开列表,逐条跳转、编辑或删除。

4、在右侧栏打开项目里的 Markdown 或 PDF(可选中文本层),对具体段落批注;发送后文档侧批注会按 README 描述的生命周期清理,避免旧高亮干扰下一轮修改。

流程概览:

flowchart LR
  A[Select text] --> B[Comment box appears]
  B -->|Enter| C[Confirm + collect into the card]
  C -->|Keep annotating| A
  B -->|Cmd/Ctrl + Enter| D[Send all annotations to the AI]

适用场景与注意

适合需要在 DSH 里多点、原位向 Agent 反馈的场景:代码审查式对话、对照侧边栏文档改稿、对长回复分段提修改意见等。

应注意:

  • 批注只存在于当前浏览器配置;换机或清站点数据会丢失。
  • 扫描版 PDF(无可选文字层)无法批注。
  • 修改 client.js 后需刷新页面;第三方侧栏若在选区上叠放按钮,批注框会尝试避让,仍可能偶发遮挡。

已知宿主要求 dsh >= 0.2.1-rc.1;无额外 npm 运行时依赖(开发构建仅需 Node 内置模块)。

结尾

dsh-annotation 把「选中 → 旁注 → 聚合 → 一次发送」固化为 DSH 客户端内的标准动作,减少复制粘贴与遗漏上下文。进一步了解能力与快捷键表,见 GitHub README(含 中文版 README.zh.md);在生态目录中检索:SkillHub 插件页。

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

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

小夜