Skip to content

dsh-session-manager

Verified

@sunshaobei/dsh-session-manager · v3.1.6 · MIT · Web UI

DSH 会话回收站:会话详情归档入口、回收站多选还原/彻底删除、活跃会话保护。 · Session trash & permanent delete for DeepSeek Harness.

Install

dsh plugin add @sunshaobei/dsh-session-manager

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Tags

Creators

Readme

dsh-session-manager

DSH 会话回收站与彻底删除插件(DeepSeek Harness)。

会话详情头部一键移入回收站,设置页多选还原/彻底删除,活跃会话安全拦截。

界面会自动跟随浏览器语言:中文区域显示中文,其他区域显示英文。

English | 中文


✨ 功能特性

  • 会话详情头部归档按钮 — 会话页顶部一键把当前会话移入回收站(免确认,随时可找回)。
  • 不与 DSH 自带入口重复 — 侧边栏会话行的归档入口统一使用 DSH 自带的悬浮归档按钮;本插件不再注入第二个、措辞不同的图标(0.4.4 起移除了旧的行内垃圾桶,并去掉了驱动它的全文档 MutationObserver)。
  • 回收站管理器(设置 → 🗑 会话回收站)— 已归档会话多选:批量还原、批量彻底删除;条目显示 ID 与路径。
  • 真正的彻底删除 — 物理清除磁盘日志与投影缓存;无日志的幽灵会话被彻底清理,不会残留。
  • 活跃会话保护 — 正在运行(有活跃 agent)的会话拒绝删除。
  • 子会话可见可控 — 每行可显示该会话留下的子代理会话数量(任意层级全树),并可就地展开:标题、大小、时间、运行状态,逐个勾选。彻底删除会一并清除整棵子树;未勾选的会保留,并以「已删除的主会话 · 保留 N 个子会话」的形式继续可见,而不是变成看不见、够不着的残留。
  • 运行中的子代理会拦住删除 — 只要该会话的子树里还有子会话在运行就拒绝删除,并点名是哪一个。
  • 批量容错 — 批量操作逐条执行,收集并汇报失败项。
  • 浅色/深色自适应界面 — 所有颜色以 CSS 变量(设计令牌)收敛在 client.css,组件优先跟随 DSH 应用外观(data-ds-dark-theme),并以 prefers-color-scheme 作为系统级兜底,无硬编码色板。界面与代码文字同样跟随 DSH 全局字体(--dsw-font-family / --ds-font-family-code),「设置 → 字体」对本插件同样生效。

📋 环境要求

  • DSH 0.2.0-rc.2 及以上(本版仅在该版本上测试通过;更低版本未测试)。

    回收站列表的标题与轮数不再读取会话日志,而是取自会话投影缓存(SessionProjectionCache.cachedSnapshot,以及为跨格式代际准备的 cachedPredecessorTitle)——这正是 DSH 自身会话列表使用的零 I/O 门面。缺少这两个方法的旧宿主上,插件仍能挂载、归档与还原,但列表会退化为「未命名会话」且不显示轮数。

    该下限以 dsh.engines.dsh 声明。注意:DSH 0.2.0-rc.2 并不读取该字段,因此它是给用户与插件市场看的文档性声明,不是运行时强校验。


📦 安装

从插件市场一键安装(dsh-market)

收录进 awesome-dsh-plugin 注册表后:打开 设置 → 插件市场 → 搜索 dsh-session-manager → 安装。

手动安装

dsh plugin --profile web add dsh-session-manager

安装完成后重启 Web 服务(停止 dsh web 进程后重新启动)。

本地开发安装

dsh plugin --profile web add link:/绝对路径/harness-session-delete

卸载

dsh plugin --profile web remove dsh-session-manager

🚀 使用说明

  1. 移入回收站 — 在会话页顶部点「移入回收站」图标:会话进入回收站,并弹出可撤销提示。归档后的会话是否仍显示在左侧列表,由 DSH 侧边栏「视图选项 → 筛选会话」的档位决定(隐藏已归档 / 全部对话 / 仅显示已归档),本插件不做干预,与 DSH 自带按钮行为一致。
  2. 设置页回收站 — 打开「设置 ⚙️ → 🗑 会话回收站」:
    • 复选框多选 → 还原(批量解除归档)或 彻底删除(批量清除)。
    • 每个条目显示会话名、ID 与工作路径(悬浮查看完整信息)。
  3. 彻底删除 物理清除日志与投影缓存;活跃会话受保护。
  4. 撤销 — 还原操作带撤销提示,可重新归档。

🛠 开发

pnpm test          # 运行测试套件(host 逻辑 + HTTP 路由层)

仓库结构:

harness-session-delete/
├── package.json            # 单包 bundle 声明(dsh.bundle.patch + dsh.client)
├── cordis.patch.yml        # bundle patch:一行 insert 挂载 host 行
├── index.js                # node 半边:host 入口(inject + apply)
├── client.js               # browser 半边:会话头部动作 + 设置页回收站
├── client.css              # 插件样式表:设计令牌 + 浅色/深色自适应组件
└── packages/
    └── session-trash-host/ # host 实现(persistence/workspace/cache 补丁、HTTP 路由)

更新日志规范

CHANGELOG.md 与 CHANGELOG.zh.md 一一对应。每条按下面写:

  • 版本段用 ## [版本] - YYYY-MM-DD,其下只列实际涉及的 ### Added / ### Changed / ### Fixed / ### Performance / ### Removed。
  • 每条一个主题:加粗短句点明结论,随后 1–2 句说明「改了什么 + 为什么、对用户有什么影响」。
  • 不写实现细节、不贴代码、不写测试或验证过程 —— 那些属于 commit / PR。
  • 只写用户可感知或破坏性的变化;纯内部重构若无可见影响则不写。

🔌 工作原理

  • 单包 bundle 同时覆盖两端,与其它已发布插件一致:host 半边由 cordis.patch.yml 挂载;浏览器半边经 dsh.client + exports["./client"] 自动进入模块图。
  • 浏览器通过插件自身的 /api/session-trash/* HTTP 路由与宿主通信(webserver 注册;非 GET 请求携带 x-dsh-plugin CSRF 头)。

📄 许可证

MIT