前言¶
在 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 中的实现说明,便于判断导出内容是否满足你的归档需求。
- 编队时间线合并:事件排序用
(time, sessionId, seq),而非全局序号——DSH 的seq只在单会话内递增,跨会话不可直接比大小。 - 会话 ID 归一化:同时兼容裸 UUID 与带
session-前缀的写法,避免编队树在查表时断裂。 - 双投影而非删减关系:
summary与raw从同一快照独立渲染;raw不是摘要展开,summary也不是 raw 删减版。 - 系统注入与自污染过滤:harness 注入的上下文在
raw中标注为「系统注入」,在summary中剔除;导出工具自身产生的tool/call、command/run等默认从raw过滤,工具返回值只给路径与统计,不嵌入正文,避免递归膨胀。 - 脱敏与体积控制:默认
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