dsh-delete:DSH 會話刪除與圖片管理

前言

在 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 插件,解決「會話與投影緩存怎麼幹淨刪掉」和「會話上下文裏圖片怎麼可視、可摘、可按需刪源文件」。

兩個能力互不干擾:

  1. 會話刪除:左側欄底部 會話管理 入口,多選後先讓 DSH 歸檔,再刪磁盤上的會話主體與投影緩存。
  2. 圖片管理:右側欄與「工作區文件 / 上下文 / 終端 / 瀏覽器」並列的 圖片管理 頁籤,統計張數與體積,多選從後續請求中摘除,並可勾選(默認關閉)刪除磁盤上的源文件與附件對象。

會話刪除

入口與列表

入口掛在 sidebar.footer.action,與費用、上下文等插件共用底部動作區。打開面板後可以搜索、按工作區過濾(多工作區時出現下拉),工具欄提供全選、清空,以及三種級聯:

  • 選中子 agent:所有後代會話。
  • 選中團隊成員:同父下的兄弟會話。
  • 選中整族:上溯到根並帶上全部後代。

列表同時展示左側欄可見的會話,以及掃盤發現的 僅磁盤 殘留(列表已消失但文件仍在)。每行顯示體積、路徑條數、最近活動時間;正在運行的會話標 運行中(歸檔時會 stopActivity)。

刪除順序

刪除不是「只 rm 目錄」。官方契約是先歸檔、再刪盤:

  1. 調用 DSH 歸檔,左側欄立即不再顯示該會話,並停掉其活動。
  2. 刪除 <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 安裝目錄(刪源文件時會禁刪該目錄)。

典型用法

清理會話與殘留

  1. 點擊側邊欄底部 會話管理。
  2. 用搜索或工作區下拉定位目標;若需刪整棵子 agent 樹,點 選中子 agent 或 選中整族。
  3. 勾選行(注意 僅磁盤 殘留),查看底部已選數量與合計體積。
  4. 點 刪除選中,在確認條中核對路徑數與釋放空間後確認。

爲當前會話騰圖片預算

  1. 先打開 要操作的會話(冷會話無法寫入摘除)。
  2. 打開右側欄 圖片管理,點 刷新 查看「共幾張 / 仍在上下文幾張 / 體積」。
  3. 多選要摘的圖片,或使用「最早 N 張」等快捷;留意底部 移除後請求體積 與 緩存代價預估。
  4. 一般情況只點 摘除選中;確需釋放磁盤且接受不可恢復時,再勾選 同時刪除磁盤上的原文件,閱讀「可刪 / 跳過」摘要後確認。

宿主 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 並重啓宿主。

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

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

小夜