dsh-session-search:DSH 歷史會話全文搜索與消息定位

前言

在 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 web 0.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。插件不寫入新數據文件。

典型用法

  1. 啓動或重啓 dsh web / DSH Desktop,確認側邊欄左下角出現搜索入口。
  2. 打開浮窗,輸入關鍵詞;需要時切換「全部 / DeepSeek / User」。
  3. 在分組結果中點擊一條命中,等待會話打開與歷史分頁加載,頁面應滾到對應消息並短暫高亮。
  4. 清空關鍵詞可瀏覽最近會話列表(受 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 。

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

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

小夜