@canonry/canonry 4.131.0 → 4.132.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/assets/agent-workspace/skills/canonry/references/canonry-cli.md +7 -0
  2. package/assets/assets/{AuditHistoryPanel-yJXZMO5t.js → AuditHistoryPanel-Carj_FCP.js} +1 -1
  3. package/assets/assets/{BacklinksPage-6VTLbAYx.js → BacklinksPage-CqOTDVIn.js} +1 -1
  4. package/assets/assets/{ChartPrimitives-D5YGiDLi.js → ChartPrimitives-EuQ82l0S.js} +1 -1
  5. package/assets/assets/{HistoryPage-BxdTM6-R.js → HistoryPage-D6XQfiLX.js} +1 -1
  6. package/assets/assets/{ProjectPage-BJKxZPRO.js → ProjectPage-Dswa9Ah6.js} +1 -1
  7. package/assets/assets/{RunRow-DTrAO7tE.js → RunRow-ThryEZFR.js} +1 -1
  8. package/assets/assets/{RunsPage-CHU0DQGl.js → RunsPage-RFs2WkTC.js} +1 -1
  9. package/assets/assets/{SettingsPage-bOIwju6t.js → SettingsPage-DoUccn9s.js} +1 -1
  10. package/assets/assets/{TrafficPage-BKvuR482.js → TrafficPage-CVvSDZPY.js} +1 -1
  11. package/assets/assets/{TrafficSourceDetailPage-3-iUTgQg.js → TrafficSourceDetailPage-BTUQUBeS.js} +1 -1
  12. package/assets/assets/{arrow-left-BXSfGhr6.js → arrow-left-BoCNqusn.js} +1 -1
  13. package/assets/assets/{extract-error-message-DEAY62LS.js → extract-error-message-BsfOVrKi.js} +1 -1
  14. package/assets/assets/{index-CfjIYitV.js → index-jJurRky0.js} +85 -85
  15. package/assets/assets/{trash-2-O1wo9IX1.js → trash-2-BPb4368K.js} +1 -1
  16. package/assets/index.html +1 -1
  17. package/dist/{chunk-73HPY6XQ.js → chunk-5FWAPJFX.js} +45 -1
  18. package/dist/{chunk-3WBAJKRR.js → chunk-7BD2ZOPV.js} +86 -0
  19. package/dist/{chunk-ZXVWL5HX.js → chunk-QIJKS5KN.js} +743 -301
  20. package/dist/{chunk-5GQ6FF5R.js → chunk-RWTOEEG3.js} +4 -4
  21. package/dist/cli.js +67 -5
  22. package/dist/index.js +4 -4
  23. package/dist/{intelligence-service-YJKQQYJQ.js → intelligence-service-RU2ACYPY.js} +2 -2
  24. package/dist/mcp.js +2 -2
  25. package/package.json +8 -8
@@ -10,7 +10,7 @@ import {
10
10
  loadConfig,
11
11
  loadConfigRaw,
12
12
  saveConfigPatch
13
- } from "./chunk-73HPY6XQ.js";
13
+ } from "./chunk-5FWAPJFX.js";
14
14
  import {
15
15
  CC_CACHE_DIR,
16
16
  DUCKDB_SPEC,
@@ -118,7 +118,7 @@ import {
118
118
  siteAuditPages,
119
119
  siteAuditSnapshots,
120
120
  usageCounters
121
- } from "./chunk-ZXVWL5HX.js";
121
+ } from "./chunk-QIJKS5KN.js";
122
122
  import {
123
123
  AGENT_MEMORY_VALUE_MAX_BYTES,
124
124
  AGENT_PROVIDER_IDS,
@@ -191,7 +191,7 @@ import {
191
191
  validationError,
192
192
  winnabilityClassLabel,
193
193
  withRetry
194
- } from "./chunk-3WBAJKRR.js";
194
+ } from "./chunk-7BD2ZOPV.js";
195
195
 
196
196
  // src/telemetry.ts
197
197
  import crypto from "crypto";
@@ -7000,7 +7000,7 @@ function readStoredGroundingSources(rawResponse) {
7000
7000
  return result;
7001
7001
  }
7002
7002
  async function backfillInsightsCommand(project, opts) {
7003
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-YJKQQYJQ.js");
7003
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-RU2ACYPY.js");
7004
7004
  const config = loadConfig();
7005
7005
  const db = createClient(config.database);
7006
7006
  migrate(db);
package/dist/cli.js CHANGED
@@ -29,7 +29,7 @@ import {
29
29
  setTelemetrySource,
30
30
  showFirstRunNotice,
31
31
  trackEvent
32
- } from "./chunk-5GQ6FF5R.js";
32
+ } from "./chunk-RWTOEEG3.js";
33
33
  import {
34
34
  CliError,
35
35
  EXIT_SYSTEM_ERROR,
@@ -46,7 +46,7 @@ import {
46
46
  saveConfig,
47
47
  saveConfigPatch,
48
48
  usageError
49
- } from "./chunk-73HPY6XQ.js";
49
+ } from "./chunk-5FWAPJFX.js";
50
50
  import {
51
51
  apiKeys,
52
52
  createClient,
@@ -54,7 +54,7 @@ import {
54
54
  projects,
55
55
  queries,
56
56
  renderReportHtml
57
- } from "./chunk-ZXVWL5HX.js";
57
+ } from "./chunk-QIJKS5KN.js";
58
58
  import {
59
59
  AdsOperationKinds,
60
60
  AdsOperationStates,
@@ -97,7 +97,7 @@ import {
97
97
  providerQuotaPolicySchema,
98
98
  resolveProviderInput,
99
99
  winnabilityClassSchema
100
- } from "./chunk-3WBAJKRR.js";
100
+ } from "./chunk-7BD2ZOPV.js";
101
101
 
102
102
  // src/cli.ts
103
103
  import { pathToFileURL } from "url";
@@ -3937,6 +3937,47 @@ async function gaTraffic(project, opts) {
3937
3937
  Last synced: ${result.lastSyncedAt}`);
3938
3938
  }
3939
3939
  }
3940
+ async function gaMeasurementAnalysis(project, opts) {
3941
+ const client = getClient7();
3942
+ const params = {};
3943
+ if (opts?.window) params.window = opts.window;
3944
+ if (opts?.hostScope) params.hostScope = opts.hostScope;
3945
+ if (opts?.pathPrefix) params.pathPrefix = opts.pathPrefix;
3946
+ if (opts?.limit) params.limit = String(opts.limit);
3947
+ const result = await client.gaMeasurementAnalysis(
3948
+ project,
3949
+ Object.keys(params).length > 0 ? params : void 0
3950
+ );
3951
+ if (isMachineFormat(opts?.format)) {
3952
+ console.log(JSON.stringify(result, null, 2));
3953
+ return;
3954
+ }
3955
+ console.log(`GA4 Measurement Analysis for "${project}" (${result.window})
3956
+ `);
3957
+ console.log(` Acquisition: ${result.acquisition.status}`);
3958
+ if (result.acquisition.error) console.log(` Error: ${result.acquisition.error}`);
3959
+ for (const period of result.acquisition.periods) {
3960
+ console.log(` ${period.label.padEnd(8)} ${period.sessions} sessions ${period.startDate} to ${period.endDate}`);
3961
+ }
3962
+ if (result.acquisition.channels.length > 0) {
3963
+ console.log(" Native channels (latest cohort)");
3964
+ for (const channel of result.acquisition.channels) {
3965
+ console.log(` ${channel.channelGroup}: ${channel.periods.at(-1)?.sessions ?? 0}`);
3966
+ }
3967
+ }
3968
+ console.log(` Leads: ${result.leads.status}${result.leads.attributionScope ? ` (${result.leads.attributionScope} attribution)` : ""}`);
3969
+ if (result.leads.error) console.log(` Error: ${result.leads.error}`);
3970
+ for (const period of result.leads.periods) {
3971
+ console.log(` ${period.label.padEnd(8)} ${period.eventCount} leads ${period.startDate} to ${period.endDate}`);
3972
+ }
3973
+ console.log(` Search demand: ${result.searchDemand.status}`);
3974
+ for (const period of result.searchDemand.periods) {
3975
+ console.log(` ${period.label.padEnd(8)} ${period.propertyClicks} clicks / ${period.propertyImpressions} impressions (${period.brandedClicks} branded clicks / ${period.brandedImpressions} branded impressions; ${period.nonBrandedClicks} reported non-brand clicks / ${period.nonBrandedImpressions} reported non-brand impressions; ${period.unreportedClicks} unreported clicks / ${period.unreportedImpressions} unreported impressions)`);
3976
+ }
3977
+ if (!result.leads.hostAndPathFiltersApplied && result.leads.attributionScope === "channel") {
3978
+ console.log(" Note: lead attribution is channel-level; host and path filters do not apply to leads.");
3979
+ }
3980
+ }
3940
3981
  async function gaAiReferralHistory(project, opts) {
3941
3982
  const client = getClient7();
3942
3983
  const result = await client.gaAiReferralHistory(project, opts?.window ? { window: opts.window } : void 0);
@@ -4367,6 +4408,27 @@ var GA_CLI_COMMANDS = [
4367
4408
  });
4368
4409
  }
4369
4410
  },
4411
+ {
4412
+ path: ["ga", "measurement-analysis"],
4413
+ usage: "canonry ga measurement-analysis <project> [--window 30d|60d|90d] [--host-scope marketing|all] [--path-prefix /path] [--limit 100] [--format json]",
4414
+ options: {
4415
+ window: stringOption(),
4416
+ "host-scope": stringOption(),
4417
+ "path-prefix": stringOption(),
4418
+ limit: stringOption()
4419
+ },
4420
+ run: async (input) => {
4421
+ const project = requireProject(input, "ga.measurement-analysis", "canonry ga measurement-analysis <project> [--window 30d|60d|90d] [--format json]");
4422
+ const limitValue = getString(input.values, "limit");
4423
+ await gaMeasurementAnalysis(project, {
4424
+ window: getString(input.values, "window"),
4425
+ hostScope: getString(input.values, "host-scope"),
4426
+ pathPrefix: getString(input.values, "path-prefix"),
4427
+ limit: limitValue ? parseInt(limitValue, 10) : void 0,
4428
+ format: input.format
4429
+ });
4430
+ }
4431
+ },
4370
4432
  {
4371
4433
  path: ["ga", "traffic"],
4372
4434
  usage: "canonry ga traffic <project> [--limit 50] [--window 30d] [--format json]",
@@ -4471,7 +4533,7 @@ var GA_CLI_COMMANDS = [
4471
4533
  unknownSubcommand(input.positionals[0], {
4472
4534
  command: "ga",
4473
4535
  usage: "canonry ga <subcommand> <project> [args]",
4474
- available: ["connect", "disconnect", "status", "sync", "traffic", "coverage", "ai-referral-history", "social-referral-history", "session-history", "social-referral-summary", "attribution"]
4536
+ available: ["connect", "disconnect", "status", "sync", "measurement-analysis", "traffic", "coverage", "ai-referral-history", "social-referral-history", "session-history", "social-referral-summary", "attribution"]
4475
4537
  });
4476
4538
  }
4477
4539
  }
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-5GQ6FF5R.js";
3
+ } from "./chunk-RWTOEEG3.js";
4
4
  import {
5
5
  loadConfig
6
- } from "./chunk-73HPY6XQ.js";
7
- import "./chunk-ZXVWL5HX.js";
8
- import "./chunk-3WBAJKRR.js";
6
+ } from "./chunk-5FWAPJFX.js";
7
+ import "./chunk-QIJKS5KN.js";
8
+ import "./chunk-7BD2ZOPV.js";
9
9
  export {
10
10
  createServer,
11
11
  loadConfig
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-ZXVWL5HX.js";
4
- import "./chunk-3WBAJKRR.js";
3
+ } from "./chunk-QIJKS5KN.js";
4
+ import "./chunk-7BD2ZOPV.js";
5
5
  export {
6
6
  IntelligenceService
7
7
  };
package/dist/mcp.js CHANGED
@@ -3,10 +3,10 @@ import {
3
3
  PACKAGE_VERSION,
4
4
  canonryMcpTools,
5
5
  createApiClient
6
- } from "./chunk-73HPY6XQ.js";
6
+ } from "./chunk-5FWAPJFX.js";
7
7
  import {
8
8
  isReadOnlyKey
9
- } from "./chunk-3WBAJKRR.js";
9
+ } from "./chunk-7BD2ZOPV.js";
10
10
 
11
11
  // src/mcp/cli.ts
12
12
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "4.131.0",
3
+ "version": "4.132.0",
4
4
  "type": "module",
5
5
  "description": "Agent-first open-source AEO operating platform - track how answer engines cite your domain",
6
6
  "license": "FSL-1.1-ALv2",
@@ -66,23 +66,23 @@
66
66
  "tsup": "^8.5.1",
67
67
  "tsx": "^4.19.0",
68
68
  "@ainyc/canonry-api-client": "0.0.0",
69
- "@ainyc/canonry-contracts": "0.0.0",
70
69
  "@ainyc/canonry-api-routes": "0.0.0",
71
- "@ainyc/canonry-config": "0.0.0",
72
70
  "@ainyc/canonry-db": "0.0.0",
71
+ "@ainyc/canonry-config": "0.0.0",
72
+ "@ainyc/canonry-contracts": "0.0.0",
73
73
  "@ainyc/canonry-integration-bing": "0.0.0",
74
74
  "@ainyc/canonry-integration-openai-ads": "0.0.0",
75
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
75
+ "@ainyc/canonry-integration-commoncrawl": "0.0.0",
76
76
  "@ainyc/canonry-integration-google": "0.0.0",
77
77
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
78
- "@ainyc/canonry-integration-google-places": "0.0.0",
78
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
79
79
  "@ainyc/canonry-integration-traffic": "0.0.0",
80
- "@ainyc/canonry-integration-commoncrawl": "0.0.0",
81
- "@ainyc/canonry-intelligence": "0.0.0",
82
80
  "@ainyc/canonry-integration-wordpress": "0.0.0",
81
+ "@ainyc/canonry-intelligence": "0.0.0",
82
+ "@ainyc/canonry-integration-google-places": "0.0.0",
83
+ "@ainyc/canonry-provider-cdp": "0.0.0",
83
84
  "@ainyc/canonry-provider-claude": "0.0.0",
84
85
  "@ainyc/canonry-provider-gemini": "0.0.0",
85
- "@ainyc/canonry-provider-cdp": "0.0.0",
86
86
  "@ainyc/canonry-provider-local": "0.0.0",
87
87
  "@ainyc/canonry-provider-perplexity": "0.0.0",
88
88
  "@ainyc/canonry-provider-openai": "0.0.0"