前言¶
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,不刪文件、不廣播)
兩條路由共用准入順序:
- 僅
POST+application/json,body 上限 64 KiB。 - 若宿主提供
connection.requestRejection且部署接受非 loopback authority,由宿主門禁裁決。 - 否則退回插件自己的圍欄: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