前言¶
DeepSeek Harness(DSH)桌面/Web 形態裏,側邊欄會話行的三點菜單自帶「歸檔會話」等操作。歸檔只是把會話從列表裏收起來,日誌仍寫在磁盤上並持續累積,官方沒有提供從界面刪除會話、清掉磁盤記錄的入口。若你本地試過很多會話、或需要按合規清理歷史,只能手動找 DSH_HOME 下的目錄,既容易漏投影緩存,也容易和正在運行的會話衝突。
dsh-session-menu-delete 是社區維護者 Dcmwfg 發佈的客戶端類 DSH 插件:在會話三點菜單裏增加「刪除會話」,確認後永久刪除該會話的磁盤記錄與投影緩存,並立刻從左側列表移除。下面介紹它的能力邊界、安裝方式與實現要點;安裝前請自行查看 GitHub 倉庫 源碼與 MIT 許可證。插件以當前 DSH 進程權限讀寫本機文件,刪除不可恢復。
這是什麼¶
一句話:在 DSH Web GUI 側邊欄會話行三點菜單中,於「歸檔會話」下方增加「刪除會話」;確認後走本地迴環 API,按固定順序摘內存、刪目錄與投影緩存,並通知客戶端更新列表。
維護者:Dcmwfg。分類:客戶端。當前倉庫版本(package.json):0.1.1。社區目錄頁:skillhub.cn/plugins/Dcmwfg/dsh-session-menu-delete。DSH 生態強調「一切皆插件」;SkillHub 等目錄爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係。
核心功能¶
- 菜單入口:插槽
sidebar.workspaces.session.menu.item,order440,排在 archive(400) 之後;shell.overlay彈出確認框。 - 刪除範圍:
<DSH_HOME>/sessions/<workspaceKey>/<id>/與會話投影緩存storages/session_projcache/sessions/<id>.json;目錄名支持裸 UUID 與session-<uuid>兩種形態。 - 列表即時更新:刪除流程末尾
ctx.emit('api-session/removed', id);不修改workspace.json,由客戶端推導列表。 - 純本地:宿主半隻監聽迴環地址,不聯網、不調外部接口;同源與 trustedHosts 校驗,外部 Origin 返回 403。
- 配置方式:通過插件自帶
cordis.patch.yml的 bundle patch 加載,不需要改 profile 的cordis.patch.yml。
官方自帶能力只有歸檔;本插件補的是「可確認的永久刪除」。README 明確:刪了就沒了,無回收站、無恢復入口。
安裝與啓用¶
路徑不要含空格(Windows 上 link: + pnpm install 會做 junction,空格或特殊字符易失敗)。
- 克隆倉庫到本地:
git clone https://github.com/Dcmwfg/dsh-session-menu-delete.git
- 編輯所用 profile 的
package.json(desktop 示例路徑:Windows%USERPROFILE%\.dsh\profiles\desktop,macOS / Linux~/.dsh/profiles/desktop):
// ~/.dsh/profiles/desktop/package.json
"dependencies": {
// 指向上一步克隆目錄(Windows 用正斜槓)
"dsh-session-menu-delete": "link:/path/to/dsh-session-menu-delete"
},
"dsh": {
"profile": {
"bundles": [
// …原有的…
"dsh-session-menu-delete"
]
}
}
- 在 profile 目錄執行
pnpm install,重啓 DSH。重啓後側邊欄會話行三點菜單應出現「刪除會話」。
若已安裝 dsh-plugin-guard,重啓前可檢查:
node <path-to>/dsh-plugin-guard/guard.mjs check --profile desktop
只想試邏輯、不寫入 profile:在克隆目錄運行 node scripts/selftest.mjs(使用臨時目錄與真實 .dsh 下的啞會話,README 說明 real-home-test 會自造自刪)。
環境要求(package.json):Node >=22;平臺 Windows / macOS / Linux。宿主需帶 Web 服務端(desktop / dsh web);純 CLI 形態下 inject = ['webServer'] 不滿足,插件不啓動、不會刪任何數據。
典型用法¶
側邊欄 → 會話行右側「…」→ 刪除會話 → 在確認對話框中確認 → 永久刪除。
宿主 API(僅本機迴環):
GET /api/dsh-session-menu-delete/healthPOST /api/dsh-session-menu-delete/delete,body:{ "sessionId": "<uuid>" }
刪除流程與邊界(適用場景)¶
適合:需要清理磁盤上的冷會話或能安全從內存摘除的 live 會話;希望菜單裏一次操作完成目錄 + 投影緩存 + 列表移除。
不適合:需要可恢復刪除或回收站場景——請勿使用本插件。
行爲邊界(來自 README):
| 情況 | 結果 |
|---|---|
| live 會話無法安全摘除 | HTTP 409,說明原因,不動磁盤 |
| 目錄與緩存都未找到 | 不僞裝成功 |
| 只找到投影緩存、未找到會話目錄 | HTTP 500 partial,避免刷新後列表行復現 |
| 卸載插件 | 菜單項消失;已刪會話不會回來 |
刪除順序在實現中固定:先 sessions.liveEntryFor() + detachEntered() 與 agent 摘除 → 等待 800ms → 刪目錄與緩存文件 → 再等待 400ms 補刪投影並 table.delete(id) → 發出 removed 事件。會話日誌文件名不寫死,按目錄內版本號最大的 session*.jsonl(含 .zstd)規則與宿主一致。
兼容性說明:依賴側邊欄插槽與會話目錄佈局等相對穩定契約,以及 sessions.liveEntryFor() 等內部 API。宿主若改內部方法名,最壞情況是「磁盤已刪、左側列表仍在」,刷新頁面後正常;不會波及其他會話數據。插件 deliberately 不 import 宿主 asar 內包,路徑規則爲自帶實現。
卸載¶
- 從 profile 的
dsh.profile.bundles刪除"dsh-session-menu-delete"; - 從
dependencies刪除同名條目; - profile 目錄
pnpm install,重啓 DSH。
結尾¶
DSH 默認只歸檔、不刪盤;dsh-session-menu-delete 在三點菜單裏補上「刪除會話」,本地迴環完成摘會話、刪目錄與投影緩存並更新側邊欄。使用前請理解不可恢復性與 409 / partial 等護欄含義,並覈對源碼與許可證。
- 目錄頁:https://www.skillhub.cn/plugins/Dcmwfg/dsh-session-menu-delete
- GitHub:https://github.com/Dcmwfg/dsh-session-menu-delete