Skip to content

Releases: Canonry/canonry

WordPress Traffic Logger v1.0.0

Choose a tag to compare

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

Choose a tag to compare

@arberx arberx released this 19 May 21:48

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-locations is 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-locations per-project for 0-location projects and runs a single locationless sweep instead, same as cnry run <project> would. Single-project cnry run <project> --all-locations on 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 in triggerRunAll — projects WITH locations were displaying as (failed) in the --all summary 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@latest4.51.4. Verified: fresh npm install + canonry --version4.51.4.

Install

npm install -g @ainyc/canonry

🤖 Generated with Claude Code

v4.51.2 — hotfix: unbreak npm install + 4 weeks of features

Choose a tag to compare

@arberx arberx released this 18 May 22:26

⚠️ 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

Choose a tag to compare

@arberx arberx released this 09 May 17:36
1eb7d44

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 install by @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

Choose a tag to compare

@arberx arberx released this 01 May 02:03
f82be2f

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, TimeBucket field renames:
    • answerRatementionRate
    • answerMentionedCountmentionedCount
  • Headline metrics split into providersCiting and providersMentioning.
  • Visibility tiles replaced with four mutually-exclusive cross-tab buckets: cited+mentioned / cited-only / mentioned-only / invisible.

PR: #384

v2.0.0

Choose a tag to compare

@arberx arberx released this 01 May 02:02
8a174fb

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 attach now requires --url <webhook-url>.
  • Removes config.agent.{binary,profile,autoStart,gatewayPort}; only config.agent.mode remains.

PR: #332

v1.0.0

Choose a tag to compare

@arberx arberx released this 01 May 02:02
4c15674

First public release of @ainyc/canonry to npm.

  • Adds the npm publish workflow.
  • Bumps packages/canonry to 1.0.0.

PR: #9