- 新增常驻调度器 daily/scheduler.py + run-scheduler.ps1(定时生成/推送) - 新增 daily/bridge_manager.py:Windows 兼容的 Cursor SDK 桥接 - 新增 skills/daily-featured-pick 首推 Skill 与叙事轴/去重逻辑 - 新闻抓取窗口、GitHub 搜索、企微 delta 模式等多项改进 - 补充设计文档与 superpowers 计划/规范 - 新增对应测试(scheduler、featured_pick、github_search、news_fetch_window 等) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
165 lines
5.5 KiB
Markdown
165 lines
5.5 KiB
Markdown
# skills-hot-daily
|
||
|
||
Skills / GitHub 早报推送(企微 Webhook)。
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
skills-hot-daily/
|
||
├── README.md
|
||
├── .env.example # 早报 webhook、GitHub 等
|
||
├── requirements.txt # Python 依赖
|
||
├── run-daily.ps1 # 生成 + 推送一条龙
|
||
├── send-wecom.ps1 # 仅推送
|
||
├── daily/ # 早报 Python 包
|
||
│ ├── __main__.py # python -m daily [generate|push]
|
||
│ ├── config.py
|
||
│ ├── generate.py
|
||
│ ├── report_data.py # JSON 中间层
|
||
│ ├── cursor_editor.py # Cursor 编辑层
|
||
│ ├── llm_client.py
|
||
│ ├── localize.py # 仅中文化(Tier A)
|
||
│ ├── format_wecom.py
|
||
│ ├── webhook.py
|
||
│ ├── news/ # 国际 AI 时讯 RSS
|
||
│ │ ├── feeds.py
|
||
│ │ └── fetch.py
|
||
│ └── github/
|
||
│ ├── auth.py
|
||
│ ├── search.py
|
||
│ └── trending.py
|
||
├── output/ # YYYY-MM-DD.md / .wecom.md / .data.json / .editorial.json
|
||
├── skills/daily-editor/ # 早报 Cursor 编辑 Skill
|
||
│ └── SKILL.md
|
||
├── logs/
|
||
└── .cache/
|
||
```
|
||
|
||
---
|
||
|
||
## 早报推送
|
||
|
||
```powershell
|
||
cd d:\LY\diy\daily-robots
|
||
pip install -r requirements.txt
|
||
copy .env.example .env
|
||
.\run-daily.ps1
|
||
```
|
||
|
||
- 生成:`output/YYYY-MM-DD.md`(完整版)、`output/YYYY-MM-DD.wecom.md`(企微短版)
|
||
- 仅生成:`.\run-daily.ps1 -SkipPush`
|
||
- 仅推送:`python -m daily push output\2026-06-25.wecom.md`
|
||
|
||
**Webhook 配置**:企微群 → 群机器人 → 添加,将 `key=` 后的值写入项目根 `.env`:
|
||
|
||
```env
|
||
WECOM_WEBHOOK_KEY=your-key
|
||
```
|
||
|
||
**GitHub 数据源**(见 `.env.example`):
|
||
|
||
| 来源 | 说明 |
|
||
|------|------|
|
||
| GitHub Trending | `GITHUB_TRENDING_MODE=scrape` 或 `api` |
|
||
| 新兴 / Topic | Search API,需 `GITHUB_TOKEN` |
|
||
| Release | 可选 `GITHUB_REPOS=owner/repo` |
|
||
|
||
**国际 AI 时讯**(RSS,见 `daily/news/feeds.py`):
|
||
|
||
| 类别 | 覆盖 |
|
||
|------|------|
|
||
| 厂商官方 | Anthropic、OpenAI、Google、Meta、Microsoft、Mistral、Cursor 等 |
|
||
| Agent / LLM 开发者 | LangChain、LlamaIndex、Hugging Face、Copilot 等 |
|
||
| 综合科技媒体 | The Verge、TechCrunch、Ars、Wired、MIT TR 等 |
|
||
| Newsletter | Ben's Bites、Latent Space、Simon Willison、TLDR AI 等 |
|
||
| 研究 / 论文 | arXiv cs.CL/AI/LG、HF Papers |
|
||
| 社区讨论 | HN、Reddit r/LocalLLaMA / ClaudeAI / ML 等 |
|
||
|
||
环境变量:`DAILY_AI_NEWS=1` · `DAILY_CN_AI_NEWS=1` · `DAILY_AI_NEWS_HOURS=24` · `DAILY_WECOM_AI_NEWS=10` · `DAILY_WECOM_CN_AI_NEWS=10`
|
||
|
||
**国内 AI 时讯**(RSS,见 `daily/news/feeds_cn.py`):
|
||
|
||
| 类别 | 覆盖 |
|
||
|------|------|
|
||
| AI 专业媒体 | 量子位 |
|
||
| 综合科技 | 36氪、雷锋网、Google News 中文 |
|
||
|
||
|
||
### 生成架构(Tier B · Cursor 编辑层)
|
||
|
||
早报默认走 **Python 抓取 + 模板渲染**;可选开启 Cursor 做「编辑」:
|
||
|
||
```
|
||
抓取数据 → output/日期.data.json → Cursor 读 Skill 写 editorial → 模板填字 → .md / .wecom.md
|
||
```
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `output/YYYY-MM-DD.data.json` | 结构化榜单(供 LLM 输入) |
|
||
| `output/YYYY-MM-DD.editorial.json` | Cursor 输出的主题、速览、中文描述 |
|
||
| `skills/daily-editor/SKILL.md` | 编辑规范(语气、JSON 格式) |
|
||
|
||
```env
|
||
# 开启 Tier B(需 CURSOR_API_KEY 或 DAILY_LLM_API_KEY)
|
||
DAILY_CURSOR_EDITOR=1
|
||
```
|
||
|
||
- 开启后:**一次 LLM 调用** 生成 `theme_line` + `highlights` + 全部中文描述
|
||
- 关闭时(默认):规则主题 + `DAILY_ZH_DESC` 仅中文化描述
|
||
- LLM 失败自动回退规则模式,不影响推送
|
||
|
||
### 生成架构(Agent 工作流 · 推荐)
|
||
|
||
若觉得模板版「榜单堆砌」不友好,可改用 **Agent 三步流水线**:
|
||
|
||
```
|
||
Python 抓取 → Step1 趋势分析 → Step2 叙事写稿 → Python 分条推送企微
|
||
(.trends.json) (.wecom.md)
|
||
```
|
||
|
||
| 模式 | 环境变量 | 企微版风格 |
|
||
|------|----------|------------|
|
||
| `classic`(默认) | — | 分区榜单 + 模板 |
|
||
| `editor` | `DAILY_CURSOR_EDITOR=1` | 模板 + LLM 中文化 |
|
||
| `agent` | `DAILY_REPORT_MODE=agent` | **导语 + 信号 + 精选**,全中文叙述 |
|
||
|
||
```env
|
||
DAILY_REPORT_MODE=agent
|
||
CURSOR_API_KEY=cursor_...
|
||
CURSOR_MODEL=composer-2.5
|
||
DAILY_CURSOR_CWD=d:\LY\diy\daily-robots
|
||
```
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `output/YYYY-MM-DD.trends.json` | Step1 趋势分析结果 |
|
||
| `skills/daily-agent/SKILL.md` | Agent 工作流规范 |
|
||
|
||
- 完整版 `YYYY-MM-DD.md` 仍为数据表格归档;企微版由 Agent 直接写 Markdown
|
||
- Agent 失败自动回退 `classic`,不影响 `run-daily.ps1`
|
||
|
||
定时推送:
|
||
|
||
- **常驻调度(推荐)**:`python -m daily schedule` 或 `.\run-scheduler.ps1`(默认 08:50 生成、09:00 推送,见 `DAILY_SCHEDULE_*`)
|
||
- Windows 任务计划:`.\register-daily-task.ps1`
|
||
- Cursor:`/loop 1d`(时间会漂移,仅临时用)
|
||
|
||
---
|
||
|
||
## 其他推送方案
|
||
|
||
| 方案 | 适用场景 | 复杂度 |
|
||
|------|----------|--------|
|
||
| **群机器人 webhook** | 推送到固定群 | 低 |
|
||
| **应用消息 API** | 推送给指定成员/部门 | 中(需 corp_id、secret、agent_id) |
|
||
| **邮件 + 企业微信邮箱** | 已有 SMTP | 中 |
|
||
| **PushPlus / Server酱** | 个人微信中转 | 低(第三方) |
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
- Webhook **不要提交到 Git**,只用环境变量
|
||
- 企业微信 markdown 为**子集**(不支持完整 GitHub 表格语法时可改为文本列表)
|
||
- 单条消息约 **4096 字节** 上限,`send-wecom.ps1` 已做截断
|