dsh-session-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。

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

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

小夜