会话删除(5 秒可撤销 + 回收站)与归档视图(查看、取消归档)。npm 包名 `@wsxwj123/dsh-session-manager`。
安装
# npm 包(预构建)
dsh plugin --profile web add @wsxwj123/dsh-session-manager
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:wsxwj123/dsh-plugins#path:/packages/dsh-session-manager
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。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
给 DeepSeek Harness Web GUI 补上会话管理能力:删除会话(5 秒可撤销 + 回收站式硬删)和归档视图(查看已归档会话 + 取消归档)。纯插件实现,不改官方源码。
功能
删除会话(5 秒可撤销)
- 悬停会话行,右侧出现删除按钮(SVG 垃圾桶图标,跟随官方悬停显隐)。
- 点击删除 → 会话立即从列表隐藏,顶部弹出撤销条并倒计时 5 秒。
- 5 秒内点「撤销」→ 会话恢复原位,不执行删除。
- 倒计时结束 → 会话文件移入回收站(
~/.dsh/session-manager-trash/),可恢复。 - AI 正在回复/跑任务的会话:删除时先弹确认「会话正在运行任务,确认删除?」;空闲会话直接删除。
- 支持连续删除多个会话,每个独立撤销条。
归档视图
- 侧栏底部「归档」入口,打开归档视图,列出所有已归档会话。
- 每个归档会话可「取消归档」(回正常列表)或「删除」(走同一撤销/回收站流程)。
- 归档视图页脚「清空回收站」:永久删除回收站中的会话(二次确认,不可撤销)。
- 点击空白处自动收起归档视图。
安装
插件装进 DSH 的 web profile(dsh web 对应 web profile)。
从 dsh-market / GitHub 安装
包内已声明 prepare 构建脚本;pnpm 从 Git 安装时会自动执行 node build.mjs 生成 lib/。pnpm 10+ 默认拦截依赖的构建脚本,按 dsh-market 的提示把 pnpm 打印的 key 加入 profile 的 pnpm-workspace.yaml 的 allowBuilds 后重试即可。
# dsh-market 目标与此等价:
dsh plugin --profile web add "github:wsxwj123/dsh-plugins#path:/packages/dsh-session-manager"
从本地源码 link 安装
lib/ 不入库,本地源码安装需要先构建:
cd dsh-plugins
pnpm install # 装依赖
node build.mjs # 或 pnpm -r build:生成 packages/dsh-session-manager/lib/
dsh plugin --profile web add "link:$PWD/packages/dsh-session-manager"
装完重启 dsh web,刷新当前 URL 即可看到侧栏「归档」入口和会话行的删除按钮。
装完务必检查
~/.dsh/profiles/web/node_modules/@deepseek-ai/是否被 pnpm 复制成物理目录(会导致核心包 Symbol 分裂、所有工具调用报错)。若是真目录,mv走它让插件回退到 fallback symlink,再重启。详见 deepseek-harness discussion #783。
工作原理
- 双端插件:client(浏览器 React,DOM 注入删除按钮/撤销条/归档视图)+ node(host 侧 cordis 插件,
/sm/*HTTP 路由 + 文件移动 + 归档域写入)。 - 删除 = 延迟提交:点击后先本地隐藏 + 倒计时,倒计时结束才调
/sm/delete把会话目录移入回收站。撤销窗口内存活在模块作用域,不随面板切换丢失;刷新页面只丢内存队列、不真删(数据安全)。 - 路径解析:host 用 live Session 的
header.cwd(权威元数据)做projectKey/encodeSegment编码定位会话目录,不依赖客户端快照里可能缺失的 cwd。 - 信任边界:
/sm/*路由挂载带 loopback 信任 fence(非本机 Host / 跨源 / 非同源 Origin 一律 403);清空回收站需confirm:true。
边界与已知限制
- 删除只把会话目录移入回收站(软删除),不立即销毁磁盘内容;「清空回收站」才是不可撤销的硬删。
- 回收站不会自动过期清理:
/sm/trash给出deletedAt(真实删除时间)与deadline = deletedAt + 30 天,deadline只是"可以考虑清理了"的参考值,到点不会 自动删任何东西——自动销毁会话数据正是回收站要消除的风险。清理入口只有用户手动 「清空回收站」(或单条「恢复」)。 - 会话文件移走后,host 的会话注册表不会自动移除该条目——插件在 client 侧用 localStorage 持久化"已删除 id"保持列表隐藏;host 重启后重新扫描磁盘,会话彻底消失。
- macOS 优先;Windows 路径语义(盘符/UNC/保留设备名/大小写不敏感)已在代码里做判定,但未在 Windows 真机跑过全套测试。
- 归档/取消归档复用 DSH 官方的 archive set 机制。
- 「取消归档」当场生效、刷新可能回滚(已知限制):DSH 没有对外暴露 unarchive
接口,插件只能直接写
workspace存储域。而官方dsh-workspace的归档集是 启动时读一次的内存缓存、且不监听域变更,所以:活着的页面会即时更新(apiproxy 监听domain/changed),刷新页面或下一次官方归档写入会把该会话又标回已归档。 磁盘上的域文件是正确的——重启dsh web后以磁盘为准。要彻底修需要上游提供 unarchive API 或让dsh-workspace监听域变更。
License
MIT
链接
同类插件
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 账号。