@pseolint/core 0.3.2 → 0.4.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 (76) hide show
  1. package/README.md +49 -1
  2. package/dist/ai/triage.d.ts.map +1 -1
  3. package/dist/ai/triage.js +8 -1
  4. package/dist/ai/triage.js.map +1 -1
  5. package/dist/auditor.d.ts.map +1 -1
  6. package/dist/auditor.js +495 -130
  7. package/dist/auditor.js.map +1 -1
  8. package/dist/backpressure.d.ts +68 -0
  9. package/dist/backpressure.d.ts.map +1 -0
  10. package/dist/backpressure.js +81 -0
  11. package/dist/backpressure.js.map +1 -0
  12. package/dist/cache.d.ts +73 -0
  13. package/dist/cache.d.ts.map +1 -1
  14. package/dist/cache.js +258 -19
  15. package/dist/cache.js.map +1 -1
  16. package/dist/enrich-findings.d.ts.map +1 -1
  17. package/dist/enrich-findings.js +1 -14
  18. package/dist/enrich-findings.js.map +1 -1
  19. package/dist/fetch-observer.d.ts +97 -0
  20. package/dist/fetch-observer.d.ts.map +1 -0
  21. package/dist/fetch-observer.js +124 -0
  22. package/dist/fetch-observer.js.map +1 -0
  23. package/dist/formatters/console.d.ts +7 -9
  24. package/dist/formatters/console.d.ts.map +1 -1
  25. package/dist/formatters/console.js +218 -254
  26. package/dist/formatters/console.js.map +1 -1
  27. package/dist/formatters/html.d.ts +5 -1
  28. package/dist/formatters/html.d.ts.map +1 -1
  29. package/dist/formatters/html.js +352 -570
  30. package/dist/formatters/html.js.map +1 -1
  31. package/dist/formatters/index.d.ts +4 -1
  32. package/dist/formatters/index.d.ts.map +1 -1
  33. package/dist/formatters/index.js +1 -1
  34. package/dist/formatters/index.js.map +1 -1
  35. package/dist/formatters/json.d.ts +11 -1
  36. package/dist/formatters/json.d.ts.map +1 -1
  37. package/dist/formatters/json.js +5 -1
  38. package/dist/formatters/json.js.map +1 -1
  39. package/dist/formatters/markdown.d.ts +7 -1
  40. package/dist/formatters/markdown.d.ts.map +1 -1
  41. package/dist/formatters/markdown.js +77 -70
  42. package/dist/formatters/markdown.js.map +1 -1
  43. package/dist/index.d.ts +13 -8
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +6 -7
  46. package/dist/index.js.map +1 -1
  47. package/dist/rule-references.d.ts.map +1 -1
  48. package/dist/rule-references.js +0 -6
  49. package/dist/rule-references.js.map +1 -1
  50. package/dist/rules/content/unique-value.d.ts.map +1 -1
  51. package/dist/rules/content/unique-value.js +1 -0
  52. package/dist/rules/content/unique-value.js.map +1 -1
  53. package/dist/rules/scope.d.ts.map +1 -1
  54. package/dist/rules/scope.js +6 -14
  55. package/dist/rules/scope.js.map +1 -1
  56. package/dist/rules/tech/robots-sitemap-presence.d.ts +9 -1
  57. package/dist/rules/tech/robots-sitemap-presence.d.ts.map +1 -1
  58. package/dist/rules/tech/robots-sitemap-presence.js +14 -5
  59. package/dist/rules/tech/robots-sitemap-presence.js.map +1 -1
  60. package/dist/safe-mode-preset.d.ts +27 -0
  61. package/dist/safe-mode-preset.d.ts.map +1 -0
  62. package/dist/safe-mode-preset.js +54 -0
  63. package/dist/safe-mode-preset.js.map +1 -0
  64. package/dist/site-classifier.d.ts +83 -0
  65. package/dist/site-classifier.d.ts.map +1 -0
  66. package/dist/site-classifier.js +205 -0
  67. package/dist/site-classifier.js.map +1 -0
  68. package/dist/ssrf-guard.d.ts +96 -0
  69. package/dist/ssrf-guard.d.ts.map +1 -0
  70. package/dist/ssrf-guard.js +268 -0
  71. package/dist/ssrf-guard.js.map +1 -0
  72. package/dist/types.d.ts +171 -19
  73. package/dist/types.d.ts.map +1 -1
  74. package/dist/types.js +2 -1
  75. package/dist/types.js.map +1 -1
  76. package/package.json +2 -2
@@ -1,3 +1,9 @@
1
+ /**
2
+ * Total rule count surfaced in the "pass --strict to run all N" hint.
3
+ * This MUST match the surviving rule count documented in v0.4 §4.3 (32 rules).
4
+ * If we add or drop rules in v0.5+, bump this constant.
5
+ */
6
+ const TOTAL_V04_RULE_COUNT = 32;
1
7
  // ANSI escape codes
2
8
  const RESET = "\x1b[0m";
3
9
  const BOLD = "\x1b[1m";
@@ -7,91 +13,68 @@ const GREEN = "\x1b[32m";
7
13
  const YELLOW = "\x1b[33m";
8
14
  const RED_BRIGHT = "\x1b[91m";
9
15
  const ORANGE = "\x1b[38;5;208m";
10
- function scoreColor(score) {
11
- if (score <= 20)
12
- return GREEN;
13
- if (score <= 40)
14
- return YELLOW;
15
- if (score <= 60)
16
- return ORANGE;
17
- if (score <= 80)
18
- return RED;
19
- return RED + BOLD;
20
- }
21
- function scoreLabel(score) {
22
- if (score <= 20)
23
- return "Safe";
24
- if (score <= 40)
25
- return "Caution";
26
- if (score <= 60)
27
- return "Risky";
28
- if (score <= 80)
29
- return "Dangerous";
30
- return "Critical";
31
- }
32
- /**
33
- * AEO-specific score label. AEO score is raw "damage" 0–100 — low is good.
34
- * 0–20 AI-Ready pages structured for citation
35
- * 21–40 Partial some citable, others vulnerable
36
- * 41–60 Vulnerable most pages will be summarized away
37
- * 61–80 Invisible pages offer nothing AI can't synthesize itself
38
- * 81–100 Ghost actively blocked + no citable structure
39
- */
40
- export function aeoScoreLabel(score) {
41
- if (score <= 20)
42
- return "AI-Ready";
43
- if (score <= 40)
44
- return "Partial";
45
- if (score <= 60)
46
- return "Vulnerable";
47
- if (score <= 80)
48
- return "Invisible";
49
- return "Ghost";
50
- }
51
- function bar(score, width = 10) {
52
- const filled = Math.round((score / 100) * width);
53
- const empty = width - filled;
54
- return "\u2588".repeat(filled) + "\u2591".repeat(empty);
55
- }
56
- const SEVERITY_ORDER = ["critical", "error", "warning", "info"];
57
- const EFFORT_ORDER = ["quick", "moderate", "structural"];
58
- function severityColor(severity) {
59
- switch (severity) {
16
+ const MAGENTA = "\x1b[35m";
17
+ // ── Verdict / grade colour helpers ──────────────────────────────────────
18
+ function verdictColor(v) {
19
+ switch (v) {
20
+ case "ready":
21
+ return GREEN;
22
+ case "caution":
23
+ return YELLOW;
24
+ case "concerning":
25
+ return MAGENTA;
60
26
  case "critical":
61
27
  return RED + BOLD;
62
- case "error":
63
- return RED_BRIGHT;
64
- case "warning":
65
- return YELLOW;
66
- case "info":
67
- return DIM;
68
28
  }
69
29
  }
70
- function effortLabel(effort) {
71
- switch (effort) {
72
- case "quick":
73
- return `${GREEN}[quick fix]${RESET}`;
74
- case "moderate":
75
- return `${YELLOW}[moderate]${RESET}`;
76
- case "structural":
77
- return `${RED}[structural]${RESET}`;
30
+ function verdictGlyph(v) {
31
+ switch (v) {
32
+ case "ready":
33
+ return "✓"; // ✓
34
+ case "caution":
35
+ return "⚠"; // ⚠
36
+ case "concerning":
37
+ return "⚠"; // ⚠
38
+ case "critical":
39
+ return "✖"; // ✖
40
+ }
41
+ }
42
+ function gradeColor(g) {
43
+ switch (g) {
44
+ case "A":
45
+ case "B":
46
+ return GREEN;
47
+ case "C":
48
+ return YELLOW;
49
+ case "D":
50
+ return ORANGE;
51
+ case "F":
52
+ return RED + BOLD;
78
53
  }
79
54
  }
80
55
  function shortenUrl(url) {
56
+ if (!url)
57
+ return "";
81
58
  try {
82
59
  const u = new URL(url);
83
- return u.pathname;
60
+ return u.pathname || "/";
84
61
  }
85
62
  catch {
86
63
  return url;
87
64
  }
88
65
  }
66
+ function docsLine(f) {
67
+ if (f.docsUrl) {
68
+ return f.docsUrl.replace(/^https?:\/\//, "");
69
+ }
70
+ return `pseolint.dev/rules/${f.ruleId.split("/").pop() ?? f.ruleId}`;
71
+ }
89
72
  function renderTriageSection(triage) {
90
73
  if (!triage)
91
74
  return "";
92
75
  const lines = [];
93
76
  const cacheLabel = triage.cacheHit ? "cached" : "cache miss";
94
- lines.push(`\n\u2500\u2500\u2500 AI Triage (${triage.modelUsed}, ${cacheLabel}) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`);
77
+ lines.push(`\n─── AI Triage (${triage.modelUsed}, ${cacheLabel}) ─────────────`);
95
78
  lines.push(`Top ${triage.rootCauses.length} root causes:`);
96
79
  const sorted = triage.rootCauses.slice().sort((a, b) => a.fixOrder - b.fixOrder);
97
80
  for (const cause of sorted) {
@@ -104,212 +87,178 @@ function renderTriageSection(triage) {
104
87
  lines.push("");
105
88
  lines.push(`Narrative: ${triage.narrative}`);
106
89
  }
107
- const cost = triage.estimatedCostUsd !== undefined ? ` \u2022 est $${triage.estimatedCostUsd.toFixed(2)}` : "";
90
+ const cost = triage.estimatedCostUsd !== undefined ? ` est $${triage.estimatedCostUsd.toFixed(2)}` : "";
108
91
  lines.push("");
109
- lines.push(`${triage.tokenUsage.input.toLocaleString("en-US")} input / ${triage.tokenUsage.output.toLocaleString("en-US")} output tokens${cost} \u2022 ${cacheLabel}`);
110
- lines.push("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500");
92
+ lines.push(`${triage.tokenUsage.input.toLocaleString("en-US")} input / ${triage.tokenUsage.output.toLocaleString("en-US")} output tokens${cost} ${cacheLabel}`);
93
+ lines.push("───────────────────────────────────────────────────────");
111
94
  return lines.join("\n");
112
95
  }
96
+ function aggregateByRule(findings) {
97
+ const map = new Map();
98
+ for (const f of findings) {
99
+ const existing = map.get(f.ruleId);
100
+ if (existing) {
101
+ existing.count += 1;
102
+ }
103
+ else {
104
+ map.set(f.ruleId, { ruleId: f.ruleId, count: 1, representative: f });
105
+ }
106
+ }
107
+ return Array.from(map.values()).sort((a, b) => {
108
+ if (b.count !== a.count)
109
+ return b.count - a.count;
110
+ return a.ruleId.localeCompare(b.ruleId);
111
+ });
112
+ }
113
+ function renderTopFixes(blockers, shouldFix) {
114
+ // Spec: top fixes by impact = blockers first, then should-fix; aggregated by rule.
115
+ const lines = [];
116
+ const aggBlockers = aggregateByRule(blockers);
117
+ const aggShould = aggregateByRule(shouldFix);
118
+ const ranked = [...aggBlockers, ...aggShould].slice(0, 5);
119
+ if (ranked.length === 0)
120
+ return lines;
121
+ for (let i = 0; i < ranked.length; i += 1) {
122
+ const agg = ranked[i];
123
+ const r = agg.representative;
124
+ const target = r.pageUrl ? shortenUrl(r.pageUrl) : "";
125
+ const targetPart = target ? `${target} ` : "";
126
+ const countLabel = agg.count === 1 ? "" : ` (${agg.count} pages)`;
127
+ const headline = `${targetPart}${r.message}${countLabel}`.trim();
128
+ const fix = r.fix ? ` → ${r.fix}` : "";
129
+ lines.push(` ${i + 1}. ${headline}${fix}`);
130
+ lines.push(` ${DIM}${docsLine(r)}${RESET}`);
131
+ }
132
+ return lines;
133
+ }
134
+ function renderBucketVerbose(label, items) {
135
+ const lines = [];
136
+ if (items.length === 0)
137
+ return lines;
138
+ lines.push(`${BOLD}${label} (${items.length})${RESET}`);
139
+ for (const f of items) {
140
+ const ruleCol = f.ruleId.padEnd(28);
141
+ const urlCol = (shortenUrl(f.pageUrl) || "—").padEnd(28);
142
+ const fixCol = f.fix ?? f.message;
143
+ lines.push(` ${ruleCol} ${DIM}${urlCol}${RESET} ${fixCol}`);
144
+ }
145
+ lines.push("");
146
+ return lines;
147
+ }
148
+ /**
149
+ * Render the v0.4 §4.11 classification banner.
150
+ *
151
+ * ✓ Site type: small-marketing (confidence 92%, 23 URLs, no template cluster)
152
+ * ✓ Suppressed 4 pSEO-only rules — pass --strict to run all 32
153
+ *
154
+ * For programmatic-directory:
155
+ * ✓ Site type: programmatic-directory (confidence 90%, 12,453 URLs, /:state/:city/:service covers 90%)
156
+ * All 32 rules applied.
157
+ *
158
+ * For unclear:
159
+ * ✓ Site type: unclear — all 32 rules applied.
160
+ */
161
+ function classificationLines(c) {
162
+ if (!c)
163
+ return [];
164
+ const lines = [];
165
+ const urlCount = c.signals.find((s) => s.kind === "sitemap-url-count")?.value;
166
+ const cluster = c.signals.find((s) => s.kind === "url-pattern-cluster-coverage");
167
+ const confPct = Math.round(c.confidence * 100);
168
+ const urlsLabel = urlCount !== undefined ? `${urlCount.toLocaleString("en-US")} URLs` : "";
169
+ const fmtType = (t) => t;
170
+ if (c.type === "unclear") {
171
+ lines.push(`${GREEN}✓${RESET} Site type: ${fmtType(c.type)} — all ${TOTAL_V04_RULE_COUNT} rules applied.`);
172
+ return lines;
173
+ }
174
+ const clusterPart = cluster
175
+ ? cluster.ratio >= 0.4
176
+ ? `${cluster.topTemplate} covers ${Math.round(cluster.ratio * 100)}%`
177
+ : "no template cluster"
178
+ : "no template cluster";
179
+ const detailParts = [`confidence ${confPct}%`, urlsLabel, clusterPart].filter(Boolean);
180
+ lines.push(`${GREEN}✓${RESET} Site type: ${fmtType(c.type)} (${detailParts.join(", ")})`);
181
+ if (c.suppressedRules.length > 0) {
182
+ lines.push(`${GREEN}✓${RESET} Suppressed ${c.suppressedRules.length} pSEO-only rule${c.suppressedRules.length === 1 ? "" : "s"} — pass --strict to run all ${TOTAL_V04_RULE_COUNT}`);
183
+ }
184
+ else {
185
+ lines.push(` All ${TOTAL_V04_RULE_COUNT} rules applied.`);
186
+ }
187
+ return lines;
188
+ }
189
+ function categoryLine(categories) {
190
+ // Display the four user-facing buckets — `audit` is engine-internal and weight-0.
191
+ const order = [
192
+ { key: "integrity", label: "Integrity" },
193
+ { key: "discoverability", label: "Discoverability" },
194
+ { key: "citation", label: "Citation" },
195
+ { key: "data", label: "Data" },
196
+ ];
197
+ return order
198
+ .map(({ key, label }) => {
199
+ const cell = categories[key];
200
+ if (!cell)
201
+ return `${label} ?`;
202
+ return `${label} ${gradeColor(cell.grade)}${cell.grade}${RESET}`;
203
+ })
204
+ .join(" · ");
205
+ }
113
206
  export function formatConsole(summary, options) {
114
207
  const strip = options?.noColor ?? false;
208
+ const verbose = options?.verbose ?? false;
115
209
  const lines = [];
116
- // Score header
117
- const color = scoreColor(summary.score);
118
- const label = scoreLabel(summary.score);
119
- lines.push(`${BOLD}SpamBrain Risk Score:${RESET} ${color}${summary.score}/100 (${label})${RESET}`);
120
- lines.push(`Pages analysed: ${summary.pageCount}`);
121
- // Template banner
210
+ // ── Crawl line ──────────────────────────────────────────────────────
211
+ const crawl = summary.diagnostics?.crawlStats;
212
+ if (crawl) {
213
+ const skippedPart = crawl.skipped > 0 ? ` (${crawl.skipped} utility routes skipped)` : "";
214
+ lines.push(`${GREEN}✓${RESET} Discovered ${crawl.fetched} content page${crawl.fetched === 1 ? "" : "s"}${skippedPart}`);
215
+ }
216
+ else {
217
+ lines.push(`${GREEN}✓${RESET} Audited ${summary.pageCount} page${summary.pageCount === 1 ? "" : "s"}`);
218
+ }
219
+ // ── Site classification banner (v0.4 §4.11) ────────────────────────
220
+ // Renders BEFORE the verdict so the operator sees what kind of site we
221
+ // think we're auditing and which rules were suppressed (if any).
222
+ lines.push(...classificationLines(summary.siteClassification));
223
+ lines.push("");
224
+ // ── Verdict + grade strip ───────────────────────────────────────────
225
+ const vColor = verdictColor(summary.verdict);
226
+ const vGlyph = verdictGlyph(summary.verdict);
227
+ lines.push(`${BOLD}Verdict:${RESET} ${vColor}${summary.verdict.toUpperCase()} ${vGlyph}${RESET}`);
228
+ lines.push(categoryLine(summary.categories));
229
+ // ── Template banner ────────────────────────────────────────────────
122
230
  if (summary.templateDetected) {
231
+ lines.push("");
123
232
  lines.push(`${DIM}Template-generated content detected. Fix suggestions are tailored for template authors.${RESET}`);
124
233
  }
125
234
  lines.push("");
126
- // Category scores
127
- lines.push(`${BOLD}Category Scores${RESET}`);
128
- const categories = summary.categoryScores;
129
- for (const [name, value] of Object.entries(categories)) {
130
- const catColor = scoreColor(value);
131
- const padded = name.charAt(0).toUpperCase() + name.slice(1);
132
- lines.push(` ${padded.padEnd(10)} ${catColor}${bar(value)}${RESET} ${value}`);
235
+ // ── Headline + top fixes ───────────────────────────────────────────
236
+ const issues = summary.issues;
237
+ const blockerCount = issues.blockers.length;
238
+ const shouldFixCount = issues.shouldFix.length;
239
+ if (blockerCount === 0 && shouldFixCount === 0 && issues.informational.length === 0) {
240
+ lines.push(`${GREEN}No issues detected.${RESET}`);
133
241
  }
134
- lines.push("");
135
- // Group scores
136
- if (summary.groupScores && summary.groupPageCounts) {
137
- lines.push(`${BOLD}Group Scores${RESET}`);
138
- for (const [name, value] of Object.entries(summary.groupScores)) {
139
- const count = summary.groupPageCounts[name] ?? 0;
140
- const gColor = scoreColor(value);
141
- lines.push(` ${name.padEnd(15)} ${gColor}${bar(value)}${RESET} ${value} (${count} pages)`);
142
- }
242
+ else {
243
+ lines.push(`${summary.headline} top fixes by impact:`);
244
+ const top = renderTopFixes(issues.blockers, issues.shouldFix);
245
+ lines.push(...top);
246
+ }
247
+ // ── Verbose bucket dump ─────────────────────────────────────────────
248
+ if (verbose) {
143
249
  lines.push("");
250
+ lines.push(...renderBucketVerbose("BLOCKERS", issues.blockers));
251
+ lines.push(...renderBucketVerbose("SHOULD-FIX", issues.shouldFix));
252
+ lines.push(...renderBucketVerbose("INFORMATIONAL", issues.informational));
144
253
  }
145
- // Dedicated AEO section (AI Overview readiness)
146
- const aeoFindings = summary.findings.filter((f) => f.ruleId.startsWith("aeo/"));
147
- if (aeoFindings.length > 0) {
148
- const aeoScore = summary.categoryScores.aeo;
149
- const aeoColor = scoreColor(aeoScore);
150
- const aeoLabel = aeoScoreLabel(aeoScore);
151
- lines.push(`${BOLD}── AEO: AI Overview Readiness ───────────────${RESET}`);
152
- lines.push(` Score: ${aeoColor}${aeoScore}/100 (${aeoLabel})${RESET}`);
153
- const aeoAgg = new Map();
154
- for (const f of aeoFindings) {
155
- const entry = aeoAgg.get(f.ruleId) ?? { severity: f.severity, pages: new Set(), siteLevel: 0 };
156
- if (SEVERITY_ORDER.indexOf(f.severity) < SEVERITY_ORDER.indexOf(entry.severity)) {
157
- entry.severity = f.severity;
158
- }
159
- if (f.pageUrl) {
160
- entry.pages.add(f.pageUrl);
161
- }
162
- else {
163
- entry.siteLevel += 1;
164
- }
165
- aeoAgg.set(f.ruleId, entry);
166
- }
167
- const sorted = Array.from(aeoAgg.entries()).sort((a, b) => SEVERITY_ORDER.indexOf(a[1].severity) - SEVERITY_ORDER.indexOf(b[1].severity));
168
- for (const [ruleId, agg] of sorted) {
169
- const mark = agg.severity === "error" || agg.severity === "critical" ? "✖" : "⚠";
170
- const sColor = severityColor(agg.severity);
171
- const pageCount = agg.pages.size;
172
- const detail = pageCount > 0
173
- ? `${pageCount} page${pageCount === 1 ? "" : "s"} affected.`
174
- : `${agg.siteLevel} finding${agg.siteLevel === 1 ? "" : "s"} (site-level).`;
175
- lines.push(` ${sColor}${mark}${RESET} ${ruleId} ${detail}`);
176
- }
254
+ else if (blockerCount + shouldFixCount > 0) {
177
255
  lines.push("");
256
+ lines.push(`${DIM}Run \`pseolint --explain\` for the full list.${RESET}`);
178
257
  }
179
- // AI Triage section (between summary and findings)
258
+ // ── AI triage section (unchanged shape) ─────────────────────────────
180
259
  const triageSection = renderTriageSection(summary.triage);
181
260
  if (triageSection) {
182
261
  lines.push(triageSection);
183
- lines.push("");
184
- }
185
- const ruleAgg = new Map();
186
- for (const f of summary.findings) {
187
- const existing = ruleAgg.get(f.ruleId);
188
- const isCluster = f.context?.type === "cluster";
189
- const clusterCtx = isCluster ? f.context : undefined;
190
- if (existing) {
191
- // Escalate severity if needed
192
- if (SEVERITY_ORDER.indexOf(f.severity) < SEVERITY_ORDER.indexOf(existing.severity)) {
193
- existing.severity = f.severity;
194
- }
195
- // Escalate effort if needed
196
- if (f.effort !== undefined) {
197
- if (existing.effort === undefined || EFFORT_ORDER.indexOf(f.effort) > EFFORT_ORDER.indexOf(existing.effort)) {
198
- existing.effort = f.effort;
199
- }
200
- }
201
- if (isCluster && clusterCtx) {
202
- existing.clusterCount += 1;
203
- existing.totalPages += clusterCtx.members.length;
204
- // Merge similarity range
205
- if (existing.similarityRange) {
206
- existing.similarityRange[0] = Math.min(existing.similarityRange[0], clusterCtx.similarityRange[0]);
207
- existing.similarityRange[1] = Math.max(existing.similarityRange[1], clusterCtx.similarityRange[1]);
208
- }
209
- else {
210
- existing.similarityRange = [...clusterCtx.similarityRange];
211
- }
212
- }
213
- else if (!isCluster) {
214
- existing.totalPages += 1;
215
- }
216
- }
217
- else {
218
- if (isCluster && clusterCtx) {
219
- ruleAgg.set(f.ruleId, {
220
- severity: f.severity,
221
- effort: f.effort,
222
- clusterCount: 1,
223
- totalPages: clusterCtx.members.length,
224
- similarityRange: [...clusterCtx.similarityRange],
225
- });
226
- }
227
- else {
228
- ruleAgg.set(f.ruleId, {
229
- severity: f.severity,
230
- effort: f.effort,
231
- clusterCount: 0,
232
- totalPages: 1,
233
- });
234
- }
235
- }
236
- }
237
- if (ruleAgg.size > 0) {
238
- const sorted = Array.from(ruleAgg.entries())
239
- .sort((a, b) => {
240
- const sevDiff = SEVERITY_ORDER.indexOf(a[1].severity) - SEVERITY_ORDER.indexOf(b[1].severity);
241
- if (sevDiff !== 0)
242
- return sevDiff;
243
- // Within same severity, sort effort ascending (quick wins first)
244
- const aEffort = a[1].effort ? EFFORT_ORDER.indexOf(a[1].effort) : EFFORT_ORDER.length;
245
- const bEffort = b[1].effort ? EFFORT_ORDER.indexOf(b[1].effort) : EFFORT_ORDER.length;
246
- return aEffort - bEffort;
247
- })
248
- .slice(0, 7);
249
- lines.push(`${BOLD}Top Issues${RESET}`);
250
- for (let i = 0; i < sorted.length; i += 1) {
251
- const [ruleId, agg] = sorted[i];
252
- const sColor = severityColor(agg.severity);
253
- let detail;
254
- if (agg.clusterCount > 0 && agg.similarityRange) {
255
- const simMin = Math.round(agg.similarityRange[0] * 100);
256
- const simMax = Math.round(agg.similarityRange[1] * 100);
257
- detail = `${agg.clusterCount} cluster${agg.clusterCount !== 1 ? "s" : ""} (${agg.totalPages} pages, ${simMin}\u2013${simMax}% similar). Structural fix.`;
258
- }
259
- else {
260
- const effortStr = agg.effort
261
- ? ` ${agg.effort.charAt(0).toUpperCase() + agg.effort.slice(1)} fix.`
262
- : "";
263
- detail = `${agg.totalPages} page${agg.totalPages !== 1 ? "s" : ""}.${effortStr}`;
264
- }
265
- lines.push(` ${sColor}${i + 1}.${RESET} ${ruleId} \u2014 ${detail}`);
266
- }
267
- lines.push("");
268
- }
269
- // Findings grouped by severity
270
- const grouped = new Map();
271
- for (const sev of SEVERITY_ORDER) {
272
- grouped.set(sev, []);
273
- }
274
- for (const f of summary.findings) {
275
- grouped.get(f.severity).push(f);
276
- }
277
- for (const sev of SEVERITY_ORDER) {
278
- const items = grouped.get(sev);
279
- if (items.length === 0)
280
- continue;
281
- const sevLabel = sev.toUpperCase();
282
- lines.push(`${severityColor(sev)}${sevLabel}${RESET} (${items.length})`);
283
- const showAll = sev === "critical" || sev === "error";
284
- const limit = showAll ? items.length : 5;
285
- const visible = items.slice(0, limit);
286
- for (const item of visible) {
287
- lines.push(` ${severityColor(sev)}\u2022${RESET} [${item.ruleId}] ${item.message}`);
288
- // Cluster worst pair — show before fix so user sees the problem first
289
- if (item.context?.type === "cluster") {
290
- const clusterCtx = item.context;
291
- if (clusterCtx.worstPairs.length > 0) {
292
- const worst = clusterCtx.worstPairs[0];
293
- const leftShort = shortenUrl(worst.left);
294
- const rightShort = shortenUrl(worst.right);
295
- const simPct = (worst.similarity * 100).toFixed(1);
296
- lines.push(` ${DIM}Worst: ${leftShort} \u2194 ${rightShort} (${simPct}%)${RESET}`);
297
- }
298
- }
299
- if (item.fix) {
300
- lines.push(` ${DIM}Fix: ${item.fix}${RESET}`);
301
- }
302
- if (item.ref) {
303
- lines.push(` ${DIM}Ref: ${item.ref}${RESET}`);
304
- }
305
- if (item.effort) {
306
- lines.push(` ${effortLabel(item.effort)}`);
307
- }
308
- }
309
- if (!showAll && items.length > limit) {
310
- lines.push(` ${DIM}...${items.length - limit} more${RESET}`);
311
- }
312
- lines.push("");
313
262
  }
314
263
  const output = lines.join("\n");
315
264
  if (strip) {
@@ -317,4 +266,19 @@ export function formatConsole(summary, options) {
317
266
  }
318
267
  return output;
319
268
  }
269
+ /**
270
+ * Legacy helper retained for back-compat with existing tests/imports.
271
+ * AEO score band → human label. Low score = AI-Ready, high = Ghost.
272
+ */
273
+ export function aeoScoreLabel(score) {
274
+ if (score <= 20)
275
+ return "AI-Ready";
276
+ if (score <= 40)
277
+ return "Partial";
278
+ if (score <= 60)
279
+ return "Vulnerable";
280
+ if (score <= 80)
281
+ return "Invisible";
282
+ return "Ghost";
283
+ }
320
284
  //# sourceMappingURL=console.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/formatters/console.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/formatters/console.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
1
  import type { AuditSummary } from "../types.js";
2
- export declare function formatHtml(summary: AuditSummary): string;
2
+ export interface HtmlFormatOptions {
3
+ /** No-op for HTML — every finding is rendered regardless. Accepted for option-signature parity. */
4
+ verbose?: boolean;
5
+ }
6
+ export declare function formatHtml(summary: AuditSummary, _options?: HtmlFormatOptions): string;
3
7
  //# sourceMappingURL=html.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/formatters/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,aAAa,CAAC;AA2QtE,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAgWxD"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/formatters/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAOb,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,iBAAiB;IAChC,mGAAmG;IACnG,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA+MD,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,MAAM,CA2MtF"}