@canonry/canonry 7.59.0 → 7.60.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 (131) hide show
  1. package/assets/agent-workspace/skills/aero/SKILL.md +2 -1
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +19 -5
  3. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +6 -3
  4. package/assets/assets/{AgentSetupPage-DH2Mi2Q7.js → AgentSetupPage-xAe2RSTQ.js} +1 -1
  5. package/assets/assets/{AuditHistoryPanel-DVIQR5y5.js → AuditHistoryPanel-DRGMxc1o.js} +1 -1
  6. package/assets/assets/{BacklinksPage-DFFeaSbH.js → BacklinksPage-OS6r_MtQ.js} +1 -1
  7. package/assets/assets/{HistoryPage-BxDhO9rm.js → HistoryPage-RDxUN7rD.js} +1 -1
  8. package/assets/assets/{MeasurementPropertyPage-B0AkDYxY.js → MeasurementPropertyPage-BVAmJBKa.js} +1 -1
  9. package/assets/assets/{ProjectPage-6_HOcytx.js → ProjectPage-BWY9eFFx.js} +1 -1
  10. package/assets/assets/{RunsPage-BUK5EqC6.js → RunsPage-Fb7IM6iV.js} +1 -1
  11. package/assets/assets/{SettingsPage-CuBUZ4TN.js → SettingsPage-Dz_agQCf.js} +1 -1
  12. package/assets/assets/{SiteHealthSection-CoyiSleA.js → SiteHealthSection-TXp2Cszl.js} +2 -2
  13. package/assets/assets/{ToneBadge-Du4fOtJa.js → ToneBadge-DZzQvXs_.js} +1 -1
  14. package/assets/assets/{TrafficPage-BE9Ay-x-.js → TrafficPage-BKfgooKl.js} +1 -1
  15. package/assets/assets/{TrafficSourceDetailPage-kW0DFcwB.js → TrafficSourceDetailPage-C1HM_4Mh.js} +1 -1
  16. package/assets/assets/{account-context-IN6VE8PV.js → account-context-sj3dKq-a.js} +1 -1
  17. package/assets/assets/{card-DiBSxANp.js → card-DKV0mNmm.js} +1 -1
  18. package/assets/assets/{extract-error-message-_H20efSf.js → extract-error-message-Tfdo6vAJ.js} +1 -1
  19. package/assets/assets/{format-helpers-DKjsmbxo.js → format-helpers-BagbvnfZ.js} +1 -1
  20. package/assets/assets/{index-B1kVq-wC.js → index-7G0DHKIO.js} +4 -4
  21. package/assets/assets/{query-client-BXS2w17E.js → query-client-7P_Wczfa.js} +1 -1
  22. package/assets/assets/{react-query-B8oOFCyW.js → react-query-agN8P-yg.js} +1 -1
  23. package/assets/assets/{react-sigma_core.esm.min-Bf_kjp11.js → react-sigma_core.esm.min-CHz1PIYq.js} +1 -1
  24. package/assets/assets/{service-D9noo7pB.js → service-CAV4dMit.js} +1 -1
  25. package/assets/index.html +7 -7
  26. package/dist/{ads-6NAIIZGO.js → ads-A42JBQ5Q.js} +3 -3
  27. package/dist/{agent-LISFS4WR.js → agent-ZKKHPMOB.js} +7 -7
  28. package/dist/{agent-ask-JJM34LMD.js → agent-ask-SMV76QZM.js} +3 -3
  29. package/dist/{agent-conversations-4JNBIBVR.js → agent-conversations-O5QA3MHR.js} +3 -3
  30. package/dist/{agent-memory-I2M7TIWO.js → agent-memory-ZRJQ6SZU.js} +3 -3
  31. package/dist/{agent-providers-3ZX3RETW.js → agent-providers-EOXIPRXN.js} +3 -3
  32. package/dist/{agent-transcript-OYK4O5XV.js → agent-transcript-4TB2VI5E.js} +3 -3
  33. package/dist/{analytics-7HW2FSST.js → analytics-KSHS32RJ.js} +3 -3
  34. package/dist/{apply-S2OC6S65.js → apply-4ZZMONED.js} +3 -3
  35. package/dist/{backfill-EUHHN4VT.js → backfill-DJIIN5ZR.js} +9 -9
  36. package/dist/{backlinks-AY5EMVN4.js → backlinks-XIAPORR5.js} +3 -3
  37. package/dist/{bing-KJW2LYAT.js → bing-QDZXI334.js} +3 -3
  38. package/dist/{bootstrap-3R4AMSY4.js → bootstrap-7RAGKHJZ.js} +10 -10
  39. package/dist/{cdp-URC66DX5.js → cdp-3OX3WGWN.js} +7 -7
  40. package/dist/{chunk-MTKXD4WY.js → chunk-2IBFY7KQ.js} +2 -2
  41. package/dist/{chunk-QF5C3JXL.js → chunk-3JV3PWNA.js} +1 -1
  42. package/dist/{chunk-WSFCQQ7F.js → chunk-4IV4FO3O.js} +64 -14
  43. package/dist/{chunk-KLPRF4PA.js → chunk-66C7YITH.js} +1 -1
  44. package/dist/{chunk-Y54KA37X.js → chunk-7HZ7KRHT.js} +1 -1
  45. package/dist/{chunk-PSRJYRAD.js → chunk-7KEIZ5OO.js} +8 -8
  46. package/dist/{chunk-LWKHCQ46.js → chunk-7XSGAPN5.js} +3 -3
  47. package/dist/{chunk-PP7HR4II.js → chunk-ADY24WBX.js} +4 -4
  48. package/dist/{chunk-EED2QEE7.js → chunk-D7ZU5LMK.js} +1 -1
  49. package/dist/{chunk-JLDTGMVQ.js → chunk-DUYENNUI.js} +2 -2
  50. package/dist/{chunk-PZUMERGZ.js → chunk-FCPIOH6P.js} +1 -1
  51. package/dist/{chunk-HKLI6ZFP.js → chunk-FKQPVB5B.js} +20 -20
  52. package/dist/{chunk-EJZ4TQQR.js → chunk-G7VJEPDZ.js} +2 -2
  53. package/dist/{chunk-SEBIXQEN.js → chunk-GLFE3Q3C.js} +3 -3
  54. package/dist/{chunk-LJRXJHWJ.js → chunk-HGBIJIVM.js} +1 -1
  55. package/dist/{chunk-RFXO5GPB.js → chunk-HV5MGQYI.js} +3 -3
  56. package/dist/{chunk-ON7D53WE.js → chunk-I32IFAB3.js} +3 -3
  57. package/dist/{chunk-SXDAIG5W.js → chunk-IDPAYZHR.js} +1 -1
  58. package/dist/{chunk-HUO3YPKB.js → chunk-JDL4QAPT.js} +17 -3
  59. package/dist/{chunk-OTQFHUIH.js → chunk-L7WQTD3D.js} +5 -5
  60. package/dist/{chunk-WUVX5HBI.js → chunk-NQTUPEBQ.js} +1 -1
  61. package/dist/{chunk-TJ4UAO7R.js → chunk-O7KIDW4H.js} +31 -4
  62. package/dist/{chunk-PDS77GLS.js → chunk-OA6N3BI7.js} +4 -4
  63. package/dist/{chunk-KCO3PGDZ.js → chunk-QCSNNKFI.js} +1 -1
  64. package/dist/{chunk-FA7RDZ43.js → chunk-QEG7BSLH.js} +1 -1
  65. package/dist/{chunk-GS6IH7CI.js → chunk-QRC6SDPF.js} +346 -334
  66. package/dist/{chunk-B4N5L6NF.js → chunk-RLXNZRHD.js} +5 -5
  67. package/dist/{chunk-PTKFLEVN.js → chunk-SJNF5GN2.js} +2 -2
  68. package/dist/{chunk-O7BPIPJB.js → chunk-TLNHDCJF.js} +2 -2
  69. package/dist/{chunk-VRI3UDRA.js → chunk-UHE4RLFW.js} +1 -1
  70. package/dist/{chunk-TKX4G4NV.js → chunk-XJF7LMGU.js} +4 -4
  71. package/dist/{chunk-3WRDJJOY.js → chunk-Z63ZR6AD.js} +1 -1
  72. package/dist/{chunk-VWO4WRQM.js → chunk-Z7WG6F7Q.js} +3 -3
  73. package/dist/{chunk-X3UXPAT7.js → chunk-ZK5WIVGA.js} +2 -2
  74. package/dist/{citations-DAXUWNKQ.js → citations-L3HFNQVU.js} +3 -3
  75. package/dist/{cli-catalog-ORQPYKHI.js → cli-catalog-DJPRREDK.js} +3 -3
  76. package/dist/{cli-commands-SDTHXYWU.js → cli-commands-4KG4X76Z.js} +7 -7
  77. package/dist/cli.js +13 -13
  78. package/dist/{competitor-QPL47DA6.js → competitor-Q5LZ26U5.js} +3 -3
  79. package/dist/{content-V5NLV3AH.js → content-WRVFNQSO.js} +3 -3
  80. package/dist/{dashboard-CZEO2UTG.js → dashboard-GBP2T2AG.js} +6 -6
  81. package/dist/{demo-JZS5DBSR.js → demo-JMLMPLJ6.js} +1 -1
  82. package/dist/{demo-server-OAYVJVGC.js → demo-server-AOVPBGZ7.js} +11 -11
  83. package/dist/{discover-TEEHJPLW.js → discover-SKUNZE4Y.js} +3 -3
  84. package/dist/{discover-eval-4I25W4VL.js → discover-eval-57BEDSQN.js} +3 -3
  85. package/dist/{doctor-VR6YKJSW.js → doctor-DMLJGH6G.js} +3 -3
  86. package/dist/{evidence-SISRJ4YZ.js → evidence-J4XF4W7O.js} +3 -3
  87. package/dist/{export-cmd-L5LKHKBY.js → export-cmd-3JXT2YAP.js} +3 -3
  88. package/dist/{ga-WQQVWU5Q.js → ga-KHILAPMC.js} +3 -3
  89. package/dist/{gbp-XKRX7ZJY.js → gbp-PHOFQZNT.js} +3 -3
  90. package/dist/{google-TUEMVVGE.js → google-QOLM2NBI.js} +4 -4
  91. package/dist/{google-marketing-JWAJXNWR.js → google-marketing-N37WUWNL.js} +1 -1
  92. package/dist/{health-cmd-2OQEIQMG.js → health-cmd-2FUEPUJZ.js} +3 -3
  93. package/dist/{history-33VEX442.js → history-MOSRCLAD.js} +3 -3
  94. package/dist/index.d.ts +7 -7
  95. package/dist/index.js +24 -24
  96. package/dist/{init-QMLVST26.js → init-V6ER2PJV.js} +11 -11
  97. package/dist/{insights-6VIXDNVK.js → insights-F3MT66IV.js} +3 -3
  98. package/dist/intelligence-service-S5DI74LD.js +15 -0
  99. package/dist/{journeys-7YJLJ34F.js → journeys-DNS3EZNK.js} +3 -3
  100. package/dist/{keys-I7Z5CGEQ.js → keys-NPOLKCWZ.js} +3 -3
  101. package/dist/{keyword-OPTT3EXO.js → keyword-AXEPIJQ7.js} +3 -3
  102. package/dist/{logs-35L2ZWRO.js → logs-ECEDVUTX.js} +3 -3
  103. package/dist/{mcp-JWB42VTJ.js → mcp-HUIRIY74.js} +2 -2
  104. package/dist/mcp.js +9 -9
  105. package/dist/{measurement-plan-UWA2N6FO.js → measurement-plan-5Y2IHH43.js} +5 -5
  106. package/dist/{notify-FE7FSXDB.js → notify-PIFCJ7WM.js} +3 -3
  107. package/dist/{organic-evidence-34EKPGKI.js → organic-evidence-S2IE5XV6.js} +3 -3
  108. package/dist/{overview-HPY5I6ZT.js → overview-TZT7C4U4.js} +4 -4
  109. package/dist/{project-5CCX7VNR.js → project-HIY673Y5.js} +3 -3
  110. package/dist/{query-VV4TRRDX.js → query-FUJIMFJQ.js} +3 -3
  111. package/dist/{research-62VXIO2O.js → research-ECGEXWID.js} +3 -3
  112. package/dist/{results-export-QZQTNXMB.js → results-export-7DRGFNUX.js} +3 -3
  113. package/dist/{run-MYWJ2MPB.js → run-4JEDD5VT.js} +4 -4
  114. package/dist/{schedule-YC76OSAK.js → schedule-NRHQXHTW.js} +3 -3
  115. package/dist/{search-J2J7BXBL.js → search-M7PNZZZL.js} +3 -3
  116. package/dist/{serve-LESJD7GM.js → serve-RXLQEALQ.js} +25 -25
  117. package/dist/{session-2MU6LLLC.js → session-MCSZQR5V.js} +12 -12
  118. package/dist/{settings-QIMV3UYB.js → settings-JXOYI7VV.js} +3 -3
  119. package/dist/{skills-3HOQ77ON.js → skills-SRUXD2PV.js} +2 -2
  120. package/dist/{snapshot-XL3KO4OW.js → snapshot-7N4BEGGM.js} +3 -3
  121. package/dist/{src-CLICUC3F.js → src-ZAAE3NIM.js} +2 -2
  122. package/dist/{status-CKAJEBHG.js → status-5OYYSMAY.js} +4 -4
  123. package/dist/{technical-aeo-CW7WNDUU.js → technical-aeo-464OUUWT.js} +3 -3
  124. package/dist/{telemetry-GPP5XD7R.js → telemetry-BZFNXACR.js} +4 -4
  125. package/dist/{tools-UNFFO5HO.js → tools-YVWC3NTG.js} +11 -11
  126. package/dist/{traffic-LALKHOSD.js → traffic-WXJHRB7H.js} +13 -8
  127. package/dist/{users-NQG7Y3GC.js → users-U2UNKGDY.js} +3 -3
  128. package/dist/{visibility-stats-RJHXNYBM.js → visibility-stats-AHGME46N.js} +3 -3
  129. package/dist/{wordpress-VLHQ6P47.js → wordpress-FUVFZKH2.js} +3 -3
  130. package/package.json +1 -1
  131. package/dist/intelligence-service-NFBPBKI7.js +0 -15
@@ -1,4 +1,5 @@
1
1
  import {
2
+ CLOUDFLARE_PAGE_VIEWS_VERSION_SUFFIX,
2
3
  DEFAULT_BOT_LIST,
3
4
  buildTrafficProbeReport,
4
5
  extractJourneyRequests,
@@ -8,14 +9,14 @@ import {
8
9
  normalizeCloudflareWorkerEvent,
9
10
  sessionizeJourneyRequests,
10
11
  verifyRequestSignature
11
- } from "./chunk-TJ4UAO7R.js";
12
+ } from "./chunk-O7KIDW4H.js";
12
13
  import {
13
14
  currentOutcomeAttribution,
14
15
  getRequestContext,
15
16
  registerRequestContext,
16
17
  requestAuditIdentity,
17
18
  sanitizeRequestContext
18
- } from "./chunk-KLPRF4PA.js";
19
+ } from "./chunk-66C7YITH.js";
19
20
  import {
20
21
  SentimentIdempotencyConflict,
21
22
  SentimentRepository,
@@ -153,7 +154,7 @@ import {
153
154
  userSessions,
154
155
  users,
155
156
  writeNegativeReviewMaxStars
156
- } from "./chunk-QF5C3JXL.js";
157
+ } from "./chunk-3JV3PWNA.js";
157
158
  import {
158
159
  ADS_ACTIVATE_SCOPE,
159
160
  ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
@@ -260,6 +261,7 @@ import {
260
261
  JOURNEY_LIST_VISITS_PER_VISITOR,
261
262
  JOURNEY_LOOKBACK_DAYS,
262
263
  JOURNEY_MAX_REQUESTS_PER_VISITOR_DAY,
264
+ JOURNEY_PAGE_VIEWS_PENDING_REASON,
263
265
  JOURNEY_PARTIAL_SOURCE_TYPES,
264
266
  JOURNEY_RETENTION_DAYS,
265
267
  JOURNEY_VISIT_IDLE_MINUTES,
@@ -1154,7 +1156,7 @@ import {
1154
1156
  wordpressSchemaDeployResultDtoSchema,
1155
1157
  wordpressSchemaStatusResultDtoSchema,
1156
1158
  wordpressStatusDtoSchema
1157
- } from "./chunk-HUO3YPKB.js";
1159
+ } from "./chunk-JDL4QAPT.js";
1158
1160
 
1159
1161
  // ../api-routes/src/user-session.ts
1160
1162
  import crypto2 from "crypto";
@@ -28845,6 +28847,14 @@ async function trafficSamplesRoutes(app) {
28845
28847
  import crypto28 from "crypto";
28846
28848
  import { and as and42, asc as asc10, count as count4, desc as desc23, eq as eq50, gt as gt4, gte as gte10, inArray as inArray27, lt as lt8, lte as lte9, sql as sql15 } from "drizzle-orm";
28847
28849
  import "zod";
28850
+
28851
+ // ../api-routes/src/cloudflare-worker-version.ts
28852
+ var CURRENT_CLOUDFLARE_WORKER_VERSION = "1.0.1";
28853
+ function cloudflareWorkerVersionFor(options) {
28854
+ return `${CURRENT_CLOUDFLARE_WORKER_VERSION}${options.forwardPageViews ? CLOUDFLARE_PAGE_VIEWS_VERSION_SUFFIX : ""}`;
28855
+ }
28856
+
28857
+ // ../api-routes/src/journeys.ts
28848
28858
  var DAY_MS = 24 * 60 * 6e4;
28849
28859
  var IDLE_MS = JOURNEY_VISIT_IDLE_MINUTES * 6e4;
28850
28860
  var LOOKBACK_MS = JOURNEY_LOOKBACK_DAYS * DAY_MS;
@@ -29135,7 +29145,27 @@ function visitsByVisitor(db, projectId, keys) {
29135
29145
  }
29136
29146
  function partialSources(db, projectId) {
29137
29147
  const types = Object.keys(JOURNEY_PARTIAL_SOURCE_TYPES);
29138
- return db.select({ id: trafficSources.id, sourceType: trafficSources.sourceType, status: trafficSources.status }).from(trafficSources).where(and42(eq50(trafficSources.projectId, projectId), inArray27(trafficSources.sourceType, types))).orderBy(asc10(trafficSources.id)).all().filter((row) => row.status !== TrafficSourceStatuses.archived).map((row) => ({ sourceId: row.id, sourceType: row.sourceType, reason: JOURNEY_PARTIAL_SOURCE_TYPES[row.sourceType] }));
29148
+ const rows = db.select({
29149
+ id: trafficSources.id,
29150
+ sourceType: trafficSources.sourceType,
29151
+ status: trafficSources.status,
29152
+ configJson: trafficSources.configJson,
29153
+ lastWorkerVersion: trafficSources.lastWorkerVersion
29154
+ }).from(trafficSources).where(and42(eq50(trafficSources.projectId, projectId), inArray27(trafficSources.sourceType, types))).orderBy(asc10(trafficSources.id)).all();
29155
+ const out = [];
29156
+ for (const row of rows) {
29157
+ if (row.status === TrafficSourceStatuses.archived) continue;
29158
+ let reason = JOURNEY_PARTIAL_SOURCE_TYPES[row.sourceType];
29159
+ if (row.sourceType === TrafficSourceTypes.cloudflare) {
29160
+ const config = cloudflareTrafficSourceConfigSchema.safeParse(row.configJson);
29161
+ if (config.success && config.data.forwardPageViews) {
29162
+ if (row.lastWorkerVersion === cloudflareWorkerVersionFor({ forwardPageViews: true })) continue;
29163
+ reason = JOURNEY_PAGE_VIEWS_PENDING_REASON;
29164
+ }
29165
+ }
29166
+ out.push({ sourceId: row.id, sourceType: row.sourceType, reason });
29167
+ }
29168
+ return out;
29139
29169
  }
29140
29170
  function median(values) {
29141
29171
  if (values.length === 0) return null;
@@ -60194,9 +60224,6 @@ import { isIP } from "net";
60194
60224
  import { isDeepStrictEqual } from "util";
60195
60225
  import { and as and69, desc as desc39, eq as eq80, gt as gt7, gte as gte19, inArray as inArray34, lt as lt13, lte as lte20, sql as sql30 } from "drizzle-orm";
60196
60226
 
60197
- // ../api-routes/src/cloudflare-worker-version.ts
60198
- var CURRENT_CLOUDFLARE_WORKER_VERSION = "1.0.1";
60199
-
60200
60227
  // ../api-routes/src/traffic-limits.ts
60201
60228
  var VERCEL_MAX_SYNC_WINDOW_MS = 24 * 60 * 6e4;
60202
60229
  var DEFAULT_VERCEL_SYNC_DEADLINE_MS = 4 * 6e4;
@@ -61985,6 +62012,19 @@ async function loadQueueReceiptPolicy(db, sourceId, readRetentionSeconds, warn2)
61985
62012
  const floorMs = floorExpiry ? Date.parse(floorExpiry) : 0;
61986
62013
  return { ttlMsAt: (receivedAt) => Math.max(ttlMs, floorMs - Date.parse(receivedAt)) };
61987
62014
  }
62015
+ function cloudflarePageViewInstructions(forwardPageViews, deliveryMode) {
62016
+ if (!forwardPageViews) return [];
62017
+ const lines = [
62018
+ "This Worker also forwards page views (document loads and form posts), so AI visitor journeys record later visits.",
62019
+ "Each page view becomes one Worker delivery: expect more Worker CPU and Canonry ingest volume on busy sites."
62020
+ ];
62021
+ if (deliveryMode === CloudflareTrafficDeliveryModes["queue-pull"]) {
62022
+ lines.push(
62023
+ "Each page view is one Queue message (3 Queue operations). Each sync drains for up to 4 minutes by default; if doctor reports more than 1,000 messages left after syncs, shorten the traffic-sync interval or raise CANONRY_CLOUDFLARE_QUEUE_SYNC_DEADLINE_MS."
62024
+ );
62025
+ }
62026
+ return lines;
62027
+ }
61988
62028
  function parseDirectPushCloudflareSourceConfig(config) {
61989
62029
  const parsed = cloudflareTrafficSourceConfigSchema.safeParse(config);
61990
62030
  return parsed.success && parsed.data.deliveryMode === CloudflareTrafficDeliveryModes["direct-push"] ? parsed.data : null;
@@ -63103,11 +63143,13 @@ async function trafficRoutes(app, opts) {
63103
63143
  if (sameModeSource) attempt.update({ action: "reauth" });
63104
63144
  const sourceId2 = sameModeSource?.id ?? crypto52.randomUUID();
63105
63145
  const previousCredential2 = credentialStore.getConnectionBySourceId(sourceId2);
63106
- const workerVersion2 = CURRENT_CLOUDFLARE_WORKER_VERSION;
63146
+ const forwardPageViews2 = parsed.data.forwardPageViews ?? (sameModeSource ? parseQueuePullCloudflareSourceConfig(sameModeSource.configJson)?.forwardPageViews : void 0) ?? false;
63147
+ const workerVersion2 = cloudflareWorkerVersionFor({ forwardPageViews: forwardPageViews2 });
63107
63148
  const workerScript2 = generateWorkerScript({
63108
63149
  deliveryMode: "queue-pull",
63109
63150
  workerVersion: workerVersion2,
63110
- botList: DEFAULT_BOT_LIST
63151
+ botList: DEFAULT_BOT_LIST,
63152
+ forwardPageViews: forwardPageViews2
63111
63153
  });
63112
63154
  const wranglerToml2 = generateWranglerToml({
63113
63155
  deliveryMode: "queue-pull",
@@ -63124,6 +63166,7 @@ async function trafficRoutes(app, opts) {
63124
63166
  workerVersion: workerVersion2,
63125
63167
  expectedBotListVersion: DEFAULT_BOT_LIST.version,
63126
63168
  zoneId: zoneId2 ?? null,
63169
+ forwardPageViews: forwardPageViews2,
63127
63170
  accountId: accountId2,
63128
63171
  queueId,
63129
63172
  queueName,
@@ -63219,12 +63262,14 @@ async function trafficRoutes(app, opts) {
63219
63262
  workerScript: workerScript2,
63220
63263
  wranglerToml: wranglerToml2,
63221
63264
  workerVersion: workerVersion2,
63265
+ forwardPageViews: forwardPageViews2,
63222
63266
  instructions: [
63223
63267
  "Deploy this Worker to your Cloudflare zone:",
63224
63268
  " 1. Save worker.js and wrangler.toml; neither file contains Queue credentials",
63225
63269
  ` 2. Enable the Queue HTTP pull consumer: wrangler queues consumer http add ${queueName}`,
63226
63270
  ` 3. Attach ${workerRouteHost2}/* in the Cloudflare Dashboard with Fail open`,
63227
63271
  ` 4. Canonry pulls Queue ${queueName}; activate this source after the route is live.`,
63272
+ ...cloudflarePageViewInstructions(forwardPageViews2, CloudflareTrafficDeliveryModes["queue-pull"]),
63228
63273
  `Source id: ${sourceRow3.id}`
63229
63274
  ].join("\n")
63230
63275
  };
@@ -63253,17 +63298,19 @@ async function trafficRoutes(app, opts) {
63253
63298
  const previousAccountId = reusableCredential?.accountId ?? parsedActiveConfig?.accountId ?? null;
63254
63299
  const effectiveZoneId = zoneId ?? previousZoneId;
63255
63300
  const effectiveAccountId = accountId ?? previousAccountId;
63301
+ const forwardPageViews = parsed.data.forwardPageViews ?? parsedActiveConfig?.forwardPageViews ?? false;
63256
63302
  const bearerToken = reusableCredential?.bearerToken ?? `cnry_cfw_${crypto52.randomBytes(32).toString("hex")}`;
63257
63303
  const hmacSecret = reusableCredential?.hmacSecret ?? crypto52.randomBytes(32).toString("hex");
63258
63304
  const ingestTokenHash = sha256Hex3(bearerToken);
63259
63305
  const ingestUrl = opts.cloudflareTrafficIngestUrl.replace("{name}", encodeURIComponent(project.name));
63260
63306
  assertCloudflareIngestUrlIsPublicHttps(ingestUrl);
63261
63307
  assertCloudflareIngestUrlOutsideWorkerRoute(ingestUrl, workerRouteHost);
63262
- const workerVersion = CURRENT_CLOUDFLARE_WORKER_VERSION;
63308
+ const workerVersion = cloudflareWorkerVersionFor({ forwardPageViews });
63263
63309
  const workerScript = generateWorkerScript({
63264
63310
  deliveryMode,
63265
63311
  workerVersion,
63266
- botList: DEFAULT_BOT_LIST
63312
+ botList: DEFAULT_BOT_LIST,
63313
+ forwardPageViews
63267
63314
  });
63268
63315
  const wranglerToml = generateWranglerToml({
63269
63316
  deliveryMode,
@@ -63280,7 +63327,8 @@ async function trafficRoutes(app, opts) {
63280
63327
  workerVersion,
63281
63328
  expectedBotListVersion: DEFAULT_BOT_LIST.version,
63282
63329
  zoneId: effectiveZoneId,
63283
- accountId: effectiveAccountId
63330
+ accountId: effectiveAccountId,
63331
+ forwardPageViews
63284
63332
  };
63285
63333
  const fallbackName = displayName ?? activeSource?.displayName ?? `Cloudflare \xB7 ${effectiveZoneId ?? sourceId.slice(0, 8)}`;
63286
63334
  credentialStore.upsertConnection({
@@ -63383,6 +63431,7 @@ async function trafficRoutes(app, opts) {
63383
63431
  ` 5. In the Cloudflare Dashboard route form, select \`${workerRouteHost}/*\` and this Worker`,
63384
63432
  " 6. Set Request limit failure mode to Fail open, then save the route; Wrangler cannot set this toggle",
63385
63433
  " 7. Keep the Canonry ingest hostname outside this Worker route to avoid recursion",
63434
+ ...cloudflarePageViewInstructions(forwardPageViews, CloudflareTrafficDeliveryModes["direct-push"]),
63386
63435
  "",
63387
63436
  `Source id: ${sourceRow2.id}`,
63388
63437
  "After deploy, check `canonry doctor --project " + project.name + "` to confirm events are arriving."
@@ -63394,6 +63443,7 @@ async function trafficRoutes(app, opts) {
63394
63443
  workerScript,
63395
63444
  wranglerToml,
63396
63445
  workerVersion,
63446
+ forwardPageViews,
63397
63447
  instructions
63398
63448
  };
63399
63449
  }));
@@ -68996,7 +69046,7 @@ var workerVersionCheck = {
68996
69046
  };
68997
69047
  }
68998
69048
  const measured = sources.map((source) => {
68999
- const expectedVersion = CURRENT_CLOUDFLARE_WORKER_VERSION;
69049
+ const expectedVersion = cloudflareWorkerVersionFor({ forwardPageViews: source.configJson.forwardPageViews === true });
69000
69050
  const observedVersion = source.lastWorkerVersion;
69001
69051
  const state = observedVersion === null ? "waiting-for-first-event" : observedVersion === expectedVersion ? "current" : "stale";
69002
69052
  return {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  USAGE_TELEMETRY_HEADERS,
3
3
  redactLogString
4
- } from "./chunk-HUO3YPKB.js";
4
+ } from "./chunk-JDL4QAPT.js";
5
5
 
6
6
  // ../api-routes/src/request-context.ts
7
7
  import { AsyncLocalStorage } from "async_hooks";
@@ -5,7 +5,7 @@ import {
5
5
  AppError,
6
6
  parseWindowIn,
7
7
  resolveDateRange
8
- } from "./chunk-HUO3YPKB.js";
8
+ } from "./chunk-JDL4QAPT.js";
9
9
 
10
10
  // src/cli-access.ts
11
11
  var CLI_ACCESS_BY_ID = Object.freeze({
@@ -7,27 +7,27 @@ import {
7
7
  reparseStoredResult4,
8
8
  reparseStoredResult5,
9
9
  resolveStoredApiResponse
10
- } from "./chunk-JLDTGMVQ.js";
10
+ } from "./chunk-DUYENNUI.js";
11
11
  import {
12
12
  loadConfig
13
- } from "./chunk-FA7RDZ43.js";
13
+ } from "./chunk-QEG7BSLH.js";
14
14
  import {
15
15
  isMachineFormat
16
16
  } from "./chunk-HGMYEDAQ.js";
17
17
  import {
18
18
  determineCitationState
19
- } from "./chunk-VRI3UDRA.js";
19
+ } from "./chunk-UHE4RLFW.js";
20
20
  import {
21
21
  backfillProjectAnswerMentions,
22
22
  competitorIdentityColumns,
23
23
  createRunCompetitorResolver,
24
24
  readMarketCompetitorNames,
25
25
  refreshSnapshotMentionIdentity
26
- } from "./chunk-WSFCQQ7F.js";
26
+ } from "./chunk-4IV4FO3O.js";
27
27
  import {
28
28
  classifyAiUserFetch,
29
29
  classifyCrawler
30
- } from "./chunk-TJ4UAO7R.js";
30
+ } from "./chunk-O7KIDW4H.js";
31
31
  import {
32
32
  aiUserFetchEventsHourly,
33
33
  auditLog,
@@ -42,7 +42,7 @@ import {
42
42
  querySnapshots,
43
43
  rawEventSamples,
44
44
  runs
45
- } from "./chunk-QF5C3JXL.js";
45
+ } from "./chunk-3JV3PWNA.js";
46
46
  import {
47
47
  ProviderNames,
48
48
  RetrievalContracts,
@@ -59,7 +59,7 @@ import {
59
59
  extractRecommendedCompetitors,
60
60
  normalizeUrlPath,
61
61
  openRouterRouteModel
62
- } from "./chunk-HUO3YPKB.js";
62
+ } from "./chunk-JDL4QAPT.js";
63
63
 
64
64
  // src/commands/backfill.ts
65
65
  import { setImmediate as yieldToEventLoop } from "timers/promises";
@@ -437,7 +437,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
437
437
  }
438
438
  }
439
439
  async function backfillInsightsCommand(project, opts) {
440
- const { IntelligenceService } = await import("./intelligence-service-NFBPBKI7.js");
440
+ const { IntelligenceService } = await import("./intelligence-service-S5DI74LD.js");
441
441
  const config = loadConfig();
442
442
  const db = createClient(config.database);
443
443
  migrate(db);
@@ -2,11 +2,11 @@ import {
2
2
  dedupeGscSitemapUrls,
3
3
  resolveDiscoveredGscSitemapUrls,
4
4
  submitGscSitemapBatches
5
- } from "./chunk-LJRXJHWJ.js";
5
+ } from "./chunk-HGBIJIVM.js";
6
6
  import {
7
7
  measurementDraftOperationSchema,
8
8
  runMeasurementDraftAction
9
- } from "./chunk-EED2QEE7.js";
9
+ } from "./chunk-D7ZU5LMK.js";
10
10
  import {
11
11
  CliError
12
12
  } from "./chunk-HGMYEDAQ.js";
@@ -173,7 +173,7 @@ import {
173
173
  trafficSeriesGranularitySchema,
174
174
  visibilityCompareSelectionSchema,
175
175
  visibilityReportRequestSchema
176
- } from "./chunk-HUO3YPKB.js";
176
+ } from "./chunk-JDL4QAPT.js";
177
177
 
178
178
  // src/mcp/tool-registry.ts
179
179
  import { z as z2 } from "zod";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registeredProviderNames
3
- } from "./chunk-KCO3PGDZ.js";
3
+ } from "./chunk-QCSNNKFI.js";
4
4
  import {
5
5
  configExists,
6
6
  loadConfigRaw
7
- } from "./chunk-FA7RDZ43.js";
7
+ } from "./chunk-QEG7BSLH.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-CLICUC3F.js");
31
+ const { createClient, projects, queries: queriesTable } = await import("./src-ZAAE3NIM.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-LESJD7GM.js");
50
+ const { serveCommand } = await import("./serve-RXLQEALQ.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -23,7 +23,7 @@ import {
23
23
  measurementDraftUpsertGroupRequestSchema,
24
24
  measurementDraftUpsertMarketRequestSchema,
25
25
  measurementDraftUpsertTargetRequestSchema
26
- } from "./chunk-HUO3YPKB.js";
26
+ } from "./chunk-JDL4QAPT.js";
27
27
 
28
28
  // src/measurement-draft-actions.ts
29
29
  import { z } from "zod";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseJsonColumn
3
- } from "./chunk-QF5C3JXL.js";
3
+ } from "./chunk-3JV3PWNA.js";
4
4
  import {
5
5
  AI_ENGINE_DOMAINS,
6
6
  AI_ENGINE_SELF_DOMAINS,
@@ -26,7 +26,7 @@ import {
26
26
  retryAfterDelayMs,
27
27
  usageCount,
28
28
  withRetry
29
- } from "./chunk-HUO3YPKB.js";
29
+ } from "./chunk-JDL4QAPT.js";
30
30
 
31
31
  // ../provider-openai/src/normalize.ts
32
32
  import OpenAI from "openai";
@@ -28,7 +28,7 @@ import {
28
28
  unknownUsageObservation,
29
29
  usdToMicros,
30
30
  withRetry
31
- } from "./chunk-HUO3YPKB.js";
31
+ } from "./chunk-JDL4QAPT.js";
32
32
 
33
33
  // ../provider-answer-services/src/core/http.ts
34
34
  var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  answerServiceAdapters,
3
3
  answerServiceDescriptors
4
- } from "./chunk-PZUMERGZ.js";
4
+ } from "./chunk-FCPIOH6P.js";
5
5
  import {
6
6
  AeroLlmUsageFeatures,
7
7
  aeroTurnStatus,
@@ -27,14 +27,14 @@ import {
27
27
  resolveConfiguredAgentProvider,
28
28
  resolveSessionProviderAndModel,
29
29
  setAeroSystemPrompt
30
- } from "./chunk-OTQFHUIH.js";
30
+ } from "./chunk-L7WQTD3D.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-PDS77GLS.js";
37
+ } from "./chunk-OA6N3BI7.js";
38
38
  import {
39
39
  getGoogleAuthConfig,
40
40
  getGoogleConnection,
@@ -53,7 +53,7 @@ import {
53
53
  removeCloudflareTrafficConnection,
54
54
  removeCloudflareTrafficConnectionBySourceId,
55
55
  upsertCloudflareTrafficConnection
56
- } from "./chunk-WUVX5HBI.js";
56
+ } from "./chunk-NQTUPEBQ.js";
57
57
  import {
58
58
  claudeAdapter,
59
59
  embedQueries,
@@ -64,7 +64,7 @@ import {
64
64
  openaiAdapter,
65
65
  openrouterAdapter,
66
66
  perplexityAdapter
67
- } from "./chunk-JLDTGMVQ.js";
67
+ } from "./chunk-DUYENNUI.js";
68
68
  import {
69
69
  classifyUsageSurface,
70
70
  createApiUsageTelemetry,
@@ -76,7 +76,7 @@ import {
76
76
  startOutcomeTimer,
77
77
  trackFeatureCompleted,
78
78
  trackInstallState
79
- } from "./chunk-TKX4G4NV.js";
79
+ } from "./chunk-XJF7LMGU.js";
80
80
  import {
81
81
  isLoopbackBindHost
82
82
  } from "./chunk-TSENU4GG.js";
@@ -84,7 +84,7 @@ import {
84
84
  isApiProviderRegistrable,
85
85
  isCdpProviderRegistrable,
86
86
  registeredProviderNames
87
- } from "./chunk-KCO3PGDZ.js";
87
+ } from "./chunk-QCSNNKFI.js";
88
88
  import {
89
89
  checkLatestVersionForServer,
90
90
  getOrCreateAnonymousId,
@@ -95,17 +95,17 @@ import {
95
95
  recordDashboardEvent,
96
96
  setTelemetryPreference,
97
97
  trackEvent
98
- } from "./chunk-EJZ4TQQR.js";
98
+ } from "./chunk-G7VJEPDZ.js";
99
99
  import {
100
100
  createCanonryMcpServer
101
- } from "./chunk-VWO4WRQM.js";
101
+ } from "./chunk-Z7WG6F7Q.js";
102
102
  import {
103
103
  CANONRY_MCP_TIERS,
104
104
  CANONRY_MCP_TOOLKIT_NAMES
105
105
  } from "./chunk-NCIPNVD6.js";
106
106
  import {
107
107
  ApiClient
108
- } from "./chunk-PTKFLEVN.js";
108
+ } from "./chunk-SJNF5GN2.js";
109
109
  import {
110
110
  AGENT_PROVIDERS,
111
111
  adapterSupportsBatch,
@@ -136,21 +136,21 @@ import {
136
136
  saveConfigPatch,
137
137
  sentimentInstallReadiness,
138
138
  updateSharedProviderExecutionGate
139
- } from "./chunk-FA7RDZ43.js";
139
+ } from "./chunk-QEG7BSLH.js";
140
140
  import {
141
141
  getBundledSkillSnapshots
142
- } from "./chunk-SXDAIG5W.js";
142
+ } from "./chunk-IDPAYZHR.js";
143
143
  import {
144
144
  computeFactorAverages,
145
145
  deleteSiteCrawlGraphLayout,
146
146
  persistSiteCrawlGraphLayout,
147
147
  prepareSiteCrawlGraphLayout,
148
148
  recordedSharePct
149
- } from "./chunk-X3UXPAT7.js";
149
+ } from "./chunk-ZK5WIVGA.js";
150
150
  import {
151
151
  CanonryMcpToolNames,
152
152
  canonryMcpTools
153
- } from "./chunk-LWKHCQ46.js";
153
+ } from "./chunk-7XSGAPN5.js";
154
154
  import {
155
155
  PACKAGE_VERSION
156
156
  } from "./chunk-AOJU5LKX.js";
@@ -162,11 +162,11 @@ import {
162
162
  addLogListener,
163
163
  createFastifyLogger,
164
164
  createLogger
165
- } from "./chunk-B4N5L6NF.js";
165
+ } from "./chunk-RLXNZRHD.js";
166
166
  import {
167
167
  computeCitedCompetitorDomains,
168
168
  determineCitationState
169
- } from "./chunk-VRI3UDRA.js";
169
+ } from "./chunk-UHE4RLFW.js";
170
170
  import {
171
171
  BingApiError,
172
172
  CC_CACHE_DIR,
@@ -285,7 +285,7 @@ import {
285
285
  webhookResponseReason,
286
286
  webhookTargetRefusalReason,
287
287
  writeAuditLog
288
- } from "./chunk-WSFCQQ7F.js";
288
+ } from "./chunk-4IV4FO3O.js";
289
289
  import {
290
290
  OperationalLogStore,
291
291
  SentimentIdempotencyConflict,
@@ -371,7 +371,7 @@ import {
371
371
  siteLivenessState,
372
372
  trafficSources,
373
373
  usageCounters
374
- } from "./chunk-QF5C3JXL.js";
374
+ } from "./chunk-3JV3PWNA.js";
375
375
  import {
376
376
  AGENT_MEMORY_VALUE_MAX_BYTES,
377
377
  AI_ENGINE_DOMAINS,
@@ -616,7 +616,7 @@ import {
616
616
  winnabilityClassLabel,
617
617
  withRetry,
618
618
  withSkippedProviders
619
- } from "./chunk-HUO3YPKB.js";
619
+ } from "./chunk-JDL4QAPT.js";
620
620
 
621
621
  // src/google-marketing-runtime.ts
622
622
  import crypto2 from "crypto";
@@ -5657,7 +5657,7 @@ function nonBlank(value) {
5657
5657
  return trimmed ? trimmed : void 0;
5658
5658
  }
5659
5659
  function resolveBuildCommit(env = process.env) {
5660
- const embedded = true ? "61d7761de85dad0e5f3530c85c56b9437ce3f5c4" : void 0;
5660
+ const embedded = true ? "f07ffb8d5bf311a4b65733f81f887459cf1aa259" : void 0;
5661
5661
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5662
5662
  }
5663
5663
  function resolveInstanceIdentity(env = process.env) {
@@ -5,7 +5,7 @@ import {
5
5
  loadConfig,
6
6
  loadConfigRaw,
7
7
  saveConfigPatch
8
- } from "./chunk-FA7RDZ43.js";
8
+ } from "./chunk-QEG7BSLH.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-HUO3YPKB.js";
21
+ } from "./chunk-JDL4QAPT.js";
22
22
 
23
23
  // src/runtime-context.ts
24
24
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -3,7 +3,7 @@ import {
3
3
  resolveCliAccess,
4
4
  resolveCliAccessForInvocation,
5
5
  windowOptions
6
- } from "./chunk-Y54KA37X.js";
6
+ } from "./chunk-7HZ7KRHT.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-HUO3YPKB.js";
17
+ } from "./chunk-JDL4QAPT.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-ORQPYKHI.js");
114
+ const { printCliCatalog: printCliCatalog2 } = await import("./cli-catalog-DJPRREDK.js");
115
115
  const group2 = argsWithoutHelp.find((arg) => !arg.startsWith("--"));
116
116
  printCliCatalog2(specs, fallbackFormat, group2, accessValue);
117
117
  return true;
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-HGMYEDAQ.js";
5
5
  import {
6
6
  describeError
7
- } from "./chunk-HUO3YPKB.js";
7
+ } from "./chunk-JDL4QAPT.js";
8
8
 
9
9
  // src/gsc-sitemap-submission.ts
10
10
  function dedupeGscSitemapUrls(urls) {
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-PTKFLEVN.js";
3
+ } from "./chunk-SJNF5GN2.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-EED2QEE7.js";
10
+ } from "./chunk-D7ZU5LMK.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-HUO3YPKB.js";
40
+ } from "./chunk-JDL4QAPT.js";
41
41
 
42
42
  // src/commands/measurement-plan.ts
43
43
  import crypto from "crypto";
@@ -2,18 +2,18 @@ import {
2
2
  configExists,
3
3
  loadConfigRaw,
4
4
  saveConfigPatch
5
- } from "./chunk-FA7RDZ43.js";
5
+ } from "./chunk-QEG7BSLH.js";
6
6
  import {
7
7
  BUNDLED_SKILL_NAMES,
8
8
  installSkills
9
- } from "./chunk-SXDAIG5W.js";
9
+ } from "./chunk-IDPAYZHR.js";
10
10
  import {
11
11
  PACKAGE_VERSION
12
12
  } from "./chunk-AOJU5LKX.js";
13
13
  import {
14
14
  SKILL_MANIFEST_FILENAME,
15
15
  SkillsClients
16
- } from "./chunk-HUO3YPKB.js";
16
+ } from "./chunk-JDL4QAPT.js";
17
17
 
18
18
  // src/skills-autosync.ts
19
19
  import fs from "fs";
@@ -15,7 +15,7 @@ import {
15
15
  formatCanonryPluginUpdateHint,
16
16
  formatCanonryPluginVersionMismatch,
17
17
  skillsClientSchema
18
- } from "./chunk-HUO3YPKB.js";
18
+ } from "./chunk-JDL4QAPT.js";
19
19
 
20
20
  // src/commands/skills.ts
21
21
  import crypto from "crypto";