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.
- package/CHANGELOG.md +47 -0
- package/README.md +90 -18
- package/dist/baseline.d.ts +22 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +108 -0
- package/dist/baseline.js.map +1 -0
- package/dist/checks/agent-json.d.ts +10 -0
- package/dist/checks/agent-json.d.ts.map +1 -1
- package/dist/checks/agent-json.js +66 -2
- package/dist/checks/agent-json.js.map +1 -1
- package/dist/checks/html-rendering.d.ts +21 -0
- package/dist/checks/html-rendering.d.ts.map +1 -0
- package/dist/checks/html-rendering.js +204 -0
- package/dist/checks/html-rendering.js.map +1 -0
- package/dist/checks/html-utils.d.ts +37 -0
- package/dist/checks/html-utils.d.ts.map +1 -0
- package/dist/checks/html-utils.js +93 -0
- package/dist/checks/html-utils.js.map +1 -0
- package/dist/checks/http-headers.js +1 -1
- package/dist/checks/http-headers.js.map +1 -1
- package/dist/checks/index.d.ts.map +1 -1
- package/dist/checks/index.js +10 -0
- package/dist/checks/index.js.map +1 -1
- package/dist/checks/llms-txt.d.ts.map +1 -1
- package/dist/checks/llms-txt.js +17 -2
- package/dist/checks/llms-txt.js.map +1 -1
- package/dist/checks/mcp.d.ts.map +1 -1
- package/dist/checks/mcp.js +11 -2
- package/dist/checks/mcp.js.map +1 -1
- package/dist/checks/meta-tags.d.ts +13 -0
- package/dist/checks/meta-tags.d.ts.map +1 -1
- package/dist/checks/meta-tags.js +104 -24
- package/dist/checks/meta-tags.js.map +1 -1
- package/dist/checks/openapi.d.ts.map +1 -1
- package/dist/checks/openapi.js +11 -2
- package/dist/checks/openapi.js.map +1 -1
- package/dist/checks/robots-txt.d.ts.map +1 -1
- package/dist/checks/robots-txt.js +5 -2
- package/dist/checks/robots-txt.js.map +1 -1
- package/dist/checks/security-txt.js +1 -1
- package/dist/checks/seo-basics.d.ts +13 -0
- package/dist/checks/seo-basics.d.ts.map +1 -0
- package/dist/checks/seo-basics.js +222 -0
- package/dist/checks/seo-basics.js.map +1 -0
- package/dist/checks/sitemap.d.ts +12 -0
- package/dist/checks/sitemap.d.ts.map +1 -0
- package/dist/checks/sitemap.js +241 -0
- package/dist/checks/sitemap.js.map +1 -0
- package/dist/checks/structured-data.js +1 -1
- package/dist/checks/structured-data.js.map +1 -1
- package/dist/checks/tls-https.d.ts +13 -0
- package/dist/checks/tls-https.d.ts.map +1 -0
- package/dist/checks/tls-https.js +164 -0
- package/dist/checks/tls-https.js.map +1 -0
- package/dist/checks/utils.d.ts +13 -1
- package/dist/checks/utils.d.ts.map +1 -1
- package/dist/checks/utils.js +28 -0
- package/dist/checks/utils.js.map +1 -1
- package/dist/checks/well-known-ai.d.ts +17 -0
- package/dist/checks/well-known-ai.d.ts.map +1 -0
- package/dist/checks/well-known-ai.js +123 -0
- package/dist/checks/well-known-ai.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +47 -1
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +19 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +47 -10
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/reporter/html.d.ts +2 -2
- package/dist/reporter/html.d.ts.map +1 -1
- package/dist/reporter/html.js +63 -7
- package/dist/reporter/html.js.map +1 -1
- package/dist/reporter/index.d.ts +2 -2
- package/dist/reporter/index.d.ts.map +1 -1
- package/dist/reporter/index.js +4 -4
- package/dist/reporter/index.js.map +1 -1
- package/dist/reporter/json.d.ts +2 -2
- package/dist/reporter/json.d.ts.map +1 -1
- package/dist/reporter/json.js +3 -2
- package/dist/reporter/json.js.map +1 -1
- package/dist/reporter/terminal.d.ts +2 -2
- package/dist/reporter/terminal.d.ts.map +1 -1
- package/dist/reporter/terminal.js +42 -3
- package/dist/reporter/terminal.js.map +1 -1
- package/dist/types.d.ts +27 -0
- package/dist/types.d.ts.map +1 -1
- 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":"
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -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[];
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -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,
|
|
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':
|
|
55
|
-
'robots-txt':
|
|
56
|
-
'
|
|
57
|
-
'
|
|
58
|
-
'
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
'
|
|
62
|
-
|
|
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' },
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAErF,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,CAAC,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,OAAO,2CAA2C,CAAC;AAE7F,MAAM,CAAC,MAAM,WAAW,GAA6B;IACnD,QAAQ,EAAE;QACR,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,cAAc;QACd,iBAAiB;QACjB,OAAO;QACP,YAAY;QACZ,oBAAoB;QACpB,sBAAsB;QACtB,WAAW;QACX,8BAA8B;QAC9B,mBAAmB;QACnB,WAAW;QACX,QAAQ;QACR,cAAc;QACd,aAAa;QACb,UAAU;QACV,SAAS;
|
|
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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/reporter/html.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/reporter/html.js
CHANGED
|
@@ -56,15 +56,23 @@ function renderFinding(f) {
|
|
|
56
56
|
</div>
|
|
57
57
|
</div>`;
|
|
58
58
|
}
|
|
59
|
-
function
|
|
59
|
+
function renderDeltaBadge(delta) {
|
|
60
|
+
if (delta === 0)
|
|
61
|
+
return '<span class="delta delta-neutral">—</span>';
|
|
62
|
+
if (delta > 0)
|
|
63
|
+
return `<span class="delta delta-up">▲${delta}</span>`;
|
|
64
|
+
return `<span class="delta delta-down">▼${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
|
|
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} → ${r.current} <span class="delta delta-down">▼${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} → ${imp.current} <span class="delta delta-up">▲${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} → ${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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/reporter/html.ts"],"names":[],"mappings":"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"}
|
package/dist/reporter/index.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/reporter/index.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/reporter/json.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/reporter/json.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export function reportJson(report) {
|
|
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));
|