Skill: yy4fun/ai-news-skills (version 1.3.1)

--- name: ai-news-skills description: "AI 新闻全自动工作流：采集公开网页新闻、生成日报与早报导读、合成周报趋势与深度解读。包含三个协作 skill：ai_news_fetcher（采集）、ai_news_reporter（日报）、ai_weekly_reporter（周报）。" license: MIT version: 1.3.0 --- # AI News Skills 一套完整的 AI 新闻自动化工作流，从采集到日报到周报。 ``` 公开网页 → 自动采集(fetcher) → 飞书原始新闻表 → AI筛选(reporter) → 日报 & 早报导读 ↓ (每周日) 周报趋势 & 深度解读(weekly_reporter) ↓ 更新产业链观察图谱 ``` ## 包含的 skill | Skill | 职责 | 频率 | |-------|------|------| | `skills/ai_news_fetcher` | 从公开网页采集 AI 新闻，写入飞书多维表格 | 每天 3-4 次 | | `skills/ai_news_reporter` | 从飞书表筛选高价值事件，生成日报和早报导读 | 每天 1 次 | | `skills/ai_weekly_reporter` | 基于本周日报合成趋势线，深度解读，更新观察链 | 每周日 1 次 | 使用时请指定具体 skill，例如 `使用 ai_news_fetcher skill 采集新闻` 或 `使用 ai_news_reporter skill 生成日报`。 ## 前置依赖 - **飞书多维表格**：需要配置 `app_token` 和 `table_id`，填入各 skill 的 `bitable_target.json`（参考 `.example.json`） - **Agent Reach**：[Agent Reach](https://github.com/Panniantong/Agent-Reach) 提供网页读取能力 - **Python 3.10+**：运行数据处理脚本 > **凭证说明**：本 skill 不内置任何飞书凭证或 API 密钥。所有配置文件（`bitable_target.json`、`watch_target.json`）由用户在本地创建，已被 `.gitignore` 排除。仓库中的 `.example.json` 仅包含占位符（`YOUR_APP_TOKEN` 等）。 > **第三方服务**：使用 [Jina Reader](https://r.jina.ai)（免费、无需 API key）将公开网页转为 markdown 文本。采集和阅读原文时，目标网页的 URL 会发送到 `r.jina.ai`，不会发送飞书凭证或用户数据。 ## 详细说明 每个 skill 的 SKILL.md 包含完整的执行流程、硬约束和模板，请参阅各自目录。

path: CHANGELOG.md
content: # Changelog

## v1.3.0 (2026-03-22)

### 新功能
- **深入分析框架**：新增 `analysis_framework.md`，系统化深度解读方法（玩家拆解 → 竞争本质 → 终局判断 → 多视角扫描 → 自我追问）
- **框架自我迭代**：群聊反馈自动记录到反馈日志，每次周报生成后触发自我复盘，框架持续进化，无需人工介入
- **图片采集**：深度解读自动从原文提取数据图表、架构图、产品截图（每篇最多 2 张，总计最多 3 张）
- **观察链集成**：深度解读结束后自动检查 `watch_chains.md`，将分析结论转化为跟踪项

### 修复
- **飞书 wiki 发布**：修复 `space_id is not int` 错误，新增 `wiki_target.json` 配置文件，明确 space_id（整数）和 parent_node_token 的正确传递方式
- **关注清单写入**：修复 wiki 内嵌多维表格的权限问题（91403），明确需先通过 `get_node` 获取 app_token
- **cron 精简**：cron 任务消息不再重复 skill 内部逻辑，只传参数和防护栏，避免 cron 指令与 skill 流程不一致

## v1.0.0 (2026-03-21)

- 首次发布：采集 + 日报 + 周报三个 skill 打包上架


path: docs/install.md
content: # AI News Skills 安装指南

请按以下步骤为用户安装 AI News Skills。

## 1. 安装 Agent Reach（前置依赖）

先检查是否已安装：

```bash
command -v agent-reach
```

如果未安装，执行：

```bash
pip install agent-reach
agent-reach install --env=auto
```

安装后验证：

```bash
agent-reach doctor
```

> 如果遇到问题，参考 Agent Reach 官方文档：https://raw.githubusercontent.com/Panniantong/agent-reach/main/docs/install.md

## 2. 克隆并安装 Skills

```bash
git clone [REDACTED_SECRET]:yy4fun/ai-news-skills.git
cd ai-news-skills
./install.sh
```

这会把 `ai_news_fetcher` 和 `ai_news_reporter` 安装到 `~/.openclaw/workspace/skills/`。

## 3. 配置飞书多维表格

```bash
cp ~/.openclaw/workspace/skills/ai_news_fetcher/bitable_target.example.json \
   ~/.openclaw/workspace/skills/ai_news_fetcher/bitable_target.json

cp ~/.openclaw/workspace/skills/ai_news_reporter/bitable_target.example.json \
   ~/.openclaw/workspace/skills/ai_news_reporter/bitable_target.json
```

然后请用户填入飞书多维表格信息（app_name、app_token、table_name、table_id、url）。

## 4. 验证

跑一次单源采集测试，确认管道正常：

```bash
cd ~/.openclaw/workspace/skills/ai_news_fetcher
curl -s "https://r.jina.ai/https://openai.com/zh-Hans-CN/news/" \
  | python3 normalize_agent_reach.py --source "OpenAI新闻"
```

如果输出 JSON 格式的结构化新闻记录（包含 title、url、date 等字段），说明安装成功。

## 完成

告诉用户：
- 安装完成，需要填写 `bitable_target.json` 中的飞书配置
- 之后可以配置 cron 定时采集，先跑 fetcher 采集入表，再跑 reporter 生成日报


path: install.sh
content: #!/usr/bin/env bash

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
TARGET_DIR="${HOME}/.openclaw/workspace/skills"

mkdir -p "${TARGET_DIR}"

# ── 1. 安装 Agent Reach（网页读取依赖）──────────────────────────
echo "==> Checking Agent Reach ..."
if command -v agent-reach &>/dev/null; then
  echo "    agent-reach already installed, skipping."
else
  echo "    Installing agent-reach via pip ..."
  pip install agent-reach
  echo "    Running agent-reach install ..."
  agent-reach install --env=auto
fi

# ── 2. 安装 Skills ─────────────────────────────────────────────
install_skill() {
  local skill_name="$1"
  local src="${SCRIPT_DIR}/skills/${skill_name}"
  local dst="${TARGET_DIR}/${skill_name}"

  if [[ ! -d "${src}" ]]; then
    echo "Missing skill directory: ${src}" >&2
    exit 1
  fi

  rm -rf "${dst}"
  cp -R "${src}" "${dst}"
  echo "    Installed ${skill_name} -> ${dst}"
}

echo "==> Installing skills ..."
install_skill "ai_news_fetcher"
install_skill "ai_news_reporter"

# ── 3. 验证 ────────────────────────────────────────────────────
echo
echo "==> Verifying agent-reach ..."
if command -v agent-reach &>/dev/null; then
  agent-reach doctor || echo "    ⚠️  agent-reach doctor reported issues, please check manually."
else
  echo "    ⚠️  agent-reach command not found. You may need to restart your shell or check PATH."
fi

echo
echo "Done!"
echo
echo "Next steps:"
echo "1. Copy bitable_target.example.json to bitable_target.json for each skill"
echo "2. Fill in your own Feishu app/table configuration"
echo "3. Test the pipeline:"
echo "   curl -s 'https://r.jina.ai/https://openai.com/zh-Hans-CN/news/' \\"
echo "     | python3 ~/.openclaw/workspace/skills/ai_news_fetcher/normalize_agent_reach.py --source 'OpenAI新闻'"


path: skills/ai_news_fetcher/_meta.json
content: name: ai_news_fetcher
version: 2.0.0
description: 为 AI 日报抓取当天原始新闻并写入飞书原始新闻表

path: skills/ai_news_fetcher/agents/openai.yaml
content: interface:
  display_name: "AI News Fetcher"
  short_description: "抓取 AI 原始新闻并写入飞书"
  default_prompt: "Use $ai_news_fetcher to collect today's AI news into Feishu raw-news table with accurate title, link, date, and summary."

policy:
  allow_implicit_invocation: true


path: skills/ai_news_fetcher/bitable_target.example.json
content: app_name: YOUR_APP_NAME
app_token: YOUR_APP_TOKEN
table_name: YOUR_TABLE_NAME
table_id: YOUR_TABLE_ID
url: https://YOUR_FEISHU_HOST/base/YOUR_APP_TOKEN

path: skills/ai_news_fetcher/references/data-model.md
content: # 数据模型

这个 skill 只关心一层核心对象：

1. `source_item`

## 一、原始新闻表

飞书多维表格负责存 `source_item`。

推荐中文字段如下：

- `标题`
- `原文链接`
- `来源`
- `来源类型`
- `发布时间`
- `原始时间`
- `原文摘要`
- `标题哈希`
- `摘要哈希`
- `处理状态`
- `备注`

其中真正关键的字段是：

- `标题`
- `原文链接`
- `来源`
- `来源类型`
- `发布时间`
- `原始时间`
- `原文摘要`
- `标题哈希`
- `摘要哈希`
- `处理状态`

补充说明：

- `原始时间` 保留网页抓到的原始时间文本，例如 `10小时前`、`03/17 23:37`。
- `发布时间` 由脚本根据 `原始时间` 标准化生成。
- `原文摘要` 要抓页面上的正文摘要，不要重复标题。
- `摘要哈希` 只有在 `原文摘要` 存在时才写；没有摘要就留空。
- 自定义 `新闻ID` 和 `抓取时间` 不再作为业务字段依赖。
- 如需记录写入时刻，优先使用飞书的“创建时间”字段。
- 如需引用单条记录，优先使用飞书记录自身的 record id，而不是额外维护一列“新闻ID”。
- 默认链路是：`agent-reach` 先抓原始文本，`normalize_agent_reach.py` 提取结构化字段，再由 `build_source_items.py` 产出入表记录。

## 二、source_item 最小语义

每条原始新闻只回答事实问题：

- 谁发的
- 什么标题
- 链接是什么
- 什么时候发布
- 页面原始时间文本是什么
- 来源是什么
- 页面给出的摘要是什么

这一层不要急着写结论。

日报所需的 `event`、`signal`、主题和观察链，都交由独立的 `ai_news_reporter` skill 负责。


path: skills/ai_news_fetcher/references/sources.md
content: # 新闻源

源地址唯一真相源：`sources.json`

后续加减源，只改 `sources.json` 这一个文件。

## 特殊规则

### GitHub Trending

- 无发布时间字段，normalize 时必须加 `--fallback-to-now`，用抓取时间代替
- 只保留标题或描述命中 AI 关键词的项目（agent、model、LLM、RAG、inference、diffusion 等）

### Google Cloud博客

- 无发布时间字段，normalize 时必须加 `--fallback-to-now`，用抓取时间代替

### 36氪快讯-AI

- 只保留 AI 相关内容
- 标题或摘要至少一个命中 AI 关键词

### CMSWire / CX Today

- 重点检查发布时间
- 抓不到可信时间就不要写入

## 暂不进入主链

- RSS（SteveBlank 已在 sources.json 中但未接入 cron 主链）
- 微信公众号
- Twitter / X


path: skills/ai_news_reporter/_meta.json
content: name: ai_news_reporter
version: 1.0.0
description: 基于飞书原始新闻表生成 AI 日报、signal 和早报导读

path: skills/ai_news_reporter/agents/openai.yaml
content: interface:
  display_name: "AI News Reporter"
  short_description: "从原始新闻表生成日报和早报导读"
  default_prompt: "Use $ai_news_reporter to read raw AI news from Feishu, build signals, update the daily report doc, and prepare the morning briefing."

policy:
  allow_implicit_invocation: true


path: skills/ai_news_reporter/bitable_target.example.json
content: app_name: YOUR_APP_NAME
app_token: YOUR_APP_TOKEN
table_name: YOUR_TABLE_NAME
table_id: YOUR_TABLE_ID
url: https://YOUR_FEISHU_HOST/base/YOUR_APP_TOKEN

Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (CRITICAL)