mcpField
R
reviewthread

reviewthread

本地服务
github.com/CloudCorpRecords版本控制01 周前更新

关于 reviewthread

reviewthread 将提供的 Pull Request 评审评论分为可操作、噪声、已关闭、过时或重复。它按顺序应用规则,并为每项判定给出依据,不会抓取评论。

主要功能

  1. 01五类评论判定结果
  2. 02按序规则决定判定结果
  3. 03为分类提供依据
  4. 04接收评论与线程状态信息
  5. 05不抓取数据的纯分类

适用场景

  1. 01批量整理 Pull Request 评审评论
  2. 02从机器人消息中找出可操作反馈
  3. 03识别已解决、过时或重复的评论

MCP 相关

MCP 服务提供 `triage_review_comments`,对调用方提供的评审评论信息进行分类,并返回判定、依据、计数和总数。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-reviewthread": {
"command": "npx",
"args": [
"-y",
"@reneturcios/reviewthread"
]
}
}
}
启动命令npx -y @reneturcios/reviewthread

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/reviewthread0.1.0
ocighcr.io/cloudcorprecords/reviewthread:0.1.0

工具

1

收录的工具列表 · 更新于 1 周前

参数类型必填说明
commentsarray是要分类的审查评论

详细介绍

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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。