dsh-session-cleaner:在側欄真正刪除 DSH 會話

前言

在 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 倉庫。

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

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

小夜