前言¶
DeepSeek Harness(DSH)可以把對話歸檔,從側邊欄列表裏挪走,但 Host 側並沒有「刪除會話」的入口:workspaceRegistry 能歸檔、置頂、改名、把工作區裏的會話摘出來;sessionPersistence 只有 create / open / flush / stat / list;磁盤上的會話日誌、投影緩存和工作區記賬文件仍會留在 ~/.dsh 下。若你本地試過很多歸檔對話、想真正騰出空間或清理索引,只能手動刪目錄,還容易漏掉 workspace.json 裏的 archivedSessionIds / sessionIds,下次快照又可能把會話推導回列表。
DSH-Quickly-clear 是維護者 zsenpro 發佈的客戶端插件(GitHub:zsenpro/DSH-Quickly-clear),在已歸檔對話的 ⋯ 菜單裏增加「刪除對話」,通過 Host API 按固定順序清記賬、刪日誌目錄和投影緩存,並在成功後刷新頁面。未歸檔的對話不會出現該菜單項。
這是什麼¶
一句話:DSH 側邊欄插件,給已歸檔 Session 的 ⋯ 菜單加「刪除對話」,連同會話日誌、投影緩存和工作區記賬一起清掉。
- 名稱:
DSH-Quickly-clear(目錄頁:zsenpro/dsh-quickly-clear) - 分類:客戶端
- 許可證:MIT(
package.json中版本爲 1.0.1) - 生態說明:DSH 奉行「一切皆插件」;SkillHub 等社區目錄與 DeepSeek / 幻方無官方從屬關係,本文僅介紹該開源插件本身。
核心功能¶
側邊欄與確認流程¶
- 菜單項註冊在
sidebar.workspaces.session.menu.item,cell idquickly-clear,order: 500(出廠菜單中 pin 100、rename 200、fork 300、archive 400、session-id 450 之後)。 - 可見性依賴
useWorkspaces(...).archivedSessionIds:未歸檔會話不渲染該行。 - 確認框註冊在
shell.overlay,cell idquickly-clear-dialog;卡片會展示會話標題與刪除後果,確認「永久刪除」後執行清掃;刪除成功後頁面會自動刷新(側邊欄會話目錄是客戶端快照,Host 刪文件後不重掛會殘留一行)。
Host 端清掃(POST /DSH-Quickly-clear/api/delete)¶
按 README 描述,順序大致爲:
- 所有 workspace 記錄的
sessionIds去掉該sessionId(workspace.mutate寫盤)。 unarchiveSession+unpinSession。- 清空 registry 的
headers/sessionPaths/missingSessionPaths/invalidSessionPaths四個緩存,避免下次從 cwd 索引把會話推回工作區。 - 刪除
sessions/<project>/<encodeSegment(sessionId)>/整目錄,project 目錄空則一併刪除。 - 刪除
storages/session_projcache/sessions/<sessionId>.json。 - 再次清空 registry 緩存。
正在運行的會話會被拒絕(session-live);歸檔通常會停掉會話,正常路徑不會撞上。
涉及的主要路徑¶
歸檔後磁盤上仍可能存在的文件包括:
~/.dsh/sessions/<project>/<sessionId>/session.v4.jsonl.zstd
~/.dsh/storages/session_projcache/sessions/<sessionId>.json
~/.dsh/storages/workspace.json # archivedSessionIds / sessionIds
(實際目錄名經 encodeSegment 編碼,與 JSONL store 一致。)
它不刪什麼¶
attachments/v1/objects/:內容尋址,多會話共享,無法按會話歸屬刪除。storages/cost-meter/ledger.json:按會話記賬的共享賬本,刪會話後歷史花費仍保留。sessionQuery的 SQLite 全文索引:服務無刪除 API,搜索裏可能仍有陳舊命中。
二次開發端點¶
均需通過 ctx.connection.requestRejection(同源 / 可信連接校驗)。調用記錄寫入 ~/.dsh/DSH-Quickly-clear.log。
| 方法 | 路徑 | body | 作用 |
|---|---|---|---|
| POST | /DSH-Quickly-clear/api/delete |
{"sessionId":"..."} |
執行清掃,返回刪掉的路徑與記賬 |
| POST | /DSH-Quickly-clear/api/inspect |
{"sessionId":"..."} |
只讀:列出命中的日誌目錄、緩存文件、是否在運行 |
安裝與啓用¶
環境要求:DSH 桌面版或 dsh web(走 profile 機制),Node >= 20。
將倉庫放到任意本地目錄後,二選一(資料原文未提供 dsh plugin add github:... 一類命令,請勿憑名稱拼接)。
首選:插件管理器¶
plugin_manager install_bundle target=<克隆目錄>
install_bundle 會給 profile 加依賴並掛上 bundle。若 profile 裏已有需本地編譯的依賴(例如帶 cpu-features 的包),pnpm 可能在 install script 批准處卡住,可改用手工登記。
手工登記(本地 link)¶
與 @yg/dsh-session-mover 等本地插件形態相同。示例爲 Windows PowerShell:
$src = '<克隆目錄>'
$profile = Join-Path $env:USERPROFILE '.dsh\profiles\desktop'
New-Item -ItemType Junction -Path (Join-Path $profile 'node_modules\DSH-Quickly-clear') -Target $src
編輯 $profile\package.json 兩處(路徑用正斜槓):
{
"dependencies": {
"DSH-Quickly-clear": "link:<克隆目錄>"
},
"dsh": {
"profile": {
"bundles": [
// ... 其它 bundle
"DSH-Quickly-clear"
]
}
}
}
改動 index.js 需重啓 DSH Host;只改 client.js 可走 HMR。
卸載¶
從 bundles 刪除對應行、刪除依賴項、刪除 Junction,並刪除 ~/.dsh/DSH-Quickly-clear.log。
典型用法¶
- 對目標對話執行歸檔(
⋯→ 歸檔對話)。 - 再次打開該對話的
⋯菜單,末尾會出現「刪除對話」。 - 點擊後在確認卡片中核對標題與後果,選擇「永久刪除」。
- 成功後頁面刷新,側邊欄與磁盤數據與插件清掃邏輯一致。
倉庫內可用自檢腳本(臨時目錄、不連 Host、不碰真實數據):
node verify.js
README 說明爲 19 項自檢,覆蓋 encodeSegment、findSessionFolders、清掃流程樁服務等。
適用場景與注意¶
適合誰
- 長期在 DSH 裏積累大量已歸檔對話,希望從磁盤和工作區記賬中徹底移除,而不是隻隱藏列表項。
- 需要在刪除前用
/api/inspect查看將命中的路徑,或基於同插件 API 做工具集成。
使用前請知悉
- 插件以當前 DSH Host 進程權限讀寫
~/.dsh;安裝前應閱讀源碼與 MIT 許可證,確認刪除範圍符合預期。 - 刪除不可恢復(至少插件不會恢復附件對象、cost-meter 賬本與全文索引)。
- 僅已歸檔會話顯示刪除入口;若菜單未出現,先完成歸檔步驟。
結尾¶
DSH 自帶歸檔但沒有一等公民的「刪除會話」;DSH-Quickly-clear 用客戶端菜單 + Host API 補上這條路徑,並刻意先改工作區記賬再刪文件,降低 Windows 句柄未釋放時會話仍掛在側邊欄的風險。若你在本地維護 DSH 會話數據,可在歸檔後用它做一次可確認的永久清理。
- 目錄頁:https://www.skillhub.cn/plugins/zsenpro/DSH-Quickly-clear
- 源碼與 README:https://github.com/zsenpro/DSH-Quickly-clear