前言¶
用 DeepSeek Harness(dsh)做项目时,会话会不断累积:某次排错思路、某段约定过的实现方式,往往散落在几天前的对话里。翻侧边栏逐个点开不现实,让模型「凭记忆回忆」也不可靠。dsh 会把每次会话写在本地磁盘上,但默认界面并没有面向「跨会话、按词找」的入口。
下面介绍社区插件 dsh-session-search(维护者 louisding9527),在不建索引、不上传数据的前提下,直接读取本机会话日志,用关键字列出命中的会话、时间戳和摘要片段;Agent 侧还提供同名工具,便于在对话里追问「上次是怎么修的」。
这是什么¶
dsh-session-search 属于 DSH 插件目录中的「记忆」类扩展,当前版本 0.2.5(MIT 许可证)。它解决的是:在 ~/.dsh/sessions/ 下已有的压缩会话文件中做关键字搜索,并可选导出整段对话。
DSH 将会话存放在如下路径结构中:
~/.dsh/sessions/<encoded-cwd>/<session-id>/session.v4.jsonl.zstd
插件从这类 .zstd 日志读取内容;旧版纯 .jsonl 格式不在支持范围内。
核心功能¶
模型侧工具¶
安装后,Agent 可使用两个只读、面向本地文件的工具:
| 工具 | 作用 |
|---|---|
session_search |
按关键字跨会话检索,返回命中会话、时间戳与摘录 |
session_read |
按 session_id(完整或前缀)导出单会话对话,可用 query 过滤轮次 |
两者均仅访问本机文件,不构建持久索引,也不向外部发送内容。
session_search 主要参数¶
| 选项 | 默认 | 含义 |
|---|---|---|
query |
必填 | 关键字;空格分隔的多个词须全部出现(AND),不区分大小写 |
scope |
auto |
auto 在已知时限定当前项目;project 强制项目;all 搜全部会话 |
cwd |
推断 | 覆盖项目路径 |
since / until |
— | YYYY-MM-DD,按事件时间过滤(含边界) |
include |
messages |
messages:用户输入、助手文本、标题、压缩摘要;all 另含推理、工具调用与结果、系统提示 |
limit |
10 |
最多返回会话数(≤50) |
per_session |
2 |
每会话最多摘录条数(≤5) |
include_subagents |
false |
默认排除子 Agent 会话 |
结果按命中次数排序;文件按从新到旧分发,凑满 limit 即停。常见关键词通常在数百毫秒内返回;罕见词可能扫完全部历史(README 中举例约 1,300 个会话时约 1.7 s)。
session_read¶
接受 session_id、可选 query 仅保留匹配轮次,以及 max_chars 限制输出体量。
界面与快捷键¶
- 侧边栏底部增加一行放大镜入口,打开搜索对话框。
- 默认快捷键:
Ctrl+Shift+K(macOS 为Cmd+Shift+K);可在 Settings → Plugins → dsh-session-search → 修改 调整,或在 Settings → Shortcuts 中查看(若注册成功)。 - 对话框同时搜标题与消息正文,规则与工具一致:空格分隔词须全部命中;点击结果可在对话框内展开匹配轮次。
宿主通过同源只读路由提供对话框数据:GET /session-search/query 与 GET /session-search/read。
安装与启用¶
需要带 Web 客户端的 dsh 0.2.x 构建;无需 npm 包、无额外构建步骤、无其它依赖。Node 引擎要求 ≥20。
桌面应用¶
打开 Settings → Plugins,从仓库 URL 或下方 Release 压缩包 URL 安装。安装后重启 dsh,以便扫描浏览器侧资源(侧边栏与快捷键在宿主启动时加载)。
CLI¶
非默认 profile 时加上 --profile <name>(桌面一般为 desktop,无头环境一般为 web):
# 从仓库安装(pnpm 会拉取 codeload tarball)
dsh plugin add github:louisding9527/dsh-session-search
# 或从预构建 Release(无需构建)
dsh plugin add https://github.com/louisding9527/dsh-session-search/releases/latest/download/dsh-session-search.tgz
插件市场¶
待 awesome-dsh-plugin 上架 PR 合并后,可在市场中搜索 session-search 安装。
本地开发目录¶
手动 patch 时可在 ~/.dsh/profiles/<profile>/cordis.patch.yml 插入插件条目;包内自带的 cordis.patch.yml 已包含相同配置,bundle 安装通常不必手改。修改 patch 后需重启 dsh。
装完如何确认¶
- Agent 工具列表中出现
session_search、session_read。 - 侧边栏底部出现放大镜行;
Ctrl+Shift+K打开同一搜索框。
若缺少侧边栏项,多半是浏览器侧未加载:应重启 dsh(不要只刷新页面),并在 Settings → Plugins 查看是否有加载错误。宿主侧路由与工具在重启前即可用;侧边栏与快捷键依赖启动时的扫描。
典型用法¶
在 UI 中:打开搜索框,输入一个或多个以空格分隔的关键字,从列表选会话并展开命中片段。
在 Agent 对话中:可让模型调用 session_search,例如查询过去项目中出现过的错误信息或配置项名称;需要全文时再 session_read 指定 session_id。
开发仓库内可用以下命令自测核心逻辑(仅面向插件开发者):
node scratch/test-core.mjs "keyword" # 核心检索与耗时
node scratch/test-tool.mjs # 工具注册与执行
实现要点与限制(选用时须知)¶
插件在子进程中解压 zstd,避免 DSH 内嵌 Node 在异常关闭解压流时拖垮整个宿主;会话日志为多帧 zstd,需自行扫描帧边界。messages 模式会跳过上下文注入(如 dsh-mnemon 记忆快照、系统提示等),避免每次搜索都先命中注入内容。
已知限制:
- 仅支持
.zstd会话日志,不支持旧.jsonl。 - 无持久索引,每次搜索重读文件;稀疏命中可能全库扫描。
- 纯子串匹配:无通配符、无正则、无分词器;中文按子串即可。
适用场景与安全说明¶
适合长期用 dsh 在同一台机器上积累大量项目会话、需要「按词找回某次讨论」的开发者。不适合指望云端同步或全文检索引擎级性能的场景。
插件以当前 dsh 进程权限读取 ~/.dsh/sessions/;安装前建议浏览 GitHub 仓库 源码与 MIT 许可证,确认符合你的安全与合规要求。社区插件目录站点(如 SkillHub 条目页)由社区维护,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-session-search 把「本地历史会话」变成可检索资源:UI 快捷键与侧边栏面向人,Agent 工具面向「上次怎么做的」类问题,且全程不上传、不建索引。需要安装命令与参数细节时,以仓库 README 为准。