@canonry/canonry 5.20.3 → 5.21.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 (32) hide show
  1. package/assets/agent-workspace/skills/aero/references/portfolio-analysis.md +1 -1
  2. package/assets/agent-workspace/skills/aero/references/reporting.md +9 -4
  3. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +3 -0
  4. package/assets/assets/{AuditHistoryPanel-BSh3Oezj.js → AuditHistoryPanel-CjxWA3lx.js} +1 -1
  5. package/assets/assets/{BacklinksPage-DQ59dhCx.js → BacklinksPage-Bdd164Up.js} +1 -1
  6. package/assets/assets/{HistoryPage-BBvgid3o.js → HistoryPage-BvJmE-kP.js} +1 -1
  7. package/assets/assets/{MeasurementPropertyPage-Dmb18JbT.js → MeasurementPropertyPage-HuP6RMZ-.js} +1 -1
  8. package/assets/assets/{ProjectPage-CPg0q2Dy.js → ProjectPage-DOvXVbyy.js} +1 -1
  9. package/assets/assets/{RunRow-BK8sZCID.js → RunRow-Cnb3JOBw.js} +1 -1
  10. package/assets/assets/{RunsPage-CIcVBTdP.js → RunsPage-Dvz1JYIm.js} +1 -1
  11. package/assets/assets/{SettingsPage-Bc3aR-gz.js → SettingsPage-DYGvphkg.js} +1 -1
  12. package/assets/assets/{SiteHealthSection-FF14aIXT.js → SiteHealthSection-CUNiKaod.js} +3 -3
  13. package/assets/assets/{TrafficPage-C_qoeGDl.js → TrafficPage-Bf4Tq95q.js} +1 -1
  14. package/assets/assets/{TrafficSourceDetailPage-B3i_B2MI.js → TrafficSourceDetailPage-CIuLWZgT.js} +1 -1
  15. package/assets/assets/{extract-error-message-BisUn6nN.js → extract-error-message-DZex1e4H.js} +1 -1
  16. package/assets/assets/{index-Dht7JNX5.js → index-CeXW-lzj.js} +21 -21
  17. package/assets/assets/{react-sigma_core.esm.min-tWhS09SS.js → react-sigma_core.esm.min-CxvtwEkv.js} +1 -1
  18. package/assets/assets/{v2-overview-adapter-CAoeWKQJ.js → v2-overview-adapter-Bh4qIzLp.js} +1 -1
  19. package/assets/index.html +1 -1
  20. package/dist/{chunk-TOSPZ7I5.js → chunk-2LO7FLVD.js} +48 -5
  21. package/dist/{chunk-7YGOE4R2.js → chunk-FAVYLZQV.js} +341 -96
  22. package/dist/{chunk-PXVJ3P5G.js → chunk-FRWZWJB3.js} +4 -4
  23. package/dist/{chunk-KHNPBUUN.js → chunk-HDJHQPW3.js} +2 -2
  24. package/dist/{chunk-CVUR3O5G.js → chunk-MEAKE5W7.js} +3 -3
  25. package/dist/{chunk-H6XSHOS5.js → chunk-NFN5GSEJ.js} +7 -7
  26. package/dist/{chunk-JJPZ4OQ2.js → chunk-WUT3G2GM.js} +5 -3
  27. package/dist/cli.js +69 -12
  28. package/dist/{demo-server-JYDAUEP2.js → demo-server-7BVVVXPM.js} +4 -4
  29. package/dist/index.js +6 -6
  30. package/dist/{intelligence-service-H4LGPJLZ.js → intelligence-service-3UUKRAZ5.js} +2 -2
  31. package/dist/mcp.js +4 -4
  32. package/package.json +12 -12
@@ -5,7 +5,7 @@ import {
5
5
  PACKAGE_VERSION,
6
6
  canonryMcpTools,
7
7
  isMachineFormat
8
- } from "./chunk-JJPZ4OQ2.js";
8
+ } from "./chunk-WUT3G2GM.js";
9
9
  import {
10
10
  AGENT_PROVIDER_IDS,
11
11
  CANONRY_NPM_PACKAGE_URL,
@@ -37,7 +37,7 @@ import {
37
37
  skillsClientSchema,
38
38
  upgradeCaveatFor,
39
39
  upgradeCommandFor
40
- } from "./chunk-TOSPZ7I5.js";
40
+ } from "./chunk-2LO7FLVD.js";
41
41
 
42
42
  // src/config.ts
43
43
  import fs from "fs";
@@ -8891,12 +8891,12 @@ var ApiClient = class {
8891
8891
  })
8892
8892
  );
8893
8893
  }
8894
- async getVisibilityCompare(project, from, to) {
8894
+ async getVisibilityCompare(project, from, to, selection = {}) {
8895
8895
  return this.invoke(
8896
8896
  () => getApiV1ProjectsByNameVisibilityCompare({
8897
8897
  client: this.heyClient,
8898
8898
  path: { name: project },
8899
- query: { from, to }
8899
+ query: { from, to, ...selection }
8900
8900
  })
8901
8901
  );
8902
8902
  }
@@ -5,12 +5,12 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-7YGOE4R2.js";
8
+ } from "./chunk-FAVYLZQV.js";
9
9
  import {
10
10
  SITE_CRAWL_GRAPH_MAX_EDGES,
11
11
  SITE_CRAWL_GRAPH_MAX_NODES,
12
12
  TEMPLATE_LINK_RATIO_THRESHOLD
13
- } from "./chunk-TOSPZ7I5.js";
13
+ } from "./chunk-2LO7FLVD.js";
14
14
 
15
15
  // src/site-crawl-graph-layout.ts
16
16
  import crypto from "crypto";
@@ -4,14 +4,14 @@ import {
4
4
  installSkills,
5
5
  loadConfigRaw,
6
6
  saveConfigPatch
7
- } from "./chunk-PXVJ3P5G.js";
7
+ } from "./chunk-FRWZWJB3.js";
8
8
  import {
9
9
  PACKAGE_VERSION
10
- } from "./chunk-JJPZ4OQ2.js";
10
+ } from "./chunk-WUT3G2GM.js";
11
11
  import {
12
12
  SKILL_MANIFEST_FILENAME,
13
13
  SkillsClients
14
- } from "./chunk-TOSPZ7I5.js";
14
+ } from "./chunk-2LO7FLVD.js";
15
15
 
16
16
  // src/skills-autosync.ts
17
17
  import fs from "fs";
@@ -13,19 +13,19 @@ import {
13
13
  resolveOperatorApiKeyIds,
14
14
  runWithUsageTags,
15
15
  saveConfigPatch
16
- } from "./chunk-PXVJ3P5G.js";
16
+ } from "./chunk-FRWZWJB3.js";
17
17
  import {
18
18
  deleteSiteCrawlGraphLayout,
19
19
  persistSiteCrawlGraphLayout,
20
20
  prepareSiteCrawlGraphLayout
21
- } from "./chunk-KHNPBUUN.js";
21
+ } from "./chunk-HDJHQPW3.js";
22
22
  import {
23
23
  CanonryMcpToolNames,
24
24
  CliError,
25
25
  PACKAGE_VERSION,
26
26
  canonryMcpTools,
27
27
  isMachineFormat
28
- } from "./chunk-JJPZ4OQ2.js";
28
+ } from "./chunk-WUT3G2GM.js";
29
29
  import {
30
30
  CC_CACHE_DIR,
31
31
  DUCKDB_SPEC,
@@ -186,7 +186,7 @@ import {
186
186
  siteLivenessState,
187
187
  toAlertView,
188
188
  usageCounters
189
- } from "./chunk-7YGOE4R2.js";
189
+ } from "./chunk-FAVYLZQV.js";
190
190
  import {
191
191
  AGENT_MEMORY_VALUE_MAX_BYTES,
192
192
  AGENT_NONE,
@@ -353,7 +353,7 @@ import {
353
353
  visibilityReportRequestSchema,
354
354
  winnabilityClassLabel,
355
355
  withRetry
356
- } from "./chunk-TOSPZ7I5.js";
356
+ } from "./chunk-2LO7FLVD.js";
357
357
 
358
358
  // src/runtime-context.ts
359
359
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -6648,7 +6648,7 @@ function nonBlank(value) {
6648
6648
  return trimmed ? trimmed : void 0;
6649
6649
  }
6650
6650
  function resolveBuildCommit(env = process.env) {
6651
- const embedded = true ? "391e3197a54a3b85226958ac923a021d124eaf60" : void 0;
6651
+ const embedded = true ? "9367462bc55240da41850bf9358ec7327c387258" : void 0;
6652
6652
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
6653
6653
  }
6654
6654
  function resolveInstanceIdentity(env = process.env) {
@@ -12235,7 +12235,7 @@ function readStoredGroundingSources(rawResponse) {
12235
12235
  return result2;
12236
12236
  }
12237
12237
  async function backfillInsightsCommand(project, opts) {
12238
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-H4LGPJLZ.js");
12238
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-3UUKRAZ5.js");
12239
12239
  const config = loadConfig();
12240
12240
  const db = createClient(config.database);
12241
12241
  migrate(db);
@@ -104,8 +104,9 @@ import {
104
104
  trafficConnectWordpressRequestSchema,
105
105
  trafficEventKindSchema,
106
106
  trafficSeriesGranularitySchema,
107
+ visibilityCompareSelectionSchema,
107
108
  visibilityReportRequestSchema
108
- } from "./chunk-TOSPZ7I5.js";
109
+ } from "./chunk-2LO7FLVD.js";
109
110
 
110
111
  // src/cli-error.ts
111
112
  function isMachineFormat(format) {
@@ -1579,17 +1580,18 @@ var canonryMcpTools = [
1579
1580
  defineTool({
1580
1581
  name: "canonry_visibility_compare",
1581
1582
  title: "Compare AEO visibility month over month",
1582
- description: "Statistically honest month-over-month AEO comparison in ONE call \u2014 use this instead of hand-computing deltas from two visibility-stats calls. Share of voice (`mention-share-of-voice`, `driftRobust: true`) is less exposed to broad model-wide naming propensity than absolute rates, but it never overrides model continuity. The response restricts to common query/provider pairs, then includes only providers with exactly one known, identical configured model id in both months. `continuity` surfaces every provider, its model evidence, and whether it was excluded for a changed, mixed mid-month, or unknown model. When no provider remains, metrics return `model-discontinuous` or `model-unknown`, never a directional call. A silent upstream version bump under an unchanged configured id remains undetectable. `from` must be a month strictly before `to`.",
1583
+ description: "Statistically honest month-over-month AEO comparison in ONE call \u2014 use this instead of hand-computing deltas from two visibility-stats calls. Share of voice (`mention-share-of-voice`, `driftRobust: true`) is less exposed to broad model-wide naming propensity than absolute rates, but it never overrides model continuity. Branded and non-brand mention/cited rates are separate additive metrics; classification-unavailable never falls back to pooling. provider and location narrow every frame; scope, scopeKey and marketKey answer from the frozen Advanced frame alone (refused when a month holds unreconstructable schema-v1 runs) and deduplicate shared executions. Without scope/marketKey, Advanced class metrics use classComparison for their basket and continuity while the four original metrics keep the project frame. On frozen frames, answers with incomplete source capture leave every citation figure (excludedUnknown). The response restricts to common query/provider pairs, then includes only providers with exactly one known, identical configured model id in both months. `continuity` surfaces every provider, its model evidence, and whether it was excluded for a changed, mixed mid-month, or unknown model. When no provider remains, metrics return `model-discontinuous` or `model-unknown`, never a directional call. A silent upstream version bump under an unchanged configured id remains undetectable. `from` must be a month strictly before `to`.",
1583
1584
  access: "read",
1584
1585
  tier: "monitoring",
1585
1586
  inputSchema: z3.object({
1586
1587
  project: projectNameSchema,
1588
+ ...visibilityCompareSelectionSchema.shape,
1587
1589
  from: z3.string().describe('Earlier calendar month (YYYY-MM), the baseline. Must be strictly before "to".'),
1588
1590
  to: z3.string().describe('Later calendar month (YYYY-MM), compared against "from".')
1589
1591
  }),
1590
1592
  annotations: readAnnotations(),
1591
1593
  openApiOperations: ["GET /api/v1/projects/{name}/visibility-compare"],
1592
- handler: (client, input) => client.getVisibilityCompare(input.project, input.from, input.to)
1594
+ handler: (client, input) => client.getVisibilityCompare(input.project, input.from, input.to, { scope: input.scope, scopeKey: input.scopeKey, marketKey: input.marketKey, provider: input.provider, location: input.location })
1593
1595
  }),
1594
1596
  defineTool({
1595
1597
  name: "canonry_content_targets",
package/dist/cli.js CHANGED
@@ -35,11 +35,11 @@ import {
35
35
  trackCliCommandFinished,
36
36
  trackEvent,
37
37
  waitForServerRuntimeStartup
38
- } from "./chunk-H6XSHOS5.js";
38
+ } from "./chunk-NFN5GSEJ.js";
39
39
  import {
40
40
  autoSyncSkills,
41
41
  formatAutoSyncNotice
42
- } from "./chunk-CVUR3O5G.js";
42
+ } from "./chunk-MEAKE5W7.js";
43
43
  import {
44
44
  configExists,
45
45
  createApiClient,
@@ -56,13 +56,13 @@ import {
56
56
  saveConfig,
57
57
  saveConfigPatch,
58
58
  shouldPrintServeSkillsNudge
59
- } from "./chunk-PXVJ3P5G.js";
59
+ } from "./chunk-FRWZWJB3.js";
60
60
  import {
61
61
  DEFAULT_DEMO_TRUSTED_PROXIES,
62
62
  trustedProxiesProblem,
63
63
  trustedProxyProblem
64
64
  } from "./chunk-RB2F4D3Z.js";
65
- import "./chunk-KHNPBUUN.js";
65
+ import "./chunk-HDJHQPW3.js";
66
66
  import {
67
67
  CliError,
68
68
  EXIT_SYSTEM_ERROR,
@@ -74,7 +74,7 @@ import {
74
74
  runMeasurementDraftAction,
75
75
  systemError,
76
76
  usageError
77
- } from "./chunk-JJPZ4OQ2.js";
77
+ } from "./chunk-WUT3G2GM.js";
78
78
  import {
79
79
  CLOUDFLARE_WORKER_BINDINGS,
80
80
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -89,7 +89,7 @@ import {
89
89
  queries,
90
90
  renderReportHtml,
91
91
  runs
92
- } from "./chunk-7YGOE4R2.js";
92
+ } from "./chunk-FAVYLZQV.js";
93
93
  import {
94
94
  AdsDeliverySnapshotStatuses,
95
95
  AdsHistoricalCampaignRollupStatuses,
@@ -146,6 +146,7 @@ import {
146
146
  formatRunErrorOneLine,
147
147
  formatWholePercent,
148
148
  googleAdsMetricsWindowSchema,
149
+ isVisibilityCompareClassMetric,
149
150
  logQuerySchema,
150
151
  measurementChangesQuerySchema,
151
152
  measurementDataQualityQuerySchema,
@@ -175,9 +176,10 @@ import {
175
176
  shareOfVoiceLabel,
176
177
  shareOfVoiceReason,
177
178
  snapshotProviderModeSchema,
179
+ visibilityCompareSelectionSchema,
178
180
  visibilityReportRequestSchema,
179
181
  winnabilityClassSchema
180
- } from "./chunk-TOSPZ7I5.js";
182
+ } from "./chunk-2LO7FLVD.js";
181
183
 
182
184
  // src/cli.ts
183
185
  import { pathToFileURL } from "url";
@@ -442,7 +444,7 @@ function parseDemoTrustedProxies(values) {
442
444
  async function demoCommand(options) {
443
445
  const { host, port } = parseDemoListenOptions(options);
444
446
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
445
- const { createDemoServer } = await import("./demo-server-JYDAUEP2.js");
447
+ const { createDemoServer } = await import("./demo-server-7BVVVXPM.js");
446
448
  const app = await createDemoServer({ trustProxy });
447
449
  let stopping = false;
448
450
  const stop = () => {
@@ -17420,7 +17422,7 @@ function pct3(rate) {
17420
17422
  async function showVisibilityCompare(project, opts) {
17421
17423
  if (!opts.from || !opts.to) throw new Error("visibility-compare requires --from <YYYY-MM> and --to <YYYY-MM>");
17422
17424
  const client = createApiClient();
17423
- const data = await client.getVisibilityCompare(project, opts.from, opts.to);
17425
+ const data = await client.getVisibilityCompare(project, opts.from, opts.to, { scope: opts.scope, scopeKey: opts.scopeKey, marketKey: opts.marketKey, provider: opts.provider, location: opts.location });
17424
17426
  if (isMachineFormat(opts.format)) {
17425
17427
  console.log(JSON.stringify(data, null, 2));
17426
17428
  return;
@@ -17428,6 +17430,7 @@ async function showVisibilityCompare(project, opts) {
17428
17430
  printVisibilityCompare(data);
17429
17431
  }
17430
17432
  function periodCell(p) {
17433
+ if (p.availability === "classification-unavailable") return "unavailable: query classification";
17431
17434
  if (p.availability === "no-competitive-frame") {
17432
17435
  return `unavailable: no competitive frame (${p.numerator} observed)`;
17433
17436
  }
@@ -17450,12 +17453,24 @@ function verdictCell(m) {
17450
17453
  }
17451
17454
  }
17452
17455
  function metricQueryClassLabel(metric) {
17456
+ if (metric.queryClass === "branded") return "branded queries";
17453
17457
  if (metric.queryClass === "non-brand") return "non-brand queries";
17454
17458
  if (metric.queryClass === "pooled") return "pooled queries; classification unavailable";
17455
17459
  return "all queries";
17456
17460
  }
17461
+ function selectionLabel(selection) {
17462
+ if (!selection) return null;
17463
+ const parts = [];
17464
+ if (selection.scope && selection.scope !== "project") parts.push(`${selection.scope} ${selection.scopeKey ?? ""}`.trim());
17465
+ if (selection.marketKey) parts.push(`market ${selection.marketKey}`);
17466
+ if (selection.provider) parts.push(`engine ${selection.provider}`);
17467
+ if (selection.location) parts.push(`location ${selection.location}`);
17468
+ return parts.length > 0 ? parts.join(" \xB7 ") : null;
17469
+ }
17457
17470
  function printVisibilityCompare(data) {
17458
17471
  console.log(`AEO month over month: ${data.project} ${data.from.month} -> ${data.to.month}`);
17472
+ const selection = selectionLabel(data.selection);
17473
+ if (selection) console.log(`Selection: ${selection}`);
17459
17474
  const b = data.basket;
17460
17475
  const excl = [];
17461
17476
  if (b.excludedFromOnly > 0) excl.push(`${b.excludedFromOnly} only in ${data.from.month}`);
@@ -17469,8 +17484,19 @@ function printVisibilityCompare(data) {
17469
17484
  console.log(`Continuity: ${data.continuity.status.replace("-", " ")} \u2014 no directional call is made.`);
17470
17485
  }
17471
17486
  console.log("");
17487
+ if (data.classComparison) {
17488
+ const frame = data.classComparison;
17489
+ console.log(`Class metrics basket (frozen Advanced): ${frame.basket.queryCount} queries; engines: ${frame.basket.providers.join(", ") || "none"}`);
17490
+ const classSweeps = `Class basket sweeps: ${frame.from.month} ${frame.from.runCount}, ${frame.to.month} ${frame.to.runCount}; continuity: ${frame.continuity.status}`;
17491
+ const classLow = frame.from.lowRunCount || frame.to.lowRunCount;
17492
+ console.log(classLow ? `${classSweeps} (below the 5-sweep floor \u2014 class intervals are wide, a "moved" verdict is unlikely to be reachable)` : classSweeps);
17493
+ for (const provider of frame.continuity.providers) {
17494
+ if (provider.status !== "included") console.log(`Class basket excludes ${provider.provider}: ${provider.fromModels.join("/") || "?"} -> ${provider.toModels.join("/") || "?"} (${provider.status})`);
17495
+ }
17496
+ console.log("");
17497
+ }
17472
17498
  const rows = data.metrics.map((m) => ({
17473
- label: `${m.label} \xB7 ${metricQueryClassLabel(m)}${m.driftRobust ? " *" : ""}`,
17499
+ label: `${m.label} \xB7 ${metricQueryClassLabel(m)}${data.classComparison && isVisibilityCompareClassMetric(m.key) ? " \xB7 class basket" : ""}${m.driftRobust ? " *" : ""}`,
17474
17500
  to: periodCell(m.to),
17475
17501
  from: periodCell(m.from),
17476
17502
  verdict: verdictCell(m)
@@ -17600,7 +17626,32 @@ function parseQueryClass(value) {
17600
17626
  }
17601
17627
  return value;
17602
17628
  }
17603
- var COMPARE_USAGE = "canonry visibility-compare <project> --from <YYYY-MM> --to <YYYY-MM> [--format json]";
17629
+ var COMPARE_USAGE = "canonry visibility-compare <project> --from <YYYY-MM> --to <YYYY-MM> [--scope project|group|market|property] [--scope-key <key>] [--market-key <key>] [--provider <engine>] [--location <label|none>] [--format json]";
17630
+ var COMPARE_SELECTION_FLAGS = {
17631
+ scope: "--scope",
17632
+ scopeKey: "--scope-key",
17633
+ marketKey: "--market-key",
17634
+ provider: "--provider",
17635
+ location: "--location"
17636
+ };
17637
+ function parseCompareSelection(values) {
17638
+ const parsed = visibilityCompareSelectionSchema.safeParse({
17639
+ scope: getString(values, "scope"),
17640
+ scopeKey: getString(values, "scope-key"),
17641
+ marketKey: getString(values, "market-key"),
17642
+ provider: getString(values, "provider"),
17643
+ location: getString(values, "location")
17644
+ });
17645
+ if (parsed.success) return parsed.data;
17646
+ const issue = parsed.error.issues[0];
17647
+ const flag = COMPARE_SELECTION_FLAGS[String(issue.path[0])] ?? "--scope";
17648
+ const message = flag === "--scope" ? "--scope must be one of: project, group, market, property" : `${flag} must not be empty`;
17649
+ throw usageError(`Error: ${message}
17650
+ Usage: ${COMPARE_USAGE}`, {
17651
+ message,
17652
+ details: { command: "visibility-compare", usage: COMPARE_USAGE }
17653
+ });
17654
+ }
17604
17655
  var VISIBILITY_STATS_CLI_COMMANDS = [
17605
17656
  {
17606
17657
  path: ["visibility-stats"],
@@ -17637,13 +17688,19 @@ var VISIBILITY_STATS_CLI_COMMANDS = [
17637
17688
  usage: COMPARE_USAGE,
17638
17689
  options: {
17639
17690
  from: stringOption(),
17640
- to: stringOption()
17691
+ to: stringOption(),
17692
+ scope: stringOption(),
17693
+ "scope-key": stringOption(),
17694
+ "market-key": stringOption(),
17695
+ provider: stringOption(),
17696
+ location: stringOption()
17641
17697
  },
17642
17698
  run: async (input) => {
17643
17699
  const project = requireProject(input, "visibility-compare", COMPARE_USAGE);
17644
17700
  await showVisibilityCompare(project, {
17645
17701
  from: getString(input.values, "from"),
17646
17702
  to: getString(input.values, "to"),
17703
+ ...parseCompareSelection(input.values),
17647
17704
  format: input.format
17648
17705
  });
17649
17706
  }
@@ -4,11 +4,11 @@ import {
4
4
  import {
5
5
  layoutSiteCrawlGraphInput,
6
6
  persistSiteCrawlGraphLayout
7
- } from "./chunk-KHNPBUUN.js";
7
+ } from "./chunk-HDJHQPW3.js";
8
8
  import {
9
9
  PACKAGE_VERSION,
10
10
  canonryMcpTools
11
- } from "./chunk-JJPZ4OQ2.js";
11
+ } from "./chunk-WUT3G2GM.js";
12
12
  import {
13
13
  HISTORY_WINDOW_RUNS,
14
14
  IntelligenceService,
@@ -84,7 +84,7 @@ import {
84
84
  siteCrawlPages,
85
85
  siteCrawlSnapshots,
86
86
  trafficSources
87
- } from "./chunk-7YGOE4R2.js";
87
+ } from "./chunk-FAVYLZQV.js";
88
88
  import {
89
89
  RunKinds,
90
90
  SiteCrawlFetchStates,
@@ -108,7 +108,7 @@ import {
108
108
  placementLinkDecision,
109
109
  siteAuditPageFactorSchema,
110
110
  wilsonInterval
111
- } from "./chunk-TOSPZ7I5.js";
111
+ } from "./chunk-2LO7FLVD.js";
112
112
 
113
113
  // src/demo-server.ts
114
114
  import { dirname, join as join2 } from "path";
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-H6XSHOS5.js";
6
+ } from "./chunk-NFN5GSEJ.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-PXVJ3P5G.js";
10
- import "./chunk-KHNPBUUN.js";
11
- import "./chunk-JJPZ4OQ2.js";
12
- import "./chunk-7YGOE4R2.js";
13
- import "./chunk-TOSPZ7I5.js";
9
+ } from "./chunk-FRWZWJB3.js";
10
+ import "./chunk-HDJHQPW3.js";
11
+ import "./chunk-WUT3G2GM.js";
12
+ import "./chunk-FAVYLZQV.js";
13
+ import "./chunk-2LO7FLVD.js";
14
14
  export {
15
15
  GoogleMarketingRuntimeError,
16
16
  createGoogleMarketingCredentialStore,
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  HISTORY_WINDOW_RUNS,
3
3
  IntelligenceService
4
- } from "./chunk-7YGOE4R2.js";
5
- import "./chunk-TOSPZ7I5.js";
4
+ } from "./chunk-FAVYLZQV.js";
5
+ import "./chunk-2LO7FLVD.js";
6
6
  export {
7
7
  HISTORY_WINDOW_RUNS,
8
8
  IntelligenceService
package/dist/mcp.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  autoSyncSkills
3
- } from "./chunk-CVUR3O5G.js";
3
+ } from "./chunk-MEAKE5W7.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-PXVJ3P5G.js";
8
- import "./chunk-JJPZ4OQ2.js";
7
+ } from "./chunk-FRWZWJB3.js";
8
+ import "./chunk-WUT3G2GM.js";
9
9
  import {
10
10
  isReadOnlyKey,
11
11
  updateCheckEnvOptOut
12
- } from "./chunk-TOSPZ7I5.js";
12
+ } from "./chunk-2LO7FLVD.js";
13
13
 
14
14
  // src/mcp/cli.ts
15
15
  import { randomUUID } from "crypto";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "5.20.3",
3
+ "version": "5.21.0",
4
4
  "type": "module",
5
5
  "description": "Self-hosted AI visibility (AEO) platform: track how ChatGPT, Claude, Gemini, and Perplexity cite your domain, join it with Search Console, GA4, server-side traffic, and paid media, and fix what you find through agent tools (CLI, REST, MCP). Local SQLite.",
6
6
  "keywords": [
@@ -86,32 +86,32 @@
86
86
  "@types/node-cron": "^3.0.11",
87
87
  "tsup": "^8.5.1",
88
88
  "tsx": "^4.19.0",
89
- "@ainyc/canonry-api-client": "0.0.0",
90
- "@ainyc/canonry-config": "0.0.0",
91
89
  "@ainyc/canonry-web": "0.0.0",
90
+ "@ainyc/canonry-api-client": "0.0.0",
92
91
  "@ainyc/canonry-api-routes": "0.0.0",
93
92
  "@ainyc/canonry-contracts": "0.0.0",
93
+ "@ainyc/canonry-config": "0.0.0",
94
94
  "@ainyc/canonry-db": "0.0.0",
95
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
96
- "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
97
95
  "@ainyc/canonry-integration-bing": "0.0.0",
98
- "@ainyc/canonry-integration-google": "0.0.0",
96
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
99
97
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
100
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
98
+ "@ainyc/canonry-integration-google": "0.0.0",
99
+ "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
101
100
  "@ainyc/canonry-integration-google-ads": "0.0.0",
102
- "@ainyc/canonry-integration-google-places": "0.0.0",
103
101
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
102
+ "@ainyc/canonry-integration-google-places": "0.0.0",
103
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
104
104
  "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
105
105
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
106
- "@ainyc/canonry-integration-traffic": "0.0.0",
107
106
  "@ainyc/canonry-integration-wordpress": "0.0.0",
107
+ "@ainyc/canonry-integration-traffic": "0.0.0",
108
108
  "@ainyc/canonry-intelligence": "0.0.0",
109
109
  "@ainyc/canonry-provider-cdp": "0.0.0",
110
- "@ainyc/canonry-provider-claude": "0.0.0",
111
- "@ainyc/canonry-provider-local": "0.0.0",
112
110
  "@ainyc/canonry-provider-gemini": "0.0.0",
111
+ "@ainyc/canonry-provider-claude": "0.0.0",
113
112
  "@ainyc/canonry-provider-openai": "0.0.0",
114
- "@ainyc/canonry-provider-perplexity": "0.0.0"
113
+ "@ainyc/canonry-provider-perplexity": "0.0.0",
114
+ "@ainyc/canonry-provider-local": "0.0.0"
115
115
  },
116
116
  "scripts": {
117
117
  "build": "pnpm run build:cli && pnpm run build:web",