DeepSeek Harness 会话导出插件

前言

DeepSeek Harness (DSH) 的核心架构是插件化。在使用 Web 客户端进行调试、演示或记录会话时,开发者往往需要将对话记录保存为本地文件。官方的导出功能通常依赖特定的路由或后端处理,不够轻量。本插件通过纯前端注入的方式,在 dsh Web 会话的「更多」菜单中新增了「导出 Markdown」与「导出 PDF」选项,让保存会话记录的操作更加直观和快捷。

插件介绍

  • 插件名称:dsh-export-plugin
  • 维护者:guyusky
  • 功能定位:客户端插件,用于在 dsh Web 界面中快速导出会话记录。
  • 实现方式:纯前端注入,不依赖额外的 npm 包,通过复用官方的 /api/session.export 接口获取会话 ZIP 数据,并在前端解析和转换。

安装

安装插件需要通过 npx 命令将本地目录链接到 dsh 插件系统中。

  1. 确保本地有一个存放插件代码的目录,例如 D:\dsh-code\export-plugin。
  2. 在终端中执行以下命令:
npx @deepseek-ai/dsh plugin --profile web add D:\dsh-code\export-plugin

安装后,需要重启 dsh Web 服务才能使菜单注入生效。

核心功能

插件在会话列表的「更多」菜单中,于「归档会话」下方注入了两个操作项:

  1. 导出 Markdown
    • 导出极简的问答对格式(用户输入 + 该轮最后一条助手可见回复)。
    • 保存为 .md 文件。
    • 不包含思考过程、工具调用或系统提示词。
  2. 导出 PDF
    • 导出干净的问答对(包含文字与图片)。
    • 采用 A4 排版,利用浏览器原生打印功能生成 PDF。
    • 需在系统打印对话框中选择「另存为 PDF」。

技术实现与过滤规则

插件复用了官方 dsh-session-log-export 包的 /api/session.export 路由。该接口返回一个 ZIP 文件,包含 canonical JSONL 日志和图片资源。插件在前端完成以下工作:

  1. ZIP 解析:使用浏览器原生的 DecompressionStream 解压 ZIP,解析出根目录的 session*.jsonl 文件以及 media/ 目录下的图片。
  2. 事件过滤:插件只处理 user/message 和 assistant/message 事件。
    • 用户输入过滤:只保留 source.kind === 'user' 的消息。这解决了同一消息在 agent/inbox/spliced 和 user/message 中重复记录的问题(通过 message id 去重)。
    • 系统内容过滤:自动过滤 runtime-context、time-context、skill-catalog、工作区指令等系统注入内容,避免它们混入用户提问列表。
    • 助手回复过滤:每轮对话只保留最后一条助手可见回复,丢弃过渡文本、思考过程 (thinking)、工具调用 (tool_use) 及其结果。

使用方式

  1. 在 dsh Web 界面打开一个会话。
  2. 点击会话行中的「更多」按钮。
  3. 在弹出的菜单中选择「导出 Markdown」或「导出 PDF」。
    • 选择 Markdown 后,文件会直接下载到本地。
    • 选择 PDF 后,浏览器会打开打印预览窗口,用户需手动点击「另存为 PDF」。

注意事项

  • PDF 保存:由于浏览器安全沙箱限制,PDF 导出无法直接通过代码保存文件,必须手动在打印对话框中操作。
  • 内容范围:导出的内容仅包含「用户输入」与「助手最终回复」,不包含模型的思考链、中间草稿、工具调用详情或系统提示词。
  • 菜单结构变化:插件通过 MutationObserver 监听 DOM 变化,但若官方升级菜单结构导致文本匹配失效,可能需要更新插件代码并重启服务。
  • Event 格式兼容性:插件主要针对 V4 事件格式。若 dsh 升级 event 格式导致未知的 event type 出现,Markdown 导出会将其原样保留在代码块中,PDF 导出则会直接忽略。
  • 大文件性能:包含大量图片或超过 50 轮的会话可能导致文件体积较大或打印过程变慢。

总结

该插件通过极简的问答对导出方式,解决了 DeepSeek Harness Web 界面下会话记录保存的需求。对于只需要记录最终对话结果的开发者或演示场景,它提供了一个无需配置后端、零依赖的轻量级解决方案。

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

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

Xiaoye