dsh-session-manager-next:在 DSH Web UI 里浏览、导出与整理会话历史

前言

用 DeepSeek Harness(DSH)做智能体或长对话开发时,会话会落在本机 sessions 目录里,侧边栏能置顶、重命名、归档,却没有统一的「管理台」:批量导出、按条件筛选、清理空会话、在确认后删除目录,往往要自己动手翻文件或写脚本。DSH 0.2.1-rc.2 的 Host API 同样没有会话删除接口,导出格式也需要自己拼。

维护者 fan20yong 的 dsh-session-manager-next(npm / 插件包名仍为 dsh-session-manager)是针对 0.2.1-rc.2 重写的 Cordis 插件:在 Web UI 提供整页会话管理,并经由 Host 路由完成导出、整理与安全删除。思路参考社区项目 huajuan2024/dsh-session-manager(面向 0.2.0-rc.2),本仓库在其基础上扩展并适配新版本。

这是什么

一句话:DeepSeek Harness 会话管理插件——在 Web UI 里浏览历史对话、导出为 Markdown / JSON / HTML、整理会话(重命名、置顶、归档等),并在多重确认与校验后删除会话数据。

插件不向模型上下文注入内容,也不新增 session event;Client 只通过同源 /api-session-manager/* 与 Host 交换 JSON。

核心功能

对话导出

格式 内容 适用
Markdown 用户 / 助手消息、思考过程(折叠)、工具调用与结果(代码块)、轮次统计 归档、分享、二次编辑
JSON 完整原始事件日志 + 会话 header + 统计(dsh-session-export v1) 备份、程序处理、迁移
HTML 单文件、自带样式与深色模式、可直接双击打开 阅读、发给别人

单会话导出:侧边栏会话「…」菜单 → 导出对话…,或管理面板右侧详情里的三个导出按钮。批量导出:勾选多个会话 → 导出所选 Markdown / JSON(合并为一份文件)。文件名自动带标题、会话 ID 尾段与日期。

Markdown / HTML 默认省略 Harness 注入的运行时上下文(如 Current runtime context.、<system-reminder> 等),并在文件头注明省略条数;JSON 保留全部事件。批量导出 HTML 会退化为 Markdown(单会话 HTML 完整支持)。

整理会话

  • 重命名标题:走 Host 的 sessionController.rename,durable 写入 session event,不只是本地显示。
  • 置顶 / 取消置顶、归档 / 取消归档:走 workspaceRegistry,与侧边栏状态一致。
  • 强制归档:会话仍在活动时,可停止其运行并归档。
  • 搜索 / 筛选 / 排序:按标题、工作区、会话 ID 搜索;筛选活跃 / 全部 / 空会话 / 已归档 / 已置顶;按最近更新 / 创建时间 / 标题排序。
  • 清理空会话:一键筛出 blank 会话并批量删除。

删除会话

单个删除(详情页二次确认)与批量删除(勾选后确认)。安全护栏包括:

  1. 运行中的会话直接拒绝(先停止再删)。
  2. 仍被内存中 Agent 占用的会话需二次确认「强制删除」。
  3. 删除后同步清理工作区登记(detachSession)与归档 / 置顶集合。
  4. 只删除 <DSH_HOME>/sessions/<项目>/<会话 ID> 目录;目录名来自 readdir 结果,不拼接请求里的字符串;会话 ID 做白名单校验(^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$)。
  5. 删除不可恢复,UI 有明确二次确认。

DSH 0.2.1-rc.2 的 sessionPersistence 与 sessionController 未提供删除 API,因此删除由插件在 Host 进程内对文件系统执行,再清理 workspace ledger($DSH_HOME/storages/workspace.json)中的登记。

界面位置

  1. 侧边栏底部图标(面板列表第 4 个)→ 打开整页「会话管理」:左侧会话列表,右侧详情(导出 / 重命名 / 置顶 / 归档 / 删除 + 消息预览)。
  2. 会话行「…」菜单新增 导出对话…,可从侧边栏直接进入该会话的详情与管理操作。
  3. 设置 → 插件 中可见「会话管理」条目。

安装与启用

适配 DSH 0.2.1-rc.2。从 Releases 下载 dsh-session-manager-0.3.0.tgz 后执行:

dsh plugin --profile desktop add ./dsh-session-manager-0.3.0.tgz

开发时也可安装本地目录(Web UI:设置 → 插件 → 添加,选择目录;或 CLI):

dsh plugin --profile desktop add <本目录绝对路径>

安装后 Host 会热加载 Client bundle,侧边栏应出现「会话管理」图标;若未出现,刷新页面。包名与上游 dsh-session-manager 一致,本仓库以本地 bundle 安装,不发布到 npm(package.json 为 private: true)。

卸载:设置 → 插件 → 会话管理 → 卸载,或:

dsh plugin --profile desktop remove dsh-session-manager

配置与默认行为

无必填配置。默认值如下:

项目 默认值
会话根目录 $DSH_HOME/sessions(DSH_HOME 缺省 ~/.dsh)
工作区账本 $DSH_HOME/storages/workspace.json(只读)
单次请求体上限 128 KiB
单次批量删除上限 500

典型用法

下面按常见任务顺序说明,均在 DSH Web / Desktop UI 中操作。

导出单次对话归档

  1. 打开侧边栏 → 会话管理图标,或在目标会话「…」中选「导出对话…」。
  2. 在右侧详情点击 Markdown、JSON 或 HTML 导出按钮。
  3. 保存浏览器下载的文件;Markdown / HTML 已过滤大部分 Harness 运行时上下文,JSON 适合完整备份。

批量备份多个项目会话

  1. 在管理页左侧勾选多个会话。
  2. 使用「导出所选 Markdown」或「导出所选 JSON」。
  3. 得到合并后的单文件,文件名含日期与 ID 片段。

整理与减负

  1. 用搜索框按标题、工作区或会话 ID 定位。
  2. 筛选「空会话」后一键清理,或批量归档不再使用的对话。
  3. 需要改标题时用重命名(会写入 session event)。

删除前注意

  1. 先停止仍在运行的会话;管理页会拒绝删除 running 状态。
  2. 对仍被 Agent 占用的会话,仅在理解风险后使用强制删除。
  3. 删除后侧边栏条目可能要刷新页面或重启 Harness 才会消失(workspace / session 索引在启动时构建)。

仓库内可用无依赖冒烟测试检查 Client 半渲染与路由(不替代浏览器目视):

node test/render-smoke.mjs

适用场景与注意

适合谁

  • 长期在 DSH 里积累大量会话,需要导出 Markdown 写文档、JSON 做迁移或 HTML 只读分享。
  • 希望在一个面板里完成置顶、归档、空会话清理,而不是只依赖侧边栏单项菜单。
  • 接受在 0.2.1-rc.2 下由插件通过 Host 删除会话目录(官方暂无 delete API)。

使用前请知悉

  • 插件以当前 dsh 进程权限运行;删除操作直接作用于本机 sessions 目录,安装前建议阅读 源码 与 MIT 许可证。
  • 归档 / 置顶的读取依赖 workspace.json 结构;若 DSH 升级改变结构,可能仅影响状态显示,写入仍走官方 API。
  • 国际化支持简体中文与 English。
  • 社区目录 SkillHub 与 GitHub 仓库由维护者与社区维护,与 DeepSeek / 幻方无官方从属关系;DSH 生态强调「一切皆插件」,按需选用即可。

结尾

dsh-session-manager-next 把「看会话、导会话、理会话、删会话」收进同一套 Web UI 与 Host API:导出格式覆盖 Markdown / JSON / HTML,整理与侧边栏状态对齐,删除带运行中与占用态护栏。若你已在 0.2.1-rc.2 上日常用 DSH,可从 Release 的 dsh-session-manager-0.3.0.tgz 按上文命令安装试用。

  • 目录页:https://www.skillhub.cn/plugins/fan20yong/dsh-session-manager-next
  • GitHub:https://github.com/fan20yong/dsh-session-manager-next
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜