前言¶
用 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、整理会话(重命名、置顶、归档等),并在多重确认与校验后删除会话数据。
- 仓库:fan20yong/dsh-session-manager-next
- 社区目录:SkillHub 插件页
- 形态:Cordis bundle(Host 半 + Web Client 半),无第三方依赖、无需构建
- 适配:DSH 0.2.1-rc.2(Desktop / Web 共用同一套 Host API)
- 许可证:MIT
插件不向模型上下文注入内容,也不新增 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会话并批量删除。
删除会话¶
单个删除(详情页二次确认)与批量删除(勾选后确认)。安全护栏包括:
- 运行中的会话直接拒绝(先停止再删)。
- 仍被内存中 Agent 占用的会话需二次确认「强制删除」。
- 删除后同步清理工作区登记(
detachSession)与归档 / 置顶集合。 - 只删除
<DSH_HOME>/sessions/<项目>/<会话 ID>目录;目录名来自readdir结果,不拼接请求里的字符串;会话 ID 做白名单校验(^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$)。 - 删除不可恢复,UI 有明确二次确认。
DSH 0.2.1-rc.2 的 sessionPersistence 与 sessionController 未提供删除 API,因此删除由插件在 Host 进程内对文件系统执行,再清理 workspace ledger($DSH_HOME/storages/workspace.json)中的登记。
界面位置¶
- 侧边栏底部图标(面板列表第 4 个)→ 打开整页「会话管理」:左侧会话列表,右侧详情(导出 / 重命名 / 置顶 / 归档 / 删除 + 消息预览)。
- 会话行「…」菜单新增 导出对话…,可从侧边栏直接进入该会话的详情与管理操作。
- 设置 → 插件 中可见「会话管理」条目。
安装与启用¶
适配 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 中操作。
导出单次对话归档
- 打开侧边栏 → 会话管理图标,或在目标会话「…」中选「导出对话…」。
- 在右侧详情点击 Markdown、JSON 或 HTML 导出按钮。
- 保存浏览器下载的文件;Markdown / HTML 已过滤大部分 Harness 运行时上下文,JSON 适合完整备份。
批量备份多个项目会话
- 在管理页左侧勾选多个会话。
- 使用「导出所选 Markdown」或「导出所选 JSON」。
- 得到合并后的单文件,文件名含日期与 ID 片段。
整理与减负
- 用搜索框按标题、工作区或会话 ID 定位。
- 筛选「空会话」后一键清理,或批量归档不再使用的对话。
- 需要改标题时用重命名(会写入 session event)。
删除前注意
- 先停止仍在运行的会话;管理页会拒绝删除 running 状态。
- 对仍被 Agent 占用的会话,仅在理解风险后使用强制删除。
- 删除后侧边栏条目可能要刷新页面或重启 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