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