@canonry/canonry 4.167.0 → 4.167.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/README.md CHANGED
@@ -41,33 +41,45 @@ The dashboard, CLI, and agent tools share the same project API.
41
41
 
42
42
  You need Node.js `>=22.14` and `<26`, plus a public, crawlable site. Site Health does not need an answer-provider key.
43
43
 
44
- ```bash
45
- npm install -g @canonry/canonry
46
- cnry bootstrap
47
- cnry serve
48
- ```
44
+ 1. Install Canonry.
49
45
 
50
- `cnry bootstrap` creates the local configuration, SQLite database, and full-instance API key. Keep its output private. Provider credentials are optional. Bootstrap imports supported variables already in your environment.
46
+ ```bash
47
+ npm install -g @canonry/canonry
48
+ ```
51
49
 
52
- Open [http://127.0.0.1:4100/setup](http://127.0.0.1:4100/setup). By default, the first open asks you to create a dashboard password. Enter your domain and approve the public-site crawl to build a persisted Page Health baseline. AI Visibility is optional.
50
+ 2. Create the local configuration, SQLite database, and full-instance API key.
53
51
 
54
- To use the terminal instead of the setup page, keep `cnry serve` running and open a second terminal:
52
+ ```bash
53
+ cnry bootstrap
54
+ ```
55
55
 
56
- ```bash
57
- cnry project create my-site --domain example.com --country US --language en
58
- cnry technical-aeo run my-site --max-pages 100 --wait --format json
59
- ```
56
+ Keep the output private. Provider credentials are optional. Bootstrap imports supported variables that are already in your environment.
60
57
 
61
- The run command returns a run ID and status. If the status is `completed` or `partial`, read evidence from that run:
58
+ 3. Start Canonry.
62
59
 
63
- ```bash
64
- cnry technical-aeo score my-site --run-id <run-id> --format json
65
- cnry technical-aeo pages my-site --run-id <run-id> --sort score-asc --limit 10 --format jsonl
66
- ```
60
+ ```bash
61
+ cnry serve
62
+ ```
63
+
64
+ 4. Open [http://127.0.0.1:4100/setup](http://127.0.0.1:4100/setup). If prompted, create a dashboard password.
65
+
66
+ 5. Enter your domain and approve the public-site crawl. This crawl creates a persisted Page Health baseline. AI Visibility is optional.
67
+
68
+ 6. To use the terminal instead, keep `cnry serve` running. Open a second terminal and run:
69
+
70
+ ```bash
71
+ cnry project create my-site --domain example.com --country US --language en
72
+ cnry technical-aeo run my-site --max-pages 100 --wait --format json
73
+ ```
74
+
75
+ 7. Read the run ID and status from the output. If the status is `completed` or `partial`, read evidence from that run:
67
76
 
68
- `--wait` polls for up to 15 minutes. If the scan remains active, use the progress command below. If it fails or is cancelled, inspect it with `cnry run show <run-id> --format json`.
77
+ ```bash
78
+ cnry technical-aeo score my-site --run-id <run-id> --format json
79
+ cnry technical-aeo pages my-site --run-id <run-id> --sort score-asc --limit 10 --format jsonl
80
+ ```
69
81
 
70
- The CLI installs as both `cnry` and `canonry`. The commands are interchangeable. The compatibility package `@ainyc/canonry` remains available. Use `@canonry/canonry` for new installations.
82
+ `--wait` polls for up to 15 minutes. If the scan remains active, use the progress command below. If it fails or is cancelled, inspect it with `cnry run show <run-id> --format json`.
71
83
 
72
84
  ## Or use any shell-capable coding agent
73
85
 
@@ -8098,12 +8098,14 @@ function deadLinkCheckedCount(edges, pages) {
8098
8098
  }
8099
8099
  return new Set([...edges].filter((edge) => edge.type === "anchor" && edge.classification === "internal" && attemptedUrls.has(edge.to)).map((edge) => edge.to)).size;
8100
8100
  }
8101
+ var RATE_LIMITED_STATUS = 429;
8101
8102
  function partitionDeadLinks(deadLinks) {
8102
8103
  const reported = deadLinks.findings;
8103
8104
  const engineUnverified = deadLinks.unverified ?? [];
8104
- const dead = reported.filter((finding) => typeof finding.statusCode === "number" && finding.statusCode >= 400);
8105
+ const answeredWithError = (finding) => typeof finding.statusCode === "number" && finding.statusCode >= 400;
8106
+ const dead = reported.filter((finding) => answeredWithError(finding) && finding.statusCode !== RATE_LIMITED_STATUS);
8105
8107
  const unverified = [
8106
- ...reported.filter((finding) => typeof finding.statusCode !== "number"),
8108
+ ...reported.filter((finding) => !answeredWithError(finding) || finding.statusCode === RATE_LIMITED_STATUS),
8107
8109
  ...engineUnverified
8108
8110
  ];
8109
8111
  return { dead, unverified };
package/dist/cli.js CHANGED
@@ -31,7 +31,7 @@ import {
31
31
  showFirstRunNotice,
32
32
  trackCliCommandFinished,
33
33
  trackEvent
34
- } from "./chunk-SXENNCJF.js";
34
+ } from "./chunk-NFG2BPQP.js";
35
35
  import {
36
36
  CliError,
37
37
  EXIT_SYSTEM_ERROR,
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-SXENNCJF.js";
3
+ } from "./chunk-NFG2BPQP.js";
4
4
  import {
5
5
  loadConfig
6
6
  } from "./chunk-P5LR3NDQ.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "4.167.0",
3
+ "version": "4.167.1",
4
4
  "type": "module",
5
5
  "description": "Agent-first open-source AEO operating platform - track how answer engines cite your domain",
6
6
  "license": "FSL-1.1-ALv2",
@@ -70,29 +70,29 @@
70
70
  "@types/node-cron": "^3.0.11",
71
71
  "tsup": "^8.5.1",
72
72
  "tsx": "^4.19.0",
73
- "@ainyc/canonry-config": "0.0.0",
74
- "@ainyc/canonry-db": "0.0.0",
73
+ "@ainyc/canonry-api-client": "0.0.0",
75
74
  "@ainyc/canonry-api-routes": "0.0.0",
75
+ "@ainyc/canonry-config": "0.0.0",
76
76
  "@ainyc/canonry-contracts": "0.0.0",
77
- "@ainyc/canonry-api-client": "0.0.0",
78
- "@ainyc/canonry-integration-bing": "0.0.0",
77
+ "@ainyc/canonry-db": "0.0.0",
79
78
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
80
79
  "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
81
- "@ainyc/canonry-integration-openai-ads": "0.0.0",
80
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
82
81
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
82
+ "@ainyc/canonry-integration-openai-ads": "0.0.0",
83
+ "@ainyc/canonry-integration-bing": "0.0.0",
83
84
  "@ainyc/canonry-integration-google": "0.0.0",
84
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
85
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
86
85
  "@ainyc/canonry-integration-google-places": "0.0.0",
87
86
  "@ainyc/canonry-integration-traffic": "0.0.0",
88
- "@ainyc/canonry-provider-cdp": "0.0.0",
89
87
  "@ainyc/canonry-integration-wordpress": "0.0.0",
88
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
89
+ "@ainyc/canonry-intelligence": "0.0.0",
90
+ "@ainyc/canonry-provider-cdp": "0.0.0",
90
91
  "@ainyc/canonry-provider-claude": "0.0.0",
91
92
  "@ainyc/canonry-provider-gemini": "0.0.0",
92
- "@ainyc/canonry-provider-openai": "0.0.0",
93
93
  "@ainyc/canonry-provider-local": "0.0.0",
94
- "@ainyc/canonry-provider-perplexity": "0.0.0",
95
- "@ainyc/canonry-intelligence": "0.0.0"
94
+ "@ainyc/canonry-provider-openai": "0.0.0",
95
+ "@ainyc/canonry-provider-perplexity": "0.0.0"
96
96
  },
97
97
  "scripts": {
98
98
  "build": "tsx scripts/copy-agent-assets.ts && tsup && tsx build-web.ts",