用途:说明 Releases 的 fetch 流水线如何把更新日志页面转换为结构化发布数据,并给出验证与配置方法。
抓取优先级:若来源有 metadata.feedUrl 则直接抓取解析 feed;若设置 metadata.markdownUrl 则抓取原始 Markdown;对已知静态渲染的提供方(Docusaurus、VitePress、WordPress、Ghost、Mintlify)走快速抓取,使用 Cloudflare crawl API 且 render: false,比完整渲染快约 10-30 倍;对 JS 重的页面使用 Cloudflare 浏览器渲染,作为快速抓取无内容时的回退。
解析:来源已有发布记录时默认增量解析,只提取新条目;首次抓取或指定 --full 时全量解析整页。每次抓取计算页面内容的 SHA-256 哈希,与上次相同则跳过解析,避免冗余 AI 调用。
使用方式:CLI 为 releases admin source fetch <slug> [--dry-run] [--max <n>] [--full] [--crawl/--no-crawl];类型化工具用 manage_source 的 fetch 动作,传 identifier,且始终做服务端全量抓取。结果可用 releases tail <slug> --json、releases admin source fetch-log <slug> 或 get_latest_releases 查看。
爬取模式:对索引页,按 crawl 模式(自动检测或提供方提示)跟随链接,逐页抓取解析后聚合;用 --crawl 或 metadata.crawlEnabled: true 启用。
feed 内容深度:feed 适配器会自动识别仅标题的 feed(每项内容少于 20 字符)并标记 feedContentDepth: "summary-only",使 fetchViaFeed 返回 null,回退到爬取或单页提取。部分内容的 feed 仍需人工评估,建议派子代理抽样 2-3 个发布 URL 对比页面与 feed 摘要,若页面更丰富则记录评估并启用爬取模式,再 --full 重新抓取回填。
日期:尽量补全 publishedAt,仅有月份用当月 1 日,季度或季节用首日,仅年份用 1 月 1 日;确实无日期信号才省略。
rollup 分类:季节、季度、年度汇总页或重新宣布多项已发布功能的页面标记 type: "rollup";单个版本发布、单日更新、单一产品公告不标记。解析前先读 playbook,遇到新的 rollup 来源应更新 playbook 备注。
博客类来源:作为补充来源,需用 parseInstructions 明确包含与跳过内容,先 --dry-run 检查信噪比并迭代;博客索引页内容通常较薄,可启用爬取模式但成本较高。
验证流程:新增来源先 dry-run 再正式抓取,检查结果;效果差则更换 URL 或类型,无可用发布则删除来源。
限制:类型化工具不支持 --dry-run、--max、--full、--crawl 等 CLI 标志;自动检测只能识别完全空内容的 feed;爬取模式成本较高,仅建议用于高价值来源。