# 执行流程详解

## 阶段1：思考分析（Think）

**不要直接动手画图！** 先分析用户需求，输出结构化的思考结果。

### 1.1 判断输入类型

用户输入类型包括：
- **自然语言描述**："画一个微服务架构图"
- **示例文件/截图**：用户提供一张图要求参照或更新
- **内容+要求**："把这段文字整理成流程图"或"按照这个示例改成 XX 风格"
- **模糊需求**：用户说不清楚要什么图，需要你建议

### 1.2 判断图表类型

根据用户描述自动判断：
- 流程图：含"流程"、"步骤"、"审批"、"顺序"
- 架构图：含"架构"、"分层"、"微服务"、"技术栈"、"系统设计"
- UML 类图：含"类图"、"继承"、"接口"、"面向对象"
- ER 图：含"ER"、"实体关系"、"数据库设计"、"表关系"
- 树形图：含"树"、"组织架构"、"目录结构"、"层级"
- 时序图：含"时序"、"交互"、"消息流"、"调用链"
- 思维导图：含"思维导图"、"脑图"、"发散"
- 网络拓扑：含"网络"、"拓扑"、"部署"、"服务器集群"
- **无法确定**：进入方案建议模式，列出推荐的图表类型让用户选择

### 1.3 输出思考结果

向用户展示你的分析，格式如下：

```
📊 需求分析

类型判断：[确定的图表类型或"需要确认"]
输入类型：[自然语言/示例文件/内容+要求/模糊需求]
复杂度：[简单/中等/复杂]

初步方案：
- 图表类型：[类型]
- 布局方向：[水平/垂直/自定义]
- 预计节点数：[数量]
- 关键元素：[列出主要节点和关系]
- 配色方案：[建议颜色]

是否按照此方案执行？
```

## 阶段2：方案确认（Confirm）

**必须等待用户确认后才能动手画图！**

### 2.1 确认方式

使用 AskUserQuestion 工具向用户展示方案选项：
- 选项1：按方案执行（推荐）
- 选项2：调整某些参数（如布局、配色、节点内容）
- 选项3：换一种图表类型
- 选项4：用户自行输入补充说明

### 2.2 特殊场景处理

**用户提供示例图/截图时**：
1. 分析示例图的结构、布局、样式
2. 列出你从示例中提取到的设计元素
3. 询问用户要保留哪些、更新哪些

**用户要求"按照这个改成..."时**：
1. 理解原始图表的结构
2. 明确哪些要保留、哪些要替换
3. 列出新内容的对应关系

**用户需求模糊时**：
1. 主动推荐2-3种适合的图表类型
2. 每种类型附简要说明和适用场景
3. 让用户选择或补充信息

## 阶段3：迭代更新（Iterate）

**在初始版本基础上进行更新，不是每次从头重做！**

### 3.1 首次生成

1. 确认方案后，生成v1版本
2. 自动初始化版本管理（`drawio_version.py init`）
3. 用 draw.io 打开预览
4. 展示版本信息：`[v1] 初始版本`

### 3.2 迭代更新流程

用户提出更新意见后：
1. **保存当前版本**：`drawio_version.py save <文件> "<更新描述>"`
2. **在当前文件基础上更新**：读取当前 .drawio 文件，定位需要更新的节点/连线，精确更新
3. **版本递增**：每次更新自动递增版本号（v1→v2→v3→v4→v5）
4. **展示版本更新**：`[v2] 更新了XX节点颜色`
5. **重新打开预览**

### 3.3 更新操作类型

- 调整节点位置/大小
- 更新节点文本/样式/颜色
- 添加/删除节点或连线
- 调整布局（间距、对齐、排列）
- 更新连线样式/箭头方向
- 添加/删除容器/分组
- 整体风格调整（配色方案、字体等）

### 3.4 更新原则

- **精确更新**：只改需要改的部分，不动其他节点
- **相对坐标**：容器子节点用相对坐标
- **保存版本**：每次更新前先 save 当前状态
- **说明更新**：每次更新后告知用户改了什么

## 阶段4：版本回溯（Version Control）

最多保留5个版本，支持随时回溯。

### 4.1 版本管理命令

```bash
# 初始化版本管理（v1创建时自动执行）
python {SKILL_DIR}/scripts/drawio_version.py init <文件.drawio> "初始版本"

# 保存新版本（每次更新前执行）
python {SKILL_DIR}/scripts/drawio_version.py save <文件.drawio> "更新了XX"

# 查看版本历史
python {SKILL_DIR}/scripts/drawio_version.py list <文件.drawio>

# 恢复到指定版本
python {SKILL_DIR}/scripts/drawio_version.py restore <文件.drawio> v2

# 查看版本状态
python {SKILL_DIR}/scripts/drawio_version.py status <文件.drawio>
```

### 4.2 版本自动管理规则

- **最大5版本**：超过5个时自动删除最旧版本
- **更新前自动保存**：每次迭代更新前先 save
- **恢复前自动备份**：恢复旧版本前先保存当前状态
- **版本存储位置**：`<输出目录>/.drawio_versions/<文件名>/v1/...`

### 4.3 向用户展示版本信息

```
📋 版本历史
  v1  2026-05-13 09:30  初始版本                    2.3KB  <-- current
```

用户可以随时要求"回退到v2"或"看一下v1的样子"。
