关于 DiffCI
DiffCI Core 分析本地代码库,识别代码变更影响的测试,并提出有证据支持的测试计划。它面向评估测试影响的开发者和维护者;保守回退与仅供参考的结果确保完整 CI 仍是权威检查。
主要功能
- 01Git 变更与依赖分析
- 02测试影响追踪
- 03保守回退至全量运行
- 04推断 GitHub Actions 结构
- 05提供参考性测试命令计划
适用场景
- 01检查拉取请求受影响的测试
- 02不更改必需 CI 的情况下评估选择性测试
- 03分析 JavaScript 或 TypeScript 代码库变更
- 04检查 CI 作业结构和测试选择依据
MCP 相关
agent-plugin 包将已发布的 DiffCI CLI 作为本地 MCP 插件提供给编码 Agent。安装指南涵盖多种 Agent 和通用 MCP 主机。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://diffci.com/mcp/v1claude mcp add --transport http diffci-diffci https://diffci.com/mcp/v1{"mcpServers":{"diffci-diffci":{"type":"http","url":"https://diffci.com/mcp/v1"}}}在 Cursor 中打开{"servers":{"diffci-diffci":{"type":"http","url":"https://diffci.com/mcp/v1"}}}在 VS Code 中打开{"mcpServers":{"diffci-diffci":{"type":"http","url":"https://diffci.com/mcp/v1"}}}{"mcpServers":{"diffci-diffci":{"serverUrl":"https://diffci.com/mcp/v1"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
3| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| repo | string | 否 | 可选的本地仓库路径,将作为单个 --repo 参数传入。 |
| action | enum | 否 | 验证操作。默认为 check。check | observe | init | verify-workflow |
| platform | enum | 否 | 仅用于渲染显示命令的 Shell。默认为 posix。posix | powershell |
详细介绍
DiffCI Core
开源的测试影响分析,让 CI 更快。 面向希望评估更改会影响哪些测试的开发者和维护者,并在保守情况下回退到全量运行。采用 AGPL-3.0-only 许可。
编码 Agent 插件
公开的 integrations/agent-plugin 包
将已发布的 DiffCI CLI 作为可识别代码检出状态的本地 MCP 插件提供。
该包仅包含公开的市场元数据、技能和固定版本的 npm
启动器;不包含产品服务或私有源代码。
跨 Agent 安装指南涵盖 Codex、
Claude Code、Cursor、Grok、Meta Muse Code 和通用 MCP 主机。
# Codex
codex plugin marketplace add DiffCI/core
codex plugin add diffci@diffci-local
# Claude Code
claude plugin marketplace add DiffCI/core
claude plugin install diffci@diffci-marketplace
Cursor Marketplace 会读取此仓库中的 .cursor-plugin/marketplace.json。
Meta Muse Code 会读取根目录中的原生
marketplace.json。在公开列表获批之前,
请使用 agent-plugin 包中的本地 MCP 配置,或访问
https://diffci.com/mcp-server。
GitHub Action
公开的 action.yml 是一个仅用于观测的 GitHub Action
封装。它会在被观测的代码检出目录之外运行固定版本的已发布 DiffCI CLI,
保留现有 CI 作业,并上传建议性报告。请参阅
观测器 Action 指南和
工作流示例。
v0.3.10 对应的源代码
仍可在带标签的 Core 提交 4c76be14(cli-v0.3.10-source)中公开获取,
目前发行方式正迁移到 Core 原生 CLI 包。
使用 Git 和 Node.js 22.5+,在现有的 Git 代码检出目录中试用已发布的 CLI:
npx "@diffci.com/diffci@latest" check
在可安全测量时,它会比较全量运行与所选测试的运行时间,将报告写入代码检出目录之外,且默认不会发送任何内容。测试命令可能会生成文件;请确保必要的 CI 检查仍具有权威性。
**测量示例:**一次受控的 Cal.com 沙盒重放测得,安装 + 预测试 + 测试的总运行时间净减少了 44.2%,其中包含分析开销。这是与作业等效的比较,并非生产环境中的节省,也不是对你仓库的预测。方法与局限。
为 Core 点星 · 提供一个试点仓库 · 寻找第一个贡献机会。 通过 Watch → Custom → Releases 和 Discussions 关注基准测试结果与支持更新。公开路线图。
这是独立的 Core 引擎。它可分析本地 JavaScript/TypeScript 仓库、受支持的 Vue 组件、根 Go 模块和常规 Maven reactor,追踪依赖影响、推断 GitHub Actions 结构,并基于证据提出测试选择,同时提供全量运行回退方案。无需 DiffCI 账户、托管服务或 API 密钥即可使用。支持范围限制请参阅发行边界。
想在现有仓库中试用 DiffCI? 请使用已发布的 CLI:npx @diffci.com/diffci@latest check。有关无需执行代码的分析选项、前置条件和结果解读,请参阅 CLI 快速入门。以下命令会从源代码构建独立引擎。
在本地运行
需要 Git 和 Node.js 22.5 或更高版本。
git clone https://github.com/DiffCI/core.git
cd core
npm ci
npm run build
npm test
node dist/cli.js plan --repo /path/to/clean-checkout --base HEAD~1 --head HEAD
目标必须是检出到 --head 的干净 Git 仓库根目录。如果使用浅克隆,请事先获取基准提交。JSON 输出到标准输出;分析错误会以非零状态码退出,并建议运行完整 CI。核心不会执行仓库脚本、联系 DiffCI 后端或发送遥测数据。安装需要访问 npm 注册表。
若要在不更改必需作业的情况下,对拉取请求运行同一命令,请复制建议性 GitHub Actions 示例。
计划仅供参考。 此版本不会执行、跳过或取消 CI 作业。SKIP_CANDIDATE 只是候选项,不代表获准绕过检查。在评估 Core 时,请以完整 CI 为准。缺少命令生成、配置不受支持以及证据不完整,均不得视为空测试套件。静态分析无法证明可以安全地省略某项测试。
对于 CI 运行的生命周期目标或配置文件并非 test 的 Maven 作业,请在 diffci.json(或 package.json 中的 diffci 键)声明它们:
{ "maven": { "goal": "verify", "profiles": ["run-its"] } }
这会更改建议的命令,例如 mvn -pl tools -am verify -P run-its;但 Core 仍不会运行该命令。执行前,请根据仓库的 CI 工作流确认该命令。
包含内容
声明了 pnpm 工作区且只有一个 Vitest 测试阶段的项目,可以获得包级命令计划。每个选定路径都必须属于已声明包中发现的某项测试。运行时选择会分批处理,以使命令长度不超过 Windows 限制;声明了 --typecheck 的包会保留单独的完整类型测试阶段。包含复合脚本、生命周期钩子、所有权重叠或发现盲区的包,不会采用选择性执行。命令仅供参考,必须单独执行;CLI 自动对多个命令计时还需要额外集成。
| 范围 | 实现 |
|---|---|
| 变更和依赖 | Git 差异、仓库清单、JS/TS 依赖图、影响遍历 |
| 安全与计划 | 风险信号、保守回退、始终运行策略、测试选择和命令生成 |
| CI 分析 | GitHub Actions 证据、作业/引用图、条件和矩阵推断 |
| 可复现评估 | 合成基准测试和可移植回归测试 |
| 度量 | 当前进程的墙钟时间、CPU 时间和结束时的 RSS;基于显式输入的成本/能耗/碳排放估算 |
库入口导出 analyzeCheckout、buildDependencyGraph、ImpactAnalyzer、DefaultCIPlanner、collectEvidence、inferPipeline、measure 和 estimateImpact。较低层级的模块可通过包子路径访问。本仓库是引擎源码,已发布的 @diffci.com/diffci CLI 也由此发布。此前发布的 v0.3.10 软件包对应的源码保留在标记提交 4c76be14 的源码归档中。
npm run typecheck
npm run audit:boundary
npm run benchmark
基准测试会构建一个临时合成仓库,其中包含 100 个串联模块和 100 个导入这些模块的测试文件。在一个 Node.js 进程中,它会依次构建同一张依赖图三次,之后移除该测试夹具。先使用 npm ci 安装依赖,然后在 Node.js 22.5 或更高版本下运行 npm run benchmark。比较运行结果时,请同时记录输出的 node 和 platform,以及机器的 CPU、内存、操作系统和竞争性工作负载。这三次构建共享进程、操作系统和编译器的预热效应;它们并非在受控冷缓存条件下进行的独立重复测试。
runs 中的每个条目包含以下字段:
| 字段 | 说明 |
|---|---|
basis: "measured" | 进程计数器是实际观测值,而非估算值。 |
scope: "current-process" | 仅涵盖基准测试的 Node.js 进程,不包括整个主机、容器或 CI 作业。 |
wallSeconds | 一次 buildDependencyGraph 调用的实际经过时间。 |
cpuSeconds | 当前进程在该次调用期间消耗的用户态与系统态 CPU 时间;该值可能与实际经过时间不同。 |
rssBytesAtEnd | 调用结束后采样的常驻集大小。它既不是峰值内存,也不是该次调用单独分配的内存。 |
nodes、edges | 图的规模。当前测试夹具应生成 200 个节点和 199 条依赖边。 |
confidence | 此合成测试夹具的依赖图置信度。COMPLETE 并不能证明真实仓库可以安全地跳过测试。 |
例如,wallSeconds: 0.79、cpuSeconds: 0.84 和 rssBytesAtEnd: 327868416 表示一次图构建耗时约 0.79 秒,消耗了当前进程约 0.84 CPU 秒,并以约 328 MB 的 RSS 结束。它们不表示 CI 提速了 0.79 秒或节省了 328 MB。该脚本不会运行测试、安装、构建,也不会比较完整执行与选择性执行,因此不得将其计时结果报告为 CI 节省。
单独的 estimateImpact API 只能根据调用方提供的 computeSeconds、价格、功耗和电网碳强度假设,计算 estimatedUsd、estimatedKwh 和 estimatedKgCo2e。这些值的 basis: "estimated";它们是建模场景,并非基准测试输出、实测数据、账单记录或经核实的减排量。
赞助商
DiffCI Core 由其 GitHub Sponsors 支持。赞助资金用于维护、扩大语言和 CI 支持范围,以及开展可复现的基准测试。
合作伙伴
目前还没有合作伙伴赞助商。成为首位赞助商。
团队赞助商
目前还没有团队赞助商。团队赞助商的徽标也会显示在 diffci.com/sponsors。
支持者
目前还没有支持者。月捐 25 美元或以上的支持者会列于此处。
赞助商提交的错误报告会标记为 sponsor,并优先处理。
Core 与 Cloud
| 组件 | 可用性 | 许可证 |
|---|---|---|
| 此 Core 仓库 | 公开源码 | AGPL-3.0-only |
| DiffCI Cloud:托管、计费、组织管理、仪表板、托管服务 | 私有源码 | 专有;此处不包含 |
| 可选企业模块 | 此处未发布 | 如果提供,将采用单独的源代码可见许可证 |
此仓库仅包含明确提取的 Core 文件和独立工具。此处没有私有单体仓库历史记录、客户数据、部署配置或 Cloud 实现。Core 可独立使用;这并不意味着私有产品已经迁移并开始使用此软件包。
许可证与贡献
请参阅 LICENSE、NOTICE 和 CONTRIBUTING.md。AGPL 允许商业用途;它并非非商业许可证。其义务(包括适用于通过网络使用的修改版本的义务)由许可证规定。是否符合授权条件取决于具体的授权协议。此仓库的布局并不保证符合条件,也不保证实现法律上的隔离。
有关范围和当前限制,请参阅发布边界。
觉得有用?为引擎点星,并分享可复现的试点结果。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。