dsh-plugin-sessiongraph:本機會話歷史的本地全文索引

前言

在 DeepSeek Harness(DSH)裏做智能體或長期協作開發時,會話會分散在多個工作區、多條線程裏。想找回「上次在哪條會話裏說過某句話、跑過哪條命令」,常見做法是翻側邊欄或去 grep 壓縮日誌,成本高,且內置的 session_search 對中文分詞幾乎不可用、索引還在內存裏、重啓即失。下面介紹社區插件 dsh-plugin-sessiongraph:把本機全部 DSH 會話建成落盤索引,支持跨工作區全文檢索,併爲中文兩字詞做了專門分詞;索引路徑可選 Rust 原生內核,大庫下比純 TypeScript 回落路徑更快。

這是什麼

dsh-plugin-sessiongraph(維護者 CC19990113,GitHub 倉庫 CC19990113/dsh-plugin-sessiongraph)是 DSH 生態裏分類爲「記憶」相關能力的一類插件:它不替你做記憶抽取,而是把會話原文(用戶消息、助手文本、工具調用名與參數、會話標題等)索引成可檢索語料。一句話定位:記憶回答「結論是什麼」,內置 session_search 回答「哪個會話提到過」,sessiongraph 回答「當時到底說了什麼」。

插件以 MIT 許可證發佈;當前倉庫根 package.json 顯示版本 0.1.15,要求 Node ^22.19.0 || >=24.0.0。SkillHub 目錄頁:dsh-plugin-sessiongraph(社區站點,與 DeepSeek / 幻方無官方從屬關係)。

核心功能

檢索與作用域

  • 跨會話全文搜索:模型工具 sessiongraph 的 search 可按 workspace、after、before、kinds 過濾,返回標題、工作區、時間、輪次與帶高亮的片段。
  • 全機跨工作區:與僅覆蓋「調用方工作區」的內置檢索不同,索引覆蓋本機各工作區的會話。
  • 中文兩字詞:自建 bigram 分詞(與 SQLite 默認 unicode61 無 CJK 處理、兩字詞在 trigram 下也難命中形成對比);查詢側 token 引號後 AND 連接,偏召回而非短語精確匹配。

讀索引的其它入口

能力 說明
session 按完整 id 或唯一前綴打開會話:元信息、有序條目、子會話
timeline 按時間列會話(可限工作區),新→舊
workspaces 工作區清單與統計
status 索引狀態;唯一在尚未建庫時也能正常回答的操作

寫側由 sessiongraph_index 負責建庫或刷新(獨立 300 秒預算;源文件 mtime+size 未變則跳過;會話超過 1000 條時可轉後臺 job 並返回 jobId)。

Rust 內核與引擎選擇

索引寫入走 napi-rs 原生模塊(Rayon + rusqlite),非 WASM,以便直接讀寫文件系統與 SQLite、處理 GB 級數據。README 給出的參考數據(同一機器、兩庫內容一致):Rust 全量約 6.76s、增量 59–107ms、查詢 0.1–6.9ms、索引約 170 MB;TypeScript 回落全量 19.22s、增量 230ms。配置項 engine: 'auto' | 'native' | 'typescript',默認 auto:有原生則用,缺失二進制時靜默回落,不算錯誤。

自動索引(默認無需手工建庫)

裝完後默認有四道自動機制:首次無索引時在會話創建後臺建庫(autoBuild,默認開);已有索引時在 agent/created 做增量;查詢前若 status.json 的 indexedAt 超過 5 分鐘則先增量;當前未落盤的 live 會話通過宿主 ctx.sessionQuery 納入。若希望完全手動:autoBuild: false 關首次建庫,autoIndex: false 關增量,之後只用 sessiongraph_index 或 /sessiongraph index。

架構要點(與擴展相關)

六個包沿 ctx.sessiongraph 縫隙分層:加 store 或 indexer 不必改模型工具。查詢路由爲「恰好一個認領者」:併發問所有 store,0 個或多個認領者分別拋 SESSIONGRAPH_UNAVAILABLE / SESSIONGRAPH_CONFLICT,註冊順序與熱重載不改變結果。

安裝與啓用

在 DSH 中安裝官方文檔給出的命令:

dsh plugin add dsh-plugin-sessiongraph

開發時可 link 本地目錄(profile 的 dependencies 與 dsh.profile.bundles,路徑按你的 clone 位置填寫)。裝完重啓 DSH;README 說明首次可調用 sessiongraph_index 建庫,之後以自動增量爲主。

可選配置(均來自 README):injectCommandResults: true 將斜槓命令結果以 plugin/notice 回灌對話(默認關,因命令跑在宿主主線程);updateCheck / updateCheckIntervalMs 控制工具調用後檢查 registry 新版本的提醒。

典型用法

1. 讓模型查歷史

直接提問,例如:「上次討論開屏廣告是哪個會話?」模型會調用 sessiongraph 工具。

2. 斜槓命令

/sessiongraph status
/sessiongraph index
/sessiongraph index --force
/sessiongraph search <詞>
/sessiongraph workspaces

無參數的 /sessiongraph 等同於 status。search 會打印前 10 條命中;workspaces 用 * 標當前工作區。

3. 與內置檢索、記憶的分工

需求 更合適的選擇
偏好、決策、實體等「結論」 OpenViking / MEMORY.md 類記憶
英文關鍵詞、最近會話裏的提及 DSH 內置 session_search
原話、命令參數、中文兩字詞、跨工作區 sessiongraph

一段對話可能永遠不進記憶閾值,但仍會進入 sessiongraph 的原文索引;記憶條目則常已脫離上下文,覈對細節仍要回會話原文。

適用場景與注意

適合誰:在本機長期用 DSH、會話多工作區、需要按字面或中文短詞找回歷史發言與工具調用的人;尤其當內置 session_search 在中文或跨工作區場景下不夠用時。

安全與權限:插件在當前 DSH 進程權限下運行,會掃描並索引本地會話日誌、寫入 SQLite 索引庫。安裝前應閱讀 GitHub 源碼 與 MIT 許可證,確認可接受其讀寫的路徑與數據範圍。

其它注意:索引有意跳過 tool/result 正文、reasoning 塊等(詳見 README「索引什麼」);斜槓命令默認不回灌,避免曾在 handler 中 agent.inject 導致桌面卡住的問題;插件不能自升級,新版本需通過宿主更新 profile 依賴。

結尾

dsh-plugin-sessiongraph 把本機 DSH 會話變成可增量維護、可毫秒級查詢的全文庫,並在中文兩字詞與跨工作區範圍上補足了內置檢索的短板。目錄與源碼:

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

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

小夜