mcpField
M
matrixshrink

matrixshrink

本地服务
github.com/CloudCorpRecords开发工具01 周前更新

关于 matrixshrink

matrixshrink 根据 CI 矩阵组合的运行结果和覆盖记录,识别可安全移除的组合,面向维护 CI 矩阵的团队,采用确定性的本地分析。

主要功能

  1. 01识别冗余组合
  2. 02保留有失败运行的组合
  3. 03标记没有运行记录的组合
  4. 04报告覆盖项和总数
  5. 05验证输入并指出错误
  6. 06通过命令行或 MCP 本地分析

适用场景

  1. 01缩减过大的 CI 矩阵
  2. 02移除组合前检查覆盖情况
  3. 03保留与失败相关的组合
  4. 04检查缺失的运行记录

MCP 相关

提供 `find_redundant_combos` MCP 工具,接收组合和运行记录,并返回冗余、保留、失败及无运行记录的组合组别和总数。

配置

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

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

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

安装包
npm@reneturcios/matrixshrink0.1.0
ocighcr.io/cloudcorprecords/matrixshrink:0.1.0

工具

1

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

参数类型必填说明
runsarray是记录的 CI 运行(至少一项)
combosarray是CI 矩阵中的组合(至少一项)

详细介绍

matrixshrink

CI 矩阵每次都会多出一个组合——这里新增一个操作系统,那里新增一个运行时版本——但从来没人会删掉它们,因为没人能说清哪些可以安全移除。matrixshrink 根据证据给出答案。你提供矩阵中的组合和记录的运行历史——每次运行测试了哪个组合、是通过还是失败,以及测试了哪些覆盖键(测试文件、功能 ID,或你跟踪的其他内容)——matrixshrink 就会报告可以移除的组合:

  • 冗余 — 如果某个组合的所有运行都通过,且它的覆盖内容已由保留的组合完全覆盖,那么它就是冗余的。扫描采用贪心且确定性的方式:按 ID 升序检查符合条件的组合,某个组合一旦被标记,其覆盖内容便不再计入后续组合。因此,如果两个组合的覆盖内容相同,按字母顺序靠前的组合会被标记,后一个则会保留——必须至少保留其中一个才能覆盖这些内容。始终通过且没有任何覆盖内容的组合也是冗余的:空集可以被任何集合覆盖,包括空集。
  • 失败 — 只要有一次运行失败,该组合就永远不会被视为冗余。失败说明该组合能捕获某些问题,因此始终会保留,并列在 failing 中;其覆盖内容也仍会计入对其他组合的覆盖。
  • 没有运行记录 — 没有记录运行的组合会列在 no_runs 中,且不会被标记。没有任何证据可作判断,matrixshrink 不会猜测。

报告会列出每个冗余组合及其完整覆盖内容(合并该组合所有运行的覆盖内容并排序)、保留的 ID、失败的 ID、没有运行记录的 ID,以及所提供的组合和运行总数。

验证非常严格:缺失或重复的组合 ID、运行中引用未提供的组合、不是 "pass" 或 "fail" 的结果、非字符串的维度值或覆盖键,以及其他任何格式错误的字段,都会报错并指出出错路径(例如 runs[2].combo references unknown combination "node22-linux"),且不会生成部分报告。计算是纯本地的:不访问网络、不需要配置,也不会读取你提供的输入之外的任何文件。

CLI

npx @reneturcios/matrixshrink analyze --input args.json
npx @reneturcios/matrixshrink --version

args.json 包含完整的参数对象:

{
  "combos": [
    { "id": "linux-node20", "dimensions": { "os": "linux", "node": "20" } },
    { "id": "linux-node18", "dimensions": { "os": "linux", "node": "18" } },
    { "id": "mac-node20", "dimensions": { "os": "macos", "node": "20" } }
  ],
  "runs": [
    { "combo": "linux-node20", "outcome": "pass", "covered": ["unit", "integration", "e2e"] },
    { "combo": "linux-node18", "outcome": "pass", "covered": ["unit"] },
    { "combo": "mac-node20", "outcome": "fail", "covered": ["unit", "integration"] }
  ]
}

dimensions 对每个组合都是可选的(默认为 {}),covered 对每次运行都是可选的(默认为 [])。报告以 JSON 格式打印:

{
  "redundant": [{ "id": "linux-node18", "covered": ["unit"] }],
  "kept": ["linux-node20", "mac-node20"],
  "failing": ["mac-node20"],
  "no_runs": [],
  "total_combos": 3,
  "total_runs": 3
}

退出代码:成功时为 0,运行时错误时为 1(包括输入文件无法读取或无效,以及输入无效),用法错误时为 2。

MCP 服务

npx -y @reneturcios/matrixshrink mcp

MCP 客户端配置:

{
  "mcpServers": {
    "matrixshrink": {
      "command": "npx",
      "args": ["-y", "@reneturcios/matrixshrink", "mcp"]
    }
  }
}
工具
  • find_redundant_combos — 根据运行历史和覆盖重叠,查找冗余的 CI 矩阵组合。

    • combos(数组,必需,至少一个)— 组合列表,每项为 {id, dimensions?} 对象;id 在集合中必须唯一,且每个 dimensions 值都必须是字符串
    • runs(数组,必需,至少一个)— 记录的运行列表,每项为 {combo, outcome, covered?} 对象;combo 指定一个已提供的组合,outcome 为 "pass" 或 "fail"

    返回 {redundant, kept, failing, no_runs, total_combos, total_runs}。

Docker

docker run -i ghcr.io/cloudcorprecords/matrixshrink
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/matrixshrink analyze --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

许可证

MIT — 版权所有 (c) 2026 Rene Turcios

评论

支持 Markdown

第一次接触 MCP?

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

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