Releases: Canonry/canonry
Release list
WordPress Traffic Logger v1.0.0
Install: download the zip, upload via wp-admin → Plugins → Add New → Upload Plugin, activate. Create an Application Password under Users → Profile and connect with canonry traffic connect wordpress --url https://your-site --username <user> --app-password '<app pw>'.
v4.51.4 — CLI hardening for multi-project sweeps
Patch release. Closes the gap where main carried two CLI fixes that hadn't reached the npm artifact since 4.51.3.
Fixes (from #608)
fix(cli):cnry run --all --all-locationsis per-project-smart — in a multi-project sweep, a project with zero configured locations no longer takes down the whole run. The CLI drops--all-locationsper-project for 0-location projects and runs a single locationless sweep instead, same ascnry run <project>would. Single-projectcnry run <project> --all-locationson a 0-location project still fails loud (explicit user error). This is what was 400-ing on demand-iq / gjelina-hotel.fix(cli): handle the 207-array fan-out response intriggerRunAll— projects WITH locations were displaying as(failed)in the--allsummary table even when every per-location run queued fine. The response is now normalized (single object or array), one results row per dispatched run, with a LOCATION column when any row carries one.
Notes
- CLI-only. No API change. No behavior change for any 4.51.3 caller that wasn't already in the failing edge case.
- npm
@ainyc/canonry@latest→4.51.4. Verified: freshnpm install+canonry --version→4.51.4.
Install
npm install -g @ainyc/canonry🤖 Generated with Claude Code
v4.51.2 — hotfix: unbreak npm install + 4 weeks of features
⚠️ Supersedes 4.50.0 / 4.51.0 / 4.51.1 — those were broken (npm install 404'd on an unpublished workspace dep) and have been deprecated on npm. This release is the fix plus everything that landed in the broken-version series, repackaged.
Hotfix
- `npm install -g @ainyc/canonry` works again. The published manifest no longer declares the unpublished `@ainyc/canonry-api-client@0.0.0` workspace package as a runtime dep (it's now `devDependencies`-only; `tsup` already inlines it into `dist/` via `noExternal`, so runtime is unchanged).
- New CI gate: `publish-smoke-test` — packs the tarball and `npm install`s it into a scratch directory on every PR. Catches the same class of "workspace dep leaks into runtime" bug before it ships.
Server-side traffic ingestion (new)
- Cloud Run / WordPress / Vercel traffic adapters with auth-validated doctor checks, hourly rollup buckets, and a `canonry traffic` CLI surface (`connect / sync / backfill / sources / status / events`).
- AI crawler IP verification for 8 operators (Anthropic, OpenAI, Perplexity, Google, Microsoft Bing, and three OpenAI sub-products). Anthropic uses the ARIN-allocated `216.73.216.0/22` (AWS-ANTHROPIC) block — the actual ClaudeBot infrastructure, not the BGP-announced AS399358 ranges. UAs that pass IP verification land in a separate `verified` bucket from `claimed_unverified` so operators can tell real crawler traffic from spoofers.
- Bot classifier rules expanded to catch Claude-SearchBot, MistralBot, DeepSeekBot, Applebot, plus the major SERP crawlers (Googlebot, bingbot, DuckDuckBot, YandexBot, Baiduspider, Amazonbot) — these were sitting in the `unknown` bucket. New `canonry backfill traffic-classification` reclassifies historical samples when rules expand.
Runtime safety
- HTTP 503 `RUNTIME_STATE_MISSING` when the operator deletes `~/.canonry/data.db` or `config.yaml` out from under a running daemon. SQLite holds the file inode open across `unlink`, so the daemon would otherwise keep serving stale data from an orphaned file. Pairs with two new doctor checks (`db.file.present`, `config.file.present`).
- Audit log attribution captures the API key + actor on every project mutation.
Aero (built-in agent)
- LLM capability tiers — per-provider model selection per task. Heavy reasoning gets a flagship model; simple classification gets a fast/cheap one.
- "Why this?" explainer for content recommendations — LLM-backed narrative on demand.
Dashboard
- Project page refreshes after CLI mutations — `cnry query add` / `cnry competitor add` now surface in the dashboard when the operator alt-tabs back (`refetchOnWindowFocus: 'always'` on the per-project hook). Same for in-UI mutations (predicate widened to match the new per-project cache key).
- Status code filter (2xx/3xx/4xx/5xx) on traffic source detail.
- `useDashboard` split into `useDashboardOverview` (slim portfolio) and `useProjectDashboard` (per-project deep dive) to eliminate the per-project fan-out tax on every dashboard mount.
- Snapshot attribution recovery — query attribution lost to `query replace`/`query remove` is now backfilled.
Plumbing
- OpenAPI codegen pipeline — `@ainyc/canonry-api-client` generated from the spec, consumed by web ApiClient, CLI ApiClient, and MCP. CI drift gate enforces regeneration.
- DB type migration — `projects`, `runs`, `querySnapshots`, `schedules`, `notifications` migrated to native SQLite column modes (boolean / JSON) via Drizzle.
Install
```bash
npm install -g @ainyc/canonry
```
v4.15.0
What's Changed
- feat(citations): split citation vs answer-mention dimensions by @arberx in #383
- chore(web): replace sidebar tagline with version, links with icons by @arberx in #387
- feat: add GA AI referral landing pages by @arberx in #385
- feat(ga): display "<1%" for sub-1% channel shares by @arberx in #388
- fix(web): tame social referral table overflow with top-N rollup by @arberx in #389
- Tune frontend data caching by @arberx in #390
- feat(backlinks): filter crawler/proxy domains via excludeCrawlers query by @arberx in #391
- fix(ga): always sync traffic foundation so social share stays valid by @arberx in #393
- feat(db): add migration version tracking with idempotent replay by @arberx in #394
- fix(matching): strip subdomains from competitor brand-token matching by @arberx in #392
- fix(tests): centralize jsdom env in vitest config + root devDep by @arberx in #395
- fix(tests): migrate vitest workspace to test.projects for Vitest 4 by @arberx in #398
- feat(skills): bundle canonry-setup + aero playbooks with
canonry skills installby @arberx in #400 - fix(matching): gate normalized brand candidate by MIN_BRAND_KEY_LENGTH by @evolv3ai in #399
- fix(build): validate SPA asset references to prevent white-screen outages by @arberx in #404
- feat(report): canonry report — one-command client-facing AEO HTML report (#401) by @arberx in #402
- fix(report): wrap long URLs and summarise tracking params in landing-page tables by @arberx in #405
- feat(report): wire content intelligence into project report by @arberx in #406
- fix(gsc): surface real sync time and refresh GSC cache after runs by @arberx in #411
- fix(gsc): accept numeric GSC property IDs in site URL validation by @arberx in #412
- feat(report): swap Visibility tab for Reporting tab + downloadable HTML by @arberx in #413
- fix(ga): stop overcounting Total Users when a window filter is active by @arberx in #414
- feat(report): mentions landscape, section copy pass, absolutize Our page links by @arberx in #415
- fix(web): live sweep status + overview snapshots during in-progress runs by @arberx in #416
- feat(web): mentions/citations toggle + tighter brand mention chips by @arberx in #418
- refactor!: rename keyword/key phrase to query across DB, API, CLI, UI, MCP by @arberx in #417
- refactor(cli): canonical mentions/citations vocabulary + two-glyph snapshot cells by @arberx in #419
- feat(overview): server-side score gauges + landscape primitives by @arberx in #420
- fix(report): per-query citation rate, mention split, location handling, AI source rework, content gaps by @arberx in #423
- feat(report): client-ready cleanup + 30d window + polished labels by @arberx in #426
- feat(report): align SPA with HTML, add "What's Changed" trend section by @arberx in #427
- feat(traffic): add Cloud Run puller foundation by @arberx in #386
- fix(ga): dedupe AI referral rows to winning attribution dimension by @arberx in #430
- feat(traffic): persistence + sync API for Cloud Run sources (Phase 2 slice 1) by @arberx in #429
- feat(report): plain-English client view with bigger numbers + explainers by @arberx in #432
- fix: add 'Other channels' to GA4 channel breakdown so percentages sum to 100% by @arberx in #433
- fix(report): print-to-PDF preserves dark theme + clean page breaks by @arberx in #434
- feat: remove .zed and add canonry url link to footer by @arberx in #436
- fix(telemetry): stable IDs, real-failure metric, opinionated init by @arberx in #437
- feat(telemetry): sessions, sources, upgrade detection, run enrichments by @arberx in #438
- docs: restructure README for activation-first onboarding by @arberx in #440
- docs(readme): slim rewrite — bullets, doc links, drop redundant sections by @arberx in #442
- feat(traffic): read endpoints + CLI status/sources/events (Phase 2 slice 2) by @arberx in #431
New Contributors
Full Changelog: v3.0.1...v4.15.0
v3.0.1
Standardizes on the mention / cited vocabulary across the contract, CLI, and UI. (npm jumped 2.16.3 → 3.0.1; 3.0.0 was never published.)
BREAKING:
BrandMetricsDto,ProviderMetric,TimeBucketfield renames:answerRate→mentionRateanswerMentionedCount→mentionedCount
- Headline metrics split into
providersCitingandprovidersMentioning. - Visibility tiles replaced with four mutually-exclusive cross-tab buckets: cited+mentioned / cited-only / mentioned-only / invisible.
PR: #384
v2.0.0
Native Aero agent loop. Rips out the OpenClaw gateway and ships an in-process built-in agent with a dashboard bar.
BREAKING:
- Removes CLI commands:
canonry agent setup,start,stop,status,reset. canonry agent attachnow requires--url <webhook-url>.- Removes
config.agent.{binary,profile,autoStart,gatewayPort}; onlyconfig.agent.moderemains.
PR: #332