QQQW114/dsh-archived-sessions ↗★ 0
dsh-archived-sessions
DeepSeek Harness (DSH) plugin — list, restore, and permanently delete archived sessions from the Web UI.
安装
此插件尚未提供可验证的 bundle,或兼容性检查未通过。请先阅读仓库说明。 阅读完整 README ↗
说明文档
阅读完整 README ↗dsh-archived-sessions
一个 DeepSeek Harness (DSH) 插件:在 Web UI 的「设置」面板里查看、恢复、以及彻底删除已归档(隐藏)的会话。
为什么需要它
DSH 的会话右键菜单有「归档会话」,但当前版本(0.1.0-rc.6)没有查看或恢复已归档会话的入口——dsh-client-ui-workspace 的 README 原文是 "No Session deletion or unarchive control"。归档之后会话从侧边栏消失,且没有内置办法找回来。
本插件补上了这个能力,并且在「设置 → 已归档会话」里提供三个操作:
- 列出:显示每个已归档会话的标题、所属工作区、会话 id。
- 恢复:把会话从归档集合移除,立即回到侧边栏。
- 彻底删除:二次确认后,从归档集合移除、从工作区会话清单
detachSession、并删除本地日志文件(session.jsonl.zstd,不可恢复)。
所有操作都走宿主的持久化写入,会触发 domain/changed → 前端实时刷新,无需重启。
特性
- 零构建:纯 JavaScript,不需要 TypeScript / tsdown / typert-generator。
- 宿主侧走 Typert 网关的 SRC 模式:只靠
typertRemote绑定 +Remote方法标记即可被自动发现,无需手写 manifest。 - 客户端
dsh.clientbundle 挂载TYPERT_REMOTE后,用ctx.remote..()调用宿主,codec 只需一个{ parse(value) }对象(不依赖 zod)。
目录结构
dsh-archived-sessions/
├── package.json # dsh.client 声明 + exports
├── lib/
│ ├── index.js # 宿主侧:ArchivedSessionsService(list / restore / removeSession)
│ └── client.js # 浏览器侧:挂载 Remote + 注册 settings.section 页面
└── README.md
工作原理
宿主侧(lib/index.js)
ArchivedSessionsService 继承 @deepseek-ai/dsh-typert-protocol 的 TypertRemoteService,其构造器会自动设置 typertRemote 绑定({ service, serviceKey, namespace })。
因为纯 JS 无法在调用点产生 TC39 stage-3 装饰器的 context.addInitializer,这里手工构造了装饰器上下文并调用 Remote(name),把方法标记注入 remoteMethods() 读到的私有 marker 表。Typert 网关的 SRC 发现据此把 archivedSessions/list、archivedSessions/restore、archivedSessions/removeSession 三个端点路由到本服务的方法。
关键点:
- 服务通过
inject: ["workspaceRegistry", "sessionQuery", "sessionPersistence"]拿到宿主能力。 restore用workspaceRegistry.setState()把 id 从archivedSessionIds里去掉(持久化 + 更新内存缓存)。removeSession额外用workspace.detachSession(id)从工作区清单移除,并用sessionPersistence.locate(header)找到日志文件路径后 的 删除。