dsh-session-cleaner:歸檔會話永久刪除與無效會話清理

前言

DeepSeek Harness(DSH)側欄裏可以歸檔會話,但平臺本身沒有「刪除會話」這一動作。歸檔後的日誌、投影緩存和標記仍會留在 ~/.dsh,磁盤佔用會持續增長。有時還會出現側欄裏點不動、打不開的「幽靈行」,或父會話已刪、子智能體(subagent)會話變成無法單獨管理的孤兒記錄。

dsh-session-cleaner(npm 包名 dsh-session-maintenance)是社區維護者 C-S-N-Y 發佈的 DSH 插件,歸類爲「記憶」相關能力。它在側欄增加「永久刪除會話」與「清理無效會話」入口,在宿主端做校驗後真正刪掉已歸檔會話的痕跡,並掃描清理幽靈標記與孤兒會話。插件爲零依賴、零構建,含宿主 Remote 端點與中英客戶端 UI。

下面按定位、功能、安裝、用法與安全約束說明,事實均來自 GitHub README。

這是什麼

一句話:只刪已歸檔會話的破壞性清理工具,並附帶只讀掃描與可選批量清理。

項 說明
倉庫 C-S-N-Y/dsh-session-cleaner
目錄頁 skillhub.cn 插件頁
版本(package.json) 0.2.0
許可證 MIT
運行要求 Node ≥ 20;需已安裝 DSH 桌面版且 dsh CLI 可用

刪除使用 rmSync,不進回收站、不可恢復。README 明確建議先用 npm run make-fixture 生成的假會話試手,不要用真實對話練刪。

核心功能

永久刪除已歸檔會話

對一條已歸檔會話,一次清理:日誌目錄、投影緩存、歸檔標記、工作區成員槽。側欄「…」菜單會多 永久刪除會話…;確認彈窗會展示完整 session id、工作目錄、創建時間、佔用體積、是否屬於工作區等,便於覈對後再刪。刪除成功後側欄行會當場消失;若 UI 通知失敗,按 F5 刷新即可(不需要重啓 DSH)。

清理無效會話

側欄底部 清理無效會話 打開面板。掃描本身是隻讀的,列出三類問題後再執行對應動作:

類別 含義 清理方式
幽靈會話 歸檔集合仍掛着 id,但已無法正常刪除 摘標記、刪殘留文件、通知頁面摘行
側欄幽靈行 磁盤痕跡已無,宿主內存裏仍有一行 停活並摘行
孤兒會話 父會話已刪的 subagent 會話 需顯式勾選纔會刪文件(不可逆)

面板提供 診斷,可查看宿主側的內存會話數、歸檔集合、以及「內存有、磁盤無」等情況。

「停止並刪除」

DSH 中開過的會話,其 Agent 常會一直掛在宿主內存裏,這不代表仍在幹活;平臺未提供 remove/detach 類 API。若會話仍被活着的 Agent 持有,普通刪除會被拒絕(拒絕碼 session/attached)。插件在「停止並刪除」路徑下會:用 workspaceRegistry.archiveSession(id, { stopActivity: true }) 停活,輪詢直到運行工作與活躍後代清空(默認上限 4 秒,可用環境變量 DSH_SM_RELEASE_TIMEOUT_MS 調整),再 ctx.sessions.flush(session) 落盤,然後才刪文件。停不下來則返回 session/stop-timeout,不會硬刪。

安裝與啓用

前提:DSH 桌面版、dsh CLI、本機有 git 與 Node ≥ 20。

README 給出兩種裝法。作者機器上實測過的是「克隆 + 本地 link」;GitHub 規格安裝若報錯可退回前者。

方式 A:克隆後以 link 安裝(README 示例爲 PowerShell)

git clone https://github.com/C-S-N-Y/dsh-session-cleaner.git "$env:USERPROFILE\.dsh\plugins\dsh-session-cleaner"
dsh plugin --profile desktop add link:"$env:USERPROFILE\.dsh\plugins\dsh-session-cleaner"

安裝後建議確認 profile 的 package.json 依賴、node_modules 鏈接,以及 cordis.patch.yml 裏 session-maintenance 條目且 disabled: false(不要在 patch 裏重複 insert)。最後重啓一次 DSH——宿主插件僅在進程啓動時加載。

方式 B:GitHub 規格(pnpm git 路徑)

dsh plugin --profile desktop add github:C-S-N-Y/dsh-session-cleaner

README 註明此路徑未在作者環境實測。

卸載

dsh plugin --profile desktop remove dsh-session-maintenance

然後重啓 DSH。

典型用法

刪除一條會話

  1. 側欄「…」→ 歸檔該會話;
  2. 側欄「…」→ 永久刪除會話…;
  3. 在彈窗中核對 id、路徑、體積等信息後確認;
  4. 若提示仍被 Agent 持有,使用 停止並刪除。

清理無效會話

  1. 側欄底部打開 清理無效會話;
  2. 可先點 診斷 看宿主快照;
  3. 按列表處理幽靈、側欄幽靈行;孤兒會話需勾選後再刪;
  4. 執行清理。

開發/排錯時可克隆倉庫後在插件目錄運行(不依賴 DSH 進程):

npm test
npm run make-fixture -- --cwd <臨時目錄>
node test/session-trace.mjs <sessionId>

安全設計與拒絕規則

刪除前逐條校驗,不滿足則結構化拒絕(非靜默失敗):

規則 說明 拒絕碼
I1 仍被活着的 Agent 持有 session/attached
I2 仍有正在運行的工作 session/running-work
I3 有活着的子智能體後代 session/descendants-active
I5 未歸檔 session/not-archived

磁盤內核(lib/core.js)另有 S1–S4:sessionId 格式校驗、路徑必須在 <DSH_HOME>/sessions 下且 realpath 防逃逸、目錄名與 sessionId 一致且存在日誌文件、不確定則不刪並寫入 warnings。刪除順序爲先摘歸檔標記與工作區槽,再刪文件;刪文件失敗則回滾標記。

宿主 Remote 命名空間 sessionMaintenance 主要端點:probe(只讀預檢)、delete(破壞性,可選 force:true)、scanJunk(只讀)、cleanupJunk(孤兒需顯式傳入)、diagnose(只讀)。

適用場景與注意

適合誰:長期用 DSH、歸檔很多會話希望釋放磁盤;遇到側欄幽靈行或 subagent 孤兒佔空間;需要在「歸檔」之外多一層確認後再永久刪除。

務必知曉:

  • 插件以當前 dsh 進程權限 讀寫 DSH_HOME(默認 ~/.dsh),不碰其外路徑;安裝前應自行查看源碼與 MIT 許可證。
  • 不做附件清理、定時提醒、跨 profile 的 GC;subagent 會話在側欄不單獨成行,只能通過「清理無效會話」管理。
  • DSH 生態理念是「一切皆插件」;skillhub.cn 等爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。

菜單項不出現時可查:profile node_modules 是否鏈接正確、cordis.patch.yml 是否啓用、是否重啓過 DSH;客戶端半崩潰時菜單會靜默消失,需看 DSH 日誌是否有 slot entry crashed。

結尾

dsh-session-cleaner 補上了 DSH 缺失的「永久刪除已歸檔會話」能力,並把幽靈標記、側欄殘留行和孤兒 subagent 會話的掃描與清理做成可診斷、可勾選、帶拒絕碼的安全流程。若你已在用 DSH 桌面版,可從目錄頁或 GitHub 獲取插件,按 README 安裝並重啓後再對假會話試刪。

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

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

小夜