dsh-tui-session-manager:dsh-TUI 會話管理插件

前言

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 提供了一個輕量級且不依賴構建的工具。插件源碼與文檔可參考下方鏈接。

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

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

小夜