前言¶
DeepSeek Harness(DSH)裏,Session 的持久化能力主要負責創建、打開、統計和列出日誌;歸檔只是把 Session 從列表裏藏起來,並不會刪掉磁盤上的日誌目錄。試驗性會話、誤建的 Session、或需要徹底清掉本地痕跡時,只靠歸檔往往不夠。
社區插件 dsh-session-delete(維護者 liufeicc,分類 admin-security)在側邊欄 Session 的「…」菜單裏增加一行 Delete session,經確認對話框後,由 Host 側操作刪除該 Session 的 durable log,並同步清理派生狀態。下面介紹它的能力邊界、行爲細節和接入方式。
這是什麼¶
dsh-session-delete 是一個本地 DSH bundle:在每條 Session 的側邊欄菜單中增加永久刪除入口,配套確認對話框,以及通過 Typert Gateway 暴露給瀏覽器的 Host 操作 sessionDelete/delete。
- 倉庫:liufeicc/dsh-session-delete
- 目錄頁:SkillHub 插件頁
- 包名:
@local/dsh-session-delete(package.json版本 1.0.0) - 許可證:MIT
核心功能¶
側邊欄與確認流程¶
插件註冊 sidebar.workspaces.session.menu.item(id: session-delete,order: 500,緊跟內置的 archive 行)。點擊後彈出 shell.overlay 確認框,展示 Session 名稱;該操作不可撤銷。
Host 刪除與狀態清理¶
用戶確認後,Host 會:
- 從磁盤刪除 Session 的 durable log 目錄:
$DSH_HOME/sessions/<project>/<session-id>/ - 清理仍會把它列出來的派生狀態:
session_projcache、pin 成員關係、以及所屬 workspace 的sessionIds記賬
側邊欄行會盡快消失:workspace 記賬變更經現有 Workspace 流到達,Client Session 列表會收到移除通知(handleSessionRemoved 並做一次 baseline refresh)。
Client 服務 sessionDeleteUi¶
除菜單行外,插件通過 ctx.provide 提供 Client 服務 sessionDeleteUi,供其他 Client 插件複用同一套確認與刪除流程,而不必各自實現對話框。當前 README 記載的首個調用方是 dsh-split-workspaces(分屏工作區裏每條 Session 行上的刪除按鈕)。
對外方法爲:
request({ sessionId, displayTitle, onDeleted })
- 沒有可用
sessionId時返回false - 刪除成功(或 Session 已不存在)後調用
onDeleted(sessionId);分屏場景下用於釋放曾 pin 到該 Session 的面板
與「Live」Agent 相關的拒絕與歸檔¶
Harness 沒有內置的 Session 刪除原語;本插件自行刪除產物,唯一不安全的場景是 正在產出工作的 Session。
行爲要點(與 README 一致):
- 僅 真正 running 的 Session 會被拒絕;對話框可提供 Stop and delete:按用戶停止的方式取消工作,待 Agent 靜默後再刪除,避免進行中的 drain 把剛刪的文件又寫回來
- 曾有 live Agent、但當前並非 running 的 Session:刪除前會先 durable 歸檔(文檔中的 wake block;
agent/pre-step門會讀 durable archive 集合),避免排隊 wake、goal 輪次或 schedule tick 往已移除的 log 裏追加並「復活」Session;該歸檔 id 有意保留爲 tombstone。無 live Agent 的 Session 則改爲 unarchive 後刪除 - 已不存在的 Session 視爲
missing;對話框按已完成處理並清理陳舊行 - 經
sessionDeleteUi進來的調用方,在 Client Session 列表已被告知移除 之後 才收到回調;若onDeleted拋錯只記日誌,不報告刪除失敗(此時 log 已不存在)
Host 結果中的 guarded: true 表示該 Session 曾有 live Agent,刪除過程受歸檔保護;missing 表示未找到 log。
其他限制與生態交互¶
- 刪除你正在查看的 Session 時,對話視圖仍可能指向已不存在的 log;歸檔門會阻止仍駐留的 Agent 繼續工作,刷新後行會消失。若仍要保留當前視圖,建議先切走
- Session 引用的附件是內容尋址、多 Session 共享的,刪除 Session 不會動附件
- 搜索索引插件
dsh-session-query-sqlite會在自己的 reconciliation 中丟掉已消失的 log - 手寫 bundle 不能直接
import@deepseek-ai/*;Host 側手寫 Typert marker 與typertRemote綁定,Client 側手寫與ctx.remote.$mount匹配的InvocationDescriptor(Gateway 要求輸入 codec 爲 strict,且 Client Typert 註冊表要求 strict codec 帶create()schema factory)
安裝與啓用¶
資料中的 Development 說明:在 profile 的 package.json 裏用 link: 指向本插件目錄,由 profile 鏈接該 bundle。README 未給出 SkillHub 或 dsh plugin add 形式的固定安裝命令;從 GitHub 倉庫 獲取源碼後,按你現有 profile 的本地插件鏈接方式啓用即可。
package.json 中 dsh.bundle.patch 指向 cordis.patch.yml,用於向 Host 注入單行;Client 配置爲 platform: web、immediately: true,並注入 sidebar、workspace、session-controller 等客戶端模塊。
啓用後可在 Plugin Manager 中查看插件展示信息(locale/en.json、locale/zh.json 與 icon.svg)。
Host 側 index.js 由 Loader 只導入一次,且 hmr.config.root 爲空時 修改 Host 代碼需重啓 Harness 進程 才生效;Client 側 client.js 從磁盤提供,改完後 瀏覽器刷新 即可。
典型用法¶
側邊欄永久刪除¶
- 在 workspace 側邊欄打開目標 Session 的「…」菜單
- 選擇 Delete session(緊挨歸檔項)
- 在確認框中核對 Session 名稱後確認
- 若 Session 正在運行,按提示選擇停止並刪除,或先自行停止再刪
其他插件調用 sessionDeleteUi¶
在已依賴本插件的 Client 插件中,通過 ctx.get 取得 sessionDeleteUi,調用 request 並傳入 sessionId、displayTitle 與成功後的 onDeleted。空 sessionId 會被拒絕(返回 false)。
適用場景與注意¶
適合誰: 需要在本地 DSH 環境做 Session 生命週期治理的開發者或管理員——清理試驗 Session、去掉誤建記錄、在分屏或多入口 UI 裏統一刪除體驗(配合 dsh-split-workspaces 等)。
安全與權限: 刪除操作以當前 dsh Host 進程的身份與文件系統權限 執行,會直接移除 $DSH_HOME/sessions/... 下目錄。安裝或 link 前請閱讀 源碼 與 MIT 許可證,確認符合你的合規要求。
生態說明: DSH 倡導「一切皆插件」;SkillHub 爲社區目錄,與 DeepSeek / 幻方無官方從屬關係,本文不構成官方產品說明。
結尾¶
dsh-session-delete 補上了 DSH 默認能力裏缺少的一步:在確認之後永久移除 Session log,並處理 live Agent、歸檔 tombstone 與 workspace 記賬等邊界。需要菜單刪除、可複用對話框或 Host 端 sessionDelete/delete 時,可從目錄頁或 GitHub 獲取 bundle,按 profile link: 方式接入。