dsh-session-search-bar:对话页常驻的历史会话正文搜索

前言

在 DeepSeek Harness(DSH)里长期跑智能体任务时,会话会越积越多。想找回某次对话里说过的一句配置、一段报错或一个接口名,如果只能逐个点开会话、上下滚动,成本会很高。内置侧栏的内容搜索在 profile 默认配置下往往只匹配标题,对消息正文覆盖不足。

下面介绍社区插件 dsh-session-search-bar(维护者 chopperH0824):在对话页顶部放一个常驻搜索框,按关键词检索历史会话的消息正文,点结果直接打开会话并滚动、高亮到命中文字。分类属于 DSH 插件目录中的「记忆」类;当前 GitHub 星标为 0,版本 1.0.0,许可证 MIT。

这是什么

dsh-session-search-bar 是 DeepSeek Harness 的 Web GUI 插件:搜索栏挂在 conversation.header.leading(会话标题左侧),不单独开面板,也不让用户维护全文索引。Host 侧通过 @deepseek-ai/dsh-session-query 与插件自带的内存 SQLite 索引(path: ':memory:',首次搜索时打开)完成检索;索引随插件卸载释放,不写磁盘。

要求:Node.js ≥ 20,DSH 0.2.x(Web GUI)。插件无第三方运行时依赖、无构建步骤。

核心功能

搜索与结果展示

  • 对话页顶部有放大镜和占位符「搜索历史会话…」,点进即可输入。
  • 输入后约 200ms 触发搜索;结果浮在输入框下方,展示会话标题、工作区、相对时间、命中片段(关键词高亮)、来源(正文 / 工具 / 标题)。
  • 浮层顶部可切换「包含工具输出」和工作区筛选;右侧显示「找到 N 个会话 · X ms」。
  • 默认只搜消息正文:用户消息即正文;assistant 消息会按片段特征过滤掉形如工具调用参数的命中(如 bash {"command":...}、JSON/转义片段等)。tool/result、文件/附件块、reasoning 默认不参与。勾选「包含工具输出」后,才会一并搜索 tool/call、tool/result 及 assistant 里的工具调用参数。
  • 展示前会把片段当纯文本处理:去掉常见 Markdown/JSON 符号与转义,压掉多余空白,便于核对关键词。
  • 同一查询有约 15s 结果缓存;展开多处命中有约 60s 缓存。

打开会话并定位

  • 点击某行:打开对应会话,对话区滚动到命中段落,并用系统选中高亮约 2.4s;长轮次、长消息也会尽量对准命中位置,而不是停在轮次中间。
  • 同一会话有多处命中时,行右侧「N 处匹配 ›」可展开其余命中(展开时才向 Host 请求);点击展开项同样定位到该条。
  • 只有当前工作区可见、非子代理的会话会出现在结果里。

键盘与最近搜索

  • ↑/↓ 选择结果,Enter 打开,Esc 关闭浮层或清空;点击浮层外部关闭。
  • 空输入框且焦点在搜索框时,显示最近搜索(localStorage,最多 8 条)。

性能(README 本机实测,约 13~20 个会话命中)

操作 耗时
正文搜索(新关键词) 约 0.8–2 s
同一查询重复(15s 缓存) < 100 ms
勾选「包含工具输出」 约 0.3–1 s
展开某会话的多处命中 约 330 ms(之后 60s 缓存)
点击结果 locate(turn 缓存命中) 0 ms

应用启动或插件重载后,Host 会在空闲约 2.5s 时后台预热索引,尽量把首次构建挪到空闲时段。

安装与启用

macOS Desktop 自带 CLI 的安装命令如下(须与资料原文一致):

# macOS Desktop 自带 CLI
"/Applications/DeepSeek Harness.app/Contents/Resources/runtime/cli/bin/dsh" \
  plugin --profile desktop add dsh-session-search-bar@1.0.0

也可把 dsh-session-search-bar 加入 ~/.dsh/profiles/desktop/package.json 的 dsh.profile.bundles,然后完全退出并重启 DeepSeek Harness。

本地开发或使用 tarball 时:

npm pack
dsh plugin --profile desktop add /absolute/path/to/dsh-session-search-bar-1.0.0.tgz

安装前建议阅读 GitHub 仓库 源码与 MIT 许可证;插件以当前 DSH 进程权限运行,Host 路由与其它本地插件一样只绑定 loopback,会返回会话消息内容,请在可信本机环境中使用。

典型用法

  1. 重启 DSH 后进入任意对话页,在顶部搜索框输入关键词(例如某环境变量名、错误码、函数名)。
  2. 在浮层中查看命中片段与工作区;若怀疑命中在工具输出里,点「包含工具输出」再搜一次。
  3. 用工作区 chip 缩小范围;Enter 或鼠标打开目标行,等待对话区滚动与高亮。
  4. 若一行显示「N 处匹配 ›」,展开后点具体条目,定位到该处命中。

搜索按 FTS token/phrase 匹配,不是任意子串:例如 AI 不会命中 BRAID。

适用场景与注意

适合:经常在 DSH 里开多会话、需要在正文里找回旧结论、命令、配置说明的开发者;希望「搜完即跳转、即高亮」,而不是另开搜索面板的用户。

限制与注意(来自 README「已知限制」):

  • 搜索栏只在对话页头部显示;切到 Plugins、Settings 等非对话面板时不出现,回到对话页即恢复。
  • 首屏标题靠浏览器端会话快照补齐;不在已注册工作区里的历史会话可能显示「未命名会话」。
  • 正文模式下,assistant 在消息正文里写的文件名/路径仍会被搜到——那是正文文本,不是工具输出。
  • assistant 正文过滤是启发式,极少数工具参数片段可能漏过;需要时可勾选「包含工具输出」或接受更慢、更严格的校验思路。
  • 缓存期间新消息/新会话可能不会立刻出现在结果里。
  • 定位是尽力而为:命中在折叠的工具分组里,或宿主改动 data-chat-turn / data-conversation-session 时,可能退化为滚到消息行/轮次,但不会阻止打开会话。
  • 内存索引:应用重启后第一次搜索需重建(后台预热尽量掩盖延迟)。

DSH 生态强调「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-session-search-bar 把「搜历史会话正文 → 打开 → 滚到命中处」收进对话页顶栏一条链路里,默认聚焦正文、可选包含工具输出,并依赖 Host 侧查询与内存索引控制首屏只打一次 searchSessions。若你在 DSH 桌面 profile 上长期堆会话,值得按官方命令装上 1.0.0 试一轮。

羽毛球分组比赛记分
小程序二维码

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

小夜