前言¶
用 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 過濾輪次 |
兩者均僅訪問本機文件,不構建持久索引,也不向外部發送內容。
session_search 主要參數¶
| 選項 | 默認 | 含義 |
|---|---|---|
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。
裝完如何確認¶
- Agent 工具列表中出現
session_search、session_read。 - 側邊欄底部出現放大鏡行;
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 爲準。