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 提供了一个轻量级且不依赖构建的工具。插件源码与文档可参考下方链接。

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

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

小夜