前言¶
DeepSeek Harness(DSH)的會話日誌落在本地持久化層裏,換電腦、換目錄或升級 DSH 版本時,若只靠拷貝磁盤上的原始目錄,往往要對齊工作區路徑、會話格式代際和側欄掛載關係,成本不低。社區裏已有面向本地歸檔管理的參考實現(如 MichengAI/dsh-archive-manager),相鄰需求則是把會話打成可移植包,在另一臺機器或新版本 DSH 裏重新落庫並掛回工作區。
下面介紹維護者 jr-create 在 DSH 插件目錄「記憶」分類下的 dsh-session-vault(DSH 會話保管庫):宿主端 Node 服務、瀏覽器設置頁 UI,以及供 Agent 調用的模型工具,圍繞「看見 → 取走 → 放回」三類操作組織能力。歸檔格式標記爲 dsh-session-archive(gzip 壓縮的 JSONL,內容爲持久化服務返回的歸一化事件,而非磁盤原始字節),舊名 dsh-session-export 產生的標記仍可讀取。配合 dsh-config-manager 可實現完整 DSH 配置與會話的換機移植。
這是什麼¶
- 名稱:dsh-session-vault(npm 上該名已被無關插件佔用,因此通過 GitHub 直接分發;倉庫名與內部路由/數據目錄仍用 vault 命名)
- 維護者:jr-create
- 版本(package.json):0.1.0
- 許可證:MIT
- 定位:瀏覽、導出、導入,以及跨機器搬運 DSH 會話;導出歸檔擴展名爲
.dshsession
核心功能¶
導出與導入¶
| 能力 | 說明 |
|---|---|
| 導出 | 勾選若干會話後打包爲一個 .dshsession;不勾選則導出全部 |
| 部分成功 | 個別會話讀不出時跳過並逐條報告原因,其餘照常導出;全部失敗才報錯 |
| 導入 | 上傳或選擇 .dshsession,經 DSH 持久化服務重新落庫,並掛到工作區側欄 |
| 遷移路徑 | 導入時可指定新的工作區目錄,例如從 D:\old\proj 遷到 /home/me/proj |
| ID 衝突 | 默認跳過已有會話;也可選擇以新 ID 導入,兩份都保留 |
| 預覽 | dryRun 只輸出計劃,不寫入 |
歸檔與清理¶
- 歸檔管理:列出、下載、查看內容、刪除已導出的歸檔;導出文件默認落在
<DSH_HOME>/dsh-session-vault/exports/。 - 清理會話:永久刪除三類範圍——未掛載且未歸檔的、已歸檔的未掛載的、從未使用過的空殼會話;先預覽,需雙重確認。刪除是插件內唯一繞過服務直接動文件的操作(因
SessionPersistence無刪除接口),並帶有工作區歸屬、活動會話、路徑安全與confirm: true等圍欄;詳見 README「已存儲的會話 ≠ 側欄裏的會話」與清理說明。
列表與篩選¶
設置頁與會話 API 區分「持久化裏存的」與「側欄可見的」:可按全部、側欄可見、未掛載工作區、子代理等範圍篩選;每行標註 mounted / orphaned / 工作區信息等。標題按三檔解析(投影緩存、首條人類消息、無標題),並標出來源 titleSource。
模型工具與 HTTP¶
Agent 可調用:
session_listsession_exportsession_archive_inspectsession_importsession_delete(含 dryRun、includeArchived、includeEmpty等選項)
瀏覽器端走同源下的 /api/dsh-session-vault/*(如 GET /sessions、POST /export、POST /import、POST /purge 等)。README 中給出了 GET /api/dsh-session-vault/sessions 的 JSON 示例字段。
倉庫測試:node --test 共 201 項測試,README 稱全部離線通過。
安裝與啓用¶
插件爲純 JavaScript,無構建步驟;不要爲其添加 dependencies / peerDependencies,也不要複製 node_modules(link 安裝時若 import 宿主包會導致插件樹加載失敗、dsh web 無法啓動;本插件通過 ctx.get() / ctx.inject() 與本地 shim 避免 import 宿主包)。
# 從 GitHub 安裝
dsh plugin --profile web add github:jr-create/dsh-session-vault
# 鎖定到某個 commit(推薦)
dsh plugin --profile web add github:jr-create/dsh-session-vault#<sha>
# 或裝 Release 裏的預打包 tarball
dsh plugin --profile web add ./dsh-session-vault-0.1.0.tgz
# 本地開發
dsh plugin --profile web add link:<你的源碼目錄>
安裝完成後重啓 dsh web,打開 設置 → 會話保管庫。
卸載:
dsh plugin --profile web remove dsh-session-vault
運行環境(package.json):Node ^22.19.0 || >=24.0.0。
典型用法¶
圖形界面¶
設置面板四個標籤頁:
- 導出 — 搜索、勾選、「導出所選並下載」。
- 導入 — 點擊或拖入
.dshsession;可先查看歸檔內容,填寫新工作區目錄、衝突策略、是否自動建目錄,再「預覽」或「開始導入」。 - 歸檔 — 已導出歸檔的下載、導入、刪除。
- 清理 — 三類垃圾各自範圍標籤;先預覽,勾選確認後再刪除。
通過 Agent 工具¶
按 README 工具名調用即可,例如先 session_list 確認範圍,再 session_export 生成歸檔,session_archive_inspect 檢查內容,session_import 落庫(可先 dryRun)。
適用場景與注意¶
適合:需要在兩臺機器或不同 DSH 版本之間遷移會話;需要批量導出備份 .dshsession;工作區被刪後會話日誌仍在磁盤上,需要列出、導出或按規則清理;希望 Agent 在對話中自行導出/導入會話。
注意:
- 插件在 web profile 下安裝,以當前
dsh web進程權限訪問持久化與會話數據;安裝前請自行查看 GitHub 源碼 與 MIT 許可證。 - 歸檔是歸一化事件流,不是
~/.dsh/sessions/**的逐字節鏡像;跨版本導入依賴 DSH 持久化服務,與純目錄拷貝不是同一條路。 - 刪除不可撤銷;要保留副本請先導出。
結尾¶
dsh-session-vault 把 DSH 會話做成可清單、可打包、可回遷的保管庫,並顯式處理未掛載、子代理與清理邊界,與本地歸檔類插件形成互補。目錄與文檔:
- 插件目錄頁:https://www.skillhub.cn/plugins/jr-create/dsh-session-vault
- GitHub:https://github.com/jr-create/dsh-session-vault