DeepSeek Harness 插件

dsh-unarchive

Restore archived sessions in the DeepSeek Harness: a /unarchive command and an unarchive_session tool that remove sessions from the registry-global archive set so they reappear in the workspace.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
edfrey0044/dsh-unarchive
最近更新
2026年8月16日
分类
工具与能力
GitHub stars
1
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/edfrey0044/dsh-unarchive
插件名:dsh-unarchive
作者:edfrey0044

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器4 个文件
README.zh.md来源说明 · 只读预览
README 语言

dsh-unarchive

English | 中文

DeepSeek Harness 恢复已归档的会话。归档只会把会话从所有分组视图(工作区分组、未分组、平铺列表、搜索)中隐藏,从不删除数据。这个插件补上了缺失的逆操作:两个入口把会话从注册表级全局归档集合中移除,让它在原位置重新出现。

提供的入口

入口位置行为
/unarchiveGUI 命令面板(/ 菜单)或任意命令入口不带参数列出归档会话(id + 尽力而为的标题);带会话 id 则恢复该会话
unarchive_session模型工具(任意会话可用)省略 sessionId 时列出归档会话;传入 sessionId 恢复一个

两个入口都能让会话在所有已连接的 GUI 客户端里实时恢复(host/archived-sessions-changed),且重启后仍然生效。会话日志和工作区记账席位完全不受影响。

要求

除标准 DeepSeek Harness profile 外无额外要求。插件是自包含的:

  • 当所在构建提供 workspaceRegistry.unarchiveSession 时,走这条持久化核心 API;
  • 否则直接写入 workspace 域的 archivedSessionIds 全局数据——这正是 archiveSession 读写的那份持久化、可实时刷新的数据。

自包含模式的已知限制: 直接写域会让 workspace 注册表的内存缓存陈旧,直到下次重启。在此之前,会话会实时恢复显示,但(a)刷新页面会再次隐藏它,(b)再做归档/工作区变更可能把它重新归档。重启 dsh 后即完全恢复正常。

安装

以 profile bundle 方式安装(推荐),在本仓库检出目录执行:

dsh plugin --profile web add github:edfrey0044/dsh-unarchive
# 或发布到 npm 之后:
dsh plugin --profile web add dsh-unarchive

重启 dsh web(或你的 profile)。由于本包声明了 dsh.bundle.patch,补丁层会自动加入 profile 的层栈。

手动组合:在 profile 的 cordis.patch.yml 中加一行,并把包安装进 profile:

# ~/.dsh/profiles/<name>/cordis.patch.yml(向 profile 根插入一条)
- insert:
    - id: dsh-unarchive
      name: dsh-unarchive
cd ~/.dsh/profiles/<name>
pnpm add github:edfrey0044/dsh-unarchive

用法

先看归档了哪些会话,再恢复:

/unarchive
Archived sessions:
- session-0a701da0-449d-4997-bf87-a4b6aae7ceee  (张雪峰谈2026文科女生报考西财中外学院)
- session-b96a78f1-b6bf-439b-9570-c054307e6adb  (张雪峰视角:西财中外合作报考建议)

/unarchive session-0a701da0-449d-4997-bf87-a4b6aae7ceee
Session session-0a701da0-449d-4997-bf87-a4b6aae7ceee restored; it is visible again in the workspace at its original position.

英文演示(GUI 命令面板里的 /unarchive):

![dsh-unarchive 演示](assets/demo.png)

也可以直接在任意会话里对 agent 说"把归档的会话恢复一下",模型会替你调用 unarchive_session

会话 id 也存在于磁盘:~/.dsh/sessions/<项目>/<会话id>/(或 $DSH_HOME/sessions/...),归档集合本身在 ~/.dsh/storages/workspace.jsonglobal.archivedSessionIds

工作原理

归档时会话在 workspace 记账中的 sessionIds 席位保持不变,只做一次"展示集合"写入把 id 放进 archivedSessionIds;取消归档就是逆写入,所以会话会回到原位置。

当构建提供核心 API(WorkspaceRegistry.unarchiveSession)时插件优先走它;在标准构建上则通过 ctx.storageDomain 直接写 workspace 域的 archivedSessionIds 全局数据。该写入是持久化的,并会发出 domain/changed,宿主据此向所有已连接客户端推送 host/archived-sessions-changed。自包含路径的唯一限制是注册表的内存缓存(见上文"要求")。

开发

实现是纯 ESM(lib/index.js)+ 手写类型声明,无构建步骤。

  • npm test:基于桩的单元测试(假注册表,不启动 DSH)。
  • 端到端验证:在真实 harness 检出里挂载插件 + 真实 storage-domain/workspaceRegistry,用临时世界驱动捕获的命令处理器。场景结构见 tests/

许可证

MIT