@ainyc/canonry 4.30.0 → 4.31.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 (25) hide show
  1. package/README.md +15 -13
  2. package/assets/agent-workspace/skills/aero/SKILL.md +2 -2
  3. package/assets/agent-workspace/skills/aero/references/aeo-discovery.md +26 -17
  4. package/assets/agent-workspace/skills/aero/references/memory-patterns.md +9 -9
  5. package/assets/agent-workspace/skills/aero/references/orchestration.md +6 -6
  6. package/assets/agent-workspace/skills/aero/references/reporting.md +3 -3
  7. package/assets/agent-workspace/skills/canonry/SKILL.md +5 -3
  8. package/assets/agent-workspace/skills/canonry/references/aeo-analysis.md +9 -9
  9. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +203 -200
  10. package/assets/agent-workspace/skills/canonry/references/indexing.md +35 -35
  11. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +18 -18
  12. package/assets/agent-workspace/skills/canonry/references/wordpress-integration.md +11 -11
  13. package/assets/assets/index-C4UBTDDS.js +302 -0
  14. package/assets/assets/{index-BnALDZI7.css → index-CNKAwZMB.css} +1 -1
  15. package/assets/index.html +2 -2
  16. package/dist/{chunk-NIAAHWRF.js → chunk-5STLZRGB.js} +5 -3
  17. package/dist/{chunk-7UO3EGDB.js → chunk-HTNC6AWN.js} +24 -2
  18. package/dist/{chunk-PTFVEYUX.js → chunk-PUTJHEVR.js} +130 -13
  19. package/dist/{chunk-4EDC2P3J.js → chunk-U3YKRV47.js} +1 -1
  20. package/dist/cli.js +55 -14
  21. package/dist/index.js +4 -4
  22. package/dist/{intelligence-service-ASXADXLF.js → intelligence-service-CJONZ7ST.js} +2 -2
  23. package/dist/mcp.js +2 -2
  24. package/package.json +8 -7
  25. package/assets/assets/index-BYiZYtd9.js +0 -302
@@ -14,7 +14,7 @@ Getting pages indexed fast is high-leverage AEO work. Unindexed pages are invisi
14
14
 
15
15
  ### Check coverage
16
16
  ```bash
17
- canonry google coverage <project>
17
+ cnry google coverage <project>
18
18
  ```
19
19
 
20
20
  Statuses to act on:
@@ -24,43 +24,43 @@ Statuses to act on:
24
24
 
25
25
  ### Sync GSC data
26
26
  ```bash
27
- canonry google sync <project> # incremental sync
28
- canonry google sync <project> --full --wait # full re-sync
27
+ cnry google sync <project> # incremental sync
28
+ cnry google sync <project> --full --wait # full re-sync
29
29
  ```
30
30
 
31
31
  ### Check search performance
32
32
  ```bash
33
- canonry google performance <project> # default 28 days
34
- canonry google performance <project> --days 90 --keyword "term"
33
+ cnry google performance <project> # default 28 days
34
+ cnry google performance <project> --days 90 --keyword "term"
35
35
  ```
36
36
 
37
37
  ### Discover and inspect sitemaps
38
38
  ```bash
39
- canonry google discover-sitemaps <project> --wait # auto-discover sitemaps and queue inspection
40
- canonry google list-sitemaps <project> # list submitted sitemaps
41
- canonry google inspect-sitemap <project> --wait # bulk inspect all sitemap URLs
39
+ cnry google discover-sitemaps <project> --wait # auto-discover sitemaps and queue inspection
40
+ cnry google list-sitemaps <project> # list submitted sitemaps
41
+ cnry google inspect-sitemap <project> --wait # bulk inspect all sitemap URLs
42
42
  ```
43
43
 
44
44
  ### Inspect individual URLs
45
45
  ```bash
46
- canonry google inspect <project> <url> # inspect specific URL
47
- canonry google inspections <project> # inspection history
48
- canonry google inspections <project> --url <url> # filter by URL
49
- canonry google deindexed <project> # pages that lost indexing
46
+ cnry google inspect <project> <url> # inspect specific URL
47
+ cnry google inspections <project> # inspection history
48
+ cnry google inspections <project> --url <url> # filter by URL
49
+ cnry google deindexed <project> # pages that lost indexing
50
50
  ```
51
51
 
52
52
  ### Submit URLs to Google Indexing API
53
53
  ```bash
54
54
  # Single URL
55
- canonry google request-indexing <project> <url>
55
+ cnry google request-indexing <project> <url>
56
56
 
57
57
  # All unindexed at once
58
- canonry google request-indexing <project> --all-unindexed
58
+ cnry google request-indexing <project> --all-unindexed
59
59
  ```
60
60
 
61
61
  **Requirements:**
62
62
  - "Web Search Indexing API" enabled in the GCP project
63
- - OAuth connection set up in canonry (`canonry settings` shows Google connection)
63
+ - OAuth connection set up in canonry (`cnry settings` shows Google connection)
64
64
  - Officially intended for JobPosting/BroadcastEvent schema; in practice Google processes all URLs
65
65
 
66
66
  **After submitting:** Check coverage again after 48h. Once indexed, run a sweep — pages must be indexed before citation is possible.
@@ -71,37 +71,37 @@ canonry google request-indexing <project> --all-unindexed
71
71
 
72
72
  ### One-time setup
73
73
  ```bash
74
- canonry bing connect <project> --api-key <key>
75
- canonry bing set-site <project> https://example.com/
74
+ cnry bing connect <project> --api-key <key>
75
+ cnry bing set-site <project> https://example.com/
76
76
  ```
77
77
 
78
78
  Get API key from: https://www.bing.com/webmasters/ → Settings → API Access
79
79
 
80
80
  ### Check connection and coverage
81
81
  ```bash
82
- canonry bing status <project>
83
- canonry bing coverage <project>
84
- canonry bing performance <project>
82
+ cnry bing status <project>
83
+ cnry bing coverage <project>
84
+ cnry bing performance <project>
85
85
  ```
86
86
 
87
87
  ### Inspect URLs
88
88
  ```bash
89
- canonry bing inspect <project> <url>
90
- canonry bing inspections <project>
89
+ cnry bing inspect <project> <url>
90
+ cnry bing inspections <project>
91
91
  ```
92
92
 
93
93
  ### Inspect every URL in your sitemap
94
94
  ```bash
95
- canonry bing inspect-sitemap <project> # default https://<domain>/sitemap.xml
96
- canonry bing inspect-sitemap <project> --sitemap-url <url> # explicit sitemap or sitemap index
97
- canonry bing inspect-sitemap <project> --wait # block until the run finishes
95
+ cnry bing inspect-sitemap <project> # default https://<domain>/sitemap.xml
96
+ cnry bing inspect-sitemap <project> --sitemap-url <url> # explicit sitemap or sitemap index
97
+ cnry bing inspect-sitemap <project> --wait # block until the run finishes
98
98
  ```
99
99
  Bing has no native sitemap inspection API — this command fetches the sitemap, diffs against the tracked URL set, then calls `GetUrlInfo` for each discovered URL so coverage reflects the full sitemap rather than only previously inspected pages.
100
100
 
101
101
  ### Submit URLs for indexing
102
102
  ```bash
103
- canonry bing request-indexing <project> <url>
104
- canonry bing request-indexing <project> --all-unindexed
103
+ cnry bing request-indexing <project> <url>
104
+ cnry bing request-indexing <project> --all-unindexed
105
105
  ```
106
106
 
107
107
  ### Submit sitemap (manual, one-time)
@@ -143,20 +143,20 @@ Expected response: `202 Accepted`
143
143
  |---|---|
144
144
  | Get pages into ChatGPT / Perplexity / Claude | Google Indexing API |
145
145
  | Get pages into Copilot / Bing AI | IndexNow + Bing WMT |
146
- | Audit what Google currently knows | `canonry google coverage <project>` |
147
- | Audit what Bing currently knows | `canonry bing coverage <project>` |
146
+ | Audit what Google currently knows | `cnry google coverage <project>` |
147
+ | Audit what Bing currently knows | `cnry bing coverage <project>` |
148
148
  | Fast crawl of new/updated pages on Bing | IndexNow batch submit |
149
- | Ongoing Google crawl health | `canonry google sync` + `canonry google performance` |
150
- | Ongoing Bing crawl health | Bing WMT sitemap + `canonry bing performance` |
151
- | Find deindexed pages | `canonry google deindexed <project>` |
149
+ | Ongoing Google crawl health | `cnry google sync` + `cnry google performance` |
150
+ | Ongoing Bing crawl health | Bing WMT sitemap + `cnry bing performance` |
151
+ | Find deindexed pages | `cnry google deindexed <project>` |
152
152
 
153
153
  ---
154
154
 
155
155
  ## General Workflow for New Client Pages
156
156
 
157
- 1. `canonry google coverage <project>` — identify unindexed pages
158
- 2. `canonry google request-indexing <project> --all-unindexed` — push to Google
159
- 3. `canonry bing request-indexing <project> --all-unindexed` — push to Bing
157
+ 1. `cnry google coverage <project>` — identify unindexed pages
158
+ 2. `cnry google request-indexing <project> --all-unindexed` — push to Google
159
+ 3. `cnry bing request-indexing <project> --all-unindexed` — push to Bing
160
160
  4. Submit sitemap to Bing WMT (manual, one-time per site)
161
161
  5. Send IndexNow batch for key URLs
162
162
  6. Re-check coverage after 48h
@@ -45,13 +45,13 @@ Future adapters slot in by implementing the same contract.
45
45
  # 1. Create a service account in the Cloud project that hosts the Cloud Run
46
46
  # service. Grant it `roles/logging.viewer`. Download the JSON key.
47
47
 
48
- # 2. Connect from canonry CLI:
49
- canonry traffic connect cloud-run <project> \
48
+ # 2. Connect from cnry CLI:
49
+ cnry traffic connect cloud-run <project> \
50
50
  --gcp-project <gcp-project-id> \
51
51
  --service-account-key <path/to/key.json>
52
52
 
53
53
  # 3. (Optional) narrow to a specific service or location:
54
- canonry traffic connect cloud-run <project> \
54
+ cnry traffic connect cloud-run <project> \
55
55
  --gcp-project <id> \
56
56
  --service-account-key <path> \
57
57
  --service my-service-name \
@@ -59,7 +59,7 @@ canonry traffic connect cloud-run <project> \
59
59
  ```
60
60
 
61
61
  Credentials are stored in `~/.canonry/config.yaml` (not the DB). The
62
- canonical key lives only on the host that runs `canonry serve`. The
62
+ canonical key lives only on the host that runs `cnry serve`. The
63
63
  sync flow does NOT echo the private key back in any response.
64
64
 
65
65
  ## Connecting a WordPress source
@@ -82,8 +82,8 @@ exposes a paginated REST endpoint protected by an Application Password.
82
82
  # 7–365 days; default is 90. The page also shows the current event
83
83
  # count and the oldest event timestamp.
84
84
 
85
- # 4. Connect from canonry CLI:
86
- canonry traffic connect wordpress <project> \
85
+ # 4. Connect from cnry CLI:
86
+ cnry traffic connect wordpress <project> \
87
87
  --url https://example.com \
88
88
  --username admin \
89
89
  --app-password "xxxx xxxx xxxx xxxx xxxx xxxx"
@@ -109,10 +109,10 @@ window change it in `Settings → Canonry Traffic Logger`.
109
109
  ```bash
110
110
  # Manual sync — defaults to a 30-day lookback on the first run; subsequent
111
111
  # runs are clamped forward to lastSyncedAt to avoid re-pulling.
112
- canonry traffic sync <project> --source <id>
112
+ cnry traffic sync <project> --source <id>
113
113
 
114
114
  # Override the lookback window (minutes):
115
- canonry traffic sync <project> --source <id> --since-minutes 4320 # 3 days
115
+ cnry traffic sync <project> --source <id> --since-minutes 4320 # 3 days
116
116
  ```
117
117
 
118
118
  Cross-sync dedupe via the `last_event_ids` ring buffer means re-running a
@@ -123,14 +123,14 @@ hits. Safe to schedule (see "Scheduling" below) or trigger from CI.
123
123
 
124
124
  ```bash
125
125
  # All sources with last-24h totals + latest sync run (single-call):
126
- canonry traffic status <project> --format json
126
+ cnry traffic status <project> --format json
127
127
 
128
128
  # Just the source list:
129
- canonry traffic sources <project> --format json
129
+ cnry traffic sources <project> --format json
130
130
 
131
131
  # Windowed events (defaults to last 24h):
132
- canonry traffic events <project> --kind crawler --limit 200 --format json
133
- canonry traffic events <project> --kind ai-referral --since 2026-04-01 --until 2026-04-30
132
+ cnry traffic events <project> --kind crawler --limit 200 --format json
133
+ cnry traffic events <project> --kind ai-referral --since 2026-04-01 --until 2026-04-30
134
134
  ```
135
135
 
136
136
  The `traffic status` composite returns the same per-source detail
@@ -144,8 +144,8 @@ MCP `canonry_traffic_status` tool.
144
144
  |---|---|
145
145
  | Project dashboard `/projects/:name/activity` | Live source table + 24h totals + GA4 referrals (combined view) |
146
146
  | Top-level `/traffic` route | Cross-project source admin (connect, sync, archive) |
147
- | `canonry report <project>` (HTML + SPA) | "AI Visibility — Server-Side" section, ranked above Indexing Health |
148
- | `canonry doctor --project <name>` | `traffic.source.connected`, `recent-data`, `credentials`, `scopes` checks |
147
+ | `cnry report <project>` (HTML + SPA) | "AI Visibility — Server-Side" section, ranked above Indexing Health |
148
+ | `cnry doctor --project <name>` | `traffic.source.connected`, `recent-data`, `credentials`, `scopes` checks |
149
149
  | MCP toolkit `traffic` | Tools: `canonry_traffic_status`, `_sources_list`, `_source_get`, `_events`, `_connect_cloud_run`, `_sync` |
150
150
 
151
151
  ## Doctor signals
@@ -154,15 +154,15 @@ The doctor checks are adapter-agnostic. When they fail or warn:
154
154
 
155
155
  | Check | Code | What to do |
156
156
  |---|---|---|
157
- | `traffic.source.connected` | `traffic.source.none` | No source — `canonry traffic connect cloud-run …` |
157
+ | `traffic.source.connected` | `traffic.source.none` | No source — `cnry traffic connect cloud-run …` |
158
158
  | `traffic.source.connected` | `traffic.source.all-errored` | Re-connect the source. The check's `details.lastError` shows the underlying reason. |
159
- | `traffic.source.recent-data` | `traffic.recent-data.stale` | Last sync was >7d ago. Run `canonry traffic sync …` or schedule a recurring sync. |
160
- | `traffic.source.recent-data` | `traffic.recent-data.empty` | Source connected but no data in 30d. Verify config and credentials with `canonry traffic sources <project>`. |
159
+ | `traffic.source.recent-data` | `traffic.recent-data.stale` | Last sync was >7d ago. Run `cnry traffic sync …` or schedule a recurring sync. |
160
+ | `traffic.source.recent-data` | `traffic.recent-data.empty` | Source connected but no data in 30d. Verify config and credentials with `cnry traffic sources <project>`. |
161
161
  | `traffic.source.credentials` | `traffic.credentials.resolve-failed` | Service-account key in `~/.canonry/config.yaml` is invalid or expired. Re-connect. |
162
162
 
163
163
  ## Scheduling
164
164
 
165
- `canonry schedule` supports `--kind traffic-sync`. Recurring syncs are
165
+ `cnry schedule` supports `--kind traffic-sync`. Recurring syncs are
166
166
  safe because of the `last_event_ids` cross-sync dedupe ring buffer
167
167
  described above. Recommended cadence:
168
168
 
@@ -6,16 +6,16 @@ Canonry integrates with WordPress through the core REST API plus Application Pas
6
6
 
7
7
  - Read and write page content, titles, slugs, and status
8
8
  - Audit pages for `noindex`, missing SEO title, missing meta description, missing schema, and thin content
9
- - Compare live vs staging for a page with `canonry wordpress diff`
9
+ - Compare live vs staging for a page with `cnry wordpress diff`
10
10
  - Update SEO meta when the site exposes writable REST meta fields
11
11
 
12
12
  ## What Stays Manual
13
13
 
14
14
  Canonry generates payloads and instructions for these workflows, but it does not apply them remotely:
15
15
 
16
- - `canonry wordpress set-schema`
17
- - `canonry wordpress set-llms-txt`
18
- - `canonry wordpress staging push`
16
+ - `cnry wordpress set-schema`
17
+ - `cnry wordpress set-llms-txt`
18
+ - `cnry wordpress staging push`
19
19
 
20
20
  Expect those commands to return:
21
21
 
@@ -39,13 +39,13 @@ Env-sensitive commands accept `--live` or `--staging`. If neither is provided, c
39
39
  ## Typical Workflow
40
40
 
41
41
  ```bash
42
- canonry wordpress connect mysite --url https://example.com --user admin --staging-url https://staging.example.com --default-env staging
43
- canonry wordpress pages mysite --staging
44
- canonry wordpress page mysite pricing --staging
45
- canonry wordpress set-meta mysite pricing --title "SEO title" --description "Meta description" --staging
46
- canonry wordpress audit mysite --staging
47
- canonry wordpress diff mysite pricing
48
- canonry wordpress staging push mysite
42
+ cnry wordpress connect mysite --url https://example.com --user admin --staging-url https://staging.example.com --default-env staging
43
+ cnry wordpress pages mysite --staging
44
+ cnry wordpress page mysite pricing --staging
45
+ cnry wordpress set-meta mysite pricing --title "SEO title" --description "Meta description" --staging
46
+ cnry wordpress audit mysite --staging
47
+ cnry wordpress diff mysite pricing
48
+ cnry wordpress staging push mysite
49
49
  ```
50
50
 
51
51
  ## Important Constraints