DSH Session Search
English | 简体中文
跨会话的消息级搜索插件,面向 DSH 桌面端。
> 在所有历史会话里做全文搜索。中文单字和关键词都能搜;结果按对话轮次紧凑展示,点一下就能跳到原文并高亮。全部数据留在本地 SQLite 索引里,不联网、不上传。
功能
- 侧栏面板 + 标题栏快捷入口:左侧栏有一个搜索图标入口,会话标题旁还有一个更紧凑的「搜索历史」按钮。
- 搜索所有会话:跨工作区做消息级全文搜索。中文单字、词语、Markdown 源码和 LaTeX 公式都能命中。
- 紧凑的轮次行:一轮对话一行,类似微信搜索:标题 + 第 N 轮 + 日期,一行高亮摘要,剩余命中用「展开」查看。首屏返回 5 轮,点「查看全部」原地扩展到 200 轮。
- 相关优先排序:用户/助手正文用 BM25 相关度,再叠加关键词位置、来源类型和指数时间衰减。随时可以在「相关优先」和「最新优先」之间切换。
- 跳转与高亮:点击结果会打开对应会话、滚动到准确轮次;如果命中藏在折叠的工具调用或思考块里,会先自动展开,再在聊天区高亮关键词。
- 纯本地索引:首次使用时自动构建 SQLite FTS5(trigram)索引,之后增量更新并自动压缩。2.2 万条消息约 40 MB;会话日志本身从不修改。
- 健壮性:索引损坏会自动重建;单个会话读不出来不会中断整个建库;Host 缺少某个服务时只会让面板不可用,不影响 DSH 本身。
环境要求
- DSH 桌面端 0.2.1-rc.3(已测试)。
- Host 服务
webServer、sessionPersistence/sessionQuery,以及 Node 的node:sqlite。
缺少其中任何一个时,插件仍会加载,面板会说明缺什么。
安装
从仓库的 Release 下载 .tgz,然后任选一种:
插件管理器
- 打开 DSH → 插件 → 添加 → 本地路径。
- 选择
.tgz(如果你的插件管理器只接受目录,就先解压再选目录)。 - 重启 DSH,或等待热更新。
命令行
dsh plugin --profile desktop add ./dsh-session-search-1.1.1.tgz
启用后,从左侧栏打开 会话搜索。第一次打开会在后台建库并显示进度;已经索引好的部分可以边建边搜。
使用
- 输入关键词按回车即可;中文单字也能搜。
- 来源筛选:默认只搜 用户 和 助手。需要时再打开 工具、思考 或 系统;索引里本来就有这些内容,只是默认被过滤掉。
- 排序:相关优先(默认)或 最新优先。
- 查看全部:首屏显示 5 轮;底部按钮把同一批结果原地扩展到 200 轮,不会重新跑查询。
- 点击某一行:打开来源会话并定位到那一轮,高亮命中。如果命中在折叠的工具调用或思考块里,会先自动展开。如果聊天界面确实不渲染这条内容(系统注入、被截断的工具卡片),插件会用 toast 说明,而不是高亮到错误的位置。
- 状态会记住:查询词、筛选、排序、展开的行和滚动位置,跳进会话再回来都还在。
工作原理
会话日志 ──> Host 索引器 ──> SQLite(消息 + FTS5 trigram)
│
HTTP /.dsh-session-search/*
│
Client 面板(Cordis slots)
- Host 半通过
sessionPersistence/sessionQuery读取会话事件,折叠成可检索消息,存到~/.dsh/storages/session-search.sqlite。 - FTS 索引只覆盖对话正文(用户 + 助手)。工具、思考、系统文本在勾选对应来源时用
LIKE检索,这样索引体积能小一个数量级。 - Client 半是普通的 Cordis 客户端插件:一个
sidebar.panellist入口、一个同 id 的main面板,以及会话标题旁的conversation.header.leading快捷入口。它通过同源的 HTTP 路由和 Host 通信。 - 索引是派生数据:随时可以删除,也可以在面板里点 重建索引。
隐私
- 全部在本地。插件不会把任何消息内容发送到任何地方。
- 索引里存有消息正文(这正是能搜的原因)。请把
~/.dsh/storages/session-search.sqlite当作敏感文件;想清除索引直接删除即可。 - 会话日志以只读方式打开,从不修改。
已知限制
- 很旧的会话日志格式可能被 Host 拒绝;面板会显示跳过了多少个会话。
- 搜索工具 / 思考 / 系统会慢一些(约 60–80 ms),因为走的是子串扫描而不是 trigram 索引。
- 有些命中无法高亮,因为聊天界面不渲染它们:系统注入内容、只显示截断摘要的工具卡片,以及当前显示模式下被隐藏的思考。插件会定位到轮次并给出说明。
- 在特别大的会话里跳到很久以前的轮次,可能需要几秒钟等聊天区加载历史。
- 跳转/高亮依赖 DSH 聊天区的 DOM 契约;目前针对 0.2.1-rc.3 测试,其他版本可能需要适配。
开发
index.js Host 半:索引器 + HTTP 路由
client.js Client 半:侧栏面板、结果列表、跳转/高亮
cordis.patch.yml
package.json
构建可安装包:
pnpm pack
快速检查:
node --check index.js
node --check client.js
许可证
MIT,详见 LICENSE。