2026-05-23
用Go重构gitlink-health
今天想看看有没有人提交关于issue自动打标的PR,却发现自己的gitlink-health PR还没有被合并,进去一看,reviewer提出新要求——用Go实现。
Review: PR #17 — gitlink-health Skill
总体评价:方向很好,建议调整实现方式
首先感谢 @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 代码意味着:
- 新增运行时依赖 — 用户
npm install -g后只保证了 Node.js,Python 3.8+ 需要额外安装- skills 定位模糊 — 如果 gitlink-health 能放 Python 脚本,后续其他 skill 能不能放 shell 脚本?Node.js 脚本?边界不清晰
- 打包膨胀 — 虽然 fetcher.py 只用 stdlib 不依赖 pip,但技能文件从纯文档变成了”文档+可执行工具+SQL schema”
建议方案:将数据采集逻辑 Go 化
fetcher.py做的事情本质上就是:
- 分页调用
pr +list/issue +list获取列表- 对每条记录调用
pr +view/issue +view获取详情- 解析 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简化为了:
# 采集数据
gitlink-cli health +fetch --owner <owner> --repo <repo>
# 执行 SQL 分析查询(参考 references/queries.md)
sqlite3 data/gitlink_health.db "SELECT ..."
# 填写报告模板具体建议
collector/fetcher.py+schema.sql→shortcuts/health/下的 Go 代码,注册为gitlink-cli health +fetchSKILL.md、references/queries.md、asset/保留在skills/gitlink-health/(纯文档)data/目录和*.dbgitignore 保留- 报告模板和 SQL 查询分析仍由 AI Agent 执行(这是 Skill 的职责)
Verdict: 🔄 需要修改
这个 PR 的场景价值和工作流设计都非常好,主要是希望把 Python 采集脚本替换为 Go 内置命令,让 skills 目录保持纯文档的定位。如果作者有兴趣改,我很乐意帮忙 review Go 部分的代码。如果时间上不允许,我也可以先把核心思路合入,后续自己来做 Go 化的工作。
再次感谢贡献!
总结来说,就是让我把采集部分的代码内化到gitlink-cli中。