dsh-session-export:把 DSH 会话树导出为摘要与原始存档两份 Markdown

前言

在 DSH 里跑带子代理的会话时,事件分散在多棵会话日志里:主会话派发任务,子代理各自记工具调用与回报。想事后复盘「谁在何时说了什么、派了谁、工具返回了什么」,单靠界面翻查往往不够;截屏或手工复制也很难保留完整工具参数、重试与状态变更。

dsh-session-export(npm 包名 @cnhenaihui/dsh-session-export)面向这类需求:从同一次冻结快照生成两份 Markdown——一份给人读的叙事时间线,一份给复盘与审计的完整原始日志。维护者为 cnhenaihui,在 DeepSeek Harness 社区目录中归类为「记忆」。

这是什么

插件把当前会话及其整棵智能体编队(向上找到根会话,向下收集所有子代理)导出为本地文件,不往会话日志里追加事件(只读)。产物共享同一个 export_id,并在各自 frontmatter 里声明快照边界。

版本(以仓库 package.json 为准):0.3.0;许可证:MIT;运行环境要求 Node >=20.0.0。

两份产物

文件 定位 内容
*.summary.md 给人读 全局时间线叙事:谁在何时说了什么、做了哪个决定、派了谁、子代理回报了什么;条目带 [→ raw] 锚点
*.raw.md 给复盘/审计 逐事件完整日志:消息原文、工具参数与结果、失败重试、状态变更、被替换的历史

默认落盘命名示例(相对工作区):

<工作区>/exports/
  <标题>_<会话ID前8位>_<时间戳>.summary.md
  <标题>_<会话ID前8位>_<时间戳>.raw.md

核心功能与设计要点

下面几项来自 README 中的实现说明,便于判断导出内容是否满足你的归档需求。

  1. 编队时间线合并:事件排序用 (time, sessionId, seq),而非全局序号——DSH 的 seq 只在单会话内递增,跨会话不可直接比大小。
  2. 会话 ID 归一化:同时兼容裸 UUID 与带 session- 前缀的写法,避免编队树在查表时断裂。
  3. 双投影而非删减关系:summary 与 raw 从同一快照独立渲染;raw 不是摘要展开,summary 也不是 raw 删减版。
  4. 系统注入与自污染过滤:harness 注入的上下文在 raw 中标注为「系统注入」,在 summary 中剔除;导出工具自身产生的 tool/call、command/run 等默认从 raw 过滤,工具返回值只给路径与统计,不嵌入正文,避免递归膨胀。
  5. 脱敏与体积控制:默认 redact: true(key/token/家目录路径);工具结果超过 toolResultMaxChars(默认 6000)时在 raw 中折叠并注明原长。

安装与启用

已抓取资料中未给出统一的 dsh plugin add … 安装命令,正文不臆造。可从社区目录页与 GitHub 仓库按你当前 DSH 版本的插件安装流程引入:

  • 目录页:https://www.skillhub.cn/plugins/cnhenaihui/dsh-session-export
  • 仓库:https://github.com/cnhenaihui/dsh-session-export

插件以当前 DSH 进程的权限读写文件;安装或启用前建议阅读源码与 MIT 许可证,确认与你的工作区文件策略一致。

改代码后需重启 DSH 才会加载新的 JS 模块代次(Host 侧无 HMR);新装 bundle 可热激活,替换已安装包则不行。README 还记录了 package.json 的 exports 须显式暴露 "./package.json" 等集成细节,排障时可对照仓库说明。

典型用法

三种入口共用同一套导出实现。

1. 对话 dock 按钮(推荐)

输入框下方 dock 有「导出会话」按钮(文档图标)。点击后先弹出目录选择(Windows 原生「选择文件夹」);取消则不写任何文件。选好目录后按钮显示进度(选择位置… → 导出中…),失败原因显示在按钮旁,不打断对话。

2. Agent 工具

export_session_markdown({ sessionId?: string, ... })
参数 默认 说明
sessionId 当前会话 导出目标及其整棵编队树;支持 ID 前缀
includeSystemPrompt false 是否导出 system prompt 原文
includeReasoning true 是否导出思考链(raw 中默认折叠)
redact true key / token / 家目录路径脱敏
toolResultMaxChars 6000 超长工具结果在 raw 中折叠
outputDir 弹出选择器 可省略(弹选择器)、相对工作区或绝对路径;目录不存在会自动创建
formats ["summary","raw"] 可只生成其中一个

省略 outputDir 时会先询问保存位置;用户取消则一个文件都不写。

3. 斜杠命令

命令名为 md-export(非 export,因 export 已被 DSH 内置命令占用):

/md-export            # 先问保存位置,选好再导出
/md-export 归档/1029  # 直接导出到工作区相对目录
/md-export D:\会话导出 # 直接导出到绝对路径(路径解析使用 path.resolve)

保存位置策略在按钮、命令、工具之间一致:指定 outputDir 则不打扰;未指定时依次尝试 native 目录选择、提问卡片,再回退默认 exports 并在回执说明原因。

工作区写入与安全边界

DSH 默认文件策略多为 workspace-write:仅会话工作区可写,桌面、文档或其它盘符可能被沙箱拒绝。README 说明:快捷选项会按当前策略过滤;若仍选了不可写位置,导出会改存到 <工作区>/exports,回执写明「原定位置 X 不在可写范围,已改存到 Y」。若要写到工作区外,需将会话文件策略切到 danger-full-access(这是 DSH 边界,不是本插件单独限制)。

子代理无法回答「提问卡片」,由子代理触发的导出会直接走默认目录,避免挂起。

适用场景与注意

适合:需要离线留存一次多代理协作全过程;写复盘文档时要有可读时间线,又要能追溯到工具参数与重试;只想先要摘要时可设 formats: ["summary"] 控制 raw 体积(长会话 raw 可达很大)。

限制(README 已列):旧格式会话若 migration-required 会降级为「仅元数据」并标注;无法读取的子代理分支会在导出提示中列出;workspace-write 下写不进工作区外 unless 改策略。

社区目录(SkillHub)是独立于 DeepSeek / 幻方的插件索引站点,并非官方应用商店;DSH 本身践行「一切皆插件」,本插件是其中一类记忆/归档工具。

结尾

dsh-session-export 的价值在于用一份冻结快照同时产出「叙事摘要」与「审计级 raw」,并覆盖按钮、工具、md-export 三种入口。查阅安装方式与更新:

  • https://www.skillhub.cn/plugins/cnhenaihui/dsh-session-export
  • https://github.com/cnhenaihui/dsh-session-export
羽毛球分组比赛记分
小程序二维码

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

Xiaoye