前言¶
dsh-TUI 0.11.x 的適配層已經實現了真正的刪除能力(channel.deleteSession(id)),包括遞歸刪除日誌目錄、清 resume 標記以及 last-used.json,但宿主並沒有提供 UI 入口。/resume 選擇器和工作區菜單裏都沒有調用刪除邏輯的入口,導致只能通過文件系統手動清理。
本插件不重寫刪除邏輯,只補上 UI 入口。它提供一個 /sessions 全屏場景,用於瀏覽、過濾和真正刪除保存的會話,並處理宿主刪除路徑未觸及的狀態殘留。
安裝與啓用¶
安裝前請確保已安裝 Node.js(要求版本 ^22.19 || >=24)。
dsh plugin --profile dsh-tui add ./dsh-tui-session-manager
安裝完成後,在 dsh-TUI 對話中輸入 /sessions 即可打開管理器。若需卸載:
dsh plugin --profile dsh-tui remove dsh-tui-session-manager
核心功能¶
- 全屏管理器:通過
/sessions打開全屏面板,支持按工作區分組瀏覽,使用/鍵實時過濾(匹配標題、工作目錄或 id)。 - 三態過濾:使用
e鍵循環切換過濾模式:全部顯示 → 僅顯示空殼 → 隱藏空殼。 - 空殼識別與標註:空會話被定義爲僅含 4 條元數據幀、無人類消息且標題回退爲目錄名的會話。空殼行會標註體積(如
empty·312B),頭部顯示總數、空殼數與當前視圖狀態。 - 批量刪除:支持
a全選當前可見集,勾選後按d刪除。刪除前會彈出y/n確認。 - 殘留清掃:刪除操作會同步清理宿主刪除路徑未觸及的殘留狀態,防止
/resume列表出現幽靈條目。 - 零依賴:無構建步驟、無運行時依賴,純 ESM 模塊,直接放入 profile 即可運行。
典型用法¶
在對話中輸入 /sessions 進入管理器。
基本操作按鍵:
| 按鍵 | 作用 |
|---|---|
↑ ↓ / k j |
移動光標 |
space / x / enter |
勾選或取消當前會話 |
a |
全選 / 全不選(僅當前可見集) |
d |
刪除已勾選(需確認) |
/ |
輸入過濾詞 |
e |
切換空殼過濾狀態 |
esc |
退出過濾、取消確認或關閉面板 |
清理空會話的標準流程:
1、在對話裏輸入 /sessions 打開全屏管理器;
2、按鍵 e 切換到“只看空殼”模式;
3、按鍵 a 全選當前列表;
4、按鍵 d 刪除;
5、在確認提示中輸入 y 確認。
刪除結果會在底部彙總,格式爲 deleted N, refused M。當前正在使用的會話會被宿主拒絕(與宿主語義一致),refused 狀態也會覆蓋日誌已丟失的情況。
安全與注意事項¶
- 不可逆刪除:插件沒有回收站功能,刪除操作不可撤銷。請仔細覈對勾選項。
- 會話 ID 格式:只有符合
^[A-Za-z0-9][A-Za-z0-9_-]*$規則的 ID 會被視爲文件名或 map 鍵使用,其餘會被跳過並報告。 - 自動備份:每次清掃前,插件會將受影響的 JSON 文件備份爲
.bak-sweep-<YYYYMMDD-HHMMSS>後綴。 - 容錯處理:無法解析的 JSON 原樣保留,不做猜測性修改;清掃過程不拋異常,單步失敗計入結果行,不影響其他步驟。
兼容性¶
- dsh-TUI 版本:兼容 dsh-TUI 0.11.x。
- Node.js 版本:需要 Node.js
^22.19或>=24。 - React 依賴:插件使用宿主注入的
props.React,不引入自帶 React(TUI reconciler 只認宿主的 React 19 元素)。
結尾¶
如果你需要在 dsh-TUI 中維護乾淨、無殘留的會話環境,dsh-tui-session-manager 提供了一個輕量級且不依賴構建的工具。插件源碼與文檔可參考下方鏈接。