READMESource: main@345c6164
归档对话(dsh-archive-manager)
侧边栏多一个归档图标:点进去就是全部已归档的对话,可以勾选若干条,一起取消归档或者永久删除。
装进实例
# 在 DSH 里用插件管理器安装本目录(bundle),或:
dsh plugin --profile desktop add "D:\Coding_Plan\DSH_Plugin_insNdev\dsh-archive-manager"
安装后刷新页面(客户端 bundle 带 immutable 缓存,看到旧界面时用 Ctrl+Shift+R 硬刷新)。
Host 半边改了要重启 DSH Desktop 才重新导入。
用法
- 点侧边栏的归档图标(工具提示「归档对话」),主区打开归档列表。
- 每条显示标题、所属工作区和最后活动时间;最上面是「共 N 个」。
- 勾选若干条(或点「全选」),然后:
- 取消归档(N):走官方
uiWorkspace.unarchiveSession,这些对话回到侧边栏原来的位置。 - 删除(N):二次确认后,由 Host 半边把会话存档从
<DSH_HOME>\sessions\<项目>\<会话>移除。
- 取消归档(N):走官方
归档本身仍然走 DSH 自带的入口:会话行尾的「⋯」菜单 →「归档」。
删除的安全边界
删除是真的删文件,所以 Host 半边每次都会:
- 拒绝仍在运行 / 仍挂在内存里的会话(先重启客户端再删更稳);
- 只碰
<DSH_HOME>\sessions下正好两层的目录,符号链接一律跳过; - 目录里必须有
session[.vN].jsonl[.zstd]存档,否则不动; - 会话 id 不能含路径分隔符或控制字符;单次请求最多 500 条;
- 请求走同源
fetch,并由connection.requestRejection做信任校验。
删除后,会话档案里残留的归档 id 只是看不见的死条目;面板也会按不存在过滤掉。
真要找回,只能自己从备份恢复 sessions 目录。
限制
- 删除是永久的,没有回收站。
- 只能管理已归档的对话(未归档的请用侧边栏自己的菜单)。
- 如果某个归档会话在别的进程里还活着,删除会返回「还挂在内存里」,重启后再试。
文件
index.js— Host 半边:/archive-manager/api/{inspect,delete}路由与磁盘删除。client.js— 浏览器半边:sidebar.panellist图标 +main面板;数据读官方标准 hook 快照。locale/*.json、icon.svg— 插件列表里的标题、描述与图标。
自测
两个测试都只碰临时目录和假 ctx,不会动真实会话:
node tests\host-smoke.test.mjs # Host 路由:定位/删除/路径穿越/无存档目录
node tests\client-contract.test.mjs # 客户端契约:模块 id、inject、两个 slot、三种渲染状态
(node --test 在本机沙箱下会因 spawn 管道被拒而失败,直接跑文件即可。)
/archive-manager/api/inspect 是只读诊断端点:贴一组会话 id 进去,返回它在磁盘上的目录、是否在内存里活着、为什么不能删。
No comments yet. Be the first to write one.