dsh-session-history-search:在 DSH 侧边栏里搜遍历史 Session

前言

用 DeepSeek Harness(DSH)做智能体或日常对话时,Session 会不断累积。你往往记得「某次聊过插件、某条配置、某段报错」,却想不起是在哪一个对话里。工作区侧栏自带的检索若依赖全文索引,中文长句还常常搜不到——README 里说明,@deepseek-ai/dsh-session-query-sqlite 对 CJK 的分词方式会让「插件」这类词无法匹配整句中文上下文。

下面介绍社区插件 dsh-session-history-search(维护者 PluckSlugSorrow,分类:记忆)。它在左侧边栏增加「历史搜索 / History」面板,对每一个已结束的 Session 做字面子串匹配(含中文),按 Session 分组展示高亮片段,点一下即可回到对应对话。

这是什么

dsh-session-history-search 是面向 DSH Web 客户端的侧边栏插件:在 sidebar.panellist(顺序 8)挂载放大镜入口,主面板 key 为 session-history-search。它解决的是「我知道问过,但不知道是哪个 chat」——跨全部历史 Session 搜正文,而不是只搜当前工作区文件树。

插件以 MIT 许可证发布,当前 package 版本为 0.1.0,要求 DSH >=0.2.1-rc.5、Node >=20。社区目录页:https://www.skillhub.cn/plugins/PluckSlugSorrow/dsh-session-history-search;源码与说明:https://github.com/PluckSlugSorrow/dsh-session-history-search。

核心功能

安装并重启(若面板未立即出现)后,你会得到:

  1. 搜索框:输入查询词,对历史 Session 事件语义文本做不区分大小写的字面匹配。
  2. 「只看我发的消息 / Only my messages」:开关对应 API 参数 userOnly,只匹配用户侧消息。
  3. 「重建索引 / Rebuild index」:手动触发重建索引相关动作(面板内提供)。
  4. 结果卡片:每条对应一个 Session,展示标题、工作区文件夹(cwd)、最近命中距今多久、命中条数,以及最多四条高亮片段(标注「我 / 助手」)。
  5. 一键打开 Session:点击任意结果会在对话视图中打开该 Session(README 说明:openSession 无法定位到 Session 内某一条消息,因此会打开到 Session 末尾,需靠片段判断位置)。

检索不走 FTS SQLite 索引,而是 sessionQuery.listSessions() 配合 filterEvents(id, [{ kind: 'text', text: query }])——第一类 kind: 'text' 谓词逐 Session 扫描,中文、英文与混合文本均可搜,无需分词。无工作区(header.cwd === undefined)的 Session 会被跳过,与侧栏展示一致。

安装与启用

在资料原文中,安装命令为:

dsh plugin --profile web add dsh-session-history-search

也可在应用内插件市场安装;若侧边栏未出现面板,重启一次 DSH。

插件在 web profile 下注入客户端,并依赖 @deepseek-ai/dsh-client-locale、dsh-client-ui-layout、dsh-client-ui-sidebar、dsh-client-ui-workspace 等宿主模块。安装前请自行查看仓库源码与 MIT 许可证;插件以当前 DSH 进程权限运行,只安装你信任的来源。

典型用法

  1. 打开左侧边栏 历史搜索 / History 面板。
  2. 输入关键词(例如中文「插件」),按需打开「只看我发的消息」。
  3. 在结果卡片中查看高亮片段,点击卡片打开对应 Session,在对话里定位上下文。

宿主侧搜索接口为 POST /plugin/session-history-search/search,请求体示例:

{ "query": "插件", "userOnly": true, "limit": 40, "refresh": false }

响应中会返回按 Session 分组的 items(含 sessionId、title、cwd、matchCount、matches 等)以及 stats(扫描 Session 数、耗时、是否 partial 等)。健康检查:GET /plugin/session-history-search/health,用于确认 Session Query 服务是否挂载及已缓存 Session 数量。

适用场景与注意

适合:长期在 DSH 里多 Session 协作、需要按对话内容回溯(尤其中文关键词)的开发者。

性能与覆盖(README 明确说明):

  • 扫描成本与历史规模成正比(每个 Session 需解压与解析),单次有 10 秒墙钟预算;超时则 stats.partial 为 true,但 Session 按新到旧排序,仍优先看到最近命中。
  • 对已 settled 的 Session,结果按 (session, query, userOnly) 缓存 5 分钟(容量 400);重复搜索会在同一预算内继续扫上次未扫完的 Session,已扫过的不会重复全量扫。Live Session 每次都会重新读取。
  • 非 POST、空查询、畸形 JSON、请求体超过 64 KiB 等会返回对应 HTTP 错误;Session Query 未挂载时返回 503;经 connection 服务标记为不可信的请求会在执行前拒绝。

若 sessionQuery 不可用,面板会显示可重试的错误,而不会占满侧栏槽位崩溃。

结尾

dsh-session-history-search 把「跨 Session 的字面历史搜索」放进 DSH 侧边栏,用与 FTS 不同的扫描路径补上中文可搜性,并以 Session 分组 + 片段高亮降低回溯成本。目录与详情见 SkillHub 插件页 与 GitHub 仓库。

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

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

小夜