---
name: swing-wechat-workflow
description: 微信公众号内容生产与草稿推送的统一网关。用户要求写、生成、润色、排版或发布微信公众号文章，创建公众号草稿，或发送文本、Markdown、Word/PDF、图片、截图、链接等资料并要求转成公众号内容时使用；先识别并确认目标公众号，再加载对应品牌画像，统一编排写作、视觉、排版和草稿推送；首次需要生图时让用户选择 swing-wechat 内置生图或当前 Agent ImgGen，只有用户明确确认后才创建草稿，绝不自动正式发布。
---

# 微信公众号内容自动化工作流（v5 — 统一网关与品牌画像版）

## 概述

本 Skill 是抟微科技微信公众号内容生产的**总编排入口**：

1. **统一网关**：从输入内容识别目标公众号和内容方向
2. **品牌画像分发**：把已确认的品牌画像传递给文案、视觉、排版和发布阶段
3. **模式门禁**：目标公众号确认后选择极速生成或高质量生成
4. **生图方式门禁**：首次需要生成图片时，让用户选择 swing-wechat 内置生图或当前 Agent ImgGen
5. **Phase 0 环境检查**：自动检查依赖、账号凭据和草稿推送条件
6. **可见候选机制**：高质量模式必须展示真实文案、图片缩略图和排版预览
7. **草稿安全边界**：成品确认前不创建草稿，只创建草稿，不自动正式发布

## 工作流总览（模式门禁 + 七阶段）

```
用户输入
  ▼
网关 G: 识别公众号与内容方向 ──── 🔲 确认目标账号和品牌画像
  ▼
门控 M: 选择生成模式 ────────────── 极速生成 / 高质量生成
  ▼
Phase 0: 环境与配置准备 ──────────── 🔲 门控0: 自动校验；异常时暂停
  ▼
Phase 1: 文章规划 ──────────────── 🔲 门控1: 审核大纲/采用推荐
  ▼
Phase 2: 内容生成 ──────────────── 🔲 门控2: 审核内容/采用推荐
  ▼
门控 I: 选择生图方式 ────────────── swing-wechat 内置生图 / 当前 Agent ImgGen
  ▼
Phase 3: 视觉风格方案 ──────────── 🔲 门控3: 选择方案/采用推荐
  ▼
Phase 4: 配图生成 ──────────────── 🔲 门控4: 审核配图/采用推荐
  ▼
Phase 5: 排版与布局 ─────────────── 🔲 门控5: 审核排版/采用推荐
  ▼
Phase 6: 成品确认与草稿推送 ───────── 🔲 门控6: 用户确认后才创建草稿
  ▼
微信公众号草稿箱 ───────────────── 用户在公众平台手动发布
```

## 触发与输入路由

1. 用户只需表达“生成公众号”“写公众号文章”“把这些资料整理成公众号”“发布微信公众号”“创建公众号草稿”等意图，不要求用户点名任何子 Skill，也不要求用户在提示词中要求环境检查。
2. 读取当前 Agent 能访问的文本、Markdown、Word/PDF、图片、截图、链接、已有 HTML 等输入；先提取主题、事实、受众、目标和可复用素材。无法读取的附件或关键事实不确定时再询问用户。
3. 所有复合请求先进入本 Skill 的网关，不允许子 Skill 自行猜测品牌或账号。只有用户明确要求“仅生成 Markdown，不要配图、排版或发布”时，才可在目标品牌确认后单独调用 `swing-wechat-markdown`。
4. 如果用户已经明确说“极速生成/一键生成”或“高质量生成”，在目标公众号确认后直接采用对应模式；否则执行门控 M，不得先生成大纲、正文或图片。

## 网关 G：目标公众号与内容方向

使用 `scripts/resolve_brand_profile.py` 读取 `profiles/brand_profiles.json`，只分析用户输入和公开品牌规则，不读取任何密钥文件。

1. 判断输入属于 `tiny-wings`（抟微科技软件）还是 `sanhe-xu`（三河序青稞酒）。
2. 在已确认的品牌画像内判断内容方向，例如技术干货、产品案例、品牌故事、产品推广或饮酒生活。
3. 如果用户明确指定公众号，优先使用指定值，但仍展示确认信息。
4. 如果根据关键词推断出目标，展示命中依据、目标公众号和推荐内容方向，等待用户确认。
5. 如果两个品牌得分接近或没有命中，必须让用户选择，不能先生成后补账号。
6. 将确认结果记录为本次运行上下文：`brand_profile_id`、`account_id`、`content_track`。后续子 Skill 必须使用该上下文。

确认信息至少包含：

```text
目标公众号：三河序 SANHEXU 青稞酒
品牌画像：sanhe-xu
内容方向：产地 / 青稞 / 酿造工艺
判断依据：青稞、酿造、高原、产地
本地密钥状态：仅显示 ready/not ready，不显示密钥
```

## 门控 M：选择生成模式

在网关 G 完成并确认目标公众号后只询问一次：

> 是否进入一键极速生成模式？
> - 是，极速生成：自动采用推荐文案、配图和排版，直接生成完整图文成品，中间不逐步确认。
> - 否，高质量生成：逐步确认大纲、正文、图片缩略图、最终配图和排版，通常更准确、效果更好。

用户未选择时不得继续。记录 `generation_mode: fast|quality`，后续不得自行切换模式。用户可以随时要求改为另一种模式，但已消耗的图片额度不能假装撤销。

### 极速生成模式

1. 仍执行 Phase 0、事实校验和所有品牌硬规则。
2. 门控 1-5 不暂停，自动采用每阶段排名第一的推荐文案、视觉、配图和排版方案。
3. 每个图片位置只生成一套推荐预览/最终图，记录选择依据；模式选择时说明预计图片数量和额度，只有超出该范围时才再次询问。
4. 一次生成 `article.md`、最终图片、`article.html` 和可见排版预览，然后直接进入门控 6。
5. 依赖缺失、附件不可读、事实冲突或图片成本明显超出预估时必须暂停，不得猜测或伪造。
6. 门控 6 前禁止创建微信草稿；极速生成只生成本地可审阅成品。

### 高质量生成模式

1. 依次执行门控 1-5，每一步展示实际产物并等待用户选择、确认或修改。
2. 文案阶段展示真实标题候选、结构和正文审阅内容，不只描述“已完成”。
3. 配图阶段先生成实际缩略图候选，每张同时显示编号、位置、文字说明和推荐标记。
4. 排版阶段展示可见 HTML 预览或截图，不只报告文件路径。
5. 用户确认各阶段后仍必须进入门控 6 审核完整图文成品；此前不得创建草稿。

## 门控 I：选择生图方式

当文章首次进入需要生成封面、章节图、信息图、流程图或其他图片的节点时，必须暂停一次并询问；无论极速模式还是高质量模式都不能跳过。文章不需要生成任何新图片，或用户已在本次任务中明确选择过时，不重复询问。

只向用户显示以下两个名称，不把 Baoyu 的内部 Skill 名作为用户选项：

```text
请选择本次文章的生图方式：
- swing-wechat 内置生图（默认）：使用内置的专业封面、文章插图、信息图和关系图生成链路。
- 当前 Agent ImgGen：使用当前 AI 工具自身提供的系统级图片生成能力。
```

执行规则：

1. 记录本次任务上下文 `image_generation_provider: swing-wechat|agent-imggen`，Phase 3、Phase 4 和指定图片的重新生成都沿用该值。
2. 用户回复“默认”“按推荐”或没有指定名称但明确让流程继续生图时，选择 `swing-wechat`；首次到达门控时不能把用户此前对大纲、正文或生成模式的“按推荐”当作生图方式授权。
3. 用户在最初请求中已明确指定“swing-wechat 内置生图”或“当前 Agent ImgGen”时，记录选择后直接执行，不再次询问。
4. 记录选择后再次调用 `swing-wechat-env-config`，只检查并准备所选生图链路；就绪后才能进入 Phase 3。
5. `swing-wechat` 在内部按图片类型路由到最小 Baoyu Skill 集；缺失时按需安装，禁止安装整个仓库。
6. `agent-imggen` 读取并遵循当前宿主 Agent 的系统级图片生成 Skill 或工具规范；不得假设所有 Agent 都使用 Codex 的 `$imagegen` 名称，也不得安装 Baoyu 视觉 Skill。
7. 所选链路不可用或生成失败时，说明当前链路的具体问题，并询问是否切换到另一种方式；不得静默切换，也不得用文本提示词或 SVG 占位图冒充生成结果。
8. 用户可以在后续明确要求切换；切换后更新上下文，并说明已生成图片是否保留。不要自动重生成已经确认的图片。

## 核心设计原则

### 1. 硬规则 vs 软规则

| 类型 | 说明 | 处理方式 |
|------|------|---------|
| **硬规则** | 结构性/必备性约束（布局方向、必备元素、固定文案） | 不可变，自动套用 |
| **软规则** | 视觉细节（颜色、字体、装饰样式、具体风格） | 极速模式自动采用推荐项；高质量模式必须提供 2+ 个可见候选 |

### 2. Agent 决策规则

```
1. 先读取 generation_mode，再执行任何生成动作
2. 分析内容并对候选排序，始终记录推荐理由
3. 极速模式：采用排名第一的推荐项，不暂停门控1-5
4. 高质量模式：有 2+ 个合理方案时展示真实候选，让用户选择
5. 开放性设计在高质量模式提供 3 个候选
6. 用户说“按推荐”时只自动处理当前门控，不改变已选模式
```

### 3. 品牌固定结构

以下元素由当前品牌画像自动套用，不占用门控（详见 `swing-wechat-layout`）：
- 文章编号、作者署名、END 标记、今日话题
- 当前品牌的固定 CTA、联系区块和资产；不得把 Tiny Wings 联系区块套到三河序

---

## Phase 0：环境与配置准备

### 使用 Skill
`swing-wechat-env-config` + `swing-wechat-secret-config`（仅在凭据缺失或用户要求迁移时）

### 执行逻辑

门控 M 选定模式后立即调用 `swing-wechat-env-config`，无需用户额外要求“先检查环境”。

1. **品牌画像检查**：
   - 确认 `brand_profile_id` 存在于 `profiles/brand_profiles.json`
   - 确认当前阶段使用该画像的内容方向、视觉方案和布局模板
   - 不从 Skill 包、文章目录或网络读取密钥

2. **依赖检查**：
   - swing-wechat-secret-config / markdown / html / layout / publish / workflow
   - Phase 0 只检查两种生图链路是否可发现，不在用户选择前安装 Baoyu Skill
   - 用户在门控 I 选择 `swing-wechat` 后，根据当前文章的图片位置和关系类型计算 Baoyu 最小能力集，不检查或安装整个仓库
   - 内置生图中封面使用 `cover`；章节场景图使用 `scene`；数据/知识信息图使用 `infographic`；流程/架构/关系图使用 `diagram`；需要 Baoyu 生成后端时增加 `image-gen`
   - 用户选择 `agent-imggen` 后，只检查当前 Agent 系统级图片生成能力，不检查或安装 Baoyu 视觉 Skill
   - 只有用户选择 Baoyu HTML 主题时才检查 `layout`
   - Python 3.10+ / Node.js 18+ / ImageGen

3. **公众号账号配置**：
   - 检查当前 `account_id` 对应的 `~/.wechat/accounts/{account_id}/credentials.env` 状态
   - 旧版 `~/.wechat/.env` 和 JSON 只用于兼容迁移，不作为两个品牌之间的自动回退来源
   - 如当前目标需要发布且凭据未就绪 → 调用 `swing-wechat-secret-config --account {account_id}`，让用户在本地终端隐藏输入 AppSecret
   - Agent 不得在聊天中索取 AppSecret；如果命令工具没有交互式 TTY，给出本地配置命令并暂停门控，用户确认完成后重新检查
   - 账号选择必须在网关 G 确认，不能在发布脚本内部静默切换

4. **发布模式选择**：
   - API 直连（固定 IP）
   - Remote SSH 隧道（多 IP）
   - Chrome CDP（管理员扫码）

5. **验证**：
   - 仅在需要推送草稿时测试当前账号 access_token
   - 确认当前账号的 IP 白名单有效

6. **按所选生图方式准备依赖**：
   - 进入 Phase 3 前必须已完成门控 I；没有 `image_generation_provider` 时返回门控 I。
   - 选择 `swing-wechat` 时，根据本篇文章实际图片类型列出所需 Baoyu Skill，并检查当前技能目录中对应 `SKILL.md` 是否存在。
   - 全部已安装时直接读取并调用对应 Baoyu Skill，不运行安装命令。
   - 存在缺失项时，直接运行 `npx skills add JimLiu/baoyu-skills --skill <缺失 Skill> ... --global --agent codex --yes --copy`；多个缺失项重复传入 `--skill`，不得使用 `--all` 或 `--skill '*'`。
   - 安装后重新检查。当前任务若尚未刷新技能索引，直接读取新目录中的 `SKILL.md` 并遵循其流程；后续 Codex 任务可按正常 Skill 名调用。
   - 选择 `agent-imggen` 时，读取当前 Agent 系统级生图规范并检查实际生成、保存和对话内展示能力；不执行 Baoyu 安装命令。
   - HTML 排版方式独立于生图方式；只有另行选择 Baoyu 排版主题时才检查和补装 `baoyu-markdown-to-html`。
   - 已存在的技能不覆盖；安装失败时说明缺失项。`swing-wechat-html` 只作为 HTML 排版 fallback，不能替代缺失的视觉生成能力。

### 🔲 门控0：自动环境门禁

- 当前目标所需环境、附件读取能力和配置全部就绪：记录检查结果并按已选模式进入 Phase 1，不要求用户重复确认。
- 目标公众号未确认：暂停在网关 G，不进入文章规划。
- 当前账号凭据缺失但只生成 Markdown、图片或 HTML：可以继续生成，但标记草稿推送未就绪。
- 当前账号凭据缺失且目标需要推送草稿：调用本地 `swing-wechat-secret-config --account {account_id}`，不得在聊天中收集密钥。
- 尚未确认推送草稿时缺少发布凭据：标记“草稿推送未就绪”，可继续生成完整成品，但执行门控 6 的草稿推送前必须补齐。
- 当前阶段所需依赖缺失、账号不明确、凭据尚未安全保存或凭据验证失败：立即暂停，说明缺失项及最短修复路径。
- 不在对话、报告、日志、命令参数或生成文件中显示完整 AppSecret、access token 或其他密钥。用户若已把 AppSecret 发进聊天，提示立即重置，不得继续使用该值。

---

## Phase 1：文章规划

### 使用 Skill
`swing-wechat-markdown`

### 执行逻辑

1. **读取已确认品牌画像**：不得自行选择 Tiny Wings 或三河序；缺少 `brand_profile_id` 时返回网关 G。
2. **分析用户需求**：
   - 提取文章主题、类型（技术干货/行业洞察/展会资讯/企业文化/营销推广）
   - 确认文章序号（查询最新序号 +1）
   - 确认素材资料（Word 文档、提纲、数据等）

3. **生成计划书**：

```markdown
## 公众号文章创作计划

### 基本信息
- 文章标题：（拟定标题）
- 文章类型：技术干货 / 行业洞察 / ...
- 文章序号：第 N 篇
- 主题配色：tech（#0455A2 蓝）/ industry / culture / marketing
- 预计字数：2000-3000 字

### 文章大纲
1. 开场段：[痛点引入/背景描述]
2. 第一章节：[核心观点 + 论据]
   - 核心价值：...
   - 常见误区：...
   - 实施关键：...
3. 第二章节：[核心观点 + 论据]
   ...
4. 总结段：[价值总结]
5. 今日话题：[互动引导]
6. 标准结尾：联系我们（自动套用）

### 预计配图位置
| 序号 | 位置 | 图片类型 | 内容描述 |
|------|------|---------|---------|
| 1 | 封面 | 封面图 | [描述] |
| 2 | 第一章节 | 章节引言图 | [场景描述] |
| 3 | 第一章节内 | 概念辅助图 | [类型待定] |
| ... | ... | ... | ... |
```

### 🔲 门控1：用户审核大纲

仅高质量模式暂停。先展示 2-3 个真实标题候选（标记推荐项和理由）、文章定位、受众、语气、完整章节大纲和预计配图位置，再显示确认文案：

```
问题："请选择标题并确认以上文章计划；也可以直接指出需要修改的章节"
选项：
- "采用推荐标题，确认大纲" — 进入 Phase 2
- "选择其他标题" — 指定标题编号
- "需要修改大纲" — 修订大纲后再确认
- "需要调整章节结构" — 增减章节
- "需要修改主题配色" — 切换配色方案
```

极速模式自动采用排名第一的标题和大纲，记录推荐理由后直接进入 Phase 2，不显示门控问题。

---

## Phase 2：内容生成

### 使用 Skill
`swing-wechat-markdown`

### 执行逻辑

1. 读取已确认品牌画像和 `swing-wechat-markdown` 写作风格指南
2. 根据品牌画像和计划中的文章类型选择结构模板和语言风格
3. 按当前品牌用词规范生成 Markdown 内容；不得把 Tiny Wings 的固定 CTA 写入三河序文章
4. 确保包含固定元素（文章编号、作者署名）
5. 在需要配图的位置预留标记：`<!-- IMG: 配图描述 -->`
6. 自动生成章节引言图的场景描述（供 Phase 3-4 使用）

### 🔲 门控2：用户审核内容

仅高质量模式暂停。展示标题、开篇、各章节标题与核心段落、结论和今日话题，并提供完整 `article.md` 供审阅；不得只回复“正文已生成”。

```
问题："文章内容已生成，请审核后确认"
选项：
- "确认，继续视觉方案设计" — 进入 Phase 3
- "需要修改内容" — 告诉我哪里需要调整
- "需要修改标题" — 重新拟定标题
- "重新生成" — 完全重写
```

极速模式自动采用推荐正文并完成事实、品牌用词和结构检查，记录结果后直接进入 Phase 3。

---

## Phase 3：视觉预览候选

### 核心原则：图片候选必须可见，提示词只能作为补充

封面图、章节引言图和每个 `<!-- IMG: ... -->` 的候选，必须先生成真实预览图再让用户选择。不得只展示风格名、提示词或图片文字描述，并要求用户据此确认。

### 执行逻辑

1. 检查 `image_generation_provider`；未设置时先执行门控 I，不得直接调用任一生图工具。
2. 扫描 Markdown 中全部图片占位符，为每个位置分配稳定 ID，例如 `IMG-01`（封面）、`IMG-02`（第一章引言）和 `IMG-03`（流程图）。
3. 按内容决定图片类型：封面使用左右结构；章节引言图必须场景化；流程、架构、对比、数据和时间线使用对应的关系图类型。标题和小标题等非图片元素仍提供 2-3 个紧凑的排版示例。
4. 按所选链路生成：`swing-wechat` 必须执行“封面 → `baoyu-cover-image`、章节场景图 → `baoyu-article-illustrator`、数据/对比/知识信息图 → `baoyu-infographic`、流程/架构/关系/时间线 → `baoyu-diagram`”，需要实际渲染时由这些专业 Skill 调用 `baoyu-image-gen`；`agent-imggen` 必须遵循当前 Agent 系统级 ImgGen 规范，直接完成相同图片位置的构图、生成、保存与检查。
5. 高质量模式为封面生成 2-3 张预览图，为每个正文占位符生成 2 张预览图；候选必须在内容、构图、风格或信息表达上真实不同，不能只改提示词措辞。极速模式每个位置只生成排名第一的推荐预览。
6. 使用所选生图方式生成预览图并保存到 `images/previews/IMG-01-A.png` 等路径。优先使用预览尺寸（正文图不低于 768px 宽，封面保持 2.35:1）；禁止水印和图片内大段文字。
7. 高质量模式批量生成前告知用户本轮预览数量、尺寸和预计积分消耗，并获得一次生成预览的确认。极速模式在完成门控 I 后，预估范围内的推荐图片不再次暂停；超出预估才询问。
8. 图片生成能力、图片附件展示能力或所选链路缺失时，标记 Phase 3 未就绪并让用户修复或明确切换；不得以纯文本候选替代可见预览。

**预览呈现方式**：高质量模式把实际图片作为附件、可渲染的绝对本地路径或内联缩略图展示在对话中，每张图同时附带 ID、位置、简短说明和推荐标记。不得只给无法显示的相对路径。例如：

```markdown
### IMG-02 第一章引言图：产线数据采集

| 候选 | 预览 | 说明 |
|---|---|---|
| IMG-02-A（推荐） | ![IMG-02-A](images/previews/IMG-02-A.png) | 工程蓝图，突出设备、传感器和数据流 |
| IMG-02-B | ![IMG-02-B](images/previews/IMG-02-B.png) | 扁平矢量，突出现场人员与看板协作 |
```

提示词保存到 `images/prompts/` 便于复现，但默认不作为用户的选择对象。

### 🔲 门控3：用户选定预览图

仅高质量模式暂停：

1. 展示所有图片占位符的候选预览；用户按图片 ID 选择，例如“`IMG-01-B、IMG-02-A，其余按推荐`”。
2. 标题和小标题使用可见的紧凑排版示例选择，不只给样式名称。
3. 支持“全部按推荐”“只重生成 IMG-03”或“删除 IMG-04”。重生成只处理指定位置，保留已选图片。
4. 用户确认的是实际缩略图及其编号，而不是生成提示词文本。

极速模式自动采用每个位置的推荐预览，记录 ID 和理由后直接进入 Phase 4；这些缩略图必须保留到门控 6 展示。

---

## Phase 4：最终配图

### 执行逻辑

1. 沿用门控 I 记录的 `image_generation_provider`；最终图、细化和重新生成不得自行切换生图方式。
2. 为每张已选预览保留对应 Prompt、ID、种子/参考图（工具支持时）、生图方式和用户选择，保存到 `visual-plan.md`。
3. 预览达到目标尺寸、比例和清晰度时直接复用；否则以已选预览作为视觉参考进行高清化或细化，保持构图、主题和风格，不得回退为无参考的随机重生成。
4. 最终图保存为 `images/01-cover.png`、`images/02-chapter-1.png` 等，并替换 Markdown 占位符。
5. 展示最终图片缩略图、文章内位置和本次生图方式，供用户进行最终验收。

**Prompt 编写规范**：
```
[Type] [Style] illustration for WeChat article
Subject: [具体内容描述]
Scene: [场景描述 — 如车间流水线、电厂烟囱等]
Key elements: [关键元素列表]
Color palette: #0455A2, #375EB5, #4D9AF3, #F9A912 (抟微科技品牌色)
Background: light (#E8F0FF or white) or [指定背景]
Constraints: no watermark, clean minimalist tech style
Size: 1536x1024 (正文图) / 2.35:1 (封面图)
```

**重要提示**：每次调用 ImageGen 前告知用户本次会生成预览还是最终图、数量和预计积分；预览批次可合并为一次确认。

### 🔲 门控4：用户审核配图

仅高质量模式暂停：

```
问题："最终配图已生成（N 张），请查看各图片缩略图和文章位置"
选项：
- "确认，继续排版" — 进入 Phase 5
- "某张图需要细化或重新生成" — 指定图片 ID 和调整方向
- "返回预览候选" — 为指定图片位置重新生成候选缩略图
- "删除某张图" — 去掉不需要的配图
```

极速模式完成最终图后直接进入 Phase 5，不中途询问；门控 6 必须展示全部最终图片缩略图和文章位置。

---

## Phase 5：排版与布局

### 使用 Skill
`swing-wechat-html` + `swing-wechat-layout`

### 执行逻辑

1. **应用当前品牌结构**（自动套用，来自已确认品牌画像和 `swing-wechat-layout`）：
   - 文章编号、作者署名、END 标记、今日话题
   - 使用当前品牌的固定元素、CTA 和资产；Tiny Wings 的联系我们区块不得套到三河序
   - 强约束检查清单验证

2. **应用用户选定的视觉方案**（来自当前品牌画像和 Phase 3）：
   - 封面图样式
   - 章节大标题样式
   - 小标题样式
   - 配图位置和大小

3. **生成排版**：
   - 方式 A：`md_to_wechat.py`（Python，swing 品牌排版）
   - 方式 B：`baoyu-markdown-to-html`（TypeScript，baoyu 排版）
   - 根据用户在 Phase 0 的选择决定

4. **配色应用**：
   - 主色：#0455A2（或文章主题色）
   - 强调色：#F9A912
   - 副色：#375EB5 / #4D9AF3
   - 正文色：#3E3E3E
   - 浅背景：#E8F0FF

5. **强约束检查**：
   - [ ] 文章编号存在
   - [ ] 作者署名存在
   - [ ] END 标记存在
   - [ ] 联系我们区块完整（标题+段落+照片+4行联系方式+**公众号二维码**）
   - [ ] 章节大标题有设计元素
   - [ ] 小标题有设计元素
   - [ ] 今日话题存在

6. **可见预览**：
   - 生成可打开的 `article.html`
   - 高质量模式展示至少一张首屏截图和一张完整/分段长图预览，或使用 Agent 原生 HTML 预览能力
   - 不得只报告“排版已完成”或只给不可访问的路径

### 🔲 门控5：用户审核排版

仅高质量模式暂停：

```
问题："排版已完成，请在预览中查看效果"
选项：
- "确认排版，查看最终成品" — 进入 Phase 6
- "需要修改配色" — 切换主题色
- "需要微调样式" — 告诉我具体调整
- "重新排版" — 重新生成
```

极速模式自动采用推荐排版并生成可见预览，直接进入 Phase 6。

---

## Phase 6：成品确认与草稿推送

### 使用 Skill
`swing-wechat-publish`

### 执行逻辑

1. 汇总完整成品，不执行任何微信写入：
   - 当前公众号名称、`brand_profile_id` 和本次 `account_id`
   - 最终标题、摘要和正文审阅入口
   - 封面及全部正文配图缩略图，并标明文章位置
   - 微信排版 HTML 的可见预览或截图
   - 文章编号、作者、内容长度、图片数量和固定元素检查结果
   - 本次采用的模式和推荐/用户选择记录
2. 明确显示状态：`尚未推送到微信公众号草稿箱`。
3. 等待门控 6。用户要求修改时返回对应阶段；不得把此前的阶段确认视为草稿推送授权。

### 🔲 门控6：用户确认是否推送草稿

```
问题："完整图文成品已生成并通过检查，目前尚未推送草稿。是否确认推送到微信公众号草稿箱？"
选项：
- "确认推送草稿" — 执行最终凭据检查并创建微信草稿
- "需要修改" — 指定文案、图片或排版后重新回到本门控
- "暂不推送" — 只保留本地成品
```

只有“确认推送草稿”或同等明确表达才构成授权。获得授权后：

1. 再次显示并确认目标公众号和遮蔽后的 AppID；重新执行当前账号的凭据、IP 白名单和连接模式检查。缺失时调用 `swing-wechat-secret-config --account {account_id}`，配置完成后必须再次询问是否推送草稿。
2. 使用选定账号的本地凭据和 API 直连、Remote SSH 或 Chrome CDP 连接方式上传图片并调用草稿创建接口。
3. 只允许调用草稿接口 `/cgi-bin/draft/add`；调用命令不得包含 `--publish`，不得调用 `/cgi-bin/freepublish/submit`。
4. 草稿创建成功后返回草稿状态和微信公众平台后续入口，不得自动执行正式发布。

**硬性边界**：无论极速模式还是高质量模式，Agent 都只能在最终确认后创建草稿。正式发布必须由用户登录微信公众平台手动完成；即使用户说“直接发布”，也要说明本工作流只推送草稿。

---

## 文章视觉结构规范（13 项，从上到下）

| 编号 | 元素 | 类型 | 门控 |
|------|------|------|------|
| ① | 封面图 | 软规则（2+ 候选） | 门控3 |
| ② | 文章编号 | 固定模板 | 无 |
| ③ | 作者署名 | 固定模板 | 无 |
| ④ | 开篇引言 | 内容生成 | 门控1+2 |
| ⑤ | 章节大标题 | 软规则（2+ 候选） | 门控3 |
| ⑥ | 章节引言图 | 软规则（2+ 候选） | 门控3 |
| ⑦ | 章节正文 | 内容生成 | 门控2 |
| ⑧ | 小标题 | 软规则（2+ 候选） | 门控3 |
| ⑨ | 概念辅助图 | 软规则（2+ 候选） | 门控3 |
| ⑩ | 总结段 | 内容生成 | 门控2 |
| ⑪ | 今日话题 | 固定模板 | 门控2 |
| ⑫ | END 标记 | 固定模板 | 无 |
| ⑬ | 联系我们 | 固定模板（标准化） | 无 |

---

## Skill 依赖关系

```
swing-wechat-workflow (v5 — 统一网关)
  ├── profiles/brand_profiles.json (品牌画像，不含密钥)
  ├── scripts/resolve_brand_profile.py (输入路由，不读密钥)
  ├── swing-wechat-env-config    (Phase 0 — 环境与账号检查)
  ├── swing-wechat-secret-config  (Phase 0 — 缺失凭据时安全配置)
  ├── swing-wechat-markdown      (Phase 1-2 — 内容生成)
  ├── swing-wechat-layout       (Phase 5 — 品牌固定结构)
  ├── swing-wechat-html       (Phase 5 — 排版转换)
  ├── swing-wechat-publish      (Phase 6 — 用户确认后创建草稿)
  └── baoyu-skills (按能力安装) (Phase 3-4 — 风格候选 + 配图)
      ├── baoyu-cover-image          (封面 6 维系统)
      ├── baoyu-article-illustrator  (23 风格 + 兼容性矩阵)
      ├── baoyu-infographic          (数据、对比和知识信息图，按需)
      ├── baoyu-diagram              (流程、架构和关系图，按需)
      ├── baoyu-image-gen            (图片生成后端，按需)
      └── baoyu-markdown-to-html     (Baoyu 主题排版，按需)
```

其中 `baoyu-cover-image`、`baoyu-article-illustrator`、`baoyu-infographic`、`baoyu-diagram` 和 `baoyu-image-gen` 对用户统一显示为 **swing-wechat 内置生图**。选择 **当前 Agent ImgGen** 时不进入该分支，而是调用宿主 Agent 的系统级图片生成能力。`baoyu-markdown-to-html` 属于独立的排版选择，不受生图方式影响。

---

## 文件输出规范

```
项目目录/
├── articles/
│   └── 2026-08-10-{topic}/
│       ├── article.md              # Markdown 原文
│       ├── article.html            # 排版后 HTML
│       ├── cover.png               # 封面图
│       ├── images/                 # 配图目录
│       │   ├── previews/           # 门控3实际候选缩略图
│       │   │   ├── IMG-01-A.png
│       │   │   ├── IMG-01-B.png
│       │   │   └── IMG-02-A.png
│       │   ├── 01-cover.png        # 门控4最终图
│       │   ├── 02-scene-chapter1.png
│       │   ├── 03-infographic-concept.png
│       │   └── prompts/            # Prompt 文件
│       │       ├── 01-scene-chapter1.md
│       │       ├── 02-infographic-concept.md
│       │       └── 03-framework-arch.md
│       └── visual-plan.md          # 视觉方案记录（用户选定结果）
```
