# 内容流水线 SOP（抓热点 → 整理 → 发帖）

> 落地日期 2026-07-22。来源:一条外部「内容/社媒工具流水线」,比对 cs 系统后确认**几乎不重复**,吸收进 social-hub。
> 分层原则(SSOT):**能力本体挂全局/cs 层,配置 + SOP + 数据落地在本项目。** `last30days` 已注册进 cs skill 全局注册表(`~/.agents/skills/last30days`,2026-08-17, v3.21.0),runner 自动定位。

## 一、已落地的能力

| 环节 | skill | 来源 | 鉴权 |
|------|-------|------|------|
| 抓热点 | `last30days`（全局 `~/.agents/skills/last30days`） | mvanhorn/last30days-skill | Reddit/HN/arXiv/Techmeme 免费无 key;X 需 cookie 或 XAI_API_KEY(可选) |
| 抓热点(中文AI) | `aihot-trends.sh`（`scripts/aihot-trends.sh`） | aihot.virxact.com 公开 API | 匿名只读,零鉴权;拉热点榜 + 最新日报,落地 `analytics/trends/YYYY-MM-DD-aihot.md` |
| 挖需求 | `customer-research` | coreyhaines31/marketingskills | 纯方法论,零鉴权 |
| 排内容 | `content-strategy` / `social` | 同上 | 纯方法论,零鉴权 |
| 改稿 | `copy-editing` | 同上 | 纯方法论,零鉴权 |
| 配图(数据图) | 待接 antvis 图表 | — | 与 `cs image`(生成式)、`fireworks-tech-graph`(架构图)边界互斥 |

> ⚠️ `last30days` 在 skills.sh 被标 High Risk(跑脚本+联网抓取的通用告警,非特指恶意)。只用免费源、看过脚本再跑。

**AIHOT 数据源构成与更新节奏**(实测基准见 `analytics/trends/aihot-source-baseline.md`,2026-08-30):

| 维度 | 说明 |
|------|------|
| 信源规模 | 168 个精选数据源(官方口径),自动抓取 X(Twitter)、微信公众号、RSS、官方博客等数百个信源 |
| 来源构成(24h 实测) | X/Twitter ~70%(海外大V为主+国内AI博主)、IT之家 17%、海外科技媒体 RSS ~7%(TechCrunch/The Decoder/Ars/MarkTechPost)、Hacker News ~4%(buzzing.cc 中文翻译)、个人/官方博客 ~2% |
| 国内外配比 | 海外为主(~80%+),国内为辅(IT之家、公众号、国内 X 博主) |
| 来源标注 | 每条数据都带 `source.name` + `links.original`(第三方原文);热点榜每条带完整 `sourceNames` 信源名单;日报每条带 `source` + `attribution` |
| 新条目更新 | 全天持续,每小时都有新条目进入 |
| API 缓存 | 5 分钟(`cache-control: max-age=300`),轮询间隔 5-10 分钟即可 |
| 热点榜 | 48h 滚动窗口,按多信源报道密度实时排序 |
| AI 日报 | 每天 08:00(北京时间)发布一次 |
| 官方轮询建议 | "新条目全天陆续进入;精选增删改每天几次到几十次;日报每天 08:00 发布一次,据此选轮询间隔,不必更密" |

## 二、最小闭环(当前可跑,不含 live 发帖)

```bash
# 1. 抓热点 —— 用 runner(自动从 cs 注入 DeepSeek 智能排序,X 源需 Chrome 登录 x.com)
./scripts/last30days.sh "<选题关键词>"
#   默认 --search reddit,hackernews,x --deep --emit=md;可覆盖,如免 X:
#   ./scripts/last30days.sh "<选题>" --search reddit,hackernews --quick --emit=compact
# 1b. 抓中文 AI 热点 —— AIHOT 热点榜 + 最新日报,写专栏参考(可选,单独跑)
./scripts/aihot-trends.sh
#   产出 analytics/trends/YYYY-MM-DD-aihot.md;也可由 daily-trends.sh 每日自动抓
# 2. 把 ranked evidence 喂给 customer-research / content-strategy,产出选题+钩子
# 3. 用 copy-editing 改稿,按目标 ID 的 voice 定稿
# 4. 草稿落 content/<ID>/,人工过一遍再发
```

## 三、质量缺口 & 状态

1. **LLM 智能排序 —— ✅ 已闭合(2026-07-22)**
   引擎默认调 LLM 做规划/重排,无 key 时降级 deterministic(日志 `source=deterministic` + HTTP 400)。
   解法:借 OpenRouter 客户端(走标准 `/chat/completions`,DeepSeek 兼容;OpenAI 槽用 `/responses` 不兼容会 400)指向 DeepSeek。
   `scripts/last30days.sh` 已封装,**运行时从 `cs secrets get secret://deepseek/api-key` 注入,密钥不落盘**。
   验证:日志出现 `source=llm` 即生效。
2. **X 源 —— ✅ 已闭合(2026-07-22,走 Chrome)**
   引擎从 Chrome 读 `.x.com` 的 `auth_token`/`ct0`(`FROM_BROWSER=chrome`,已固化进 runner)。
   macOS 首次读会弹「Chrome Safe Storage」钥匙串框,点 **Always Allow** 后缓存、后续静默。
   前提:Chrome 已登录 webkubor 的 X。已验证 `[Bird]` 后端能抓到真实推文。
   > 注:①Reddit keyless(RSS)偶发 0 命中,是上游 RSS 限流抖动,重跑/`--deep` 通常能拿到。
   > ②X 单次查询偶发 0,是 Bird 浏览器抓取的限流/查询方差,换词或重跑即可;能力本身已验证可用。
   > ③cookie 过期后重新在 Chrome 登录 x.com 即可,无需改配置。

## 四、live 发帖(未接,需授权)

发 X 是**不可逆外发**,需 X API + 明确授权。走 WorkBuddy AI(已授权 webkubor 的 X)。
接入前必须:①人工审稿闸门 ②先只开读取权限验证 ③按 `platform-notes/voice-and-identity.md` 保 voice。

## 五、产出持久化(每次运行都要落,别留临时目录)

闭环每跑一次,四类产出各有固定的家,不落 `/tmp`:

| 产出 | 落地路径 | 说明 |
|------|---------|------|
| **热点数据** | `analytics/trends/<日期>-<主题>.md` | last30days 完整排序证据,选题依据存档 |
| **草稿** | `content/<ID>/drafts/<日期>-<slug>.md` | 含选题依据 + Hook A/B + 正文 + 红线自检 |
| **配图** | `content/<ID>/assets/` + R2 永久链 | `cs image gen` 出图,repo 留一份 |
| **发帖记录** | `content/<ID>/post-log.md` | 每条产出登记一行,状态流转 草稿→定稿→已发→已复盘 |
| **时间表** | `content/<ID>/calendar.md` | 排期表加一行;发布后复盘数据回填复盘表 |

> 已验证实例(2026-07-22 首条,webkubor/@doctordacker —— 当时的 handle，现为 @webkuborDev，同一账号):
> 数据 `analytics/trends/2026-07-22-agent-skills.md` · 草稿 `content/webkubor/drafts/2026-07-22-claude-skills-vault.md` ·
> 图 `content/webkubor/assets/2026-07-22-claude-skills-vault.png` · 记录 `content/webkubor/post-log.md` · 排期见 calendar「内容流水线产出排期」。

## 六、踩坑与教训(2026-07-22 首次端到端)

**发帖通道**
- ego-lite / chrome-devtools MCP 各跑**独立沙盒 profile**,都连不到你日常那个已登 X 的真 Chrome。要自动发帖,先在 **ego-lite 里登一次 x.com**(登录态可复用)。
- 从真 Chrome 解 X token(auth_token/ct0)注入其他浏览器 → 被凭据安全策略拦(合理),别走这条。

**X 发帖框自动化(Draft.js 富文本)**
- `typeText` 对 Draft.js **无效**(只进换行);用 **CDP `Input.insertText`**(对空框插入最干净)。
- **多框 thread 编辑器极不稳**:加不出新框、反复清空已填框、坐标点「+」对不准(疑似 DPR 偏移)。→ **thread 用回复串实现**(单框逐条,唯一稳定路径),别用「+」多框。
- X **持久化未发草稿** → DOM 里会同时存在「活跃发帖框 + 旧草稿框」两套同名节点,`querySelector` 命中旧的会**读到脏内容**(误导判断)。→ 富文本编辑器**以截图为准**,别信 innerText。
- CDP 修饰键:Meta/Cmd = **4**(不是 8,8 是 Shift)。
- 发帖前 X 会弹「AI 生成内容」和「图片无 ALT 描述」提醒 → 需处理(跳过或加描述)才真正发出。
- 发布用**断言闸门**:文案开头 + 有图 + 单条/多条模式 三者核对通过再点发布。

**其它**
- `cs image gen`:Codex 缺 `api.model.images.request` scope 会 401 → 自动降级 Token4AI gpt-image-2(可用)。
- 找外部 repo:推文 URL 常被截断,别猜;用 `gh search repos` / `gh repo list <user>` 定位真身。

## 七、提升路径(验证通过后)

项目本地 `.agents/skills/` → 稳定后:纯方法论 skill 提升到 `~/.claude/skills`(全局复用);
✅ `last30days` 引擎已注册进 `cs skill` 全局注册表(`~/.agents/skills/last30days`,2026-08-17 安装 v3.21.0),blog/公众号等其它项目可直接复用 `cs skill show last30days`,不再各项目复制多份。
