@queryrev/ai-readiness 1.0.0 → 1.0.1

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/CITATION.cff CHANGED
@@ -8,7 +8,7 @@ abstract: >-
8
8
  and structured-data findings, each with its evidence. No model calls, no telemetry.
9
9
  authors:
10
10
  - name: 'QueryRev'
11
- version: 1.0.0
11
+ version: 1.0.1
12
12
  date-released: '2026-10-24'
13
13
  license: MIT
14
14
  repository-code: 'https://github.com/QueryRevAI/ai-readiness'
package/README.md CHANGED
@@ -169,6 +169,11 @@ npx @queryrev/ai-readiness check https://www.example.com --fail-on fail
169
169
 
170
170
  The `examples/` folder has a CI script that acts on the exit codes (`ci.sh`), a plain-Node consumer of the JSON (`read-report.mjs`), and a robots.txt with a script that tests it (`robots.txt`, `robots-check.sh`).
171
171
 
172
+ ## In an MCP client and in GitHub
173
+
174
+ - **MCP server.** [`@queryrev/ai-readiness-mcp`](https://www.npmjs.com/package/@queryrev/ai-readiness-mcp) offers the same checks as tools and works with any MCP client that starts a local server: `npx -y @queryrev/ai-readiness-mcp`. Each tool returns the document that `--json` prints. Its source is the `mcp/` folder of this repository.
175
+ - **GitHub Action.** [`QueryRevAI/ai-readiness-action`](https://github.com/QueryRevAI/ai-readiness-action) fails a pull request when a change to `robots.txt` or `llms.txt` closes the site to AI search crawlers. It is offline by default.
176
+
172
177
  ## Licences
173
178
 
174
179
  - The code is MIT (see `LICENSE`).
@@ -705,7 +705,7 @@ function isOnDomain(host, domain) {
705
705
  }
706
706
  // src/net/charset.ts
707
707
  /**
708
- * Reading a page's bytes as text. One decoder for the library and for the studies built on it,
708
+ * Reading a page's bytes as text. One decoder for the library and for any program that uses it,
709
709
  * so a page in windows-1251, Shift_JIS, GBK or EUC-KR is counted the same everywhere. The order
710
710
  * is the one browsers use, shortened: a byte order mark; the `charset` of the Content-Type
711
711
  * header; a `<meta charset>` or `<meta http-equiv="Content-Type">` in the first 2 KiB; else
@@ -1,4 +1,4 @@
1
- import { $ as looksLikeHtml, F as sitemapLocations, I as stripUnsafeCharacters, M as attributes, N as pageMeta, P as renderLlmsTxt, X as registrableDomain, _t as parseRobots, a as robotsRead, ct as crawlerAccess, f as READER_TOKEN, g as xRobotsNoindex, gt as matchRobots, ht as isAllowedByRobots, i as checkSite, it as CRAWLERS, j as PAGE_SCAN_MAX_CHARS, lt as crawlersCoveredLine, mt as crawlDelayFor, n as llmsFinding, nt as validateLlmsTxt, r as llmsFindings } from "./findings-_twhMw3_.js";
1
+ import { $ as looksLikeHtml, F as sitemapLocations, I as stripUnsafeCharacters, M as attributes, N as pageMeta, P as renderLlmsTxt, X as registrableDomain, _t as parseRobots, a as robotsRead, ct as crawlerAccess, f as READER_TOKEN, g as xRobotsNoindex, gt as matchRobots, ht as isAllowedByRobots, i as checkSite, it as CRAWLERS, j as PAGE_SCAN_MAX_CHARS, lt as crawlersCoveredLine, mt as crawlDelayFor, n as llmsFinding, nt as validateLlmsTxt, r as llmsFindings } from "./findings-CTetT2bF.js";
2
2
  import { a as GENERATE_BUDGET_MS, i as FETCH_LIMITS, m as createTextFetcher, n as CHECK_BUDGET_MS, p as checkTextUrl } from "./fetch-text-NUUnM91O.js";
3
3
  import { parseArgs } from "node:util";
4
4
  import { gunzipSync } from "node:zlib";
@@ -1353,7 +1353,7 @@ Reads public files only. Sends nothing to queryrev.com.
1353
1353
  // src/cli/main.ts
1354
1354
  var CLI_VERSION = {
1355
1355
  name: "@queryrev/ai-readiness",
1356
- version: "1.0.0",
1356
+ version: "1.0.1",
1357
1357
  description: "robots.txt parsing, AI crawler access verdicts, llms.txt checks and a guarded network layer. No model calls.",
1358
1358
  license: "MIT",
1359
1359
  author: "QueryRev",
@@ -1377,7 +1377,7 @@ var CLI_VERSION = {
1377
1377
  sideEffects: false,
1378
1378
  main: "./dist/index.js",
1379
1379
  types: "./dist/index.d.ts",
1380
- bin: { "ai-readiness": "./dist/cli.js" },
1380
+ bin: { "ai-readiness": "dist/cli.js" },
1381
1381
  exports: {
1382
1382
  ".": {
1383
1383
  "types": "./dist/index.d.ts",
@@ -1410,7 +1410,7 @@ var CLI_VERSION = {
1410
1410
  "build": "vite build --config vite.build.config.ts && node scripts/build-types.mjs",
1411
1411
  "prepublishOnly": "node scripts/check-publishable.mjs && npm run build",
1412
1412
  "typecheck": "tsc --noEmit",
1413
- "test": "vitest run"
1413
+ "test": "vitest run --dir src"
1414
1414
  },
1415
1415
  dependencies: { "undici": "^8.12.3" },
1416
1416
  devDependencies: {
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { n as runCli } from "./chunks/main-CJu6SE-W.js";
2
+ import { n as runCli } from "./chunks/main-Bd0uzoHe.js";
3
3
  import { n as createCliTextFetcher } from "./chunks/cli-BK65ic84.js";
4
4
  import { argv, env, stderr, stdout } from "node:process";
5
5
  import { open, writeFile } from "node:fs/promises";
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as looksLikeHtml, A as MAX_LOC_TAGS_SCANNED, B as CHALLENGE_MAX_WORDS, C as MAX_LD_DEPTH, Ct as EMPTY_SHELL_MIN_BYTES, D as MAX_LD_BLOCK_CHARS, E as MAX_LD_BLOCKS, F as sitemapLocations, G as isChallenge, H as INTERSTITIAL_MARKS, I as stripUnsafeCharacters, J as decodeHtml, K as isHomeChallenge, L as MAX_WORDS_COUNTED, N as pageMeta, O as MAX_LD_TOTAL_CHARS, P as renderLlmsTxt, Q as llmsStructure, R as countWords, S as SCHEMA_ORG_VERSION, St as EMPTY_SHELL_MAX_WORDS, T as HOME_SCAN_MAX_CHARS, Tt as isAppRoot, U as PLACEHOLDER_MARKS, V as HTML_MARKUP, W as PLACEHOLDER_MAX_WORDS, X as registrableDomain, Y as detectCharset, Z as LLMS_H1_MAX, _ as PROFILE_HOSTS, _t as parseRobots, at as CRAWLER_PURPOSES, b as ORGANIZATION_TYPES, bt as APP_ROOT_SELECTOR, c as MAX_LOCS_COUNTED, ct as crawlerAccess, d as readSitemapText, dt as ROBOTS_MAX_AGE_MS, et as looksLikeLlmsTxt, f as READER_TOKEN, ft as ROBOTS_MAX_BYTES, g as xRobotsNoindex, gt as matchRobots, h as readHomePage, ht as isAllowedByRobots, i as checkSite, it as CRAWLERS, k as MAIN_SECTION, l as SITEMAP_MAX_BYTES, lt as crawlersCoveredLine, m as TEXT_IN_HTML_MIN_WORDS, mt as crawlDelayFor, nt as validateLlmsTxt, o as FINDING_IDS, ot as STUDY_AGENTS, p as readHomeResponse, pt as ROBOTS_MAX_REDIRECTS, q as placeholderMark, r as llmsFindings, rt as AI_AGENTS, s as buildFindings, st as agentVerdict, t as LLMS_FINDING_IDS, tt as looksLikeRobotsTxt, u as readSitemap, ut as verdictsFor, v as PROFILE_KINDS, vt as APP_ROOT_ATTRIBUTES, w as MAX_LD_NODES, wt as JS_NOTICE, x as SCHEMA_ORG_SHA256, xt as APP_ROOT_TAG, y as profileKind, yt as APP_ROOT_IDS, z as CHALLENGE_MARKS } from "./chunks/findings-_twhMw3_.js";
1
+ import { $ as looksLikeHtml, A as MAX_LOC_TAGS_SCANNED, B as CHALLENGE_MAX_WORDS, C as MAX_LD_DEPTH, Ct as EMPTY_SHELL_MIN_BYTES, D as MAX_LD_BLOCK_CHARS, E as MAX_LD_BLOCKS, F as sitemapLocations, G as isChallenge, H as INTERSTITIAL_MARKS, I as stripUnsafeCharacters, J as decodeHtml, K as isHomeChallenge, L as MAX_WORDS_COUNTED, N as pageMeta, O as MAX_LD_TOTAL_CHARS, P as renderLlmsTxt, Q as llmsStructure, R as countWords, S as SCHEMA_ORG_VERSION, St as EMPTY_SHELL_MAX_WORDS, T as HOME_SCAN_MAX_CHARS, Tt as isAppRoot, U as PLACEHOLDER_MARKS, V as HTML_MARKUP, W as PLACEHOLDER_MAX_WORDS, X as registrableDomain, Y as detectCharset, Z as LLMS_H1_MAX, _ as PROFILE_HOSTS, _t as parseRobots, at as CRAWLER_PURPOSES, b as ORGANIZATION_TYPES, bt as APP_ROOT_SELECTOR, c as MAX_LOCS_COUNTED, ct as crawlerAccess, d as readSitemapText, dt as ROBOTS_MAX_AGE_MS, et as looksLikeLlmsTxt, f as READER_TOKEN, ft as ROBOTS_MAX_BYTES, g as xRobotsNoindex, gt as matchRobots, h as readHomePage, ht as isAllowedByRobots, i as checkSite, it as CRAWLERS, k as MAIN_SECTION, l as SITEMAP_MAX_BYTES, lt as crawlersCoveredLine, m as TEXT_IN_HTML_MIN_WORDS, mt as crawlDelayFor, nt as validateLlmsTxt, o as FINDING_IDS, ot as STUDY_AGENTS, p as readHomeResponse, pt as ROBOTS_MAX_REDIRECTS, q as placeholderMark, r as llmsFindings, rt as AI_AGENTS, s as buildFindings, st as agentVerdict, t as LLMS_FINDING_IDS, tt as looksLikeRobotsTxt, u as readSitemap, ut as verdictsFor, v as PROFILE_KINDS, vt as APP_ROOT_ATTRIBUTES, w as MAX_LD_NODES, wt as JS_NOTICE, x as SCHEMA_ORG_SHA256, xt as APP_ROOT_TAG, y as profileKind, yt as APP_ROOT_IDS, z as CHALLENGE_MARKS } from "./chunks/findings-CTetT2bF.js";
2
2
  import { C as classifyAddress, S as systemResolver, _ as NetworkGuardError, a as GENERATE_BUDGET_MS, c as MAX_CRAWL_DELAY_SECONDS, d as REQUEST_TIMEOUT_MS, g as DNS_TIMEOUT_MS, h as CRAWL_PORTS, i as FETCH_LIMITS, l as MAX_HOST_LENGTH, m as createTextFetcher, n as CHECK_BUDGET_MS, o as HOST_INTERVAL_MS, r as CONNECT_TIMEOUT_MS, s as KEPT_HEADERS, t as AI_READINESS_USER_AGENT, u as MAX_REDIRECTS, x as guardedConnector, y as createNetworkGuard } from "./chunks/fetch-text-NUUnM91O.js";
3
3
  // src/facts/schema-org-types.ts
4
4
  /** Every type of schema.org 30.1 (classes and data types), sorted. */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Reading a page's bytes as text. One decoder for the library and for the studies built on it,
2
+ * Reading a page's bytes as text. One decoder for the library and for any program that uses it,
3
3
  * so a page in windows-1251, Shift_JIS, GBK or EUC-KR is counted the same everywhere. The order
4
4
  * is the one browsers use, shortened: a byte order mark; the `charset` of the Content-Type
5
5
  * header; a `<meta charset>` or `<meta http-equiv="Content-Type">` in the first 2 KiB; else
package/dist/run.js CHANGED
@@ -1 +1 @@
1
- export { t as CLI_VERSION, n as runCli } from "./chunks/main-CJu6SE-W.js";
1
+ export { t as CLI_VERSION, n as runCli } from "./chunks/main-Bd0uzoHe.js";
package/package.json CHANGED
@@ -1,80 +1,80 @@
1
- {
2
- "name": "@queryrev/ai-readiness",
3
- "version": "1.0.0",
4
- "description": "robots.txt parsing, AI crawler access verdicts, llms.txt checks and a guarded network layer. No model calls.",
5
- "license": "MIT",
6
- "author": "QueryRev",
7
- "homepage": "https://queryrev.com/research/ai-search-readiness",
8
- "repository": {
9
- "type": "git",
10
- "url": "git+https://github.com/QueryRevAI/ai-readiness.git"
11
- },
12
- "bugs": {
13
- "url": "https://github.com/QueryRevAI/ai-readiness/issues"
14
- },
15
- "keywords": [
16
- "robots.txt",
17
- "llms.txt",
18
- "ai-crawlers",
19
- "geo",
20
- "aeo",
21
- "seo",
22
- "cli"
23
- ],
24
- "type": "module",
25
- "engines": {
26
- "node": ">=22.19"
27
- },
28
- "sideEffects": false,
29
- "main": "./dist/index.js",
30
- "types": "./dist/index.d.ts",
31
- "bin": {
32
- "ai-readiness": "./dist/cli.js"
33
- },
34
- "exports": {
35
- ".": {
36
- "types": "./dist/index.d.ts",
37
- "default": "./dist/index.js"
38
- },
39
- "./cli": {
40
- "types": "./dist/net/cli.d.ts",
41
- "default": "./dist/net-cli.js"
42
- },
43
- "./run": {
44
- "types": "./dist/cli/run.d.ts",
45
- "default": "./dist/run.js"
46
- },
47
- "./testing": {
48
- "types": "./dist/net/testing/index.d.ts",
49
- "default": "./dist/testing.js"
50
- },
51
- "./package.json": "./package.json"
52
- },
53
- "files": [
54
- "dist",
55
- "data",
56
- "README.md",
57
- "LICENSE",
58
- "CITATION.cff",
59
- "SECURITY.md"
60
- ],
61
- "publishConfig": {
62
- "access": "public"
63
- },
64
- "scripts": {
65
- "build": "vite build --config vite.build.config.ts && node scripts/build-types.mjs",
66
- "prepublishOnly": "node scripts/check-publishable.mjs && npm run build",
67
- "typecheck": "tsc --noEmit",
68
- "test": "vitest run"
69
- },
70
- "dependencies": {
71
- "undici": "^8.12.3"
72
- },
73
- "devDependencies": {
74
- "@types/node": "^24.0.0",
75
- "eslint": "^9.39.5",
76
- "typescript": "~6.0.3",
77
- "vite": "^8.3.4",
78
- "vitest": "^5.0.3"
79
- }
80
- }
1
+ {
2
+ "name": "@queryrev/ai-readiness",
3
+ "version": "1.0.1",
4
+ "description": "robots.txt parsing, AI crawler access verdicts, llms.txt checks and a guarded network layer. No model calls.",
5
+ "license": "MIT",
6
+ "author": "QueryRev",
7
+ "homepage": "https://queryrev.com/research/ai-search-readiness",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/QueryRevAI/ai-readiness.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/QueryRevAI/ai-readiness/issues"
14
+ },
15
+ "keywords": [
16
+ "robots.txt",
17
+ "llms.txt",
18
+ "ai-crawlers",
19
+ "geo",
20
+ "aeo",
21
+ "seo",
22
+ "cli"
23
+ ],
24
+ "type": "module",
25
+ "engines": {
26
+ "node": ">=22.19"
27
+ },
28
+ "sideEffects": false,
29
+ "main": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
31
+ "bin": {
32
+ "ai-readiness": "dist/cli.js"
33
+ },
34
+ "exports": {
35
+ ".": {
36
+ "types": "./dist/index.d.ts",
37
+ "default": "./dist/index.js"
38
+ },
39
+ "./cli": {
40
+ "types": "./dist/net/cli.d.ts",
41
+ "default": "./dist/net-cli.js"
42
+ },
43
+ "./run": {
44
+ "types": "./dist/cli/run.d.ts",
45
+ "default": "./dist/run.js"
46
+ },
47
+ "./testing": {
48
+ "types": "./dist/net/testing/index.d.ts",
49
+ "default": "./dist/testing.js"
50
+ },
51
+ "./package.json": "./package.json"
52
+ },
53
+ "files": [
54
+ "dist",
55
+ "data",
56
+ "README.md",
57
+ "LICENSE",
58
+ "CITATION.cff",
59
+ "SECURITY.md"
60
+ ],
61
+ "publishConfig": {
62
+ "access": "public"
63
+ },
64
+ "scripts": {
65
+ "build": "vite build --config vite.build.config.ts && node scripts/build-types.mjs",
66
+ "prepublishOnly": "node scripts/check-publishable.mjs && npm run build",
67
+ "typecheck": "tsc --noEmit",
68
+ "test": "vitest run --dir src"
69
+ },
70
+ "dependencies": {
71
+ "undici": "^8.12.3"
72
+ },
73
+ "devDependencies": {
74
+ "@types/node": "^24.0.0",
75
+ "eslint": "^9.39.5",
76
+ "typescript": "~6.0.3",
77
+ "vite": "^8.3.4",
78
+ "vitest": "^5.0.3"
79
+ }
80
+ }