前言¶
在 DeepSeek Harness(DSH)里長期跑智能體會話,左側欄會堆滿根會話、子 agent 和團隊成員;磁盤上還可能留下「列表裏已經看不見、但文件還在」的殘留目錄。另一方面,一個會話裏圖片攢多了,可能觸達路由對單條請求的圖片字節或張數預算,新消息直接被拒絕——這和「單條消息最多添加幾張圖」是兩套限額,單靠調 dsh-attachment-local 的 maxImagesPerMessage 解決不了歷史撐爆的問題。
dsh-delete(維護者 ycm50,倉庫 ycm50/dsh-delete)把兩類能力裝在同一插件包裏:側邊欄多選刪除會話(含磁盤文件與 DSH 歸檔),以及右側欄頁籤裏的圖片統計、摘除與可選刪盤。實現全部走官方插槽、右側欄頁籤與 web server 路由,不改 DSH 本體源碼。當前版本 0.2.0,MIT 許可,要求宿主 DSH >= 0.2.0-rc.1。
社區目錄頁:https://www.skillhub.cn/plugins/ycm50/dsh-delete(SkillHub 爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係)。
這是什麼¶
一句話:dsh-delete 是面向 DSH 桌面 profile 的 bundle 插件,解決「會話與投影緩存怎麼幹淨刪掉」和「會話上下文裏圖片怎麼可視、可摘、可按需刪源文件」。
兩個能力互不干擾:
- 會話刪除:左側欄底部 會話管理 入口,多選後先讓 DSH 歸檔,再刪磁盤上的會話主體與投影緩存。
- 圖片管理:右側欄與「工作區文件 / 上下文 / 終端 / 瀏覽器」並列的 圖片管理 頁籤,統計張數與體積,多選從後續請求中摘除,並可勾選(默認關閉)刪除磁盤上的源文件與附件對象。
會話刪除¶
入口與列表¶
入口掛在 sidebar.footer.action,與費用、上下文等插件共用底部動作區。打開面板後可以搜索、按工作區過濾(多工作區時出現下拉),工具欄提供全選、清空,以及三種級聯:
- 選中子 agent:所有後代會話。
- 選中團隊成員:同父下的兄弟會話。
- 選中整族:上溯到根並帶上全部後代。
列表同時展示左側欄可見的會話,以及掃盤發現的 僅磁盤 殘留(列表已消失但文件仍在)。每行顯示體積、路徑條數、最近活動時間;正在運行的會話標 運行中(歸檔時會 stopActivity)。
刪除順序¶
刪除不是「只 rm 目錄」。官方契約是先歸檔、再刪盤:
- 調用 DSH 歸檔,左側欄立即不再顯示該會話,並停掉其活動。
- 刪除
<DSH_HOME>/sessions/<工作區>/<會話 id>/下的主體(含session.v4.jsonl.zstd等),以及storages/session_projcache/sessions/<會話 id>.json投影緩存(可選保留投影緩存見配置keepProjCache)。
若只刪文件不歸檔,宿主內存裏仍活着的會話會繼續出現在側欄,且文件刪掉後官方歸檔可能失敗,容易留下清不掉的行。設置裏 archiveOnDelete 默認開啓;關掉後插件退化爲只刪文件,面板會給出提示。
二次確認默認開啓(confirmBeforeDelete),確認條會給出將移除的路徑數與釋放體積。磁盤刪除不進回收站、不可撤銷。
安全邊界¶
會話 id 必須在入口通過形狀校驗(裸 UUID 或 session-<uuid>);每條待刪路徑經 insideRoot() 複覈,只落在 sessions 與 session_projcache 約定根下。附件目錄、費用賬本等不在刪除範圍內。
圖片管理¶
解決什麼問題¶
DSH 對圖片有多處限額,例如 dsh-attachment-local 的 maxImagesPerMessage,以及 dsh-llm-deepseek / dsh-llm-pi-ai 等對單條請求的圖片字節與張數預算。歷史消息裏圖片過多時,路由可能以超預算失敗;本面板讓你看見每一張圖,並把選中的從後續請求裏摘掉。
注意:單條消息最多 N 張 仍由 dsh-attachment-local.maxImagesPerMessage(默認 20)控制;圖片管理處理的是「上下文裏圖片把請求撐爆」,兩者不互相替代。要放寬單條添加上限,需在 設置 → 插件配置 → dsh-attachment-local 裏改 maxImagesPerMessage。
摘除機制¶
插件複用 DSH 官方的 image/offload 事件:追加與 dsh-compaction-image-offload 同類型的事件,由已有投影把對應位置換成佔位文本,後續請求不再消耗視覺 token;會話日誌與附件文件本身不改字節,佔位裏仍帶只讀路徑可讀回。標記持久、不可自動回滾。
面板支持縮略圖牆、按來源與時間篩選,以及快捷 最早 N 張、除最近 N 張外全部。勾選多張後一次確認會寫入 一條 image/offload(多個 targets),只斷一次前綴緩存;分多次操作則斷多次。底部會顯示 緩存代價預估(基於日誌裏 usage 錨點),便於權衡騰預算與 KV 重算。
刪除磁盤原文件(默認關閉)¶
勾選 同時刪除磁盤上的原文件 後,源文件(tool/result 裏與 image 同排的絕對路徑)與附件對象(<DSH_HOME>/attachments/v1/objects/...,僅由 sha256 id 派生)分兩路判定;系統目錄、DSH 安裝目錄、<DSH_HOME> 會話區等有多層安全閘,全庫掃描其它會話引用,被共享的默認跳過並可在二次確認後強制刪除。同一批操作順序爲 先摘除、後刪盤;刪盤不可恢復。<DSH_HOME>/cache/attachments/request-images/ 派生緩存 intentionally 不刪。
限制與降級¶
| 情況 | 行爲 |
|---|---|
| 會話未打開(冷 / 已歸檔) | 可只讀看張數,寫入口禁用,提示先打開會話 |
| 會話正在跑一輪 | 默認拒絕摘除(blockOffloadWhileRunning 默認開) |
無 sessions 服務 |
圖片能力降級,會話刪除仍可用 |
| 選中項已不在當前上下文 | 跳過並說明原因,其餘照常 |
安裝與啓用¶
插件按 DSH 的 bundle 層 接入 profile,默認 profile 路徑爲 ~/.dsh/profiles/desktop(Windows 下爲 %USERPROFILE%\.dsh\profiles\desktop)。README 未提供 dsh plugin add 一類命令,需取得源碼後鏈接進 profile 並聲明 bundle。
1. 取得代碼¶
將倉庫放到本機任意目錄(下例路徑僅作佔位):
# 放在任意位置;下例假設 A:\Downloads\dsh-delete
可從 GitHub 下載 release 或源碼包:https://github.com/ycm50/dsh-delete。
2. 鏈接進 profile¶
在 Windows 上可用目錄聯接指向源碼目錄:
New-Item -ItemType Junction `
-Path "$env:USERPROFILE\.dsh\profiles\desktop\node_modules\dsh-delete" `
-Target "A:\Downloads\dsh-delete"
Linux/macOS 上需將 node_modules/dsh-delete 指向同一套源碼(具體命令依平臺而定,原則與上例一致:profile 的 node_modules 下出現名爲 dsh-delete 的包目錄)。
3. 聲明爲 bundle¶
編輯 ~/.dsh/profiles/desktop/package.json,在 dependencies 與 dsh.profile.bundles 各增加一項:
{
"dependencies": {
"dsh-delete": "file:A:/Downloads/dsh-delete"
},
"dsh": {
"profile": {
"bundles": [
"dsh-delete"
]
}
}
}
file: 路徑改爲你本機源碼實際位置。包內 cordis.patch.yml 會由 bundle 機制疊入,無需手改。
4. 重啓 DSH¶
客戶端模塊圖在啓動時快照,改 bundle 後需 重啓 DSH 纔會加載瀏覽器側的 client.js;重啓後側邊欄底部出現 會話管理,右側欄出現 圖片管理 頁籤(可在配置裏關閉入口)。
插件配置¶
在 設置 → 插件配置 → dsh-delete 中調整(字段均爲 .volatile(),改完即時生效):
| 字段 | 默認 | 作用 |
|---|---|---|
enabled |
開 | 會話管理總開關 |
confirmBeforeDelete |
開 | 刪會話前二次確認 |
keepProjCache |
關 | 只刪會話主體,保留投影緩存 JSON |
archiveOnDelete |
開 | 刪盤前先歸檔 |
imageManagerEnabled |
開 | 圖片管理頁籤總開關 |
confirmBeforeOffload |
開 | 摘除前二次確認 |
blockOffloadWhileRunning |
開 | 會話跑任務時禁止摘除 |
thumbnailMaxEdge |
192 |
縮略圖長邊像素 |
非標準佈局時可在 cordis.patch.yml 寫死 home;環境變量 DSH_HOME 覆蓋數據目錄,DSH_INSTALL 覆蓋 DSH 安裝目錄(刪源文件時會禁刪該目錄)。
典型用法¶
清理會話與殘留¶
- 點擊側邊欄底部 會話管理。
- 用搜索或工作區下拉定位目標;若需刪整棵子 agent 樹,點 選中子 agent 或 選中整族。
- 勾選行(注意 僅磁盤 殘留),查看底部已選數量與合計體積。
- 點 刪除選中,在確認條中核對路徑數與釋放空間後確認。
爲當前會話騰圖片預算¶
- 先打開 要操作的會話(冷會話無法寫入摘除)。
- 打開右側欄 圖片管理,點 刷新 查看「共幾張 / 仍在上下文幾張 / 體積」。
- 多選要摘的圖片,或使用「最早 N 張」等快捷;留意底部 移除後請求體積 與 緩存代價預估。
- 一般情況只點 摘除選中;確需釋放磁盤且接受不可恢復時,再勾選 同時刪除磁盤上的原文件,閱讀「可刪 / 跳過」摘要後確認。
宿主 HTTP 路由前綴爲 /plugins/dsh-delete(如 POST .../delete、POST .../images/offload),面板通過 web server 調用,日常使用不必手調 API。
適用場景與注意¶
適合需要定期清理 DSH 會話磁盤佔用、處理子 agent / 團隊會話級聯刪除,或在截圖、視覺調試較多的會話裏主動控制上下文圖片與請求預算的開發者。
安裝前建議自行閱讀倉庫源碼與 MIT 許可證;插件以 當前 DSH 進程權限 讀寫 <DSH_HOME> 與用戶指定的源文件路徑,刪除與會話相關的操作具有破壞性。SkillHub 目錄頁星標爲 0,不代表功能完整度,以 GitHub README 與版本 0.2.0 爲準。
結尾¶
dsh-delete 把「會話歸檔 + 刪盤」和「官方 image/offload 摘除 + 可選刪源/附件」收進同一 bundle,對齊 DSH 0.2.0-rc.x 磁盤契約,並通過 smoke 測試覆蓋邏輯與座標(日誌 位置 與 seq 分離)等易錯點。若你已在用 DSH 桌面 profile 並希望在不改本體的前提下管理會話與圖片,可按上文步驟鏈接 bundle 並重啓宿主。