前言¶
在 DeepSeek Harness(DSH)裏管理多個工作區會話時,側欄自帶的能力主要是「歸檔」——把會話從列表裏藏起來,磁盤上的日誌目錄仍在。若你希望像常見桌面軟件一樣,先「刪除」到一處可複查的垃圾箱,再決定恢復或永久清掉,DSH 核心並沒有這條路徑。社區插件 dsh-session-delete(倉庫 ColdRainLab/dsh-session-delete)在客戶端側欄接入「移入垃圾箱」和「垃圾箱」面板,由宿主把會話目錄整體挪到獨立 trash 樹,並在賬目上 detach,從而補齊「外部移除 + 垃圾箱」流程;只有用戶在垃圾箱裏執行「徹底刪除」或「清空垃圾箱」,纔會真正刪除磁盤數據。
這是什麼¶
dsh-session-delete 是 ColdRainLab 維護的 客戶端 類 DSH 插件(當前包版本 0.2.4,許可證 MIT)。它在會話行菜單增加「移入垃圾箱」,在工作區側欄底部(設置旁)增加「垃圾箱」入口,通過宿主 API 移動本地會話目錄並維護垃圾箱元數據,支持恢復與徹底刪除。插件不聯網,無第三方依賴,路由與宿主其它插件一樣僅面向本機迴環,請以當前 DSH 進程權限對待其文件操作;安裝前建議自行查看倉庫源碼與許可證。
DSH 採用「一切皆插件」的擴展方式;插件目錄站點 skillhub.cn 爲社區收錄,與 DeepSeek / 幻方無官方從屬關係。
核心功能¶
移入垃圾箱¶
在側欄會話行打開「…」菜單,可見危險色樣式的 移入垃圾箱(位於歸檔、會話 ID 等項之後;自 0.2.4 起菜單項 order 固定爲 10000,其它插件新增的會話菜單項會排在它前面)。確認框會顯示會話標題,並說明可隨時恢復、徹底刪除才永久移除;可取消。
確認後宿主會:
- 將會話日誌目錄從
<DSH_HOME>/sessions/<項目鍵>/<會話 id>/移動到<DSH_HOME>/trash/dsh-session-delete/<trashId>/session/(同卷 rename,跨卷則複製後刪除源目錄); - 寫入垃圾箱條目
entry.json(含sessionId、title、cwd、workspacePath、deletedAt、sizeBytes、archived、pinned等); - 從工作區賬目 detach,並清理
archivedSessionIds、pinnedSessionIds中的殘留。
刪除成功後刷新會話列表;若刪的是當前展示的會話,會清空主面板(失敗時退回頁面刷新)。正在運行的會話(回合、任務、子代理、提醒等)會被 409 session-active 拒絕;自 0.2.2 起,本次啓動後打開過但當前空閒的會話會先 sessions.flush() 再 detach 後移動,真正在跑的仍不能移入垃圾箱。
垃圾箱面板¶
側欄底部 sidebar.footer.action 提供 垃圾箱 入口;有待恢復項時顯示紅色數量徽標,側欄摺疊爲 56px 軌道時僅顯示圖標。點擊後在 shell.overlay 浮層中打開面板(不擠壓會話列表),列出標題(無標題時回退會話 id)、刪除時間、佔用大小;每條可 恢復 或 徹底刪除(行內二次確認);左下可 清空垃圾箱。恢復時會話目錄移回 <sessions root>/<項目鍵>/<會話 id>/ 並重新掛回工作區(保留原歸檔、置頂標記);若目標路徑已存在同名目錄則拒絕(409),垃圾箱條目保留。垃圾箱 沒有自動過期,條目一直保留直到手動徹底刪除、清空,或直接刪除 <DSH_HOME>/trash/dsh-session-delete/ 目錄。
兼容性與版本准入¶
| 項 | 值 |
|---|---|
| DSH 版本 | >=0.2.1-rc.2 <0.3.0(package.json → engines.dsh;README 記載已在 0.2.1-rc.2、0.2.1-rc.3 驗證) |
| profile | 桌面端(--profile desktop)與網頁端(--profile web) |
| 客戶端 slot | sidebar.workspaces.session.menu.item、sidebar.footer.action、shell.overlay |
| 平臺 | README 記載 Windows 已驗證構建/加載;路徑邏輯爲 Node path 通用實現 |
若 DSH 自動升級後菜單與垃圾箱入口一起消失,常見原因是宿主兼容性准入跳過整個插件(日誌形如 skipping profile bundle "dsh-session-delete": Plugin dsh-session-delete@x is incompatible with dsh y)。插件與垃圾箱數據仍在磁盤。處理方式是安裝聲明瞭新 engines.dsh 範圍的插件版本,或臨時執行:
dsh plugin --profile desktop allow-version dsh-session-delete@<版本> --dsh-version <DSH版本> --accept-risk
然後重啓 DSH。大版本升到 engines.dsh 範圍外(例如 0.3+)時同樣需要更新插件或臨時授權。
安裝與啓用¶
桌面端(README 示例路徑請按本機 DSH 安裝位置與插件包路徑替換):
& "D:\Program Files\Deepseek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add "C:/Users/ROG-STRIX/.dsh/plugin-archives/dsh-session-delete/v0.2.3/dsh-session-delete-0.2.3.tgz"
宿主半邊可由 HMR 熱加載;客戶端 bundle 經宿主 /plugins 圖熱更新,刷新頁面(Ctrl+R)後應能看到垃圾箱入口。若菜單仍無該項,完整退出 DeepSeek Harness 再打開。
網頁端:
dsh plugin --profile web add "link:<倉庫或本目錄絕對路徑>/plugins/dsh-session-delete"
# 然後重啓 dsh web,刷新瀏覽器頁面
安裝會把包註冊進 profile 的 dependencies,並由包內 dsh.bundle.patch 自動加入 dsh.profile.bundles,不改動其它插件。
典型用法¶
- 側欄會話列表 → 懸停會話行 →「…」→ 移入垃圾箱 → 確認。
- 側欄底部 垃圾箱(N) → 在面板中 恢復 或 徹底刪除。
- 需要一次性清空時,使用面板左下 清空垃圾箱(確認後刪除全部條目)。
健康檢查可調用宿主接口 GET /api/session-delete/health,成功時返回 { ok, version }。
數據位置與卸載¶
默認 DSH_HOME 爲 ~/.dsh。垃圾箱根目錄爲 <DSH_HOME>/trash/dsh-session-delete/,與 ~/.dsh/sessions 爲兄弟目錄,會話後端不會把垃圾箱內的目錄當作活躍會話列出。體積約等於被刪會話日誌目錄大小,可在面板中查看每條大小。
卸載(桌面端示例):
& "D:\Program Files\Deepseek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop remove dsh-session-delete
重啓 DSH 後插件不再加載;卸載不會刪除垃圾箱裏的會話數據。若要徹底清掉,請先「清空垃圾箱」,或手動刪除 <DSH_HOME>/trash/dsh-session-delete/。
適用場景與注意¶
適合在本地 DSH 桌面端或網頁端長期使用、會話目錄堆積、又希望刪除前有緩衝區的開發者。插件僅處理 本地 數據,不做雲端操作;storages/session_projcache/ 中可能殘留很小的孤兒投影文件,README 記載不影響使用。恢復要求原路徑可寫且目標不存在;多進程同時操作同一 DSH_HOME 未做跨進程鎖。加載失敗不會阻止 DSH 啓動,僅表現爲側欄沒有相應菜單,可查看 DSH 日誌中與 dsh-session-delete 相關的行。
結尾¶
dsh-session-delete 在 DSH 歸檔能力之外補上「移入垃圾箱 → 恢復或徹底刪除」的閉環,數據落在 ~/.dsh/trash/dsh-session-delete/,與活躍 sessions 樹隔離。進一步瞭解可在社區目錄頁 ColdRainLab/dsh-session-delete 查看收錄信息,在 GitHub 倉庫 閱讀完整 README、宿主 API 表與測試說明。