前言¶
在 DeepSeek Harness(DSH)里长期跑对话,会话会堆在本地。想找回某次讨论里说过的一句话,往往只能逐个打开会话、上下翻页。DSH 自带索引能力可以配合其他插件,但若你只想在 Web 或桌面端侧边栏里按关键词搜全部历史,并直接跳到那条消息所在行,就需要一个专门读本地会话文件、再在 UI 里完成跳转的插件。下面介绍社区插件 dsh-session-search(维护者 Li-0803,分类:记忆)。
这是什么¶
dsh-session-search 给 DSH 增加一个会话全文搜索浮窗:侧边栏有放大镜入口,按关键词搜索本机 DSH 中的全部历史会话;点击某条命中后,打开该会话并定位到对应消息行,高亮数秒(User 消息定位到用户行,DeepSeek 回复定位到助手行)。
简介原文:Full-text search for DeepSeek Harness sessions with precise message navigation.
- 目录页:https://www.skillhub.cn/plugins/Li-0803/dsh-session-search
- 源码:https://github.com/Li-0803/dsh-session-search
- 许可证:MIT
- 当前版本(package.json):0.1.1
插件以当前 DSH 进程权限运行,会读取本机会话正文;安装前建议浏览源码与许可证。
核心功能¶
搜索浮窗与交互¶
- 侧边栏左下角(「设置」按钮附近)出现搜索入口;点击弹出浮窗,可用左上角关闭、点遮罩或 Esc 关闭。
- 搜索框输入关键词后 300ms 防抖实时搜索。
- 对话方筛选:全部 / DeepSeek / User。
- 结果按时间倒序,每条带时间(MM-DD HH:mm)。
- 无关键词时默认列出所有会话(标题 + 各一条 User / DeepSeek 消息样例)。
- 命中内容关键词高亮,只展示命中句附近片段。
- 点击命中 → 打开会话 → 自动加载历史分页 → 定位到消息行 → 滚动并高亮 → 浮窗关闭。
主机端与定位机制¶
主机端直接读取 ${DSH_HOME:-~/.dsh}/sessions/**/session.jsonl.zstd,用 Node 内置 node:zlib 解压 JSONL,做本地全文搜索;不依赖 DSH 的 session.search 索引,也无需把 session-query-sqlite 的 openAt 改成 startup。
对话分页懒加载,插件在客户端通过 sessions.binding(sessionId).session.loadOlder() 循环加载,直到目标消息进入 DOM,再用 [data-chat-anchor-key] 与文本匹配定位;高亮只对文本节点处理,不改写 innerHTML。
通过 DSH 的 ctx.webServer 暴露 GET /api/dsh-session-search(参数含 q、party 等)。接口有回环限制(Host 与 remoteAddress 均为 localhost / 127.x / ::1 才放行,否则 403);文档明确说明这不是可靠鉴权,同一机器上能访问该端口的进程或页面仍可能读到会话内容。
响应上限¶
- 每条命中片段上限约 300 字符,超出以
…包裹并标记truncated: true。 - 单次搜索最多 200 条命中(
matchLimit)、50 个会话分组(groupLimit);无关键词列表同样限制最新 50 个会话。 - 关键词长度上限 500 字符。
环境要求¶
- Node.js ≥ 22.15.0(
zstdDecompressSync自 22.15.0 起提供,且为实验性 API)。 - DeepSeek Harness:README 记载已在
dsh web0.1.x(0.1.1-rc.2)、官方桌面端(DSH Desktop)与 0.2+ 的dsh web上人工验证。 - 浏览器:Chrome / Edge / Safari / Firefox 最新版。
会话切换 API 随 DSH 版本变化:0.2+ / 桌面端用 uiWorkspace.openSession(sessionId);0.1.x 用 sessions.open(sessionId)。插件优先新 API、回退旧 API。
安装与启用¶
推荐用 dsh plugin add(仓库自带 dsh.bundle.patch,安装时可自动把插件 insert 进 profile)。资料中的步骤如下(需先把插件目录放到稳定位置;示例假设目录名为 dsh-session-search)。
mkdir -p ~/.dsh/plugins
cp -R dsh-session-search ~/.dsh/plugins/
dsh plugin --profile web add link:~/.dsh/plugins/dsh-session-search
--profile 按实际宿主填写:dsh web 用户一般为 web,官方桌面端为 desktop。安装后重启对应宿主生效。
若 pnpm install 对 link: 依赖异常(表现为 Already up to date 但 node_modules 里没有包),可补软链接:
ln -snf ~/.dsh/plugins/dsh-session-search ~/.dsh/profiles/web/node_modules/dsh-session-search
不依赖 pnpm 时可手动 symlink 进 profile 的 node_modules 并重启;若宿主不认 dsh.bundle.patch,需在 ~/.dsh/profiles/<profile>/cordis.patch.yml 末尾追加 README 中的 insert 条目。
卸载:删除 symlink、从 cordis.patch.yml 去掉对应 insert、重启;可选删除 ~/.dsh/plugins/dsh-session-search。插件不写入新数据文件。
典型用法¶
- 启动或重启
dsh web/ DSH Desktop,确认侧边栏左下角出现搜索入口。 - 打开浮窗,输入关键词;需要时切换「全部 / DeepSeek / User」。
- 在分组结果中点击一条命中,等待会话打开与历史分页加载,页面应滚到对应消息并短暂高亮。
- 清空关键词可浏览最近会话列表(受 50 个会话上限约束)。
主机端单元测试(README):
node --test
适用场景与注意¶
适合:本地自用 DSH、会话多、需要跨会话全文检索并跳到原消息行的开发者。
务必注意:
- 插件会读取并展示本机全部历史会话正文,不上传、不遥测、不发起外部网络请求,但会话内容通常高度私密。
- 不要把 DSH Web 暴露到公网或不可信网络(例如避免
--host 0.0.0.0对外监听);共享电脑使用前自行评估风险。 - 搜索为同步读盘解压,会话很多或很大时可能短暂卡顿;无缓存索引,连续快速输入时旧请求可能晚于新请求返回。
- 定位采用轮询等待 DOM,会话很长且目标很靠前时等待更久。
- 回环限制不能替代访问控制;反向代理或端口转发可能改变请求来源表现。
常见故障(节选):无入口 → 检查 cordis.patch.yml 与 symlink 并重启;403 → 非回环访问;无法切换会话 → DSH 版本与 openSession / sessions.open 契约不匹配,见 README 故障排查表。
结尾¶
dsh-session-search 在 DSH 侧边栏提供跨会话全文搜索,并在点击命中后加载分页、定位到具体消息行,适合在本地 Harness 工作流里快速找回历史对话。详情与更新见 GitHub README;社区目录页:https://www.skillhub.cn/plugins/Li-0803/dsh-session-search ,源码:https://github.com/Li-0803/dsh-session-search 。