Fusion-Data-Company/fusion-launchaudit
GitHub: Fusion-Data-Company/fusion-launchaudit
一款在本地编码 agent 中运行的 Web 应用上线就绪审计工具,通过真实浏览器驱动和 HTTP 探测自动检测访问控制、安全头、无障碍、SEO 等上线关键问题并给出证据和评分。
Stars: 0 | Forks: 0
# 80/20 上线审计
[](https://github.com/Fusion-Data-Company/fusion-launchaudit/actions/workflows/ci.yml)
[](LICENSE)


**你的 AI 构建了那简单的 80%。这款工具能赶在你的用户之前,找出导致上线崩溃的那 20% —— 并附带确凿证据。**
一款专为 Web 应用设计的深度、自动化上线就绪审计工具。只需将其指向一个正在运行的应用(及其可选的代码仓库);它就会在真实的 Chromium 浏览器中驱动该应用,并结合直接的 HTTP 探测,最终为你反馈一份 0-100 的就绪度评分、每项检查的证据,以及一份准确说明需要修复什么的大白话清单。它直接在**你自己的编程 agent 中,基于你自己的订阅运行** —— 无需购买 API key,无需托管后端,你的代码也绝不会离开你的本地机器。
## 为什么开发这款工具
我是 Rob。我运营着 [Fusion Data Company](https://fusiondataco.com) —— 我们每周都会为真实的客户构建并上线 AI 辅助的 Web 和移动应用。
有一种模式总是反咬我一口:AI 把应用做到了差不多 80% 的完成度。理想路径跑通了,演示看起来很棒,每个人都很开心。然后它上线了 —— 接着有人在 URL 中修改了一个 id,就读取到了另一个客户的数据。管理员按钮从 UI 中消失了,但任何人只要调用它,endpoint 依然会执行。一个格式错误的请求直接返回 500 报错并暴露堆栈信息。一个 `.env` 文件顺带被打包进了客户端包中。构建看起来*已经完成了*,但其实并没有。
剩下那 80% 真正繁重的工作 —— 访问控制、异常路径、安全性、资深开发者级别的收尾打磨 —— 才是模型会跳过的部分,除非你强迫它去做。而且当你问你的 AI“这准备好了吗?”时,它想帮忙,所以它会告诉你你希望听到的话。它不会以陌生人的身份登录去读取你自己的数据。它不会去狂轰滥炸自己的 API 直到数据泄露。它不会去反复核查自己那句“看起来没问题”。
所以我开发了这款真正去做这些事的工具。80/20 上线审计绝不会仅仅在理想路径上爬行 —— 它会试图闯入,并且如果没有证据,它拒绝将任何东西称为“已完成”。这就是核心重点:**你的构建者说上线吧;这款工具说拿出证据来 —— 并且亲自去执行。**
## 60 秒快速开始
克隆、安装、向你已经付费的 agent 注册它,然后启动你的仪表板。接着只需告诉 agent:**“审计我的网站 ``。”**
**Claude Code:**
```
git clone https://github.com/Fusion-Data-Company/fusion-launchaudit.git && cd fusion-launchaudit && npm install && npx playwright install chromium && claude mcp add launchaudit -- node --experimental-strip-types ./runner/mcp-server.ts && npm run dashboard
```
最后一步(`npm run dashboard`)会在 `http://localhost:3010` 打开你的**大本营** —— 一个由本地磁盘数据库支持的本地仪表板。你运行的每一次审计都会出现在那里,并且会在不同会话之间被记忆下来(包括你的项目、运行记录和评分)。没有任何东西被托管;数据绝不离开你的本地机器。让它保持运行状态;从你的 agent 中运行审计,然后看着它们显示出来。
**Cursor / Codex** —— 以同样的方式克隆 + 安装,然后在你的 agent 配置中注册 MCP 服务器:
```
{ "mcpServers": { "launchaudit": { "command": "node", "args": ["--experimental-strip-types", "./runner/mcp-server.ts"] } } }
```
没有 agent?运行独立的 CLI(见下文)。想先看看它能生成什么?将你的 URL 粘贴到这个免费的即时评分器中:**[launch-audit-platform.vercel.app/landing](https://launch-audit-platform.vercel.app/landing)**。
## 环境要求
- Node.js 22.6.0 或更高版本。每条命令都会显式传递 `--experimental-strip-types`(Node 在 22.6.0 中引入了它),因此任何 22.6 以上的 Node 都可以工作(在 22.22 上验证过;在 22.18+/23.6+ 上,类型剥离默认开启,该标记仅是冗余的)。
- npm(随 Node 一起提供)。
- 一个编程 agent(Claude Code、Cursor 或 Codex),如果你想要 agent 驱动的审计与修复循环或 MCP 服务器的话。独立的 CLI 不需要 agent 也能运行。
## 用法
### 1. 独立 CLI 审计
无需 agent。将其指向一个正在运行的应用:
```
node --experimental-strip-types runner/audit.ts \
--name "My App - launch audit" \
--app-url http://localhost:3000 \
--repo /path/to/the/app/repo
```
Flags:
- `--name`(必填)—— 易读的审计名称。
- `--app-url`(必填)—— 正在运行的待审计应用。无论是本地还是已部署的均可。
- `--repo`(可选)—— 应用源码的路径。启用 repo 扫描器,它能发现路由、API endpoint 和 middleware,从而使审计生成的检查远多于盲目的爬取。
- `--hints`(可选)—— JSON 提示文件的路径,列出受保护的路由、受保护的 API、POST endpoint、登录路径以及管理员/用户凭据。有了凭据,审计会在本地捕获会话,并以每个角色运行相同的测试面。凭据绝不会离开你的本地机器。具体结构请参见 `fixtures/buggy-shop/launchaudit-hints.json`。
- `--out`(可选)—— 输出目录。默认:`launchaudit-report/`。
流水线:扫描 repo → 爬取正在运行的应用 → 生成测试卡 → 在 Chromium 和 HTTP 上执行它们 → 收集证据 → 对失败进行分类 → 计算就绪度 → 渲染报告。
### 2. MCP 服务器(Claude Code、Cursor 或 Codex)
审计引擎**自身不发起任何 LLM 调用** —— 它是确定性的代码(扫描、爬取、真实浏览器 + HTTP 检查、watchdog)。任何具备 MCP 能力的 agent 都可以在你自己的订阅下驱动它;你不会被绑定在某一个模型或供应商上。注册方式已在上面的快速开始中说明。它注册了 10 个 MCP 工具,包括 `launchaudit_run_audit`,该工具可以在单次调用中运行整个流水线。
### 3. 技能与斜杠命令(审计与修复循环)
`claude-code/` 目录包含一个技能和命令,它教会 Claude Code 整个循环流程:审计、阅读发现的问题、修复失败的代码、重新运行以证明修复有效。请参阅 [claude-code/README.md](claude-code/README.md)。安装完成后:
```
/launch-audit http://localhost:3000 ~/projects/mysite
```
## 你会得到什么
当一次运行结束时,它会**自动在你的浏览器中打开一个仪表板** —— 你在演示中看到的那个指挥中心 UI,但它是一个独立的本地文件,并内置了你的结果。没有服务器,无需注册,你的数据绝不离开你的机器。所有内容都会被写入输出目录(默认为 `launchaudit-report/`):
- `dashboard.html` —— 自动打开的交互式仪表板:就绪度仪表盘、按类别划分的覆盖率、可过滤的测试结果列表,以及带有可直接粘贴修复方案的发现项。再次运行,它会跟踪你多次运行的评分(`history.json`)。传递 `--no-open` 可跳过启动浏览器。
- `launch-audit-.html` —— 一个独立的静态报告,你可以直接交给客户。
- `launch-audit-.json` —— 相同的数据,机器可读格式。
- `evidence/` —— 支持每个结果的工件(网络日志、屏幕截图)。
就绪度的计算方式为:通过的检查数 / 已执行的检查数,范围在 0-100 之间。无法运行的检查会被报告为需要输入或验证 —— **绝不静默地将其计为通过。**
## 测试内容
生成器族,当你传递 `--repo` 时会具备识别 repo 的能力:
- **前端** —— 应用外壳渲染、页面可达、在 390/768 px 下无水平溢出、加载时无控制台错误或 5xx 错误。
- **后端** —— 格式错误的输入返回干净的 4xx(而不是 500)、错误主体中无堆栈跟踪泄露、GET API 正常响应。
- **管理员 / RBAC** —— 匿名用户被阻止访问管理员路由和 API;使用捕获的凭据,普通用户被拒绝而管理员通过(阳性对照);阻止通过直接 URL 访问管理员详情页。
- **写入授权** —— 针对特权 endpoint 的匿名状态更改写入(POST/PUT/PATCH/DELETE)必须被拒绝(401/403);其他变异 endpoint 仅在它们静默接受匿名写入时才会被标记(needs_verification)。
- **Middleware 与安全性** —— 具备安全头且值安全(X-Frame-Options、X-Content-Type-Options、CSP、HSTS、Referrer-Policy、Permissions-Policy),没有 X-Powered-By 横幅,且 secret/VCS 文件(`/.env`、`/.git/config`、…)不可被公开下载。
- **SEO 与结构化数据** —— 真实的 ``、移动端 viewport、meta description、canonical、Open Graph、有效的 Schema.org JSON-LD、无意外的 `noindex`。
- **内容完整性** —— 无 lorem/占位符文案、页面上无未绑定的 `undefined`/`NaN`、已部署的站点上无硬编码的 `localhost` URL。
- **无障碍访问** —— axe-core(WCAG 2.0/2.1 A + AA),仅限严重/致命违规。
- **Core Web Vitals** —— 冷加载 LCP/CLS/FCP/TTFB 冒烟检查(仅限表现糟糕的范围,报告为 needs_verification —— 单次无头浏览器运行并不是实验室基准测试)。
- **ElevenLabs 语音代理**(当提供 agent ID + API key 时)—— 配置可达、真实的系统 prompt、工具未被清除、HTTPS webhook、已设置语音 + TTS。
每一次失败在进入报告之前都会被分类 —— `product_bug`、`test_bug`、`flaky`、`needs_verification` 或 `needs_input` —— 每一个都附带置信度级别和原因。时序波动(flaky)会被重试并恢复,而不会被报告为 bug。如果目标在受保护的路由上提供 **客户端渲染的 SPA 外壳**,路由检查将被降级为 `needs_verification`(HTTP 无法证明页面被暴露;API 才是真正的守门人),而不是产生狼来了的误报。对于存根/绕过的开发身份验证,同样适用此诚实规则。
测试覆盖范围源自记录的目录(`docs/research/test-catalog/`,涵盖 9 个领域的约 1,485 项测试)。请从 [`docs/research/test-catalog/ROLLUP.md`](docs/research/test-catalog/ROLLUP.md) 开始,了解今天已运行的功能与待构建的高杠杆检测器。
## 真相协议
一个总是“狼来了”的安全工具比没有还要糟糕。因此,一个 **watchdog 会根据最新证据独立重新验证每一次“通过”** —— 重新运行交互、重新获取响应、重新读取状态。任何它无法重现的内容都会被标记,绝不静默通过。你得到的分数就是真相,而不是充满希望的猜测。
## 对比分析
功能 QA 工具涵盖了前端渲染和基本流程。80/20 上线审计在此重叠,并增加了这些工具通常不会运行的授权和 middleware 检查:多角色 RBAC、管理面板访问控制、特权 API 上的服务器端守卫以及安全头的正确性。一项对 23 种功能 QA 工具的调查([`docs/research/competitor-coverage.md`](docs/research/competitor-coverage.md))发现**它们全都没有测试授权**。除了这一切入点之外,它还能在一次运行中完成上线所需的广度覆盖 —— 无障碍访问、SEO/结构化数据、Core Web Vitals、假数据检测、语音代理配置 —— 每一项发现都为了诚实而进行了分类,而不是简单地作为 bug 抛出。
在包含的夹具上进行的测量:`fixtures/buggy-shop` 包含 5 个植入的 bug(RBAC 直接 URL 泄露、未受保护的管理员 API、带有堆栈跟踪泄露的 500 错误、移动端溢出以及缺失安全头)。审计捕捉到了全部 5 个(已端到端验证)。`fixtures/shop-fixed` 是修正后的版本,用于确认修复方案清除了这些发现。
## 可选:托管仪表板
该仓库还包含一个可部署到 Vercel 的 Web 指挥中心(`public/`、`api/`),并通过 `POSTGRES_URL` (Neon) 提供可选的 Postgres 持久化。在运行审计时设置 `LAUNCHAUDIT_API_URL`,结果也会同步到那里。完全是可选的 —— 核心产品不需要任何托管。
```
npm run dev # local dashboard at http://127.0.0.1:3010
```
## 开发
```
npm test # Node's built-in test runner, no extra deps
```
涵盖了扫描器的 HTTP 方法提取、失败分类器(诚实规则)、写入授权层级、SPA 外壳检测、平台检测卡片生成以及内容完整性 / 无障碍 / SEO / web-vitals 检测器。CI 在每次推送和 PR 时都会运行测试套件以及 `npm audit`。有关其他脚本以及如何运行夹具测试,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md);有关完整的架构指南,请参阅 `CLAUDE.md`。
## 背后的开发者
由 **Rob at [Fusion Data Company](https://fusiondataco.com)** 构建和维护 —— 我们为客户上线 AI 辅助的 Web 和移动应用,这是我们开发的任何产品在正式上线前都会运行的资深开发者审查。免费且开源,因为每一个将 vibecoder 产品部署到生产环境的人都需要它。有疑问、想法,或者想在默认套件中添加某种检查?[落地页](https://launch-audit-platform.vercel.app/landing)上的联系表单会直接发送给我。
## 许可证
MIT —— 永远对所有人免费。请参阅 [LICENSE](LICENSE)。
标签:AI编程助手, Chromium, MITM代理, SEO优化, Syscall, Web开发, 对称加密, 无障碍, 特征检测, 自动化审计, 自定义脚本