dsh-auto-archive:閒置會話自動歸檔與投影緩存清理

前言

DeepSeek Harness(DSH)用久了,會話列表會堆滿長期不再打開的線程。手動逐條歸檔費時,而會話相關的派生數據(例如投影緩存)也會佔磁盤。若只靠刪文件來「減負」,很容易誤傷 transcript 或附件。下面介紹社區插件 dsh-auto-archive:在 DSH 官方歸檔 API 之上做定時巡檢,按可配置天數歸檔閒置會話,並對已歸檔且長期閒置的會話清理可重建的 projection cache,不刪除會話記錄、附件與工作區產出。

這是什麼

dsh-auto-archive 是面向 DSH 桌面版 / Web 的本地插件,維護者爲 StanElka,在 SkillHub 等社區目錄中歸類爲「記憶」。它解決兩類問題:一是把超過閒置閾值的會話移入 DSH 歸檔列表(仍可恢復);二是對已歸檔且超過更長時間未用的會話,刪除 DSH 派生的投影緩存文件,需要時由 DSH 按需重建。歸檔與清緩存均通過 DSH 內核暴露的服務與 registry 完成,邊界在 README 中寫得很明確。

核心功能

下面表格概括默認行爲(均可通過配置與設置面板修改):

能力 默認值 行爲
自動歸檔 閒置 14 天 調用官方 workspaceRegistry.archiveSession();歸檔後會話仍在歸檔列表中可恢復。
緩存清理 已歸檔且閒置 90 天 僅刪除 ~/.dsh/storages/session_projcache/sessions/<id>.json 投影緩存。
定時巡檢 每 30 分鐘 後臺靜默執行;設置面板可預覽或立即運行。
保護 置頂會話等 可選按 session id、workspace id 或 cwd 片段加入白名單,匹配項不歸檔。
審計 最近 30 次 記錄每次歸檔/清理詳情;支持一鍵恢復已歸檔會話。

安全邊界(插件設計上僅兩類寫操作):

  1. 歸檔狀態 — 通過 registry API 增刪 archivedSessionIds,可逆。
  2. 投影緩存 — 刪除上述 session_projcache 下的 json,DSH 可重建。

插件不會刪除:transcript(如 session.v4.jsonl.zstd 及會話目錄)、~/.dsh/attachments、溢出文件、工作區或項目文件,也不會刪除對話產出的實質內容。進行中的會話始終跳過(不傳 stopActivity),不會打斷正在運行的 turn、job 或 subagent。

安裝與啓用

DSH 桌面 profile 由 Electron 應用管理,安裝需使用 CLI。資料中的命令如下(注意倉庫標識與目錄頁展示名可能不同,以 README 爲準):

dsh plugin --profile desktop add github:elk-9527/dsh-auto-archive

本地開發目錄安裝:

dsh plugin --profile desktop add "file:D:/path/to/dsh-auto-archive"

安裝後完全退出並重新打開 DSH(宿主插件在啓動時加載)。在 左下角頭像 → Settings → 自動歸檔 打開面板,位置在 General / Built-in plugins 旁。

卸載:

dsh plugin --profile desktop remove dsh-auto-archive

插件版本 0.1.0,許可證 MIT,宿主側要求 Node ≥ 22,無第三方 npm 依賴。

配置與典型用法

配置保存在 ~/.dsh/auto-archive/config.json(首次運行自動創建,也可在面板編輯)。默認結構示例:

{
  "version": 1,
  "autoArchive": { "enabled": true, "idleDays": 14, "checkIntervalMinutes": 30 },
  "cacheCleanup": { "enabled": true, "unusedDays": 90 },
  "protect": { "pinnedSessions": true, "sessionIds": [], "workspaces": [] },
  "limits": { "maxOperationsPerRun": 50 },
  "dryRun": false
}

要點說明:

  • idleDays:末次活動超過該天數的會話會被歸檔;末次活動取 transcript 修改時間與 createdAt 的較大值。
  • unusedDays:已歸檔且閒置更久的會話,其投影緩存會被清理。
  • protect.workspaces:workspace id 或大小寫不敏感的 cwd 片段;匹配的工作區永不歸檔。
  • dryRun: true:每次自動運行變爲預覽,不寫歸檔狀態、不刪緩存。
  • limits.maxOperationsPerRun:單次運行操作上限,避免首次啓用一次性掃光歷史。

運行狀態在 ~/.dsh/auto-archive/state.json(原子寫入,保留最近 30 次運行)。

設置面板:查看狀態卡片、改配置、瀏覽會話清單與歷史,並觸發預覽或立即執行。

本機 HTTP API(前綴 /dsh-auto-archive,僅 loopback Host,否則 403)可用於腳本或排查:

方法 路徑 用途
GET /dsh-auto-archive/api/state 配置、上次/下次運行、計數
GET /dsh-auto-archive/api/sessions?limit=200 會話清單(含閒置天數與是否 eligible)
GET /dsh-auto-archive/api/history 最近 30 次運行
POST /dsh-auto-archive/api/config 深度合併並保存配置
POST /dsh-auto-archive/api/run {"dryRun":true} 預覽 / {"dryRun":false} 執行
POST /dsh-auto-archive/api/restore {"sessionIds":["..."]} 取消歸檔

典型流程:先設 dryRun: true 或在面板預覽,確認候選會話數量與保護規則無誤後,再關閉 dry-run 或 POST 正式執行;誤歸檔可用 restore API 或面板一鍵恢復。

適用場景與注意

適合:長期本地使用 DSH、會話數量多、希望列表保持可讀、又需要保留完整 transcript 與附件以備查或恢復的用戶。

已知限制(來自 README):

  • 緩存清理僅針對已歸檔會話,活躍列表上的投影緩存不會被本插件清理。
  • 「對話緩存」指 projection cache;transcript 與附件按設計不刪,磁盤佔用仍可能較大,歸檔不會 magically 釋放全部空間。
  • 歸檔遵循 DSH 自身的活動判定;其他插件仍視爲活躍的會話會被跳過。
  • 修改插件代碼後需重啓 DSH,宿主在啓動時加載。

權限與安全:插件以當前 DSH 進程權限讀寫 ~/.dsh 下配置、狀態及上述緩存路徑,並調用 registry 歸檔 API。安裝前建議在 GitHub 閱讀源碼與 MIT 許可證,確認行爲符合預期。DSH 生態強調「一切皆插件」;SkillHub 等目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。

結尾

dsh-auto-archive 把「閒置歸檔」和「已歸檔會話的可重建緩存清理」做成可配置、可審計的後臺任務,並在文檔中劃清不刪 transcript 與附件的邊界。需要試用或查看說明時,可打開社區目錄頁與倉庫:

  • 目錄頁:https://www.skillhub.cn/plugins/StanElka/dsh-auto-archive
  • GitHub:https://github.com/StanElka/dsh-auto-archive

安裝命令以 README 中的 github:elk-9527/dsh-auto-archive 爲準;若倉庫地址與目錄不一致,以你實際 clone / add 的來源爲準。

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

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

小夜