@temoa/dsh-sessions-rm
DeepSeek Harness (DSH) 的会话管理插件:在设置页列出全部历史会话,支持物理删除会话日志目录(不可恢复、输入确认防手滑、带留痕日志)。
English | 中文
功能
- 设置 → 会话管理 —
settings.section增量插槽,不替换任何内置 UI - 会话列表 — 标题、相对时间、状态徽标(运行中 / 已持久化),空白会话与异常无标题区分显示
- 输入确认删除 — 模态对话框显示会话与不可恢复警告,必须输入「确认删除」后「确定删除」才可点击(防手滑);Esc / 点遮罩 / 取消均可关闭
- 物理删除 — Host 通过
sessionPersistence.locate()定位日志,用 Node fs 直接删除整个会话目录(日志 + 会话专属附件,不经 shell / 沙箱,跨平台一致) - 留痕日志 — 每次删除请求(成功与失败)追加一行 JSON 到
~/.dsh/sessions-rm.log(时间 / sessionId / 标题 / 结果 / 路径或错误) - 主题适配 — 使用官方主题 token,跟随浅色 / 深色 / 系统
安装
方式 A — 作为包安装(dsh plugin add,无需 --patch)
直接从 GitHub 安装(pnpm 按 commit 固定版本并带完整性哈希):
dsh plugin --profile web add git+https://github.com/Temoa/dsh-sessions-rm.git由于包声明了 dsh.bundle.patch(cordis.patch.yml),reconciler 会自动把它追加到 profile 的 dsh.profile.bundles —— 插件在 PROFILE 级挂载,对该 profile 的每个会话生效。Client half 通过 dsh.client(exports["./client"])发现,Host Remote manifest 通过 exports["./typert"](dsh-typert-loader 自动注册),无需手写 patch 文件。
卸载:dsh plugin --profile web remove @temoa/dsh-sessions-rm。
> 修改插件代码后必须完整重启 harness —— 模块按进程 URL 缓存。
方式 B — 源码安装(本地开发)
git clone git+https://github.com/Temoa/dsh-sessions-rm.git
cd dsh-sessions-rm
dsh web --patch ./cordis.patch.yml依赖
包不声明 dependencies —— 运行时依赖(@deepseek-ai/cordis、@deepseek-ai/dsh-typert-protocol、@deepseek-ai/dsh-home-paths、zod)由 DSH 安装提供。两种解析方式:
1. 把 DSH 的 node_modules 符号链接到插件目录(推荐,离线可用): ``bash ln -s /path/to/dsh/node_modules node_modules ` 2. 或在插件目录 npm install(若 registry 提供 @deepseek-ai/*` 包)。
使用
打开 设置 → 会话管理:选择会话 → 点「删除」→ 在对话框中输入「确认删除」→ 确认。行消失、侧栏立即隐藏(归档)、日志目录物理删除、~/.dsh/sessions-rm.log 追加一行。
工作原理
- Host —
lib/index.js注册ctx.sessionRm(TypertRemoteService子类),暴露list/delete;lib/typert.host.js是 Typert manifest(exports["./typert"]),由dsh-typert-loader自动注册;api-gateway把sessionRm/*的 wire 调用路由到服务方法。 - Client —
lib/client.js(由scripts/build-client.js从src/client.js构建的 factory-form CJS bundle)通过ctx.remote.$mount()注册同名描述符,以ctx.remote.sessionRm.list()/delete()调用。 - 删除流程 — 拒绝运行中 agent →
workspaceRegistry.archiveSession()(归档集合让侧栏立即隐藏)→sessionPersistence.locate()→ Node fs 删除目录 → 追加留痕日志。 - 纯 JS + 手写装饰器标记 —
@Remote是 TS 装饰器;本项目通过手工构造装饰器上下文复用官方Remote()的标记逻辑(见lib/index.js的addRemote),无需 TS 工具链。
配置
无 —— 插件刻意零配置,行为全部由设计固定。
开发
npm run build:client # node scripts/build-client.js → lib/client.js
npm test # node test/index.mjs —— manifest/bundle 结构自检测试覆盖:Host 服务类结构、Typert manifest 结构(package/face/codec/invocations)、client bundle 格式。
边界与限制
- 运行中会话不可删 — DSH 无销毁 live agent 的公开 API,删除运行中会话日志会损坏运行时
- 删除不可恢复 — 日志与附件永久丢失;归档步骤让侧栏立即隐藏,内存记录在重启后消失
- 路径自校验 — 删除目标由
sessionPersistence.locate()派生并校验为绝对路径,不接受外部输入;删除与留痕日志均用 Node fs 直接执行,不依赖 shell 或部署沙箱边界(Windows 挂载 pwsh 执行器,且 dsh web 从盘符根启动时沙箱不可用) - 用户态语义 — 设置页是增量 UI,不替换内置界面,也不读取模型上下文
License
MIT