全部插件

DSH / BUNDLE / CLIENT-UI

dsh-delete

v0.1.0Hyna-hla / DSH-DELETEaea404b2bb

可安装组合包UI 与客户端插件社区 · Topic 自动分析Web UI

概览

dsh-delete

DSH-DELETE: recoverable conversation deletion for DeepSeek Harness — a session menu item and /delete-conversation command that queue deletions, hide sessions immediately, and move logs to a recoverable trash on restart

README / ZH

插件文档

DSH-DELETE

English | 中文

面向 DeepSeek Harness 的可恢复对话删除插件:在会话行 菜单中添加「删除对话」,并注册人工命令 /delete-conversation。用户确认后,目标 Session 进入删除队列,立即通过 Workspace 的持久归档投影从列表中隐藏;DSH 下次启动时,插件会在 Web Workspace 建立会话索引之前校验该 Session 的完整生命周期,并把其日志目录原子移动到可恢复垃圾箱。

代码源自 omdsh-dev/dsh-essential(MIT,Copyright (c) 2026 ExDragine)。本仓库将包名/Remote ID/UI 类名统一重命名为 dsh-delete,并为 stateDir 增加了默认值(~/.dsh/conversation-trash),使插件市场一键安装无需手写配置。

为什么删除是两阶段的

当前 DSH 的 Session 持久化约定是只追加的,公开服务没有删除方法;活动 Agent 的销毁句柄只属于创建者。插件不能安全地从活动写入者脚下移走日志。因此删除分两阶段:当前进程只写入一条持久请求并立即隐藏会话行,下一次启动在任何会话恢复之前完成日志移动。这个边界避免日志重建、部分写入和生命周期竞争。

安装

方式一:DSH 插件市场(推荐)

本仓库自带构建产物(lib/),市场可一键安装,无需构建、无需填写配置:

  1. 打开 DSH Web GUI → 设置 → DSH插件市场
  2. 搜索 DSH-DELETE,点「安装」
  3. 重启 DSH

方式二:官方 bundle 安装

node /path/to/DSH/apps/cli/lib/bin.js plugin --profile web add /path/to/DSH-DELETE

安装后重启 DSH。Bundle 会挂载 dsh-delete,并让 Web Workspace 等待 conversationDeletion 服务完成启动恢复后再建立 Session 索引。

方式三:直接写 cordis.patch.yml

- insert:
    - id: dsh-delete
      name: dsh-delete
      config:
        stateDir: /absolute/path/to/conversation-trash
- id: workspace
  inject: [conversationDeletion]

stateDir 必须是绝对路径且位于 Session 工件目录之外;缺省时使用 ~/.dsh/conversation-trash

使用

  • 在会话列表中打开目标会话右侧的 菜单,选择「删除对话」。确认卡片为站内 UI(标题「确认删除该对话吗?」,操作「取消 / 删除对话」),不用浏览器原生弹窗。
  • 删除请求成功后立即归档该 Session,使其从所有会话分组中隐藏(完全成功时行消失即为反馈)。
  • 若删除请求已写入但归档接口失败,卡片会提示「已加入队列但暂时无法隐藏」,不会误报为删除失败。
  • 人工命令:/delete-conversation CONFIRM(删除当前对话);/delete-conversation <session-id> CONFIRM(按 Session id 删除其他对话)。

确认成功后重启 DSH,日志被移至 <stateDir>/trash/<session-lifecycle-key>/。目录中的 deletion.json 记录原目录。

恢复

先停止 DSH,删除恢复目录中的 deletion.json,再把该目录移回 originalDirectory。不要在 DSH 运行时恢复。

配置

字段 类型 默认值 说明
stateDir string ~/.dsh/conversation-trash pending 请求与恢复垃圾箱所在目录;必须为绝对路径且位于 Session 工件目录之外
commandName string delete-conversation 人工命令别名(不带 /);菜单始终使用稳定的 /delete-conversation

安全与恢复语义

  • 命令要求字面量 CONFIRM,缺少确认不会写入请求。
  • 请求绑定 sessionIdcreatedAtcwd;id 被复用时不会删除新的 Session 生命周期。
  • 移动前再次比较持久化列表、backend location 与完整 inspect 结果。
  • 产品删除使用同一文件系统内的目录 rename,不 unlink Session 日志;移动后崩溃也可恢复。
  • 验证或移动失败时保留 pending 请求并记录错误,原日志不动。
  • 仅支持逐 Session JSONL backend:SQLite 没有独立 artifact location,插件会明确拒绝。
  • 不永久擦除:日志进的是可恢复垃圾箱,保留期与最终清理属于部署管理员策略。

开发构建

要求 Node ^22.19.0 || >=24.0.0(tsdown 依赖 Promise.withResolvers)。Windows 上确保构建用的 Node 22+ 在 PATH 首位:

pnpm install
pnpm add -D -w unrun   # tsdown 的可选 peer,pnpm 的 autoInstallPeers=false 下必须显式安装
pnpm run build
pnpm run verify:self-contained
pnpm run typecheck
pnpm test

许可

MIT。原始版权归属 dsh-essential(Copyright (c) 2026 ExDragine),详见 LICENSE