前言¶
DSH 官方提供了「归档会话」功能,但归档后的会话会从工作区列表隐藏,且既没有恢复入口,也没有物理删除入口。这会导致已归档的会话堆积在磁盘上,占用空间且无法清理。本插件通过在侧边栏新增入口,补全了恢复和彻底删除这两个功能缺口。
核心功能¶
- 侧边栏入口:在侧边栏新增「历史归档」入口,跟随 DSH 侧边栏样式。
- 会话列表:列出所有归档会话,显示真实会话标题和归档时间。
- 一键恢复:点击面板中「恢复」按钮,即可取消归档,回到工作区列表。
- 物理删除:点击面板中「删除」按钮,二次确认后彻底删除会话(不可恢复)。
- 实时更新:归档、恢复、删除操作无需刷新页面。面板打开时自动刷新,打开状态下每 3 秒轮询更新归档状态。
安全与删除语义¶
物理删除不可恢复。插件按顺序执行以下步骤,任一步失败都不会留下“半删除”的会话:
- 归档标记:从 workspace 存储域的
archivedSessionIds中移除。 - 工作区记录:从每个工作区实体的
sessionIds名册中移除。 - 存储目录:删除
$DSH_HOME/sessions/<project>/<session-id>/(含session.v3.jsonl.zstd)。 - 投影缓存:清理
storages/session_projcache.json的索引行以及该会话的逐会话缓存文件。
安全约束:
* 仅限已归档会话:只有已归档的会话能被删除,正在使用的会话在归档之前不可达。
* 路径校验:删除前对路径做 realpath 二次校验,拒绝任何位于 $DSH_HOME/sessions 之外的路径。不跟随逃逸符号链接。
* ID 校验:会话 id 先做格式校验(拒绝 ..、路径分隔符、超长输入)。
* 附件保留:共享的内容寻址附件($DSH_HOME/attachments)不会被回收,它们可能被其他会话引用。
安装与使用¶
使用 pnpm 安装:
pnpm add dsh-archive-manager
安装后,在 DSH Web GUI 的侧边栏即可看到「历史归档」入口。
重建客户端产物¶
如需重新生成客户端代码:
node build-client.mjs
注意事项¶
- 不可逆操作:物理删除会话后数据无法恢复。
- 权限要求:插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
- 仅限已归档:只有已归档的会话能被删除,普通工作区会话无法直接删除。
总结¶
该插件解决了 DSH 归档会话无法恢复和清理的问题,通过侧边栏管理界面提供了安全的物理删除能力。