Eos010/dsh-selection-ask

dsh-selection-ask

DSH(DeepSeek Harness)网页版的划词引用插件:选中任意文本 → 就地写批注 → 变成带编号的引用胶囊落进输入框,原文同时留下高亮与编号。

待分类composercontextdeepseek-harness

dsh-selection-ask · 划词引用

简体中文 | English

给 DeepSeek Harness 网页版用的划词引用插件。 在对话里选中一段文字 → 就地写批注 → 它变成带编号的引用胶囊落进输入框, 原文上同时留下高亮和编号。删掉胶囊,高亮和编号一起走。

版本 V0.1


它能做什么

读 AI 的长回答时,你经常想指着其中某一句话追问:"这里为什么这么写?""展开讲讲第三点。" 没有它,你得手动选中 → Ctrl+C → 点输入框 → Ctrl+V → 再打字,而且粘进去的是一段 没有形状的裸文本 —— 模型分不清哪句是你说的、哪句是你引的。

有了它:

  • 划词即引用 —— 选中任意文字(AI 的回答、你自己发过的话、工具输出、代码块都行), 光标旁浮出一条就地输入栏;写批注,或者什么都不写直接回车。
  • 每条引用都有身份 —— 一个编号(选中文本 1、2、3…),原文上有对应的 高亮和编号牌,悬停胶囊还能看见这条引用的原文。
  • 引用会跟着胶囊走 —— 输入框里的胶囊是唯一事实源:删掉它,原文的高亮和编号 同时消失,不会留下"孤儿标注"。
  • 落在输入框光标处 —— 新引用插在你光标所在的位置;连续引用多段会依次排开, 绝不覆盖你已经写好的内容。
  • 同一处文字不会有两个号 —— 再次引用同一段文字,复用原来的编号。
  • 选得更长时自动并进来 —— 先引了短句、再引包含它的长句,不会多出一个胶囊, 而是把原来那条更新成更长的引用。
  • 写完就走 —— Enter 只写进输入框(你还能接着改),Ctrl/Cmd + Enter 写完直接发送。
  • 跟着主题走 —— 配色取自宿主的设计变量,浅色深色宿主都自适应。

输入框里是一枚编号胶囊,模型收到的仍然是一段规整的 Markdown 引用:

> 一句话对照:上面那串"往下压"是递,撞到出口后"往回收"是归——两个动作合起来才叫递归。

(这里接着写你的问题,光标已经在这了)

用法

  1. 在网页里选中一段文字;
  2. 光标旁浮出一条就地输入栏 —— 就地写批注,或者什么都不写;
  3. Enter 写进输入框 / Ctrl(macOS 上 Cmd)+ Enter 写进输入框并直接发送。
动作结果
选中正文浮出就地输入栏;那片文字的底色不会消失
输入栏里按 Enter写进输入框,不发送 —— 你还能接着改、接着补
输入栏里按 Ctrl/Cmd + Enter写进输入框并立刻发出去
写了批注再提交输入框里是 [胶囊] 你的批注
悬停胶囊浮出这条引用的原文
在输入框里删掉胶囊原文的高亮与编号同时消失
点别处 / 按 Esc收起浮层,不动输入框
在输入框里选中文字不出浮层 —— 那是在编辑,不是在引用
连续引用多段依次排在光标处,追加而不是覆盖
选中的内容超过 8000 字截断,并提示「内容过长,已截断」

编号的粒度:一个页面生命周期内全局递增(选中文本 1、2、3…); 同一段文字被再次引用时复用原来的编号 —— 同一处标注不该有两个号。


安装

⚠️ 先纠一个坑(不少插件文档在这里是错的):DSH 的命令行直接拒绝 --profile desktop ——

$ dsh plugin --profile desktop add github:Eos010/dsh-selection-ask
error: profile "desktop" is managed exclusively by the Electron application

桌面版的 profile 由 Electron 应用独占管理。所以按你实际在用的版本二选一:

桌面版(Electron 应用)

在 DSH 应用内安装。也可以手动两步:

# 1) 把仓库放进 profile 的 node_modules
git clone https://github.com/Eos010/dsh-selection-ask `
  "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-selection-ask"

# 2) 在 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles 数组里加一行:
#      "dsh-selection-ask"

# 3) 重启 DSH,然后刷新网页(Ctrl+F5)

命令行版 dsh web

npm i -g pnpm        # dsh plugin 是 pnpm 的转发器,PATH 上得先有 pnpm
dsh plugin --profile web add github:Eos010/dsh-selection-ask

(从本地工作副本装,就把 github:… 换成 file:<你的工作副本路径>。)

两种方式装完都要重启一次 DSH,然后刷新网页(Ctrl+F5)—— 包清单只在启动时读一次。

卸载就是反过来:从 dsh.profile.bundles 删掉那一行、删掉 node_modules 下的目录,重启。


说明与限制

  • 原文高亮需要 Chromium 105+(DSH 桌面版与 dsh web 都是 Chromium,实测可用)。
  • 转录很长时,滚出屏幕的那段暂时不亮,滚回来就恢复。
  • 侧边提问面板还在完善中:按钮已经就位,但暂时还发不出问题,先别指望它。
  • 更新插件或改完配置后请刷新页面(Ctrl+F5)。
  • 插件不联网、不读文件、不读凭据。若使用侧边提问,它会调用你自己配好的模型 —— 也就是花你的额度。

开发

只需要 Node ≥ 22,运行时零依赖。

node build.mjs                # 源码 + 样式 → lib/client.js(产物已提交,安装者不需要构建)
node test/bundle.test.mjs     # 产物接线、插槽注册、样式落点
node test/selection.test.mjs  # 引用块形状、草稿拼接、生命周期、编号

许可

MIT。见 LICENSE。