# Ygent 富内容渲染设计(HTML 制品 / 流程图 / 公式)
> 状态:设计提案,待确认
> 背景:`docs/reference/workbuddy/chat-tool-fold.md` 已摸清 WorkBuddy 的实现与安全边界
> 本文只讨论「对话区要支持哪些内容类型、怎么安全地渲染、分几步做」
---
## 1. 现状盘点
| 内容类型 | WorkBuddy | Ygent 现状 | 差距 |
|---|---|---|---|
| 段落 / 列表 / 引用 | ✓ | ✓(remark-gfm) | — |
| 表格 | ✓ | ✓ | — |
| 代码块高亮 | ✓ Prism | ✓ highlight.js | 可接受 |
| 代码 diff(改文件时) | ✓ `tool-diff` | ✗ | 见 §7 |
| 图片 | ✓ | ✓(react-markdown 默认) | — |
| **流程图 / 图表** | ✓ mermaid | **✗** | 需新增 |
| **数学公式** | ✓ KaTeX | **✗** | 需新增 |
| **HTML 制品** | ✓ sandbox iframe | **✗** | 需新增 |
| 内联 SVG(消毒) | ✓ DOMPurify | ✗ | 低优先 |
Ygent 当前渲染管线:`remarkGfm` + `rehypeHighlight`,**无 `rehype-raw`**(即不渲染 Markdown 里的裸 HTML)——这一点与 WorkBuddy 一致,是安全基线,**不要为了省事打开它**。
---
## 2. 两条进入路径(关键决策)
富内容有两种进入对话的方式,**建议两条都做,但优先级不同**:
### 路径 A:Markdown 内联(模型天然会用)
模型输出 ```mermaid 代码块或 `$$…$$` 公式,由渲染管线识别。
- 优点:**零工具改动**。模型不需要被教会调用新工具,它在别处已经习惯了这套写法。
- 证据:WorkBuddy 的 mermaid 就是这条路径——存在 i18n 键 `markdown.mermaid.rendering`(渲染中占位文案),说明是代码块触发而非工具产出。
- 适用:mermaid、KaTeX
### 路径 B:工具产出制品
专用工具(如 `show_html`)返回一段 HTML,以「制品块」形式呈现,带独立查看器 UI。
- 优点:有明确的类型边界,可以配查看器(切代码 / 复制 / 下载 / 导出图片)与独立的安全边界。
- 证据:WorkBuddy 的 `show_widget` 工具 + `SYn = {show_widget, visualize:show_widget, visualizer:show_widget}`,走 `