npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

openclaw-paperdaily

v0.1.0

Published

Daily computer science paper recommendations for OpenClaw + Feishu

Readme

PaperDaily - OpenClaw + Feishu 论文推荐系统

每日从 arXiv 计算机科学论文中筛选高价值文献,自动生成中文摘要并发送到飞书。

功能特性

  • 📚 每日推荐:从 arXiv CS 类近 7 天论文中筛选高价值文献
  • 🎯 智能评分:基于时间新鲜度、关键词匹配、摘要信息量进行评分
  • 💡 通俗讲解:为每篇论文提供简洁易懂的解读
  • 🔄 缓存机制:同一天多次请求返回相同结果,支持强制刷新
  • 🔧 模块化设计:collector/ranker/generator/policy/delivery/storage 分层架构
  • 📱 OpenClaw 集成:可作为 OpenClaw 技能使用
  • 🤖 飞书企业应用:支持飞书企业应用机器人(App Bot)

快速开始

1. 安装依赖

npm install

2. 配置环境变量

复制 .env.example.env 并配置:

cp .env.example .env

编辑 .env 文件:

# Feishu App Bot Configuration
FEISHU_APP_ID=your_feishu_app_id_here
FEISHU_APP_SECRET=your_feishu_app_secret_here
FEISHU_CHAT_ID=your_feishu_chat_id_here

# Paper Selection
DEFAULT_TIMEZONE=Asia/Shanghai

# Ranking Configuration
KEYWORDS=machine learning,deep learning,neural networks,transformer,LLM,computer vision,natural language processing,reinforcement learning

# Cache Configuration
CACHE_HOURS=24

3. 一键启动

# 开发模式(直接运行 TypeScript)
npm run dev

# 或者先构建再运行
npm run build
npm start

# 启动 Webhook 服务器(接收飞书事件)
npm run server

4. 使用命令

# 获取今日文献(使用缓存)
npm run dev -- 今日文献

# 强制刷新今日文献
npm run dev -- 刷新文献

飞书企业应用机器人接入步骤

前提条件

  • 已有飞书企业账号
  • 有创建应用的权限

步骤 1:创建飞书应用

  1. 登录飞书开放平台:https://open.feishu.cn/
  2. 进入「管理后台」→「应用管理」→「创建应用」
  3. 选择「企业自建应用」
  4. 填写应用信息:
    • 应用名称:PaperDaily
    • 应用描述:每日计算机科学论文推荐
    • 应用图标:可选
  5. 点击「创建」

步骤 2:获取凭证信息

  1. 在应用详情页,找到「凭证与基础信息」
  2. 记录以下信息:
    • App ID(复制到 FEISHU_APP_ID
    • App Secret(点击「查看」后复制到 FEISHU_APP_SECRET

步骤 3:配置权限范围

  1. 进入应用详情页 →「权限管理」
  2. 搜索并开启以下权限:
    • im:message(发送消息权限)
    • im:message:send_as_bot(以机器人身份发送消息)
    • im:chat(获取会话信息,如需要)
  3. 点击「批量开通权限」或「申请权限」

步骤 4:获取群聊 ID

方法一:通过飞书开发者工具

  1. 在目标群聊中
  2. 点击群聊设置 → 群信息
  3. 记录 open_chat_idchat_id(复制到 FEISHU_CHAT_ID

方法二:通过 API 获取

调用 https://open.feishu.cn/open-apis/im/v1/chats 获取群聊列表

步骤 5:配置事件订阅(可选,用于 Webhook 模式)

如果需要通过飞书事件触发(如群聊中发送命令),请配置事件订阅:

  1. 进入应用详情页 →「事件与回调」→「添加事件」
  2. 选择「添加事件订阅」
  3. 配置请求 URL:
    • URL 格式:https://your-server.com/webhook
    • 使用 ngrok 或类似工具进行本地测试:ngrok http 3000
  4. 选择订阅事件:
    • im.message.receive_v1(接收消息事件)
  5. 配置加密(可选):
    • 设置 Verify Token(复制到 FEISHU_VERIFY_TOKEN
    • 设置 Encrypt Key(复制到 FEISHU_ENCRYPT_KEY
  6. 点击「保存」

步骤 6:将机器人添加到群聊

  1. 在应用详情页 →「应用功能」→「机器人」
  2. 启用机器人功能
  3. 点击「添加到群聊」或搜索应用名称添加到目标群

步骤 7:测试

在群聊中发送 今日文献刷新文献,机器人应该会响应。

使用的飞书 API

本项目使用以下飞书开放平台 API:

| API 名称 | 说明 | 文档链接 | |---------|------|---------| | get_tenant_access_token | 获取租户访问令牌 | https://open.feishu.cn/document/server-docs/authentication-management/access-token/get_tenant_access_token | | create | 发送消息 | https://open.feishu.cn/document/server-docs/im-v1/message/create | | im.message.receive_v1 | 接收消息事件 | https://open.feishu.cn/document/server-docs/im-v1/message/event |

OpenClaw 集成

安装为 OpenClaw 技能

  1. skills/paperdaily 目录复制到你的 OpenClaw skills 目录:
cp -r skills/paperdaily /path/to/openclaw/skills/
  1. 在 OpenClaw 配置中添加技能

  2. 重启 OpenClaw

使用方式

在支持的聊天平台(WhatsApp、Telegram、Discord、Feishu 等)中发送:

  • 今日文献 - 获取今日推荐论文(使用缓存)
  • 刷新文献 - 强制刷新并获取新的今日论文

项目结构

paperdaily/
├── src/
│   ├── collector/         # 论文收集器(arXiv)
│   ├── ranker/            # 论文评分器
│   ├── generator/         # 内容生成器
│   ├── policy/            # 缓存策略
│   ├── delivery/          # 投递模块(Feishu App Bot)
│   │   ├── feishu-auth.ts          # 飞书认证管理
│   │   ├── feishu-message.ts       # 飞书消息 API
│   │   ├── feishu-event-handler.ts # 事件订阅处理
│   │   └── feishu-delivery.ts     # 飞书投递服务
│   ├── storage/           # 存储模块(SQLite + Bitable 接口)
│   ├── types/             # 类型定义
│   ├── utils/             # 工具函数
│   ├── openclaw/          # OpenClaw 集成
│   ├── index.ts           # 主入口(CLI)
│   └── server.ts          # Webhook 服务器
├── config/                # 默认配置
├── skills/paperdaily/     # OpenClaw 技能
├── data/                  # 数据目录(运行时生成)
├── .env.example           # 环境变量示例
├── package.json
├── tsconfig.json
└── README.md

模块说明

Collector(收集器)

  • 从 arXiv API 获取近 7 天的 CS 类论文
  • 支持自定义类别过滤
  • 解析论文元数据(标题、作者、摘要、链接等)

Ranker(评分器)

  • 时间新鲜度 (30%):越新的论文分数越高
  • 关键词匹配 (40%):标题和摘要中关键词匹配度
  • 信息量 (30%):摘要长度和结构(方法论、结果、创新点)

Generator(生成器)

  • 生成格式化的论文推荐内容
  • 包含标题、来源、链接、摘要要点
  • 自动提取关键词
  • 提供"通俗讲解"版本文档

Policy(策略)

  • 缓存控制策略
  • 同一天内多次请求返回缓存结果
  • 支持强制刷新

Delivery(投递)

  • 飞书 App Bot 消息推送
  • 文本消息格式
  • 事件订阅处理(可选)

Storage(存储)

  • SQLite 存储(默认)
  • Bitable 适配器接口(预留)
  • 缓存管理

配置说明

环境变量

| 变量 | 说明 | 默认值 | 必填 | |------|------|--------|------| | FEISHU_APP_ID | 飞书应用 ID | 无 | 是 | | FEISHU_APP_SECRET | 飞书应用 Secret | 无 | 是 | | FEISHU_CHAT_ID | 飞书群聊 ID | 无 | 是 | | FEISHU_VERIFY_TOKEN | 事件订阅验证令牌 | 无 | 否 | | FEISHU_ENCRYPT_KEY | 事件订阅加密密钥 | 无 | 否 | | DEFAULT_TIMEZONE | 默认时区 | Asia/Shanghai | 否 | | KEYWORDS | 论文筛选关键词 | ML/DL/NN/Transformer 等 | 否 | | CACHE_HOURS | 缓存时长(小时) | 24 | 否 |

评分权重

可在 config/default.ts 中调整:

const weights = {
  freshness: 0.3,      // 时间新鲜度权重
  keywords: 0.4,       // 关键词匹配权重
  information: 0.3     // 信息量权重
};

输出示例

📚 每日论文推荐

━━━━━━━━━━━━━━━━━━

Attention Is All You Need

arXiv · 2025年2月25日

🔗 链接: https://arxiv.org/abs/1706.03762

📋 摘要要点

The dominant sequence transduction models are based on complex recurrent or convolutional neural networks... [摘要要点]

👨‍💻 作者
Ashish Vaswani, Noam Shazeer 等

🏷️ 类别
cs.CL, cs.AI, cs.LG

🔑 关键词

Transformer · Attention · Neural Networks

(注:基于论文标题和摘要自动提取)

💡 通俗讲解

【研究领域:Transformer 架构】

这是一篇关于 Attention Is All You Need 的研究论文。

【研究背景】
从摘要来看,这项研究主要关注如何解决当前 Transformer 架构领域中的一个具体问题。

【主要贡献】
论文提出了一种新的方法/框架,试图通过改进现有技术来提升性能。

【应用价值】
该研究对相关领域的研究者和开发者有一定参考价值。

━━━━━━━━━━━━━━━━━━

由 OpenClaw PaperDaily 自动生成

扩展开发

添加新的论文来源

实现 Collector 接口:

export interface Collector {
  collect(config: CollectorConfig): Promise<Paper[]>;
}

添加新的存储后端

实现 StorageAdapter 接口:

export interface StorageAdapter {
  getDailyPaper(date: string): Promise<DailyPaper | null>;
  saveDailyPaper(dailyPaper: DailyPaper): Promise<void>;
  clearCache(date?: string): Promise<void>;
}

添加新的投递渠道

实现 Delivery 接口:

export interface Delivery {
  send(content: string, config: DeliveryConfig): Promise<boolean>;
}

已知限制

  1. 论文来源:当前仅支持 arXiv,可扩展其他来源(如 Google Scholar、Semantic Scholar)
  2. 定时推送:当前仅支持手动触发,可扩展定时任务

未来计划

  • [ ] 添加定时任务(每日自动推送)
  • [ ] 支持更多论文来源
  • [ ] 支持 Bitable 存储
  • [ ] 添加 Web 管理界面
  • [ ] 支持自定义评分规则

技术栈

  • 运行时:Node.js 18+
  • 语言:TypeScript 5+
  • 存储:SQLite (better-sqlite3)
  • HTTP 客户端:node-fetch
  • Web 框架:Express

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

联系方式

如有问题,请提交 GitHub Issue。