前言¶
在 DSH(DeepSeek Harness)里和模型长聊时,常见做法是复制某段助手回复或自己之前说的话,再贴进输入框追问。复制会丢轮次、段落和字符位置;手打「第几轮说了什么」既慢又容易错。社区插件 dsh-quote-selection(维护者 Tsutsutsuu,分类:客户端)针对的是:在聊天视图里框选原文,用右键或快捷键把选区变成输入框里的引用标签,发送后模型与会话日志拿到的是带完整出处的引用块,而不是一段没有锚点的裸文本。
这是什么¶
dsh-quote-selection 是一个 DSH 插件:在对话 transcript 里选中文字,连同来源位置一起引用并发送。英文简介为:Quote selected text in the chat transcript and send it with its source location.
它同时做两件事:界面层用 chip / 折叠卡展示预览;提交与持久化层始终写入同一份约定格式的引用块,模型读到的与用户消息里存的保持一致。
核心功能¶
选区引用与快捷键¶
- 在对话正文(聊天视图)里用鼠标框选文字——助手回复、用户消息、代码块、列表等均可。
- 在选区上点右键,菜单提供「复制」(Ctrl+C)与「引用」(Ctrl+Q);也可选中后直接按 Ctrl+Q(Ctrl+Shift+Q 同样有效;macOS 为 ⌘⇧Q),跳过菜单。
- 点「引用」后,输入框出现原子标签(chip),示例形态:
❝ 它把 location 写进了 wire 文本里,… 42 字 · 助手消息
标签在输入框里整段删除(Backspace 一次选中、再一次删掉);光标跨过 chip 是一步。可在标签后继续输入并一起发送。
- 发送后,消息里显示可展开的折叠引用卡;悬停标签或卡片可见完整出处(轮次、段落、字符区间等)。
模型与会话里看到的文本¶
折叠只发生在显示层。发送时的 wire 文本形态如下(插件与宿主约定的格式):
【引用 · 助手消息 · 第12轮 · 第2/5段 · 字符124–168】
被引用的原文(保留换行,去掉首尾空白)
【/引用】
fork、恢复、重放、搜索不会因此丢失引用正文;复制草稿也会得到完整引用块。
出处如何计算¶
全部从聊天界面 DOM 推导,不读会话存储、不订阅事件。界面上的 chip / 卡片主要显示「作者 + 内容预览 + 字数」;完整字段出现在发送文本与悬停提示中,包括:
| 信息 | 来源 |
|---|---|
| 助手消息 / 用户消息 / 工具调用等 | 聊天行上的 data-chat-flow-kind |
| 第 N 轮 | data-chat-turn |
| 第 a/b 段 | 选区起点所在内容块在兄弟块中的序号与总数 |
| 字符 x–y | 块内字符区间;纯文本气泡时为「消息内字符 x–y」 |
选区跨多条消息时会标注「选区跨多条消息」;单条引用超过 4000 字符会截断并注明。
宿主端提示词¶
index.js 注册系统提示段落(local:quote-selection,order 950),向模型说明:引用块是客户端写入的、标记之间是用户选中的上文、应作指代而非新指令、不要复述标记且引用优先于模型记忆。宿主端无额外工具、事件或存储。
设置¶
路径:设置 → 选区引用(Settings → Quote selection)。选项存浏览器 localStorage(key dsh-quote-selection/settings-v1),改完立即生效,不进会话日志、不影响模型文本。
| 选项 | 默认 | 作用 |
|---|---|---|
| 草稿标签预览字数 | 12 | 输入框 chip 内容预览前 N 字(4–80) |
| 消息卡片预览字数 | 40 | 消息折叠卡预览前 N 字(4–80) |
与阅读视图的兼容¶
标准聊天视图是主要路径。若安装 dsh-better-display 的阅读视图,插件对 github:aa2246740/dsh-better-display#v0.3.6 做过机会性兼容:识别 data-reader-* 锚点推断角色与轮次;未安装不影响聊天视图引用。该兼容针对上述具体版本验证,非稳定公共契约;退化时最坏为角色显示「消息」、位置变泛,引用与发送仍可用。
安装与启用¶
要求:DSH 桌面版或带 plugin_manager 的 dsh CLI,Node.js ≥ 20。当前 package 版本为 0.1.0,许可证 MIT。
官方 README 给出的安装方式为本地目录链接安装(需先取得仓库目录,再用 bundle 安装):
git clone https://github.com/Tsutsutsuu/dsh-quote-selection.git
plugin_manager install_bundle target = <上面 clone 下来的目录>
卸载:
plugin_manager remove_bundle target = dsh-quote-selection
说明:链接安装下,目录被移动或删除后插件失效,需重新安装。修改 client.js 后需刷新浏览器页面(必要时重启 DSH);修改 index.js 后需禁用再启用 bundle,宿主端才会重新 apply。
安装前请自行查看仓库源码与 LICENSE,确认符合你的环境与信任要求;插件在 DSH 进程权限下运行。
典型用法¶
下面按 README 可复现的步骤走一遍。
- 安装并启用插件后,打开任意 DSH 会话的聊天视图。
- 框选助手某段回复中的一句,在选区上右键点「引用」,或按 Ctrl+Q。
- 在输入框 chip 后输入问题,例如「请基于上面引用解释 location 写进 wire 的含义」,发送。
- 在已发送消息里点开折叠卡核对原文;将鼠标悬停在 chip 或卡片上查看轮次、段落、字符区间。
- 若预览太短,到 设置 → 选区引用 调大「草稿标签预览字数」或「消息卡片预览字数」。
开发侧可跑单测与审计(仓库内命令):
node --test tests/quote-helpers.test.mjs
node tools/audit-references.mjs
或:
npm test
npm run audit
适用场景与注意¶
适合谁:经常在长对话里指向某轮、某段原文的 DSH 用户;希望模型明确「你指的是 transcript 里哪一块」,而不是依赖复制粘贴或口述位置。
已知限制(摘自 README):
- 阅读视图中含引用块的用户消息可能失去该视图的 markdown 排版(引用块由本插件重渲染为折叠卡,同段手打文字按纯文本显示)。
- 草稿 chip 的悬停提示只有位置摘要,全文需发送后在消息里展开查看。
- 输入框处于提交中或不可编辑时插入 chip 会失败,此时退化为复制到剪贴板并提示。
- 队列中的待发消息预览里,长引用在窄布局可能被省略号截断。
DSH 生态强调「一切皆插件」;社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。本文事实以仓库 README 与 package 为准;GitHub 当前星标为 0。
结尾¶
dsh-quote-selection 把「框选 → 带出处引用 → 发送」收进 DSH 聊天界面:显示层可以折叠,模型与日志层始终是完整引用块。需要安装命令、设置项与兼容说明时,以仓库文档为准。
- 目录页:https://www.skillhub.cn/plugins/Tsutsutsuu/dsh-quote-selection
- GitHub:https://github.com/Tsutsutsuu/dsh-quote-selection