---
name: hermes-scheduler-merge-conflict-fix
description: 修复 hermes-agent cron/scheduler.py 中 Git 合并冲突导致的 Python 语法错误
trigger: hermes-gateway 或 WebUI 启动失败，日志出现 SyntaxError 且指向 scheduler.py
---

# Hermes scheduler.py Git Merge Conflict Fix

## 触发条件

`hermes-gateway` 或 `Hermes WebUI` 启动失败，日志中出现：
```
SyntaxError: invalid syntax
<<<<<<< Updated upstream
```

## 问题根因

执行 `git pull` 后产生合并冲突，`cron/scheduler.py` 残留冲突标记，导致 Python 语法错误。

典型场景：`cron/scheduler.py` 中的 `try:` 块（位于 `if` 语句内）缺少 `except:` 子句，Python 期望 `except` 或 `finally`。

## 修复步骤

1. **确认问题文件**
   ```bash
   python3 -m py_compile /root/.hermes/hermes-agent/cron/scheduler.py
   # 输出：SyntaxError: expected 'except' or 'finally' block
   ```

2. **查找冲突标记**
   ```bash
   grep -n "<<<<<<<\|=======\|>>>>>>>" /root/.hermes/hermes-agent/cron/scheduler.py
   ```

3. **分析冲突结构**（典型场景）：
   - `<<<<<<< Updated upstream` 块：旧代码（通常包含 `try:`/`config = load_gateway_config()` 等）
   - `=======` 分隔线
   - `>>>>>>> Stashed changes` 块：新代码（通常包含 `runtime_adapter` 发送逻辑）

   **关键**：新代码中的 `try:` 块往往缺少 `except:`，需手动补充。

4. **修复**：
   - 删除 `<<<<<<<` / `=======` / `>>>>>>>` 行
   - 删除旧代码块中与新代码重复的注释行（如 `# Prefer the live adapter...`）
   - 为新代码中不完整的 `try:` 块补充 `except Exception:`：

   ```python
   # 新代码中 try: 块缺少的 except：
   except Exception:
       logger.warning(
           "Job '%s': live adapter send to %s:%s raised exception, falling back to standalone",
           job["id"], platform_name, chat_id, traceback.format_exc(),
       )
       adapter_ok = False  # fall through to standalone path
   ```

5. **验证语法**
   ```bash
   python3 -m py_compile /root/.hermes/hermes-agent/cron/scheduler.py && echo "Syntax OK"
   ```

6. **重启服务**
   ```bash
   systemctl --user restart hermes-gateway
   ```

## 验证步骤

重启后检查：
```bash
cd /root/hermes-webui && ./ctl.sh status
# 应显示：● hermes-webui — running, Health: ok
```

## 预防

- `git pull` 前确保无进行中任务
- `git pull` 后立即检查是否有冲突：`git status`
- 有冲突时使用 `git mergetool` 而非手动编辑
