dsh-quote-selection:在 DSH 对话里框选文字并带着出处引用

前言

在 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 / 折叠卡展示预览;提交与持久化层始终写入同一份约定格式的引用块,模型读到的与用户消息里存的保持一致。

核心功能

选区引用与快捷键

  1. 在对话正文(聊天视图)里用鼠标框选文字——助手回复、用户消息、代码块、列表等均可。
  2. 在选区上点右键,菜单提供「复制」(Ctrl+C)与「引用」(Ctrl+Q);也可选中后直接按 Ctrl+Q(Ctrl+Shift+Q 同样有效;macOS 为 ⌘⇧Q),跳过菜单。
  3. 点「引用」后,输入框出现原子标签(chip),示例形态:
❝ 它把 location 写进了 wire 文本里,…   42 字 · 助手消息

标签在输入框里整段删除(Backspace 一次选中、再一次删掉);光标跨过 chip 是一步。可在标签后继续输入并一起发送。

  1. 发送后,消息里显示可展开的折叠引用卡;悬停标签或卡片可见完整出处(轮次、段落、字符区间等)。

模型与会话里看到的文本

折叠只发生在显示层。发送时的 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 可复现的步骤走一遍。

  1. 安装并启用插件后,打开任意 DSH 会话的聊天视图。
  2. 框选助手某段回复中的一句,在选区上右键点「引用」,或按 Ctrl+Q。
  3. 在输入框 chip 后输入问题,例如「请基于上面引用解释 location 写进 wire 的含义」,发送。
  4. 在已发送消息里点开折叠卡核对原文;将鼠标悬停在 chip 或卡片上查看轮次、段落、字符区间。
  5. 若预览太短,到 设置 → 选区引用 调大「草稿标签预览字数」或「消息卡片预览字数」。

开发侧可跑单测与审计(仓库内命令):

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
羽毛球分组比赛记分
小程序二维码

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

小夜