前言¶
在 DeepSeek Harness 里读长回答时,经常要对其中一段继续问。常见做法是复制、贴进输入框,再手工加 > 做成 Markdown 引用。引文和问题挤在同一输入区,草稿一乱就不容易分清自己要发什么。DSH 生态里也有把选区引回对话的插件,路线各不相同:有的在输入框里嵌引用节点,有的依赖宿主尚未普遍提供的 draftContexts 服务。dsh-selection-followup(维护者 wanruxi,客户端类插件)走另一条路——引用显示在输入框上方的独立卡片,输入框里只留你的问题;发送时再按引用块拼到消息末尾。下面介绍它做什么、怎么装、怎么用,以及和宿主耦合时要注意什么。
这是什么¶
插件全称 dsh-selection-followup,英文名对应 README 里的「选中追问」。在 Harness 对话页面选中一段文字后,旁边会浮出「追问」按钮;点一下,选中文本变成输入框上方的一张引用卡片,你在输入框里只写后续问题即可。发送时卡片内容会以 Markdown > 引用块追加在问题之后,模型收到的是完整原文,不是被截断的预览。
当前版本在 package.json 中为 0.4.2,许可证 MIT。GitHub 星标为 0(以目录信息为准)。仅支持 dsh.client.platform 为 web 的浏览器半边;宿主引擎声明下限为 >=0.2.0-rc.2 || >=0.2.1-rc.2。
它解决什么问题¶
长回答里「只追问某一段」时,复制—粘贴—排版引用会打断阅读节奏,且输入框容易被引文占满。本插件把引用挪到输入框外面:选好、点一下,卡片贴在输入框上方,你只管写问题。和「chip 引用卡片」相比,后者引文仍混在输入框里;和依赖 draftContexts 的「输入框外注释」相比,实测宿主版本里往往没有该服务。本插件通过修补会话输入壳的发送链路,换取输入框干净、引用照样送达,代价是对宿主内部函数名的依赖(见后文「发送与兼容性」)。
核心功能与行为¶
选区与按钮¶
- 只在非空选区出现;输入框内部、以及按钮自身选区会跳过,在输入框里打字不会误触发。
- 鼠标松开处右下方弹出按钮;键盘选区(如
Shift+方向键)则落在选区上方。靠近窗口边缘会翻到另一侧,中英文「追问 / Ask」宽度不同也不会被裁切。 - 选区滚出可视范围后按钮不再出现,避免引用已经看不见的文字。
Ctrl+Shift+Q可无鼠标引用当前选区(各平台均用 Ctrl;macOS 上Cmd+Shift+Q是系统注销,插件不采用)。Esc收起按钮。点击按钮前会preventDefault住mousedown,避免焦点跑掉导致选区提前消失。
引用卡片¶
- 点按钮后选区变成卡片,贴在输入框上方;卡片有
×可删,可挂多条,按添加顺序排列。 - 卡片左右边缘与下方输入框卡片对齐,使用宿主 CSS 变量
--dsh-composer-side-clearance与--dsh-composer-card-max-width,分栏、侧栏、窄面板下仍对齐。 - 预览只显示第一行前 80 个字符,悬停可见全文;发给模型的是完整引用。超过 8000 字符会截断并加省略号,悬停会说明。
- 引用前会规整选区:统一换行、去行尾空格、合并多余空行。
- 引用成功后按钮处短暂显示「已引用」约 0.9 秒,且不挡下一次点击。
- 卡片按会话分开存,别的侧边会话选中的文字不会进当前会话;数据在
sessionStorage,刷新页面不丢。
发送与恢复¶
- 发送时,各条引用按添加顺序以
> …块追加在问题之后,块之间空一行。输入框必须有问题才能发送;空草稿的 Enter 会被宿主忽略,卡片保留。 - 发送失败(网络、被拒)时卡片退回,不会凭空消失。
- 宿主若无「输入框外额外上下文」的公开通道,插件在发送前修补
SessionInputShell的三个衔接点:sinkSerialized(提交开始取走卡片)、deps.defaultSink(序列化后把引用拼到消息末尾)、settleDetachedFailure(失败时放回卡片)。三者须一并补丁,否则可能重复发送或失败后丢引用;组件卸载时可逆还原。
安装与启用¶
在要启用它的 Harness profile 里执行(命令来自仓库 README):
dsh plugin --profile <profile> add dsh-selection-followup
也可将仓库目录作为 bundle 装进插件管理器。浏览器半边安装后立即生效,刷新页面即可,无需重启 DSH 进程。
安装前应自行查看 GitHub 仓库 源码与 MIT 许可证。插件在浏览器中与当前 Harness 会话同权限运行,与安装任何 DSH 插件一样,需确认来源可信。
典型用法¶
- 在 Web 版 Harness 打开一段对话,用鼠标或键盘选中要追问的段落。
- 在选区旁点「追问」,或按
Ctrl+Shift+Q。 - 在输入框上方确认引用卡片(可挂多条、可点
×删除)。 - 在输入框只输入你的问题,发送。模型收到的消息末尾会带上对应引用块。
不需在输入框里手工写 >;也不需在卡片预览里看到全文才能发送——悬停可看全文,发出的是完整内容。
适用场景与注意¶
适合谁: 经常在长回答里「指着某一段继续问」的 DSH / 智能体开发者与普通用户;希望输入框里只有问题、引用视觉上独立的场景。
平台: 仅 Web 客户端;依赖 conversation.input.overlay、conversation.input.dock 槽位及 conversation 服务的输入壳。conversation 通过 ctx.get('conversation') 获取,未写入 inject,以免在缺该服务的宿主上整插件加载失败。
兼容性风险: 若宿主改名 sinkSerialized / deps.defaultSink 等,卡片仍可添加删除,但不会自动追加到消息;控制台会出现 [selection-followup] could not hook this compose box 警告。这是有意「保持沉默」而非破坏发送链路。
与相近插件: README 用表格对比了本插件、chip 引用卡片、输入框外注释三条路线(放置位置、输入框内容、发出方式、宿主依赖)。选型时若更看重官方 inputTriggers 且接受引文在输入框内,可看 chip 路线;若要坚持输入框仅问题且当前宿主无 draftContexts,本插件是实测可选方案之一。
生态说明: DeepSeek Harness 的理念是「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
开发者本地可跑离线测试(不必开浏览器):
npm test # node --test test/helpers.test.mjs
npm run check # 语法检查 lib/client.js 与 lib/index.js
界面效果仍需人工在浏览器里看一眼。
结尾¶
dsh-selection-followup 把「选中—引用—追问」收成:选区旁一键,引用卡片在输入框上,问题在框内,发送时引用进消息。安装用 profile 下的 dsh plugin add dsh-selection-followup,留意宿主版本与发送钩子的兼容性即可。
- 目录页:https://www.skillhub.cn/plugins/wanruxi/dsh-selection-followup
- GitHub:https://github.com/wanruxi/dsh-selection-followup