@canonry/canonry 7.84.0 → 7.86.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 +9 -5
  2. package/assets/agent-workspace/skills/canonry/references/ai-traffic-tracking.md +9 -5
  3. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +3 -1
  4. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +36 -10
  5. package/assets/assets/{AgentSetupPage-B9NOQP8a.js → AgentSetupPage-0f7Ca4IZ.js} +4 -4
  6. package/assets/assets/{AuditHistoryPanel-Fvh4WFjq.js → AuditHistoryPanel-BAQuFTNl.js} +1 -1
  7. package/assets/assets/{BacklinksPage-D1UHFLoV.js → BacklinksPage-BK2bn9Xg.js} +1 -1
  8. package/assets/assets/{HistoryPage-CBcacDgP.js → HistoryPage-ZBfL9nGw.js} +1 -1
  9. package/assets/assets/{MeasurementPropertyPage-ZuZpurwr.js → MeasurementPropertyPage-DDSOq4aU.js} +3 -3
  10. package/assets/assets/ProjectPage-8cVgOm5o.js +11 -0
  11. package/assets/assets/{RunsPage-tlCk_gOw.js → RunsPage-ke0wMYLg.js} +1 -1
  12. package/assets/assets/{SettingsPage-7mRTFLFQ.js → SettingsPage-Bbi-sTBk.js} +1 -1
  13. package/assets/assets/{SiteHealthSection-l_A_AmY_.js → SiteHealthSection-eKxTDUE2.js} +2 -2
  14. package/assets/assets/{ToneBadge-CXyUIWzB.js → ToneBadge-WAMyKadz.js} +1 -1
  15. package/assets/assets/{TrafficPage-DQbBT3TP.js → TrafficPage-nXixENx9.js} +1 -1
  16. package/assets/assets/TrafficSourceDetailPage-ir5zJU_l.js +1 -0
  17. package/assets/assets/{account-context-Bhgg1lEH.js → account-context-BmN431xn.js} +1 -1
  18. package/assets/assets/agent-trust-copy-zfx8m-cx.js +1 -0
  19. package/assets/assets/{card-B16Dvxau.js → card-DUTMWeHB.js} +1 -1
  20. package/assets/assets/{extract-error-message-B5_v_-U8.js → extract-error-message-BFaIHLqb.js} +1 -1
  21. package/assets/assets/{format-helpers-Bs9rrO74.js → format-helpers-D1w2yznw.js} +1 -1
  22. package/assets/assets/index-C5r0VqgO.js +60 -0
  23. package/assets/assets/index-DIHdWY7b.css +1 -0
  24. package/assets/assets/{query-client-D-tt1sn3.js → query-client-DrIawr39.js} +1 -1
  25. package/assets/assets/react-query-DQuOVjDi.js +1 -0
  26. package/assets/assets/{react-sigma_core.esm.min-BfZVKh7v.js → react-sigma_core.esm.min-cvMDhRNS.js} +1 -1
  27. package/assets/assets/{service-Cmt36bhL.js → service-CvCKbPnf.js} +1 -1
  28. package/assets/index.html +8 -8
  29. package/dist/{ads-KBXA3LV6.js → ads-7IJTHW6T.js} +3 -3
  30. package/dist/{agent-OMNIUTNZ.js → agent-4UC2X7O2.js} +7 -7
  31. package/dist/{agent-ask-3JQNG2PE.js → agent-ask-SVPU2WQU.js} +3 -3
  32. package/dist/{agent-conversations-KO5PDSM2.js → agent-conversations-PJQRY5RX.js} +3 -3
  33. package/dist/{agent-journeys-QL6NG3BE.js → agent-journeys-JOD5DQ6G.js} +3 -3
  34. package/dist/{agent-memory-2WZ6LVAN.js → agent-memory-KTMZMUYF.js} +3 -3
  35. package/dist/{agent-providers-TABMSD4J.js → agent-providers-VEBB3WEW.js} +3 -3
  36. package/dist/{agent-transcript-YNF63MPR.js → agent-transcript-RRZJCMK2.js} +3 -3
  37. package/dist/{analytics-5FGY3FHC.js → analytics-EZV4XJKR.js} +3 -3
  38. package/dist/{apply-2HX4KYT6.js → apply-NP7ORQS4.js} +3 -3
  39. package/dist/{backfill-ABSW6J3S.js → backfill-7T6VFPWT.js} +10 -10
  40. package/dist/{backlinks-7CRPWNNN.js → backlinks-KTEJM2IP.js} +3 -3
  41. package/dist/{bing-IT46EUFH.js → bing-TC54HJUB.js} +3 -3
  42. package/dist/{bootstrap-CHOXLC7Q.js → bootstrap-UDSN22NT.js} +10 -10
  43. package/dist/{cdp-HQWKZGVQ.js → cdp-IZSHF3MS.js} +7 -7
  44. package/dist/{chunk-Q57GN464.js → chunk-2J5EUXO2.js} +1 -1
  45. package/dist/{chunk-HYEPL5UY.js → chunk-3K3QBKNC.js} +3 -3
  46. package/dist/{chunk-B42R2SPU.js → chunk-4EKPEVJ2.js} +191 -9
  47. package/dist/{chunk-LWYALZ6F.js → chunk-5KHF5FV5.js} +4 -4
  48. package/dist/{chunk-YPR2GVJC.js → chunk-5WEGX3H7.js} +1 -1
  49. package/dist/{chunk-OBGP3DRQ.js → chunk-5ZAQVRFL.js} +2 -2
  50. package/dist/{chunk-ZRL5FO5G.js → chunk-AZP37FMA.js} +3 -3
  51. package/dist/{chunk-43CPBLRJ.js → chunk-BLGYC2K7.js} +1 -1
  52. package/dist/{chunk-LE6ZODCY.js → chunk-CBNFWSWU.js} +2 -2
  53. package/dist/{chunk-6SVAUILQ.js → chunk-DU4QEC65.js} +2922 -2570
  54. package/dist/{chunk-LHAD6EK3.js → chunk-E6IZVSRY.js} +2 -2
  55. package/dist/{chunk-VCUNNS4R.js → chunk-EX6GVZAE.js} +1 -1
  56. package/dist/{chunk-LYNYNNOD.js → chunk-F5SQITTJ.js} +1 -1
  57. package/dist/{chunk-6TLHA6XA.js → chunk-GO4RP6XE.js} +3 -3
  58. package/dist/{chunk-EMSZDVDP.js → chunk-HHMOUS26.js} +5 -5
  59. package/dist/{chunk-I642VITF.js → chunk-IILPHGRC.js} +2 -2
  60. package/dist/{chunk-WJITVHAU.js → chunk-JAK37YKH.js} +2 -2
  61. package/dist/{chunk-OMUINNSO.js → chunk-KEIKD6JQ.js} +1 -1
  62. package/dist/{chunk-K3OY52MI.js → chunk-KUVTXIFX.js} +32 -10
  63. package/dist/{chunk-TZCUMC7U.js → chunk-LJ6VNMCY.js} +16 -8
  64. package/dist/{chunk-O7TWL6ZH.js → chunk-MJE3SGFW.js} +333 -203
  65. package/dist/{chunk-6Y75QV2S.js → chunk-OXI45LZP.js} +2 -2
  66. package/dist/{chunk-MZDIWY3K.js → chunk-RI2ZT3OR.js} +6 -6
  67. package/dist/{chunk-CEOIGQTS.js → chunk-RR76O744.js} +1 -1
  68. package/dist/{chunk-2MROJL32.js → chunk-STHWLBYT.js} +1 -1
  69. package/dist/{chunk-BIGIIVGV.js → chunk-SUSQEH2D.js} +55 -1
  70. package/dist/{chunk-QLKG7G4Y.js → chunk-TTXBQCE6.js} +21 -21
  71. package/dist/{chunk-WR4PA335.js → chunk-U3QNTJBP.js} +1 -1
  72. package/dist/{chunk-3EI4FHR5.js → chunk-UPFWF6TF.js} +4 -4
  73. package/dist/{chunk-D37PJYLD.js → chunk-UTG6UUGK.js} +1 -1
  74. package/dist/{chunk-AAKRCOQV.js → chunk-VBW33U4E.js} +2 -2
  75. package/dist/{chunk-GJE3OG4Y.js → chunk-WVMWY4SE.js} +3 -3
  76. package/dist/{chunk-3H6FSUKM.js → chunk-X3EU4UPS.js} +3 -3
  77. package/dist/{chunk-UYR5JI6R.js → chunk-Z5LJI5XK.js} +4 -4
  78. package/dist/{chunk-5PEVGTNX.js → chunk-ZFL5DOGJ.js} +341 -340
  79. package/dist/{citations-YRBUXEWU.js → citations-TOZK6OFP.js} +3 -3
  80. package/dist/{cli-catalog-JTIC72BY.js → cli-catalog-LNWBJNOD.js} +3 -3
  81. package/dist/{cli-commands-LUGJZGJU.js → cli-commands-3HX4JSDX.js} +7 -7
  82. package/dist/cli.js +13 -13
  83. package/dist/{competitor-ZKNDADMJ.js → competitor-54HLL354.js} +3 -3
  84. package/dist/{content-ANRSBG3Y.js → content-ZIGSMH5U.js} +3 -3
  85. package/dist/{dashboard-HTJBWAPW.js → dashboard-YJH6IQGK.js} +6 -6
  86. package/dist/{demo-V3ODU4JK.js → demo-ZYK5XCP3.js} +1 -1
  87. package/dist/{demo-server-QYMT3KT7.js → demo-server-LZ6MWJ2S.js} +12 -12
  88. package/dist/{discover-DX7KIWHU.js → discover-22QKOFIM.js} +3 -3
  89. package/dist/{discover-eval-PXWJYPHE.js → discover-eval-6IFCCH2S.js} +3 -3
  90. package/dist/{doctor-W2MTLKX7.js → doctor-WLLBFOJU.js} +3 -3
  91. package/dist/{evidence-PKKLSVNG.js → evidence-7VHTWNZW.js} +3 -3
  92. package/dist/{export-cmd-3PRWU7NH.js → export-cmd-5RZ3QDFH.js} +3 -3
  93. package/dist/{ga-QPH56JDO.js → ga-LPI3CWY4.js} +3 -3
  94. package/dist/{gbp-MJPIQZYZ.js → gbp-YBOMWR75.js} +3 -3
  95. package/dist/{google-2XZC7DNJ.js → google-N42X5FBH.js} +4 -4
  96. package/dist/{google-marketing-EDXL7ODG.js → google-marketing-SO4B7Z7L.js} +1 -1
  97. package/dist/{health-cmd-YR2MFYNK.js → health-cmd-W7RQWCEB.js} +3 -3
  98. package/dist/{history-OM4OXDOZ.js → history-SDRTOIDZ.js} +3 -3
  99. package/dist/index.d.ts +211 -5
  100. package/dist/index.js +25 -25
  101. package/dist/{init-5FAQPNH4.js → init-DPXOGP3P.js} +12 -12
  102. package/dist/{insights-YGMPBDVA.js → insights-636LLPVG.js} +3 -3
  103. package/dist/intelligence-service-JRVESWU2.js +16 -0
  104. package/dist/{journeys-ZPQCEHXY.js → journeys-NIXKVYA4.js} +21 -12
  105. package/dist/{keys-YZBRRGYE.js → keys-U2JR56TX.js} +3 -3
  106. package/dist/{keyword-HSPNKAJQ.js → keyword-GLRK2ZHR.js} +3 -3
  107. package/dist/{logs-NO2N7W34.js → logs-ENACGWGS.js} +3 -3
  108. package/dist/{mcp-EAGJ2Y2D.js → mcp-DST2XTP2.js} +4 -4
  109. package/dist/mcp.js +9 -9
  110. package/dist/{measurement-plan-6VCBAM5B.js → measurement-plan-Y3SA4ZQC.js} +5 -5
  111. package/dist/{notify-SS5H5GRB.js → notify-ZYXJQUHU.js} +3 -3
  112. package/dist/{organic-evidence-XOZQXTHF.js → organic-evidence-NSX7VCNW.js} +3 -3
  113. package/dist/{overview-3PLQYWDY.js → overview-UO6Z64IT.js} +4 -4
  114. package/dist/{project-ARUHBFCG.js → project-BHXUPHQA.js} +3 -3
  115. package/dist/{query-4KCFDJ5V.js → query-GDRAKEN5.js} +3 -3
  116. package/dist/{research-3NTYXGWN.js → research-YIOQ7WVP.js} +3 -3
  117. package/dist/{results-export-YOQQXBMP.js → results-export-KXMCAEHJ.js} +3 -3
  118. package/dist/{run-64UJAPPG.js → run-6PN5GOVE.js} +4 -4
  119. package/dist/{schedule-JN5JE4EK.js → schedule-5B67GLAM.js} +3 -3
  120. package/dist/{search-2QIHUMR7.js → search-BMVPCN2V.js} +3 -3
  121. package/dist/{serve-V2NPNYMP.js → serve-HB7DI7OC.js} +26 -26
  122. package/dist/{session-347VV5OG.js → session-3RTDTW6Z.js} +13 -13
  123. package/dist/{settings-XM5NGHFW.js → settings-FJEYHYRH.js} +3 -3
  124. package/dist/{skills-4MWWCA36.js → skills-6E7IUQUO.js} +2 -2
  125. package/dist/{snapshot-RWHR3VJ4.js → snapshot-BJQ7WPJZ.js} +3 -3
  126. package/dist/{src-HUF2NBUG.js → src-QU75IDHI.js} +6 -2
  127. package/dist/{status-3OI7PTQ5.js → status-3GHFPN54.js} +4 -4
  128. package/dist/{technical-aeo-RXHIFLHD.js → technical-aeo-76JRC66W.js} +3 -3
  129. package/dist/{telemetry-DZSITJKQ.js → telemetry-KB73JBDZ.js} +4 -4
  130. package/dist/{tools-ZUUOSB75.js → tools-6VWDHNPZ.js} +11 -11
  131. package/dist/{traffic-KIQBUHJW.js → traffic-XB7MZJ23.js} +5 -5
  132. package/dist/{users-ID4O7NXQ.js → users-HYBG3J72.js} +3 -3
  133. package/dist/{visibility-stats-X5MTD47P.js → visibility-stats-ZDB2LMRJ.js} +3 -3
  134. package/dist/{wordpress-WU2HLWIW.js → wordpress-SXKR6XNT.js} +3 -3
  135. package/package.json +1 -1
  136. package/assets/assets/ProjectPage-BoqDyoGi.js +0 -11
  137. package/assets/assets/TrafficSourceDetailPage-D3DwE6Qd.js +0 -1
  138. package/assets/assets/agent-trust-copy-CKZsKhc0.js +0 -1
  139. package/assets/assets/index-3aBRkQpI.js +0 -60
  140. package/assets/assets/index-BnmWwrZA.css +0 -1
  141. package/assets/assets/react-query-DQr9PoNm.js +0 -1
  142. package/dist/intelligence-service-GCN4S6QT.js +0 -16
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  trackIntegrationConnection
3
- } from "./chunk-UYR5JI6R.js";
3
+ } from "./chunk-Z5LJI5XK.js";
4
4
  import {
5
5
  cliRuntimeContext
6
- } from "./chunk-LE6ZODCY.js";
6
+ } from "./chunk-CBNFWSWU.js";
7
7
 
8
8
  // src/cli-connection-telemetry.ts
9
9
  function trackCliConnection(properties) {
@@ -5,7 +5,7 @@ import {
5
5
  AppError,
6
6
  parseWindowIn,
7
7
  resolveDateRange
8
- } from "./chunk-K3OY52MI.js";
8
+ } from "./chunk-KUVTXIFX.js";
9
9
 
10
10
  // src/cli-access.ts
11
11
  var CLI_ACCESS_BY_ID = Object.freeze({
@@ -23,7 +23,7 @@ import {
23
23
  measurementDraftUpsertGroupRequestSchema,
24
24
  measurementDraftUpsertMarketRequestSchema,
25
25
  measurementDraftUpsertTargetRequestSchema
26
- } from "./chunk-K3OY52MI.js";
26
+ } from "./chunk-KUVTXIFX.js";
27
27
 
28
28
  // src/measurement-draft-actions.ts
29
29
  import { z } from "zod";
@@ -3,7 +3,7 @@ import {
3
3
  resolveCliAccess,
4
4
  resolveCliAccessForInvocation,
5
5
  windowOptions
6
- } from "./chunk-VCUNNS4R.js";
6
+ } from "./chunk-EX6GVZAE.js";
7
7
  import {
8
8
  emitJsonl
9
9
  } from "./chunk-Z7IUAJOF.js";
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-HGMYEDAQ.js";
15
15
  import {
16
16
  OperationAccesses
17
- } from "./chunk-K3OY52MI.js";
17
+ } from "./chunk-KUVTXIFX.js";
18
18
 
19
19
  // src/cli-catalog.ts
20
20
  import { createRequire } from "module";
@@ -111,7 +111,7 @@ async function dispatchRegisteredCommand(args, fallbackFormat, specs) {
111
111
  const accessValue = accessFilterFromArgs(argsWithoutHelp);
112
112
  validateAccessFilter(accessValue);
113
113
  if (fallbackFormat !== "text") {
114
- const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-JTIC72BY.js");
114
+ const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-LNWBJNOD.js");
115
115
  const group2 = argsWithoutHelp.find((arg) => !arg.startsWith("--"));
116
116
  printCliCatalog2(specs, fallbackFormat, group2, accessValue);
117
117
  return true;
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  pickProjectCitedDomain
3
- } from "./chunk-43CPBLRJ.js";
3
+ } from "./chunk-BLGYC2K7.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-WJITVHAU.js";
6
+ } from "./chunk-JAK37YKH.js";
7
7
  import {
8
8
  GBP_INSIGHT_PROVIDER,
9
9
  PERSISTENT_GAP_THRESHOLD,
@@ -17,7 +17,7 @@ import {
17
17
  mergeGscQueryTotalsWithFallback,
18
18
  readGscQueryDailyRows,
19
19
  readLatestGscDataDate
20
- } from "./chunk-6SVAUILQ.js";
20
+ } from "./chunk-DU4QEC65.js";
21
21
  import {
22
22
  competitors,
23
23
  gbpDailyMetrics,
@@ -35,14 +35,14 @@ import {
35
35
  queries,
36
36
  querySnapshots,
37
37
  runs
38
- } from "./chunk-BIGIIVGV.js";
38
+ } from "./chunk-SUSQEH2D.js";
39
39
  import {
40
40
  CitationStates,
41
41
  RunKinds,
42
42
  RunStatuses,
43
43
  RunTriggers,
44
44
  effectiveDomains
45
- } from "./chunk-K3OY52MI.js";
45
+ } from "./chunk-KUVTXIFX.js";
46
46
 
47
47
  // src/intelligence-service.ts
48
48
  import { eq, desc, asc, and, ne, or, inArray, gte, lte, isNull, sql, exists } from "drizzle-orm";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-AAKRCOQV.js";
3
+ } from "./chunk-VBW33U4E.js";
4
4
  import {
5
5
  emitJsonl
6
6
  } from "./chunk-Z7IUAJOF.js";
@@ -19,7 +19,7 @@ import {
19
19
  formatMicros,
20
20
  formatRunErrorOneLine,
21
21
  resolveProviderInput
22
- } from "./chunk-K3OY52MI.js";
22
+ } from "./chunk-KUVTXIFX.js";
23
23
 
24
24
  // src/commands/run.ts
25
25
  function getClient() {
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  getRequestContext
3
- } from "./chunk-D37PJYLD.js";
3
+ } from "./chunk-UTG6UUGK.js";
4
4
  import {
5
5
  diagnosticIdentity,
6
6
  redactLogString,
7
7
  redactLogValue
8
- } from "./chunk-K3OY52MI.js";
8
+ } from "./chunk-KUVTXIFX.js";
9
9
 
10
10
  // ../api-routes/src/runtime-logger.ts
11
11
  import { format } from "util";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  API_PROVIDER_NAMES,
3
3
  ProviderNames
4
- } from "./chunk-K3OY52MI.js";
4
+ } from "./chunk-KUVTXIFX.js";
5
5
 
6
6
  // src/provider-registration.ts
7
7
  function isApiProviderRegistrable(name, entry) {
@@ -9750,6 +9750,16 @@ function formatDurationSeconds(seconds) {
9750
9750
  if (minutes < 60) return `${minutes}m ${String(total % 60).padStart(2, "0")}s`;
9751
9751
  return `${Math.floor(minutes / 60)}h ${String(minutes % 60).padStart(2, "0")}m`;
9752
9752
  }
9753
+ function formatDayDuration(days) {
9754
+ if (!Number.isFinite(days) || days < 0) return "\u2014";
9755
+ const minutes = Math.round(days * 1440);
9756
+ if (minutes < 1) return "under a minute";
9757
+ if (minutes < 60) return minutes === 1 ? "1 minute" : `${minutes} minutes`;
9758
+ const hours = Math.round(days * 24);
9759
+ if (hours < 24) return hours === 1 ? "1 hour" : `${hours} hours`;
9760
+ const shown = days < 10 ? Math.round(days * 10) / 10 : Math.round(days);
9761
+ return shown === 1 ? "1 day" : `${shown} days`;
9762
+ }
9753
9763
  var MONTH_NAMES = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
9754
9764
  function formatCalendarDay(day, now = /* @__PURE__ */ new Date()) {
9755
9765
  const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(day);
@@ -18827,7 +18837,9 @@ var agentTrustReasonSchema = z57.enum([
18827
18837
  /** The operator publishes a full user-agent string and this one differs from it. */
18828
18838
  "unusual-user-agent",
18829
18839
  /** The path asks for secrets, version-control data, admin logins or traverses directories. */
18830
- "scanner-path"
18840
+ "scanner-path",
18841
+ /** The same client (one IP) asked for scanner paths within a few minutes of this request. */
18842
+ "scanner-burst"
18831
18843
  ]);
18832
18844
  var AgentTrustReasons = agentTrustReasonSchema.enum;
18833
18845
  var trafficVerificationManifestSchema = z57.object({
@@ -19538,6 +19550,8 @@ var journeysQuerySchema = z58.object({
19538
19550
  engine: z58.string().min(1).optional(),
19539
19551
  /** Only visitors who came back after their first AI visit. */
19540
19552
  returned: z58.enum(["true", "false"]).optional(),
19553
+ /** Only visitors matched this way: `ip-ua` (IP and browser) or `ua` (browser only, where one key can be many people). */
19554
+ keyBasis: journeyKeyBasisSchema.optional(),
19541
19555
  limit: z58.number().int().min(1).max(200).optional(),
19542
19556
  offset: z58.number().int().min(0).optional()
19543
19557
  });
@@ -19640,19 +19654,26 @@ var journeySummaryResponseSchema = z58.object({
19640
19654
  windowStart: z58.string(),
19641
19655
  windowEnd: z58.string(),
19642
19656
  lookbackDays: z58.literal(JOURNEY_LOOKBACK_DAYS),
19643
- /** Visitors whose first AI visit started in the window. */
19644
- aiVisitors: z58.number().int(),
19645
- /** AI-referred visits that started in the window. */
19657
+ /**
19658
+ * Visitors matched by IP and browser whose first AI visit started in the
19659
+ * window. Visitors matched by browser only (`keyBasis.ua`) are not counted:
19660
+ * one such key can be many people. Null when every visitor in the window is
19661
+ * matched by browser only, so visitors are not measurable here.
19662
+ */
19663
+ aiVisitors: z58.number().int().nullable(),
19664
+ /** AI-referred visits that started in the window, however their visitor was matched. */
19646
19665
  aiVisits: z58.number().int(),
19647
- /** Of aiVisitors, those who came back in a later visit. */
19648
- returningVisitors: z58.number().int(),
19649
- /** returningVisitors / aiVisitors; null with no AI visitors. */
19666
+ /** Of aiVisitors, those who came back in a later visit; null with aiVisitors. */
19667
+ returningVisitors: z58.number().int().nullable(),
19668
+ /** returningVisitors / aiVisitors; null with no counted visitors. */
19650
19669
  returnRate: fraction().nullable(),
19651
- /** Later visits of those visitors, by how they came back. */
19652
- returnedVia: z58.record(journeyEntryClassSchema, z58.number().int()),
19653
- /** Median days from a visitor's first AI visit to their first later visit; null with none. */
19670
+ /** Later visits of the counted visitors, by how they came back; null with aiVisitors. */
19671
+ returnedVia: z58.record(journeyEntryClassSchema, z58.number().int()).nullable(),
19672
+ /** Median days from a visitor's first AI visit to their first later visit, to 0.0001 day; null with none. */
19654
19673
  medianDaysToReturn: z58.number().nullable(),
19674
+ /** The counted visitors by first AI engine. */
19655
19675
  byEngine: z58.array(z58.object({ engine: z58.string(), visitors: z58.number().int(), returningVisitors: z58.number().int() })),
19676
+ /** Visitors whose first AI visit started in the window, by how they were matched; `ua` ones are not in the visitor figures. */
19656
19677
  keyBasis: z58.object({ ipUa: z58.number().int(), ua: z58.number().int() }),
19657
19678
  partialSources: journeyPartialSourcesSchema
19658
19679
  });
@@ -27261,6 +27282,7 @@ export {
27261
27282
  competitorEntryParts,
27262
27283
  formatPercent,
27263
27284
  formatNumber,
27285
+ formatDayDuration,
27264
27286
  formatCalendarDay,
27265
27287
  formatIsoDate,
27266
27288
  formatIsoDateInTimeZone,
@@ -8,23 +8,23 @@ import {
8
8
  reparseStoredResult4,
9
9
  reparseStoredResult5,
10
10
  resolveStoredApiResponse
11
- } from "./chunk-B42R2SPU.js";
11
+ } from "./chunk-4EKPEVJ2.js";
12
12
  import {
13
13
  loadConfig
14
- } from "./chunk-WR4PA335.js";
14
+ } from "./chunk-U3QNTJBP.js";
15
15
  import {
16
16
  isMachineFormat
17
17
  } from "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  determineCitationState
20
- } from "./chunk-43CPBLRJ.js";
20
+ } from "./chunk-BLGYC2K7.js";
21
21
  import {
22
22
  backfillProjectAnswerMentions,
23
23
  competitorIdentityColumns,
24
24
  createRunCompetitorResolver,
25
25
  readMarketCompetitorNames,
26
26
  refreshSnapshotMentionIdentity
27
- } from "./chunk-6SVAUILQ.js";
27
+ } from "./chunk-DU4QEC65.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-BIGIIVGV.js";
41
+ } from "./chunk-SUSQEH2D.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-K3OY52MI.js";
54
+ } from "./chunk-KUVTXIFX.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-GCN4S6QT.js");
432
+ const { IntelligenceService } = await import("./intelligence-service-JRVESWU2.js");
433
433
  const config = loadConfig();
434
434
  const db = createClient(config.database);
435
435
  migrate(db);
@@ -811,7 +811,11 @@ async function backfillTrafficClassificationCommand(opts) {
811
811
  samplesRemoved: stored.samples.removed,
812
812
  dryRun: isDryRun,
813
813
  byBot,
814
- unrecognized: stored.unrecognized
814
+ unrecognized: stored.unrecognized,
815
+ agentHits: stored.agentHits,
816
+ agentRequests: stored.agentRequests,
817
+ journeys: stored.journeys,
818
+ journeyMerges: stored.journeyMerges
815
819
  }, isJson);
816
820
  }
817
821
  function emitTrafficClassificationReport(result, isJson) {
@@ -827,6 +831,10 @@ Traffic classification ${result.dryRun ? "preview" : "recovery"} complete.`);
827
831
  console.log(` Unknown before: ${result.unknownBefore}`);
828
832
  console.log(` Unknown after: ${result.unknownAfter}`);
829
833
  console.log(` Unrecognized rows: ${result.unrecognized.examined} examined, ${result.unrecognized.moved} moved to a bot (${result.unrecognized.movedHits} hits), ${result.unrecognized.renamed} renamed, ${result.unrecognized.removed} removed`);
834
+ console.log(` Fake agent hits: ${result.agentHits.moved} hourly rows moved to likely fake (${result.agentHits.movedHits} hits)`);
835
+ console.log(` Agent requests: ${result.agentRequests.removed} removed (${result.agentRequests.probes} asked for a scanner path)`);
836
+ console.log(` Journeys: ${result.journeys.visitorsRemoved} visitors and ${result.journeys.visitsRemoved} visits removed, ${result.journeys.visitsRelanded} visits now start at a different page`);
837
+ console.log(` Split visitors: ${result.journeyMerges.visitorsMerged} joined to the same person's first visitor, seen from another IP (${result.journeyMerges.visitsJoined} visits merged)`);
830
838
  if (Object.keys(result.byBot).length > 0) {
831
839
  console.log(` By bot:`);
832
840
  const sorted = Object.entries(result.byBot).sort(([, a], [, b]) => b - a);