<p align="center">
  <img src="./assets/readme/hero.svg" width="100%" alt="dsh-doc-share：把 DSH 对话重排成带封面、摘要统计与章节的报告，一键导出 PNG/HTML/PDF/Markdown">
</p>

<p align="center">
  <a href="./LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="MIT License"></a>
  <img src="https://img.shields.io/badge/DSH-rc.6-1f2937.svg" alt="DSH 0.1.0-rc.6">
  <a href="https://github.com/dawsondx/dsh-doc-share/actions"><img src="https://github.com/dawsondx/dsh-doc-share/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
</p>

DSH（DeepSeek Harness）的**对话报告化分享**插件。它把一次问答整理成带封面、内容摘要与章节排版的正式报告，而不是把聊天记录原样丢给你。

## 为什么需要它

| 平铺复制的痛点 | 本插件对应的方案 |
| --- | --- |
| 复制出去是一长串消息，没有开头、没有结构 | 生成带**封面（可自定义标题）**、**摘要统计**、**按轮次分章**的报告 |
| 想摘取更早的对话，只能在页面里一直往上滑、等加载 | v0.4.0 起用**轮次选择弹窗**，列出全部轮次，可直接搜索、全选、一键加载更早历史 |
| 只有文字，代码块、图片、工具调用混在一起难读 | **代码块单独成块，表格保留排版，工具调用折叠成摘要行** |
| 只能导出一种格式 | 一次生成，**PNG / 单 HTML / PDF / Markdown** 四种格式任选 |

## 功能特性

- **轮次选择弹窗**：从会话数据列出全部已完成轮次（轮次号 / 时间 / 提问与回答摘要 / 图片与工具徽标），支持搜索过滤、全选、清空；更早的历史可在弹窗内「加载更早」或「全部加载」，无需先到页面滚动
- **单轮快捷分享**：悬停任意一轮消息的分享按钮，只导出该轮问答
- **报告排版**：封面（标题可自定义）+ 内容摘要统计（轮数 / 问题数 / 字数 / 代码块 / 工具调用）+ 按轮次分章的 Q&A
- **兼容 gen-UI 富组件**：由 [dsh-genui](https://github.com/omdsh-dev/dsh-genui) 插件渲染的卡片、键值面板、步骤条等富组件，导出 PNG / PDF 时完整呈现，不会因入场动画未播放而整块空白
- **四种导出**：PNG 图片、单 HTML 文件（自包含样式，可脱离 DSH 打开）、PDF（A4 自动分页）、Markdown
- **可调版式**：宽度（手机 / 平板 / 电脑）与字号三级可调，可勾选「不展示过程」只保留提问与最终回答
- **深色主题**：HTML / PDF 导出跟随系统 / DSH 深浅色偏好（HTML 在新设备上也会自适应）；PNG 图片固定浅色底，保证在任何查看环境下清晰
- **设置自动保存**：localStorage 持久化上次的宽度、字号、隐藏过程与标题
- **中英文自动适配**：界面文案跟随 DSH 界面语言

## 四种导出，按需选择

| 格式 | 适用场景 | 特点 |
| --- | --- | --- |
| **PNG 图片** | 发到社交平台、即时聊天 | 整页截图，所见即所得 |
| **单 HTML 文件** | 发给同学、同事、客户 | 自包含样式与图片（base64 内联），双击即可阅读，无需联网 |
| **PDF** | 打印、归档、正式提交 | A4 自动分页，长代码块自动跨页不截断 |
| **Markdown** | 二次编辑、进知识库 | 与报告同构的标题 / 摘要 / 分章 / 代码块 / 表格 |

## 安装

### 方式一：clone 后安装（推荐）

```bash
git clone https://github.com/dawsondx/dsh-doc-share.git
cd dsh-doc-share
dsh plugin --profile web add \
  --ignore-scripts --config.auto-install-peers=false \
  .
```

仓库自带构建产物 `lib/`，clone 后无需本地构建即可安装。安装完成后重启 `dsh web`。

### 方式二：从本地路径安装（开发模式）

```bash
dsh plugin --profile web add \
  --ignore-scripts --config.auto-install-peers=false \
  /path/to/dsh-doc-share
```

## 使用

1. 打开 `dsh web`，进入一个会话
2. 点击右上角「报告化分享」打开**轮次选择弹窗**；点任意一轮消息的分享按钮则只导出该轮
3. 在弹窗中勾选要包含的问答，可按关键词搜索；更早的对话点「加载更早」或「全部加载」后即可勾选
4. 点击「生成报告」，在预览弹窗中调整标题、宽度、字号，按需勾选「不展示过程」
5. 选择下载 **PNG / HTML / PDF / Markdown**

## 与 dsh-share 的区别

| | dsh-share | dsh-doc-share |
| --- | --- | --- |
| 定位 | 对话原样导出 | 对话报告化排版 |
| 封面 / 摘要统计 | 无 | 有（标题、日期、轮次、字数、代码块、工具调用） |
| 章节结构 | 平铺 | 按轮次分章节，问题 / 回答卡片化 |
| 导出格式 | PNG / Markdown | PNG / 单 HTML / PDF / Markdown |
| 独立阅读 | 图片 | HTML / PDF 可脱离 DSH 直接阅读 |

## 开发

```bash
pnpm install
pnpm typecheck     # 类型检查
pnpm test          # 单元测试（vitest + jsdom）
pnpm build         # 构建（生成 lib/）
pnpm verify        # typecheck + test + build
```

修改源码后重新构建并强制刷新安装：

```bash
pnpm build
dsh plugin --profile web add --force \
  --ignore-scripts --config.auto-install-peers=false \
  .
```

> `lib/` 是 DSH 直接加载的交付物，随源码提交，方便无构建环境的用户直接安装。

## 兼容性

面向 `@deepseek-ai/dsh@0.1.0-rc.6`。插件通过官方插槽 `conversation.chat.assistant-actions`（单轮入口）与 `conversation.session.header.utilities`（会话入口）挂载。轮次列表读取会话快照（`ConversationSnapshot`）并调用 `loadOlder` 分页加载；导出内容依赖官方页面稳定的 `data-conversation-scroll`、`data-chat-flow-kind`、`data-turn-tail` 属性定位问答。DSH 调整页面结构后可能需要同步适配。

## 已知限制

- 超长对话的 PNG 生成较慢（html-to-image 全量截图）
- 确认选择的轮次需已在页面渲染（「全部加载」后一般均已渲染）；个别轮次若被页面虚拟化卸载，会跳过并在控制台提示

## License

[MIT](LICENSE)。本项目参考了 [hellodigua/dsh-share](https://github.com/hellodigua/dsh-share) 的交互与 DOM 扫描方案。
