DeepSeek Harness 側欄真刪會話插件

前言

DeepSeek Harness(dsh)自帶的工作區刪除入口藏在工作區分組標題的懸停菜單裏,會話則只有「歸檔」沒有刪除;框架層面也沒有會話刪除的公開 API。這導致側欄上堆積大量已關閉的會話記錄,本地日誌與投影緩存也持續佔用磁盤空間。dsh-sidebar-delete 在側欄補上了「真刪」能力:刪除會話時會連帶清理本地日誌目錄、投影緩存,並從工作區登記中移除引用;子會話會級聯刪除;同時提供常顯的會話與工作區管理面板。

這是什麼

xqh-jason/dsh-sidebar-delete 是一個客戶端插件,爲 DeepSeek Harness Web 側欄增加會話刪除與管理工作區的能力。零運行時依賴,通過 Host 路由與四個槽位註冊擴展框架。當前版本 0.1.7,MIT 許可證。

核心功能

刪除會話

會話行懸停出現垃圾桶圖標;會話行「…」菜單中也有「刪除會話」選項。確認後刪除本地會話日誌目錄(<DSH_HOME>/sessions/<項目目錄>/<sessionId>/)與投影緩存(<DSH_HOME>/storages/session_projcache/sessions/<sessionId>.json),並從側欄即時移除該行(不刷新頁面)。刪除操作不可恢復。

子會話(fork 與 subagent)會級聯刪除。若會話有「開着的回合」(正在運行中的請求),或其子會話有開着的回合,刪除請求會被拒絕,不做任何改動。

工作區與未分組會話管理面板

側欄底部(設置旁)常顯「管理工作區與會話」入口。面板按工作區列出會話,按目錄列出未分組會話,每行右側可單獨刪除;未分組的目錄旁可「註冊爲工作區」。

工作區刪除沿用官方語義:只註銷工作區登記,文件夾與會話全部保留,其會話落到「未分組」。

面板只列出磁盤上仍有日誌的會話:刪除後立即從面板消失;若有宿主內存中殘留的幽靈會話,面板底部會提示「重啓 dsh 後宿主會釋放它們」。

每行可辨識信息

  • 標題取真正持久化的會話標題(無標題顯示「未命名會話」,不再回退成目錄名)。
  • 副行顯示短 id + 本地時間。
  • 徽標區分「當前打開 / 運行中 / 子代理 / 空會話」。
  • 子代理與 fork 子會話嵌在父會話下面,父行標出「含 N 條子會話」。

定時清理未分組會話(默認關閉)

默認關閉,需在插件配置中啓用。每天(默認 12:25)自動刪除不在任何工作區目錄下的會話;有開着的回合的會話會被跳過。

配置示例:

{
  "enabled": true,
  "time": "12:25",
  "workspaceScope": "tree"
}
  • enabled:只有嚴格爲 true 時生效。
  • time:本機時區的 HH:MM,默認 12:25。非法值(如 24:00、12:60)會使整條配置無效,保持關閉。
  • workspaceScope:tree(默認)把 cwd 在工作區路徑之下(含等於)的會話算已分組;exact 只認路徑本身。

安裝與啓用

已發佈在 npm,包名爲 dsh-sidebar-delete。在 Harness Desktop / Web 中:設置 → 插件,安裝此包。插件管理器會從 npm 拉取並寫入 profile 的 dsh.profile.bundles。

命令行安裝(CLI 管理的 profile):

dsh plugin --profile <profile> add dsh-sidebar-delete

安裝後需重啓 dsh:Host 半隻在啓動時加載,改它必須重啓;只改瀏覽器半刷新頁面即可。

從本地目錄安裝(開發用):

dsh plugin --profile <profile> add /絕對路徑

兼容性

在 dsh 0.2.1-rc.2(@deepseek-ai/dsh-client-ui-workspace@0.2.1-rc.2)上開發與實測,需要 Node ≥ 22.19。

插件依賴兩件框架沒有公開承諾的東西:會話日誌的磁盤佈局、以及 api-session/removed 事件。dsh 升級後可能失效;失效時隻影響刪除本身,不影響側欄其它功能。

安全邊界

Host 半發佈兩條路由:

  • POST /dsh-sidebar-delete/session:刪除會話
  • POST /dsh-sidebar-delete/sessions:只讀探測哪些會話仍有日誌(最多 512 個 id,不刪文件、不廣播)

兩條路由共用准入順序:

  1. 僅 POST + application/json,body 上限 64 KiB。
  2. 若宿主提供 connection.requestRejection 且部署接受非 loopback authority,由宿主門禁裁決。
  3. 否則退回插件自己的圍欄:Host 必須是 loopback,Origin 存在時須與 Host 同源。

已知弱點:在 loopback-only 的 Desktop 部署上,這條路由不校驗宿主登錄。因此在該部署上任何本機進程都能調用它——對單用戶機器不構成提權,但多用戶機器上是真實弱點。

插件不往 document.body 寫 DOM、不讀別的插件的 DOM、不 require 任何 Harness Client 包。

已知限制

  • 歸檔集合在啓動時不會自動剪掉已不存在的 id(工作區成員會)。插件在刪除時會清掉兩者;若會話是在別的進程或外部被刪的,登記仍在——對那個 id 再發一次刪除請求即可(冪等)。
  • 側欄裏有標題的幽靈會話在頁面重載後仍可能回到側欄:宿主的 session/list 會併入內存中尚未釋放的 live 會話,而框架沒有公開的釋放 API。重啓 dsh 後宿主釋放會話,側欄纔會乾淨。
  • 會話目錄刪除後,它所在的項目目錄(--<cwd>--)會留下空殼,與框架自身行爲一致。
  • 沒有批量刪除,一次一條;也沒有給模型提供 tool。

卸載

在插件管理器中移除 dsh-sidebar-delete(或從 profile 的 dsh.profile.bundles 移除)後重啓。包目錄可以留着。

開發與發佈

Node 版本要求 >=22.19.0。驗證腳本:

npm run verify

目錄結構:

  • index.js:Host 半
  • client.js:瀏覽器半(Module Loader 包,無構建)
  • src/:純邏輯,可單測
  • test/:測試文件
  • locale/:國際化文件
  • icon.svg:圖標

適用場景與注意

適合需要清理已關閉會話、管理大量工作區與未分組會話的 dsh 用戶。插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。已刪除的會話日誌不會回來,這是本功能的語義。

總結

dsh-sidebar-delete 在側欄補上了「真刪」能力,讓清理會話日誌、管理工作區變得可見且可控。零運行時依賴,安裝簡單,配置靈活。

  • 目錄頁:https://www.skillhub.cn/plugins/xqh-jason/dsh-sidebar-delete
  • GitHub:https://github.com/xqh-jason/dsh-sidebar-delete
  • npm:https://www.npmjs.com/package/dsh-sidebar-delete
羽毛球分组比赛记分
小程序二维码

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

小夜