@canonry/canonry 7.17.2 → 7.18.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 (30) hide show
  1. package/assets/agent-workspace/skills/aero/references/portfolio-analysis.md +8 -6
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +1 -1
  3. package/assets/assets/{AuditHistoryPanel-Dga03Niw.js → AuditHistoryPanel-CgKpjgpq.js} +1 -1
  4. package/assets/assets/{BacklinksPage-CfodWuIt.js → BacklinksPage-BBqbRSeG.js} +1 -1
  5. package/assets/assets/{HistoryPage-BN_vTU5L.js → HistoryPage-D8nQ8E8_.js} +1 -1
  6. package/assets/assets/{MeasurementPropertyPage-CjiyzOmE.js → MeasurementPropertyPage-CQ8lLoeA.js} +1 -1
  7. package/assets/assets/{ProjectPage-AxclA3YC.js → ProjectPage-CP4fvluh.js} +1 -1
  8. package/assets/assets/{RunsPage-Ca_ziCGC.js → RunsPage-D0qkTwas.js} +1 -1
  9. package/assets/assets/{SettingsPage-SO1xl0d3.js → SettingsPage-DaqR1wKC.js} +1 -1
  10. package/assets/assets/{SiteHealthSection-C9JgRzzs.js → SiteHealthSection-dGXxZ8IR.js} +3 -3
  11. package/assets/assets/{TrafficPage-DrcbXNQB.js → TrafficPage-DodOmnVv.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-HDZGKgyd.js → TrafficSourceDetailPage-C7b-BcKF.js} +1 -1
  13. package/assets/assets/{extract-error-message-D48vwe7I.js → extract-error-message-BYvzTsML.js} +1 -1
  14. package/assets/assets/{index-BaBHBReI.js → index-BVzozur0.js} +21 -21
  15. package/assets/assets/{react-sigma_core.esm.min-DVHs4npB.js → react-sigma_core.esm.min-DXcq1O0r.js} +1 -1
  16. package/assets/assets/{v2-overview-adapter-CTEXuiRt.js → v2-overview-adapter-1MHnrdnr.js} +1 -1
  17. package/assets/index.html +1 -1
  18. package/dist/{chunk-3LPQ4JV5.js → chunk-5M2RY5WU.js} +8 -7
  19. package/dist/{chunk-YJS4OE6I.js → chunk-COQOQYRZ.js} +136 -37
  20. package/dist/{chunk-QAIJH74T.js → chunk-EAAM47H6.js} +24 -9
  21. package/dist/{chunk-P2XY5YX7.js → chunk-JMC7CEJB.js} +4 -4
  22. package/dist/{chunk-4EDH2ORA.js → chunk-JUOFNJLV.js} +3 -3
  23. package/dist/{chunk-NPNU6UHD.js → chunk-U7D7LNVJ.js} +2 -2
  24. package/dist/{chunk-MIRAKDRW.js → chunk-X2S7D3MN.js} +17 -3
  25. package/dist/cli.js +26 -16
  26. package/dist/{demo-server-54SLPSJF.js → demo-server-XWRIXME5.js} +4 -4
  27. package/dist/index.js +6 -6
  28. package/dist/{intelligence-service-62CEP6M2.js → intelligence-service-332S7D7Y.js} +2 -2
  29. package/dist/mcp.js +4 -4
  30. package/package.json +11 -11
@@ -3720,8 +3720,9 @@ var measurementCountMetricValueSchema = z6.discriminatedUnion("state", [
3720
3720
  reason: measurementMetricUnavailableReasonSchema
3721
3721
  }).strict()
3722
3722
  ]);
3723
- var measurementOverviewScopeKindSchema = z6.enum(["all", "group", "property"]);
3723
+ var measurementOverviewScopeKindSchema = z6.enum(["all", "group", "market", "property"]);
3724
3724
  var measurementQueryClassFilterSchema = queryClassFilterSchema;
3725
+ var MEASUREMENT_DEFAULT_QUERY_CLASS = "non-brand";
3725
3726
  var measurementOverviewSortSchema = z6.enum([
3726
3727
  "label-asc",
3727
3728
  "label-desc",
@@ -3742,7 +3743,10 @@ var measurementNextActionKindSchema = z6.enum([
3742
3743
  var measurementOverviewQuerySchema = z6.object({
3743
3744
  scope: measurementOverviewScopeKindSchema,
3744
3745
  groupKey: measurementV2StableKeySchema.optional(),
3746
+ /** Required for market scope: a frozen reporting scope's stable key. */
3747
+ marketKey: measurementV2StableKeySchema.optional(),
3745
3748
  targetKey: measurementV2StableKeySchema.optional(),
3749
+ /** Omit for non-brand. `all` pools branded and non-brand into one rate. */
3746
3750
  queryClass: measurementQueryClassFilterSchema.optional(),
3747
3751
  provider: providerNameSchema.optional(),
3748
3752
  location: z6.string().trim().min(1).optional(),
@@ -11454,6 +11458,13 @@ var measurementReportRunSchema = z26.object({
11454
11458
  }).strict();
11455
11459
  var measurementReportResponseSchema = z26.object({
11456
11460
  revision: z26.number().int().positive(),
11461
+ /**
11462
+ * The query class every group, Target and evidence row below is taken over:
11463
+ * non-brand unless the request named another, and `all` pools branded with
11464
+ * non-brand. Null for a schema v1 revision, which records no class. Absent on
11465
+ * servers that predate it.
11466
+ */
11467
+ queryClass: measurementQueryClassFilterSchema.nullable().optional(),
11457
11468
  run: measurementReportRunSchema.nullable(),
11458
11469
  groups: z26.array(measurementGroupReportSchema),
11459
11470
  targets: z26.array(measurementTargetReportSchema),
@@ -12047,12 +12058,14 @@ var measurementPropertyCompetitorsResponseSchema = z28.object({
12047
12058
  var measurementChangesSortSchema = z28.enum(["magnitude", "label"]);
12048
12059
  var MEASUREMENT_CHANGES_DEFAULT_SORT = "magnitude";
12049
12060
  var MEASUREMENT_CHANGES_NOISE_ANSWERS = 2;
12061
+ var measurementChangesScopeKindSchema = z28.enum(["all", "group", "property"]);
12050
12062
  var measurementChangesQuerySchema = z28.object({
12051
12063
  runId: measurementDemoFilterQueryShape.runId,
12052
- scope: measurementOverviewScopeKindSchema.default("all"),
12064
+ scope: measurementChangesScopeKindSchema.default("all"),
12053
12065
  groupKey: measurementV2StableKeySchema.optional(),
12054
12066
  targetKey: measurementV2StableKeySchema.optional(),
12055
- queryClass: measurementQueryClassFilterSchema.default("all"),
12067
+ /** Defaults to non-brand. `all` pools both classes and adds `metricsByClass`. */
12068
+ queryClass: measurementQueryClassFilterSchema.default(MEASUREMENT_DEFAULT_QUERY_CLASS),
12056
12069
  provider: measurementDemoFilterQueryShape.provider,
12057
12070
  location: measurementDemoFilterQueryShape.location,
12058
12071
  limit: z28.number().int().positive().max(50).optional(),
@@ -22670,6 +22683,7 @@ export {
22670
22683
  MEASUREMENT_PAGE_DEFAULT_LIMIT,
22671
22684
  MEASUREMENT_PAGE_MAX_LIMIT,
22672
22685
  measurementQueryClassFilterSchema,
22686
+ MEASUREMENT_DEFAULT_QUERY_CLASS,
22673
22687
  measurementOverviewSortSchema,
22674
22688
  MEASUREMENT_OVERVIEW_DEFAULT_SORT,
22675
22689
  measurementOverviewQuerySchema,
package/dist/cli.js CHANGED
@@ -34,11 +34,11 @@ import {
34
34
  trackCliCommandFinished,
35
35
  trackEvent,
36
36
  waitForServerRuntimeStartup
37
- } from "./chunk-3LPQ4JV5.js";
37
+ } from "./chunk-5M2RY5WU.js";
38
38
  import {
39
39
  autoSyncSkills,
40
40
  formatAutoSyncNotice
41
- } from "./chunk-4EDH2ORA.js";
41
+ } from "./chunk-JUOFNJLV.js";
42
42
  import {
43
43
  configExists,
44
44
  createApiClient,
@@ -55,13 +55,13 @@ import {
55
55
  saveConfig,
56
56
  saveConfigPatch,
57
57
  shouldPrintServeSkillsNudge
58
- } from "./chunk-P2XY5YX7.js";
58
+ } from "./chunk-JMC7CEJB.js";
59
59
  import {
60
60
  DEFAULT_DEMO_TRUSTED_PROXIES,
61
61
  trustedProxiesProblem,
62
62
  trustedProxyProblem
63
63
  } from "./chunk-RB2F4D3Z.js";
64
- import "./chunk-NPNU6UHD.js";
64
+ import "./chunk-U7D7LNVJ.js";
65
65
  import {
66
66
  CliError,
67
67
  EXIT_SYSTEM_ERROR,
@@ -73,7 +73,7 @@ import {
73
73
  runMeasurementDraftAction,
74
74
  systemError,
75
75
  usageError
76
- } from "./chunk-QAIJH74T.js";
76
+ } from "./chunk-EAAM47H6.js";
77
77
  import {
78
78
  CLOUDFLARE_WORKER_BINDINGS,
79
79
  CLOUDFLARE_WORKER_GENERATED_MARKER,
@@ -105,7 +105,7 @@ import {
105
105
  rawEventSamples,
106
106
  readMarketCompetitorNames,
107
107
  runs
108
- } from "./chunk-YJS4OE6I.js";
108
+ } from "./chunk-COQOQYRZ.js";
109
109
  import {
110
110
  AdsDeliverySnapshotStatuses,
111
111
  AdsHistoricalCampaignRollupStatuses,
@@ -238,7 +238,7 @@ import {
238
238
  visibilityCompareSelectionSchema,
239
239
  visibilityReportRequestSchema,
240
240
  winnabilityClassSchema
241
- } from "./chunk-MIRAKDRW.js";
241
+ } from "./chunk-X2S7D3MN.js";
242
242
 
243
243
  // src/cli.ts
244
244
  import { pathToFileURL } from "url";
@@ -788,7 +788,7 @@ function parseDemoTrustedProxies(values) {
788
788
  async function demoCommand(options) {
789
789
  const { host, port } = parseDemoListenOptions(options);
790
790
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
791
- const { createDemoServer } = await import("./demo-server-54SLPSJF.js");
791
+ const { createDemoServer } = await import("./demo-server-XWRIXME5.js");
792
792
  const app = await createDemoServer({ trustProxy });
793
793
  let stopping = false;
794
794
  const stop = () => {
@@ -1202,7 +1202,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
1202
1202
  }
1203
1203
  }
1204
1204
  async function backfillInsightsCommand(project2, opts) {
1205
- const { IntelligenceService } = await import("./intelligence-service-62CEP6M2.js");
1205
+ const { IntelligenceService } = await import("./intelligence-service-332S7D7Y.js");
1206
1206
  const config = loadConfig();
1207
1207
  const db = createClient(config.database);
1208
1208
  migrate(db);
@@ -12247,8 +12247,18 @@ async function discoverMeasurementTargets(project2, sitemapUrl, ruleSource, maxU
12247
12247
  });
12248
12248
  console.log(JSON.stringify(await createApiClient().discoverMeasurementTargets(project2, request), null, 2));
12249
12249
  }
12250
- async function showMeasurementReport(project2, revision) {
12251
- console.log(JSON.stringify(await createApiClient().getMeasurementReport(project2, revision), null, 2));
12250
+ async function showMeasurementReport(project2, revision, queryClass) {
12251
+ console.log(JSON.stringify(await createApiClient().getMeasurementReport(project2, revision, void 0, queryClass), null, 2));
12252
+ }
12253
+ function queryClassText(queryClass) {
12254
+ switch (queryClass) {
12255
+ case "non-brand":
12256
+ return "non-brand queries";
12257
+ case "branded":
12258
+ return "branded queries";
12259
+ case "all":
12260
+ return "branded and non-brand queries pooled";
12261
+ }
12252
12262
  }
12253
12263
  var METRIC_REASONS = {
12254
12264
  plan_v1: "not measured (setup update required)",
@@ -12290,7 +12300,7 @@ async function showMeasurementProperty(project2, opts) {
12290
12300
  function printMeasurementProperty(response) {
12291
12301
  const row = response.properties.items.at(0);
12292
12302
  const lines = [];
12293
- lines.push(`${response.scope.label} \u2014 ${response.queryClass} questions`);
12303
+ lines.push(`${response.scope.label} \xB7 ${queryClassText(response.queryClass)}`);
12294
12304
  lines.push(`Measurement: ${response.measurement.state}${response.measurement.displayedRunId ? ` \xB7 run ${response.measurement.displayedRunId}` : ""}`);
12295
12305
  lines.push("");
12296
12306
  const mention = row ? row.mentionCoverage : response.metrics.mentionCoverage;
@@ -21945,8 +21955,8 @@ Usage: ${usage}`);
21945
21955
  },
21946
21956
  {
21947
21957
  path: ["measurement-plan", "report"],
21948
- usage: "canonry measurement-plan report <project> --revision N [--format json]",
21949
- options: { revision: stringOption() },
21958
+ usage: "canonry measurement-plan report <project> --revision N [--query-class non-brand|branded|all] [--format json] (schema v2 revision: default non-brand, all pools both classes; schema v1 revision: reads every answer, refuses non-brand and branded)",
21959
+ options: { revision: stringOption(), "query-class": stringOption() },
21950
21960
  run: (input) => {
21951
21961
  const project2 = requireProject(input, "measurement-plan.report", "canonry measurement-plan report <project> --revision N");
21952
21962
  const value = getString(input.values, "revision");
@@ -21954,12 +21964,12 @@ Usage: ${usage}`);
21954
21964
  if (revision === void 0 || !Number.isInteger(revision) || revision <= 0) {
21955
21965
  throw usageError("--revision must be a positive integer");
21956
21966
  }
21957
- return showMeasurementReport(project2, revision);
21967
+ return showMeasurementReport(project2, revision, queryClassOption(input));
21958
21968
  }
21959
21969
  },
21960
21970
  {
21961
21971
  path: ["measurement-plan", "property"],
21962
- usage: "canonry measurement-plan property <project> --target-key <key> [--query-class all|branded|non-brand] [--provider <p>] [--location <l>] [--run-id <id>] [--format json]",
21972
+ usage: "canonry measurement-plan property <project> --target-key <key> [--query-class non-brand|branded|all] [--provider <p>] [--location <l>] [--run-id <id>] [--format json] (default non-brand; all pools both classes)",
21963
21973
  options: PROPERTY_SCOPE_OPTIONS,
21964
21974
  run: (input) => {
21965
21975
  const usage = "canonry measurement-plan property <project> --target-key <key>";
@@ -5,11 +5,11 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-NPNU6UHD.js";
8
+ } from "./chunk-U7D7LNVJ.js";
9
9
  import {
10
10
  PACKAGE_VERSION,
11
11
  canonryMcpTools
12
- } from "./chunk-QAIJH74T.js";
12
+ } from "./chunk-EAAM47H6.js";
13
13
  import {
14
14
  HISTORY_WINDOW_RUNS,
15
15
  IntelligenceService,
@@ -85,7 +85,7 @@ import {
85
85
  siteCrawlPages,
86
86
  siteCrawlSnapshots,
87
87
  trafficSources
88
- } from "./chunk-YJS4OE6I.js";
88
+ } from "./chunk-COQOQYRZ.js";
89
89
  import {
90
90
  RunKinds,
91
91
  SiteCrawlFetchStates,
@@ -115,7 +115,7 @@ import {
115
115
  roundPreservingTotal,
116
116
  siteAuditPageFactorSchema,
117
117
  wilsonInterval
118
- } from "./chunk-MIRAKDRW.js";
118
+ } from "./chunk-X2S7D3MN.js";
119
119
 
120
120
  // src/demo-server.ts
121
121
  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-3LPQ4JV5.js";
6
+ } from "./chunk-5M2RY5WU.js";
7
7
  import {
8
8
  loadConfig
9
- } from "./chunk-P2XY5YX7.js";
10
- import "./chunk-NPNU6UHD.js";
11
- import "./chunk-QAIJH74T.js";
12
- import "./chunk-YJS4OE6I.js";
13
- import "./chunk-MIRAKDRW.js";
9
+ } from "./chunk-JMC7CEJB.js";
10
+ import "./chunk-U7D7LNVJ.js";
11
+ import "./chunk-EAAM47H6.js";
12
+ import "./chunk-COQOQYRZ.js";
13
+ import "./chunk-X2S7D3MN.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-YJS4OE6I.js";
5
- import "./chunk-MIRAKDRW.js";
4
+ } from "./chunk-COQOQYRZ.js";
5
+ import "./chunk-X2S7D3MN.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-4EDH2ORA.js";
3
+ } from "./chunk-JUOFNJLV.js";
4
4
  import {
5
5
  createApiClient,
6
6
  createCanonryMcpServer
7
- } from "./chunk-P2XY5YX7.js";
8
- import "./chunk-QAIJH74T.js";
7
+ } from "./chunk-JMC7CEJB.js";
8
+ import "./chunk-EAAM47H6.js";
9
9
  import {
10
10
  isReadOnlyKey,
11
11
  updateCheckEnvOptOut
12
- } from "./chunk-MIRAKDRW.js";
12
+ } from "./chunk-X2S7D3MN.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": "7.17.2",
3
+ "version": "7.18.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": [
@@ -85,32 +85,32 @@
85
85
  "@types/node-cron": "^3.0.11",
86
86
  "tsup": "^8.5.1",
87
87
  "tsx": "^4.19.0",
88
+ "@ainyc/canonry-web": "0.0.0",
89
+ "@ainyc/canonry-api-client": "0.0.0",
88
90
  "@ainyc/canonry-api-routes": "0.0.0",
89
- "@ainyc/canonry-contracts": "0.0.0",
90
91
  "@ainyc/canonry-config": "0.0.0",
91
92
  "@ainyc/canonry-db": "0.0.0",
92
- "@ainyc/canonry-web": "0.0.0",
93
- "@ainyc/canonry-api-client": "0.0.0",
94
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
93
+ "@ainyc/canonry-contracts": "0.0.0",
95
94
  "@ainyc/canonry-integration-bing": "0.0.0",
96
95
  "@ainyc/canonry-integration-cloudflare-queue": "0.0.0",
97
96
  "@ainyc/canonry-integration-cloudflare-worker": "0.0.0",
97
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
98
98
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
99
- "@ainyc/canonry-integration-google-business-profile": "0.0.0",
100
99
  "@ainyc/canonry-integration-google-ads": "0.0.0",
100
+ "@ainyc/canonry-integration-google-business-profile": "0.0.0",
101
+ "@ainyc/canonry-integration-google-places": "0.0.0",
101
102
  "@ainyc/canonry-integration-google": "0.0.0",
102
103
  "@ainyc/canonry-integration-google-tag-manager": "0.0.0",
103
- "@ainyc/canonry-integration-google-places": "0.0.0",
104
- "@ainyc/canonry-integration-traffic": "0.0.0",
105
104
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
105
+ "@ainyc/canonry-integration-traffic": "0.0.0",
106
106
  "@ainyc/canonry-integration-wordpress": "0.0.0",
107
- "@ainyc/canonry-intelligence": "0.0.0",
108
107
  "@ainyc/canonry-provider-cdp": "0.0.0",
109
- "@ainyc/canonry-provider-local": "0.0.0",
110
108
  "@ainyc/canonry-provider-claude": "0.0.0",
109
+ "@ainyc/canonry-intelligence": "0.0.0",
110
+ "@ainyc/canonry-provider-local": "0.0.0",
111
+ "@ainyc/canonry-provider-openai": "0.0.0",
111
112
  "@ainyc/canonry-provider-gemini": "0.0.0",
112
113
  "@ainyc/canonry-provider-muse": "0.0.0",
113
- "@ainyc/canonry-provider-openai": "0.0.0",
114
114
  "@ainyc/canonry-provider-perplexity": "0.0.0",
115
115
  "@ainyc/canonry-integration-typesafe": "0.0.0"
116
116
  },