前言¶
在 DeepSeek Harness(DSH)裏用久了,側欄會堆很多歷史會話。官方側欄通常只有「歸檔」,Host 的 sessionPersistence 也只提供 create / open / flush / stat / list,沒有 delete。會話本體就是磁盤上的普通文件;若只刪列表項而不刪目錄,或反過來隻手動刪文件,側欄與各窗口裏的行很容易對不上。
下面介紹社區插件 dsh-session-cleaner(維護者 Alumos,npm 包名 @alumos/dsh-session-cleaner)。它在側欄會話菜單裏增加「刪除會話」,一次性清理 session 目錄、投影緩存以及 workspace 記賬,並通過 api-session/removed 讓所有窗口裏的那一行一起消失;會話若仍在 Harness 裏打開,會先提示關閉再刪。
這是什麼¶
dsh-session-cleaner 是 DSH 的客戶端類插件:Client 半負責側欄菜單與確認對話框,Host 半負責路徑解析、刪除邏輯、Agent 工具與 HTTP 路由。許可證爲 MIT,源碼在 GitHub,目錄頁見 SkillHub。package.json 聲明 engines.dsh: ">=0.2.0-rc.1"。
爲什麼需要它¶
DSH 默認沒有「從 UI 刪會話」的入口。會話數據大致落在:
~/.dsh/sessions/<工作區編碼>/session-<uuid>/session.v4.jsonl.zstd
~/.dsh/storages/session_projcache/sessions/session-<uuid>.json
本插件刪掉對應目錄與派生狀態後,由 dsh 自己的 api-session/removed 通道更新側欄,無需手改客戶端列表。
核心功能¶
側欄刪除¶
右鍵側欄中的會話 →「刪除會話」→ 原生樣式確認框。默認把 session 目錄移到回收站;可勾選「永久刪除(不放進回收站)」。
回收站路徑形如:
~/.dsh/session-trash/<ISO 時間戳>-<sessionId>/
誤刪時可手動把目錄搬回。
運行中的會話¶
若會話仍在進程裏打開,第一次刪除會提示;按鈕變爲「關閉並刪除」。再確認後會依次取消進行中的回合 → 關閉會話(session/disposed)→ 再移入回收站或永久刪除。
一併清理的狀態¶
除 session 目錄外,還會清理 projcache 裏該會話的 JSON、pinned/archived 記錄,以及所屬 Workspace 的 sessionIds 記賬。
Agent 與 HTTP¶
Host 側提供兩個 Agent 工具與一組 HTTP 路由,與 UI 共用同一套刪除實現:
| 入口 | 用法 |
|---|---|
| 側欄會話菜單 | 右鍵會話 →「刪除會話」→ 確認 |
| Agent 工具 | session_cleaner_list(列會話拿 id)、session_cleaner_delete(刪) |
| HTTP | GET /dsh-session-cleaner/health、GET /dsh-session-cleaner/sessions、POST /dsh-session-cleaner/delete |
安裝與啓用¶
在 dsh 設置 → 插件 →「添加插件」中,市場接受 npm 包名、Git 倉庫地址、本地目錄、.tgz 直鏈 四種來源。以下命令與地址均來自項目 README,請按網絡環境選一種。
方式 1:npm 包名(國內可走鏡像)¶
在「添加插件」裏填:
@alumos/dsh-session-cleaner
能直連 npm 官方源時,安裝源選默認即可。大陸網絡可選「自定義地址」,例如華爲雲鏡像:
https://mirrors.huaweicloud.com/repository/npm/
裝完後在插件列表裏啓用。注意:npm 上另有他人發佈的無 scope 包 dsh-session-cleaner,與本項目無關;應使用 @alumos/dsh-session-cleaner。
方式 2:Release 的 .tgz 直鏈¶
固定版本示例(發版後需與 Releases 頁版本一致):
https://github.com/Alumos/dsh-session-cleaner/releases/download/v0.2.2/dsh-session-cleaner-0.2.2.tgz
main 分支的 nightly 預發佈地址固定爲:
https://github.com/Alumos/dsh-session-cleaner/releases/download/nightly/dsh-session-cleaner-nightly.tgz
安裝入口只認 .tgz / .tar.gz 或 Git 地址,不接受 Release 裏的源碼 .zip。
方式 3:GitHub 倉庫地址¶
需能訪問 github.com:
https://github.com/Alumos/dsh-session-cleaner
github:Alumos/dsh-session-cleaner
方式 4:本地目錄¶
克隆或解壓源碼後,在「添加插件」裏填該目錄的絕對路徑。裝好後刷新窗口;client.js 可走 bundle 熱更新,Host 半改動需在 Harness 重啓或重載插件後生效。
典型用法¶
側欄¶
右鍵目標會話 →「刪除會話」→ 在對話框中確認是否永久刪除。
HTTP¶
默認 Host 監聽示例端口爲 3080(以你本地 profile 爲準):
curl -s http://127.0.0.1:3080/dsh-session-cleaner/health
curl -s "http://127.0.0.1:3080/dsh-session-cleaner/sessions?limit=50"
curl -s -X POST http://127.0.0.1:3080/dsh-session-cleaner/delete \
-H 'content-type: application/json' \
-d '{"sessionId":"session-...","permanent":false}'
會話仍開着時,需在 JSON 中加 "force": true 先關閉再刪(與 UI 裏第二次點「關閉並刪除」等價)。
成功時返回形如:
{ "ok": true, "sessionId": "session-…", "title": "…", "cwd": "/…", "workspace": "…", "mode": "trash", "trashPath": "…", "closed": false, "removed": ["…", "…"] }
常見錯誤碼包括:SESSION_LIVE(409,需 force)、SESSION_NOT_FOUND(404)等,詳見 README 錯誤表。
配置¶
在 profile 的 cordis.patch.yml(或重裝時的 config)裏可覆蓋:
- insert:
- id: dsh-session-cleaner
name: 'dsh-session-cleaner'
config:
basePath: /dsh-session-cleaner # HTTP 前綴,以 / 開頭、不以 / 結尾
permanent: false # true = 所有刪除都不進回收站
適用場景與注意¶
適合需要從 DSH 內部徹底移除會話記錄、而不只是歸檔的開發者。默認進回收站,降低誤刪成本;需要批量或自動化時可走 Agent 工具或 HTTP。
插件以當前 dsh 進程權限讀寫 ~/.dsh(或 $DSH_HOME)下的 session 與回收站目錄。安裝前建議瀏覽 源碼 與 MIT 許可證。維護者在 README 中說明:macOS 上已在 dsh 0.2.1-rc.4 端到端實測;Linux 與 macOS 同屬 POSIX 路徑且 CI 跑離線測試;Windows 做了路徑與重試加固,但 README 寫明尚未在真 Windows + dsh 上完整端到端驗證。
SkillHub 等社區目錄與 DeepSeek / 幻方無官方從屬關係;DSH 生態本身是「一切皆插件」,本插件是其中一條可選能力。
結尾¶
dsh-session-cleaner 補上了 DSH 側欄「刪除會話」這一環:磁盤目錄、projcache、workspace 記賬與多窗口 UI 一次對齊。需要安裝或 issue 時,可參考 SkillHub 目錄頁 與 GitHub 倉庫。