前言¶
DeepSeek Harness 里,归档一个会话后,它通常不会再按原 workspace 位置展示;但归档并不等同于删除会话。如果你只是想把这个会话找回来,而不是重建会话或手动改数据,就需要一个显式的反向入口。
下面介绍的 dsh-unarchive 就是补这个入口:它为 DeepSeek Harness 增加一个 /unarchive 命令和一个 unarchive_session 智能体工具,把会话从 registry-global archive set 中移除,让它重新出现在 workspace。
这是什么¶
- 维护者:
edfrey0044 - 许可证:
MIT - 定位:为 DeepSeek Harness 提供恢复已归档会话的插件入口。
这个插件提供两个入口:一个是人用的 /unarchive 命令,一个是智能体用的 unarchive_session 工具。两者都把会话从 archive set 移回 workspace,而不是删除会话或改写会话日志。
核心功能¶
/unarchive 命令¶
/unarchive 用于在命令入口里操作已归档会话。
- 不带参数:列出已归档会话,返回会话 id 和 best-effort titles。
- 带
<sessionId>:恢复这个会话。
可以先运行 /unarchive 查看有哪些会话被归档,再运行 /unarchive <sessionId> 恢复指定会话。
unarchive_session 工具¶
unarchive_session 暴露给智能体调用,行为与命令入口对应。
- 省略
sessionId:列出已归档会话。 - 传入
sessionId:恢复一个会话。
如果你已经在会话里,也可以直接对智能体说:
把归档的会话恢复一下
模型会调用 unarchive_session。如果只想查看,就省略 sessionId;如果要恢复特定会话,就传入 sessionId。
恢复效果¶
两个入口的恢复效果是:
- 会话会 live 恢复到所有已连接的 GUI client,信号为
host/archived-sessions-changed。 - 变更会 survive restarts。
- 插件不会 touch session logs。
- 插件不会 touch workspace accounting slots。
写入路径¶
插件优先使用核心 API:
workspaceRegistry.unarchiveSession
当当前 build 没有提供这个 API 时,它会直接写 workspace domain 的:
archivedSessionIds
也就是说,它会直接修改同一个 durable、live-updating 的 archive set,让会话重新出现。
bundle 集成¶
插件声明了:
dsh.bundle.patch
因此,以 bundle 方式加入 profile 时,bundle patch 会自动加入 profile 的 layer stack。
插件本身 self-contained,除了一个 stock DeepSeek Harness profile,没有其他额外要求。
安装与启用¶
作为 profile bundle 安装¶
先在 profile 里添加插件:
dsh plugin --profile web add github:edfrey0044/dsh-unarchive
然后重启 dsh web 或你的 profile。
执行上面的命令后,插件会作为 profile bundle 的一部分进入当前 profile。由于它声明了 dsh.bundle.patch,patch 会按 DSH 的 layer stack 机制自动参与组合。
手动组合到 profile¶
如果你不走 bundle 安装,而是手动组合插件,需要先在该 profile 的 cordis.patch.yml 中加入 dsh-unarchive 的 insert 行,然后在 profile 目录里安装包:
cd ~/.dsh/profiles/<name>
pnpm add github:edfrey0044/dsh-unarchive
经过上面的步骤,插件会进入该 profile 的依赖与 patch 组合中。之后按你的 profile 启动方式重启 dsh,例如重启 dsh web。
典型用法¶
先列出,再恢复¶
最常用的流程是两步:
/unarchive
这一步列出已归档会话。
/unarchive <sessionId>
这一步恢复指定的会话,让它重新出现在 workspace 的原始位置。
通过智能体恢复¶
如果当前环境里有可用的 agent tools,可以直接让智能体操作:
把归档的会话恢复一下
智能体会调用 unarchive_session。如果你希望它先查看归档列表,就让它省略 sessionId;如果你已经知道要恢复哪个会话,就让它传入 sessionId。
适用场景与注意¶
适合谁¶
适合使用 DeepSeek Harness 的开发者或用户,尤其是遇到下面情况的人:
- 会话被归档后想恢复,但不想手动改存储。
- 希望智能体也能通过工具完成归档恢复。
- 只需要恢复展示集合,不需要改动会话日志或 workspace accounting slots。
安全与审核¶
插件会以当前 dsh 进程权限运行。安装前建议先检查源码和许可证。当前插件许可证为 MIT。
直接写路径的稳定性注意¶
当插件走直接写 workspace domain 的 archivedSessionIds global 的路径时,workspace registry 的 in-memory cache 会保持 stale,直到下一次重启。
在这个窗口内,可能会遇到两类现象:
- 刷新 GUI 后,会话再次被隐藏。
- 后续发生 archive 或 workspace 变更时,会话再次被归档。
如果你刚完成恢复,并且发现状态没有稳定下来,执行一次 dsh 重启,让 registry cache 与 durable archive set 对齐。
可选 peer dependencies¶
插件声明了以下 optional peer dependencies:
@deepseek-ai/cordis
@deepseek-ai/dsh-commands
@deepseek-ai/dsh-tools
@deepseek-ai/dsh-workspace
这些依赖是 optional 的。插件本身只需要一个 stock DeepSeek Harness profile。
结尾¶
dsh-unarchive 的价值在于给归档提供一个可控的反向入口:不删除会话,不碰 session logs,不碰 workspace accounting slots,只把会话从 archive set 移回 workspace。
GitHub 仓库:https://github.com/edfrey0044/dsh-unarchive
目录页:以当前 DSH 插件目录中的 dsh-unarchive 条目为准。