当前只执行第一阶段：新闻采集与候选稿整理。

目标：
从固定入口收集 7 条可用于 KeplerJAI 每日简讯的 AI 行业新闻候选稿。

固定新闻入口：
`https://www.newsnow.co.uk/h/Science/AI?type=ln`

阶段边界：
1. 不要发布到 KeplerJAI 后台
2. 不要生成 curl
3. 不要发送到微信群或微信好友
4. 不要输出分析过程、工具日志或解释性长文
5. 在最终回复前，必须先把最终 JSON 结果写入本地文件

固定落盘路径：
`__STAGE1_OUTPUT_PATH__`

落盘要求：
1. 使用可用的文件写入工具，把最终 JSON 完整写入上述路径
2. 如果文件已存在，直接覆盖
3. 写入内容必须与最终回复内容完全一致
4. 先写文件，后回复
5. 如果无法写入该文件，则不要假装成功，直接输出失败 JSON

筛选要求：
1. 只保留人工智能行业相关新闻
2. 排除虚拟货币、政治敏感、明显八卦、明显高风险或纯负面内容
3. 如果网页没有中文标题，允许你根据英文标题自然翻译 `chinese_title`
4. 不强制必须拿到“原始跳转前 URL”，只要最终文章页可访问且能对应正文即可
5. 最终必须整理出正好 7 条
6. 尽量让来源和题材分散，不要过度集中在同一媒体

执行策略：
1. 先浏览固定入口，优先挑选最容易访问、最容易提取正文的候选
2. 不要强求先收集很多备选，当前目标是尽快拿到 7 条合格新闻
3. 如果某篇文章打不开、正文提取失败、browser 超时、web_fetch 无内容，直接换下一条
4. 不要连续重试同一个失败页面
5. 新闻正文优先于图片，但如果能稳定拿到合适主图，应一并记录

每条新闻必须输出以下字段：
- `rank`
- `english_title`
- `chinese_title`
- `source_site`
- `source_url`
- `publish_date`
- `english_body_raw`
- `image_url`
- `image_status`
- `image_note`
- `summary_cn`

字段要求：
1. `rank` 必须是从 1 到 7 的整数，连续不可跳号
2. `english_title` 必须来自可访问页面的英文标题
3. `chinese_title` 必须自然、简洁、适合公开发布
4. `source_url` 必须是最终可访问文章链接
5. `publish_date` 能拿到就写标准日期字符串，拿不到就写空字符串 `""`
6. `english_body_raw` 必须是正文摘要或正文关键信息，不要留空
7. `summary_cn` 必须是 2 到 4 句中文摘要，不要写成一句话

图片规则：
1. 允许尝试提取与正文强相关的主图
2. 只有在你确认图片不是广告图、缩略图、装饰图、占位图，并且适合公开展示时，才填写 `image_url`
3. 如果拿到了可直接访问的主图，写：
   - `image_status: "usable"`
   - `image_note`: 简要说明图片来源和为什么可用
4. 如果没有找到合适图片，或者图片不稳定、不相关、不适合公开展示，写：
   - `image_status: "skip"`
   - `image_note`: 准确说明原因
5. 如果 `image_status` 是 `"skip"`，则 `image_url` 必须为 `""`

输出格式要求：
1. 最终只输出一个 JSON 对象
2. 不要输出 YAML
3. 不要输出 Markdown 代码块
4. 不要在 JSON 前后补充说明文字
5. 不要输出“中文审核摘要”之类的额外段落
6. JSON 字符串内如果出现双引号，必须做合法转义，确保整体可以被 `JSON.parse` 成功解析

JSON 顶层结构必须严格如下：
{
  "item_count": 7,
  "items": [
    {
      "rank": 1,
      "english_title": "",
      "chinese_title": "",
      "source_site": "",
      "source_url": "",
      "publish_date": "",
      "english_body_raw": "",
      "image_url": "",
      "image_status": "usable",
      "image_note": "",
      "summary_cn": ""
    }
  ]
}

自检要求：
1. 输出前自检 `item_count` 是否等于 7
2. 输出前自检 `items` 是否正好 7 条
3. 输出前自检 `rank` 是否从 1 连续到 7
4. 输出前自检每条是否都包含全部字段
5. 如果正文过长，可以适当压缩 `english_body_raw`
6. 输出前必须再次检查整段文本是不是合法 JSON，禁止出现未转义双引号、尾逗号、注释或多余文字

成功时：
只输出最终 JSON 对象。

失败时：
只输出：

{
  "status": "FAILED",
  "reason": "...",
  "collected_count": N
}
