## ADDED Requirements

### Requirement: 发布前校验标题、正文和图片
`publish_to_xhs()` 函数 SHALL 在调用 MCP 发布接口前执行以下校验，任何校验失败 SHALL 立即返回包含明确说明的错误消息字符串，不发起网络请求：

| 字段 | 规则 |
|------|------|
| 标题 | 非空，长度 ≤ 20 个字符（中英文均按 1 字符计） |
| 图片数量 | 至少 1 张，至多 18 张 |
| 图片文件 | 每个路径对应的文件在磁盘上真实存在 |

#### Scenario: 标题超长时返回明确错误
- **WHEN** `publish_to_xhs()` 被调用且标题字符数超过 20
- **THEN** 返回包含「标题超长」提示及当前字符数的错误字符串，不调用 MCP 接口

#### Scenario: 无图片时返回明确错误
- **WHEN** `publish_to_xhs()` 被调用且最终收集到的图片路径列表为空
- **THEN** 返回「至少需要 1 张图片」的错误字符串

#### Scenario: 图片数量超限时返回明确错误
- **WHEN** 最终图片路径列表超过 18 张
- **THEN** 返回包含当前图片数和限制数的错误字符串，不发起发布请求

#### Scenario: 图片文件不存在时返回明确错误
- **WHEN** 图片路径列表中有路径对应的文件不存在于磁盘
- **THEN** 返回包含该文件路径的「文件不存在」错误字符串

#### Scenario: 校验通过后正常发布
- **WHEN** 所有字段均通过校验
- **THEN** 正常调用 MCP 接口发布，行为与改造前一致
