piiiico/proof-of-commitment
GitHub: piiiico/proof-of-commitment
一个面向 npm、PyPI、Cargo、Go 模块和 GitHub 仓库的供应链行为风险评估工具,通过发布者深度、维护一致性等行为信号在攻击发生前标记高危依赖。
Stars: 2 | Forks: 0
# Proof of Commitment
[](https://getcommit.dev/audit?packages=proof-of-commitment)
一个 MCP 服务器和 Web 工具,用于对 npm 包、PyPI 包、Rust crate、Go 模块和 GitHub 仓库进行**行为承诺度**评分——这些信号比 star、README 或下载数更难造假。
## 供应链问题
在每周下载量超过 1000 万的 91 个 npm 包中,有 26 个包只有**单一 npm 发布者**。它们合计占据了每周超过 30 亿次的下载量。`npm audit` 无法揭示这一点。star 数也不能。
一个典型的 Node.js 项目中,目前有四个包处于 CRITICAL(危险)状态:
- **chalk** — 每周 4.13 亿次下载,**1 名 npm 发布者**
- **zod** — 每周 1.63 亿次下载,**1 名 npm 发布者**(GitHub 上有 30+ 名贡献者)
- **lodash** — 每周 1.45 亿次下载,**1 名 npm 发布者**
- **axios** — 每周 9900 万次下载,**1 名 npm 发布者**(2026 年 3 月 30 日曾遭受攻击)
它们甚至不会出现在你的 `package.json` 中——但它们几乎存在于每个项目中:
- **minimatch** — 每周 5.62 亿次下载,**1 名 npm 发布者**
- **glob** — 每周 3.33 亿次下载,**1 名 npm 发布者**
- **cross-spawn** — 每周 1.9 亿次下载,**1 名 npm 发布者**
行为信号可以揭示这一点。star 和 README 则不能。
## 立即体验
**终端(零安装):**
```
npx proof-of-commitment axios zod chalk
# 扫描你自己的项目:
npx proof-of-commitment --file package.json
# 通过 lock file 扫描所有 transitive dependencies(找出隐藏的 CRITICAL packages):
npx proof-of-commitment --file package-lock.json # npm
npx proof-of-commitment --file yarn.lock # yarn
npx proof-of-commitment --file pnpm-lock.yaml # pnpm
# pnpm monorepo — 扫描所有 workspace packages,进行去重:
npx proof-of-commitment --file pnpm-workspace.yaml # pnpm workspaces
# 用于 CI/CD pipelines 的 JSON 输出(如果发现 CRITICAL 则以退出码 1 退出):
npx proof-of-commitment --file package-lock.json --json | jq '.criticalCount'
# 也支持 PyPI:
npx proof-of-commitment --pypi litellm langchain requests
# 通过 CLI 使用 Cargo (Rust):
npx proof-of-commitment --cargo serde tokio reqwest
# 通过 CLI 使用 Go modules(需要完整的 module 路径):
npx proof-of-commitment --golang github.com/gin-gonic/gin golang.org/x/net
# 或直接扫描 go.mod / go.sum 文件:
npx proof-of-commitment --file go.mod
npx proof-of-commitment --file go.sum # full transitive set
```
**Web 演示(无需安装):** [getcommit.dev/audit](https://getcommit.dev/audit) — 粘贴你的包,几秒钟内查看风险评分。
**MCP 服务器(零安装):**
```
{
"mcpServers": {
"proof-of-commitment": {
"type": "streamable-http",
"url": "https://poc-backend.amdal-dev.workers.dev/mcp"
}
}
}
```
添加到 Claude Desktop、Cursor、Windsurf 或任何兼容 MCP 的 AI 工具中。然后提问:
## GitHub Action
只需 30 秒即可将供应链审计添加到任何 CI 流水线中——自动从 `package.json` 或 `requirements.txt` 检测包,**将结果作为 PR 评论发布**,写入 GitHub Step Summary,并在发现 CRITICAL 包时选择性地让流水线失败。
使用位于 [piiiico/commit-action](https://github.com/piiiico/commit-action) 的专用 action:
```
# .github/workflows/supply-chain.yml
name: Supply Chain Audit
on:
pull_request:
paths: ['package.json', 'package-lock.json', 'bun.lock']
jobs:
audit:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v4
- uses: piiiico/commit-action@v1
with:
fail-on-critical: true # blocks merges on CRITICAL packages
comment-on-pr: true # posts results as a PR comment
```
当设置 `comment-on-pr: true`(默认值)时,该 action 会自动将审计表作为评论发布在 Pull Request 上——并在重新运行时**更新同一条评论**,从而避免产生评论垃圾信息。审查者无需离开 PR 即可查看风险表。
**输入参数:**
| Input | Default | Description |
|-------|---------|-------------|
| `packages` | _(自动)_ | 逗号分隔的包名(如果未设置,将从 `package.json`/`requirements.txt` 中自动检测) |
| `packages-file` | _(自动)_ | `package.json` 或 `requirements.txt` 的路径(默认:在工作区根目录中自动检测) |
| `fail-on-critical` | `true` | 如果发现 CRITICAL 包,则使工作流失败 |
| `max-packages` | `20` | 自动检测时审计的最大包数量 |
| `include-dev-dependencies` | `false` | 包含 `package.json` 中的 `devDependencies` |
| `comment-on-pr` | `true` | 将审计结果作为 PR 评论发布(需要 `pull-requests: write` 权限) |
| `api-key` | _(无)_ | [Commit Pro](https://getcommit.dev/pricing) API key — 启用批量请求和每月 1 万次请求额度 |
| `api-url` | _(生产环境)_ | 覆盖 API 端点(适用于自托管场景) |
**输出:** `has-critical`、`critical-count`、`audit-summary`(Markdown 表格,同时写入 Step Summary)。
**免费版 vs 专业版:** 没有 API key 时,包会逐个接受审计(带有延迟以遵守速率限制)。使用 Pro API key 时,所有包将在单次批量请求中完成审计——速度更快,且月度限额更高。
PR 评论 / Step Summary 输出示例:
```
| Package | Risk | Score | Publishers | Downloads/wk | Age |
|---------|-------------|-------|------------|--------------|-------|
| chalk | 🔴 CRITICAL | 75 | 1 | 380M | 12.7y |
| zod | 🔴 CRITICAL | 83 | 1 | 133M | 6.1y |
| axios | 🔴 CRITICAL | 89 | 1 | 93M | 11.6y |
```
## README 徽章
将 Commit Trust 徽章添加到你维护或依赖的任何 npm 包上:
```

```
示例:
| Package | Badge URL |
|---------|-----------|
| chalk | `` |
| react | `` |
| express | `` |
| @babel/core | `` |
评级:🟢 OK (75+) · 🟠 WARNING (40–74) · 🔴 CRITICAL (<40 或每周下载量超过 1000 万的单一 npm 发布者)
徽章缓存 1 小时。无需 API key。
同时支持 PyPI、Cargo、Go 模块以及完整的特定生态系统格式:
```




```
## REST API
无需 API key。无需安装。
```
curl https://poc-backend.amdal-dev.workers.dev/api/audit \
-X POST \
-H "Content-Type: application/json" \
-d '{"packages": ["axios", "zod", "chalk", "lodash", "express"]}'
```
```
{
"count": 5,
"results": [
{
"name": "chalk",
"ecosystem": "npm",
"score": 75,
"maintainers": 1,
"weeklyDownloads": 398397580,
"ageYears": 12.7,
"trend": "stable",
"riskFlags": ["CRITICAL"],
"scorecardScore": 3.6, // null if no GitHub repo
"hasDangerousWorkflow": false // null if no Scorecard data
},
...
]
}
```
## 9 个 MCP 工具
| Tool | Description |
|------|-------------|
| `audit_dependencies` | 批量风险审计,支持最多 20 个 npm/PyPI/Cargo/Go 包 |
| `lookup_npm_package` | 单个 npm 包行为分析 |
| `lookup_pypi_package` | 单个 PyPI 包行为分析 |
| `lookup_cargo_crate` | 单个 Rust crate 行为分析 (crates.io) |
| `lookup_go_module` | 单个 Go 模块行为分析 (proxy.golang.org + GitHub) |
| `lookup_github_repo` | GitHub 仓库承诺度得分(生命周期、提交频率、贡献者深度) |
| `lookup_business` | 挪威企业注册信息——运营年限、员工数量、财务数据 |
| `lookup_business_by_org` | 同上,通过组织编号查询 |
| `query_commitment` | 浏览器扩展行为数据(唯一验证访客数、回访率) |
## 评分标准
每个包都会在以下维度获得 0-100 的评分:
- **Longevity(生命周期)** — 该包存在了多久?被遗弃的包可能会被恶意重新激活用于攻击。
- **Publisher depth(发布者深度)** — 单一 npm 发布者加上数百万的每周下载量 = 正是 LiteLLM 曾利用的攻击面。(发布者 = 拥有 npm 发布权限的人,与 GitHub 贡献者不同。)
- **Release consistency(发布一致性)** — 定期发布表明有持续维护。长期未更新 = 漏洞积累。
- **Download trend(下载趋势)** — 增长中的包会吸引更多关注(以及攻击)。稳定 = 更低的关注度。
- **OpenSSF Scorecard** — 流程安全性(代码审查执行、分支保护、CI/CD 安全性)。与行为信号区分开来。高 Scorecard 得分 ≠ 免受凭证盗窃攻击。
**风险标记:**
- `CRITICAL` — 单一 npm 发布者 + 每周下载量 >1000 万(典型的 LiteLLM/axios 攻击特征)
- `HIGH` — 包龄 <1 年且被快速广泛采用
- `WARN` — 12 个月以上无新发布版本
## 真实数据点
```
# 你了解的 packages:
chalk — score 75, 1 publisher, 413M/week ⚑ CRITICAL
zod — score 86, 1 publisher, 163M/week ⚑ CRITICAL (30+ GitHub contributors)
lodash — score 81, 1 publisher, 145M/week ⚑ CRITICAL
axios — score 86, 1 publisher, 99M/week ⚑ CRITICAL (attacked Mar 30 2026)
express — score 90, 5 publishers, 95M/week
# 可能不在你的 package.json 中,但肯定在你的 lock file 中的 packages:
minimatch — score 78, 1 publisher, 562M/week ⚑ CRITICAL
glob — score 80, 1 publisher, 333M/week ⚑ CRITICAL
cross-spawn — score 72, 1 publisher, 190M/week ⚑ CRITICAL
# post-attack:
litellm — score 74, 1 publisher ⚑ CRITICAL (supply chain attack Mar 2026)
# Rust crates(v1.3.0 新增):
serde — score 78, 1 owner, 13M/week ⚑ CRITICAL (dtolnay sole owner)
tokio — score 89, 2 owners, 10M/week
reqwest — score 85, 1 owner, 8M/week ⚑ HIGH
```
## 为什么选择行为信号
LiteLLM 攻击(2026 年 3 月)和 axios 攻击(2026 年 3 月 30 日)遵循相同的模式:凭证被盗 → 推送恶意包 → 9700 万+ 台机器被暴露。这两个包在这些攻击发生*之前*,就已被这些指标评为 CRITICAL。
声明性信号(star、README 质量、CI 徽章)无法捕捉到这种风险。但行为承诺度可以。
## 技术栈
| Layer | Technology |
|-------|-----------|
| Backend | Cloudflare Workers + D1 |
| MCP | Model Context Protocol SDK |
| Data | npm registry, PyPI, crates.io, proxy.golang.org, deps.dev, GitHub API, Brønnøysund (NO) |
| Landing | Astro + Cloudflare Pages |
## 路线图
计划中,非承诺。本项目仍处于早期阶段——欢迎在这些方向上的任何贡献。
| Feature | Status | Notes |
|---------|--------|-------|
| **Cargo (Rust) registry 支持** | ✅ 已上线 | MCP 工具、REST API、徽章端点 — `ecosystem: "cargo"` |
| **Go 模块支持** | ✅ 已上线 | proxy.golang.org + deps.dev + GitHub 首要评分 — `ecosystem: "golang"` |
| **分数细分可视化** | 计划中 | 用于在 getcommit.dev/audit 上展示 5 个维度的图表组件 |
| **CLI 的 `--json` 标志** | ✅ 已上线 | `npx proof-of-commitment --file package-lock.json --json \| jq '.criticalCount'` |
| **pnpm workspace monorepo 支持** | ✅ 已上线 | `--file pnpm-workspace.yaml` 或从 `pnpm-lock.yaml` 自动检测 |
| **历史分数追踪** | 计划中 | 趋势图表——这个包的风险是否随时间在增加? |
| **组织级仪表盘** | 计划中 | GitHub 组织内所有仓库的聚合风险视图 |
请参阅[待解决的问题](https://github.com/piiiico/proof-of-commitment/issues),了解你今天就可以帮忙的事项。
## 更广阔的愿景
供应链审计是第一个工具。其底层基元是一个**承诺图**(commitment graph)——这是一种跨任何领域取代基于内容信任的行为信号。
当内容可以随意伪造时(评论、star、README),承诺度就成了真正的信号。一个在 12 年内发布了 847 个版本的发布者,其承诺度与一个在 2023 年只发布过一次的人是完全不同的。
同样的逻辑也适用于网站、企业和 AI 代理。两大银行卡网络已独立指出了这一空白:Mastercard Verifiable Intent §9.2 明确将行为信任列为“未涵盖”。Visa TAP 识别了代理,却没有回答是否应信任它们。
Proof of Commitment 正是他们所指向的信任层。
→ [getcommit.dev](https://getcommit.dev)
## 本地运行
```
bun install
bun run dev:backend # local server with SQLite
bun run test:e2e # E2E test with mock World ID
```
部署:
```
bun run deploy # deploys to Cloudflare Workers
```
标签:API安全, API安全, DevSecOps, GNU通用公共许可证, Go Modules, JSON输出, JSON输出, LNA, MCP服务器, Node.js, npm安全, PyPI安全, Rust Crates, 上游代理, 依赖安全, 包管理器, 单维护者风险, 可见性评估, 数据集, 程序员工具, 统一API, 网络测绘, 自动化攻击, 零安装, 项目健康度