dsh-session-keyword-search: Cross-session substring keyword search

前言

DeepSeek Harness(DSH)会把每次对话持久化成本地会话。侧边栏自带搜索走 ctx.sessionQuery.searchSessions,底层是 SQLite FTS5,分词器为 unicode61:连续的一段中文往往被当成一个 token。于是文档里是「大麦协议劫持已在真机验证通过」时,搜「大麦」可能命不中;「会话搜索」也命不中「搜索」。你记得某句原话或几个英文关键词,却想不起是哪次会话——这是 harness 内置搜索和真实记忆方式之间的落差。

下面介绍社区插件 dsh-session-keyword-search(维护者 JimmyRowe13,分类:记忆)。它不另开一个搜索入口,而是接管侧边栏原有搜索框:输入例如 大麦 x-sign,列表里列出聊过这些内容的会话,并在打开结果后尽量滚到匹配消息。

这是什么

dsh-session-keyword-search 用本地派生 SQLite 索引做子串检索(LIKE over 小写文本列),中文、英文和混排查询行为一致,不依赖 FTS 分词规则。插件通过公开服务 listSessions、readSession 等读语料,不解析 zstd 日志路径;对 live 的 sessionQuery 做增强并在卸载时恢复原方法,索引失败时会降级到宿主原有搜索与会话标题子串匹配。

核心功能

子串召回与会话级 AND

空白分隔多个检索词时,每个词都必须在同一会话的某处出现,但不要求在同一条消息里。用引号包住的 "phrase" 则必须在单条消息内原样出现。

排序与来源过滤

命中消息越多的会话越靠前,其次按最近活动排序;当前工作区在并列时优先。索引默认只纳入 data.source.kind 在 userSourceKinds(默认 ["user"])里的人类轮次;dsh-mnemon、runtime-context 等注入内容默认不进索引。助手侧只索引 text 块,reasoning 不可搜。

段落粒度与 UI

消息在空行处切分(过长段落还会按行界切),摘要指向段落而非整段消息。侧边栏结果里查询词可包在 <mark> 中;打开会话后会尝试滚动并闪一下匹配消息(受 revealAttempts 等配置约束)。

增量索引

首次搜索会建派生索引表;之后仅重读 revision 变化的会话。设置面板或脚本可重建、清空索引。

安装与启用

安装命令来自仓库 README(从仓库内 tgz 安装,改的是 profile 的 package.json 与 bundle,不碰应用目录本身):

# from this repository
node scripts/install.mjs --tgz ./dsh-session-keyword-search-0.1.0.tgz
# then restart DeepSeek Harness

可用 --dry-run 预览将要写入的 manifest。卸载:

node scripts/uninstall.mjs            # keep the index
node scripts/uninstall.mjs --drop-index

安装完成后需重启 DeepSeek Harness 才会加载 bundle。

插件以当前 DSH 进程权限运行;索引为明文 SQLite,存放消息文本。安装前请自行查看 GitHub 仓库 源码与 MIT 许可证。

典型用法

侧边栏搜索

在 harness 侧边栏原有搜索框输入关键词,例如 README 中的示例:

大麦 x-sign

列表展示匹配的会话;选中后若启用了 uiReveal,会尝试定位到匹配消息。

关闭接管或改配置

在 profile 的 patch 里按 bundle id 覆盖配置,例如仅关闭接管(不建索引、保留宿主搜索):

- id: session-keyword-search
  config:
    takeover: off

常用字段包括:path(默认 <dataHome>/storages/session-keyword-search/index.db)、takeover(默认 auto)、userSourceKinds、includeToolEvents、uiHighlight、uiReveal、revealAttempts 等;完整表格见 README。

无界面维护与自检

node scripts/status.mjs            # index state plus the registration record
node scripts/status.mjs --rebuild  # rebuild from the on-disk sessions
node scripts/status.mjs --clear    # drop every indexed row

离线验证召回(不启动 harness):

node scripts/verify.mjs --rebuild --queries "槟榔 价格" "沉静式翻译 气泡" "大麦 x-sign"

设置面板路径:Settings → Session keyword search(经 /dsh-session-keyword-search RPC)。若遇 HTTP 405,可先看索引目录旁的 rpc-registration.json。

适用场景与注意

适合:长期在 DSH 里积累大量会话、需要用中文子串或混合关键词跨会话找回内容、希望继续用侧边栏同一个搜索框的开发者。

注意:

  • 最近一两轮可能尚未落盘,刚发的消息可能暂时搜不到。
  • 高亮与定位依赖前端 DOM 约定,搜索本身不依赖它们;Markdown 渲染与存储前缀不一致时,定位可能失败。
  • harness 判为损坏的会话会被跳过,计数显示在设置面板「Unreadable sessions skipped」。
  • DSH 生态是「一切皆插件」;SkillHub 目录页 是社区索引站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-session-keyword-search 用本地子串索引补上了 FTS5 对 CJK 不友好的缺口,并接管侧边栏搜索框,在索引不可用时仍可按宿主逻辑降级。进一步了解与安装说明见 SkillHub 插件页 与 GitHub:JimmyRowe13/dsh-session-keyword-search。

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

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

Xiaoye