用途:把符合 schema/finding.schema.json 的 findings 转成两个独立分数——Search SEO 与 AI Visibility(GEO-AEO)。计算模型完整定义在 references/scoring-model.md,需严格遵循。
主要能力:
- 按每个分数对应的模块类别对 findings 分组;findings 只贡献给 expected_impact.axis 指定的分数(search、ai 或两者)。
- 类别值 = 100 × Σ(status_factor × severity) / Σ(severity),其中 status_factor:pass 为 1.0,warn 为 0.5,fail 为 0.0;needs_api 与 not_applicable 不计入。
- 活跃权重:剔除无 findings 的条件类别(电商/本地/国际化),再归一化剩余权重。
- 分数 = Σ(类别值 × 权重) / Σ(活跃权重),分别计算 Search SEO 与 AI Visibility。
- 严重度门控:任一 severity: 5 且 status: fail 的 finding,会把受影响分数封顶为 40 并设 capped: true。
- 分档:A≥90、B≥80、C≥70、D≥60、F<60,并给出 Search×AI 象限的一句话解读。
- 覆盖率下限:报告覆盖率(该轴常开权重中带计分 finding 的百分比);低于 50% 时该轴 provisional: true、state: "partial",须同时引用档位与覆盖率。
- M21(AI 发现与代理端点:llms.txt、agents.md、UCP、agentic sitemap)权重为 0——只报告,不影响 AI 分数。
使用方式:优先使用 node "${CLAUDE_PLUGIN_ROOT}/scripts/score.mjs" --run <run-dir>(读取 <run-dir>/findings.json),或 --findings <path> 指定裸 findings 文件;当文件不带 run 上下文时,追加 --vertical a,b、--multilingual、--environment production|preview|staging|local 以保证可复现和可 CI 校验。--run 接受路径,不能写 latest;score 命令先从 <root>/<host>/latest.json 解析 latest[:host] 再传入目录。若 Node 不可用,按同一公式手工计算并注明降级。两种方式都必须与 references/scoring-model.md 一致。
输出为 JSON,包含 search_seo 与 ai_visibility 两对象,各含 value、band、capped、interpretation 与 categories 数组(每项含 name、weight、value、active)。
限制:具体支持的模块清单、schema 字段细节及权重表需参见仓库中的 references/scoring-model.md 与 schema 文件,本资料未完整给出。