dsh-unarchive:在 DeepSeek Harness 中恢复已归档会话

前言

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 条目为准。

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

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

Xiaoye