dsh-session-vault:DSH 會話的瀏覽、導出、導入與跨機器搬運

前言

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_list
  • session_export
  • session_archive_inspect
  • session_import
  • session_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。

典型用法

圖形界面

設置面板四個標籤頁:

  1. 導出 — 搜索、勾選、「導出所選並下載」。
  2. 導入 — 點擊或拖入 .dshsession;可先查看歸檔內容,填寫新工作區目錄、衝突策略、是否自動建目錄,再「預覽」或「開始導入」。
  3. 歸檔 — 已導出歸檔的下載、導入、刪除。
  4. 清理 — 三類垃圾各自範圍標籤;先預覽,勾選確認後再刪除。

通過 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
羽毛球分组比赛记分
小程序二维码

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

小夜