ax-audit 2.3.0 → 3.0.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 (92) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +90 -18
  3. package/dist/baseline.d.ts +22 -0
  4. package/dist/baseline.d.ts.map +1 -0
  5. package/dist/baseline.js +108 -0
  6. package/dist/baseline.js.map +1 -0
  7. package/dist/checks/agent-json.d.ts +10 -0
  8. package/dist/checks/agent-json.d.ts.map +1 -1
  9. package/dist/checks/agent-json.js +66 -2
  10. package/dist/checks/agent-json.js.map +1 -1
  11. package/dist/checks/html-rendering.d.ts +21 -0
  12. package/dist/checks/html-rendering.d.ts.map +1 -0
  13. package/dist/checks/html-rendering.js +204 -0
  14. package/dist/checks/html-rendering.js.map +1 -0
  15. package/dist/checks/html-utils.d.ts +37 -0
  16. package/dist/checks/html-utils.d.ts.map +1 -0
  17. package/dist/checks/html-utils.js +93 -0
  18. package/dist/checks/html-utils.js.map +1 -0
  19. package/dist/checks/http-headers.js +1 -1
  20. package/dist/checks/http-headers.js.map +1 -1
  21. package/dist/checks/index.d.ts.map +1 -1
  22. package/dist/checks/index.js +10 -0
  23. package/dist/checks/index.js.map +1 -1
  24. package/dist/checks/llms-txt.d.ts.map +1 -1
  25. package/dist/checks/llms-txt.js +17 -2
  26. package/dist/checks/llms-txt.js.map +1 -1
  27. package/dist/checks/mcp.d.ts.map +1 -1
  28. package/dist/checks/mcp.js +11 -2
  29. package/dist/checks/mcp.js.map +1 -1
  30. package/dist/checks/meta-tags.d.ts +13 -0
  31. package/dist/checks/meta-tags.d.ts.map +1 -1
  32. package/dist/checks/meta-tags.js +104 -24
  33. package/dist/checks/meta-tags.js.map +1 -1
  34. package/dist/checks/openapi.d.ts.map +1 -1
  35. package/dist/checks/openapi.js +11 -2
  36. package/dist/checks/openapi.js.map +1 -1
  37. package/dist/checks/robots-txt.d.ts.map +1 -1
  38. package/dist/checks/robots-txt.js +5 -2
  39. package/dist/checks/robots-txt.js.map +1 -1
  40. package/dist/checks/security-txt.js +1 -1
  41. package/dist/checks/seo-basics.d.ts +13 -0
  42. package/dist/checks/seo-basics.d.ts.map +1 -0
  43. package/dist/checks/seo-basics.js +222 -0
  44. package/dist/checks/seo-basics.js.map +1 -0
  45. package/dist/checks/sitemap.d.ts +12 -0
  46. package/dist/checks/sitemap.d.ts.map +1 -0
  47. package/dist/checks/sitemap.js +241 -0
  48. package/dist/checks/sitemap.js.map +1 -0
  49. package/dist/checks/structured-data.js +1 -1
  50. package/dist/checks/structured-data.js.map +1 -1
  51. package/dist/checks/tls-https.d.ts +13 -0
  52. package/dist/checks/tls-https.d.ts.map +1 -0
  53. package/dist/checks/tls-https.js +164 -0
  54. package/dist/checks/tls-https.js.map +1 -0
  55. package/dist/checks/utils.d.ts +13 -1
  56. package/dist/checks/utils.d.ts.map +1 -1
  57. package/dist/checks/utils.js +28 -0
  58. package/dist/checks/utils.js.map +1 -1
  59. package/dist/checks/well-known-ai.d.ts +17 -0
  60. package/dist/checks/well-known-ai.d.ts.map +1 -0
  61. package/dist/checks/well-known-ai.js +123 -0
  62. package/dist/checks/well-known-ai.js.map +1 -0
  63. package/dist/cli.d.ts.map +1 -1
  64. package/dist/cli.js +47 -1
  65. package/dist/cli.js.map +1 -1
  66. package/dist/constants.d.ts +19 -0
  67. package/dist/constants.d.ts.map +1 -1
  68. package/dist/constants.js +47 -10
  69. package/dist/constants.js.map +1 -1
  70. package/dist/index.d.ts +2 -1
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +1 -0
  73. package/dist/index.js.map +1 -1
  74. package/dist/reporter/html.d.ts +2 -2
  75. package/dist/reporter/html.d.ts.map +1 -1
  76. package/dist/reporter/html.js +63 -7
  77. package/dist/reporter/html.js.map +1 -1
  78. package/dist/reporter/index.d.ts +2 -2
  79. package/dist/reporter/index.d.ts.map +1 -1
  80. package/dist/reporter/index.js +4 -4
  81. package/dist/reporter/index.js.map +1 -1
  82. package/dist/reporter/json.d.ts +2 -2
  83. package/dist/reporter/json.d.ts.map +1 -1
  84. package/dist/reporter/json.js +3 -2
  85. package/dist/reporter/json.js.map +1 -1
  86. package/dist/reporter/terminal.d.ts +2 -2
  87. package/dist/reporter/terminal.d.ts.map +1 -1
  88. package/dist/reporter/terminal.js +42 -3
  89. package/dist/reporter/terminal.js.map +1 -1
  90. package/dist/types.d.ts +27 -0
  91. package/dist/types.d.ts.map +1 -1
  92. package/package.json +2 -2
@@ -0,0 +1,123 @@
1
+ import { guideUrl } from '../guide-urls.js';
2
+ import { buildResult } from './utils.js';
3
+ /**
4
+ * "well-known-ai" — emerging AI-specific discovery files that don't have a settled spec yet
5
+ * but are already published by some sites and read by some agents. Each file present is a
6
+ * positive signal (bonus); none of them are individually required, so a site that publishes
7
+ * just one or two should not be punished. The score reflects coverage of this small bundle.
8
+ *
9
+ * Files probed:
10
+ * - `/.well-known/ai.txt` (Spawning AI — opt-in/opt-out for AI training)
11
+ * - `/.well-known/genai.txt` (proposed — generative AI policy)
12
+ * - `/ai-plugin.json` and `/.well-known/ai-plugin.json` (legacy ChatGPT plugin manifest)
13
+ * - `/agents.json` (Wildcard / OpenAgents — emerging agent capability manifest)
14
+ * - `/.well-known/nlweb.json` (Microsoft NLWeb — natural-language site interface)
15
+ */
16
+ export const meta = {
17
+ id: 'well-known-ai',
18
+ name: 'AI Well-Known',
19
+ description: 'Checks emerging AI-specific discovery files (ai.txt, agents.json, ai-plugin.json, nlweb)',
20
+ weight: 3,
21
+ };
22
+ const PROBES = [
23
+ {
24
+ paths: ['/.well-known/ai.txt'],
25
+ label: 'ai.txt',
26
+ hint: 'Publish /.well-known/ai.txt declaring opt-in/opt-out signals for AI training. See https://site.spawning.ai/spawning-ai-txt for the format.',
27
+ guideAnchor: 'ai-txt',
28
+ },
29
+ {
30
+ paths: ['/.well-known/genai.txt'],
31
+ label: 'genai.txt',
32
+ hint: 'Publish /.well-known/genai.txt declaring your generative-AI usage policy.',
33
+ guideAnchor: 'genai-txt',
34
+ },
35
+ {
36
+ paths: ['/.well-known/ai-plugin.json', '/ai-plugin.json'],
37
+ label: 'ai-plugin.json',
38
+ hint: 'Publish /ai-plugin.json (legacy ChatGPT plugin manifest). Schema: name_for_model, description_for_model, api.url. Still consumed by some agents.',
39
+ guideAnchor: 'ai-plugin',
40
+ parser: (body) => {
41
+ try {
42
+ const data = JSON.parse(body);
43
+ return Boolean(data.name_for_model || data.name_for_human || data.schema_version);
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ },
49
+ },
50
+ {
51
+ paths: ['/agents.json', '/.well-known/agents.json'],
52
+ label: 'agents.json',
53
+ hint: 'Publish /agents.json describing your site as a callable agent (OpenAgents / Wildcard emerging spec). Includes name, description, and operations[].',
54
+ guideAnchor: 'agents-json',
55
+ parser: (body) => {
56
+ try {
57
+ const data = JSON.parse(body);
58
+ return Boolean(data.name || data.operations || data.agents);
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ },
64
+ },
65
+ {
66
+ paths: ['/.well-known/nlweb.json', '/nlweb.json'],
67
+ label: 'nlweb.json',
68
+ hint: 'Publish /.well-known/nlweb.json (Microsoft NLWeb) so agents can interact with the site through a natural-language interface.',
69
+ guideAnchor: 'nlweb',
70
+ parser: (body) => {
71
+ try {
72
+ JSON.parse(body);
73
+ return true;
74
+ }
75
+ catch {
76
+ return false;
77
+ }
78
+ },
79
+ },
80
+ ];
81
+ export default async function check(ctx) {
82
+ const start = performance.now();
83
+ const findings = [];
84
+ let presentCount = 0;
85
+ for (const probe of PROBES) {
86
+ let hit = null;
87
+ for (const path of probe.paths) {
88
+ const res = await ctx.fetch(`${ctx.url}${path}`);
89
+ if (res.ok && res.body.trim().length > 0) {
90
+ hit = { path, res };
91
+ break;
92
+ }
93
+ }
94
+ if (!hit) {
95
+ findings.push({
96
+ status: 'warn',
97
+ message: `${probe.label} not found`,
98
+ detail: `Tried: ${probe.paths.join(', ')}`,
99
+ hint: probe.hint,
100
+ learnMoreUrl: guideUrl(meta.id, probe.guideAnchor),
101
+ });
102
+ continue;
103
+ }
104
+ if (probe.parser && !probe.parser(hit.res.body)) {
105
+ findings.push({
106
+ status: 'warn',
107
+ message: `${probe.label} present at ${hit.path} but does not look valid`,
108
+ hint: probe.hint,
109
+ learnMoreUrl: guideUrl(meta.id, `${probe.guideAnchor}-invalid`),
110
+ });
111
+ continue;
112
+ }
113
+ presentCount++;
114
+ findings.push({ status: 'pass', message: `${probe.label} present at ${hit.path}` });
115
+ }
116
+ const score = Math.round((presentCount / PROBES.length) * 100);
117
+ findings.unshift({
118
+ status: presentCount > 0 ? 'pass' : 'warn',
119
+ message: `${presentCount}/${PROBES.length} emerging AI discovery files published`,
120
+ });
121
+ return buildResult(meta, score, findings, start);
122
+ }
123
+ //# sourceMappingURL=well-known-ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"well-known-ai.js","sourceRoot":"","sources":["../../src/checks/well-known-ai.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAOA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA6ExC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAoBA,wBAAgB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA4HxC"}
package/dist/cli.js CHANGED
@@ -3,6 +3,7 @@ import { audit, batchAudit } from './orchestrator.js';
3
3
  import { report, reportBatch } from './reporter/index.js';
4
4
  import { VERSION } from './constants.js';
5
5
  import { checks as allChecks } from './checks/index.js';
6
+ import { saveBaseline, loadBaseline, diffBaseline } from './baseline.js';
6
7
  export function cli(argv) {
7
8
  const program = new Command();
8
9
  program
@@ -16,6 +17,9 @@ export function cli(argv) {
16
17
  .option('--timeout <ms>', 'Per-request timeout in milliseconds', '10000')
17
18
  .option('--verbose', 'Show detailed request and check execution logs')
18
19
  .option('--only-failures', 'Only show checks/findings with failures or warnings')
20
+ .option('--save-baseline <path>', 'Save audit result as a baseline JSON file for future comparison')
21
+ .option('--baseline <path>', 'Compare against a previously saved baseline and show score deltas')
22
+ .option('--fail-on-regression <points>', 'Exit with code 1 if any check regresses by more than N points (requires --baseline)')
19
23
  .action(async (urls, options) => {
20
24
  for (const url of urls) {
21
25
  try {
@@ -26,6 +30,10 @@ export function cli(argv) {
26
30
  process.exit(1);
27
31
  }
28
32
  }
33
+ if (options.failOnRegression && !options.baseline) {
34
+ console.error('Error: --fail-on-regression requires --baseline');
35
+ process.exit(1);
36
+ }
29
37
  const format = (options.json ? 'json' : options.output);
30
38
  const checks = options.checks ? options.checks.split(',').map((s) => s.trim()) : undefined;
31
39
  if (checks) {
@@ -42,14 +50,52 @@ export function cli(argv) {
42
50
  timeout: parseInt(options.timeout, 10),
43
51
  verbose: options.verbose,
44
52
  };
53
+ // Load baseline if requested (fail fast before running the audit)
54
+ let baseline;
55
+ if (options.baseline) {
56
+ try {
57
+ baseline = loadBaseline(options.baseline);
58
+ }
59
+ catch (err) {
60
+ const message = err instanceof Error ? err.message : String(err);
61
+ console.error(`Error: ${message}`);
62
+ process.exit(2);
63
+ }
64
+ }
65
+ const regressionThreshold = options.failOnRegression ? parseInt(options.failOnRegression, 10) : undefined;
66
+ if (regressionThreshold !== undefined && (isNaN(regressionThreshold) || regressionThreshold < 0)) {
67
+ console.error('Error: --fail-on-regression must be a non-negative integer');
68
+ process.exit(1);
69
+ }
45
70
  try {
46
71
  if (urls.length === 1) {
47
72
  const result = await audit({ ...baseOptions, url: urls[0] });
73
+ // Build diff if baseline was provided
74
+ let diff;
75
+ if (baseline) {
76
+ diff = diffBaseline(baseline, result);
77
+ }
78
+ // Save baseline if requested
79
+ if (options.saveBaseline) {
80
+ saveBaseline(options.saveBaseline, result);
81
+ }
48
82
  const output = applyOnlyFailures(result, options.onlyFailures);
49
- report(output, format);
83
+ report(output, format, diff);
84
+ // Determine exit code
85
+ if (diff && regressionThreshold !== undefined) {
86
+ const worstRegression = diff.regressions.reduce((max, c) => Math.max(max, Math.abs(c.delta)), 0);
87
+ if (worstRegression > regressionThreshold) {
88
+ process.exit(1);
89
+ }
90
+ }
50
91
  process.exit(result.overallScore >= 70 ? 0 : 1);
51
92
  }
52
93
  else {
94
+ // Batch mode — baseline comparison is not supported for batch (would need per-URL baselines)
95
+ if (baseline) {
96
+ console.error('Error: --baseline is not supported with multiple URLs. Run single-URL audits for baseline comparison.');
97
+ process.exit(1);
98
+ }
53
99
  const batch = await batchAudit(urls, baseOptions);
54
100
  if (options.onlyFailures) {
55
101
  batch.reports = batch.reports.map((r) => applyOnlyFailures(r, true));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,28 @@
1
1
  import type { Grade, SecurityHeader } from './types.js';
2
2
  export declare const VERSION: string;
3
3
  export declare const USER_AGENT: string;
4
+ /**
5
+ * Known AI / LLM crawlers grouped by primary purpose. The audit recommends explicit
6
+ * `User-agent:` rules for every entry so site operators can see exactly which agents
7
+ * have access. Buckets:
8
+ *
9
+ * - `training` — bots that scrape content for model training corpora
10
+ * - `search` — bots that fetch on behalf of a live answer engine / search UI
11
+ * - `fetching` — generic on-demand fetchers (browsing, summarization, automation)
12
+ */
4
13
  export declare const AI_CRAWLERS: Record<string, string[]>;
5
14
  export declare const ALL_AI_CRAWLERS: string[];
15
+ /**
16
+ * The "must-configure" subset — these are the agents a typical operator should grant
17
+ * (or knowingly deny) explicit access to. ax-audit grades the robots.txt section heavily
18
+ * on coverage of this short list, while still rewarding broader explicit rules.
19
+ */
6
20
  export declare const CORE_AI_CRAWLERS: string[];
21
+ /**
22
+ * Default weight per check (sum: 100). Individual `CheckMeta.weight` overrides this map.
23
+ * Keep weights aligned with real-world impact — discovery + content-rendering are the
24
+ * highest-leverage signals for AI agents.
25
+ */
7
26
  export declare const CHECK_WEIGHTS: Record<string, number>;
8
27
  export declare const GRADES: Grade[];
9
28
  export declare const AGENT_JSON_REQUIRED_FIELDS: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKxD,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAC3C,eAAO,MAAM,UAAU,QAAqE,CAAC;AAE7F,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAmChD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,EAA8E,CAAC;AAEnH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EAOpC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAUhD,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAAK,EAKzB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAA6C,CAAC;AAE7F,eAAO,MAAM,4BAA4B,EAAE,MAAM,EAA2B,CAAC;AAE7E,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAQ5C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKxD,eAAO,MAAM,OAAO,EAAE,MAAoB,CAAC;AAC3C,eAAO,MAAM,UAAU,QAAqE,CAAC;AAE7F;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA8ChD,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MAAM,EAA8E,CAAC;AAEnH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,EASpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAehD,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,KAAK,EAKzB,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,MAAM,EAA6C,CAAC;AAE7F,eAAO,MAAM,4BAA4B,EAAE,MAAM,EAA2B,CAAC;AAE7E,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAQ5C,CAAC"}
package/dist/constants.js CHANGED
@@ -5,6 +5,15 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
5
5
  const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
6
6
  export const VERSION = pkg.version;
7
7
  export const USER_AGENT = `ax-audit/${pkg.version} (https://github.com/lucioduran/ax-audit)`;
8
+ /**
9
+ * Known AI / LLM crawlers grouped by primary purpose. The audit recommends explicit
10
+ * `User-agent:` rules for every entry so site operators can see exactly which agents
11
+ * have access. Buckets:
12
+ *
13
+ * - `training` — bots that scrape content for model training corpora
14
+ * - `search` — bots that fetch on behalf of a live answer engine / search UI
15
+ * - `fetching` — generic on-demand fetchers (browsing, summarization, automation)
16
+ */
8
17
  export const AI_CRAWLERS = {
9
18
  training: [
10
19
  'GPTBot',
@@ -25,6 +34,13 @@ export const AI_CRAWLERS = {
25
34
  'DeepSeek-AI',
26
35
  'PanguBot',
27
36
  'Diffbot',
37
+ 'MistralAI-User',
38
+ 'Kangaroo Bot',
39
+ 'Timpibot',
40
+ 'omgili',
41
+ 'omgilibot',
42
+ 'ImagesiftBot',
43
+ 'Webzio-Extended',
28
44
  ],
29
45
  search: [
30
46
  'OAI-SearchBot',
@@ -38,10 +54,19 @@ export const AI_CRAWLERS = {
38
54
  'Petalbot',
39
55
  'Google-CloudVertexBot',
40
56
  'Gemini',
57
+ 'GeminiBot',
58
+ 'KagiBot',
59
+ 'NeevaBot',
60
+ 'PhindBot',
41
61
  ],
42
- fetching: ['FirecrawlAgent', 'Facebookbot'],
62
+ fetching: ['FirecrawlAgent', 'Facebookbot', 'Bingbot', 'Goose', 'AwarioBot', 'AwarioRssBot', 'AwarioSmartBot'],
43
63
  };
44
64
  export const ALL_AI_CRAWLERS = [...AI_CRAWLERS.training, ...AI_CRAWLERS.search, ...AI_CRAWLERS.fetching];
65
+ /**
66
+ * The "must-configure" subset — these are the agents a typical operator should grant
67
+ * (or knowingly deny) explicit access to. ax-audit grades the robots.txt section heavily
68
+ * on coverage of this short list, while still rewarding broader explicit rules.
69
+ */
45
70
  export const CORE_AI_CRAWLERS = [
46
71
  'GPTBot',
47
72
  'ClaudeBot',
@@ -49,17 +74,29 @@ export const CORE_AI_CRAWLERS = [
49
74
  'Claude-SearchBot',
50
75
  'Google-Extended',
51
76
  'PerplexityBot',
77
+ 'OAI-SearchBot',
78
+ 'CCBot',
52
79
  ];
80
+ /**
81
+ * Default weight per check (sum: 100). Individual `CheckMeta.weight` overrides this map.
82
+ * Keep weights aligned with real-world impact — discovery + content-rendering are the
83
+ * highest-leverage signals for AI agents.
84
+ */
53
85
  export const CHECK_WEIGHTS = {
54
- 'llms-txt': 15,
55
- 'robots-txt': 15,
56
- 'structured-data': 13,
57
- 'http-headers': 13,
58
- 'agent-json': 10,
59
- mcp: 10,
60
- 'security-txt': 8,
61
- 'meta-tags': 8,
62
- openapi: 8,
86
+ 'llms-txt': 11,
87
+ 'robots-txt': 11,
88
+ 'html-rendering': 9,
89
+ 'structured-data': 9,
90
+ 'http-headers': 9,
91
+ 'agent-json': 7,
92
+ mcp: 7,
93
+ 'seo-basics': 7,
94
+ 'security-txt': 6,
95
+ 'meta-tags': 6,
96
+ openapi: 6,
97
+ 'tls-https': 5,
98
+ sitemap: 4,
99
+ 'well-known-ai': 3,
63
100
  };
64
101
  export const GRADES = [
65
102
  { min: 90, label: 'Excellent', color: 'green' },
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { audit, batchAudit } from './orchestrator.js';
2
2
  export { calculateOverallScore, getGrade } from './scorer.js';
3
3
  export { checks } from './checks/index.js';
4
- export type { AuditOptions, AuditReport, BatchAuditReport, CheckResult, CheckMeta, CheckContext, CheckModule, Finding, FindingStatus, FetchResponse, Grade, OutputFormat, } from './types.js';
4
+ export { saveBaseline, loadBaseline, diffBaseline, toBaselineData } from './baseline.js';
5
+ export type { AuditOptions, AuditReport, BaselineData, BaselineDiff, BatchAuditReport, CheckDiff, CheckResult, CheckMeta, CheckContext, CheckModule, Finding, FindingStatus, FetchResponse, Grade, OutputFormat, } from './types.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,YAAY,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,OAAO,EACP,aAAa,EACb,aAAa,EACb,KAAK,EACL,YAAY,GACb,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEzF,YAAY,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,OAAO,EACP,aAAa,EACb,aAAa,EACb,KAAK,EACL,YAAY,GACb,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { audit, batchAudit } from './orchestrator.js';
2
2
  export { calculateOverallScore, getGrade } from './scorer.js';
3
3
  export { checks } from './checks/index.js';
4
+ export { saveBaseline, loadBaseline, diffBaseline, toBaselineData } from './baseline.js';
4
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { AuditReport, BatchAuditReport } from '../types.js';
2
- export declare function reportHtml(report: AuditReport): void;
1
+ import type { AuditReport, BaselineDiff, BatchAuditReport } from '../types.js';
2
+ export declare function reportHtml(report: AuditReport, diff?: BaselineDiff): void;
3
3
  export declare function reportBatchHtml(batch: BatchAuditReport): void;
4
4
  //# sourceMappingURL=html.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/reporter/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAA8C,MAAM,aAAa,CAAC;AAqW7G,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAI7D"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/reporter/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAMjB,MAAM,aAAa,CAAC;AAsarB,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAGzE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAI7D"}
@@ -56,15 +56,23 @@ function renderFinding(f) {
56
56
  </div>
57
57
  </div>`;
58
58
  }
59
- function renderCheck(check) {
59
+ function renderDeltaBadge(delta) {
60
+ if (delta === 0)
61
+ return '<span class="delta delta-neutral">&mdash;</span>';
62
+ if (delta > 0)
63
+ return `<span class="delta delta-up">&#9650;${delta}</span>`;
64
+ return `<span class="delta delta-down">&#9660;${Math.abs(delta)}</span>`;
65
+ }
66
+ function renderCheck(check, checkDiff) {
60
67
  const grade = getGrade(check.score);
61
68
  const color = gradeHslColor(grade);
69
+ const diffHtml = checkDiff ? renderDeltaBadge(checkDiff.delta) : '';
62
70
  return `
63
71
  <details class="check" open>
64
72
  <summary>
65
73
  <div class="check-header">
66
74
  <span class="check-name">${escapeHtml(check.name)}</span>
67
- <span class="check-score" style="color:${color}">${check.score}/100</span>
75
+ <span class="check-score" style="color:${color}">${check.score}/100 ${diffHtml}</span>
68
76
  </div>
69
77
  <div class="check-desc">${escapeHtml(check.description)}</div>
70
78
  </summary>
@@ -73,7 +81,34 @@ function renderCheck(check) {
73
81
  </div>
74
82
  </details>`;
75
83
  }
76
- function renderSingleReport(report) {
84
+ function renderDiffSummary(diff) {
85
+ if (diff.regressions.length === 0 && diff.improvements.length === 0)
86
+ return '';
87
+ const rows = [];
88
+ if (diff.regressions.length > 0) {
89
+ rows.push('<h3>Regressions</h3>');
90
+ for (const r of diff.regressions) {
91
+ rows.push(`<div class="diff-row diff-regression">${escapeHtml(r.name)}: ${r.previous} &rarr; ${r.current} <span class="delta delta-down">&#9660;${Math.abs(r.delta)}</span></div>`);
92
+ }
93
+ }
94
+ if (diff.improvements.length > 0) {
95
+ rows.push('<h3>Improvements</h3>');
96
+ for (const imp of diff.improvements) {
97
+ rows.push(`<div class="diff-row diff-improvement">${escapeHtml(imp.name)}: ${imp.previous} &rarr; ${imp.current} <span class="delta delta-up">&#9650;${imp.delta}</span></div>`);
98
+ }
99
+ }
100
+ return `<div class="diff-summary">${rows.join('')}</div>`;
101
+ }
102
+ function renderSingleReport(report, diff) {
103
+ const checkDiffs = new Map();
104
+ if (diff) {
105
+ for (const cd of diff.checks) {
106
+ checkDiffs.set(cd.id, cd);
107
+ }
108
+ }
109
+ const baselineInfo = diff
110
+ ? `<div class="meta-row"><span>Baseline: ${escapeHtml(diff.baselineTimestamp)}</span><span>Overall: ${diff.overallPrevious} &rarr; ${diff.overallCurrent} ${renderDeltaBadge(diff.overallDelta)}</span></div>`
111
+ : '';
77
112
  return `
78
113
  <div class="report">
79
114
  <div class="report-header">
@@ -84,10 +119,12 @@ function renderSingleReport(report) {
84
119
  <span>${report.timestamp}</span>
85
120
  <span>${report.duration}ms</span>
86
121
  </div>
122
+ ${baselineInfo}
87
123
  </div>
88
124
  </div>
125
+ ${diff ? renderDiffSummary(diff) : ''}
89
126
  <div class="checks">
90
- ${report.results.map(renderCheck).join('')}
127
+ ${report.results.map((c) => renderCheck(c, checkDiffs.get(c.id))).join('')}
91
128
  </div>
92
129
  </div>`;
93
130
  }
@@ -317,6 +354,25 @@ h1 {
317
354
  text-align: center;
318
355
  }
319
356
  .footer a { color: var(--text-secondary); }
357
+ .delta { font-size: 0.75rem; font-weight: 600; margin-left: 0.5rem; }
358
+ .delta-up { color: hsl(140, 70%, 45%); }
359
+ .delta-down { color: hsl(0, 80%, 50%); }
360
+ .delta-neutral { color: var(--text-secondary); }
361
+ .diff-summary {
362
+ background: var(--bg-card);
363
+ border: 1px solid var(--border);
364
+ border-radius: 8px;
365
+ padding: 1rem;
366
+ margin-bottom: 1rem;
367
+ }
368
+ .diff-summary h3 { font-size: 0.9rem; margin-bottom: 0.5rem; }
369
+ .diff-row { font-size: 0.85rem; padding: 0.25rem 0; }
370
+ .diff-regression { color: hsl(0, 80%, 50%); }
371
+ .diff-improvement { color: hsl(140, 70%, 45%); }
372
+ @media (prefers-color-scheme: dark) {
373
+ .diff-regression { color: hsl(0, 70%, 60%); }
374
+ .diff-improvement { color: hsl(140, 70%, 60%); }
375
+ }
320
376
  @media (max-width: 600px) {
321
377
  body { padding: 1rem; }
322
378
  .report-header { flex-direction: column; align-items: flex-start; gap: 1rem; }
@@ -341,12 +397,12 @@ ${body}
341
397
  </body>
342
398
  </html>`;
343
399
  }
344
- export function reportHtml(report) {
345
- const html = htmlShell(`AX Audit — ${report.url}`, renderSingleReport(report));
400
+ export function reportHtml(report, diff) {
401
+ const html = htmlShell(`AX Audit — ${report.url}`, renderSingleReport(report, diff));
346
402
  console.log(html);
347
403
  }
348
404
  export function reportBatchHtml(batch) {
349
- const body = renderBatchSummary(batch) + batch.reports.map(renderSingleReport).join('');
405
+ const body = renderBatchSummary(batch) + batch.reports.map((r) => renderSingleReport(r)).join('');
350
406
  const html = htmlShell(`AX Audit — Batch Report (${batch.summary.total} URLs)`, body);
351
407
  console.log(html);
352
408
  }
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/reporter/html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/reporter/html.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AuditReport, BatchAuditReport, OutputFormat } from '../types.js';
2
- export declare function report(auditReport: AuditReport, format: OutputFormat): void;
1
+ import type { AuditReport, BaselineDiff, BatchAuditReport, OutputFormat } from '../types.js';
2
+ export declare function report(auditReport: AuditReport, format: OutputFormat, diff?: BaselineDiff): void;
3
3
  export declare function reportBatch(batchReport: BatchAuditReport, format: OutputFormat): void;
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/E,wBAAgB,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAY3E;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAYrF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE7F,wBAAgB,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAYhG;AAED,wBAAgB,WAAW,CAAC,WAAW,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAYrF"}
@@ -1,16 +1,16 @@
1
1
  import { reportTerminal, reportBatchTerminal } from './terminal.js';
2
2
  import { reportJson, reportBatchJson } from './json.js';
3
3
  import { reportHtml, reportBatchHtml } from './html.js';
4
- export function report(auditReport, format) {
4
+ export function report(auditReport, format, diff) {
5
5
  switch (format) {
6
6
  case 'json':
7
- reportJson(auditReport);
7
+ reportJson(auditReport, diff);
8
8
  break;
9
9
  case 'html':
10
- reportHtml(auditReport);
10
+ reportHtml(auditReport, diff);
11
11
  break;
12
12
  case 'terminal':
13
- reportTerminal(auditReport);
13
+ reportTerminal(auditReport, diff);
14
14
  break;
15
15
  }
16
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGxD,MAAM,UAAU,MAAM,CAAC,WAAwB,EAAE,MAAoB;IACnE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,UAAU,CAAC,WAAW,CAAC,CAAC;YACxB,MAAM;QACR,KAAK,MAAM;YACT,UAAU,CAAC,WAAW,CAAC,CAAC;YACxB,MAAM;QACR,KAAK,UAAU;YACb,cAAc,CAAC,WAAW,CAAC,CAAC;YAC5B,MAAM;IACV,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAA6B,EAAE,MAAoB;IAC7E,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,eAAe,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,MAAM;YACT,eAAe,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,UAAU;YACb,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM;IACV,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGxD,MAAM,UAAU,MAAM,CAAC,WAAwB,EAAE,MAAoB,EAAE,IAAmB;IACxF,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC9B,MAAM;QACR,KAAK,MAAM;YACT,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC9B,MAAM;QACR,KAAK,UAAU;YACb,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM;IACV,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,WAA6B,EAAE,MAAoB;IAC7E,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,eAAe,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,MAAM;YACT,eAAe,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAM;QACR,KAAK,UAAU;YACb,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM;IACV,CAAC;AACH,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { AuditReport, BatchAuditReport } from '../types.js';
2
- export declare function reportJson(report: AuditReport): void;
1
+ import type { AuditReport, BaselineDiff, BatchAuditReport } from '../types.js';
2
+ export declare function reportJson(report: AuditReport, diff?: BaselineDiff): void;
3
3
  export declare function reportBatchJson(batch: BatchAuditReport): void;
4
4
  //# sourceMappingURL=json.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/reporter/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEjE,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEpD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAE7D"}
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/reporter/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/E,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAGzE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAE7D"}
@@ -1,5 +1,6 @@
1
- export function reportJson(report) {
2
- console.log(JSON.stringify(report, null, 2));
1
+ export function reportJson(report, diff) {
2
+ const output = diff ? { ...report, baselineDiff: diff } : report;
3
+ console.log(JSON.stringify(output, null, 2));
3
4
  }
4
5
  export function reportBatchJson(batch) {
5
6
  console.log(JSON.stringify(batch, null, 2));