feat(publish): B站-智能工厂四级补贴首发归档

- drafts/ 按日期+名称分类重整
- 2026-05-09_B站首发归档至published/
- 配图6张永久存档
This commit is contained in:
小橙
2026-05-09 13:20:00 +00:00
parent 8104e1ccf2
commit 7edb53c43c
90 changed files with 5002 additions and 101 deletions

View File

@@ -0,0 +1,114 @@
---
name: weekly-report
description: 周报生成。每周日22:00自动触发或手动/weekly-report调用。汇总过去7天数据输出可读复盘报告。
---
# Weekly Report · 周报生成
## 触发条件
- **手动触发**`/weekly-report` 或 "帮我出周报"
- **自动触发**`0 22 * * 0`(每周日 22:00见 HEARTBEAT.md
## 输入
无参数,自动取过去 7 天数据(从 `reports/daily-YYYY-MM-DD.md``published/YYYY/MM/` 读取)。
## 流程
### Step 1 · 读取日报数据
读取过去 7 天的所有 `reports/daily-YYYY-MM-DD.md` 文件,提取:
- 发布清单(平台 / 标题 / 链接)
- 各平台阅读/播放/点赞/收藏/评论数据
- 舆情/私信摘要
- 选题表现亮点与问题
### Step 2 · 读取归档元数据
读取 `published/YYYY/MM/` 下本周发布的所有文件头部 YAML 元数据platform / url / published_at补全发布记录。
### Step 3 · 生成周报结构
`SOUL.md §4.2` 格式输出:
```markdown
# 周报 YYYY-Www
## 关键结论3 条以内)
- 一句话见解 1
- 一句话见解 2
- 一句话见解 3
## 选题表现
### Top 3
1. <选题> | <平台> | 阅读 N | 互动率 X%
2. ...
3. ...
### Bottom 3
1. ...
2. ...
3. ...
### 假设原因
- Top 假设:(为什么这篇表现好)
- Bottom 假设:(为什么这篇表现差)
## 平台趋势
| 平台 | 本周阅读 | 环比 | 同比 |
|------|---------|------|------|
| 公众号 | N | +X% | +Y% |
| ...
## 下周选题候选3 个)
(来自 /heat-scan 输出,或直接生成 3 个候选)
1. <选题主张> | <平台> | <形态>
2. ...
3. ...
## 需要 Tyrone 决策的事
- 决策项 1
- 决策项 2
```
### Step 4 · 写入文件
文件路径:`reports/weekly-YYYY-Www.md`
### Step 5 · 微信推送
微信频道(`openclaw-weixin`)推送摘要:
```
📊 周报 YYYY-Www
【关键结论】
1. <结论 1>
2. <结论 2>
3. <结论 3>
【Top 选题】
① <选题><平台>,阅读 N
【下周待确认】
① <选题候选 1>
② <选题候选 2>
③ <选题候选 3>
👉 回复"选 A/B/C"继续
【需要决策】
- <决策事项>
```
## 合规约束
- ✅ 数据全部来自 `published/` 实际归档,不编造数字
- ✅ 数据不足时写"暂无数据",禁止猜测
- ✅ 假设原因须有数据支撑,无数据则写"待观察"
- 🚫 不修改 `published/` 任何文件
- 🚫 不触发任何发布动作
## 参考文件
- `SOUL.md §4.2` — 周报结构规范
- `HEARTBEAT.md` — cron 触发配置
- `reports/published-log.md` — 中央索引

View File

@@ -0,0 +1,14 @@
const fs = require('fs');
const p = 'SKILL.md';
let c = fs.readFileSync(p, 'utf8');
const wm = 'Www.md';
// Remove all markdown link pollution around weekly-YYYY-[Www.md]
c = c.replace(/weekly-YYYY-\[Www\.md\]/g, 'weekly-YYYY-Www.md');
c = c.replace(/weekly-YYYY-\(?https?:\/\/Www\.md\)?/g, 'weekly-YYYY-Www.md');
c = c.replace(/weekly-YYYY-Www\.md(?!\.md)/g, 'weekly-YYYY-Www.md');
fs.writeFileSync(p, c);
const occ = c.match(/weekly-YYYY-[^\s\r\n`)]+/g);
console.log('occurrences:', occ);
console.log('---file excerpt---');
const lines = c.split('\n').filter(l => l.includes('weekly-YYYY'));
lines.forEach(l => console.log(l.trim()));