@ decocms/ 均等
连接到关闭迁移、公关和没有关键路径的事故的代理基础设施.
parity 是一个在两个URL之间进行深度比较测试的CLI—— prod (真相来源)和 cand (缩放版本、PR预览或中放)——并制作:
- 一个独立的 HTML 报告 供人类在30秒内扫描
- 一个正常化 JSON投影 (单位:千美元)
parity report --section <name> --json代理可以消费而不解析 HTML - A 类 JSONL 流线 (单位:千美元)
--json)每个检查结果在完成后流出 - A 类 公关评论 (单位:千美元)
parity pr --prod ... --preview ...准备投入CI/CD管道
它检查UI,功能,SIO,性能,控制台,网络,以及缓存回归. 最初是为Fresh → TanStack Start 迁移德克商店前行而建造的,但支票是通用的,足以用于任何并肩迁移.
状态 : 阿尔法。 API和报告布局仍然可能改变.
为何存在对等性
迁移,公关审查,事件分解都共享相同的工作流程:取出两个版本的网站,找到不同之处,加以修复. 手动操作很慢而且容易出错;旋转一个LLM代理来完成它需要一个代理可以驱动的工具. parity 是那个工具.
三个使用案例驱动设计:
- 协助移徙 (Fresh → TanStack, Shopify → Hydrogen等)——一种物剂运行
parity run在迁移的分支 每一个承诺, 选择顶级问题, 修正它,运行再次。 HTML报告+可视-diff快取被设计成可粘贴到克洛德/ChatGPT. - CI/CD PR审查 —— 说
parity pr --prod ... --preview ...a Markdown 注释,附有判决、最高问题和与报告全文的链接。 丢入工作流程中gh pr comment -F或者说actions/github-script。 。 。 . - 连续烟雾 —— 说
parity run --preset smoke完成于~30s,运行无 LLM. 每次部署后,都够便宜了.
快速启动
# Install — auto-installs Playwright Chromium on postinstall (~140 MB, one-time)
npm install -g @decocms/parity
# or run without install
npx @decocms/parity run --prod ... --cand ...
# In CI / behind a corp proxy? Skip the auto-install and do it later:
# PARITY_SKIP_PLAYWRIGHT_INSTALL=1 npm install -g @decocms/parity
# npx playwright install chromium
# First-time smoke run (~30s, no LLM needed)
parity run --prod https://oldsite.com --cand https://newsite.example.dev --preset smoke --open
# Full audit with visual diff
ANTHROPIC_API_KEY=sk-... parity run \
--prod https://oldsite.com \
--cand https://newsite.example.dev \
--preset full --open
# CI/CD PR comment
parity pr --prod https://oldsite.com --preview https://pr-123-preview.example.dev --github
代理合同
代理驾驶员 parity 在循环中,稳定的表面是:
| 需求 | 命令 | 产出 |
|---|---|---|
| 进行完整的比较 | parity run --prod X --cand Y --json runs.jsonl | JSON-Lines,每检查一行 |
| 从保存的运行中提取一个标签 | parity report <runId> --section <name> | HTML 切片 |
| 提取一个标签为结构化的 JSON | parity report <runId> --section <name> --json | JSON投影 |
| 驱动CI/CD管道 | parity pr --prod X --preview Y --github | 标记下注释 + $GITHUB_STEP_SUMMARY |
| 钻入一个问题 | parity explain <runId> <issueId> | LLM 深潜 (需要密钥) |
| 构建一个可粘贴的提示 | parity prompt <runId> | 为克洛德/查特GPT准备了Markdown |
| 生成可视化补丁捆绑 | parity section --all --prod X --cand Y --selector S | 标记下 + 截图 + 计算式 diff |
见 docs/cli.md 每个命令, docs/checks.md 每张支票.
见 docs/reports.md 用于 HTML 输出和两个报告模板包.
LLM 提供者
三家供应商,按此顺序自动检测—— 无需 如果你拥有 claude 在本地登录的CLI :
ANTHROPIC_API_KEY——直接Anthropic API(快速,开入您的API账户)OPENROUTER_API_KEY——开放路透社- 当地
claude国 际 - 用途@anthropic-ai/claude-agent-sdk检查一下你的克劳德计划 不需要护卫
强制使用 --llm <anthropic|openrouter|claude-code|none|auto>覆盖每个地貌 --llm-model visual-diff=claude-opus-5,explain=claude-opus-5,或者将每层都平整到一层 --llm-tier-default <haiku|sonnet|opus>。默认分级: 声纳 用于选择发现/恢复/匹配/视觉(结构-理性呼叫), 海库 简短的复制清单分类(search-terms, (中文(简体) ), 奥普斯 Opus 页:1 explain成本意识? 尝试 --llm-tier-default haiku 并有选择地将特性重回Sonnet, 如果你击中选择器错过.
没有任何提供者,CLI仍然运行并输出原始检查结果.
产出
./parity-output/runs/<runId>/
├── report.json # structured output for agents / CI / tooling
├── report.html # only with --html/--open, or rendered later by `parity report <runId>`;
│ # links to screenshots/ by relative path — keep the two together
├── screenshots/ # per-page, per-viewport, per-side; includes pixelmatch heatmaps
├── har/ # Playwright HARs, one per viewport/side — only with PARITY_HAR=1
└── traces/ # Playwright traces (drag into trace.playwright.dev) — only with PARITY_TRACE=1
预设
--preset smoke——只有主页,只有移动,没有LLM,没有额外的爬行. ~30岁. 用"管子开通了吗?".--preset full——购买行程,移动+桌面,5个可视diff页面,10个要害页面. 用于放行.--preset ci——以移动,更小的爬行方式购买行程(3个视觉+5个生命体. 训练CI运行时间.
单个旗帜总是覆盖预设. 见 parity run --help 完全默认行为崩溃.
关于Web 生命号的说明
以默认的等同措施TTFB/FCP/LCP与浏览器的HTTP缓存启用,在温暖的连接上——一种"重复访问"的情景. 相形之下,灯塔和CrUX的现场数据模拟/测量了第一次的寒冷访问(cache已禁用). 也不是错的,但他们回答了不同的问题,所以不要将等值的默认活性指数1:1比作"灯塔"或"CRUX". 过 --bypass-cache 以近似于冷访问测量(除了绕过 CDN/ edge 缓存之外,还使浏览器通过 CDP 缓存失效) .
CI 使用( GitHub 动作)
- name: Parity check
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
npx @decocms/parity pr \
--prod ${{ vars.PROD_URL }} \
--preview ${{ env.PR_PREVIEW_URL }} \
--github
这个 --github 旗子将马克下写到 $GITHUB_STEP_SUMMARY 所以它出现在工作流程摘要之下。 并发表公关评论:
npx @decocms/parity pr ... --out parity-comment.md
- uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const body = fs.readFileSync('parity-comment.md', 'utf8');
github.rest.issues.createComment({
...context.repo,
issue_number: context.issue.number,
body,
});
配置( 可选)
.parityrc.json 在工程根上——选择器覆盖并运行默认值。 见 docs/config.md 整个计划.
{
"cep": "01310-100",
"selectors": {
"categoryLink": "header a[href*='/c/']",
"productCard": "[data-product-card] a",
"buyButton": "button:has-text('Comprar')"
},
"search": { "terms": ["camisa", "promocao"] }
}
.parityignore ——噪声抑制. 见 docs/config.md。 。 。 .
全权证书从未从
.parityrc.json。 。 。 . 设定PARITY_LOGIN_EMAIL财务报告和审定财务报表PARITY_LOGIN_PASSWORD作为环境变量.
发展
git clone [email protected]:decocms/parity.git
cd parity
bun install
bunx playwright install chromium
bun run dev run --prod ... --cand ...
测试 : bun run test (vitest) (英语). 类型检查 : bun run check。构建: bun run build。 。 。 .
许可证
麻省理工学院