dsh-session-md:把 DSH 会话导出为人读 Markdown 或自包含 HTML

前言

在 DeepSeek Harness(DSH)里跑 agent,会话事件会不断累积:用户消息、助手回复、思维链、工具调用与结果、待办、压缩摘要、交付文件等。官方插件 @deepseek-ai/dsh-session-log-export 提供的是 raw JSONL 的 ZIP,适合机器回放,却不适合直接发给同事、贴进周报或做归档阅读。

下面介绍社区客户端插件 dsh-session-md(维护者 DEVbyQIN,分类:客户端)。它把一次会话渲染成按 Turn 分组的 Markdown,或单文件自包含 HTML,并提供 full / handoff / readable / audit 等预设与一键下载。

这是什么

dsh-session-md 是标准 Cordis 插件:在 Web 端会话标题栏增加导出菜单,并注册工具 export_session_md,供模型把导出结果写入会话工作区或指定路径。渲染逻辑集中在 lib/render.mjs,与界面按钮共用同一套模式预设。

与「只给 JSONL ZIP」的官方导出相比,本插件补齐「一段对话一份干净文档」的缺口。许可证为 MIT(见仓库 README);当前 package 版本为 0.1.0。Node 要求 ^22.19.0 || >=24。插件零 @deepseek-ai/* 依赖,兼容性闸门无额外拒绝项。

核心功能

导出形态

  • Markdown(默认):标题、元信息表、按 Turn 分组的用户 / 助手 / 思维链 / 工具调用与结果,以及待办、上下文压缩摘要、交付文件、协作消息等;末尾可含「未完成的工具调用」节。
  • HTML:自包含单文件,README 说明可打印为 PDF;通过 format=html 与模式参数组合使用。

四种模式(预设)

工具与下载菜单共用 MODES 定义:

模式 用途概要
full 工具参数与结果、思维链均保留;适合 agent 接手或复现
handoff 保留工具调用,去掉思维链;参数与结果截断更紧
readable 人读优先,工具只留名字,思维链默认折叠
audit 含系统提示词与注入上下文,且不截断;适合留档

both 会连续产出 full 与 readable 两份文件。显式参数可覆盖模式默认值(例如 mode: 'readable' 同时 includeToolDetails: true)。

界面与 API

  • 会话标题栏「更多操作」区(与官方「下载 Session 日志」同处)提供导出菜单,底层为认证路由 GET|HEAD /api/session.export-md?sessionId=…&mode=…&format=md|html。
  • 浏览器下载由 Content-Disposition 命名(含中文标题);落点由浏览器决定,不受会话文件沙箱限制。写入工作区时走 ctx.fs,受会话沙箱约束。文件名经 slugify 处理,避免 Windows 非法字符与保留设备名。

模型工具

模型可调用 export_session_md 将当前会话、指定 sessionId(含已持久化冷会话)、或 all: true 批量导出到工作目录或绝对路径;可选是否包含子代理目录、工具详情、思维链、系统提示词与注入上下文,以及各字段截断上限。

安装与启用

两种安装方式 README 写明等价,装到的代码逐文件一致:

dsh plugin --profile web add dsh-session-md                        # npm(推荐,版本冻结、可钉版本)
dsh plugin --profile web add github:QIN-SMART/dsh-session-md       # GitHub(跟仓库源码走)

插件声明了 dsh.bundle.patch,add 会自动把 session-md 写入 profile 的 patch 层,无需手工编辑 cordis.yml。装完后刷新浏览器页面即可看到会话标题栏导出菜单。

若修改了插件源码,运行中的 host 不会重新 import 已加载模块,需要重启 dsh web;仅刷新页面只能更新浏览器侧。

典型用法

方式一:标题栏一点下载

打开会话标题栏右侧带下载图标的菜单,按场景选择,例如:

  • 全部(给 agent 接手/复现)→ mode=full
  • 交接版(保留工具调用,去掉思维链)→ mode=handoff
  • 简洁(人读,工具只留名字)→ mode=readable
  • 审计版(不截断 + 系统提示词 + 注入上下文)→ mode=audit
  • 两份都要 → 连续下载 full 与 readable
  • HTML·全部 / HTML·简洁 → format=html 配合对应 mode

Chrome 等在「两份都要」时可能询问是否允许多文件下载。

方式二:让模型写入工作区

对模型说明导出意图后,可调用例如:

export_session_md({})                                   # 当前会话 → 会话工作目录/<sessionId>.md
export_session_md({ path: '/abs/dir' })                 # 指定目录
export_session_md({ path: '/abs/dir/chat.md' })         # 指定文件(单会话)
export_session_md({ includeToolDetails: false })        # 对外分享:工具只留名字
export_session_md({ all: true, path: '/abs/dir' })      # 批量导出全部会话(含子会话)
export_session_md({ sessionId: 'session-xxxx' })        # 指定会话(冷会话也能读)

常用参数包括 mode、format(md | html)、sessionId、all、path、includeSubagents、includeToolDetails、includeReasoning、includeSystemPrompt、includeInjectedContext,以及 maxToolResultChars / maxToolArgChars / maxReasoningChars 等截断上限。README 给出默认值表;默认详细输出适合复盘,includeToolDetails: false 为体积更小的干净分享版。

离线巡检(开发者)

仓库提供不启动 DSH 的离线转换,例如:

npm run dump -- --list         # 离线把会话日志转成 Markdown

完整自检可运行 npm run check(等同 ci),覆盖渲染、客户端半、热插拔与组合 profile 等脚本。

适用场景与注意

适合谁:需要把 DSH 对话整理成可读文档的开发者——交接给另一个 agent、对内复盘、对外分享(readable / 关闭工具详情)、或审计留档(audit)。

权限与安全:插件在当前 dsh 进程权限下运行;audit 模式可能包含系统提示词与机器注入上下文。安装前请自行阅读源码与 MIT 许可证,确认符合团队数据与合规要求。浏览器下载的文件会落到本机用户选择的目录,与沙箱内写文件是两条路径。

生态说明:DSH 奉行「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。本介绍事实来自插件 README 与 package.json。

结尾

dsh-session-md 在保留会话结构的前提下,把 DSH 会话变成可传播的 Markdown 或 HTML,并用预设模式区分复现、交接、人读与审计。目录页:https://www.skillhub.cn/plugins/DEVbyQIN/dsh-session-md;源码与详细参数:https://github.com/QIN-SMART/dsh-session-md。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye