dsh-session-finder:跨會話搜索 DSH 聊天並跳到命中消息

前言

在 DeepSeek Harness(DSH)里長期跑多個會話時,想找回某段對話往往只能靠左側列表逐個點開,或依賴宿主自帶的搜索。自帶搜索能打開對應會話,但響應裏通常只有 sessionId 與 snippet,沒有消息在事件流裏的座標,界面打開後不會滾到真正命中的那條消息。維護者 Aizai9527 的客戶端插件 dsh-session-finder(當前 v0.7.2)針對的是這「最後一跳」:跨會話檢索可見聊天文本,選中結果後打開會話,在已渲染的 DOM 裏定位到該條消息並短暫高亮。

這是什麼

dsh-session-finder 是 DSH 的客戶端類插件,倉庫 Aizai9527/dsh-session-finder,已在社區插件清單(awesome-dsh-plugin)登記;目錄頁見 SkillHub 插件頁。插件分宿主半與瀏覽器半:宿主側提供只讀搜索路由並讀會話持久化日誌;客戶端半負責浮層、範圍選擇與 loadThrough(seq) 跳轉。它不改寫會話文件,索引與緩存只服務於搜索與定位。

與走 sessions.search 不同,本插件自帶搜索通道。部分部署將會話索引配成 openAt: "never" 時,該 RPC 會返回 SESSION_QUERY_SEARCH_DISABLED;插件改爲通過 ctx.sessionPersistence 直接讀會話日誌,避免被這條限制擋住。

核心功能

搜索與範圍

  1. 多關鍵詞:空格分隔表示 AND;完全連寫的短語在同一會話內排序更靠前。
  2. 搜索範圍:當前會話(默認)、全部會話,或按某個項目(cwd)過濾;切換範圍會用當前關鍵詞立即重搜。
  3. 結果按消息列出,含角色、時間與命中片段;同一會話最多展示 3 條,優先級爲用戶消息、助手回覆、工具調用。
  4. 單次查詢有界:每頁最新 150 個會話、每會話 3 條、共 40 條、2.5 秒、6 個會話併發;觸頂時狀態行提示「已到單次上限」,可通過 nextOffset 繼續。

索引與緩存

提取結果按「會話 id + revision」緩存在宿主內存(≤64 M 字符)與 ~/.dsh/cache/dsh-session-finder(gzip、≤240 個文件、按 mtime 淘汰)。啓動後在空閒時預熱,寬範圍搜索不必每次重讀大量字符。環境變量 DSH_SESSION_FINDER_NO_DISK=1 可關閉磁盤緩存。

只索引看得見的文字:user/message、assistant/message 僅取 type: "text" 塊;不索引 reasoning、流式分塊、system/message、developer/message。工具側只索引名稱、參數與輸出文本,並剔除注入的 <system-reminder>。每個會話最多索引 8 M 字符;本頁無命中時會自動讀更早一頁(最多 4 頁 / 20 秒)。

跳轉與錨點

命中未渲染時,通過 ctx.sessions.binding(id).session.loadThrough(seq) 加載直到 baseSeq <= seq。定位採用三級錨點:工具命中優先 data-chat-call-id,其次 data-chat-turn,最後才按片段文字匹配;同一查詢內已用過的行不重複佔用。

定位後面板可收成導航條,支持 F3 / Shift+F3、Alt+↑ / Alt+↓ 等在命中處間跳轉;到本頁末尾且還有更早會話時會自動續頁。命中的消息塊與命中文字各有描邊,左側對應會話行也會標記;摺疊分組會先展開。高亮保留到下次跳轉或關閉浮層。

其他界面能力

  • 查詢歷史:最近 10 條存於 localStorage 鍵 dsh-session-finder:history,僅文本不含會話 id 或命中內容。
  • 面板不透明度 45%–100%(默認 100%),右下角按鈕可拖動並記住位置。
  • 狀態行顯示本次查詢耗時(如 · 用時 0.13 s),便於區分緩存冷啓動與其他問題。
  • 面板底部提供 GitHub、問題反饋、檢查更新;「檢查更新」只讀倉庫 package.json,不調用易限流的接口。

安裝與啓用

倉庫無構建步驟,lib/*.js 即爲分發產物。安裝後需重啓 DSH 桌面端,宿主半與客戶端半在啓動時加載。

# 從 npm
dsh plugin add dsh-session-finder

# 或直接從 GitHub
dsh plugin add github:Aizai9527/dsh-session-finder

運行環境要求(見 package.json):Node >=20,DSH >=0.2.0。許可爲 MIT。

維護者在 README 中說明:若本機使用 link 安裝,在插件市場裏安裝或更新其他插件可能摘掉 link 掛載,導致插件從界面消失;倉庫提供 relink.ps1 做檢查與修復。改 package.json 時避免寫入 UTF-8 BOM(例如 PowerShell 5.1 的 Set-Content -Encoding utf8),否則市場讀清單可能報「包不可用」。

典型用法

  1. 按 Ctrl+Shift+F(macOS 爲 Cmd+Shift+F),或點擊右下角可拖動的搜索按鈕。
  2. 輸入至少 2 個字符開始搜索;底部選擇「搜索範圍」。
  3. 在結果列表中用 ↑ / ↓ 選擇,Enter 定位;Esc 先收起歷史列表,再按一次關閉浮層。
  4. 定位後可用導航條或快捷鍵在多處命中間移動;輸入框爲空時可從最近 10 次查詢中快速重搜。

宿主只讀路由形如:GET /session-finder/search?q=&offset=[&sessionId=|&cwd=],由 lib/index.js 註冊;文本提取與緩存在 lib/search.js;浮層與跳轉在 lib/client.js,並通過 cordis.patch.yml 注入到 @deepseek-ai/dsh-client-ui-conversation。

開發自檢(維護者文檔):

npm run check   # node --check 三個入口
npm test        # 96 項檢查

瀏覽器半人工迴歸可打開 test/fixture.html,不依賴真實 DSH。

適用場景與注意

適合:經常在 DSH 裏開多個項目與會話、需要按內容找回某條用戶提示、助手回覆或工具輸出,並要滾到精確消息位置的開發者。

注意:

  • 插件以當前 DSH 進程的權限讀會話與寫緩存目錄;安裝前應自行查看源碼與 MIT 許可證,確認符合本機安全策略。
  • 搜索與索引有明確邊界(時長、條數、字符上限、可見文本類型),極長曆史或特殊消息類型可能搜不到或需分頁繼續。
  • 拿不到會話綁定時,會退回「滾到頂部 + 提示再點一次」的降級行爲。
  • 社區目錄(如 SkillHub)與 DeepSeek / 幻方無官方從屬關係;插件生態遵循 DSH「一切皆插件」的思路,本文事實以倉庫 README 與 package.json 爲準。

結尾

dsh-session-finder 補的是 DSH 自帶搜索「能開會話、難對準消息」的空檔:自建只讀索引通道、磁盤與內存緩存、以及 DOM 級定位與高亮導航。若你需要跨會話全文檢索並一鍵跳到命中處,可按上文命令安裝 v0.7.2 並重啓桌面端。

  • 目錄頁:https://www.skillhub.cn/plugins/Aizai9527/dsh-session-finder
  • GitHub:https://github.com/Aizai9527/dsh-session-finder
羽毛球分组比赛记分
小程序二维码

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

小夜