前言¶
DeepSeek Harness(DSH)默認支持把會話歸檔(Archive):側欄裏仍能看到該行,磁盤上的日誌也會一直保留。對臨時調試、一次性探索或已過期的會話,歸檔並不能真正騰出工作區計數,也不會清掉持久化目錄。若只靠手動刪目錄或改登記文件,還容易漏掉 workspace 分組、歸檔集與 pin 集裏的 session id。
下面介紹的 dsh-trash(維護者 BarryAlllen,社區目錄見 SkillHub 條目)把「刪除會話」做成與 Rename、Pin、Archive 並列的一級操作:側欄菜單一行即可完成;智能體也可通過同名工具批量刪除。插件歸類爲客戶端,與 DSH 自帶的 Web/Desktop 配置配合使用。
這是什麼¶
dsh-trash 是一個 DSH bundle 插件(npm 包名 @local/dsh-session-trash,版本 1.0.0)。它在不改變 DSH 核心的前提下,補全「徹底刪除會話」路徑:側欄即時移除行、遞歸刪除該會話的 log 目錄,並同步清理 workspace 記賬以及全局 archive / pin 集合中的 id。
許可證爲 MIT(見 GitHub 倉庫 README 徽章說明)。
核心功能¶
依據倉庫 README,當前覈實的能力包括:
- 側欄會話菜單:在會話行
⋯(或右鍵)菜單末尾、分隔線之後出現 Delete session;危險樣式、獨立圖標、確認對話框與 toast 反饋,由內置 Context Menu 渲染。 - 無殘留刪除:行立即消失(無需整頁刷新);對應 log 目錄刪除;會話不再計入 Workspace、archive、pin bookkeeping。
- 智能體工具
session_delete:傳入多個sessionIds,可一次處理多條會話;返回按會話粒度的成功/失敗結果。 - 實現特點:Host 側爲純 ESM,瀏覽器側爲
window.__ModuleLoader__工廠;README 標明零依賴、零構建步驟;不注入 system prompt,除工具 schema 外無額外 prompt 成本。
環境與依賴¶
| 項 | 要求 |
|---|---|
| DSH | 0.2.2-rc.1(README 標註爲 verified);需已內置的 connection、webServer 服務(任意 Web/Desktop profile) |
| Node.js | 隨 DSH 捆綁,無需單獨安裝 |
| 持久化後端 | @deepseek-ai/dsh-session-persistence-jsonl(發行版默認),用於定位 log 目錄 |
| 可選 | workspaceRegistry:用於分組清理;缺失時其餘功能仍可用 |
平臺徽章寫明支持 macOS、Linux、Windows。
安裝與啓用¶
官方 README 的安裝路徑是:先把倉庫放到本機,再通過 plugin_manager 把目錄安裝進你實際使用的 profile。install_bundle 會把目錄鏈入 profile、註冊 bundle patch 並熱應用;對該 profile 下所有會話生效,重啓後仍保留。鏈接目錄意味着後續在目錄裏 git pull 後,需 DSH 重啓(或 Client 側刷新頁面)纔會載入更新。
若菜單未出現,README 建議先刷新頁面一次(Client 模塊在啓動時提供)。
也可用 DSH 界面:Plugins → Install,指向同一克隆目錄,效果與 install_bundle 相同。
安裝命令須與資料原文一致,如下。
git clone https://github.com/BarryAlllen/dsh-trash.git
plugin_manager
action: install_bundle
target: /absolute/path/to/dsh-trash
將 target 換成你機器上 dsh-trash 目錄的絕對路徑。
卸載時 README 給出:
plugin_manager
action: remove_bundle
target: @local/dsh-session-trash
已刪除的會話不會恢復;其他插件不受影響。
安全提示:插件在當前 DSH 進程的權限下執行刪除與 API 註冊。安裝前請自行閱讀 index.js 等源碼,並確認 MIT 許可證是否符合你的合規要求。社區目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係,不宜當作官方應用商店條目理解。
典型用法¶
側欄刪除¶
- 將指針懸停在會話行上,打開
⋯,或右鍵該行。 - 在菜單底部選擇 Delete session(分隔線下方)。
- 在確認框中核對會話名稱後確認。
智能體調用 session_delete¶
請求體示例(README):
{ "sessionIds": ["session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc"] }
批量時結果爲逐條報告,便於定位失敗項:
{
"results": [
{
"sessionId": "session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc",
"ok": true,
"title": "雜活",
"dir": "/Users/you/.dsh/sessions/--Users-you-workspace-tmp--/session-c9456202-3d3d-4cf9-9aa8-a1fd883a0fbc",
"resident": false
},
{
"sessionId": "session-does-not-exist",
"ok": false,
"error": "session \"session-does-not-exist\" does not exist"
}
]
}
不確定要刪哪些會話時,README 建議在刪除前先用 session_search / session_list 覈對。
刪除時實際發生什麼¶
對通過檢查的會話,README 按順序說明:
- Workspace 記賬:從所屬 Workspace 的
sessionIds中移除該 id。 - Archive 與 pin 集合:從 registry 全局集合中移除該 id。
- 持久化 log:遞歸刪除
<session-root>/<project-key>/<encoded-id>/(含各代session.*.jsonl.zstd、session.lock等)。 - Client 通知:發出
api-session/removed,由現有 Client 走 listremove突變,側欄行消失。
步驟 1–2 爲派生面;若失敗會記日誌且不阻斷步驟 3 的目錄刪除。
限制與安全¶
- 不可恢復:無回收站、無撤銷、無自動備份。
- 運行中的會話拒絕刪除:需先停止會話再刪。
- 當前運行中仍打開過的會話:可從磁盤刪除,但在本次 DSH 運行週期內可能仍駐留內存;toast 會提示,重啓前不會在磁盤上再出現。
- 主要刪除對象是 log 目錄;附件、spill、投影與搜索索引等派生或共享數據,README 說明會話消失後可能仍留殘留但不可達,插件不會主動清理這些共享資源。
- 路徑安全:目錄路徑由持久化後端佈局重算,若結果逃逸 session root 則拒絕。
配置與排錯¶
配置:README 明確無 config schema、無憑據、無設置項。
常見症狀(摘自 README 排錯表):
| 現象 | 處理 |
|---|---|
| 沒有 Delete session 菜單項 | 刷新頁面;仍無則確認 Plugins 中 bundle 已啓用 |
| toast 出現 HTTP 404 | Host 半未激活或傳輸層缺少 /api 通道 |
| 提示 session is running | 先停止會話 |
| 行消失但 id 仍在 workspace.json | 分組清理可能僅警告跳過;可憑日誌提 issue |
| 已刪會話仍在列表 | 本 run 內內存駐留;重啓 DSH |
工作機制(簡要)¶
| 組件 | 方式 |
|---|---|
| 菜單項 | ctx.contextMenus.register({ target: 'session' }) 及 contextMenu 圖標槽 |
| Client → Host | POST /api/session-trash/delete,經 ctx.connection.fetch.register |
| Agent → Host | session_delete 工具,輸出經 JSON Schema 校驗 |
| 共享邏輯 | index.js 單一實現,兩路調用返回相同 per-session 結構 |
| 根目錄 | 從 ctx.sessionPersistence.root 讀取,回退 profile 配置 |
結尾¶
若你需要在 DSH 裏把「刪會話」當成與歸檔對稱的一級能力——側欄一點清掉 log,並讓 workspace / archive / pin 登記一致——dsh-trash 提供了現成的客戶端插件與 session_delete 工具路徑。使用前務必理解不可逆刪除與運行中會話限制。