关于 reviewthread
reviewthread 将提供的 Pull Request 评审评论分为可操作、噪声、已关闭、过时或重复。它按顺序应用规则,并为每项判定给出依据,不会抓取评论。
主要功能
- 01五类评论判定结果
- 02按序规则决定判定结果
- 03为分类提供依据
- 04接收评论与线程状态信息
- 05不抓取数据的纯分类
适用场景
- 01批量整理 Pull Request 评审评论
- 02从机器人消息中找出可操作反馈
- 03识别已解决、过时或重复的评论
MCP 相关
MCP 服务提供 `triage_review_comments`,对调用方提供的评审评论信息进行分类,并返回判定、依据、计数和总数。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| comments | array | 是 | 要分类的审查评论 |
详细介绍
reviewthread
一次拉取请求审查讨论串汇集了各种内容:维护者指出一个确实有问题的检查,机器人欢呼“LGTM”,同一条覆盖率说明被发布了两次,还有针对已被重写代码的评论。reviewthread 会将一批此类评论归入审查者实际会采取行动的五类:actionable、noise、closed、stale 和 duplicate,并为每条评论指出将其归入该类别的确切规则,以便核查判定,而不是盲目信任。
你需要为每条评论提供事实:一个 id、作者姓名、作者是机器人还是人类、正文、讨论串状态(open、resolved 或 outdated),以及可选的是否关联当前失败的检查和其重复评论的 id。不会获取任何信息;分类完全取决于你传入的内容。
规则按固定顺序运行,并以第一个匹配项为准。已解决的讨论串归为 closed,已过时的讨论串归为 stale,无论评论的其他属性如何。duplicate_of 去除首尾空格后非空的评论归为 duplicate,其依据会列出修剪后的目标 id。关联失败检查的评论归为 actionable——这优先于机器人的任何发言。只有之后才会考虑作者身份:机器人评论的正文在去除首尾空格、转为小写、合并空白字符并移除末尾的 ! 和 . 字符后,如果恰好与固定的 11 条短语之一相同(例如 lgtm、looks good to me 或 ship it),则归为 noise;任何其他未关联失败检查的机器人评论也归为 noise。剩下的开放状态的人类评论则归为 actionable。
有两个判断规则是固定的。缺失、为空或仅含空白字符的 duplicate_of 都视为没有重复关系。赞扬仅依据精确的短语集合进行判定:机器人说“干得好,不过测试失败了”属于普通机器人评论,而非单纯赞扬,因为整个标准化后的正文必须与某条短语完全匹配。
格式错误的输入——缺失或为空的 comments 数组、非对象评论、缺失、为空或非字符串的 id 或 author、不属于 bot / human 的 author_kind、缺失或非字符串的 body、不属于 open / resolved / outdated 的 state、非布尔值的 failing_check,或非字符串的 duplicate_of——会导致验证错误,并指出有问题的路径,不会返回部分结果。未知的额外字段会被忽略,包括评论项内部的字段。
CLI
npx @reneturcios/reviewthread triage --input args.json
npx @reneturcios/reviewthread --version
args.json 包含完整的参数对象:
{
"comments": [
{
"id": "c1",
"author": "ci-bot",
"author_kind": "bot",
"body": "Coverage dropped below the threshold.",
"state": "open",
"failing_check": true
},
{
"id": "c2",
"author": "dependabot[bot]",
"author_kind": "bot",
"body": "LGTM!",
"state": "open"
},
{
"id": "c3",
"author": "marisol",
"author_kind": "human",
"body": "This still races when the cache is cold.",
"state": "open"
}
]
}
结果会以 JSON 格式输出:
{
"comments": [
{
"id": "c1",
"author": "ci-bot",
"verdict": "actionable",
"evidence": "comment is attached to a failing check"
},
{
"id": "c2",
"author": "dependabot[bot]",
"verdict": "noise",
"evidence": "praise-only bot comment with no failing check"
},
{
"id": "c3",
"author": "marisol",
"verdict": "actionable",
"evidence": "open human comment"
}
],
"counts": {
"actionable": 2,
"noise": 1,
"closed": 0,
"stale": 0,
"duplicate": 0
},
"total": 3
}
退出代码:成功时为 0,运行时错误(包括无法读取或无效的输入文件,或无效输入)时为 1,用法错误时为 2。
MCP 服务
npx -y @reneturcios/reviewthread mcp
MCP 客户端配置:
{
"mcpServers": {
"reviewthread": {
"command": "npx",
"args": ["-y", "@reneturcios/reviewthread", "mcp"]
}
}
}
工具
-
triage_review_comments— 根据调用方提供的评论事实,将拉取请求审查评论分类为 actionable、noise、closed、stale 或 duplicate。comments(数组,必填,至少包含 1 项)— 要分类的审查评论。每项包含:id(字符串,必填,非空)— 评论标识符author(字符串,必填,非空)— 评论作者姓名author_kind(字符串,必填,bot或human)— 作者是机器人还是人类body(字符串,必填,可为空)— 评论正文state(字符串,必填,open、resolved或outdated)— 评论的讨论串状态failing_check(布尔值,可选,缺省表示false)— 评论是否关联当前失败的检查duplicate_of(字符串,可选)— 此评论所重复的另一条评论的 id
返回
{comments, counts, total},其中comments按输入顺序为每条输入评论返回一个{id, author, verdict, evidence};counts为按此键顺序排列的{actionable, noise, closed, stale, duplicate};total是输入评论的数量。
Docker
docker run -i ghcr.io/cloudcorprecords/reviewthread
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/reviewthread triage --input /w/args.json
开发
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。