afdocs 0.1.3 → 0.2.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 (66) hide show
  1. package/README.md +39 -21
  2. package/dist/checks/authentication/auth-alternative-access.d.ts +2 -0
  3. package/dist/checks/authentication/auth-alternative-access.d.ts.map +1 -0
  4. package/dist/checks/authentication/auth-alternative-access.js +17 -0
  5. package/dist/checks/authentication/auth-alternative-access.js.map +1 -0
  6. package/dist/checks/authentication/auth-gate-detection.d.ts +2 -0
  7. package/dist/checks/authentication/auth-gate-detection.d.ts.map +1 -0
  8. package/dist/checks/authentication/auth-gate-detection.js +17 -0
  9. package/dist/checks/authentication/auth-gate-detection.js.map +1 -0
  10. package/dist/checks/index.d.ts +2 -0
  11. package/dist/checks/index.d.ts.map +1 -1
  12. package/dist/checks/index.js +3 -0
  13. package/dist/checks/index.js.map +1 -1
  14. package/dist/checks/llms-txt/llms-txt-exists.js +83 -6
  15. package/dist/checks/llms-txt/llms-txt-exists.js.map +1 -1
  16. package/dist/checks/llms-txt/llms-txt-links-markdown.js +46 -21
  17. package/dist/checks/llms-txt/llms-txt-links-markdown.js.map +1 -1
  18. package/dist/checks/llms-txt/llms-txt-links-resolve.js +10 -3
  19. package/dist/checks/llms-txt/llms-txt-links-resolve.js.map +1 -1
  20. package/dist/checks/markdown-availability/content-negotiation.js +101 -5
  21. package/dist/checks/markdown-availability/content-negotiation.js.map +1 -1
  22. package/dist/checks/markdown-availability/markdown-url-support.js +82 -5
  23. package/dist/checks/markdown-availability/markdown-url-support.js.map +1 -1
  24. package/dist/checks/page-size/content-start-position.js +161 -5
  25. package/dist/checks/page-size/content-start-position.js.map +1 -1
  26. package/dist/checks/page-size/page-size-html.js +127 -5
  27. package/dist/checks/page-size/page-size-html.js.map +1 -1
  28. package/dist/checks/page-size/page-size-markdown.js +183 -5
  29. package/dist/checks/page-size/page-size-markdown.js.map +1 -1
  30. package/dist/cli/commands/check.d.ts.map +1 -1
  31. package/dist/cli/commands/check.js +9 -1
  32. package/dist/cli/commands/check.js.map +1 -1
  33. package/dist/cli/formatters/text.d.ts +4 -1
  34. package/dist/cli/formatters/text.d.ts.map +1 -1
  35. package/dist/cli/formatters/text.js +94 -1
  36. package/dist/cli/formatters/text.js.map +1 -1
  37. package/dist/constants.d.ts +6 -0
  38. package/dist/constants.d.ts.map +1 -1
  39. package/dist/constants.js +3 -0
  40. package/dist/constants.js.map +1 -1
  41. package/dist/helpers/detect-markdown.d.ts +10 -0
  42. package/dist/helpers/detect-markdown.d.ts.map +1 -0
  43. package/dist/helpers/detect-markdown.js +29 -0
  44. package/dist/helpers/detect-markdown.js.map +1 -0
  45. package/dist/helpers/get-page-urls.d.ts +39 -0
  46. package/dist/helpers/get-page-urls.d.ts.map +1 -0
  47. package/dist/helpers/get-page-urls.js +230 -0
  48. package/dist/helpers/get-page-urls.js.map +1 -0
  49. package/dist/helpers/html-to-markdown.d.ts +7 -0
  50. package/dist/helpers/html-to-markdown.d.ts.map +1 -0
  51. package/dist/helpers/html-to-markdown.js +11 -0
  52. package/dist/helpers/html-to-markdown.js.map +1 -0
  53. package/dist/helpers/index.d.ts +5 -0
  54. package/dist/helpers/index.d.ts.map +1 -1
  55. package/dist/helpers/index.js +4 -0
  56. package/dist/helpers/index.js.map +1 -1
  57. package/dist/helpers/to-md-urls.d.ts +7 -0
  58. package/dist/helpers/to-md-urls.d.ts.map +1 -0
  59. package/dist/helpers/to-md-urls.js +24 -0
  60. package/dist/helpers/to-md-urls.js.map +1 -0
  61. package/dist/runner.d.ts.map +1 -1
  62. package/dist/runner.js +21 -14
  63. package/dist/runner.js.map +1 -1
  64. package/dist/types.d.ts +10 -1
  65. package/dist/types.d.ts.map +1 -1
  66. package/package.json +4 -2
@@ -1,10 +1,188 @@
1
1
  import { registerCheck } from '../registry.js';
2
- async function check(_ctx) {
2
+ import { looksLikeMarkdown } from '../../helpers/detect-markdown.js';
3
+ import { discoverAndSamplePages } from '../../helpers/get-page-urls.js';
4
+ import { toMdUrls } from '../../helpers/to-md-urls.js';
5
+ function sizeStatus(chars, pass, fail) {
6
+ if (chars <= pass)
7
+ return 'pass';
8
+ if (chars <= fail)
9
+ return 'warn';
10
+ return 'fail';
11
+ }
12
+ function worstStatus(statuses) {
13
+ if (statuses.includes('fail'))
14
+ return 'fail';
15
+ if (statuses.includes('warn'))
16
+ return 'warn';
17
+ return 'pass';
18
+ }
19
+ async function check(ctx) {
20
+ const id = 'page-size-markdown';
21
+ const category = 'page-size';
22
+ const { pass: passThreshold, fail: failThreshold } = ctx.options.thresholds;
23
+ // Check if dependency checks ran
24
+ const mdUrlResult = ctx.previousResults.get('markdown-url-support');
25
+ const cnResult = ctx.previousResults.get('content-negotiation');
26
+ const depRan = mdUrlResult || cnResult;
27
+ if (depRan) {
28
+ // At least one dependency check ran. Did either pass or warn?
29
+ const depPassed = (mdUrlResult && (mdUrlResult.status === 'pass' || mdUrlResult.status === 'warn')) ||
30
+ (cnResult && (cnResult.status === 'pass' || cnResult.status === 'warn'));
31
+ if (!depPassed) {
32
+ return {
33
+ id,
34
+ category,
35
+ status: 'skip',
36
+ message: 'Site does not serve markdown; skipping markdown size check',
37
+ };
38
+ }
39
+ // Build a map from page URL → markdown URL using dependency results
40
+ const mdUrlMap = new Map();
41
+ const mdUrlPages = mdUrlResult?.details?.pageResults;
42
+ if (mdUrlPages) {
43
+ for (const p of mdUrlPages) {
44
+ if (p.supported)
45
+ mdUrlMap.set(p.url, p.mdUrl);
46
+ }
47
+ }
48
+ // Use cached pages
49
+ const pageResults = [];
50
+ for (const [, cached] of ctx.pageCache) {
51
+ if (cached.markdown) {
52
+ const chars = cached.markdown.content.length;
53
+ const resolvedMdUrl = cached.markdown.source === 'md-url'
54
+ ? (mdUrlMap.get(cached.url) ?? cached.url)
55
+ : cached.url;
56
+ pageResults.push({
57
+ url: cached.url,
58
+ mdUrl: resolvedMdUrl,
59
+ characters: chars,
60
+ status: sizeStatus(chars, passThreshold, failThreshold),
61
+ source: 'cache',
62
+ });
63
+ }
64
+ }
65
+ if (pageResults.length === 0) {
66
+ return {
67
+ id,
68
+ category,
69
+ status: 'skip',
70
+ message: 'No cached markdown pages available to measure',
71
+ };
72
+ }
73
+ return buildResult(id, category, pageResults, pageResults.length, false, passThreshold, failThreshold, []);
74
+ }
75
+ // Standalone mode: dependency checks never ran
76
+ const { urls: pageUrls, totalPages, sampled: wasSampled, warnings, } = await discoverAndSamplePages(ctx);
77
+ const pageResults = [];
78
+ const concurrency = ctx.options.maxConcurrency;
79
+ for (let i = 0; i < pageUrls.length; i += concurrency) {
80
+ const batch = pageUrls.slice(i, i + concurrency);
81
+ const batchResults = await Promise.all(batch.map(async (url) => {
82
+ // Try .md URL candidates
83
+ const candidates = toMdUrls(url);
84
+ for (const candidateUrl of candidates) {
85
+ try {
86
+ const response = await ctx.http.fetch(candidateUrl);
87
+ if (!response.ok)
88
+ continue;
89
+ const body = await response.text();
90
+ if (looksLikeMarkdown(body)) {
91
+ const chars = body.length;
92
+ return {
93
+ url,
94
+ mdUrl: candidateUrl,
95
+ characters: chars,
96
+ status: sizeStatus(chars, passThreshold, failThreshold),
97
+ source: 'fallback',
98
+ };
99
+ }
100
+ }
101
+ catch {
102
+ // Try next candidate
103
+ }
104
+ }
105
+ // Try content negotiation
106
+ try {
107
+ const response = await ctx.http.fetch(url, {
108
+ headers: { Accept: 'text/markdown' },
109
+ });
110
+ if (response.ok) {
111
+ const body = await response.text();
112
+ if (looksLikeMarkdown(body)) {
113
+ const chars = body.length;
114
+ return {
115
+ url,
116
+ mdUrl: url,
117
+ characters: chars,
118
+ status: sizeStatus(chars, passThreshold, failThreshold),
119
+ source: 'fallback',
120
+ };
121
+ }
122
+ }
123
+ }
124
+ catch {
125
+ // No markdown available for this page
126
+ }
127
+ return null;
128
+ }));
129
+ for (const r of batchResults) {
130
+ if (r)
131
+ pageResults.push(r);
132
+ }
133
+ }
134
+ if (pageResults.length === 0) {
135
+ return {
136
+ id,
137
+ category,
138
+ status: 'skip',
139
+ message: 'No markdown content found; skipping size check',
140
+ };
141
+ }
142
+ return buildResult(id, category, pageResults, totalPages, wasSampled, passThreshold, failThreshold, warnings);
143
+ }
144
+ function buildResult(id, category, pageResults, totalPages, sampled, passThreshold, failThreshold, discoveryWarnings) {
145
+ const sizes = pageResults.map((r) => r.characters).sort((a, b) => a - b);
146
+ const median = sizes[Math.floor(sizes.length / 2)];
147
+ const max = sizes[sizes.length - 1];
148
+ const passBucket = pageResults.filter((r) => r.status === 'pass').length;
149
+ const warnBucket = pageResults.filter((r) => r.status === 'warn').length;
150
+ const failBucket = pageResults.filter((r) => r.status === 'fail').length;
151
+ const overallStatus = worstStatus(pageResults.map((r) => r.status));
152
+ const pageLabel = sampled ? 'sampled pages' : 'pages';
153
+ const formatSize = (chars) => {
154
+ if (chars >= 1000)
155
+ return `${Math.round(chars / 1000)}K`;
156
+ return String(chars);
157
+ };
158
+ let message;
159
+ if (overallStatus === 'pass') {
160
+ message = `All ${pageResults.length} ${pageLabel} under ${formatSize(passThreshold)} chars (median ${formatSize(median)}, max ${formatSize(max)})`;
161
+ }
162
+ else if (overallStatus === 'warn') {
163
+ message = `${warnBucket} of ${pageResults.length} ${pageLabel} between ${formatSize(passThreshold)}–${formatSize(failThreshold)} chars (max ${formatSize(max)})`;
164
+ }
165
+ else {
166
+ message = `${failBucket} of ${pageResults.length} ${pageLabel} exceed ${formatSize(failThreshold)} chars (max ${formatSize(max)})`;
167
+ }
3
168
  return {
4
- id: 'page-size-markdown',
5
- category: 'page-size',
6
- status: 'skip',
7
- message: 'Not yet implemented',
169
+ id,
170
+ category,
171
+ status: overallStatus,
172
+ message,
173
+ details: {
174
+ totalPages,
175
+ testedPages: pageResults.length,
176
+ sampled,
177
+ median,
178
+ max,
179
+ passBucket,
180
+ warnBucket,
181
+ failBucket,
182
+ thresholds: { pass: passThreshold, fail: failThreshold },
183
+ pageResults,
184
+ discoveryWarnings,
185
+ },
8
186
  };
9
187
  }
10
188
  registerCheck({
@@ -1 +1 @@
1
- {"version":3,"file":"page-size-markdown.js","sourceRoot":"","sources":["../../../src/checks/page-size/page-size-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,KAAK,UAAU,KAAK,CAAC,IAAkB;IACrC,OAAO;QACL,EAAE,EAAE,oBAAoB;QACxB,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,qBAAqB;KAC/B,CAAC;AACJ,CAAC;AAED,aAAa,CAAC;IACZ,EAAE,EAAE,oBAAoB;IACxB,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,iDAAiD;IAC9D,SAAS,EAAE,CAAC,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,CAAC;IAC5D,GAAG,EAAE,KAAK;CACX,CAAC,CAAC"}
1
+ {"version":3,"file":"page-size-markdown.js","sourceRoot":"","sources":["../../../src/checks/page-size/page-size-markdown.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,uBAAuB,CAAC;AAE/B,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkC3D"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,uBAAuB,CAAC;AAE/B,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C3D"}
@@ -14,8 +14,14 @@ export function registerCheckCommand(program) {
14
14
  .option('--max-links <n>', 'Maximum links to test', '50')
15
15
  .option('--pass-threshold <n>', 'Pass threshold in characters', '50000')
16
16
  .option('--fail-threshold <n>', 'Fail threshold in characters', '100000')
17
+ .option('-v, --verbose', 'Show per-page details for checks with issues')
17
18
  .action(async (url, opts) => {
18
19
  const checkIds = opts.checks ? opts.checks.split(',').map((s) => s.trim()) : undefined;
20
+ const isText = opts.format !== 'json';
21
+ if (isText) {
22
+ const domain = new URL(url).hostname;
23
+ process.stderr.write(`Running checks on ${domain}...\n`);
24
+ }
19
25
  const report = await runChecks(url, {
20
26
  checkIds,
21
27
  maxConcurrency: parseInt(opts.maxConcurrency, 10),
@@ -26,7 +32,9 @@ export function registerCheckCommand(program) {
26
32
  fail: parseInt(opts.failThreshold, 10),
27
33
  },
28
34
  });
29
- const output = opts.format === 'json' ? formatJson(report) : formatText(report);
35
+ const output = opts.format === 'json'
36
+ ? formatJson(report)
37
+ : formatText(report, { verbose: !!opts.verbose });
30
38
  process.stdout.write(output + '\n');
31
39
  // Exit 1 if any check failed
32
40
  const hasFailure = report.results.some((r) => r.status === 'fail');
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,mCAAmC;AACnC,OAAO,uBAAuB,CAAC;AAE/B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;SAC3E,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,GAAG,CAAC;SACnE,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,KAAK,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,IAAI,CAAC;SACxD,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,OAAO,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,QAAQ,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAA4B,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YAClC,QAAQ;YACR,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACjD,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YAC7C,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;gBACtC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;aACvC;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAEpC,6BAA6B;QAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACnE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,mCAAmC;AACnC,OAAO,uBAAuB,CAAC;AAE/B,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,uDAAuD,CAAC;SACpE,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,MAAM,CAAC;SACtE,MAAM,CAAC,uBAAuB,EAAE,0CAA0C,CAAC;SAC3E,MAAM,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,GAAG,CAAC;SACnE,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,KAAK,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,IAAI,CAAC;SACxD,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,OAAO,CAAC;SACvE,MAAM,CAAC,sBAAsB,EAAE,8BAA8B,EAAE,QAAQ,CAAC;SACxE,MAAM,CAAC,eAAe,EAAE,8CAA8C,CAAC;SACvE,MAAM,CAAC,KAAK,EAAE,GAAW,EAAE,IAA4B,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QAEtC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;YACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,OAAO,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE;YAClC,QAAQ;YACR,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YACjD,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YAC7C,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3C,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;gBACtC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;aACvC;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,KAAK,MAAM;YACpB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;YACpB,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAEpC,6BAA6B;QAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;QACnE,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,3 +1,6 @@
1
1
  import type { ReportResult } from '../../types.js';
2
- export declare function formatText(report: ReportResult): string;
2
+ export interface FormatTextOptions {
3
+ verbose?: boolean;
4
+ }
5
+ export declare function formatText(report: ReportResult, options?: FormatTextOptions): string;
3
6
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,gBAAgB,CAAC;AAwBhE,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAqCvD"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/cli/formatters/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,gBAAgB,CAAC;AAgIhE,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAyCpF"}
@@ -13,12 +13,102 @@ const STATUS_COLORS = {
13
13
  skip: chalk.gray,
14
14
  error: chalk.red,
15
15
  };
16
+ function formatSize(chars) {
17
+ if (chars >= 1000)
18
+ return `${Math.round(chars / 1000)}K chars`;
19
+ return `${chars} chars`;
20
+ }
21
+ const DETAIL_FORMATTERS = {
22
+ 'page-size-html': (details) => {
23
+ const pages = details.pageResults;
24
+ if (!pages)
25
+ return [];
26
+ return pages
27
+ .filter((p) => p.status !== 'pass')
28
+ .map((p) => {
29
+ const size = formatSize(p.convertedCharacters);
30
+ return formatDetailLine(p.status, p.url, size);
31
+ });
32
+ },
33
+ 'page-size-markdown': (details) => {
34
+ const pages = details.pageResults;
35
+ if (!pages)
36
+ return [];
37
+ return pages
38
+ .filter((p) => p.status !== 'pass')
39
+ .map((p) => {
40
+ const size = formatSize(p.characters);
41
+ const displayUrl = p.mdUrl ?? p.url;
42
+ return formatDetailLine(p.status, displayUrl, size);
43
+ });
44
+ },
45
+ 'content-start-position': (details) => {
46
+ const pages = details.pageResults;
47
+ if (!pages)
48
+ return [];
49
+ return pages
50
+ .filter((p) => p.status !== 'pass')
51
+ .map((p) => {
52
+ const pct = `${p.contentStartPercent}%`;
53
+ return formatDetailLine(p.status, p.url, pct);
54
+ });
55
+ },
56
+ 'markdown-url-support': (details) => {
57
+ const pages = details.pageResults;
58
+ if (!pages)
59
+ return [];
60
+ return pages
61
+ .filter((p) => p.status !== 'pass')
62
+ .map((p) => formatDetailLine(p.status, p.url, 'no .md URL found'));
63
+ },
64
+ 'content-negotiation': (details) => {
65
+ const pages = details.pageResults;
66
+ if (!pages)
67
+ return [];
68
+ return pages
69
+ .filter((p) => p.status !== 'pass')
70
+ .map((p) => {
71
+ const classification = p.classification ?? '';
72
+ return formatDetailLine(p.status, p.url, classification);
73
+ });
74
+ },
75
+ 'llms-txt-links-resolve': (details) => {
76
+ const broken = details.broken;
77
+ if (!broken)
78
+ return [];
79
+ return broken.map((b) => {
80
+ const info = b.error ?? `HTTP ${b.status}`;
81
+ return formatDetailLine('fail', b.url, info);
82
+ });
83
+ },
84
+ };
85
+ function formatDetailLine(status, url, metric) {
86
+ const icon = STATUS_ICONS[status] ?? STATUS_ICONS.warn;
87
+ return ` ${icon} ${url} ${chalk.dim(metric)}`;
88
+ }
16
89
  function formatResult(result) {
17
90
  const icon = STATUS_ICONS[result.status] ?? '?';
18
91
  const color = STATUS_COLORS[result.status] ?? ((s) => s);
19
92
  return ` ${icon} ${color(result.id)}: ${result.message}`;
20
93
  }
21
- export function formatText(report) {
94
+ function formatVerboseDetails(result) {
95
+ if (!result.details)
96
+ return [];
97
+ const lines = [];
98
+ const formatter = DETAIL_FORMATTERS[result.id];
99
+ if (formatter) {
100
+ lines.push(...formatter(result.details));
101
+ }
102
+ const warnings = result.details.discoveryWarnings;
103
+ if (warnings && warnings.length > 0) {
104
+ for (const w of warnings) {
105
+ lines.push(` ${chalk.yellow('⚠')} ${chalk.dim(w)}`);
106
+ }
107
+ }
108
+ return lines;
109
+ }
110
+ export function formatText(report, options) {
111
+ const verbose = options?.verbose ?? false;
22
112
  const lines = [];
23
113
  lines.push('');
24
114
  lines.push(chalk.bold(`Agent-Friendly Docs Check: ${report.url}`));
@@ -35,6 +125,9 @@ export function formatText(report) {
35
125
  lines.push(chalk.bold.underline(category));
36
126
  for (const result of results) {
37
127
  lines.push(formatResult(result));
128
+ if (verbose) {
129
+ lines.push(...formatVerboseDetails(result));
130
+ }
38
131
  }
39
132
  lines.push('');
40
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/cli/formatters/text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/cli/formatters/text.ts"],"names":[],"mappings":"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"}
@@ -29,8 +29,14 @@ export declare const CATEGORIES: readonly [{
29
29
  readonly id: "observability";
30
30
  readonly name: "Observability and Content Health";
31
31
  readonly order: 7;
32
+ }, {
33
+ readonly id: "authentication";
34
+ readonly name: "Authentication and Access";
35
+ readonly order: 8;
32
36
  }];
33
37
  export declare const CATEGORY_ORDER: Record<string, number>;
34
38
  /** Link resolution threshold: warn if > 90% resolve, fail if <= 90%. */
35
39
  export declare const LINK_RESOLVE_THRESHOLD = 0.9;
40
+ /** Maximum number of URLs to collect from sitemaps before stopping. */
41
+ export declare const MAX_SITEMAP_URLS = 500;
36
42
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,cAGhC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAM7B,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQb,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAEjD,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,MAAM,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,kBAAkB,EAAE,cAGhC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAM7B,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASb,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAEjD,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,gBAAgB,MAAM,CAAC"}
package/dist/constants.js CHANGED
@@ -17,8 +17,11 @@ export const CATEGORIES = [
17
17
  { id: 'url-stability', name: 'URL Stability and Redirects', order: 5 },
18
18
  { id: 'agent-discoverability', name: 'Agent Discoverability Directives', order: 6 },
19
19
  { id: 'observability', name: 'Observability and Content Health', order: 7 },
20
+ { id: 'authentication', name: 'Authentication and Access', order: 8 },
20
21
  ];
21
22
  export const CATEGORY_ORDER = Object.fromEntries(CATEGORIES.map((c) => [c.id, c.order]));
22
23
  /** Link resolution threshold: warn if > 90% resolve, fail if <= 90%. */
23
24
  export const LINK_RESOLVE_THRESHOLD = 0.9;
25
+ /** Maximum number of URLs to collect from sitemaps before stopping. */
26
+ export const MAX_SITEMAP_URLS = 500;
24
27
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,GAAG;IACjB,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,kBAAkB;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;IAC9C,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IACxE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE;IACpE,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;IAChE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE;IACtE,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE;IACnF,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE;CACnE,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAA2B,MAAM,CAAC,WAAW,CACtE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CACvC,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAmB;IAChD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,OAAO;CACd,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAiB;IAC3C,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,GAAG;IACjB,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,kBAAkB;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;IAC9C,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IACxE,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE;IACpE,EAAE,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE;IAChE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC,EAAE;IACtE,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE;IACnF,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,kCAAkC,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3E,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE;CAC7D,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAA2B,MAAM,CAAC,WAAW,CACtE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CACvC,CAAC;AAEF,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,uEAAuE;AACvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Returns true if the body looks like HTML (contains DOCTYPE, <html>, <head>, or <body> tags).
3
+ */
4
+ export declare function looksLikeHtml(body: string): boolean;
5
+ /**
6
+ * Returns true if the body looks like markdown content (has headings, links, or code fences)
7
+ * and does NOT look like HTML.
8
+ */
9
+ export declare function looksLikeMarkdown(body: string): boolean;
10
+ //# sourceMappingURL=detect-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-markdown.d.ts","sourceRoot":"","sources":["../../src/helpers/detect-markdown.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUvD"}
@@ -0,0 +1,29 @@
1
+ const HTML_PATTERNS = [/<!doctype\s/i, /<html[\s>]/i, /<head[\s>]/i, /<body[\s>]/i];
2
+ const MD_HEADING = /^#{1,6}\s+\S/m;
3
+ const MD_LINK = /\[[^\]]+\]\([^)]+\)/;
4
+ const MD_CODE_FENCE = /^```/m;
5
+ /**
6
+ * Returns true if the body looks like HTML (contains DOCTYPE, <html>, <head>, or <body> tags).
7
+ */
8
+ export function looksLikeHtml(body) {
9
+ const sample = body.slice(0, 2000);
10
+ return HTML_PATTERNS.some((p) => p.test(sample));
11
+ }
12
+ /**
13
+ * Returns true if the body looks like markdown content (has headings, links, or code fences)
14
+ * and does NOT look like HTML.
15
+ */
16
+ export function looksLikeMarkdown(body) {
17
+ if (looksLikeHtml(body))
18
+ return false;
19
+ const sample = body.slice(0, 5000);
20
+ let signals = 0;
21
+ if (MD_HEADING.test(sample))
22
+ signals++;
23
+ if (MD_LINK.test(sample))
24
+ signals++;
25
+ if (MD_CODE_FENCE.test(sample))
26
+ signals++;
27
+ return signals >= 1;
28
+ }
29
+ //# sourceMappingURL=detect-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-markdown.js","sourceRoot":"","sources":["../../src/helpers/detect-markdown.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAEpF,MAAM,UAAU,GAAG,eAAe,CAAC;AACnC,MAAM,OAAO,GAAG,qBAAqB,CAAC;AACtC,MAAM,aAAa,GAAG,OAAO,CAAC;AAE9B;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,aAAa,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1C,OAAO,OAAO,IAAI,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { CheckContext } from '../types.js';
2
+ /**
3
+ * Extract `<loc>` URLs from a sitemap XML string.
4
+ * Also returns any `<sitemap><loc>` entries from sitemap index files.
5
+ */
6
+ export declare function parseSitemapUrls(xml: string): {
7
+ urls: string[];
8
+ sitemapIndexUrls: string[];
9
+ };
10
+ /**
11
+ * Parse `Sitemap:` directives from a robots.txt body.
12
+ * Returns an array of sitemap URLs found.
13
+ */
14
+ export declare function parseSitemapDirectives(robotsTxt: string): string[];
15
+ export interface PageUrlResult {
16
+ urls: string[];
17
+ warnings: string[];
18
+ }
19
+ /**
20
+ * Discover page URLs from llms.txt links, sitemap, or fall back to baseUrl.
21
+ *
22
+ * Priority:
23
+ * 1. llms.txt links (from previous check results)
24
+ * 2. Sitemap URLs (robots.txt Sitemap directives, then /sitemap.xml fallback)
25
+ * 3. baseUrl fallback
26
+ */
27
+ export declare function getPageUrls(ctx: CheckContext): Promise<PageUrlResult>;
28
+ export interface SampledPages {
29
+ urls: string[];
30
+ totalPages: number;
31
+ sampled: boolean;
32
+ warnings: string[];
33
+ }
34
+ /**
35
+ * Discover page URLs and sample down to maxLinksToTest if needed.
36
+ * Consolidates the discover+shuffle+sample pattern used by multiple checks.
37
+ */
38
+ export declare function discoverAndSamplePages(ctx: CheckContext): Promise<SampledPages>;
39
+ //# sourceMappingURL=get-page-urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-page-urls.d.ts","sourceRoot":"","sources":["../../src/helpers/get-page-urls.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAEhE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAAE,CA2B5F;AAyDD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CASlE;AAsBD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAmB3E;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAerF"}