---
name: drawio-chart
description: Draw.io 配图专家：用于生成和导出 `.drawio` 图表。在用户要求 draw.io、diagrams.net、流程图、架构图、时序图、ER 图、状态图、思维导图，或明确提到 `.drawio`、PNG、SVG、PDF 导出、技术文章配图时使用。默认输出专业技术风格，并遵循 floracat-architecture-diagram 的视觉规范。
---

# Draw.io 配图专家

这个 skill 负责把用户的图表需求转成 `.drawio` 文件，并在需要时导出为 PNG、SVG 或 PDF。

主文件只保留任务路由、工作流和验收规则。详细样式、XML 模板、导出命令和示例按需读取 `references/`。

## 什么时候使用

在这些场景下优先使用本 skill：

- 用户明确要求 `draw.io`、`diagrams.net` 或 `.drawio`
- 用户要求生成流程图、架构图、时序图、ER 图、状态机图、思维导图
- 用户希望把图导出为 PNG / SVG / PDF
- 用户要给技术文章、教程、系统设计文档配图
- 用户给出一篇文章，希望抽取多张技术图并放进同一个 draw.io 文件

不适合本 skill 的情况：

- 用户只想要 Mermaid 代码，不需要 `.drawio`
- 用户需要的是位图插画、海报或白板风正文配图，而不是结构化图表
- 用户只是讨论图表思路，还不想真正生成文件

## 参考路由

按任务需要读取对应参考文件，不要默认把所有参考内容都塞进上下文：

| 需求 | 读取文件 |
| --- | --- |
| 颜色、字体、节点语义、连线风格、视觉统一规范 | `references/style-spec.md` |
| XML 结构规则、文本标签规则、节点/连线模板、不同图表类型的结构建议 | `references/xml-and-layout.md` |
| 导出命令、文件命名、打开方式、交付规则 | `references/export-and-files.md` |
| 常见提示词、单图/多图文章配图示例、批量页面生成方式 | `references/use-cases.md` |

## 核心规则

- 默认先生成 `.drawio` 原生文件，再根据用户要求决定是否导出。
- 如果用户明确要求导出 PNG / SVG / PDF，仍然先保留 `.drawio` 作为源文件，除非用户明确要求删除。
- 输出图表时，优先保证信息结构清晰，再保证视觉统一，不要为了“好看”牺牲可读性。
- 图表中的 `mxCell.value` 默认使用纯文本，避免嵌入 HTML 标签。
- 连线标签保持短小；长说明优先放到节点里或旁注节点里。
- 能不解释基础概念就不解释，把上下文留给真正影响绘图结果的约束。

## 图表类型选择

按内容结构选择图表，不要机械套模板：

- 流程步骤、决策分支、算法逻辑：流程图
- 模块关系、服务依赖、部署层次：架构图
- 服务调用、消息交互、时序过程：时序图
- 实体、字段、主外键关系：ER 图
- 生命周期、状态迁移、事件驱动：状态机图
- 概念梳理、知识组织、层级扩展：思维导图

如果用户指定了图表类型，优先按用户要求执行；只有在用户明显选错图表类型时，才简短提醒并给出替代建议。

## 工作流

### 1. 识别任务模式

先判断当前属于哪一种：

- 单张图生成
- 单张图生成并导出
- 一篇文章生成多张图
- 修改已有 `.drawio`

### 2. 收集最小必要输入

至少明确这些信息：

- 图表主题
- 目标图表类型
- 关键节点 / 模块 / 实体 / 步骤
- 节点之间的关系
- 是否需要导出，以及导出格式

如果用户信息不完整，但可以合理推断，就直接推断并在结果里说明；只有缺少关键结构信息时才追问。

### 3. 读取对应参考资料

- 需要统一视觉风格时，读取 `references/style-spec.md`
- 需要生成 XML 或判断布局时，读取 `references/xml-and-layout.md`
- 需要导出或命名时，读取 `references/export-and-files.md`
- 需要给用户展示常见 prompt 或文章配图模式时，读取 `references/use-cases.md`

### 4. 先规划，再生成

生成前先在内部明确：

- 采用哪种图表类型
- 页面是一张图还是多个 `diagram page`
- 节点分组如何布局
- 哪些连线需要标签，哪些不需要

不要一边写 XML 一边临时想结构。

### 5. 生成 `.drawio`

生成时遵循这些顺序：

1. 标题
2. 容器 / 分组
3. 核心节点
4. 连线
5. 标签与旁注

### 6. 导出或打开

- 用户要求导出时，再执行导出
- 用户只要求生成时，默认交付 `.drawio`
- 如果本机没有 `drawio` CLI，要明确告知无法自动导出，但 `.drawio` 已生成

## 多图文章模式

当用户给一篇文章并要求“生成多张技术配图”时，按这个规则处理：

- 先从文章中提炼 2-6 个最值得画图的结构
- 每个结构对应一个独立 `diagram page`
- 主文件名默认与文章文件名保持一致
- 页面名使用英文小写中划线命名
- 避免把整篇文章所有知识点挤进一张大图

更细的示例和 prompt 写法，读取 `references/use-cases.md`。

## 验证清单

交付前至少检查：

- 图表类型是否和任务匹配
- 主要节点是否齐全，关系是否画对
- 连线是否交代清楚方向和语义
- 文字是否简洁，没有把长句压在边上
- `mxCell.value` 中是否混入 HTML 标签
- 导出文件名是否符合命名规范
- 如果是多页文件，页面名是否清晰、一致

## 失败处理

- 如果用户需求过于模糊，先给出你推断的图表结构，再说明你的假设
- 如果导出失败，保留 `.drawio`，报告失败原因和可手动执行的导出命令
- 如果用户要求的内容更适合 Mermaid 或图片插画，要明确说明，并建议改用更合适的方式

## 输出要求

- 默认返回生成文件路径
- 若执行了导出，同时返回导出文件路径
- 若存在假设、删减或结构调整，要用一句话说明
