yingjie@memoir
Skip to content

2026-05-23

今天想看看有没有人提交关于issue自动打标的PR,却发现自己的gitlink-health PR还没有被合并,进去一看,reviewer提出新要求——用Go实现。

总体评价:方向很好,建议调整实现方式

首先感谢 @yingjie 的这个贡献!项目健康度分析是一个非常实用的场景,Issue 解决时长、PR 合并率、贡献者活跃度这三个核心指标的选取也很准确。在 Claude Code、Kilo CLI、Kimi Code、Hermes 多个 Agent 平台上的测试也体现了作者对 AI Agent 生态的深入理解。

但我对 Python 代码放在 skills 目录 这个架构选择有一个比较大的顾虑,建议采用纯 Go 方案替代。

核心问题:Python 打破了 skills 目录的边界

目前 skills/ 目录下 12 个 skill 全部是纯 Markdown 文档(总计约 30KB)。npm package 的 files 字段直接打包整个 skills/。引入 Python 代码意味着:

  1. 新增运行时依赖 — 用户 npm install -g 后只保证了 Node.js,Python 3.8+ 需要额外安装
  2. skills 定位模糊 — 如果 gitlink-health 能放 Python 脚本,后续其他 skill 能不能放 shell 脚本?Node.js 脚本?边界不清晰
  3. 打包膨胀 — 虽然 fetcher.py 只用 stdlib 不依赖 pip,但技能文件从纯文档变成了”文档+可执行工具+SQL schema”

建议方案:将数据采集逻辑 Go 化

fetcher.py 做的事情本质上就是:

  1. 分页调用 pr +list / issue +list 获取列表
  2. 对每条记录调用 pr +view / issue +view 获取详情
  3. 解析 JSON 写入 SQLite

这些完全可以用 Go 实现为 gitlink-cli health +fetch 内置命令:

  • 复用现有能力 — HTTP client、auth token、JSON 解析、PaginateAll 分页逻辑都是现成的
  • 纯 Go SQLite — modernc.org/sqlite 无 CGO 依赖,跨平台交叉编译不受影响
  • 并发拉取详情 — goroutine 并行获取每个 PR/Issue 的详情,比 Python 串行快得多
  • 零额外依赖 — binary 分发,用户只需 gitlink-cli 本身

Skill 层面,SKILL.md 简化为了:

  1. # 采集数据

  2. gitlink-cli health +fetch --owner <owner> --repo <repo>

  3. # 执行 SQL 分析查询(参考 references/queries.md)

  4. sqlite3 data/gitlink_health.db "SELECT ..."

  5. # 填写报告模板

具体建议

  1. collector/fetcher.py + schema.sql → shortcuts/health/ 下的 Go 代码,注册为 gitlink-cli health +fetch
  2. SKILL.mdreferences/queries.mdasset/ 保留在 skills/gitlink-health/(纯文档)
  3. data/ 目录和 *.db gitignore 保留
  4. 报告模板和 SQL 查询分析仍由 AI Agent 执行(这是 Skill 的职责)

Verdict: 🔄 需要修改

这个 PR 的场景价值和工作流设计都非常好,主要是希望把 Python 采集脚本替换为 Go 内置命令,让 skills 目录保持纯文档的定位。如果作者有兴趣改,我很乐意帮忙 review Go 部分的代码。如果时间上不允许,我也可以先把核心思路合入,后续自己来做 Go 化的工作。

再次感谢贡献!

总结来说,就是让我把采集部分的代码内化到gitlink-cli中。