@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 +31 -19
- package/dist/{chunk-SXENNCJF.js → chunk-NFG2BPQP.js} +4 -2
- package/dist/cli.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +12 -12
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
|
-
|
|
45
|
-
npm install -g @canonry/canonry
|
|
46
|
-
cnry bootstrap
|
|
47
|
-
cnry serve
|
|
48
|
-
```
|
|
44
|
+
1. Install Canonry.
|
|
49
45
|
|
|
50
|
-
|
|
46
|
+
```bash
|
|
47
|
+
npm install -g @canonry/canonry
|
|
48
|
+
```
|
|
51
49
|
|
|
52
|
-
|
|
50
|
+
2. Create the local configuration, SQLite database, and full-instance API key.
|
|
53
51
|
|
|
54
|
-
|
|
52
|
+
```bash
|
|
53
|
+
cnry bootstrap
|
|
54
|
+
```
|
|
55
55
|
|
|
56
|
-
|
|
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
|
-
|
|
58
|
+
3. Start Canonry.
|
|
62
59
|
|
|
63
|
-
```bash
|
|
64
|
-
cnry
|
|
65
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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) =>
|
|
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
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@canonry/canonry",
|
|
3
|
-
"version": "4.167.
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
95
|
-
"@ainyc/canonry-
|
|
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",
|