@ainyc/canonry 4.114.1 → 4.115.1

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/assets/{BacklinksPage-C60ma4Sg.js → BacklinksPage-yUb8oJuq.js} +1 -1
  2. package/assets/assets/{ChartPrimitives-Blgw1l6J.js → ChartPrimitives-CdQM3YDG.js} +1 -1
  3. package/assets/assets/ProjectPage-CHj9fvTs.js +7 -0
  4. package/assets/assets/{RunRow-DgQiXWZl.js → RunRow-BU_x7EcP.js} +1 -1
  5. package/assets/assets/{RunsPage-C9upHccV.js → RunsPage-CFIBWaO7.js} +1 -1
  6. package/assets/assets/{SettingsPage-Bz_-_DnJ.js → SettingsPage-PyMryUad.js} +1 -1
  7. package/assets/assets/{TrafficPage-BhBnQl2N.js → TrafficPage-471ypAdQ.js} +1 -1
  8. package/assets/assets/{TrafficSourceDetailPage-DWXqcRNO.js → TrafficSourceDetailPage-CI7TEQge.js} +1 -1
  9. package/assets/assets/{arrow-left-C6SuuEtD.js → arrow-left-D2N9u-0i.js} +1 -1
  10. package/assets/assets/{extract-error-message-DPZ5yqzd.js → extract-error-message-CAdsqKp3.js} +1 -1
  11. package/assets/assets/index-B4R1-8hR.css +1 -0
  12. package/assets/assets/{index-C3oQZHf8.js → index-CoL5HENE.js} +66 -66
  13. package/assets/assets/{trash-2-D3Nju7AK.js → trash-2-UgQrN5Np.js} +1 -1
  14. package/assets/index.html +2 -2
  15. package/dist/{chunk-VEUBAZRG.js → chunk-6LOKMEL3.js} +101 -0
  16. package/dist/{chunk-WMWZW34J.js → chunk-B2SNXXAJ.js} +4 -4
  17. package/dist/{chunk-DUBZH5JW.js → chunk-CW4JISBL.js} +1 -1
  18. package/dist/{chunk-3VSTTH4M.js → chunk-Z3OGDQHB.js} +489 -244
  19. package/dist/cli.js +52 -8
  20. package/dist/index.js +4 -4
  21. package/dist/{intelligence-service-I5EQ77KZ.js → intelligence-service-4AWB2V7U.js} +2 -2
  22. package/dist/mcp.js +2 -2
  23. package/package.json +8 -8
  24. package/assets/assets/ProjectPage-DfvEEwNU.js +0 -7
  25. package/assets/assets/index-CReX5Jn9.css +0 -1
package/dist/cli.js CHANGED
@@ -29,7 +29,7 @@ import {
29
29
  setTelemetrySource,
30
30
  showFirstRunNotice,
31
31
  trackEvent
32
- } from "./chunk-WMWZW34J.js";
32
+ } from "./chunk-B2SNXXAJ.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-DUBZH5JW.js";
49
+ } from "./chunk-CW4JISBL.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-3VSTTH4M.js";
57
+ } from "./chunk-Z3OGDQHB.js";
58
58
  import {
59
59
  BacklinkSources,
60
60
  CcReleaseSyncStatuses,
@@ -80,7 +80,7 @@ import {
80
80
  providerQuotaPolicySchema,
81
81
  resolveProviderInput,
82
82
  winnabilityClassSchema
83
- } from "./chunk-VEUBAZRG.js";
83
+ } from "./chunk-6LOKMEL3.js";
84
84
 
85
85
  // src/cli.ts
86
86
  import { pathToFileURL } from "url";
@@ -3060,17 +3060,22 @@ async function gaTraffic(project, opts) {
3060
3060
  if (result.aiSessionsDeduped > 0) {
3061
3061
  const share = result.totalSessions > 0 ? Math.round(result.aiSessionsDeduped / result.totalSessions * 100) : 0;
3062
3062
  console.log(` AI Sessions (deduped): ${result.aiSessionsDeduped} (${share}% of total)`);
3063
+ if (result.paidAiSessionsDeduped > 0) {
3064
+ console.log(` Paid AI: ${result.paidAiSessionsDeduped} (${result.paidAiSharePctDisplay} of total)`);
3065
+ }
3063
3066
  }
3064
3067
  console.log();
3065
3068
  if (result.aiReferrals.length > 0) {
3066
3069
  const attrWidth = 12;
3070
+ const classWidth = 8;
3067
3071
  console.log(" AI REFERRAL SOURCES");
3068
- console.log(` ${"SOURCE".padEnd(25)} ${"MEDIUM".padEnd(15)} ${"ATTRIBUTION".padEnd(attrWidth)} ${"SESSIONS".padEnd(10)}${"USERS".padEnd(8)}`);
3069
- console.log(` ${"\u2500".repeat(25)} ${"\u2500".repeat(15)} ${"\u2500".repeat(attrWidth)} ${"\u2500".repeat(10)}${"\u2500".repeat(8)}`);
3072
+ console.log(` ${"SOURCE".padEnd(25)} ${"MEDIUM".padEnd(15)} ${"CLASS".padEnd(classWidth)} ${"ATTRIBUTION".padEnd(attrWidth)} ${"SESSIONS".padEnd(10)}${"USERS".padEnd(8)}`);
3073
+ console.log(` ${"\u2500".repeat(25)} ${"\u2500".repeat(15)} ${"\u2500".repeat(classWidth)} ${"\u2500".repeat(attrWidth)} ${"\u2500".repeat(10)}${"\u2500".repeat(8)}`);
3070
3074
  for (const ref of result.aiReferrals) {
3071
3075
  const dimLabel = ref.sourceDimension === "first_user" ? "first-visit" : ref.sourceDimension === "manual_utm" ? "utm" : "session";
3076
+ const classLabel = ref.trafficClass === "paid" ? "paid" : "organic";
3072
3077
  console.log(
3073
- ` ${ref.source.padEnd(25)} ${ref.medium.padEnd(15)} ${dimLabel.padEnd(attrWidth)} ${String(ref.sessions).padEnd(10)}${String(ref.users).padEnd(8)}`
3078
+ ` ${ref.source.padEnd(25)} ${ref.medium.padEnd(15)} ${classLabel.padEnd(classWidth)} ${dimLabel.padEnd(attrWidth)} ${String(ref.sessions).padEnd(10)}${String(ref.users).padEnd(8)}`
3074
3079
  );
3075
3080
  }
3076
3081
  console.log();
@@ -3305,19 +3310,35 @@ async function gaAttribution(project, opts) {
3305
3310
  organicSessions: traffic.totalOrganicSessions,
3306
3311
  aiSessions: traffic.aiSessionsDeduped,
3307
3312
  aiUsers: traffic.aiUsersDeduped,
3313
+ paidAiSessions: traffic.paidAiSessionsDeduped,
3314
+ paidAiUsers: traffic.paidAiUsersDeduped,
3315
+ organicAiSessions: traffic.organicAiSessionsDeduped,
3316
+ organicAiUsers: traffic.organicAiUsersDeduped,
3308
3317
  aiSessionsBySession: traffic.aiSessionsBySession,
3309
3318
  aiUsersBySession: traffic.aiUsersBySession,
3319
+ paidAiSessionsBySession: traffic.paidAiSessionsBySession,
3320
+ paidAiUsersBySession: traffic.paidAiUsersBySession,
3321
+ organicAiSessionsBySession: traffic.organicAiSessionsBySession,
3322
+ organicAiUsersBySession: traffic.organicAiUsersBySession,
3310
3323
  socialSessions: traffic.socialSessions,
3311
3324
  socialUsers: traffic.socialUsers,
3312
3325
  directSessions: traffic.totalDirectSessions,
3313
3326
  aiSharePct: traffic.aiSharePct,
3314
3327
  aiSharePctBySession: traffic.aiSharePctBySession,
3328
+ paidAiSharePct: traffic.paidAiSharePct,
3329
+ paidAiSharePctBySession: traffic.paidAiSharePctBySession,
3330
+ organicAiSharePct: traffic.organicAiSharePct,
3331
+ organicAiSharePctBySession: traffic.organicAiSharePctBySession,
3315
3332
  socialSharePct: traffic.socialSharePct,
3316
3333
  organicSharePct: traffic.organicSharePct,
3317
3334
  directSharePct: traffic.directSharePct,
3318
3335
  organicSharePctDisplay: traffic.organicSharePctDisplay,
3319
3336
  aiSharePctDisplay: traffic.aiSharePctDisplay,
3320
3337
  aiSharePctBySessionDisplay: traffic.aiSharePctBySessionDisplay,
3338
+ paidAiSharePctDisplay: traffic.paidAiSharePctDisplay,
3339
+ paidAiSharePctBySessionDisplay: traffic.paidAiSharePctBySessionDisplay,
3340
+ organicAiSharePctDisplay: traffic.organicAiSharePctDisplay,
3341
+ organicAiSharePctBySessionDisplay: traffic.organicAiSharePctBySessionDisplay,
3321
3342
  socialSharePctDisplay: traffic.socialSharePctDisplay,
3322
3343
  directSharePctDisplay: traffic.directSharePctDisplay,
3323
3344
  otherSessions: traffic.otherSessions,
@@ -3345,6 +3366,9 @@ async function gaAttribution(project, opts) {
3345
3366
  console.log(` Social: ${String(traffic.channelBreakdown.social.sessions).padEnd(6)} (${traffic.channelBreakdown.social.sharePctDisplay.padStart(4)}) ${fmtTrend(trend.social.trend7dPct).padEnd(12)} ${fmtTrend(trend.social.trend30dPct)}`);
3346
3367
  console.log(` Direct: ${String(traffic.channelBreakdown.direct.sessions).padEnd(6)} (${traffic.channelBreakdown.direct.sharePctDisplay.padStart(4)}) ${fmtTrend(trend.direct.trend7dPct).padEnd(12)} ${fmtTrend(trend.direct.trend30dPct)}`);
3347
3368
  console.log(` AI Referrals: ${String(traffic.channelBreakdown.ai.sessions).padEnd(6)} (${traffic.channelBreakdown.ai.sharePctDisplay.padStart(4)}) ${fmtTrend(trend.ai.trend7dPct).padEnd(12)} ${fmtTrend(trend.ai.trend30dPct)} (lower bound \u2014 sessionSource only; referrer-stripped traffic falls under Direct)`);
3369
+ if (traffic.paidAiSessionsBySession > 0) {
3370
+ console.log(` Paid AI: ${String(traffic.paidAiSessionsBySession).padEnd(6)} (${traffic.paidAiSharePctBySessionDisplay.padStart(4)})`);
3371
+ }
3348
3372
  console.log(` Other: ${String(traffic.channelBreakdown.other.sessions).padEnd(6)} (${traffic.channelBreakdown.other.sharePctDisplay.padStart(4)})`);
3349
3373
  console.log(` \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`);
3350
3374
  console.log(` Total: ${String(traffic.totalSessions).padEnd(6)} ${fmtTrend(trend.total.trend7dPct).padEnd(12)} ${fmtTrend(trend.total.trend30dPct)}`);
@@ -3373,19 +3397,35 @@ async function gaAttribution(project, opts) {
3373
3397
  organicSessions: traffic.totalOrganicSessions,
3374
3398
  aiSessions: traffic.aiSessionsDeduped,
3375
3399
  aiUsers: traffic.aiUsersDeduped,
3400
+ paidAiSessions: traffic.paidAiSessionsDeduped,
3401
+ paidAiUsers: traffic.paidAiUsersDeduped,
3402
+ organicAiSessions: traffic.organicAiSessionsDeduped,
3403
+ organicAiUsers: traffic.organicAiUsersDeduped,
3376
3404
  aiSessionsBySession: traffic.aiSessionsBySession,
3377
3405
  aiUsersBySession: traffic.aiUsersBySession,
3406
+ paidAiSessionsBySession: traffic.paidAiSessionsBySession,
3407
+ paidAiUsersBySession: traffic.paidAiUsersBySession,
3408
+ organicAiSessionsBySession: traffic.organicAiSessionsBySession,
3409
+ organicAiUsersBySession: traffic.organicAiUsersBySession,
3378
3410
  socialSessions: traffic.socialSessions,
3379
3411
  socialUsers: traffic.socialUsers,
3380
3412
  directSessions: traffic.totalDirectSessions,
3381
3413
  aiSharePct: traffic.aiSharePct,
3382
3414
  aiSharePctBySession: traffic.aiSharePctBySession,
3415
+ paidAiSharePct: traffic.paidAiSharePct,
3416
+ paidAiSharePctBySession: traffic.paidAiSharePctBySession,
3417
+ organicAiSharePct: traffic.organicAiSharePct,
3418
+ organicAiSharePctBySession: traffic.organicAiSharePctBySession,
3383
3419
  socialSharePct: traffic.socialSharePct,
3384
3420
  organicSharePct: traffic.organicSharePct,
3385
3421
  directSharePct: traffic.directSharePct,
3386
3422
  organicSharePctDisplay: traffic.organicSharePctDisplay,
3387
3423
  aiSharePctDisplay: traffic.aiSharePctDisplay,
3388
3424
  aiSharePctBySessionDisplay: traffic.aiSharePctBySessionDisplay,
3425
+ paidAiSharePctDisplay: traffic.paidAiSharePctDisplay,
3426
+ paidAiSharePctBySessionDisplay: traffic.paidAiSharePctBySessionDisplay,
3427
+ organicAiSharePctDisplay: traffic.organicAiSharePctDisplay,
3428
+ organicAiSharePctBySessionDisplay: traffic.organicAiSharePctBySessionDisplay,
3389
3429
  socialSharePctDisplay: traffic.socialSharePctDisplay,
3390
3430
  directSharePctDisplay: traffic.directSharePctDisplay,
3391
3431
  otherSessions: traffic.otherSessions,
@@ -3414,13 +3454,17 @@ async function gaAttribution(project, opts) {
3414
3454
  console.log(` Social: ${traffic.channelBreakdown.social.sessions} sessions (${traffic.channelBreakdown.social.sharePctDisplay})`);
3415
3455
  console.log(` Direct: ${traffic.channelBreakdown.direct.sessions} sessions (${traffic.channelBreakdown.direct.sharePctDisplay})`);
3416
3456
  console.log(` AI Referrals: ${traffic.channelBreakdown.ai.sessions} sessions (${traffic.channelBreakdown.ai.sharePctDisplay}) (lower bound \u2014 sessionSource only; referrer-stripped traffic falls under Direct)`);
3457
+ if (traffic.paidAiSessionsBySession > 0) {
3458
+ console.log(` Paid AI: ${traffic.paidAiSessionsBySession} sessions (${traffic.paidAiSharePctBySessionDisplay})`);
3459
+ }
3417
3460
  console.log(` Other: ${traffic.channelBreakdown.other.sessions} sessions (${traffic.channelBreakdown.other.sharePctDisplay})`);
3418
3461
  if (traffic.aiReferrals.length > 0) {
3419
3462
  console.log();
3420
3463
  console.log(" AI SOURCES");
3421
3464
  for (const ref of traffic.aiReferrals.slice(0, 10)) {
3422
3465
  const dimLabel = ref.sourceDimension === "first_user" ? "first-visit" : ref.sourceDimension === "manual_utm" ? "utm" : "session";
3423
- console.log(` ${ref.source.padEnd(25)} ${String(ref.sessions).padEnd(8)} sessions (${dimLabel})`);
3466
+ const classLabel = ref.trafficClass === "paid" ? "paid" : "organic";
3467
+ console.log(` ${ref.source.padEnd(25)} ${String(ref.sessions).padEnd(8)} sessions (${classLabel}, ${dimLabel})`);
3424
3468
  }
3425
3469
  }
3426
3470
  if (traffic.aiReferralLandingPages.length > 0) {
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  createServer
3
- } from "./chunk-WMWZW34J.js";
3
+ } from "./chunk-B2SNXXAJ.js";
4
4
  import {
5
5
  loadConfig
6
- } from "./chunk-DUBZH5JW.js";
7
- import "./chunk-3VSTTH4M.js";
8
- import "./chunk-VEUBAZRG.js";
6
+ } from "./chunk-CW4JISBL.js";
7
+ import "./chunk-Z3OGDQHB.js";
8
+ import "./chunk-6LOKMEL3.js";
9
9
  export {
10
10
  createServer,
11
11
  loadConfig
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  IntelligenceService
3
- } from "./chunk-3VSTTH4M.js";
4
- import "./chunk-VEUBAZRG.js";
3
+ } from "./chunk-Z3OGDQHB.js";
4
+ import "./chunk-6LOKMEL3.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-DUBZH5JW.js";
6
+ } from "./chunk-CW4JISBL.js";
7
7
  import {
8
8
  isReadOnlyKey
9
- } from "./chunk-VEUBAZRG.js";
9
+ } from "./chunk-6LOKMEL3.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": "@ainyc/canonry",
3
- "version": "4.114.1",
3
+ "version": "4.115.1",
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,22 +66,22 @@
66
66
  "tsup": "^8.5.1",
67
67
  "tsx": "^4.19.0",
68
68
  "@ainyc/canonry-api-client": "0.0.0",
69
- "@ainyc/canonry-api-routes": "0.0.0",
70
69
  "@ainyc/canonry-config": "0.0.0",
71
- "@ainyc/canonry-db": "0.0.0",
72
70
  "@ainyc/canonry-contracts": "0.0.0",
71
+ "@ainyc/canonry-api-routes": "0.0.0",
72
+ "@ainyc/canonry-db": "0.0.0",
73
73
  "@ainyc/canonry-integration-bing": "0.0.0",
74
- "@ainyc/canonry-integration-openai-ads": "0.0.0",
74
+ "@ainyc/canonry-integration-cloud-run": "0.0.0",
75
75
  "@ainyc/canonry-integration-commoncrawl": "0.0.0",
76
76
  "@ainyc/canonry-integration-google": "0.0.0",
77
- "@ainyc/canonry-integration-cloud-run": "0.0.0",
77
+ "@ainyc/canonry-integration-openai-ads": "0.0.0",
78
78
  "@ainyc/canonry-integration-google-business-profile": "0.0.0",
79
79
  "@ainyc/canonry-integration-google-places": "0.0.0",
80
80
  "@ainyc/canonry-integration-traffic": "0.0.0",
81
- "@ainyc/canonry-integration-wordpress": "0.0.0",
82
- "@ainyc/canonry-provider-cdp": "0.0.0",
83
- "@ainyc/canonry-provider-claude": "0.0.0",
84
81
  "@ainyc/canonry-intelligence": "0.0.0",
82
+ "@ainyc/canonry-provider-claude": "0.0.0",
83
+ "@ainyc/canonry-provider-cdp": "0.0.0",
84
+ "@ainyc/canonry-integration-wordpress": "0.0.0",
85
85
  "@ainyc/canonry-provider-gemini": "0.0.0",
86
86
  "@ainyc/canonry-provider-openai": "0.0.0",
87
87
  "@ainyc/canonry-provider-perplexity": "0.0.0",