前言¶
DSH 官方提供了「歸檔會話」功能,但歸檔後的會話會從工作區列表隱藏,且既沒有恢復入口,也沒有物理刪除入口。這會導致已歸檔的會話堆積在磁盤上,佔用空間且無法清理。本插件通過在側邊欄新增入口,補全了恢復和徹底刪除這兩個功能缺口。
核心功能¶
- 側邊欄入口:在側邊欄新增「歷史歸檔」入口,跟隨 DSH 側邊欄樣式。
- 會話列表:列出所有歸檔會話,顯示真實會話標題和歸檔時間。
- 一鍵恢復:點擊面板中「恢復」按鈕,即可取消歸檔,回到工作區列表。
- 物理刪除:點擊面板中「刪除」按鈕,二次確認後徹底刪除會話(不可恢復)。
- 實時更新:歸檔、恢復、刪除操作無需刷新頁面。面板打開時自動刷新,打開狀態下每 3 秒輪詢更新歸檔狀態。
安全與刪除語義¶
物理刪除不可恢復。插件按順序執行以下步驟,任一步失敗都不會留下“半刪除”的會話:
- 歸檔標記:從 workspace 存儲域的
archivedSessionIds中移除。 - 工作區記錄:從每個工作區實體的
sessionIds名冊中移除。 - 存儲目錄:刪除
$DSH_HOME/sessions/<project>/<session-id>/(含session.v3.jsonl.zstd)。 - 投影緩存:清理
storages/session_projcache.json的索引行以及該會話的逐會話緩存文件。
安全約束:
* 僅限已歸檔會話:只有已歸檔的會話能被刪除,正在使用的會話在歸檔之前不可達。
* 路徑校驗:刪除前對路徑做 realpath 二次校驗,拒絕任何位於 $DSH_HOME/sessions 之外的路徑。不跟隨逃逸符號鏈接。
* ID 校驗:會話 id 先做格式校驗(拒絕 ..、路徑分隔符、超長輸入)。
* 附件保留:共享的內容尋址附件($DSH_HOME/attachments)不會被回收,它們可能被其他會話引用。
安裝與使用¶
使用 pnpm 安裝:
pnpm add dsh-archive-manager
安裝後,在 DSH Web GUI 的側邊欄即可看到「歷史歸檔」入口。
重建客戶端產物¶
如需重新生成客戶端代碼:
node build-client.mjs
注意事項¶
- 不可逆操作:物理刪除會話後數據無法恢復。
- 權限要求:插件以當前 DSH 進程的權限運行,安裝前應檢查源碼與許可證。
- 僅限已歸檔:只有已歸檔的會話能被刪除,普通工作區會話無法直接刪除。
總結¶
該插件解決了 DSH 歸檔會話無法恢復和清理的問題,通過側邊欄管理界面提供了安全的物理刪除能力。