beijingwahw/dsh-conv-search ↗★ 0
@dsh-external/dsh-conv-search
dsh-conv-search(对话内文本搜索)— in-conversation text search for DeepSeek Harness (Ctrl+F).
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:beijingwahw/dsh-conv-search说明文档
阅读完整 README ↗dsh-conv-search(对话内文本搜索)
English | 中文
为 DeepSeek Harness Web 界面提供对话内文本搜索——把你熟悉的 Ctrl+F 限定在当前对话中。浮动搜索栏会高亮渲染出的对话记录中的每一处匹配,并支持在匹配之间跳转,全程不改动 Harness 核心代码的任何一行。
解决的问题
- 长对话无法搜索:浏览器原生查找会搜遍整个页面(侧边栏、输入框、界面元素),且无法跟随仍在流式输出的对话。本插件只搜索当前对话的滚动区域,并在模型持续输出时保持同步。
- 无法在匹配之间跳转:原生查找没有「第 n / 共 total 个」的导航。本插件提供 Enter / Shift+Enter 与上一个/下一个按钮,支持循环跳转,并自动将当前匹配滚动到视野中央。
- 高亮不能与 React 冲突:对话 DOM 由 React 管理,流式输出期间持续重渲染。插件不采用包裹 `` 节点的方式(那会改动 React 管理的文本节点、破坏协调机制),而是通过 CSS Custom Highlight API 绘制高亮——一种覆盖层绘制,能安然度过每一次重渲染,且无需任何 DOM 清理。
功能特性
- Ctrl/Cmd+F 打开浮动搜索栏(仅在对话已渲染时接管——否则浏览器原生查找不受影响);Esc 随时关闭,即使焦点仍在输入框内。
- 跨所有已渲染的聊天节点进行匹配:用户消息、助手文本、工具卡片、翻页加载的历史记录。两个切换按钮对齐浏览器/IDE 查找栏习惯:Aa(区分大小写)与 ab(全词匹配)——搜索错误码、函数名、API 标识符时必不可少。
- 实时
n / total计数,Enter(下一个)/ Shift+Enter(上一个)导航,支持循环;F3 / Ctrl+G 同样可用,与浏览器/IDE 查找栏习惯一致。 - 搜索历史:ArrowUp / ArrowDown 循环浏览最近的查询词(最新在前、去重),回退越过最新一条时会恢复你正在输入的草稿。
- 零结果查询会给出回应:计数变红、搜索栏边框随之变红、并给出一次性抖动(遵循
prefers-reduced-motion)。在无结果时反复按 Enter 会重新抖动,而非毫无反应。 - 当前匹配以更强的颜色绘制,并自动滚动进入视野。
- 头部操作按钮会镜像打开状态(
aria-pressed),你随时能知道搜索是否处于激活状态。 - 流式感知:MutationObserver 在输出流式进行或加载更早分页时(防抖后)重新搜索,且不会抢占你的滚动位置。当前匹配按身份(文本节点 + 偏移)锚定,因此翻页加载的更早内容或流式增量不会把光标跳到另一处匹配。
- 范围约束:输入框区域与插件自身的搜索栏被排除在外,你正在输入的草稿不会产生幽灵匹配。
- 通过
--dsw-alias-*设计令牌跟随 Harness 主题;根据文档语言自动切换中/英文界面。 - 对话头部操作按钮(搜索图标)通过
conversation.session.header.actions插槽注册——可叠加、可安全卸载的组合方式。
安装
需要 Node.js ≥ 22 与 pnpm(npm install -g pnpm)——dsh plugin add 通过 pnpm 把 bundle 装入 profile。
dsh plugin --profile web add https://github.com/beijingwahw/dsh-conv-search/archive/refs/heads/main.tar.gz
dsh web # 重启服务以加载插件
包内声明了 dsh.bundle.patch(挂载宿主注册行)与 dsh.client(在 /plugins//client.js 提供浏览器端)。lib/ 已提交,因此 GitHub tarball 无需构建步骤即可安装。
验证挂载:
dsh --profile web --dump-config | grep conv-search