前言¶
在 DeepSeek Harness(DSH)里和模型长聊时,常见做法是复制某段历史回复、粘贴进输入框,或手写「请结合上面第 N 段」。引用会混进草稿,模型侧也缺少可回溯的节点信息。DSH 生态按「一切皆插件」扩展能力;社区插件目录在独立站点维护,与 DeepSeek / 幻方无官方从属关系。下面介绍维护者 stickyfinger7 的 dsh-quote-annotation:在 Chat 里选中文字、可选加注释,随下一条消息以结构化 reference context 交给 Host,而不改写编辑器、也不在界面里露出原始 JSON。
这是什么¶
dsh-quote-annotation 是面向 DSH Web 客户端的 Host + 浏览器模块插件(MIT,当前 package 版本 1.1.0)。它解决的是:从当前会话里引用一段对话原文(可附可选说明),在下一次用户发送时,由 Host 在 agent/pre-step 阶段追加隐藏的 context 消息;Chat 侧用 pill 与行内标记展示「发过什么引用」,便于预览和跳回来源。
分类上属于模型推理相关:引用内容进入模型上下文的方式由 Host 结构化注入,而不是把大段粘贴文本留在 composer 里。
核心功能¶
以下能力均来自插件 README 说明。
- 选中 → 添加到对话:划选后出现小操作条,引用立即进入 pending 存储。
- 可选注释:可随时添加或编辑;
Enter确认,Shift+Enter换行。 - 可见记录:composer 工具行显示待发送条数(中文 UI 为「N 条注释」,英文为「N quotes」);发送后用户消息上方保留 pill,点击可跳回来源。
- 仅引用也可发送:composer 为空时发送按钮仍可用(Host 会去掉 invisible draft token,必要时回退为「(引用)」类占位)。
- 助手回复中的行内标记:回合结束后,在提及引用的段落旁出现「注释 N」/「Note N」;悬停预览,点击跳回来源。
- 重启后已发送记录可恢复:通过 Session log 与
GET /dsh-quote-annotation/sent回填,Host 重启后 pill 与标记可重建;未发送的 pending 在 Host 内存中,重启会清空。 - 不污染编辑器:不使用 Lexical chips、不在 prompt 里留隐藏字符或零宽字符。
- 零依赖、无构建步骤:纯 ESM Host 插件 + 单个浏览器模块。
- 界面文案随 DSH 语言:内置中英文;其他语言回退英文;在 Settings 切换语言后 pill、卡片、标记与 composer 可 live 更新。
工作流程概要:
selection ──► client ──► POST /dsh-quote-annotation/add
│
▼
pending store (Host)
│
agent/pre-step (next user message)
│
▼
user message + hidden context message
source.kind = "conversation-quote"
Host 在直接用户消息之后追加隐藏的 user/message;source.references 携带引用正文、可选注释及来源元数据(nodeKey、anchorKey、turn、kind 等)。Chat 不渲染普通 context 节点,因此不会出现 ## Quoted conversation references 这类原始块。
环境与要求¶
- DSH
0.2.x,带 Web 客户端模块(DSH Desktop 或dsh web),并包含@deepseek-ai/dsh-client-locale以支持语言切换。 - 可修改的 profile(如
web、desktop等)。 - Host 侧 Node.js
>=22.19.0。 - README 记载在 DSH
0.2.1-rc.3(Web)上做过测试。
安装与启用¶
插件以当前 DSH 进程的权限运行;安装前应自行查看 GitHub 源码与 MIT 许可证,确认符合你的环境与安全策略。
从 GitHub 安装到 web profile:
dsh plugin --profile web add github:stickyfinger7/dsh-quote-annotation
固定某一 release:
dsh plugin --profile web add github:stickyfinger7/dsh-quote-annotation#v1.1.0
DSH Desktop 使用独立 profile:
dsh plugin --profile desktop add github:stickyfinger7/dsh-quote-annotation
安装后需 重启对应 profile 一次(Host 路由与 agent/pre-step 在 Host 启动时加载),并刷新已打开的页面。
若暂不想卸载,可在 profile 的 cordis.patch.yml 里对 quote-annotation 条目设置 disabled: true。
配置项¶
默认值在插件的 cordis.patch.yml,可在 profile patch 的 quote-annotation 下覆盖:
| 选项 | 默认值 | 含义 |
|---|---|---|
maxQuotes |
8 |
每个 session 保留的 pending 引用上限 |
quoteMaxChars |
8000 |
单段引用最大字符数 |
annotationMaxChars |
4000 |
单条注释最大字符数 |
pendingTtlMs |
86400000 |
pending 引用存活时间(毫秒) |
典型用法¶
README 中的验证步骤可直接复现:
- 在 Chat 中选中文本 → 点击 添加到对话(英文 UI 为 Add to chat)。
- 可选填写注释;按
Enter确认。 - composer 工具行应显示「N 条注释」,且发送按钮可用。
- 不在输入框里再打字,直接发送。
- 用户消息上方出现「N 条注释」pill;点击跳回来源。
- 助手回复完成后,正文中出现「注释 N」;悬停可预览引用。
- 确认 Chat 不会渲染
## Quoted conversation references标题块。
适用场景与注意¶
适合:需要在同一会话里反复指向 earlier turns 的原文、并给模型附带简短说明,同时希望输入框保持干净、引用带来源锚点的开发者或日常 DSH 用户。
局限与兼容(README 原文要点):
- Pending 引用仅存 Host 内存;已发送记录依赖 Session log 回填。
- Sent pill 与行内标记依赖 Chat DOM 选择器;DSH Chat DOM 变更时可能需要插件更新选择器。
- 行内标记按段落启发式放置;若助手 paraphrase 而非复述引用,标记可能落在回复末尾。
- 无原生 Lexical chip,这是「不修改编辑器」的设计取舍。
- UI 文案仅中英文完整覆盖;Host 侧文案可能因标签页语言状态短暂不一致。
插件有意不依赖 conversation.draftContexts、原生 Lexical chips 或 reference pipeline,便于在现有 DSH 0.2.x Web 栈上独立运行。
结尾¶
dsh-quote-annotation 把「选段 + 可选注释」变成下一条消息背后的结构化会话引用,并在 UI 上用 pill 与行内标记保留可读、可跳转的记录。目录与说明见社区插件页 stickyfinger7/dsh-quote-annotation,源码与完整文档见 GitHub 仓库。