@canonry/canonry 7.85.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 +7 -4
  2. package/assets/agent-workspace/skills/canonry/references/ai-traffic-tracking.md +7 -4
  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 +5 -3
  5. package/assets/assets/{AgentSetupPage-NdqmQkYa.js → AgentSetupPage-0f7Ca4IZ.js} +4 -4
  6. package/assets/assets/{AuditHistoryPanel-CuqdFCb9.js → AuditHistoryPanel-BAQuFTNl.js} +1 -1
  7. package/assets/assets/{BacklinksPage-CVjZiG1i.js → BacklinksPage-BK2bn9Xg.js} +1 -1
  8. package/assets/assets/{HistoryPage-DRvdgemW.js → HistoryPage-ZBfL9nGw.js} +1 -1
  9. package/assets/assets/{MeasurementPropertyPage-Bc5EpJFV.js → MeasurementPropertyPage-DDSOq4aU.js} +3 -3
  10. package/assets/assets/ProjectPage-8cVgOm5o.js +11 -0
  11. package/assets/assets/{RunsPage-B6_o81G3.js → RunsPage-ke0wMYLg.js} +1 -1
  12. package/assets/assets/{SettingsPage-DjmVapHO.js → SettingsPage-Bbi-sTBk.js} +1 -1
  13. package/assets/assets/{SiteHealthSection-BPPB0D9D.js → SiteHealthSection-eKxTDUE2.js} +2 -2
  14. package/assets/assets/{ToneBadge-DwUBSAjL.js → ToneBadge-WAMyKadz.js} +1 -1
  15. package/assets/assets/{TrafficPage-BvbjxOw3.js → TrafficPage-nXixENx9.js} +1 -1
  16. package/assets/assets/TrafficSourceDetailPage-ir5zJU_l.js +1 -0
  17. package/assets/assets/{account-context-D7M4W4wP.js → account-context-BmN431xn.js} +1 -1
  18. package/assets/assets/agent-trust-copy-zfx8m-cx.js +1 -0
  19. package/assets/assets/{card-DULVRmzI.js → card-DUTMWeHB.js} +1 -1
  20. package/assets/assets/{extract-error-message-B9-6WgLm.js → extract-error-message-BFaIHLqb.js} +1 -1
  21. package/assets/assets/{format-helpers-Cgq0VzXz.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-1Q6EwPba.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-CR09uPhZ.js → react-sigma_core.esm.min-cvMDhRNS.js} +1 -1
  27. package/assets/assets/{service-Bu-7icpb.js → service-CvCKbPnf.js} +1 -1
  28. package/assets/index.html +8 -8
  29. package/dist/{ads-ETZIGLL5.js → ads-7IJTHW6T.js} +3 -3
  30. package/dist/{agent-WG2FUC7C.js → agent-4UC2X7O2.js} +7 -7
  31. package/dist/{agent-ask-775XBFOH.js → agent-ask-SVPU2WQU.js} +3 -3
  32. package/dist/{agent-conversations-AYZ3LQJQ.js → agent-conversations-PJQRY5RX.js} +3 -3
  33. package/dist/{agent-journeys-GWNZG73C.js → agent-journeys-JOD5DQ6G.js} +3 -3
  34. package/dist/{agent-memory-E5MRRS5P.js → agent-memory-KTMZMUYF.js} +3 -3
  35. package/dist/{agent-providers-DEQZWO2M.js → agent-providers-VEBB3WEW.js} +3 -3
  36. package/dist/{agent-transcript-4AKVVHQC.js → agent-transcript-RRZJCMK2.js} +3 -3
  37. package/dist/{analytics-HSLTWKDA.js → analytics-EZV4XJKR.js} +3 -3
  38. package/dist/{apply-4GD7VGG7.js → apply-NP7ORQS4.js} +3 -3
  39. package/dist/{backfill-LNE2BW34.js → backfill-7T6VFPWT.js} +10 -10
  40. package/dist/{backlinks-TGE3DWA2.js → backlinks-KTEJM2IP.js} +3 -3
  41. package/dist/{bing-56GNRC55.js → bing-TC54HJUB.js} +3 -3
  42. package/dist/{bootstrap-42XCWZTS.js → bootstrap-UDSN22NT.js} +10 -10
  43. package/dist/{cdp-UODIMKE3.js → cdp-IZSHF3MS.js} +7 -7
  44. package/dist/{chunk-AICFUZ6X.js → chunk-2J5EUXO2.js} +1 -1
  45. package/dist/{chunk-Z53CKLDS.js → chunk-3K3QBKNC.js} +3 -3
  46. package/dist/{chunk-2X6UAPAC.js → chunk-4EKPEVJ2.js} +5 -5
  47. package/dist/{chunk-D45AMUYA.js → chunk-5KHF5FV5.js} +4 -4
  48. package/dist/{chunk-GR7VVRNN.js → chunk-5WEGX3H7.js} +1 -1
  49. package/dist/{chunk-RCAB7M6A.js → chunk-5ZAQVRFL.js} +2 -2
  50. package/dist/{chunk-Q7354YI3.js → chunk-AZP37FMA.js} +3 -3
  51. package/dist/{chunk-SS33RWKG.js → chunk-BLGYC2K7.js} +1 -1
  52. package/dist/{chunk-X7XKMARG.js → chunk-CBNFWSWU.js} +2 -2
  53. package/dist/{chunk-JVO5GQZH.js → chunk-DU4QEC65.js} +14 -14
  54. package/dist/{chunk-TPUBPXBN.js → chunk-E6IZVSRY.js} +2 -2
  55. package/dist/{chunk-4KK3OTHE.js → chunk-EX6GVZAE.js} +1 -1
  56. package/dist/{chunk-QEATYB7C.js → chunk-F5SQITTJ.js} +1 -1
  57. package/dist/{chunk-5NEZO3SC.js → chunk-GO4RP6XE.js} +3 -3
  58. package/dist/{chunk-2O5XBKEO.js → chunk-HHMOUS26.js} +5 -5
  59. package/dist/{chunk-OS5BVALI.js → chunk-IILPHGRC.js} +2 -2
  60. package/dist/{chunk-6SGHSSWQ.js → chunk-JAK37YKH.js} +2 -2
  61. package/dist/{chunk-PQWZCAVS.js → chunk-KEIKD6JQ.js} +1 -1
  62. package/dist/{chunk-KNKOTLVW.js → chunk-KUVTXIFX.js} +29 -9
  63. package/dist/{chunk-KBLMQDUZ.js → chunk-LJ6VNMCY.js} +7 -7
  64. package/dist/{chunk-2R6WI237.js → chunk-MJE3SGFW.js} +1 -1
  65. package/dist/{chunk-VFSHZHZS.js → chunk-OXI45LZP.js} +2 -2
  66. package/dist/{chunk-TVZMFCX2.js → chunk-RI2ZT3OR.js} +6 -6
  67. package/dist/{chunk-OHDSI5XS.js → chunk-RR76O744.js} +1 -1
  68. package/dist/{chunk-BQTXXXUG.js → chunk-STHWLBYT.js} +1 -1
  69. package/dist/{chunk-L5R5S57T.js → chunk-SUSQEH2D.js} +1 -1
  70. package/dist/{chunk-YDC2V5FQ.js → chunk-TTXBQCE6.js} +21 -21
  71. package/dist/{chunk-DWK6NIJF.js → chunk-U3QNTJBP.js} +1 -1
  72. package/dist/{chunk-UMEQ7EYN.js → chunk-UPFWF6TF.js} +4 -4
  73. package/dist/{chunk-PX2KVGOJ.js → chunk-UTG6UUGK.js} +1 -1
  74. package/dist/{chunk-UMV4HYHD.js → chunk-VBW33U4E.js} +2 -2
  75. package/dist/{chunk-NY252PIY.js → chunk-WVMWY4SE.js} +3 -3
  76. package/dist/{chunk-IOW23XNK.js → chunk-X3EU4UPS.js} +3 -3
  77. package/dist/{chunk-ZXMDIWW6.js → chunk-Z5LJI5XK.js} +4 -4
  78. package/dist/{chunk-C2H5TPKD.js → chunk-ZFL5DOGJ.js} +341 -340
  79. package/dist/{citations-RXBPR5MX.js → citations-TOZK6OFP.js} +3 -3
  80. package/dist/{cli-catalog-QVCJWPCI.js → cli-catalog-LNWBJNOD.js} +3 -3
  81. package/dist/{cli-commands-ZXR4Z2RW.js → cli-commands-3HX4JSDX.js} +7 -7
  82. package/dist/cli.js +13 -13
  83. package/dist/{competitor-MDNNHRSD.js → competitor-54HLL354.js} +3 -3
  84. package/dist/{content-D3JZZQ64.js → content-ZIGSMH5U.js} +3 -3
  85. package/dist/{dashboard-5S2A46GM.js → dashboard-YJH6IQGK.js} +6 -6
  86. package/dist/{demo-DQHWRIKR.js → demo-ZYK5XCP3.js} +1 -1
  87. package/dist/{demo-server-FY2XBSD2.js → demo-server-LZ6MWJ2S.js} +12 -12
  88. package/dist/{discover-NVNWHOTZ.js → discover-22QKOFIM.js} +3 -3
  89. package/dist/{discover-eval-CJB6GYUS.js → discover-eval-6IFCCH2S.js} +3 -3
  90. package/dist/{doctor-DLSKNC4W.js → doctor-WLLBFOJU.js} +3 -3
  91. package/dist/{evidence-QNJULIXM.js → evidence-7VHTWNZW.js} +3 -3
  92. package/dist/{export-cmd-Z2YG2WLK.js → export-cmd-5RZ3QDFH.js} +3 -3
  93. package/dist/{ga-RSNHBP2B.js → ga-LPI3CWY4.js} +3 -3
  94. package/dist/{gbp-ZEV62LSZ.js → gbp-YBOMWR75.js} +3 -3
  95. package/dist/{google-RZHEIKW5.js → google-N42X5FBH.js} +4 -4
  96. package/dist/{google-marketing-DYQXPTD3.js → google-marketing-SO4B7Z7L.js} +1 -1
  97. package/dist/{health-cmd-6ATPYUYG.js → health-cmd-W7RQWCEB.js} +3 -3
  98. package/dist/{history-KLX6XRY4.js → history-SDRTOIDZ.js} +3 -3
  99. package/dist/index.d.ts +90 -90
  100. package/dist/index.js +25 -25
  101. package/dist/{init-5BALV6SU.js → init-DPXOGP3P.js} +12 -12
  102. package/dist/{insights-ARCEFFK5.js → insights-636LLPVG.js} +3 -3
  103. package/dist/intelligence-service-JRVESWU2.js +16 -0
  104. package/dist/{journeys-WVRQRZQJ.js → journeys-NIXKVYA4.js} +21 -12
  105. package/dist/{keys-5KAJFRZZ.js → keys-U2JR56TX.js} +3 -3
  106. package/dist/{keyword-PTUH3TFD.js → keyword-GLRK2ZHR.js} +3 -3
  107. package/dist/{logs-NM7ACXGQ.js → logs-ENACGWGS.js} +3 -3
  108. package/dist/{mcp-ALRQXYL3.js → mcp-DST2XTP2.js} +4 -4
  109. package/dist/mcp.js +9 -9
  110. package/dist/{measurement-plan-T52JHK2J.js → measurement-plan-Y3SA4ZQC.js} +5 -5
  111. package/dist/{notify-MJBMRDXD.js → notify-ZYXJQUHU.js} +3 -3
  112. package/dist/{organic-evidence-ZUCQFWD5.js → organic-evidence-NSX7VCNW.js} +3 -3
  113. package/dist/{overview-74IHPU2A.js → overview-UO6Z64IT.js} +4 -4
  114. package/dist/{project-DKQOPMH6.js → project-BHXUPHQA.js} +3 -3
  115. package/dist/{query-YDJ5T46L.js → query-GDRAKEN5.js} +3 -3
  116. package/dist/{research-5DU6DFZW.js → research-YIOQ7WVP.js} +3 -3
  117. package/dist/{results-export-EDVVXKVW.js → results-export-KXMCAEHJ.js} +3 -3
  118. package/dist/{run-HRHGSIYE.js → run-6PN5GOVE.js} +4 -4
  119. package/dist/{schedule-GZVKQGMP.js → schedule-5B67GLAM.js} +3 -3
  120. package/dist/{search-M37GRKVC.js → search-BMVPCN2V.js} +3 -3
  121. package/dist/{serve-DW6PPZPJ.js → serve-HB7DI7OC.js} +26 -26
  122. package/dist/{session-H427H2SK.js → session-3RTDTW6Z.js} +13 -13
  123. package/dist/{settings-WGS7GP7C.js → settings-FJEYHYRH.js} +3 -3
  124. package/dist/{skills-CDDUPMAU.js → skills-6E7IUQUO.js} +2 -2
  125. package/dist/{snapshot-5MAK7PWE.js → snapshot-BJQ7WPJZ.js} +3 -3
  126. package/dist/{src-FEV4KYXN.js → src-QU75IDHI.js} +2 -2
  127. package/dist/{status-EHFOYTXQ.js → status-3GHFPN54.js} +4 -4
  128. package/dist/{technical-aeo-KVY4RQWT.js → technical-aeo-76JRC66W.js} +3 -3
  129. package/dist/{telemetry-7XRRIHVC.js → telemetry-KB73JBDZ.js} +4 -4
  130. package/dist/{tools-EHONHGB6.js → tools-6VWDHNPZ.js} +11 -11
  131. package/dist/{traffic-TBR6GOWN.js → traffic-XB7MZJ23.js} +5 -5
  132. package/dist/{users-YQS4X47Q.js → users-HYBG3J72.js} +3 -3
  133. package/dist/{visibility-stats-JXIOSJXC.js → visibility-stats-ZDB2LMRJ.js} +3 -3
  134. package/dist/{wordpress-HVOLEPQY.js → wordpress-SXKR6XNT.js} +3 -3
  135. package/package.json +1 -1
  136. package/assets/assets/ProjectPage-CGGBSiK7.js +0 -11
  137. package/assets/assets/TrafficSourceDetailPage-BGJwxS_Q.js +0 -1
  138. package/assets/assets/agent-trust-copy-WXXeDvDs.js +0 -1
  139. package/assets/assets/index-A-4JN4Pv.js +0 -60
  140. package/assets/assets/index-BnmWwrZA.css +0 -1
  141. package/assets/assets/react-query-D0OiMBt3.js +0 -1
  142. package/dist/intelligence-service-YJFZ6IBI.js +0 -16
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-UMV4HYHD.js";
3
+ } from "./chunk-VBW33U4E.js";
4
4
  import {
5
5
  emitJsonl
6
6
  } from "./chunk-Z7IUAJOF.js";
7
7
  import {
8
8
  measurementDraftOperationSchema,
9
9
  runMeasurementDraftAction
10
- } from "./chunk-QEATYB7C.js";
10
+ } from "./chunk-F5SQITTJ.js";
11
11
  import {
12
12
  isMachineFormat,
13
13
  systemError
@@ -37,7 +37,7 @@ import {
37
37
  unattributedAnswersLabel,
38
38
  uncheckedSourcesLabel,
39
39
  visibilityReportRequestSchema
40
- } from "./chunk-KNKOTLVW.js";
40
+ } from "./chunk-KUVTXIFX.js";
41
41
 
42
42
  // src/commands/measurement-plan.ts
43
43
  import crypto from "crypto";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  createLogger
3
- } from "./chunk-6SGHSSWQ.js";
3
+ } from "./chunk-JAK37YKH.js";
4
4
  import {
5
5
  addLikelyFakeAgentHits,
6
6
  correctBackgroundCallJourneys,
7
7
  mergeSplitJourneyVisitors,
8
8
  writeUnrecognizedAgentBuckets
9
- } from "./chunk-JVO5GQZH.js";
9
+ } from "./chunk-DU4QEC65.js";
10
10
  import {
11
11
  AGENT_TRUST_RULES_VERSION,
12
12
  BROWSER_SHAPED_AGENT_MARKERS,
@@ -23,7 +23,7 @@ import {
23
23
  isSelfTraffic,
24
24
  normalizeTrafficPathPattern,
25
25
  unrecognizedAgentName
26
- } from "./chunk-2R6WI237.js";
26
+ } from "./chunk-MJE3SGFW.js";
27
27
  import {
28
28
  RawEventSampleEventTypes,
29
29
  agentJourneyCaptureDays,
@@ -36,7 +36,7 @@ import {
36
36
  rawEventSamples,
37
37
  trafficReclassificationState,
38
38
  unrecognizedAgentEventsHourly
39
- } from "./chunk-L5R5S57T.js";
39
+ } from "./chunk-SUSQEH2D.js";
40
40
  import {
41
41
  AI_ENGINE_DOMAINS,
42
42
  AI_ENGINE_SELF_DOMAINS,
@@ -69,7 +69,7 @@ import {
69
69
  retryAfterDelayMs,
70
70
  usageCount,
71
71
  withRetry
72
- } from "./chunk-KNKOTLVW.js";
72
+ } from "./chunk-KUVTXIFX.js";
73
73
 
74
74
  // ../provider-openai/src/normalize.ts
75
75
  import OpenAI from "openai";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registeredProviderNames
3
- } from "./chunk-PQWZCAVS.js";
3
+ } from "./chunk-KEIKD6JQ.js";
4
4
  import {
5
5
  configExists,
6
6
  loadConfigRaw
7
- } from "./chunk-DWK6NIJF.js";
7
+ } from "./chunk-U3QNTJBP.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-FEV4KYXN.js");
31
+ const { createClient, projects, queries: queriesTable } = await import("./src-QU75IDHI.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-DW6PPZPJ.js");
50
+ const { serveCommand } = await import("./serve-HB7DI7OC.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -15,7 +15,7 @@ import {
15
15
  formatCanonryPluginUpdateHint,
16
16
  formatCanonryPluginVersionMismatch,
17
17
  skillsClientSchema
18
- } from "./chunk-KNKOTLVW.js";
18
+ } from "./chunk-KUVTXIFX.js";
19
19
 
20
20
  // src/commands/skills.ts
21
21
  import crypto from "crypto";
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-L5R5S57T.js";
8
+ } from "./chunk-SUSQEH2D.js";
9
9
  import {
10
10
  SITE_CRAWL_GRAPH_MAX_EDGES,
11
11
  SITE_CRAWL_GRAPH_MAX_NODES,
@@ -15,7 +15,7 @@ import {
15
15
  factorStatusFromDistribution,
16
16
  factorStatusFromScore,
17
17
  roundPreservingTotal
18
- } from "./chunk-KNKOTLVW.js";
18
+ } from "./chunk-KUVTXIFX.js";
19
19
 
20
20
  // src/site-audit-factors.ts
21
21
  function recordedSharePct(factor) {
@@ -2,11 +2,11 @@ import {
2
2
  dedupeGscSitemapUrls,
3
3
  resolveDiscoveredGscSitemapUrls,
4
4
  submitGscSitemapBatches
5
- } from "./chunk-OHDSI5XS.js";
5
+ } from "./chunk-RR76O744.js";
6
6
  import {
7
7
  measurementDraftOperationSchema,
8
8
  runMeasurementDraftAction
9
- } from "./chunk-QEATYB7C.js";
9
+ } from "./chunk-F5SQITTJ.js";
10
10
  import {
11
11
  CliError
12
12
  } from "./chunk-HGMYEDAQ.js";
@@ -184,7 +184,7 @@ import {
184
184
  trafficUnrecognizedAgentsQuerySchema,
185
185
  visibilityCompareSelectionSchema,
186
186
  visibilityReportRequestSchema
187
- } from "./chunk-KNKOTLVW.js";
187
+ } from "./chunk-KUVTXIFX.js";
188
188
 
189
189
  // src/mcp/tool-registry.ts
190
190
  import { z as z2 } from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hostMatchesDomain
3
- } from "./chunk-KNKOTLVW.js";
3
+ } from "./chunk-KUVTXIFX.js";
4
4
 
5
5
  // src/citation-utils.ts
6
6
  function pickProjectCitedDomain(citedDomains, projectDomains) {
@@ -5,7 +5,7 @@ import {
5
5
  loadConfig,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-DWK6NIJF.js";
8
+ } from "./chunk-U3QNTJBP.js";
9
9
  import {
10
10
  CANONRY_NPM_PACKAGE_URL,
11
11
  compareSemver,
@@ -18,7 +18,7 @@ import {
18
18
  updateCheckEnvOptOut,
19
19
  upgradeCaveatFor,
20
20
  upgradeCommandFor
21
- } from "./chunk-KNKOTLVW.js";
21
+ } from "./chunk-KUVTXIFX.js";
22
22
 
23
23
  // src/runtime-context.ts
24
24
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -13,14 +13,14 @@ import {
13
13
  normalizeCloudflareWorkerEvent,
14
14
  sessionizeJourneyRequests,
15
15
  verifyRequestSignature
16
- } from "./chunk-2R6WI237.js";
16
+ } from "./chunk-MJE3SGFW.js";
17
17
  import {
18
18
  currentOutcomeAttribution,
19
19
  getRequestContext,
20
20
  registerRequestContext,
21
21
  requestAuditIdentity,
22
22
  sanitizeRequestContext
23
- } from "./chunk-PX2KVGOJ.js";
23
+ } from "./chunk-UTG6UUGK.js";
24
24
  import {
25
25
  RawEventSampleEventTypes,
26
26
  SentimentIdempotencyConflict,
@@ -168,7 +168,7 @@ import {
168
168
  userSessions,
169
169
  users,
170
170
  writeNegativeReviewMaxStars
171
- } from "./chunk-L5R5S57T.js";
171
+ } from "./chunk-SUSQEH2D.js";
172
172
  import {
173
173
  ADS_ACTIVATE_SCOPE,
174
174
  ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
@@ -1235,7 +1235,7 @@ import {
1235
1235
  wordpressSchemaDeployResultDtoSchema,
1236
1236
  wordpressSchemaStatusResultDtoSchema,
1237
1237
  wordpressStatusDtoSchema
1238
- } from "./chunk-KNKOTLVW.js";
1238
+ } from "./chunk-KUVTXIFX.js";
1239
1239
 
1240
1240
  // ../api-routes/src/user-session.ts
1241
1241
  import crypto2 from "crypto";
@@ -7446,11 +7446,13 @@ async function journeyRoutes(app) {
7446
7446
  const candidates = app.db.select().from(journeyVisitors).where(and11(eq16(journeyVisitors.projectId, project.id), gte2(journeyVisitors.firstAiAt, windowStart), lte4(journeyVisitors.firstAiAt, windowEnd))).all();
7447
7447
  const visits = visitsByVisitor(app.db, project.id, candidates.map((v) => v.visitorKey));
7448
7448
  const visitors = candidates.filter((v) => visits.has(v.visitorKey));
7449
+ const counted = visitors.filter((v) => v.keyBasis === JourneyKeyBases["ip-ua"]);
7450
+ const measurable = counted.length > 0 || visitors.length === 0;
7449
7451
  const returnedVia = Object.fromEntries(journeyEntryClassSchema.options.map((c) => [c, 0]));
7450
7452
  const daysToReturn = [];
7451
7453
  const engines = /* @__PURE__ */ new Map();
7452
7454
  let returning = 0;
7453
- for (const visitor of visitors) {
7455
+ for (const visitor of counted) {
7454
7456
  const later = laterVisits(visitor, visits.get(visitor.visitorKey) ?? []);
7455
7457
  const engine = engines.get(visitor.firstAiEngine) ?? { visitors: 0, returningVisitors: 0 };
7456
7458
  engine.visitors += 1;
@@ -7469,17 +7471,14 @@ async function journeyRoutes(app) {
7469
7471
  windowStart,
7470
7472
  windowEnd,
7471
7473
  lookbackDays: JOURNEY_LOOKBACK_DAYS,
7472
- aiVisitors: visitors.length,
7474
+ aiVisitors: measurable ? counted.length : null,
7473
7475
  aiVisits,
7474
- returningVisitors: returning,
7475
- returnRate: visitors.length ? roundRatio(returning / visitors.length, RatioUnits.fraction) : null,
7476
- returnedVia,
7477
- medianDaysToReturn: days === null ? null : Math.round(days * 10) / 10,
7476
+ returningVisitors: measurable ? returning : null,
7477
+ returnRate: counted.length ? roundRatio(returning / counted.length, RatioUnits.fraction) : null,
7478
+ returnedVia: measurable ? returnedVia : null,
7479
+ medianDaysToReturn: days === null ? null : Math.round(days * 1e4) / 1e4,
7478
7480
  byEngine: [...engines].map(([engine, v]) => ({ engine, ...v })).sort((a, b) => b.visitors - a.visitors || a.engine.localeCompare(b.engine)),
7479
- keyBasis: {
7480
- ipUa: visitors.filter((v) => v.keyBasis === JourneyKeyBases["ip-ua"]).length,
7481
- ua: visitors.filter((v) => v.keyBasis !== JourneyKeyBases["ip-ua"]).length
7482
- },
7481
+ keyBasis: { ipUa: counted.length, ua: visitors.length - counted.length },
7483
7482
  partialSources: partialSources(app.db, project.id)
7484
7483
  };
7485
7484
  return response;
@@ -7491,6 +7490,7 @@ async function journeyRoutes(app) {
7491
7490
  const { windowStart, windowEnd } = window(query.since, query.until);
7492
7491
  const filters = [eq16(journeyVisitors.projectId, project.id), gte2(journeyVisitors.firstAiAt, windowStart), lte4(journeyVisitors.firstAiAt, windowEnd)];
7493
7492
  if (query.engine) filters.push(sql6`lower(${journeyVisitors.firstAiEngine}) = ${query.engine.toLowerCase()}`);
7493
+ if (query.keyBasis) filters.push(eq16(journeyVisitors.keyBasis, query.keyBasis));
7494
7494
  const all = app.db.select().from(journeyVisitors).where(and11(...filters)).orderBy(desc3(journeyVisitors.firstAiAt), desc3(journeyVisitors.visitorKey)).all();
7495
7495
  const visits = visitsByVisitor(app.db, project.id, all.map((v) => v.visitorKey));
7496
7496
  const matching = all.filter((visitor) => visits.has(visitor.visitorKey)).map((visitor) => ({ visitor, dto: visitorDto(visitor, visits.get(visitor.visitorKey) ?? []) })).filter(({ dto }) => query.returned === void 0 || dto.returned === (query.returned === "true"));
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  trackIntegrationConnection
3
- } from "./chunk-ZXMDIWW6.js";
3
+ } from "./chunk-Z5LJI5XK.js";
4
4
  import {
5
5
  cliRuntimeContext
6
- } from "./chunk-X7XKMARG.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-KNKOTLVW.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-KNKOTLVW.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-4KK3OTHE.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-KNKOTLVW.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-QVCJWPCI.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-SS33RWKG.js";
3
+ } from "./chunk-BLGYC2K7.js";
4
4
  import {
5
5
  createLogger
6
- } from "./chunk-6SGHSSWQ.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-JVO5GQZH.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-L5R5S57T.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-KNKOTLVW.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-UMV4HYHD.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-KNKOTLVW.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-PX2KVGOJ.js";
3
+ } from "./chunk-UTG6UUGK.js";
4
4
  import {
5
5
  diagnosticIdentity,
6
6
  redactLogString,
7
7
  redactLogValue
8
- } from "./chunk-KNKOTLVW.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-KNKOTLVW.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);
@@ -19540,6 +19550,8 @@ var journeysQuerySchema = z58.object({
19540
19550
  engine: z58.string().min(1).optional(),
19541
19551
  /** Only visitors who came back after their first AI visit. */
19542
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(),
19543
19555
  limit: z58.number().int().min(1).max(200).optional(),
19544
19556
  offset: z58.number().int().min(0).optional()
19545
19557
  });
@@ -19642,19 +19654,26 @@ var journeySummaryResponseSchema = z58.object({
19642
19654
  windowStart: z58.string(),
19643
19655
  windowEnd: z58.string(),
19644
19656
  lookbackDays: z58.literal(JOURNEY_LOOKBACK_DAYS),
19645
- /** Visitors whose first AI visit started in the window. */
19646
- aiVisitors: z58.number().int(),
19647
- /** 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. */
19648
19665
  aiVisits: z58.number().int(),
19649
- /** Of aiVisitors, those who came back in a later visit. */
19650
- returningVisitors: z58.number().int(),
19651
- /** 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. */
19652
19669
  returnRate: fraction().nullable(),
19653
- /** Later visits of those visitors, by how they came back. */
19654
- returnedVia: z58.record(journeyEntryClassSchema, z58.number().int()),
19655
- /** 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. */
19656
19673
  medianDaysToReturn: z58.number().nullable(),
19674
+ /** The counted visitors by first AI engine. */
19657
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. */
19658
19677
  keyBasis: z58.object({ ipUa: z58.number().int(), ua: z58.number().int() }),
19659
19678
  partialSources: journeyPartialSourcesSchema
19660
19679
  });
@@ -27263,6 +27282,7 @@ export {
27263
27282
  competitorEntryParts,
27264
27283
  formatPercent,
27265
27284
  formatNumber,
27285
+ formatDayDuration,
27266
27286
  formatCalendarDay,
27267
27287
  formatIsoDate,
27268
27288
  formatIsoDateInTimeZone,
@@ -8,23 +8,23 @@ import {
8
8
  reparseStoredResult4,
9
9
  reparseStoredResult5,
10
10
  resolveStoredApiResponse
11
- } from "./chunk-2X6UAPAC.js";
11
+ } from "./chunk-4EKPEVJ2.js";
12
12
  import {
13
13
  loadConfig
14
- } from "./chunk-DWK6NIJF.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-SS33RWKG.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-JVO5GQZH.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-L5R5S57T.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-KNKOTLVW.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-YJFZ6IBI.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);
@@ -12,7 +12,7 @@ import {
12
12
  classifyTrafficPath,
13
13
  hostMatchesDomain,
14
14
  hostOf
15
- } from "./chunk-KNKOTLVW.js";
15
+ } from "./chunk-KUVTXIFX.js";
16
16
 
17
17
  // ../integration-traffic/src/agent-trust.ts
18
18
  var AGENT_TRUST_RULES_VERSION = 2;
@@ -4,14 +4,14 @@ import {
4
4
  } from "./chunk-VJWDBFSL.js";
5
5
  import {
6
6
  createApiClient
7
- } from "./chunk-UMV4HYHD.js";
7
+ } from "./chunk-VBW33U4E.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-KNKOTLVW.js";
14
+ } from "./chunk-KUVTXIFX.js";
15
15
 
16
16
  // src/commands/mcp.ts
17
17
  import fs from "fs";
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-UMEQ7EYN.js";
8
+ } from "./chunk-UPFWF6TF.js";
9
9
  import {
10
10
  CANONRY_MCP_TOOLKITS,
11
11
  resolveAeroSkillDir
@@ -23,18 +23,18 @@ import {
23
23
  resolveApiKeyFor,
24
24
  resolveModelForProvider,
25
25
  validateAgentProviderRegistry
26
- } from "./chunk-DWK6NIJF.js";
26
+ } from "./chunk-U3QNTJBP.js";
27
27
  import {
28
28
  CanonryMcpToolNames,
29
29
  canonryMcpTools
30
- } from "./chunk-Q7354YI3.js";
30
+ } from "./chunk-AZP37FMA.js";
31
31
  import {
32
32
  createLogger
33
- } from "./chunk-6SGHSSWQ.js";
33
+ } from "./chunk-JAK37YKH.js";
34
34
  import {
35
35
  agentToolEvents,
36
36
  llmUsageEvents
37
- } from "./chunk-L5R5S57T.js";
37
+ } from "./chunk-SUSQEH2D.js";
38
38
  import {
39
39
  MeasurementPortfolioLists,
40
40
  SeoCapabilities,
@@ -43,7 +43,7 @@ import {
43
43
  describeError,
44
44
  validationError,
45
45
  visibilityReportRequestSchema
46
- } from "./chunk-KNKOTLVW.js";
46
+ } from "./chunk-KUVTXIFX.js";
47
47
 
48
48
  // src/agent/session.ts
49
49
  import fs2 from "fs";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-HGMYEDAQ.js";
5
5
  import {
6
6
  describeError
7
- } from "./chunk-KNKOTLVW.js";
7
+ } from "./chunk-KUVTXIFX.js";
8
8
 
9
9
  // src/gsc-sitemap-submission.ts
10
10
  function dedupeGscSitemapUrls(urls) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cloudflareQueueNameSchema
3
- } from "./chunk-KNKOTLVW.js";
3
+ } from "./chunk-KUVTXIFX.js";
4
4
 
5
5
  // src/cloudflare-traffic-config.ts
6
6
  function unsupportedDeliveryMode(deliveryMode) {
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-KNKOTLVW.js";
23
+ } from "./chunk-KUVTXIFX.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";