Back to home@qewregrfhnm

dsh-session-manager

Full session management plugin for DeepSeek Harness (DSH) web UI: delete/trash/restore, workspace grouping, move sessions between workspaces, unread markers, context compaction threshold. Fully local, bilingual zh/en.

Stars
0
Language
TypeScript
Created
Aug 22, 2026
Updated
Aug 22, 2026

Introduction

🗂️ dsh-session-manager

DeepSeek Harness Web 界面的一站式会话管理插件:删除(回收站)/ 恢复 / 重命名 / 导出 / 移动工作区 / 批量操作,开箱即用,不修改 DSH 核心代码

English | 中文

build release downloads license language platform dsh

✨ 功能亮点

能力说明
🗑️ 删除 / 恢复 / 彻底删除删除进入回收站(保留最近 10 条,可恢复或彻底清除);已归档会话一键恢复
✏️ 会话重命名写入官方 session/title 事件,自动标题不再覆盖,重启不丢
📥 导出 Markdown / JSONMarkdown 可读对话记录;JSON 无损完整事件日志;浏览器一键下载
📂 移动到工作区拖拽会话行到工作区标题即可移动;「移动到…」支持批量与**+新建工作区**
🔍 搜索与筛选按标题 / 目录实时过滤 + 全部 / 运行中 / 未读 / 已归档状态筛选
🔵 未读 / 已读标记手动未读、官方待输入 / 完成提醒状态点,点击就地已读
📊 活动统计每个会话的轮次 / 消息数 / 工具调用 / 活动窗口
⏯️ 继续 / 暂停 / 新聊天中继续一键继续(归档会话自动恢复后再打开)、暂停运行中回合、fork 子会话
🗂️ 工作区管理分组展示、拖拽排序、置于顶部 / 重命名 / 删除工作区
⚙️ 全局上下文压缩阈值对所有 Agent 预设统一生效,保存即时 + 持久化 + 重启自动应用

另有:对话顶部对话管理抽屉(可固定)、删除本对话、打开日志文件夹、子代理(孤儿)会话清理、中英文界面自适应。

📸 截图

截图为脱敏演示界面(会话标题与路径为示例数据)。

设置页 · 会话管理总览会话行「更多」菜单
会话管理总览更多菜单
已归档会话与回收站对话管理抽屉
已归档与回收站对话管理抽屉

📦 安装

环境要求

  • 全局安装 DSH CLI:npm i -g @deepseek-ai/dsh0.1.0-rc.6 或同代 0.1.x rc)
  • Node.js ^22.19.0 || >=24.0.0,pnpm >=9(DSH CLI 的插件管理直接转发给 pnpm)

从 GitHub Release 安装(推荐)

dsh plugin --profile web add 'https://github.com/qewregrfhnm/dsh-session-manager/releases/download/v0.4.1/dsh-session-manager-0.4.1.tgz'

最新版本见 Releases,把 URL 中的版本号换成最新 tag。

从仓库标签安装

dsh plugin --profile web add 'github:qewregrfhnm/dsh-session-manager#v0.4.1'

从本地目录 / tarball 安装

# 本地目录
dsh plugin --profile web add /absolute/path/to/dsh-session-manager
# 或先打包再安装
cd dsh-session-manager && pnpm pack
dsh plugin --profile web add /absolute/path/to/dsh-session-manager-0.4.1.tgz

手动安装(dsh plugin 不可用时的后备方案)

dsh plugin 只是在 profile 目录里转发给 pnpm 并同步 dsh.profile.bundles。手动做法:

cd ~/.dsh/profiles/web
pnpm add <上面的包说明>
# 然后在 package.json 的 dsh.profile.bundles 数组追加 "dsh-session-manager"

安装完成后重启 dsh web(host 插件与客户端 bundle 在启动时加载)。

🚀 使用指南

设置页 · 会话管理

  1. 打开侧边栏底部 设置 → 左侧导航 会话管理
  2. 主列表为未归档会话,按工作区分组;底部折叠区为已归档会话回收站
  3. 行内仅保留 删除 按钮;其余操作收进「更多」菜单: 继续会话(归档会话会自动恢复再打开)/ 暂停 / 恢复 / 新聊天中继续 / 重命名 / 导出 Markdown / 导出 JSON / 统计 / 文件夹 / 移动到…
  4. 顶部搜索框 + 状态筛选(全部 / 运行中 / 未读 / 已归档)快速定位
  5. 拖拽会话行到工作区标题上直接移动;勾选多行后可批量移动 / 批量删除
  6. 工作区标题悬停出现 置于顶部 / 重命名 / 删除

重命名与导出

  1. 会话行「更多」→ 重命名:输入新名称确认,标题立即更新(侧边栏同步)
  2. 「更多」→ 导出 Markdown:下载可读对话记录(轮次 / 用户 / 助手 / 工具调用与结果)
  3. 「更多」→ 导出 JSON:下载无损完整事件日志(会话头 + 全部事件,含 seq/time)

把会话移动到其他工作区

  1. 找到会话 →「更多」→「移动到…」→ 选择目标工作区;或直接把会话行拖到工作区标题
  2. 日志文件夹、会话头工作目录与工作区记账同步更新,重启不丢
  3. 「移动到…」菜单里的 +新建工作区(会话所在目录) 可把未注册路径的会话登记为新工作区

限制:正在运行 / 已加载(live)的会话不能移动——先暂停或重启 dsh web 卸载后再移动。

通用设置 · 上下文压缩阈值

设置 → 通用设置:设置对话上下文用到模型窗口的多少比例时自动压缩(17%–90%),每次压缩保留最近 16% 原文;对所有 Agent 预设的会话统一生效,保存即时生效并持久化。

对话顶部快捷入口

任意对话页右上角:对话管理(抽屉,可图钉固定)、回收站删除本对话(红色)。

🔧 工作原理

实现
Hostsrc/index.ts 注册 10 条路由:POST /deletePOST /restorePOST /purgeGET /trashPOST /open-folderPOST /pausePOST /move-workspace、`GET
Clientsrc/client/index.ts 通过官方 settings.section 插槽注册分栏;useSessions / useWorkspaces 标准数据源;抽屉经 sessions.list(ObservableSnapshot)实时订阅;彻底删除的会话 id 记在 localStorage 防止刷新「复活」
  • 重命名:标题即日志中的 session/title 事件(官方 @deepseek-ai/dsh-session-title,来源 user 钉住标题);冷会话由 host 自算续接 seq(兼容打包分片行)追加事件帧,并写入官方持久投影缓存(session_projcache),列表与侧边栏即时更新
  • 导出:官方 sessionPersistence.inspect 拿到解码后的平衡事件视图(打包分片行已还原、损坏尾部不进入);构建器为纯函数模块 src/export.ts(含单测)
  • 移动到工作区:改写 zstd 日志首帧(只含一行会话头,cwd 更新为目标路径),事件帧原样保留;目录改名搬入目标工作区后写回新文件,最后更新工作区记账(detachSession + attachSession);任一步失败都会先改回目录名再恢复原始字节,绝不先删后移
  • 已归档会话「继续会话」:官方工作区投影会在当前会话仍归档时清空选中,因此先自动恢复(取消归档)+ 刷新工作区基线,再打开
  • 未读机制:手动未读集存于共享 localStorage key dsh.session-unread.v1,与其他会话管理插件互通;官方状态点(琥珀 / 绿色 / 转圈)由 pendingInteraction / completed / running 驱动
  • 压缩阈值全局生效:存于存储域;默认预设为用户预设时同步写入其 agent.cordis.yml(系统预设保持只读);host 在 agent/pre-step 钩子写入所有压缩引擎配置
  • 回收站条目持久化在 ~/.dsh/storages/dsh_delete_session.json,文件在 ~/.dsh/dsh-delete-session-trash/
  • 无系统提示词改动、无模型工具新增,对 token 与模型行为零影响

🔒 隐私与安全

  • 完全本地运行:所有操作只读写本机 ~/.dsh 下的文件与浏览器 localStorage,没有任何遥测、统计上报或网络请求
  • 移动 / 导出 / 重命名只是操作本机日志与元数据,不会上传任何内容
  • 插件不修改 DSH 核心代码,卸载插件不影响已有会话

⚠️ 限制

  • 不能删除正在运行的会话(按钮禁用并拒绝删除)
  • 不能移动正在运行 / 已加载(live)的会话
  • 子代理会话可删除(非运行中),包括主会话已删除的「孤儿子代理」
  • 已彻底删除的会话 id 会保留在浏览器 localStorage 与归档集合中(无害残留,防止刷新「复活」)
  • 侧边栏未读点按标题文本匹配,重复标题会共享该点(面板 / 抽屉内按真实 id 精确标记,不受影响)

📄 兼容性

  • 适配 DSH 0.1.0-rc.6(使用 settings.section / settings.general.item / conversation.session.header.utilities 插槽与 ctx.sessionPersistence / ctx.workspaceRegistry / ctx.agents / ctx.storageDomain / ctx.agentPresets 服务)
  • 运行时 @deepseek-ai/* 包由 DSH host 提供(从全局安装解析)
  • DSH 升级后如插槽或服务 API 变化,可能需要适配

🛠️ 开发

pnpm install        # 依赖来自 npm 注册表,任何机器可直接构建
pnpm run check      # typecheck + 单测 + 构建
pnpm pack           # 产出 dsh-session-manager-<version>.tgz(用于 GitHub Releases)
  • lib/ 为已提交的构建产物——改动源码后请重建并提交(github: 方式安装无需构建步骤)
  • 每次 push / PR 由 GitHub Actions 自动执行 pnpm run check(构建徽章实时反映状态)
  • 更新日志见 CHANGELOG.md

🤝 贡献与许可

  • 欢迎 Issue / PR:功能建议、缺陷报告、翻译改进
  • 本插件 fork 自 dream12347/dsh-session-manager(MIT),在此致谢原作者
  • 基于 MIT License 发布,版权归 dsh-session-manager contributors