ax-audit 2.4.0 → 3.1.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/CHANGELOG.md +50 -0
  2. package/README.md +43 -17
  3. package/dist/checks/agent-json.d.ts +10 -0
  4. package/dist/checks/agent-json.d.ts.map +1 -1
  5. package/dist/checks/agent-json.js +66 -2
  6. package/dist/checks/agent-json.js.map +1 -1
  7. package/dist/checks/content-negotiation.d.ts +4 -0
  8. package/dist/checks/content-negotiation.d.ts.map +1 -0
  9. package/dist/checks/content-negotiation.js +138 -0
  10. package/dist/checks/content-negotiation.js.map +1 -0
  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 +12 -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.js +1 -1
  38. package/dist/checks/security-txt.js +1 -1
  39. package/dist/checks/seo-basics.d.ts +13 -0
  40. package/dist/checks/seo-basics.d.ts.map +1 -0
  41. package/dist/checks/seo-basics.js +222 -0
  42. package/dist/checks/seo-basics.js.map +1 -0
  43. package/dist/checks/sitemap.d.ts +12 -0
  44. package/dist/checks/sitemap.d.ts.map +1 -0
  45. package/dist/checks/sitemap.js +241 -0
  46. package/dist/checks/sitemap.js.map +1 -0
  47. package/dist/checks/structured-data.js +1 -1
  48. package/dist/checks/structured-data.js.map +1 -1
  49. package/dist/checks/tls-https.d.ts +13 -0
  50. package/dist/checks/tls-https.d.ts.map +1 -0
  51. package/dist/checks/tls-https.js +164 -0
  52. package/dist/checks/tls-https.js.map +1 -0
  53. package/dist/checks/utils.d.ts +13 -1
  54. package/dist/checks/utils.d.ts.map +1 -1
  55. package/dist/checks/utils.js +28 -0
  56. package/dist/checks/utils.js.map +1 -1
  57. package/dist/checks/well-known-ai.d.ts +17 -0
  58. package/dist/checks/well-known-ai.d.ts.map +1 -0
  59. package/dist/checks/well-known-ai.js +123 -0
  60. package/dist/checks/well-known-ai.js.map +1 -0
  61. package/dist/constants.d.ts +19 -0
  62. package/dist/constants.d.ts.map +1 -1
  63. package/dist/constants.js +50 -10
  64. package/dist/constants.js.map +1 -1
  65. package/dist/fetcher.d.ts +2 -2
  66. package/dist/fetcher.d.ts.map +1 -1
  67. package/dist/fetcher.js +42 -9
  68. package/dist/fetcher.js.map +1 -1
  69. package/dist/index.d.ts +1 -1
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/scorer.d.ts.map +1 -1
  72. package/dist/scorer.js +8 -0
  73. package/dist/scorer.js.map +1 -1
  74. package/dist/types.d.ts +10 -1
  75. package/dist/types.d.ts.map +1 -1
  76. package/package.json +1 -1
@@ -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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"}
@@ -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,CAkBhD,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,32 @@ 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,
100
+ // Informational in 3.x: reported but does not affect the overall score.
101
+ // Will gain weight in v4.0 — score-affecting changes are treated as breaking (see CHANGELOG 3.0.0).
102
+ 'content-negotiation': 0,
63
103
  };
64
104
  export const GRADES = [
65
105
  { 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/fetcher.d.ts CHANGED
@@ -1,10 +1,10 @@
1
- import type { FetchResponse } from './types.js';
1
+ import type { FetchOptions, FetchResponse } from './types.js';
2
2
  interface FetcherOptions {
3
3
  timeout?: number;
4
4
  verbose?: boolean;
5
5
  }
6
6
  interface Fetcher {
7
- fetch: (url: string) => Promise<FetchResponse>;
7
+ fetch: (url: string, options?: FetchOptions) => Promise<FetchResponse>;
8
8
  }
9
9
  export declare function createFetcher({ timeout, verbose }?: FetcherOptions): Fetcher;
10
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,OAAO;IACf,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CAChD;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAe,EAAE,OAAe,EAAE,GAAE,cAAmB,GAAG,OAAO,CA8DhG"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,OAAO;IACf,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;CACxE;AAqCD,wBAAgB,aAAa,CAAC,EAAE,OAAe,EAAE,OAAe,EAAE,GAAE,cAAmB,GAAG,OAAO,CA4DhG"}
package/dist/fetcher.js CHANGED
@@ -1,11 +1,47 @@
1
1
  import { USER_AGENT } from './constants.js';
2
+ const DEFAULT_HEADERS = {
3
+ 'User-Agent': USER_AGENT,
4
+ Accept: 'text/html, application/json, text/plain, */*',
5
+ };
6
+ /**
7
+ * Merge per-request headers over the fetcher defaults, case-insensitively.
8
+ * A custom `accept` header therefore replaces the default `Accept` instead
9
+ * of being sent alongside it.
10
+ */
11
+ function mergeHeaders(custom) {
12
+ if (!custom)
13
+ return { ...DEFAULT_HEADERS };
14
+ const merged = { ...DEFAULT_HEADERS };
15
+ for (const [name, value] of Object.entries(custom)) {
16
+ const existing = Object.keys(merged).find((k) => k.toLowerCase() === name.toLowerCase());
17
+ if (existing)
18
+ delete merged[existing];
19
+ merged[name] = value;
20
+ }
21
+ return merged;
22
+ }
23
+ /**
24
+ * Build a deterministic cache key for a URL + header combination. Headers are
25
+ * lowercased and sorted so logically identical requests share one cache entry,
26
+ * while requests that differ only in headers (e.g. `Accept: text/markdown`)
27
+ * are cached separately — mirroring how `Vary: Accept` works on the wire.
28
+ */
29
+ function cacheKey(url, options) {
30
+ if (!options?.headers || Object.keys(options.headers).length === 0)
31
+ return url;
32
+ const normalized = Object.entries(options.headers)
33
+ .map(([name, value]) => [name.toLowerCase(), value])
34
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
35
+ return `${url}\u0000${JSON.stringify(normalized)}`;
36
+ }
2
37
  export function createFetcher({ timeout = 10000, verbose = false } = {}) {
3
38
  const cache = new Map();
4
39
  const log = verbose ? (msg) => console.error(` [verbose] ${msg}`) : () => { };
5
- async function fetchUrl(url) {
6
- if (cache.has(url)) {
40
+ async function fetchUrl(url, options) {
41
+ const key = cacheKey(url, options);
42
+ if (cache.has(key)) {
7
43
  log(`cache hit: ${url}`);
8
- return cache.get(url);
44
+ return cache.get(key);
9
45
  }
10
46
  log(`fetch: ${url}`);
11
47
  const controller = new AbortController();
@@ -13,10 +49,7 @@ export function createFetcher({ timeout = 10000, verbose = false } = {}) {
13
49
  try {
14
50
  const response = await fetch(url, {
15
51
  signal: controller.signal,
16
- headers: {
17
- 'User-Agent': USER_AGENT,
18
- Accept: 'text/html, application/json, text/plain, */*',
19
- },
52
+ headers: mergeHeaders(options?.headers),
20
53
  redirect: 'follow',
21
54
  });
22
55
  const body = await response.text();
@@ -32,7 +65,7 @@ export function createFetcher({ timeout = 10000, verbose = false } = {}) {
32
65
  url: response.url,
33
66
  };
34
67
  log(` ${response.status} ${response.statusText} (${body.length} bytes)`);
35
- cache.set(url, result);
68
+ cache.set(key, result);
36
69
  return result;
37
70
  }
38
71
  catch (err) {
@@ -47,7 +80,7 @@ export function createFetcher({ timeout = 10000, verbose = false } = {}) {
47
80
  url,
48
81
  error: errorMsg,
49
82
  };
50
- cache.set(url, result);
83
+ cache.set(key, result);
51
84
  return result;
52
85
  }
53
86
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../src/fetcher.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,5 +2,5 @@ export { audit, batchAudit } from './orchestrator.js';
2
2
  export { calculateOverallScore, getGrade } from './scorer.js';
3
3
  export { checks } from './checks/index.js';
4
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
+ export type { AuditOptions, AuditReport, BaselineData, BaselineDiff, BatchAuditReport, CheckDiff, CheckResult, CheckMeta, CheckContext, CheckModule, Finding, FindingStatus, FetchOptions, FetchResponse, Grade, OutputFormat, } from './types.js';
6
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;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"}
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,YAAY,EACZ,aAAa,EACb,KAAK,EACL,YAAY,GACb,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAgBxF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAK7C"}
1
+ {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAwBxF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAK7C"}
package/dist/scorer.js CHANGED
@@ -7,6 +7,14 @@ export function calculateOverallScore(results, metas) {
7
7
  weightMap[m.id] = m.weight ?? CHECK_WEIGHTS[m.id] ?? 10;
8
8
  totalWeight += weightMap[m.id];
9
9
  }
10
+ // All selected checks are informational (weight 0) — e.g. `--checks content-negotiation`.
11
+ // Fall back to a plain average instead of dividing by zero.
12
+ if (totalWeight === 0) {
13
+ if (results.length === 0)
14
+ return 0;
15
+ const sum = results.reduce((acc, r) => acc + r.score, 0);
16
+ return clampScore(Math.round(sum / results.length));
17
+ }
10
18
  let weightedSum = 0;
11
19
  for (const r of results) {
12
20
  const weight = weightMap[r.id] ?? 0;
@@ -1 +1 @@
1
- {"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,MAAM,UAAU,qBAAqB,CAAC,OAAsB,EAAE,KAAkB;IAC9E,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACxD,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACpC,WAAW,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;IAC1C,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,MAAM,UAAU,qBAAqB,CAAC,OAAsB,EAAE,KAAkB;IAC9E,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACxD,WAAW,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,0FAA0F;IAC1F,4DAA4D;IAC5D,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzD,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACpC,WAAW,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;IAC1C,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG;YAAE,OAAO,KAAK,CAAC;IACvC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -28,9 +28,18 @@ export interface FetchResponse {
28
28
  url: string;
29
29
  error?: string;
30
30
  }
31
+ /** Per-request options for the audit fetcher. */
32
+ export interface FetchOptions {
33
+ /**
34
+ * Extra request headers. Merged over the fetcher defaults, so a custom
35
+ * `Accept` (e.g. `text/markdown` for content-negotiation probes) replaces
36
+ * the default one. Header names are case-insensitive.
37
+ */
38
+ headers?: Record<string, string>;
39
+ }
31
40
  export interface CheckContext {
32
41
  url: string;
33
- fetch: (url: string) => Promise<FetchResponse>;
42
+ fetch: (url: string, options?: FetchOptions) => Promise<FetchResponse>;
34
43
  html: string;
35
44
  headers: Record<string, string>;
36
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ax-audit",
3
- "version": "2.4.0",
3
+ "version": "3.1.0",
4
4
  "description": "Audit websites for AI Agent Experience (AX) readiness. Lighthouse for AI Agents.",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",