dsh-session-search:在本地 DSH 歷史會話裏按關鍵字檢索

前言

用 DeepSeek Harness(dsh)做項目時,會話會不斷累積:某次排錯思路、某段約定過的實現方式,往往散落在幾天前的對話裏。翻側邊欄逐個點開不現實,讓模型「憑記憶回憶」也不可靠。dsh 會把每次會話寫在本地磁盤上,但默認界面並沒有面向「跨會話、按詞找」的入口。

下面介紹社區插件 dsh-session-search(維護者 louisding9527),在不建索引、不上傳數據的前提下,直接讀取本機會話日誌,用關鍵字列出命中的會話、時間戳和摘要片段;Agent 側還提供同名工具,便於在對話裏追問「上次是怎麼修的」。

這是什麼

dsh-session-search 屬於 DSH 插件目錄中的「記憶」類擴展,當前版本 0.2.5(MIT 許可證)。它解決的是:在 ~/.dsh/sessions/ 下已有的壓縮會話文件中做關鍵字搜索,並可選導出整段對話。

DSH 將會話存放在如下路徑結構中:

~/.dsh/sessions/<encoded-cwd>/<session-id>/session.v4.jsonl.zstd

插件從這類 .zstd 日誌讀取內容;舊版純 .jsonl 格式不在支持範圍內。

核心功能

模型側工具

安裝後,Agent 可使用兩個只讀、面向本地文件的工具:

工具 作用
session_search 按關鍵字跨會話檢索,返回命中會話、時間戳與摘錄
session_read 按 session_id(完整或前綴)導出單會話對話,可用 query 過濾輪次

兩者均僅訪問本機文件,不構建持久索引,也不向外部發送內容。

選項 默認 含義
query 必填 關鍵字;空格分隔的多個詞須全部出現(AND),不區分大小寫
scope auto auto 在已知時限定當前項目;project 強制項目;all 搜全部會話
cwd 推斷 覆蓋項目路徑
since / until — YYYY-MM-DD,按事件時間過濾(含邊界)
include messages messages:用戶輸入、助手文本、標題、壓縮摘要;all 另含推理、工具調用與結果、系統提示
limit 10 最多返回會話數(≤50)
per_session 2 每會話最多摘錄條數(≤5)
include_subagents false 默認排除子 Agent 會話

結果按命中次數排序;文件按從新到舊分發,湊滿 limit 即停。常見關鍵詞通常在數百毫秒內返回;罕見詞可能掃完全部歷史(README 中舉例約 1,300 個會話時約 1.7 s)。

session_read

接受 session_id、可選 query 僅保留匹配輪次,以及 max_chars 限制輸出體量。

界面與快捷鍵

  • 側邊欄底部增加一行放大鏡入口,打開搜索對話框。
  • 默認快捷鍵:Ctrl+Shift+K(macOS 爲 Cmd+Shift+K);可在 Settings → Plugins → dsh-session-search → 修改 調整,或在 Settings → Shortcuts 中查看(若註冊成功)。
  • 對話框同時搜標題與消息正文,規則與工具一致:空格分隔詞須全部命中;點擊結果可在對話框內展開匹配輪次。

宿主通過同源只讀路由提供對話框數據:GET /session-search/query 與 GET /session-search/read。

安裝與啓用

需要帶 Web 客戶端的 dsh 0.2.x 構建;無需 npm 包、無額外構建步驟、無其它依賴。Node 引擎要求 ≥20。

桌面應用

打開 Settings → Plugins,從倉庫 URL 或下方 Release 壓縮包 URL 安裝。安裝後重啓 dsh,以便掃描瀏覽器側資源(側邊欄與快捷鍵在宿主啓動時加載)。

CLI

非默認 profile 時加上 --profile <name>(桌面一般爲 desktop,無頭環境一般爲 web):

# 從倉庫安裝(pnpm 會拉取 codeload tarball)
dsh plugin add github:louisding9527/dsh-session-search

# 或從預構建 Release(無需構建)
dsh plugin add https://github.com/louisding9527/dsh-session-search/releases/latest/download/dsh-session-search.tgz

插件市場

待 awesome-dsh-plugin 上架 PR 合併後,可在市場中搜索 session-search 安裝。

本地開發目錄

手動 patch 時可在 ~/.dsh/profiles/<profile>/cordis.patch.yml 插入插件條目;包內自帶的 cordis.patch.yml 已包含相同配置,bundle 安裝通常不必手改。修改 patch 後需重啓 dsh。

裝完如何確認

  1. Agent 工具列表中出現 session_search、session_read。
  2. 側邊欄底部出現放大鏡行;Ctrl+Shift+K 打開同一搜索框。

若缺少側邊欄項,多半是瀏覽器側未加載:應重啓 dsh(不要只刷新頁面),並在 Settings → Plugins 查看是否有加載錯誤。宿主側路由與工具在重啓前即可用;側邊欄與快捷鍵依賴啓動時的掃描。

典型用法

在 UI 中:打開搜索框,輸入一個或多個以空格分隔的關鍵字,從列表選會話並展開命中片段。

在 Agent 對話中:可讓模型調用 session_search,例如查詢過去項目中出現過的錯誤信息或配置項名稱;需要全文時再 session_read 指定 session_id。

開發倉庫內可用以下命令自測核心邏輯(僅面向插件開發者):

node scratch/test-core.mjs "keyword"   # 核心檢索與耗時
node scratch/test-tool.mjs             # 工具註冊與執行

實現要點與限制(選用時須知)

插件在子進程中解壓 zstd,避免 DSH 內嵌 Node 在異常關閉解壓流時拖垮整個宿主;會話日誌爲多幀 zstd,需自行掃描幀邊界。messages 模式會跳過上下文注入(如 dsh-mnemon 記憶快照、系統提示等),避免每次搜索都先命中注入內容。

已知限制:

  • 僅支持 .zstd 會話日誌,不支持舊 .jsonl。
  • 無持久索引,每次搜索重讀文件;稀疏命中可能全庫掃描。
  • 純子串匹配:無通配符、無正則、無分詞器;中文按子串即可。

適用場景與安全說明

適合長期用 dsh 在同一臺機器上積累大量項目會話、需要「按詞找回某次討論」的開發者。不適合指望雲端同步或全文檢索引擎級性能的場景。

插件以當前 dsh 進程權限讀取 ~/.dsh/sessions/;安裝前建議瀏覽 GitHub 倉庫 源碼與 MIT 許可證,確認符合你的安全與合規要求。社區插件目錄站點(如 SkillHub 條目頁)由社區維護,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-session-search 把「本地歷史會話」變成可檢索資源:UI 快捷鍵與側邊欄面向人,Agent 工具面向「上次怎麼做的」類問題,且全程不上傳、不建索引。需要安裝命令與參數細節時,以倉庫 README 爲準。

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

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

小夜