从 Web GUI 侧栏查看已归档会话,并一键恢复到原工作区。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:dylan121322/dsh-session-unarchive
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
为 dsh Web GUI 增加「已归档」视图与「恢复会话」功能,采用纯 Cordis 插件实现(host 端 + client 端),零文件补丁 —— 不写入 dsh 安装目录任何文件,因此 dsh 升级不会覆盖本插件。
功能
- 侧栏底部(设置按钮旁)新增「已归档」按钮,显示已归档会话数。
- 点击弹出面板,列出全部已归档会话,支持标题过滤与逐条恢复。
- 恢复后会话回到原工作区原位;面板与内置侧栏通过 dsh 的
host/archived-sessions-changed事件自动刷新。 - 支持中英文案。
安装
cd "$DSH_HOME/profiles/web" # 例如 ~/.dsh/profiles/web
# package.json 的 dependencies 增加:
# "dsh-session-unarchive": "file:plugins/session-unarchive"
# cordis.patch.yml 的 insert 增加:
# - id: session-unarchive
# name: dsh-session-unarchive
pnpm install
# 重启 dsh,刷新浏览器
如需
dsh plugin add方式安装本仓库,dsh plugin add github:dylan121322/dsh-session-unarchive也可用;本地file:形式最稳妥。
原理
插件包内两个文件:
| 文件 | 作用 |
|---|---|
index.js |
Host 端插件(apply(ctx) + inject: ["webServer","workspaceRegistry"]),在 webServer 注册两个 HTTP 路由:POST /api/session-unarchive/restore 与 GET /api/session-unarchive/list。 |
client.js |
Client 端预构建浏览器 bundle(window.__ModuleLoader__.load({ id, factory })),注册 sidebar.footer.action 附加位(replaceRisk: none)承载「已归档」按钮与面板。 |
不补丁如何实现恢复:dsh 的归档是单向的——会话 id 记入 ~/.dsh/storages/workspace.json(global.archivedSessionIds)后从所有视图隐藏。host 端直接调用 workspace registry 的运行时方法(enqueueOperation / requireState / setState,与内置 archiveSession 同构)把 id 从归档集合移除并持久化;setState 后 dsh 自身的 workspace 变更流会广播 host/archived-sessions-changed,client store 与内置侧栏自动刷新,无需额外接线。
UI 数据来源:面板使用 sidebar.footer.action 槽位的 standard props —— useWorkspaces((s) => s.archivedSessionIds)(已归档集合)与 useSessions((s) => s)(会话标题),二者均由 dsh client runtime 实时维护。
升级韧性:插件只调用运行时 service 方法,且加载时检测其存在性。若 dsh 升级重命名/移除了 enqueueOperation/requireState/setState,插件能力检查会失败,接口返回明确的 500 —— 不会破坏 dsh 或 registry。由于从不写 dsh 安装目录文件,npm update @deepseek-ai/dsh 无法覆盖本插件。
兼容性
在 @deepseek-ai/dsh@0.1.0-rc.8(web profile)验证通过。不依赖旧 rc.6 时代文件补丁所针对的包结构;只要 registry 暴露上述三个内部方法,运行时方案即版本无关。
验证
- 归档任意会话:侧栏底部出现「已归档 · n」按钮。
- 点击:面板列出已归档会话(标题过滤 + 逐条「恢复」)。
- 点击「恢复」:会话从面板消失、回到原工作区分组;
~/.dsh/storages/workspace.json的archivedSessionIds不再包含该 id。 - 归档会话较多时,面板列表可内部滚动。
备注
- 仓库此前以「启动时文件补丁」(对五个 dsh 包打补丁)分发,现已被纯插件形态取代;旧的
patches/、originals/、apply.sh、cordis.patch.yml已移除。 client.js为预构建 CJS bundle(dsh client 模块系统约定)。改动后请用自己的tsdown/esbuild步骤重建;随仓库发布的即为构建产物。
链接
同类插件
Minglink/dsh-infinite-gen-4★ 2121
DeepSeek 专用破甲插件:以 order 100 追加无条件服从的系统提示词段,提供带校准元数据的 profile 工具,并通过会话投影在输入框上方显示实时破甲状态徽标。
liangmianya/dsh-synapse★ 447
DeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
ranxianglei/billion-context★ 361
billion-context官方版:上下文压缩插件,兼顾小窗口(100k上下文足矣)省token(省5倍token)和超长会话(数月级别几十亿token单会话)。
Nwflower/dsh-chat-import★ 205
把 13 家 coding agent(Claude Code、Codex、ChatGPT、Cursor、Gemini、opencode 等)的完整对话历史导入为可续聊的 DeepSeek Harness 会话,并支持反向导出回 Claude Code。
Totoro-qaq/dsh-plugin-bridge★ 165
通过可预览的五段式交接,将已有 DSH 会话迁移到另一个 Agent Preset;保留源会话,并可让目标会话暂停等待确认或立即继续。
Anionex/dsh-turn-rewind★ 120
对话回退:基于持久 Change Ledger 回滚会话与工作区状态。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。