@canonry/canonry 7.94.0 → 7.96.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 (142) hide show
  1. package/assets/agent-workspace/skills/aero/references/ai-traffic-tracking.md +4 -1
  2. package/assets/agent-workspace/skills/canonry/references/ai-traffic-tracking.md +4 -1
  3. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +12 -4
  4. package/assets/assets/{AgentSetupPage-BlPXN_oH.js → AgentSetupPage-DBiPrrdJ.js} +4 -4
  5. package/assets/assets/{AuditHistoryPanel-N8Z4gng7.js → AuditHistoryPanel-DSnIs064.js} +1 -1
  6. package/assets/assets/{BacklinksPage-DSrgqlkj.js → BacklinksPage-tPiG0nEP.js} +1 -1
  7. package/assets/assets/{HistoryPage-v2jbUkle.js → HistoryPage-sxYHrfNk.js} +1 -1
  8. package/assets/assets/MeasurementPropertyPage-B8EbifR2.js +4 -0
  9. package/assets/assets/ProjectPage-C1_A7iGy.js +11 -0
  10. package/assets/assets/{RunsPage-CXZJDdnr.js → RunsPage-RE6nLBTv.js} +1 -1
  11. package/assets/assets/{SettingsPage-CeLvWs_T.js → SettingsPage-Dn93SUD1.js} +1 -1
  12. package/assets/assets/SiteHealthSection-BEBYoCNu.js +2 -0
  13. package/assets/assets/ToneBadge-DFlmWh2A.js +60 -0
  14. package/assets/assets/{TrafficPage-CEsmS5N1.js → TrafficPage-cNokjIJa.js} +1 -1
  15. package/assets/assets/{TrafficSourceDetailPage-D31g1FXV.js → TrafficSourceDetailPage-DFGbx0zs.js} +1 -1
  16. package/assets/assets/{account-context-CGIyok0O.js → account-context-RM43ek4w.js} +1 -1
  17. package/assets/assets/{agent-trust-copy-B-3akxrd.js → agent-trust-copy-CRZ_oe24.js} +1 -1
  18. package/assets/assets/{card-BMjN_ofC.js → card-GFeSoV1m.js} +1 -1
  19. package/assets/assets/{format-helpers-Blu0QNcd.js → format-helpers-4dA9HFgE.js} +1 -1
  20. package/assets/assets/index-CohgAQ9L.js +60 -0
  21. package/assets/assets/{query-client-DdwTc28X.js → query-client-B3Z7Vqgv.js} +1 -1
  22. package/assets/assets/react-query-HC0PcMhZ.js +1 -0
  23. package/assets/assets/{react-sigma_core.esm.min-5sP0Pb_F.js → react-sigma_core.esm.min-IsYtRW95.js} +1 -1
  24. package/assets/assets/{server-traffic-403Q1CKm.js → server-traffic-BtWOYZXf.js} +1 -1
  25. package/assets/assets/{service-ChEbo8oM.js → service-Bu4M0T0x.js} +1 -1
  26. package/assets/index.html +7 -7
  27. package/dist/{ads-6RVS23I5.js → ads-NS4KNR2U.js} +3 -3
  28. package/dist/{agent-N5LH7QNA.js → agent-773TJYGJ.js} +7 -7
  29. package/dist/{agent-ask-IJV2PWPN.js → agent-ask-MQXNRMAN.js} +3 -3
  30. package/dist/{agent-conversations-STISIDWB.js → agent-conversations-5EEEEWEQ.js} +3 -3
  31. package/dist/{agent-journeys-VCP5MD2W.js → agent-journeys-U5ITMUIM.js} +3 -3
  32. package/dist/{agent-memory-XQQNXRY6.js → agent-memory-6PEE54ST.js} +3 -3
  33. package/dist/{agent-providers-IW2Q6WPP.js → agent-providers-6D76GSYA.js} +3 -3
  34. package/dist/{agent-transcript-5XUCHOOT.js → agent-transcript-6M5RYZIR.js} +3 -3
  35. package/dist/{analytics-RZZZBC4H.js → analytics-WBFQJTHV.js} +3 -3
  36. package/dist/{apply-X5ZTHGSJ.js → apply-AGNDBHNV.js} +3 -3
  37. package/dist/{backfill-ZF6RX27O.js → backfill-ZDPS7VON.js} +10 -10
  38. package/dist/{backlinks-WZ7YUKHH.js → backlinks-TNPNJXPS.js} +3 -3
  39. package/dist/{bing-Z4A5NHOC.js → bing-5WB7JCBP.js} +3 -3
  40. package/dist/{bootstrap-OCJ7EIXK.js → bootstrap-XF77XL7U.js} +10 -10
  41. package/dist/{cdp-YGZFLTFT.js → cdp-NBTJLUPM.js} +7 -7
  42. package/dist/{chunk-RSBIHKHH.js → chunk-24CUAPPY.js} +4 -4
  43. package/dist/{chunk-M6DYUCNB.js → chunk-35AEUG77.js} +1 -1
  44. package/dist/{chunk-S6KJYLOV.js → chunk-377PJ4AT.js} +3 -3
  45. package/dist/{chunk-R7BX2ZSQ.js → chunk-3FHPUOMW.js} +1 -1
  46. package/dist/{chunk-K63XX7VY.js → chunk-4GECW7XZ.js} +3 -3
  47. package/dist/{chunk-3D4VEWDJ.js → chunk-5VLCPNTR.js} +6 -6
  48. package/dist/{chunk-SFNSSHIN.js → chunk-6X24IDPZ.js} +1 -1
  49. package/dist/{chunk-XPBEDIXW.js → chunk-CPJX2RWA.js} +2 -2
  50. package/dist/{chunk-PR5FCYNN.js → chunk-F2O42DSO.js} +21 -21
  51. package/dist/{chunk-D6KTO5TO.js → chunk-FUMYCZ62.js} +1 -1
  52. package/dist/{chunk-ECUJEKIO.js → chunk-G6JSK2RY.js} +1 -1
  53. package/dist/{chunk-YRCKRY3Q.js → chunk-HKUH75YH.js} +2 -2
  54. package/dist/{chunk-XIHIB7VP.js → chunk-HN2YNYPO.js} +7 -7
  55. package/dist/{chunk-IUDXV6PH.js → chunk-I663X7WB.js} +2 -2
  56. package/dist/{chunk-RJLSGCOI.js → chunk-IO4BZLM7.js} +2 -2
  57. package/dist/{chunk-BL4CZJYJ.js → chunk-JGLX5WU6.js} +115 -3
  58. package/dist/{chunk-NUBADAA4.js → chunk-JLC3CCFM.js} +4 -4
  59. package/dist/{chunk-VGAQH7KI.js → chunk-KCKUCJOG.js} +1 -1
  60. package/dist/{chunk-55EFIQP7.js → chunk-LXKWFM74.js} +2 -2
  61. package/dist/{chunk-N6MXZ5SC.js → chunk-MAOKDX3W.js} +5 -5
  62. package/dist/{chunk-UPBQHUE6.js → chunk-MJIL4BWR.js} +3 -3
  63. package/dist/{chunk-BJAOD3NW.js → chunk-N4SEITGT.js} +5 -5
  64. package/dist/{chunk-QDGW75MP.js → chunk-OCXDY2DG.js} +1 -1
  65. package/dist/{chunk-B5JKQXRN.js → chunk-PC7ZUW2H.js} +2 -2
  66. package/dist/{chunk-N7PGV6QQ.js → chunk-PSCXQGJE.js} +1027 -816
  67. package/dist/{chunk-LXJAXAJD.js → chunk-QBIIQF3J.js} +1 -1
  68. package/dist/{chunk-32N7BGTD.js → chunk-S3HNS2YJ.js} +3 -3
  69. package/dist/{chunk-CBNDEKI6.js → chunk-SDCH5EBA.js} +1 -1
  70. package/dist/{chunk-K2JCPF2W.js → chunk-SPWGDODX.js} +368 -368
  71. package/dist/{chunk-LDY66O7A.js → chunk-SXHD2NFT.js} +4 -4
  72. package/dist/{chunk-7JQM46YO.js → chunk-UPALIEP2.js} +2 -2
  73. package/dist/{chunk-NSUB2S4V.js → chunk-W4ZRFNOX.js} +57 -26
  74. package/dist/{chunk-JDOAULVX.js → chunk-XOCSSHYD.js} +1 -1
  75. package/dist/{chunk-FM74QGW5.js → chunk-YL77WFHQ.js} +7 -7
  76. package/dist/{chunk-YGHI3W4D.js → chunk-ZZVRDHSK.js} +1 -1
  77. package/dist/{citations-IUITVPHO.js → citations-MZ6XQDI3.js} +3 -3
  78. package/dist/{cli-catalog-IAPKU2RG.js → cli-catalog-QPB2ADGD.js} +3 -3
  79. package/dist/{cli-commands-FICINBUR.js → cli-commands-RRHOMF6X.js} +7 -7
  80. package/dist/cli.js +13 -13
  81. package/dist/{competitor-U5DMMCIA.js → competitor-VF77UMUR.js} +3 -3
  82. package/dist/{content-ZQIZUNF5.js → content-BINAMQFF.js} +3 -3
  83. package/dist/{dashboard-KPGX4EQT.js → dashboard-OE4BGMKP.js} +6 -6
  84. package/dist/{demo-NEWVCEXD.js → demo-3HVJUP3G.js} +1 -1
  85. package/dist/{demo-server-5GJEGG5K.js → demo-server-BEFPBA7P.js} +14 -14
  86. package/dist/{discover-HSPVFHKK.js → discover-3XUPBCXL.js} +3 -3
  87. package/dist/{discover-eval-BYKPJ3DL.js → discover-eval-3DWJPIU2.js} +3 -3
  88. package/dist/{doctor-CK4BTTWH.js → doctor-KYWVYS74.js} +3 -3
  89. package/dist/{evidence-BX3CWPCT.js → evidence-DCTXENHR.js} +3 -3
  90. package/dist/{export-cmd-QMCRDMPZ.js → export-cmd-E5OUTSMR.js} +3 -3
  91. package/dist/{ga-RMTUMSEJ.js → ga-KY7MHW2G.js} +4 -4
  92. package/dist/{gbp-JK67SYLW.js → gbp-2TJ6JACW.js} +3 -3
  93. package/dist/{google-PJSK6IJV.js → google-BZKYIIA6.js} +4 -4
  94. package/dist/{google-marketing-UQ2FONXU.js → google-marketing-6ACZP4JB.js} +1 -1
  95. package/dist/{health-cmd-ZDXFD53P.js → health-cmd-LCVJY5MG.js} +3 -3
  96. package/dist/{history-OYL7SPEY.js → history-MAZOPZZ5.js} +3 -3
  97. package/dist/index.d.ts +213 -35
  98. package/dist/index.js +25 -25
  99. package/dist/{init-DZUNAQBN.js → init-Z35R7A6X.js} +12 -12
  100. package/dist/{insights-AIBLDPX6.js → insights-PAZHZP74.js} +3 -3
  101. package/dist/intelligence-service-YA7PBFQV.js +16 -0
  102. package/dist/{journeys-EDEET2EC.js → journeys-H6OPK5XY.js} +3 -3
  103. package/dist/{keys-SEZQTYGJ.js → keys-DF6LV4T5.js} +3 -3
  104. package/dist/{keyword-6FJIWTHW.js → keyword-ILICCRQK.js} +3 -3
  105. package/dist/{logs-EML2KKOP.js → logs-PKKCPDIN.js} +3 -3
  106. package/dist/{mcp-AA5QUNBZ.js → mcp-7GVOYYX4.js} +4 -4
  107. package/dist/mcp.js +9 -9
  108. package/dist/{measurement-plan-ALHRGRPH.js → measurement-plan-V7E7UHE2.js} +5 -5
  109. package/dist/{notify-EVTI3SWQ.js → notify-ISU7XBAW.js} +3 -3
  110. package/dist/{organic-evidence-EXQQ6R7H.js → organic-evidence-FIL7YJ4Z.js} +3 -3
  111. package/dist/{overview-5CIFLSDG.js → overview-NVBLGY53.js} +4 -4
  112. package/dist/{project-DNDENHRU.js → project-NSNMLL3Z.js} +3 -3
  113. package/dist/{query-ETMHFVKZ.js → query-TPZUUJ4X.js} +3 -3
  114. package/dist/{research-Q5X46CR5.js → research-WILAIDCK.js} +3 -3
  115. package/dist/{results-export-DZZANVYY.js → results-export-XP7XUKI2.js} +3 -3
  116. package/dist/{run-OQJXRJ42.js → run-L646IKUB.js} +4 -4
  117. package/dist/{schedule-6AI3J2AB.js → schedule-I2LW344O.js} +3 -3
  118. package/dist/{search-7TAJBSHE.js → search-7EBWXQ6X.js} +3 -3
  119. package/dist/{serve-WD44V3TK.js → serve-LNBKTV5N.js} +26 -26
  120. package/dist/{session-LTKCS763.js → session-U2OPQSJE.js} +13 -13
  121. package/dist/{settings-EUMYGNIV.js → settings-IGJ6ZA7C.js} +3 -3
  122. package/dist/{sitemaps-I4QPLAZW.js → sitemaps-B4G4PXIE.js} +3 -3
  123. package/dist/{skills-PTYYU3FR.js → skills-WQXXY2HN.js} +2 -2
  124. package/dist/{snapshot-62FF4GEA.js → snapshot-2TD4WIEO.js} +3 -3
  125. package/dist/{src-LRYXRHLW.js → src-DI4RNYAG.js} +4 -2
  126. package/dist/{status-VRWPYTY3.js → status-SKGGPZFE.js} +4 -4
  127. package/dist/{technical-aeo-OKZW2GAX.js → technical-aeo-AFAXF5M5.js} +3 -3
  128. package/dist/{telemetry-RRTHKD6W.js → telemetry-ZRRX7I75.js} +4 -4
  129. package/dist/{tools-F7WCCKZW.js → tools-RY7ZXQJ5.js} +11 -11
  130. package/dist/{traffic-H6RDZWGG.js → traffic-LA3FZKID.js} +9 -9
  131. package/dist/{trends-RZOQW2LE.js → trends-GUUBTBCO.js} +3 -3
  132. package/dist/{users-KFBCBA3V.js → users-W44TRUSL.js} +3 -3
  133. package/dist/{visibility-stats-53OZR3UN.js → visibility-stats-KMKV4TF5.js} +3 -3
  134. package/dist/{wordpress-2BXU6FDI.js → wordpress-FNLXVJDO.js} +3 -3
  135. package/package.json +1 -1
  136. package/assets/assets/MeasurementPropertyPage-C1eIWJPD.js +0 -4
  137. package/assets/assets/ProjectPage-Ho61hE8f.js +0 -11
  138. package/assets/assets/SiteHealthSection-C2Ys7rzL.js +0 -2
  139. package/assets/assets/ToneBadge-C49669Ol.js +0 -60
  140. package/assets/assets/index-B-t8djQ-.js +0 -60
  141. package/assets/assets/react-query-dnbkXy7A.js +0 -1
  142. package/dist/intelligence-service-YLNZTJQA.js +0 -16
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registeredProviderNames
3
- } from "./chunk-D6KTO5TO.js";
3
+ } from "./chunk-FUMYCZ62.js";
4
4
  import {
5
5
  configExists,
6
6
  loadConfigRaw
7
- } from "./chunk-YGHI3W4D.js";
7
+ } from "./chunk-ZZVRDHSK.js";
8
8
 
9
9
  // src/setup-state.ts
10
10
  import fs from "fs";
@@ -28,7 +28,7 @@ async function buildSetupState() {
28
28
  }
29
29
  if (dbPath && fs.existsSync(dbPath)) {
30
30
  try {
31
- const { createClient, projects, queries: queriesTable } = await import("./src-LRYXRHLW.js");
31
+ const { createClient, projects, queries: queriesTable } = await import("./src-DI4RNYAG.js");
32
32
  const db = createClient(dbPath);
33
33
  project_count = db.select({ id: projects.id }).from(projects).all().length;
34
34
  const firstQuery = db.select({ id: queriesTable.id }).from(queriesTable).limit(1).all();
@@ -47,7 +47,7 @@ function queueServeHandoff() {
47
47
  async function runPendingServeHandoff(format) {
48
48
  if (!pendingServeHandoff) return;
49
49
  pendingServeHandoff = false;
50
- const { serveCommand } = await import("./serve-WD44V3TK.js");
50
+ const { serveCommand } = await import("./serve-LNBKTV5N.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-VJWDBFSL.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-IUDXV6PH.js";
7
+ } from "./chunk-I663X7WB.js";
8
8
  import {
9
9
  CliError,
10
10
  isMachineFormat
11
11
  } from "./chunk-HGMYEDAQ.js";
12
12
  import {
13
13
  describeError
14
- } from "./chunk-NSUB2S4V.js";
14
+ } from "./chunk-W4ZRFNOX.js";
15
15
 
16
16
  // src/commands/mcp.ts
17
17
  import fs from "fs";
@@ -3704,8 +3704,9 @@ function percentOf(part, whole) {
3704
3704
  var WINDOW_SETS = {
3705
3705
  metrics: ["7d", "30d", "90d", "all"],
3706
3706
  gaMeasurementAnalysis: ["30d", "60d", "90d"],
3707
- gaOverview: ["7d", "30d", "90d"],
3708
- gaSearchLanding: ["7d", "28d", "90d"],
3707
+ gaOverview: ["7d", "30d", "90d", "180d"],
3708
+ gaTraffic: ["7d", "30d", "90d", "180d", "all"],
3709
+ gaSearchLanding: ["7d", "28d", "90d", "180d"],
3709
3710
  googleAdsMetrics: ["7d", "14d", "30d"],
3710
3711
  trafficAnalytics: ["7d", "14d", "30d", "90d"],
3711
3712
  organicEvidence: ["60d", "90d"]
@@ -11671,8 +11672,8 @@ function parseBoundaryDate(value, field) {
11671
11672
  if (Number.isNaN(parsed.getTime()) || parsed.toISOString().slice(0, 10) !== trimmed) throw invalid();
11672
11673
  return trimmed;
11673
11674
  }
11674
- function resolveDateRange(input) {
11675
- const window = parseWindow(input.window);
11675
+ function resolveDateRange(input, windows = WINDOW_SETS.metrics) {
11676
+ const window = parseWindowIn(input.window, windows, { fallback: "all" });
11676
11677
  const startDate = parseBoundaryDate(input.startDate, "startDate");
11677
11678
  const endDate = parseBoundaryDate(input.endDate, "endDate");
11678
11679
  if (startDate && endDate && startDate > endDate) {
@@ -17511,19 +17512,18 @@ var ga4AiReferralDtoSchema = z52.object({
17511
17512
  */
17512
17513
  users: z52.number().optional(),
17513
17514
  /**
17514
- * The winning attribution dimension for this (source, medium) tuple — the
17515
- * one with the highest session count. GA4 emits one row per dimension
17516
- * (session, first_user, manual_utm), but they're overlapping lenses on the
17517
- * same visit; only the dominant dimension is surfaced here so the table is
17518
- * not inflated.
17515
+ * The attribution dimension this row counts: always `session` (the
17516
+ * session's own source, as GA4's AI Assistant channel counts). GA4 emits one
17517
+ * row per dimension (session, first_user, manual_utm), but they're
17518
+ * overlapping lenses on the same visit, so only the session lens is surfaced
17519
+ * and the table is not inflated.
17519
17520
  */
17520
17521
  sourceDimension: ga4SourceDimensionSchema,
17521
17522
  /**
17522
17523
  * This row's sessions as a 0..1 share of every `aiReferrals` row's sessions,
17523
17524
  * so the rows' shares add up to 1 (all 0 when the rows carry no sessions).
17524
- * The denominator is the rows' own sum, not `aiSessionsDeduped`: that total
17525
- * keeps the winning lens per day and source, these rows keep one lens per
17526
- * source over the whole window, so it can run higher than the rows add up to.
17525
+ * The denominator is the rows' own sum. Both it and `aiSessionsDeduped`
17526
+ * count the session lens, so they agree.
17527
17527
  */
17528
17528
  share: fraction()
17529
17529
  });
@@ -17532,8 +17532,8 @@ var ga4AiReferralLandingPageDtoSchema = z52.object({
17532
17532
  medium: z52.string(),
17533
17533
  trafficClass: aiReferralTrafficClassSchema,
17534
17534
  /**
17535
- * The winning attribution dimension for this (source, medium, landingPage)
17536
- * tuple — the one with the highest session count.
17535
+ * The session attribution dimension for this (source, medium, landingPage)
17536
+ * tuple. Other attribution lenses do not contribute to this count.
17537
17537
  */
17538
17538
  sourceDimension: ga4SourceDimensionSchema,
17539
17539
  landingPage: z52.string(),
@@ -17631,7 +17631,7 @@ var ga4TrafficSummaryDtoSchema = z52.object({
17631
17631
  })),
17632
17632
  aiReferrals: z52.array(ga4AiReferralDtoSchema),
17633
17633
  aiReferralLandingPages: z52.array(ga4AiReferralLandingPageDtoSchema),
17634
- /** Deduped AI session total: MAX(sessions) per date+source across attribution dimensions, then summed. Cross-cutting: can overlap with Direct/Organic/Social via firstUserSource. */
17634
+ /** AI session total under the session lens (the session's own source), per date and source, summed: GA4's own AI Assistant count. Other lenses never add to it. */
17635
17635
  aiSessionsDeduped: z52.number(),
17636
17636
  /** @deprecated See `GA4AiReferralDto.users`. Never emitted since 4.135.0. */
17637
17637
  aiUsersDeduped: z52.number().optional(),
@@ -17750,7 +17750,8 @@ var GA_SEARCH_LANDING_WINDOWS = gaSearchLandingWindowSchema.options;
17750
17750
  var GA_SEARCH_LANDING_WINDOW_DAYS = {
17751
17751
  "7d": 7,
17752
17752
  "28d": 28,
17753
- "90d": 90
17753
+ "90d": 90,
17754
+ "180d": 180
17754
17755
  };
17755
17756
  var GA_SEARCH_LANDING_DEFAULT_WINDOW = "28d";
17756
17757
  var GA_SEARCH_LANDING_DEFAULT_LIMIT = 50;
@@ -17844,10 +17845,10 @@ var ga4SyncResponseDtoSchema = z52.object({
17844
17845
  aiReferralCount: z52.number().int().nonnegative(),
17845
17846
  socialReferralCount: z52.number().int().nonnegative(),
17846
17847
  /**
17847
- * The window that was ACTUALLY fetched and written, in days — the request's
17848
- * `days` bounded to GA4's supported sync range (1–90). Read this, not
17848
+ * The requested coverage window, in days — reused mature days plus fetched gaps. The request's
17849
+ * `days` is bounded to GA4's supported sync range (1–180). Read this, not
17849
17850
  * `requestedDays`, when reporting or reasoning about coverage: a
17850
- * `--days 500` sync writes 90 days, and this field says 90.
17851
+ * `--days 500` sync covers 180 days, and this field says 180.
17851
17852
  */
17852
17853
  days: z52.number().int().nonnegative(),
17853
17854
  /** The window the caller asked for, before bounding. Equals `days` unless `clamped`. */
@@ -17977,12 +17978,12 @@ var gaOverviewChangeSchema = z52.object({
17977
17978
  bounceRate: percent().nullable(),
17978
17979
  averageEngagementTimeSeconds: percent().nullable()
17979
17980
  });
17980
- var GA_OVERVIEW_WINDOW_DAYS = { "7d": 7, "30d": 30, "90d": 90 };
17981
+ var GA_OVERVIEW_WINDOW_DAYS = { "7d": 7, "30d": 30, "90d": 90, "180d": 180 };
17981
17982
  var GA_OVERVIEW_WINDOWS = WINDOW_SETS.gaOverview;
17982
17983
  function isGaOverviewWindow(value) {
17983
17984
  return GA_OVERVIEW_WINDOWS.some((window) => window === value);
17984
17985
  }
17985
- var GA_OVERVIEW_HISTORY_DAYS = 2 * GA_OVERVIEW_WINDOW_DAYS["90d"];
17986
+ var GA_OVERVIEW_HISTORY_DAYS = 2 * GA_OVERVIEW_WINDOW_DAYS["180d"];
17986
17987
  function gaOverviewComparisonDaysAgo(window) {
17987
17988
  const days = GA_OVERVIEW_WINDOW_DAYS[window];
17988
17989
  return {
@@ -18012,7 +18013,7 @@ var gaOverviewDaySchema = z52.object({
18012
18013
  previousValues: gaOverviewValuesSchema
18013
18014
  });
18014
18015
  var gaOverviewResponseSchema = z52.object({
18015
- window: metricsWindowSchema,
18016
+ window: z52.enum(WINDOW_SETS.gaTraffic),
18016
18017
  current: gaOverviewPeriodSchema,
18017
18018
  /** The period just before `current`, of the same length. */
18018
18019
  previous: gaOverviewPeriodSchema,
@@ -18110,6 +18111,21 @@ var ga4AiReferralDailyTrendSchema = linearTrendSchema.extend({
18110
18111
  startDate: z52.string(),
18111
18112
  endDate: z52.string()
18112
18113
  });
18114
+ var ga4AiReferralMonthSchema = z52.object({
18115
+ /** `YYYY-MM`, in the property's reporting days. */
18116
+ month: z52.string(),
18117
+ /** Sessions on the month's days inside the requested range; null when GA4 reported none of those days. */
18118
+ sessions: z52.number().nullable(),
18119
+ /** Every day of the month is measured, inside the range and no longer filling, so the month can be compared. */
18120
+ complete: z52.boolean(),
18121
+ /** The month's sessions by engine, largest first, keyed as `byEngine`. */
18122
+ engines: z52.array(z52.object({ key: z52.string(), label: z52.string(), sessions: z52.number() }))
18123
+ });
18124
+ var ga4AiReferralMonthlyTrendSchema = linearTrendSchema.extend({
18125
+ startMonth: z52.string(),
18126
+ endMonth: z52.string(),
18127
+ changePct: percent().nullable()
18128
+ });
18113
18129
  var ga4AiReferralDailyDtoSchema = z52.object({
18114
18130
  /** Ascending by date. Dates with no AI referrals are absent, not zero-filled. */
18115
18131
  days: z52.array(ga4AiReferralDailyEntrySchema),
@@ -18132,7 +18148,14 @@ var ga4AiReferralDailyDtoSchema = z52.object({
18132
18148
  * are left out. Null with fewer than two such days. Optional so a newer
18133
18149
  * client reads an older API.
18134
18150
  */
18135
- trend: ga4AiReferralDailyTrendSchema.nullable().optional()
18151
+ trend: ga4AiReferralDailyTrendSchema.nullable().optional(),
18152
+ /**
18153
+ * The same sessions by calendar month across the range, oldest first, with
18154
+ * the line fitted through its complete months. Optional so a newer client
18155
+ * reads an older API.
18156
+ */
18157
+ months: z52.array(ga4AiReferralMonthSchema).optional(),
18158
+ monthlyTrend: ga4AiReferralMonthlyTrendSchema.nullable().optional()
18136
18159
  });
18137
18160
  var ga4SocialReferralHistoryEntrySchema = z52.object({
18138
18161
  date: z52.string(),
@@ -19238,12 +19261,12 @@ function parseTrafficEventKindFilter(value) {
19238
19261
  }
19239
19262
  return kinds.length > 0 ? kinds : null;
19240
19263
  }
19241
- var trafficSeriesGranularitySchema = z57.enum(["hour", "day"]);
19264
+ var trafficSeriesGranularitySchema = z57.enum(["hour", "day", "month"]);
19242
19265
  var TrafficSeriesGranularities = trafficSeriesGranularitySchema.enum;
19243
19266
  var trafficSeriesPointSchema = z57.object({
19244
19267
  /**
19245
- * UTC bucket key: an ISO hour for hourly series, or `YYYY-MM-DD` for daily
19246
- * series. The response includes zero-value buckets across the full window.
19268
+ * UTC bucket key: an ISO hour for hourly series, `YYYY-MM-DD` for daily
19269
+ * series, or `YYYY-MM` for monthly series. The response includes zero-value buckets across the full window.
19247
19270
  */
19248
19271
  bucket: z57.string(),
19249
19272
  crawlerHits: z57.number().int().nonnegative(),
@@ -19355,6 +19378,13 @@ var trafficEventsResponseSchema = z57.object({
19355
19378
  * or after it. Optional so a newer client reads an older API.
19356
19379
  */
19357
19380
  aiReferralCountingChangedAt: z57.string().nullable().optional(),
19381
+ /**
19382
+ * Buckets holding only part of their period: the one recording began
19383
+ * inside, and the newest while it is still running. Trend fits leave them
19384
+ * out; a chart should not draw them as full readings. Optional so a newer
19385
+ * client reads an older API.
19386
+ */
19387
+ partialBuckets: z57.array(z57.string()).optional(),
19358
19388
  /**
19359
19389
  * Least-squares fit per charted metric, over the densified points.
19360
19390
  *
@@ -28342,6 +28372,7 @@ export {
28342
28372
  GaMoverChangeBases,
28343
28373
  gaSocialReferralTrendResponseSchema,
28344
28374
  gaAttributionTrendResponseSchema,
28375
+ GA_OVERVIEW_WINDOW_DAYS,
28345
28376
  GA_OVERVIEW_WINDOWS,
28346
28377
  isGaOverviewWindow,
28347
28378
  GA_OVERVIEW_HISTORY_DAYS,
@@ -28,7 +28,7 @@ import {
28
28
  unknownUsageObservation,
29
29
  usdToMicros,
30
30
  withRetry
31
- } from "./chunk-NSUB2S4V.js";
31
+ } from "./chunk-W4ZRFNOX.js";
32
32
 
33
33
  // ../provider-answer-services/src/core/http.ts
34
34
  var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
@@ -8,23 +8,23 @@ import {
8
8
  reparseStoredResult4,
9
9
  reparseStoredResult5,
10
10
  resolveStoredApiResponse
11
- } from "./chunk-N6MXZ5SC.js";
11
+ } from "./chunk-MAOKDX3W.js";
12
12
  import {
13
13
  loadConfig
14
- } from "./chunk-YGHI3W4D.js";
14
+ } from "./chunk-ZZVRDHSK.js";
15
15
  import {
16
16
  isMachineFormat
17
17
  } from "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  determineCitationState
20
- } from "./chunk-R7BX2ZSQ.js";
20
+ } from "./chunk-3FHPUOMW.js";
21
21
  import {
22
22
  backfillProjectAnswerMentions,
23
23
  competitorIdentityColumns,
24
24
  createRunCompetitorResolver,
25
25
  readMarketCompetitorNames,
26
26
  refreshSnapshotMentionIdentity
27
- } from "./chunk-N7PGV6QQ.js";
27
+ } from "./chunk-PSCXQGJE.js";
28
28
  import {
29
29
  RawEventSampleEventTypes,
30
30
  auditLog,
@@ -38,7 +38,7 @@ import {
38
38
  querySnapshots,
39
39
  rawEventSamples,
40
40
  runs
41
- } from "./chunk-BL4CZJYJ.js";
41
+ } from "./chunk-JGLX5WU6.js";
42
42
  import {
43
43
  ProviderNames,
44
44
  RetrievalContracts,
@@ -51,7 +51,7 @@ import {
51
51
  extractRecommendedCompetitors,
52
52
  normalizeUrlPath,
53
53
  openRouterRouteModel
54
- } from "./chunk-NSUB2S4V.js";
54
+ } from "./chunk-W4ZRFNOX.js";
55
55
 
56
56
  // src/commands/backfill.ts
57
57
  import { setImmediate as yieldToEventLoop } from "timers/promises";
@@ -429,7 +429,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
429
429
  }
430
430
  }
431
431
  async function backfillInsightsCommand(project, opts) {
432
- const { IntelligenceService } = await import("./intelligence-service-YLNZTJQA.js");
432
+ const { IntelligenceService } = await import("./intelligence-service-YA7PBFQV.js");
433
433
  const config = loadConfig();
434
434
  const db = createClient(config.database);
435
435
  migrate(db);
@@ -20,7 +20,7 @@ import {
20
20
  resolveProviderModel,
21
21
  schedulableRunKindSchema,
22
22
  sentimentEvaluatorProviderSchema
23
- } from "./chunk-NSUB2S4V.js";
23
+ } from "./chunk-W4ZRFNOX.js";
24
24
 
25
25
  // ../config/src/index.ts
26
26
  import { z as z5 } from "zod";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-IUDXV6PH.js";
4
- import "./chunk-YGHI3W4D.js";
3
+ } from "./chunk-I663X7WB.js";
4
+ import "./chunk-ZZVRDHSK.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import "./chunk-HGMYEDAQ.js";
7
- import "./chunk-NSUB2S4V.js";
7
+ import "./chunk-W4ZRFNOX.js";
8
8
  import "./chunk-MLKGABMK.js";
9
9
 
10
10
  // src/commands/citations.ts
@@ -3,11 +3,11 @@ import {
3
3
  buildCliCatalog,
4
4
  printCliCatalog,
5
5
  renderTopLevelHelp
6
- } from "./chunk-S6KJYLOV.js";
7
- import "./chunk-ECUJEKIO.js";
6
+ } from "./chunk-377PJ4AT.js";
7
+ import "./chunk-G6JSK2RY.js";
8
8
  import "./chunk-Z7IUAJOF.js";
9
9
  import "./chunk-HGMYEDAQ.js";
10
- import "./chunk-NSUB2S4V.js";
10
+ import "./chunk-W4ZRFNOX.js";
11
11
  import "./chunk-MLKGABMK.js";
12
12
  export {
13
13
  CLI_ROOT_SUMMARIES,
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  REGISTERED_CLI_COMMANDS
3
- } from "./chunk-K2JCPF2W.js";
3
+ } from "./chunk-SPWGDODX.js";
4
4
  import "./chunk-6GO5VVAC.js";
5
5
  import "./chunk-VJWDBFSL.js";
6
- import "./chunk-K63XX7VY.js";
6
+ import "./chunk-4GECW7XZ.js";
7
7
  import "./chunk-TSENU4GG.js";
8
- import "./chunk-IUDXV6PH.js";
9
- import "./chunk-YGHI3W4D.js";
10
- import "./chunk-ECUJEKIO.js";
8
+ import "./chunk-I663X7WB.js";
9
+ import "./chunk-ZZVRDHSK.js";
10
+ import "./chunk-G6JSK2RY.js";
11
11
  import "./chunk-Z7IUAJOF.js";
12
- import "./chunk-VGAQH7KI.js";
12
+ import "./chunk-KCKUCJOG.js";
13
13
  import "./chunk-AOJU5LKX.js";
14
14
  import "./chunk-HGMYEDAQ.js";
15
- import "./chunk-NSUB2S4V.js";
15
+ import "./chunk-W4ZRFNOX.js";
16
16
  import "./chunk-MLKGABMK.js";
17
17
  export {
18
18
  REGISTERED_CLI_COMMANDS
package/dist/cli.js CHANGED
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env node --import tsx
2
2
  import {
3
3
  REGISTERED_CLI_COMMANDS
4
- } from "./chunk-K2JCPF2W.js";
4
+ } from "./chunk-SPWGDODX.js";
5
5
  import "./chunk-6GO5VVAC.js";
6
6
  import {
7
7
  buildSetupState,
8
8
  runPendingServeHandoff
9
- } from "./chunk-LDY66O7A.js";
9
+ } from "./chunk-SXHD2NFT.js";
10
10
  import "./chunk-VJWDBFSL.js";
11
- import "./chunk-K63XX7VY.js";
11
+ import "./chunk-4GECW7XZ.js";
12
12
  import "./chunk-TSENU4GG.js";
13
- import "./chunk-D6KTO5TO.js";
13
+ import "./chunk-FUMYCZ62.js";
14
14
  import {
15
15
  checkLatestVersionForCli,
16
16
  cliRuntimeContext,
@@ -24,24 +24,24 @@ import {
24
24
  showFirstRunNotice,
25
25
  trackCliCommandFinished,
26
26
  trackEvent
27
- } from "./chunk-55EFIQP7.js";
27
+ } from "./chunk-LXKWFM74.js";
28
28
  import {
29
29
  autoSyncSkills,
30
30
  formatAutoSyncNotice
31
- } from "./chunk-32N7BGTD.js";
32
- import "./chunk-IUDXV6PH.js";
33
- import "./chunk-YGHI3W4D.js";
31
+ } from "./chunk-S3HNS2YJ.js";
32
+ import "./chunk-I663X7WB.js";
33
+ import "./chunk-ZZVRDHSK.js";
34
34
  import {
35
35
  accessFilterFromArgs,
36
36
  dispatchRegisteredCommand,
37
37
  printCliCatalog
38
- } from "./chunk-S6KJYLOV.js";
38
+ } from "./chunk-377PJ4AT.js";
39
39
  import {
40
40
  resolveCliAccess
41
- } from "./chunk-ECUJEKIO.js";
41
+ } from "./chunk-G6JSK2RY.js";
42
42
  import "./chunk-Z7IUAJOF.js";
43
- import "./chunk-LXJAXAJD.js";
44
- import "./chunk-VGAQH7KI.js";
43
+ import "./chunk-QBIIQF3J.js";
44
+ import "./chunk-KCKUCJOG.js";
45
45
  import "./chunk-AOJU5LKX.js";
46
46
  import {
47
47
  CliError,
@@ -52,7 +52,7 @@ import {
52
52
  } from "./chunk-HGMYEDAQ.js";
53
53
  import {
54
54
  OperationAccesses
55
- } from "./chunk-NSUB2S4V.js";
55
+ } from "./chunk-W4ZRFNOX.js";
56
56
  import "./chunk-MLKGABMK.js";
57
57
 
58
58
  // src/cli.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-IUDXV6PH.js";
4
- import "./chunk-YGHI3W4D.js";
3
+ } from "./chunk-I663X7WB.js";
4
+ import "./chunk-ZZVRDHSK.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -21,7 +21,7 @@ import {
21
21
  normalizeCompetitorDomain,
22
22
  shareOfVoiceLabel,
23
23
  shareOfVoiceReason
24
- } from "./chunk-NSUB2S4V.js";
24
+ } from "./chunk-W4ZRFNOX.js";
25
25
  import "./chunk-MLKGABMK.js";
26
26
 
27
27
  // src/commands/competitor.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-IUDXV6PH.js";
4
- import "./chunk-YGHI3W4D.js";
3
+ } from "./chunk-I663X7WB.js";
4
+ import "./chunk-ZZVRDHSK.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  contentTargetDismissRequestSchema,
16
16
  formatPercent
17
- } from "./chunk-NSUB2S4V.js";
17
+ } from "./chunk-W4ZRFNOX.js";
18
18
  import "./chunk-MLKGABMK.js";
19
19
 
20
20
  // src/commands/content.ts
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  clearDashboardPassword,
3
3
  loadConfigRaw
4
- } from "./chunk-YGHI3W4D.js";
4
+ } from "./chunk-ZZVRDHSK.js";
5
5
  import {
6
6
  isMachineFormat
7
7
  } from "./chunk-HGMYEDAQ.js";
8
8
  import {
9
9
  anyUsersExist
10
- } from "./chunk-N7PGV6QQ.js";
11
- import "./chunk-QDGW75MP.js";
12
- import "./chunk-CBNDEKI6.js";
10
+ } from "./chunk-PSCXQGJE.js";
11
+ import "./chunk-OCXDY2DG.js";
12
+ import "./chunk-SDCH5EBA.js";
13
13
  import {
14
14
  createClient
15
- } from "./chunk-BL4CZJYJ.js";
16
- import "./chunk-NSUB2S4V.js";
15
+ } from "./chunk-JGLX5WU6.js";
16
+ import "./chunk-W4ZRFNOX.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
 
19
19
  // src/commands/dashboard.ts
@@ -40,7 +40,7 @@ function parseDemoTrustedProxies(values) {
40
40
  async function demoCommand(options) {
41
41
  const { host, port } = parseDemoListenOptions(options);
42
42
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
43
- const { createDemoServer } = await import("./demo-server-5GJEGG5K.js");
43
+ const { createDemoServer } = await import("./demo-server-BEFPBA7P.js");
44
44
  const app = await createDemoServer({ trustProxy });
45
45
  let stopping = false;
46
46
  const stop = () => {
@@ -5,12 +5,12 @@ import {
5
5
  computeFactorAverages,
6
6
  layoutSiteCrawlGraphInput,
7
7
  persistSiteCrawlGraphLayout
8
- } from "./chunk-B5JKQXRN.js";
8
+ } from "./chunk-PC7ZUW2H.js";
9
9
  import {
10
10
  canonryMcpTools
11
- } from "./chunk-XIHIB7VP.js";
12
- import "./chunk-M6DYUCNB.js";
13
- import "./chunk-VGAQH7KI.js";
11
+ } from "./chunk-HN2YNYPO.js";
12
+ import "./chunk-35AEUG77.js";
13
+ import "./chunk-KCKUCJOG.js";
14
14
  import {
15
15
  PACKAGE_VERSION
16
16
  } from "./chunk-AOJU5LKX.js";
@@ -18,17 +18,17 @@ import "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  HISTORY_WINDOW_RUNS,
20
20
  IntelligenceService
21
- } from "./chunk-BJAOD3NW.js";
21
+ } from "./chunk-N4SEITGT.js";
22
22
  import {
23
23
  determineCitationState
24
- } from "./chunk-R7BX2ZSQ.js";
25
- import "./chunk-RJLSGCOI.js";
24
+ } from "./chunk-3FHPUOMW.js";
25
+ import "./chunk-IO4BZLM7.js";
26
26
  import {
27
27
  apiRoutes,
28
28
  assessConversionTrackingIntegrity
29
- } from "./chunk-N7PGV6QQ.js";
30
- import "./chunk-QDGW75MP.js";
31
- import "./chunk-CBNDEKI6.js";
29
+ } from "./chunk-PSCXQGJE.js";
30
+ import "./chunk-OCXDY2DG.js";
31
+ import "./chunk-SDCH5EBA.js";
32
32
  import {
33
33
  adsAdGroups,
34
34
  adsAds,
@@ -104,7 +104,7 @@ import {
104
104
  siteCrawlPages,
105
105
  siteCrawlSnapshots,
106
106
  trafficSources
107
- } from "./chunk-BL4CZJYJ.js";
107
+ } from "./chunk-JGLX5WU6.js";
108
108
  import {
109
109
  AI_ENGINE_DOMAINS,
110
110
  GA_OVERVIEW_HISTORY_DAYS,
@@ -151,7 +151,7 @@ import {
151
151
  roundPreservingTotal,
152
152
  siteAuditPageFactorSchema,
153
153
  wilsonInterval
154
- } from "./chunk-NSUB2S4V.js";
154
+ } from "./chunk-W4ZRFNOX.js";
155
155
  import "./chunk-MLKGABMK.js";
156
156
 
157
157
  // src/demo-server.ts
@@ -2587,7 +2587,7 @@ function seedGaReferrals(db, input) {
2587
2587
  }
2588
2588
 
2589
2589
  // src/demo/seed-ga-overview.ts
2590
- var DISTINCT_USER_SHARE = { "7d": 0.86, "30d": 0.71, "90d": 0.62 };
2590
+ var DISTINCT_USER_SHARE = { "7d": 0.86, "30d": 0.71, "90d": 0.62, "180d": 0.55 };
2591
2591
  function jitter(seed) {
2592
2592
  const value = Math.sin(seed * 12.9898) * 43758.5453;
2593
2593
  return value - Math.floor(value);
@@ -3067,7 +3067,7 @@ async function seedDemoSignals(db, context) {
3067
3067
  }
3068
3068
  }
3069
3069
  function seedSearchLandingPages(db, input) {
3070
- const windows = [["7d", 7, 1], ["28d", 28, 4], ["90d", 90, 12]];
3070
+ const windows = [["7d", 7, 1], ["28d", 28, 4], ["90d", 90, 12], ["180d", 180, 24]];
3071
3071
  for (const [windowKey, days, scale] of windows) {
3072
3072
  const clicks = (140 + input.variant * 25) * scale;
3073
3073
  const impressions = (5200 + input.variant * 640) * scale;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-IUDXV6PH.js";
4
- import "./chunk-YGHI3W4D.js";
3
+ } from "./chunk-I663X7WB.js";
4
+ import "./chunk-ZZVRDHSK.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -14,7 +14,7 @@ import {
14
14
  CitationStates,
15
15
  DiscoveryPromoteCompetitorSkipReasons,
16
16
  describeError
17
- } from "./chunk-NSUB2S4V.js";
17
+ } from "./chunk-W4ZRFNOX.js";
18
18
  import "./chunk-MLKGABMK.js";
19
19
 
20
20
  // src/commands/discover.ts
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-IUDXV6PH.js";
4
- import "./chunk-YGHI3W4D.js";
3
+ } from "./chunk-I663X7WB.js";
4
+ import "./chunk-ZZVRDHSK.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import {
7
7
  CliError,
8
8
  EXIT_USER_ERROR
9
9
  } from "./chunk-HGMYEDAQ.js";
10
- import "./chunk-NSUB2S4V.js";
10
+ import "./chunk-W4ZRFNOX.js";
11
11
  import "./chunk-MLKGABMK.js";
12
12
 
13
13
  // src/commands/discover-eval.ts
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-IUDXV6PH.js";
4
- import "./chunk-YGHI3W4D.js";
3
+ } from "./chunk-I663X7WB.js";
4
+ import "./chunk-ZZVRDHSK.js";
5
5
  import {
6
6
  emitJsonl
7
7
  } from "./chunk-Z7IUAJOF.js";
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  CheckScopes,
15
15
  CheckStatuses
16
- } from "./chunk-NSUB2S4V.js";
16
+ } from "./chunk-W4ZRFNOX.js";
17
17
  import "./chunk-MLKGABMK.js";
18
18
 
19
19
  // src/commands/doctor.ts