AI 时代,每个人都是贡献者。 所有人都可以为下一个阶段添砖加瓦。
一个轻量级的开源贡献工作台 —— 扫描、追踪、管理你的开源贡献之旅。
发现 issue → 认领 → 开发 → 提 PR → 跟踪 review → 合并 🎉
| 命令 | 说明 |
|---|---|
watch add/remove/list |
管理关注的仓库列表 |
scan |
扫描目标仓库的 good first issue / help wanted |
issues |
查看已发现的 issue(--claimed / --available) |
claim |
在 issue 下评论认领 |
track |
追踪你所有 PR 的 review 状态 |
digest |
汇总报告(终端输出) |
serve |
守护轮询 + 主动通知(新 issue / PR 状态变化推送到 Qwen Code 会话) |
notify |
手动推送通知 / 查看通知状态 |
install |
安装为 Qwen Code extension(skill + hooks)+ 注册入站管道 |
# 1. 设置 GitHub Token(也可从 git remote URL 内嵌 token 自动提取)
export GITHUB_TOKEN="ghp_xxxx"
# 2. 添加关注的仓库
python oss_radar.py watch add alibaba/open-code-review
python oss_radar.py watch add QwenLM/qwen-code
# 3. 扫描可用的 issue
python oss_radar.py scan
# 4. 认领一个 issue(会在 GitHub 上评论,对外可见)
python oss_radar.py claim alibaba/open-code-review 631
# 5. 追踪你的 PR 状态
python oss_radar.py track
# 6. 查看汇总
python oss_radar.py digest一条命令安装为 extension(内含 skill + gate/flush hooks),之后在任何 Qwen Code 会话里直接说 "帮我找点能做的开源任务" / "我的 PR 怎么样了", agent 会自动调用本工具:
# 安装 extension 到 ~/.qwen/extensions/oss-radar,并在当前项目注册入站管道
python oss_radar.py install
# 只装 extension,不写项目 settings
python oss_radar.py install --no-project
# 指定注册入站管道的项目目录
python oss_radar.py install --project ~/my-project
# 验证
qwen extensions listextension 布局(hooks 随 extension 分发,会话启动即生效, 不需要在 settings.json 里注册 hooks):
~/.qwen/extensions/oss-radar/
├── qwen-extension.json
├── hooks/hooks.json # SessionStart→flush, UserPromptSubmit→gate
├── skills/oss-radar/SKILL.md
└── scripts/ # oss_radar.py + oss_notify/
为什么不是 SKILL.md frontmatter hooks? qwen-code 的 skill frontmatter hooks 在 skill 被调用时才注册 (
registerSkillHooks由 skill tool 触发),gate/flush 需要在会话启动前 就生效,因此选用 extension hooks(hookRegistry 初始化时加载)。
skill 与 repo 副本共享同一运行时目录 —— 默认 <项目根>/.oss-radar/
(旧版 ~/.oss-radar/ 首次运行自动迁入):数据库、inbox/pending/ack、
serve 日志都在这里。extension 部署副本通过 install 写入的 .oss-radar-home
标记指向同一目录,保证状态一致。运行时目录不进 git(见 .gitignore)。
从"手动轮询"升级为"主动推送":守护进程扫描 GitHub,
新事件通过 Qwen Code 的入站管道(dualOutput.inputFile / RemoteInputWatcher)
直接注入到你正在使用的 agent 会话:
serve 守护轮询 GitHub(Search API + GraphQL)
│ 发现新 issue / PR review 状态变化
▼
sender 双写 <项目>/.oss-radar/pending.jsonl + inbox.jsonl(flock + 原子写)
▼
RemoteInputWatcher 消费 inbox,注入为会话 prompt
▼
agent 转述给你;Qwen 没开时留存 pending,下次启动由 flush hook 补投
# 启动守护(后台,默认 15 分钟一轮)
python oss_radar.py serve --background
python oss_radar.py serve --background --interval 600
# 查看 / 停止
python oss_radar.py serve --status
python oss_radar.py serve --stop
# 手动推送测试
python oss_radar.py notify push "测试通知" # 信息通知(直接注入)
python oss_radar.py notify push "认领 foo/bar #12" --gate # 待办通知(需确认)
python oss_radar.py notify status带 「OSS待办」 前缀的消息会被 UserPromptSubmit hook 拦截:
在 TUI 展示待办内容,不会自动执行,你确认后才生效(复刻 IRDS 通知模式)。
普通信息通知不带前缀,直接注入由 agent 转述。
| 情况 | 会丢吗 |
|---|---|
| Qwen 开着(已 install 的项目会话) | 不丢,实时注入 |
| Qwen 没开 | 不丢,留存 pending,启动时 flush hook 补投(TTL 7 天) |
<项目>/.oss-radar/ 被删 |
本地缓冲丢失 |
┌──────────────────┐
│ GitHub GraphQL │ ← 扫描 issue / 查询 PR 状态
│ + REST API │ ← 认领 issue / Search API
└────────┬─────────┘
│
┌────────▼─────────┐
│ oss-radar CLI │ ← 本地命令行工具 / Qwen Code skill
│ + serve 守护 │ ← 定时轮询,发现新事件
└────────┬─────────┘
│
┌────────▼─────────────────┐
│ <项目>/.oss-radar/ │
│ ├─ oss_radar.db (SQLite) │ ← 仓库列表 / issue 记录 / PR 追踪
│ ├─ inbox.jsonl │ ← Qwen RemoteInputWatcher 入站管道
│ └─ pending/ack.jsonl │ ← 耐久缓冲 + 投递确认(flock 保护)
└──────────────────────────┘
- 发现:轮询 GitHub Search API,按 label 筛选目标仓库的新 issue
- 追踪:GraphQL 查询你所有 PR 的 reviewDecision 状态
- 推送:新事件写入 inbox,注入 Qwen Code 会话;pending/ack 保证不丢不重
- 零依赖:纯 Python 标准库,无需 pip install
- Qwen Code Skill(#1)
- 主动通知 & 服务化:Qwen 会话推送渠道(#2)
- MCP Server:覆盖 Claude Desktop / Cursor 等所有 agent(#1 后续)
- 更多通知渠道:钉钉 / Server酱 / Telegram / Webhook(#2 后续)
- GitHub Actions cron:免服务器部署(#2 后续)
在 AI 时代,开源贡献的门槛正在被重新定义:
- AI 辅助编码让每个人都能提交高质量的 PR
- 好的工具让发现和管理贡献变得毫不费力
- 每一个小小的 refactor、每一行文档改进,都是添砖加瓦
不需要是专家,只需要开始。
MIT