mcpField
G
gapproof

gapproof

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

关于 gapproof

gapproof 是面向开发者的本地代码仓库测试缺口分析工具。它通过启发式规则关联测试与函数、记录测试运行结果并计算综合覆盖分数,也可通过 MCP 服务或命令行使用。

主要功能

  1. 01启发式提取源代码函数
  2. 02按名称关联测试
  3. 03记录通过与失败的运行
  4. 04综合关联与验证分数
  5. 05从注释读取需求编号
  6. 06导出证据包

适用场景

  1. 01查找未被测试提及的函数
  2. 02在本地跟踪通过的测试运行
  3. 03检查变更文件的测试影响
  4. 04导出覆盖率与缺口证据

MCP 相关

向 MCP 客户端提供仓库分析、测试缺口、评分、运行记录、影响分析和证据工具。

配置

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

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

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

安装包
npm@reneturcios/gapproof0.1.0
ocighcr.io/cloudcorprecords/gapproof:0.1.0

工具

12

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

参数类型必填说明
rootstring是代码仓库根目录的路径。

详细介绍

gapproof

gapproof 是一个用于代码仓库的本地测试缺口分析工具。它会遍历源文件,提取找到的函数,检查其中哪些函数在测试中被提及,并报告缺口:没有测试似乎覆盖的函数。记录的测试运行会提供第二种、更有力的信号——通过的运行中提到的函数(直接提及,或通过关联它的测试提及)会被视为已验证,而不只是已关联——这两种信号会合并为一个覆盖率分数。

这个软件包是从零开始重建的干净室版本,也是一个标注过的核心子集:它涵盖了原 Orangepro MCP 服务(orangepro_*)所记录的 18 个工具中的 12 个。省略的工具列在下文的“范围”部分。

工作原理——如实说明

这里没有 AST,没有解析器,也没有任何网络调用。引擎由一组有文档说明的启发式规则构成:

  • 遍历。 从给定根目录开始,跳过 node_modules、.git、dist 和以点开头的目录。以 .ts、.tsx、.js、.jsx 或 .py 结尾的文件,如果位于 test/、tests/ 或 __tests__/ 目录下,或命名为 *.test.*、*.spec.*、test_*.py 或 *_test.py,则归类为测试;其余文件均为源文件。
  • 提取(正则表达式)。 TypeScript/JavaScript:function name(、export function name( 和 const name = (...) =>(也支持 let/var、function 关键字形式,以及可选的 async)。Python:def name(。名称不以下划线 _ 开头的 Python 函数视为已导出;使用 export 声明的 TS/JS 函数视为已导出。
  • 关联。 如果某个函数名作为一个单词出现在某个测试文件的内容中,则该函数视为已关联。
  • 验证。 orangepro_record_run 会将一次运行(test、outcome: "pass" | "fail"、可选的 functions)追加到持久化图谱中。如果某次通过的运行提到了某个函数,或提到了一个会关联到该函数的测试文件/测试用例,则该函数视为已验证。
  • 分数。 60% × 已关联比例 + 40% × 已验证比例,以 0–100 的范围报告,保留一位小数。
  • RTM。 从源文件注释中(仅 //、/* … */、#)读取符合 [A-Z]+-\d+ 的需求 ID,并与同一文件中定义的函数关联。

状态保存在一个文件中:<root>/.gapproof/graph.json,由 orangepro_start 和 orangepro_record_run 写入。其他所有操作只读取仓库(以及在需要考虑运行记录时读取该图谱),不会写入。

安装

npx @reneturcios/gapproof orangepro_start '{"root":"/path/to/repo"}'

也可以运行容器映像:

docker run -i ghcr.io/cloudcorprecords/gapproof

容器默认启动 MCP 服务。传入 CLI 参数即可将其用作 CLI。无需 API 密钥——原版中可选的模型密钥仅用于其 AI 测试生成工具,而此子集不包含这些工具。

CLI

CLI 与各工具对应:每个工具对应一个子命令,参数以单个 JSON 对象的形式传入。

gapproof orangepro_start '{"root":"/path/to/repo"}'
gapproof orangepro_analyze_sources '{"root":"/path/to/repo"}'
gapproof orangepro_find_test_gaps '{"root":"/path/to/repo","limit":10}'
gapproof orangepro_status '{"root":"/path/to/repo"}'
gapproof orangepro_record_run '{"root":"/path/to/repo","test":"math.test","outcome":"pass"}'
gapproof orangepro_export_evidence_pack '{"root":"/path/to/repo"}'
gapproof --version

退出代码:成功时为 0,分析或验证错误时为 1,用法错误时为 2。

MCP 服务

一个二进制文件同时提供两种接口。mcp 子命令会启动一个 stdio MCP 服务:

npx -y @reneturcios/gapproof mcp

MCP 客户端配置:

{
  "mcpServers": {
    "gapproof": {
      "command": "npx",
      "args": ["-y", "@reneturcios/gapproof", "mcp"]
    }
  }
}
工具

除非另有说明,所有工具都接受 root(仓库路径)。

工具额外输入返回内容
orangepro_start—分析仓库,持久化 .gapproof/graph.json(保留已记录的运行),并返回 {root, sources, functions, tests, linked, unlinked} 计数。
orangepro_analyze_sources—执行相同的遍历,但不持久化:返回每个文件的函数列表以及函数总数。
orangepro_find_test_gapslimit(可选)返回未关联的函数,格式为 [{function, file, exported}],先列出导出的函数,再按文件顺序排列。
orangepro_status—有持久化图时返回 {exists: true, generated_at, counts}。没有图时返回 {exists: false},以及一份新生成但未存储的快照。
orangepro_doctor—返回 {root_exists, has_manifest, source_files, test_files, issues};清单文件指根目录中的 package.json 或 pyproject.toml。
orangepro_graph_score—返回 {score, linked_ratio, proven_ratio, functions}:关联度占 60%,验证度占 40%。
orangepro_stats—返回 {files, functions, tests, test_files, linked, unlinked, proven, runs}。tests 统计单个测试用例;test_files 统计文件。
orangepro_rtm—返回源代码注释中找到的需求 ID 对应的 [{id, functions, covered}];covered 表示所有关联函数均已关联。没有 ID 时返回空列表。
orangepro_changed_impactfiles(必需数组)根据给定的仓库相对路径文件,返回 {changed_functions, affected_tests, unlinked_changed}。
orangepro_record_runtest、outcome(必需),functions(可选)向图中追加一次运行记录(若尚无图,则先执行一次全新分析),并返回 {recorded: true, runs_total}。
orangepro_explain_testtest(必需)根据名称子字符串查找测试文件,并返回 {test, file, linked_functions, proven_functions, content_excerpt}(摘录不超过 400 个字符)。
orangepro_export_evidence_pack—返回给调用方 {generated_at, root, score, stats, gaps, runs},不会写入任何内容。

范围

此核心子集省略了 orangepro_prove_loop、 orangepro_prove、orangepro_generate_tests、 orangepro_update_graph、orangepro_ai_links 和 orangepro_ai_flows。这些是原版中用于执行证明和 AI 辅助的工具;原版中的 AI 工作流需要模型密钥。 此子集仅复现本地分析功能,并受上述启发式方法的限制:基于名称的关联可能会遗漏间接覆盖,也可能因巧合提及而误判为覆盖;基于注释的 RTM 提取只能识别注释中写明的 ID。

开发

npm install
npm run build   # tsc -> dist/
npm test        # node test runner over test/*.test.ts, in-memory fixture repo, no network, no disk
npm run dev     # run the CLI from source via tsx

许可证

MIT — 参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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