dsh-session-search:在本地 DSH 历史会话里按关键字检索

前言

用 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 过滤轮次

两者均仅访问本机文件,不构建持久索引,也不向外部发送内容。

选项 默认 含义
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。

装完如何确认

  1. Agent 工具列表中出现 session_search、session_read。
  2. 侧边栏底部出现放大镜行;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 为准。

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

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

小夜