beijingwahw/dsh-conv-export ↗★ 1
@dsh-external/dsh-conv-export
dsh-conv-export(对话导出)— export the current DeepSeek Harness conversation as Markdown, PDF, or a long PNG image.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:beijingwahw/dsh-conv-export说明文档
阅读完整 README ↗dsh-conv-export(对话导出)
English | 中文
把当前 DeepSeek Harness 对话导出为 Markdown、PDF(打印对话框)或长图 PNG——会话头部一次点击,零核心改动。
解决的问题
- 对话会蒸发:长对话里沉淀着决策、代码与排错线索,但 Harness 没有内置方式把它们带走。本插件把渲染出的对话记录变成可携带的产物。
- 一种格式永远不够:分享给同事要 Markdown;归档留痕要 PDF;贴进聊天要图片。一个菜单三种格式全有。
- 导出必须与所见一致:提取在点击时刻对渲染 DOM 执行(含翻页加载的历史),产物就是屏幕上的对话——代码块、表格、强调全部保留。
功能特性
- 头部导出按钮(下载图标)注册进
conversation.session.header.actions插槽——可叠加、可安全卸载,打开状态经aria-pressed镜像。 - 下拉菜单三种导出:
- Markdown (.md)——客户端下载;助手回复从渲染 HTML 反向序列化(标题、列表、带语言的围栏代码、表格、引用、链接、行内强调)。
- PDF(下载)——对话光栅化后按 A4 比例切页,下载自包含的多页 PDF。无打印窗、无弹窗:应用标签页永不冻结。
- 长图 (PNG)——离屏渲染测量后经 SVG
foreignObject以 2x 光栅化,图片内联为 data URL,下载为一张长 PNG(高度上限 16000px)。
- 合理的文件名取自会话标题(净化、限长)。
- 跟随 Harness
--dsw-alias-*设计令牌;菜单文案按文档语言自动切换中/英文。 - 菜单卫生:Escape 或点击外部关闭;长图光栅失败时给出 toast 提示。
安装
需要 Node.js ≥ 22 与 pnpm(npm install -g pnpm)——dsh plugin add 通过 pnpm 把 bundle 装入 profile。
dsh plugin --profile web add https://github.com/beijingwahw/dsh-conv-export/archive/refs/tags/v0.1.0.tar.gz
dsh web # 重启服务以加载插件
tag 地址不可变,tarball 校验和永不变化。(refs/heads/main 这类分支地址随每次推送变动,lockfile 记录过旧校验和后会触发 pnpm 的 ERR_PNPM_TARBALL_INTEGRITY。)
使用
打开任意对话,点击会话头部的下载图标,选择格式。三种格式均直接下载——无弹窗,应用标签页保持响应。
实现原理
- 宿主半边是空的 cordis 注册外壳;全部行为位于浏览器 bundle(
lib/client.js),由标准加载器挂载,零核心改动。 - 提取按文档顺序遍历
[data-conversation-scroll],配对用户行([class*="_userRow"]气泡)与助手 markdown 容器([class*="_markdown_"])——标准渲染器的稳定 class 契约。 - 长图路径序列化干净克隆(显式 XHTML 命名空间、无离屏偏移)进 SVG
foreignObject,用DOMParser校验后在 2x canvas 光栅化。外部图片先抓取内联;不可达的图片被丢弃而非污染画布。
已知限制
- 长图与 PDF 路径经 SVG
foreignObject光栅化(所有常青浏览器支持);特殊嵌入内容可能被拍平。 - PDF 页面为光栅图像(文本不可选择);需要可选中文本请用 Markdown 导出。
- 导出范围仅限当前对话列——侧边栏标题与设置页面不在范围内。