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