@pseolint/core 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +84 -15
  2. package/dist/ai/prompt.d.ts +1 -1
  3. package/dist/ai/prompt.d.ts.map +1 -1
  4. package/dist/ai/prompt.js +13 -1
  5. package/dist/ai/prompt.js.map +1 -1
  6. package/dist/auditor.d.ts.map +1 -1
  7. package/dist/auditor.js +197 -63
  8. package/dist/auditor.js.map +1 -1
  9. package/dist/cache.d.ts.map +1 -1
  10. package/dist/cache.js +38 -2
  11. package/dist/cache.js.map +1 -1
  12. package/dist/formatters/console.d.ts +9 -0
  13. package/dist/formatters/console.d.ts.map +1 -1
  14. package/dist/formatters/console.js +53 -0
  15. package/dist/formatters/console.js.map +1 -1
  16. package/dist/formatters/html.d.ts.map +1 -1
  17. package/dist/formatters/html.js +363 -135
  18. package/dist/formatters/html.js.map +1 -1
  19. package/dist/index.d.ts +10 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +9 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/rule-references.d.ts.map +1 -1
  24. package/dist/rule-references.js +8 -0
  25. package/dist/rule-references.js.map +1 -1
  26. package/dist/rules/aeo/answer-first.d.ts +18 -0
  27. package/dist/rules/aeo/answer-first.d.ts.map +1 -0
  28. package/dist/rules/aeo/answer-first.js +191 -0
  29. package/dist/rules/aeo/answer-first.js.map +1 -0
  30. package/dist/rules/aeo/citable-facts.d.ts +9 -0
  31. package/dist/rules/aeo/citable-facts.d.ts.map +1 -0
  32. package/dist/rules/aeo/citable-facts.js +90 -0
  33. package/dist/rules/aeo/citable-facts.js.map +1 -0
  34. package/dist/rules/aeo/content-modularity.d.ts +11 -0
  35. package/dist/rules/aeo/content-modularity.d.ts.map +1 -0
  36. package/dist/rules/aeo/content-modularity.js +107 -0
  37. package/dist/rules/aeo/content-modularity.js.map +1 -0
  38. package/dist/rules/aeo/crawler-access.d.ts +25 -0
  39. package/dist/rules/aeo/crawler-access.d.ts.map +1 -0
  40. package/dist/rules/aeo/crawler-access.js +116 -0
  41. package/dist/rules/aeo/crawler-access.js.map +1 -0
  42. package/dist/rules/aeo/faq-coverage.d.ts +9 -0
  43. package/dist/rules/aeo/faq-coverage.d.ts.map +1 -0
  44. package/dist/rules/aeo/faq-coverage.js +71 -0
  45. package/dist/rules/aeo/faq-coverage.js.map +1 -0
  46. package/dist/rules/aeo/freshness-signals.d.ts +9 -0
  47. package/dist/rules/aeo/freshness-signals.d.ts.map +1 -0
  48. package/dist/rules/aeo/freshness-signals.js +109 -0
  49. package/dist/rules/aeo/freshness-signals.js.map +1 -0
  50. package/dist/rules/aeo/llms-txt.d.ts +24 -0
  51. package/dist/rules/aeo/llms-txt.d.ts.map +1 -0
  52. package/dist/rules/aeo/llms-txt.js +93 -0
  53. package/dist/rules/aeo/llms-txt.js.map +1 -0
  54. package/dist/rules/aeo/non-replicable-value.d.ts +9 -0
  55. package/dist/rules/aeo/non-replicable-value.d.ts.map +1 -0
  56. package/dist/rules/aeo/non-replicable-value.js +95 -0
  57. package/dist/rules/aeo/non-replicable-value.js.map +1 -0
  58. package/dist/rules/scope.d.ts +12 -0
  59. package/dist/rules/scope.d.ts.map +1 -0
  60. package/dist/rules/scope.js +66 -0
  61. package/dist/rules/scope.js.map +1 -0
  62. package/dist/rules/tech/robots-sitemap-presence.d.ts +16 -0
  63. package/dist/rules/tech/robots-sitemap-presence.d.ts.map +1 -1
  64. package/dist/rules/tech/robots-sitemap-presence.js +26 -2
  65. package/dist/rules/tech/robots-sitemap-presence.js.map +1 -1
  66. package/dist/types.d.ts +29 -0
  67. package/dist/types.d.ts.map +1 -1
  68. package/package.json +91 -66
@@ -1,24 +1,53 @@
1
1
  const SEVERITY_ORDER = ["critical", "error", "warning", "info"];
2
- function severityColor(severity) {
2
+ const SEVERITY_LABEL = {
3
+ critical: "Critical",
4
+ error: "Error",
5
+ warning: "Warning",
6
+ info: "Info",
7
+ };
8
+ function severityTone(severity) {
3
9
  switch (severity) {
4
10
  case "critical":
5
- return "#dc2626";
6
11
  case "error":
7
- return "#ea580c";
12
+ return "destructive";
8
13
  case "warning":
9
- return "#ca8a04";
14
+ return "warning";
10
15
  case "info":
11
- return "#2563eb";
16
+ return "muted";
12
17
  }
13
18
  }
14
- function scoreColor(score) {
19
+ function scoreTone(score) {
20
+ if (score <= 40)
21
+ return "success";
22
+ if (score <= 69)
23
+ return "warning";
24
+ return "destructive";
25
+ }
26
+ function scoreVerdict(score) {
15
27
  if (score <= 20)
16
- return "#16a34a";
28
+ return "Clean run";
17
29
  if (score <= 40)
18
- return "#ca8a04";
19
- if (score <= 60)
20
- return "#ea580c";
21
- return "#dc2626";
30
+ return "Low risk";
31
+ if (score <= 69)
32
+ return "Watch list";
33
+ if (score <= 84)
34
+ return "Elevated risk";
35
+ return "Doorway garden";
36
+ }
37
+ function categoryTone(pct) {
38
+ if (pct <= 40)
39
+ return "success";
40
+ if (pct <= 69)
41
+ return "warning";
42
+ return "destructive";
43
+ }
44
+ function effortLabel(effort) {
45
+ switch (effort) {
46
+ case "quick": return "quick fix";
47
+ case "moderate": return "moderate";
48
+ case "structural": return "structural";
49
+ default: return effort;
50
+ }
22
51
  }
23
52
  function escapeHtml(text) {
24
53
  return text
@@ -27,14 +56,6 @@ function escapeHtml(text) {
27
56
  .replace(/>/g, "&gt;")
28
57
  .replace(/"/g, "&quot;");
29
58
  }
30
- function effortColor(effort) {
31
- switch (effort) {
32
- case "quick": return "#16a34a";
33
- case "moderate": return "#ca8a04";
34
- case "structural": return "#dc2626";
35
- default: return "#64748b";
36
- }
37
- }
38
59
  function shortenUrl(url) {
39
60
  try {
40
61
  return new URL(url).pathname;
@@ -43,150 +64,357 @@ function shortenUrl(url) {
43
64
  return url;
44
65
  }
45
66
  }
67
+ function categoryLabel(name) {
68
+ const map = {
69
+ spam: "Spam signals",
70
+ content: "Content quality",
71
+ links: "Link graph",
72
+ tech: "Technical SEO",
73
+ schema: "Structured data",
74
+ cannibal: "Cannibalisation",
75
+ };
76
+ return map[name] ?? name.charAt(0).toUpperCase() + name.slice(1);
77
+ }
46
78
  function renderTriageHtml(triage) {
47
79
  const sorted = triage.rootCauses.slice().sort((a, b) => a.fixOrder - b.fixOrder);
48
- const cost = triage.estimatedCostUsd !== undefined ? `, est $${triage.estimatedCostUsd.toFixed(2)}` : "";
49
- const cacheLabel = triage.cacheHit ? "cached" : "cache miss";
50
- const causes = sorted.map((c) => `
51
- <li>
52
- <h3>${c.fixOrder}. ${escapeHtml(c.label)}</h3>
53
- <p class="meta">${escapeHtml(c.severity)} &middot; ${c.findingsCount} findings &middot; ${c.affectedRuleIds.map(escapeHtml).join(", ")}</p>
54
- <p>${escapeHtml(c.rationale)}</p>
55
- </li>`).join("\n");
56
- return `
57
- <section class="ai-triage">
58
- <header>
59
- <h2>AI Triage</h2>
60
- <p class="meta">${escapeHtml(triage.modelUsed)} (${cacheLabel}) &mdash; ${triage.tokenUsage.input.toLocaleString()} in / ${triage.tokenUsage.output.toLocaleString()} out${cost}</p>
61
- </header>
62
- ${triage.narrative ? `<p class="narrative">${escapeHtml(triage.narrative)}</p>` : ""}
63
- <ol>${causes}</ol>
80
+ const cost = triage.estimatedCostUsd !== undefined ? ` · est $${triage.estimatedCostUsd.toFixed(2)}` : "";
81
+ const cacheLabel = triage.cacheHit ? "cached" : "fresh";
82
+ const tokens = `${triage.tokenUsage.input.toLocaleString()} in / ${triage.tokenUsage.output.toLocaleString()} out`;
83
+ const causes = sorted.map((c) => `
84
+ <li class="cause">
85
+ <div class="cause-head">
86
+ <span class="cause-order">${c.fixOrder}</span>
87
+ <h3>${escapeHtml(c.label)}</h3>
88
+ <span class="sev sev-${severityTone(c.severity)}">${escapeHtml(c.severity)}</span>
89
+ </div>
90
+ <p class="cause-meta">${c.findingsCount} findings · ${c.affectedRuleIds.map(escapeHtml).join(", ")}</p>
91
+ <p class="cause-body">${escapeHtml(c.rationale)}</p>
92
+ </li>`).join("");
93
+ return `
94
+ <section class="ai-triage">
95
+ <header class="section-head">
96
+ <span class="eyebrow">AI Triage</span>
97
+ <span class="meta-mono">${escapeHtml(triage.modelUsed)} · ${cacheLabel} · ${tokens}${cost}</span>
98
+ </header>
99
+ ${triage.narrative ? `<p class="narrative">${escapeHtml(triage.narrative)}</p>` : ""}
100
+ <ol class="causes">${causes}</ol>
64
101
  </section>`;
65
102
  }
66
103
  export function formatHtml(summary) {
67
104
  const grouped = new Map();
68
- for (const sev of SEVERITY_ORDER) {
105
+ for (const sev of SEVERITY_ORDER)
69
106
  grouped.set(sev, []);
70
- }
71
- for (const f of summary.findings) {
107
+ for (const f of summary.findings)
72
108
  grouped.get(f.severity).push(f);
73
- }
109
+ const counts = {
110
+ critical: grouped.get("critical").length,
111
+ error: grouped.get("error").length,
112
+ warning: grouped.get("warning").length,
113
+ info: grouped.get("info").length,
114
+ };
115
+ const totalErrors = counts.critical + counts.error;
74
116
  const categoryRows = Object.entries(summary.categoryScores)
75
117
  .map(([name, value]) => {
76
- const label = name.charAt(0).toUpperCase() + name.slice(1);
77
118
  const pct = value;
78
- return `<tr>
79
- <td>${escapeHtml(label)}</td>
80
- <td>
81
- <div class="bar-bg"><div class="bar-fill" style="width:${pct}%;background:${scoreColor(pct)}"></div></div>
82
- </td>
83
- <td>${pct}</td>
119
+ const tone = categoryTone(pct);
120
+ return `<tr>
121
+ <td class="cat-name">${escapeHtml(categoryLabel(name))}</td>
122
+ <td class="cat-bar"><div class="bar-bg"><div class="bar-fill bar-${tone}" style="width:${pct}%"></div></div></td>
123
+ <td class="cat-val mono tabular">${pct}</td>
84
124
  </tr>`;
85
125
  })
86
- .join("\n");
126
+ .join("");
87
127
  const findingsSections = SEVERITY_ORDER.map((sev) => {
88
128
  const items = grouped.get(sev);
89
129
  if (items.length === 0)
90
130
  return "";
91
131
  const itemsHtml = items
92
132
  .map((item) => {
93
- let li = `<li><strong>${escapeHtml(item.ruleId)}</strong>`;
94
- if (item.effort) {
95
- li += ` <span class="effort-pill" style="background:${effortColor(item.effort)}">${escapeHtml(item.effort)}</span>`;
96
- }
97
- li += `: ${escapeHtml(item.message)}`;
133
+ const effortPill = item.effort
134
+ ? ` <span class="effort-pill effort-${escapeHtml(item.effort)}">${escapeHtml(effortLabel(item.effort))}</span>`
135
+ : "";
136
+ const pageUrl = item.pageUrl
137
+ ? ` <span class="page-url mono">${escapeHtml(shortenUrl(item.pageUrl))}</span>`
138
+ : "";
139
+ let cluster = "";
98
140
  if (item.context?.type === "cluster") {
99
141
  const ctx = item.context;
100
142
  const [minSim, maxSim] = ctx.similarityRange;
101
143
  const worstPairsHtml = ctx.worstPairs
102
- .map(p => `<li>${escapeHtml(shortenUrl(p.left))} &#8596; ${escapeHtml(shortenUrl(p.right))} (${(p.similarity * 100).toFixed(1)}%)</li>`)
103
- .join("\n");
144
+ .map(p => `<li><span class="mono">${escapeHtml(shortenUrl(p.left))}</span> <span class="arrow">↔</span> <span class="mono">${escapeHtml(shortenUrl(p.right))}</span> <span class="sim">${(p.similarity * 100).toFixed(1)}%</span></li>`)
145
+ .join("");
104
146
  const membersHtml = ctx.members
105
- .map(m => `<li>${escapeHtml(shortenUrl(m))}</li>`)
106
- .join("\n");
107
- li += `
108
- <details>
109
- <summary>${ctx.clusterSize} pages in cluster (${(minSim * 100).toFixed(0)}&ndash;${(maxSim * 100).toFixed(0)}% similar)</summary>
110
- <div class="cluster-details">
111
- <strong>Worst pairs:</strong>
112
- <ul>${worstPairsHtml}</ul>
113
- <strong>All members:</strong>
114
- <ul class="member-list">${membersHtml}</ul>
115
- </div>
147
+ .map(m => `<li class="mono">${escapeHtml(shortenUrl(m))}</li>`)
148
+ .join("");
149
+ cluster = `
150
+ <details>
151
+ <summary>${ctx.clusterSize} pages in cluster · ${(minSim * 100).toFixed(0)}–${(maxSim * 100).toFixed(0)}% similar</summary>
152
+ <div class="cluster-body">
153
+ <p class="cluster-label">Worst pairs</p>
154
+ <ul class="pair-list">${worstPairsHtml}</ul>
155
+ <p class="cluster-label">All members</p>
156
+ <ul class="member-list">${membersHtml}</ul>
157
+ </div>
116
158
  </details>`;
117
159
  }
118
- if (item.fix) {
119
- li += `<div class="fix">Fix: ${escapeHtml(item.fix)}</div>`;
120
- }
121
- if (item.ref) {
122
- li += ` <a href="${escapeHtml(item.ref)}" class="ref" target="_blank">Ref</a>`;
123
- }
124
- li += `</li>`;
125
- return li;
160
+ const fix = item.fix ? `<div class="fix"><span class="fix-label">Fix</span>${escapeHtml(item.fix)}</div>` : "";
161
+ const ref = item.ref ? `<a href="${escapeHtml(item.ref)}" class="ref" target="_blank" rel="noopener">ref ↗</a>` : "";
162
+ return `<li class="finding finding-${severityTone(sev)}">
163
+ <div class="finding-head">
164
+ <code class="rule-id">${escapeHtml(item.ruleId)}</code>${effortPill}${pageUrl}
165
+ </div>
166
+ <p class="finding-msg">${escapeHtml(item.message)}</p>
167
+ ${cluster}
168
+ ${fix}
169
+ ${ref}
170
+ </li>`;
126
171
  })
127
- .join("\n");
128
- return `<h3 style="color:${severityColor(sev)}">${sev.charAt(0).toUpperCase() + sev.slice(1)} (${items.length})</h3>
129
- <ul>${itemsHtml}</ul>`;
130
- }).join("\n");
131
- return `<!DOCTYPE html>
132
- <html lang="en">
133
- <head>
134
- <meta charset="utf-8">
135
- <meta name="viewport" content="width=device-width,initial-scale=1">
136
- <title>pSEOlint Audit Report</title>
137
- <style>
138
- *{margin:0;padding:0;box-sizing:border-box}
139
- body{font-family:system-ui,-apple-system,sans-serif;max-width:800px;margin:0 auto;padding:2rem;color:#1e293b;background:#f8fafc}
140
- h1{margin-bottom:.5rem}
141
- h2{margin-top:1.5rem;margin-bottom:.5rem;border-bottom:1px solid #e2e8f0;padding-bottom:.25rem}
142
- h3{margin-top:1rem;margin-bottom:.25rem}
143
- table{width:100%;border-collapse:collapse;margin:.5rem 0}
144
- th,td{text-align:left;padding:.35rem .5rem;border-bottom:1px solid #e2e8f0}
145
- th{font-weight:600}
146
- td:last-child{text-align:right;width:3rem}
147
- .score{font-size:2rem;font-weight:700}
148
- .meta{color:#64748b;margin-bottom:1rem}
149
- .bar-bg{background:#e2e8f0;border-radius:4px;height:14px;width:100%}
150
- .bar-fill{height:100%;border-radius:4px;transition:width .3s}
151
- ul{list-style:disc;padding-left:1.5rem;margin-bottom:.5rem}
152
- li{margin:.2rem 0}
153
- .fix{color:#64748b;font-size:.9em;margin-top:.2rem}
154
- .ref{color:#2563eb;font-size:.85em}
155
- .effort-pill{display:inline-block;padding:.1rem .4rem;border-radius:9999px;color:white;font-size:.75em;font-weight:600;vertical-align:middle}
156
- .template-banner{background:#fef3c7;border:1px solid #f59e0b;border-radius:6px;padding:.5rem 1rem;margin:.5rem 0;color:#92400e;font-size:.9em}
157
- details{margin:.25rem 0}
158
- summary{cursor:pointer;color:#2563eb;font-size:.9em}
159
- .cluster-details{padding:.5rem;background:#f1f5f9;border-radius:4px;margin:.25rem 0;font-size:.85em}
160
- .cluster-details ul{margin:.25rem 0}
161
- .member-list{max-height:200px;overflow-y:auto}
162
- </style>
163
- </head>
164
- <body>
165
- <h1>pSEOlint Audit Report</h1>
166
- <p class="meta">Pages analysed: ${summary.pageCount}</p>
167
- <p class="score" style="color:${scoreColor(summary.score)}">SpamBrain Risk Score: ${summary.score}/100</p>
168
- ${summary.templateDetected ? `<p class="template-banner">Template-generated content detected. Fix suggestions are tailored for template authors.</p>` : ""}
169
- <h2>Category Scores</h2>
170
- <table>
171
- <thead><tr><th>Category</th><th>Bar</th><th>Score</th></tr></thead>
172
- <tbody>${categoryRows}</tbody>
173
- </table>
174
-
175
- ${summary.groupScores && summary.groupPageCounts ? `
176
- <h2>Group Scores</h2>
177
- <table>
178
- <thead><tr><th>Group</th><th>Score</th><th>Pages</th></tr></thead>
179
- <tbody>${Object.entries(summary.groupScores).map(([name, value]) => {
172
+ .join("");
173
+ return `
174
+ <div class="sev-group">
175
+ <h3 class="sev-heading sev-${severityTone(sev)}">
176
+ <span class="sev-dot"></span>${SEVERITY_LABEL[sev]}
177
+ <span class="sev-count">${items.length}</span>
178
+ </h3>
179
+ <ul class="finding-list">${itemsHtml}</ul>
180
+ </div>`;
181
+ }).join("");
182
+ const tone = scoreTone(summary.score);
183
+ const verdict = scoreVerdict(summary.score);
184
+ const groupScoresHtml = summary.groupScores && summary.groupPageCounts ? `
185
+ <section class="card">
186
+ <header class="section-head">
187
+ <span class="eyebrow">Group scores</span>
188
+ </header>
189
+ <table class="data-table">
190
+ <thead><tr><th>Group</th><th>Score</th><th>Pages</th></tr></thead>
191
+ <tbody>${Object.entries(summary.groupScores).map(([name, value]) => {
180
192
  const count = summary.groupPageCounts[name] ?? 0;
181
- return `<tr><td>${escapeHtml(name)}</td><td style="text-align:right">${value}</td><td style="text-align:right">${count}</td></tr>`;
182
- }).join("\n")}</tbody>
183
- </table>` : ""}
184
-
185
- ${summary.triage ? renderTriageHtml(summary.triage) : ""}
186
-
187
- <h2>Findings</h2>
188
- ${findingsSections}
189
- </body>
193
+ const gTone = categoryTone(value);
194
+ return `<tr>
195
+ <td>${escapeHtml(name)}</td>
196
+ <td class="mono tabular tone-${gTone}">${value}</td>
197
+ <td class="mono tabular muted">${count}</td>
198
+ </tr>`;
199
+ }).join("")}</tbody>
200
+ </table>
201
+ </section>` : "";
202
+ return `<!DOCTYPE html>
203
+ <html lang="en">
204
+ <head>
205
+ <meta charset="utf-8">
206
+ <meta name="viewport" content="width=device-width,initial-scale=1">
207
+ <title>pseolint · audit report</title>
208
+ <style>
209
+ :root{
210
+ --bg:#16181c; --fg:#eef2f6; --muted:#9aa4ae; --muted-2:#6a7380;
211
+ --card:#1a1d22; --card-2:#1f2329; --border:#262a30; --border-strong:#3a3f47;
212
+ --success:#39d19f; --warning:#fbb838; --destructive:#e94b4b; --primary:#39d19f;
213
+ --r:18px; --r-lg:28px;
214
+ }
215
+ *{margin:0;padding:0;box-sizing:border-box}
216
+ html{color-scheme:dark}
217
+ body{
218
+ font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
219
+ background:var(--bg); color:var(--fg);
220
+ font-feature-settings:"rlig" 1,"calt" 1;
221
+ -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
222
+ line-height:1.5;
223
+ }
224
+ main{max-width:960px;margin:0 auto;padding:56px 24px 80px}
225
+ .mono{font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace}
226
+ .tabular{font-variant-numeric:tabular-nums}
227
+ .display{font-family:"Instrument Serif","Times New Roman",Georgia,serif;font-style:italic;font-weight:400;letter-spacing:-0.01em}
228
+ .muted{color:var(--muted)}
229
+ .meta-mono{font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;color:var(--muted);font-size:12px}
230
+ .eyebrow{font-size:11px;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted);font-weight:600}
231
+
232
+ .status-row{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:11px;letter-spacing:0.14em;text-transform:uppercase}
233
+ .status-dot{display:inline-block;width:6px;height:6px;border-radius:999px;background:var(--success)}
234
+ .status-dot.tone-warning{background:var(--warning)} .status-dot.tone-destructive{background:var(--destructive)}
235
+
236
+ h1.title{margin-top:12px;font-size:clamp(32px,5vw,56px);line-height:1;letter-spacing:-0.01em}
237
+ .title-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 12px;margin-top:12px}
238
+ .src-link{color:var(--muted);font-size:12px;font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;text-decoration:none}
239
+ .src-link:hover{color:var(--fg)}
240
+ .lead{margin-top:12px;color:var(--muted);font-size:14px;max-width:640px}
241
+
242
+ .card{margin-top:28px;padding:28px;background:color-mix(in oklab,var(--card) 85%,transparent);
243
+ border:1px solid var(--border);border-radius:var(--r-lg)}
244
+ .hero{display:grid;grid-template-columns:auto 1fr;gap:36px;align-items:center}
245
+ @media (max-width:640px){.hero{grid-template-columns:1fr;gap:24px}}
246
+ .score-block{display:flex;flex-direction:column;align-items:flex-start;min-width:180px}
247
+ .score{font-family:"Instrument Serif","Times New Roman",Georgia,serif;font-weight:400;
248
+ font-size:128px;line-height:0.9;font-variant-numeric:tabular-nums;letter-spacing:-0.02em}
249
+ .tone-success{color:var(--success)} .tone-warning{color:var(--warning)} .tone-destructive{color:var(--destructive)}
250
+ .score-label{margin-top:6px;font-size:11px;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted)}
251
+ .verdict{margin-top:14px;display:inline-flex;align-items:center;gap:8px;
252
+ padding:5px 10px;border:1px solid var(--border-strong);border-radius:999px;
253
+ background:var(--card-2);font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
254
+ font-size:11px;color:var(--muted)}
255
+ .verdict-dot{width:5px;height:5px;border-radius:999px;background:var(--success)}
256
+
257
+ .stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px 28px;margin-top:8px}
258
+ @media (max-width:640px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}}
259
+ .stat-label{font-size:11px;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted)}
260
+ .stat-val{font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
261
+ font-size:20px;font-variant-numeric:tabular-nums;margin-top:2px}
262
+
263
+ .template-banner{margin-top:20px;padding:14px 18px;border:1px solid color-mix(in oklab,var(--warning) 40%,transparent);
264
+ border-radius:var(--r);background:color-mix(in oklab,var(--warning) 8%,transparent);color:var(--fg);font-size:13px}
265
+ .template-banner strong{color:var(--warning)}
266
+
267
+ .section-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:18px}
268
+ .data-table{width:100%;border-collapse:collapse}
269
+ .data-table th,.data-table td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--border);font-size:14px}
270
+ .data-table th{font-size:11px;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted);font-weight:600}
271
+ .data-table tr:last-child td{border-bottom:0}
272
+ .cat-name{width:40%}
273
+ .cat-bar{width:auto}
274
+ .cat-val{width:56px;text-align:right}
275
+ .bar-bg{background:var(--border);border-radius:999px;height:8px;width:100%;overflow:hidden}
276
+ .bar-fill{height:100%;border-radius:999px;transition:width .4s ease}
277
+ .bar-success{background:var(--success)} .bar-warning{background:var(--warning)} .bar-destructive{background:var(--destructive)}
278
+
279
+ .findings-head{display:flex;align-items:baseline;justify-content:space-between;margin:56px 0 18px}
280
+ .findings-head h2{font-size:11px;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted);font-weight:600}
281
+ .findings-head .meta{font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;font-size:12px;color:var(--muted)}
282
+
283
+ .sev-group{margin-top:28px}
284
+ .sev-group:first-child{margin-top:0}
285
+ .sev-heading{display:flex;align-items:center;gap:10px;font-size:14px;font-weight:600;margin-bottom:10px}
286
+ .sev-dot{display:inline-block;width:8px;height:8px;border-radius:999px;background:currentColor}
287
+ .sev-count{margin-left:auto;font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
288
+ font-size:12px;color:var(--muted);font-weight:400}
289
+ .sev-destructive{color:var(--destructive)} .sev-warning{color:var(--warning)} .sev-muted{color:var(--muted)}
290
+ .sev-heading.sev-muted{color:var(--muted-2)}
291
+
292
+ .finding-list{list-style:none;display:flex;flex-direction:column;gap:10px}
293
+ .finding{position:relative;padding:14px 16px 14px 18px;background:var(--card);
294
+ border:1px solid var(--border);border-radius:var(--r);overflow:hidden}
295
+ .finding::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--border-strong)}
296
+ .finding-destructive::before{background:var(--destructive)}
297
+ .finding-warning::before{background:var(--warning)}
298
+ .finding-muted::before{background:var(--muted-2)}
299
+ .finding-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:4px}
300
+ .rule-id{font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;font-size:12px;
301
+ color:var(--fg);background:var(--card-2);padding:2px 8px;border-radius:6px;border:1px solid var(--border)}
302
+ .finding-msg{color:var(--fg);font-size:14px}
303
+ .page-url{color:var(--muted);font-size:11px;margin-left:auto}
304
+
305
+ .effort-pill{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;
306
+ font-size:10px;font-weight:600;letter-spacing:0.04em;text-transform:lowercase;
307
+ border:1px solid transparent}
308
+ .effort-quick{background:color-mix(in oklab,var(--success) 14%,transparent);
309
+ color:var(--success);border-color:color-mix(in oklab,var(--success) 35%,transparent)}
310
+ .effort-moderate{background:color-mix(in oklab,var(--warning) 14%,transparent);
311
+ color:var(--warning);border-color:color-mix(in oklab,var(--warning) 35%,transparent)}
312
+ .effort-structural{background:color-mix(in oklab,var(--destructive) 14%,transparent);
313
+ color:var(--destructive);border-color:color-mix(in oklab,var(--destructive) 35%,transparent)}
314
+
315
+ .sev{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;font-size:10px;
316
+ font-weight:600;text-transform:lowercase;letter-spacing:0.04em;border:1px solid transparent}
317
+ .sev-destructive.sev,.sev.sev-destructive{background:color-mix(in oklab,var(--destructive) 14%,transparent);color:var(--destructive);border-color:color-mix(in oklab,var(--destructive) 35%,transparent)}
318
+ .sev-warning.sev,.sev.sev-warning{background:color-mix(in oklab,var(--warning) 14%,transparent);color:var(--warning);border-color:color-mix(in oklab,var(--warning) 35%,transparent)}
319
+ .sev-muted.sev,.sev.sev-muted{background:var(--card-2);color:var(--muted);border-color:var(--border-strong)}
320
+
321
+ .fix{margin-top:8px;padding:10px 12px;background:var(--card-2);border-radius:10px;
322
+ color:var(--muted);font-size:13px;line-height:1.55}
323
+ .fix-label{display:inline-block;margin-right:8px;padding:1px 6px;border-radius:4px;
324
+ background:color-mix(in oklab,var(--primary) 18%,transparent);color:var(--primary);
325
+ font-size:10px;letter-spacing:0.08em;text-transform:uppercase;font-weight:700;vertical-align:1px}
326
+ .ref{display:inline-block;margin-top:8px;color:var(--primary);font-size:12px;text-decoration:none}
327
+ .ref:hover{text-decoration:underline}
328
+
329
+ .finding details{margin-top:10px;border:1px solid var(--border);border-radius:12px;background:var(--card-2)}
330
+ .finding details>summary{cursor:pointer;padding:10px 14px;color:var(--muted);font-size:12px;
331
+ font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;list-style:none}
332
+ .finding details>summary::-webkit-details-marker{display:none}
333
+ .finding details>summary::before{content:"▸ ";color:var(--muted-2)}
334
+ .finding details[open]>summary::before{content:"▾ "}
335
+ .cluster-body{padding:0 14px 14px;border-top:1px solid var(--border)}
336
+ .cluster-label{margin:12px 0 6px;font-size:11px;letter-spacing:0.12em;text-transform:uppercase;color:var(--muted);font-weight:600}
337
+ .pair-list,.member-list{list-style:none;display:flex;flex-direction:column;gap:4px;font-size:12px}
338
+ .member-list{max-height:220px;overflow-y:auto;padding-right:4px}
339
+ .arrow{color:var(--muted-2)}
340
+ .sim{color:var(--warning);font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace}
341
+
342
+ .ai-triage{margin-top:28px;padding:28px;background:color-mix(in oklab,var(--card) 85%,transparent);
343
+ border:1px solid var(--border);border-radius:var(--r-lg)}
344
+ .ai-triage .narrative{color:var(--fg);font-size:15px;line-height:1.6;margin-bottom:18px}
345
+ .causes{list-style:none;display:flex;flex-direction:column;gap:12px}
346
+ .cause{padding:14px 16px;background:var(--card);border:1px solid var(--border);border-radius:14px}
347
+ .cause-head{display:flex;align-items:center;gap:10px;margin-bottom:6px}
348
+ .cause-order{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:999px;
349
+ background:color-mix(in oklab,var(--primary) 20%,transparent);color:var(--primary);
350
+ font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;font-size:11px;font-weight:700}
351
+ .cause h3{font-size:15px;font-weight:600}
352
+ .cause-meta{color:var(--muted);font-size:12px;font-family:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;margin-bottom:6px}
353
+ .cause-body{color:var(--fg);font-size:14px;line-height:1.55}
354
+
355
+ .footer-note{margin-top:56px;padding:20px 22px;border:1px solid var(--border);border-radius:var(--r-lg);
356
+ background:color-mix(in oklab,var(--card) 60%,transparent);color:var(--muted);font-size:12px;line-height:1.6}
357
+ .footer-note strong{color:var(--fg);font-weight:600}
358
+
359
+ ::selection{background:color-mix(in oklab,var(--primary) 75%,transparent);color:#0b1a14}
360
+ ::-webkit-scrollbar{width:8px;height:8px}
361
+ ::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:999px}
362
+ </style>
363
+ </head>
364
+ <body>
365
+ <main>
366
+ <div class="status-row">
367
+ <span class="status-dot tone-${tone}"></span>
368
+ pseolint · audit complete
369
+ </div>
370
+
371
+ <div class="title-row">
372
+ <h1 class="title display">Audit report</h1>
373
+ <span class="src-link">${summary.pageCount} pages · ${summary.findings.length} findings</span>
374
+ </div>
375
+ <p class="lead">Scored against 35 rules inferred from Google's public SpamBrain guidance and programmatic-SEO research. Risk score — lower is safer.</p>
376
+
377
+ <section class="card hero">
378
+ <div class="score-block">
379
+ <span class="score tone-${tone}">${summary.score}</span>
380
+ <span class="score-label">Risk score · /100</span>
381
+ <span class="verdict"><span class="verdict-dot tone-${tone}" style="background:var(--${tone})"></span>${escapeHtml(verdict)}</span>
382
+ </div>
383
+ <dl class="stats">
384
+ <div><dt class="stat-label">Pages</dt><dd class="stat-val">${summary.pageCount}</dd></div>
385
+ <div><dt class="stat-label">Errors</dt><dd class="stat-val tone-destructive">${totalErrors}</dd></div>
386
+ <div><dt class="stat-label">Warnings</dt><dd class="stat-val tone-warning">${counts.warning}</dd></div>
387
+ <div><dt class="stat-label">Info</dt><dd class="stat-val muted">${counts.info}</dd></div>
388
+ </dl>
389
+ </section>
390
+
391
+ ${summary.templateDetected ? `<div class="template-banner"><strong>Template-generated content detected.</strong> Fix suggestions are tailored for template authors — one change can fix hundreds of pages.</div>` : ""}
392
+
393
+ <section class="card">
394
+ <header class="section-head">
395
+ <span class="eyebrow">Category scores</span>
396
+ <span class="meta-mono">higher = more risk</span>
397
+ </header>
398
+ <table class="data-table">
399
+ <tbody>${categoryRows}</tbody>
400
+ </table>
401
+ </section>
402
+
403
+ ${groupScoresHtml}
404
+
405
+ ${summary.triage ? renderTriageHtml(summary.triage) : ""}
406
+
407
+ <div class="findings-head">
408
+ <h2>Findings · ${summary.findings.length}</h2>
409
+ <span class="meta">sampled ${summary.pageCount} page${summary.pageCount === 1 ? "" : "s"}</span>
410
+ </div>
411
+ ${findingsSections}
412
+
413
+ <section class="footer-note">
414
+ <strong>About this report.</strong> Score is a structured heuristic, not a verdict from Google. Categories are weighted equally. Severities escalate: info → warning → error → critical. Effort tags (<span class="effort-pill effort-quick">quick fix</span> <span class="effort-pill effort-moderate">moderate</span> <span class="effort-pill effort-structural">structural</span>) estimate the change cost per finding.
415
+ </section>
416
+ </main>
417
+ </body>
190
418
  </html>`;
191
419
  }
192
420
  //# sourceMappingURL=html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/formatters/html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/formatters/html.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -44,6 +44,14 @@ export * from "./renderer.js";
44
44
  export * from "./enrich-findings.js";
45
45
  export * from "./data-source-loader.js";
46
46
  export * from "./rules/data/data-binding.js";
47
+ export { llmsTxtRule, validateLlmsTxt } from "./rules/aeo/llms-txt.js";
48
+ export { crawlerAccessRule, parseRobotsByUserAgent, isFullyDisallowed, DEFAULT_AI_CRAWLERS } from "./rules/aeo/crawler-access.js";
49
+ export { freshnessSignalsRule } from "./rules/aeo/freshness-signals.js";
50
+ export { faqCoverageRule } from "./rules/aeo/faq-coverage.js";
51
+ export { answerFirstRule, extractFirstParagraph } from "./rules/aeo/answer-first.js";
52
+ export { citableFactsRule } from "./rules/aeo/citable-facts.js";
53
+ export { nonReplicableValueRule } from "./rules/aeo/non-replicable-value.js";
54
+ export { contentModularityRule } from "./rules/aeo/content-modularity.js";
47
55
  export { cachedFetch, cacheKeyFor } from "./cache.js";
48
56
  export type { CacheConfig, CachedFetchOptions, CachedFetchResult, CacheEntry } from "./cache.js";
49
57
  export type { CacheOptions, CacheStats, SamplingStrategy, StateOptions } from "./types.js";
@@ -62,4 +70,6 @@ export * from "./telemetry/index.js";
62
70
  export type { TelemetryOptions } from "./types.js";
63
71
  export { promptTriageFeedback } from "./ai/feedback-prompt.js";
64
72
  export type { FeedbackRating, PromptOptions } from "./ai/feedback-prompt.js";
73
+ export { RULE_SCOPE, isRuleAllowedInDiff } from "./rules/scope.js";
74
+ export type { RuleScope } from "./rules/scope.js";
65
75
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}