@canonry/canonry 7.80.0 → 7.82.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 (132) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +16 -0
  2. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +13 -0
  3. package/assets/assets/{AgentSetupPage-Cr2ZU_4s.js → AgentSetupPage-CcjQeUvK.js} +1 -1
  4. package/assets/assets/{AuditHistoryPanel-Bb5wq-Bk.js → AuditHistoryPanel-DgTvt2hQ.js} +1 -1
  5. package/assets/assets/{BacklinksPage-i1cfxTDj.js → BacklinksPage-DFQhtk4d.js} +1 -1
  6. package/assets/assets/{HistoryPage-C2NRdNrn.js → HistoryPage-CkkWqQol.js} +1 -1
  7. package/assets/assets/{MeasurementPropertyPage-ighxjOiq.js → MeasurementPropertyPage-Cwnda2BA.js} +1 -1
  8. package/assets/assets/{ProjectPage-DnAXCPle.js → ProjectPage-C39ua8CG.js} +1 -1
  9. package/assets/assets/{RunsPage-Ds5K3fOQ.js → RunsPage-B4tMl-_9.js} +1 -1
  10. package/assets/assets/{SettingsPage-B8Jed-xH.js → SettingsPage-DmDdf02o.js} +1 -1
  11. package/assets/assets/{SiteHealthSection-cjNQasWj.js → SiteHealthSection-CfQePJ7s.js} +2 -2
  12. package/assets/assets/ToneBadge-bXf5LaSI.js +60 -0
  13. package/assets/assets/{TrafficPage-BUid1rkh.js → TrafficPage-C9y8xEr6.js} +1 -1
  14. package/assets/assets/{TrafficSourceDetailPage-D3KHgRvF.js → TrafficSourceDetailPage-Dklvlek4.js} +1 -1
  15. package/assets/assets/{account-context-B50QqDEA.js → account-context-BjM5ZlYl.js} +1 -1
  16. package/assets/assets/{card-BE2fqwVq.js → card-CDFncx20.js} +1 -1
  17. package/assets/assets/{extract-error-message-xuN_xeRJ.js → extract-error-message-s3FKmMjt.js} +1 -1
  18. package/assets/assets/{format-helpers-CiC6gALY.js → format-helpers-CYQ-LjnQ.js} +1 -1
  19. package/assets/assets/{index-BhoSVTom.js → index-qWvnlyfA.js} +4 -4
  20. package/assets/assets/{query-client-C5GhDMY7.js → query-client-C_dAEVvf.js} +1 -1
  21. package/assets/assets/{react-query-CmHyfYFq.js → react-query-BKozxbv1.js} +1 -1
  22. package/assets/assets/{react-sigma_core.esm.min-SbOH7c6K.js → react-sigma_core.esm.min-J2l6CcJl.js} +1 -1
  23. package/assets/assets/{service-B2i_ZzWP.js → service-BhAtQFOI.js} +1 -1
  24. package/assets/index.html +7 -7
  25. package/dist/{ads-MNMND5VH.js → ads-UDOONRKQ.js} +3 -3
  26. package/dist/{agent-4KNDL3D3.js → agent-JTEGEX6X.js} +7 -7
  27. package/dist/{agent-ask-32RTOL2M.js → agent-ask-PUV4EVGS.js} +3 -3
  28. package/dist/{agent-conversations-BXVWHUZC.js → agent-conversations-TWTSQHBR.js} +3 -3
  29. package/dist/{agent-memory-7R7UVFS5.js → agent-memory-ZJEXAUJB.js} +3 -3
  30. package/dist/{agent-providers-QGVLCCH4.js → agent-providers-2RQZSGMP.js} +3 -3
  31. package/dist/{agent-transcript-7Y6BJCIT.js → agent-transcript-YYS3XBES.js} +3 -3
  32. package/dist/{analytics-YOGEHW6J.js → analytics-RLC6PRUZ.js} +3 -3
  33. package/dist/{apply-TB3MF3PH.js → apply-Z5SSCEJ2.js} +3 -3
  34. package/dist/{backfill-BXEYMV3Y.js → backfill-6K2UMALK.js} +9 -9
  35. package/dist/{backlinks-6GTL324T.js → backlinks-LDI2VTPT.js} +3 -3
  36. package/dist/{bing-OMQACSDY.js → bing-SSNMNZEF.js} +3 -3
  37. package/dist/{bootstrap-ITVA7X45.js → bootstrap-ISRV5I52.js} +10 -10
  38. package/dist/{cdp-3WBLAWOL.js → cdp-WU7QCPQ3.js} +7 -7
  39. package/dist/{chunk-7HB6QLX4.js → chunk-2FIDPBWE.js} +1 -1
  40. package/dist/{chunk-HRFPGXON.js → chunk-2GJLKCXL.js} +61 -1
  41. package/dist/{chunk-ENUSVOQ5.js → chunk-2PDDTRTG.js} +4 -4
  42. package/dist/{chunk-AI44ZCMK.js → chunk-462CIYLY.js} +1 -1
  43. package/dist/{chunk-BLZCNL3B.js → chunk-4IYFVC22.js} +3 -3
  44. package/dist/{chunk-6ACWXQNZ.js → chunk-5K3S74ZX.js} +2 -1
  45. package/dist/{chunk-MIQMUSE4.js → chunk-5NDUJLUL.js} +6 -6
  46. package/dist/{chunk-3QJWOF2B.js → chunk-7ZJHKLTK.js} +1 -1
  47. package/dist/{chunk-3MGM3U6V.js → chunk-AAMOBJXJ.js} +1 -1
  48. package/dist/{chunk-OIRHCT63.js → chunk-DWFVH3E2.js} +2 -2
  49. package/dist/{chunk-72YPSNCG.js → chunk-EIDOBJF2.js} +2 -2
  50. package/dist/{chunk-45RGH7XI.js → chunk-F4FDJI5O.js} +3 -3
  51. package/dist/{chunk-7S6SQFFT.js → chunk-GKHM5OT6.js} +2 -2
  52. package/dist/{chunk-MUYTDD35.js → chunk-HDVJNYYE.js} +18 -3
  53. package/dist/{chunk-DKONZ36U.js → chunk-J2DA4LUR.js} +402 -270
  54. package/dist/{chunk-JJO5XNS6.js → chunk-J7EYQFMJ.js} +4 -4
  55. package/dist/{chunk-WSWHLKKJ.js → chunk-JDEHNF7K.js} +1 -1
  56. package/dist/{chunk-FCYGY4FT.js → chunk-JMUSNZJR.js} +1 -1
  57. package/dist/{chunk-KF7I7FBI.js → chunk-JP4RTZGE.js} +2 -2
  58. package/dist/{chunk-2EWZ3DJ4.js → chunk-LRFCNERP.js} +3 -3
  59. package/dist/{chunk-B36XUBYK.js → chunk-M7WS2BL3.js} +102 -57
  60. package/dist/{chunk-PLLDJUG2.js → chunk-NNUZ37NJ.js} +4 -4
  61. package/dist/{chunk-R3US2RG6.js → chunk-NPMJFPBM.js} +1501 -1353
  62. package/dist/{chunk-JERATA5R.js → chunk-OH42CAWP.js} +1 -1
  63. package/dist/{chunk-R26CF4WT.js → chunk-QHEKMJL4.js} +2 -2
  64. package/dist/{chunk-CJ4JDM5W.js → chunk-RMZCQUKN.js} +347 -335
  65. package/dist/{chunk-PM2DB3HE.js → chunk-S6IC7ZK2.js} +38 -1
  66. package/dist/{chunk-T2TIQP5O.js → chunk-SIRWPXGJ.js} +8 -8
  67. package/dist/{chunk-KZB6HLFT.js → chunk-SVF4P6DB.js} +1 -1
  68. package/dist/{chunk-RPTOVEZT.js → chunk-T76RQIGK.js} +3 -3
  69. package/dist/{chunk-TZRYVW75.js → chunk-VVOCZTNC.js} +2 -2
  70. package/dist/{chunk-4GEEYY3N.js → chunk-VWYB4RA4.js} +2 -2
  71. package/dist/{chunk-ZHFE6J3A.js → chunk-WB6VIQ7L.js} +1 -1
  72. package/dist/{chunk-QAVJ6LHN.js → chunk-ZR3RYJF3.js} +5 -5
  73. package/dist/{chunk-7OAXEMOF.js → chunk-ZX7XDVPC.js} +10 -2
  74. package/dist/{citations-PGG7JEIN.js → citations-X5LS7SZX.js} +3 -3
  75. package/dist/{cli-catalog-KC6JYHSW.js → cli-catalog-S4RLOOCK.js} +3 -3
  76. package/dist/{cli-commands-XFFBO46N.js → cli-commands-BGNM6H6P.js} +7 -7
  77. package/dist/cli.js +13 -13
  78. package/dist/{competitor-B3CZOKZU.js → competitor-O5YXN5SD.js} +3 -3
  79. package/dist/{content-Z4XJMZB4.js → content-C6SO5LNZ.js} +3 -3
  80. package/dist/{dashboard-L5XCPIFW.js → dashboard-3P6FFYCW.js} +6 -6
  81. package/dist/{demo-HWM3OWEO.js → demo-OJ6C4DU3.js} +1 -1
  82. package/dist/{demo-server-5DE5PAEC.js → demo-server-GJXDVREB.js} +12 -12
  83. package/dist/{discover-OT3K7KQK.js → discover-Z355GK36.js} +3 -3
  84. package/dist/{discover-eval-DN4J4KD5.js → discover-eval-6OVS55LV.js} +3 -3
  85. package/dist/{doctor-UDF6OCSR.js → doctor-E52VMIEP.js} +3 -3
  86. package/dist/{evidence-Z364UFOD.js → evidence-ITVU3HYF.js} +3 -3
  87. package/dist/{export-cmd-K27XN4G5.js → export-cmd-S2UD3ALT.js} +3 -3
  88. package/dist/{ga-Q2CELDLG.js → ga-T3UEGAZC.js} +3 -3
  89. package/dist/{gbp-V2APGSIQ.js → gbp-3G45OTYX.js} +3 -3
  90. package/dist/{google-WFHYA3QT.js → google-YZS4HLN3.js} +4 -4
  91. package/dist/{google-marketing-5ROIKBC7.js → google-marketing-LIV6O63R.js} +1 -1
  92. package/dist/{health-cmd-RGFAJ4YP.js → health-cmd-2FC73XH6.js} +3 -3
  93. package/dist/{history-RUSU66BZ.js → history-KLRMAVLG.js} +3 -3
  94. package/dist/index.d.ts +344 -83
  95. package/dist/index.js +25 -25
  96. package/dist/{init-WXKOOS25.js → init-CTP7OZTR.js} +12 -12
  97. package/dist/{insights-4IFQLPS3.js → insights-KTGRGFAN.js} +3 -3
  98. package/dist/intelligence-service-YX72V6NG.js +16 -0
  99. package/dist/{journeys-PTC2QY57.js → journeys-PF2OO5W2.js} +3 -3
  100. package/dist/{keys-JASXI2SR.js → keys-7NTJ7TFJ.js} +3 -3
  101. package/dist/{keyword-SK2HJXCJ.js → keyword-C37ZTBOS.js} +3 -3
  102. package/dist/{logs-AS5I5V2A.js → logs-GU223TLX.js} +3 -3
  103. package/dist/{mcp-BQSOYHEX.js → mcp-2DZFAHOW.js} +4 -4
  104. package/dist/mcp.js +9 -9
  105. package/dist/{measurement-plan-LZYYH3OD.js → measurement-plan-ZSZUAW4Y.js} +5 -5
  106. package/dist/{notify-JM6252F6.js → notify-GYSA5V67.js} +5 -4
  107. package/dist/{organic-evidence-L3Y6RZIH.js → organic-evidence-2NLMSKHX.js} +3 -3
  108. package/dist/{overview-VIF2GXYW.js → overview-NL3B5XME.js} +4 -4
  109. package/dist/{project-FQEPFPRD.js → project-3THJAPRN.js} +3 -3
  110. package/dist/{query-VKRESS6B.js → query-JU5UHTGT.js} +3 -3
  111. package/dist/{research-6A6QWKN3.js → research-WLS77NOR.js} +3 -3
  112. package/dist/{results-export-VUB2ZD5B.js → results-export-RQKUM5OA.js} +3 -3
  113. package/dist/{run-PG5GYZT7.js → run-H6BA7COC.js} +4 -4
  114. package/dist/{schedule-EBGOLCQZ.js → schedule-ISTF4OHX.js} +3 -3
  115. package/dist/{search-NS4XPZRL.js → search-HIYAHDZR.js} +3 -3
  116. package/dist/{serve-7JITP7HH.js → serve-5WPYWTOF.js} +26 -26
  117. package/dist/{session-PCUTTGTF.js → session-4B5VWFCF.js} +13 -13
  118. package/dist/{settings-LNCAYCDF.js → settings-ZI4UQXJO.js} +3 -3
  119. package/dist/{skills-DWXA55QA.js → skills-LN34DUVA.js} +2 -2
  120. package/dist/{snapshot-LX7OR7SO.js → snapshot-BDPWMMDS.js} +3 -3
  121. package/dist/{src-QC2VNJWJ.js → src-UENQLEK4.js} +6 -2
  122. package/dist/{status-DQ6FNWUT.js → status-6CIRB7TO.js} +4 -4
  123. package/dist/{technical-aeo-5GU2IY6W.js → technical-aeo-L435UGJL.js} +3 -3
  124. package/dist/{telemetry-QK2GPII3.js → telemetry-VIY5GILS.js} +4 -4
  125. package/dist/{tools-LILIKI26.js → tools-LILY27JS.js} +11 -11
  126. package/dist/{traffic-77CKSYM3.js → traffic-KHGUZSP6.js} +30 -7
  127. package/dist/{users-7OJ2RGV3.js → users-KLOJMJSB.js} +3 -3
  128. package/dist/{visibility-stats-VR25XMMY.js → visibility-stats-OG2HEGFX.js} +3 -3
  129. package/dist/{wordpress-JYXTF4PL.js → wordpress-NPVZAUSN.js} +3 -3
  130. package/package.json +1 -1
  131. package/assets/assets/ToneBadge-CUe-WrzN.js +0 -60
  132. package/dist/intelligence-service-RVKSPP4X.js +0 -16
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  runWithUsageTags
3
- } from "./chunk-7OAXEMOF.js";
3
+ } from "./chunk-ZX7XDVPC.js";
4
4
  import {
5
5
  CanonryMcpToolNames,
6
6
  canonryMcpTools
7
- } from "./chunk-MUYTDD35.js";
7
+ } from "./chunk-HDVJNYYE.js";
8
8
  import {
9
9
  CliError
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-R3US2RG6.js";
13
+ } from "./chunk-NPMJFPBM.js";
14
14
  import {
15
15
  DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
16
16
  MeasurementPortfolioLists,
@@ -23,7 +23,7 @@ import {
23
23
  seoDatasetWithoutVendor,
24
24
  seoProviderSchema,
25
25
  truncateUtf16
26
- } from "./chunk-PM2DB3HE.js";
26
+ } from "./chunk-S6IC7ZK2.js";
27
27
 
28
28
  // src/agent/tools.ts
29
29
  import { Type as Type2 } from "@earendil-works/pi-ai";
@@ -28,7 +28,7 @@ import {
28
28
  unknownUsageObservation,
29
29
  usdToMicros,
30
30
  withRetry
31
- } from "./chunk-PM2DB3HE.js";
31
+ } from "./chunk-S6IC7ZK2.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
  API_PROVIDER_NAMES,
3
3
  ProviderNames
4
- } from "./chunk-PM2DB3HE.js";
4
+ } from "./chunk-S6IC7ZK2.js";
5
5
 
6
6
  // src/provider-registration.ts
7
7
  function isApiProviderRegistrable(name, entry) {
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  trackIntegrationConnection
3
- } from "./chunk-PLLDJUG2.js";
3
+ } from "./chunk-NNUZ37NJ.js";
4
4
  import {
5
5
  cliRuntimeContext
6
- } from "./chunk-4GEEYY3N.js";
6
+ } from "./chunk-VWYB4RA4.js";
7
7
 
8
8
  // src/cli-connection-telemetry.ts
9
9
  function trackCliConnection(properties) {
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-7OAXEMOF.js";
3
+ } from "./chunk-ZX7XDVPC.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-7HB6QLX4.js";
10
+ } from "./chunk-2FIDPBWE.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-PM2DB3HE.js";
40
+ } from "./chunk-S6IC7ZK2.js";
41
41
 
42
42
  // src/commands/measurement-plan.ts
43
43
  import crypto from "crypto";
@@ -8,7 +8,7 @@ import {
8
8
  classifyJourneyEntry,
9
9
  hostMatchesDomain,
10
10
  hostOf
11
- } from "./chunk-PM2DB3HE.js";
11
+ } from "./chunk-S6IC7ZK2.js";
12
12
 
13
13
  // ../integration-traffic/src/ip-ranges/amazonbot.json
14
14
  var amazonbot_default = {
@@ -14829,8 +14829,84 @@ function sessionizeJourneyRequests(requests, state, options) {
14829
14829
  return { visits: [...visits.values()], events, visitors, dropped, capped };
14830
14830
  }
14831
14831
 
14832
+ // ../integration-traffic/src/unlisted-agents.ts
14833
+ var UNLISTED_AGENT_SKIPPED_EXTENSIONS = [
14834
+ "avif",
14835
+ "bmp",
14836
+ "css",
14837
+ "gif",
14838
+ "ico",
14839
+ "jpeg",
14840
+ "jpg",
14841
+ "js",
14842
+ "map",
14843
+ "mjs",
14844
+ "mp3",
14845
+ "mp4",
14846
+ "otf",
14847
+ "png",
14848
+ "svg",
14849
+ "ttf",
14850
+ "webm",
14851
+ "webmanifest",
14852
+ "webp",
14853
+ "woff",
14854
+ "woff2",
14855
+ "zip"
14856
+ ];
14857
+ var GENERIC_HTTP_CLIENTS = [
14858
+ "curl",
14859
+ "wget",
14860
+ "python",
14861
+ "python-requests",
14862
+ "python-urllib",
14863
+ "python-httpx",
14864
+ "aiohttp",
14865
+ "httpx",
14866
+ "go-http-client",
14867
+ "okhttp",
14868
+ "java",
14869
+ "apache-httpclient",
14870
+ "axios",
14871
+ "node",
14872
+ "node-fetch",
14873
+ "undici",
14874
+ "got",
14875
+ "libwww-perl",
14876
+ "guzzlehttp",
14877
+ "ruby",
14878
+ "faraday",
14879
+ "php",
14880
+ "wordpress",
14881
+ "dalvik",
14882
+ "postmanruntime",
14883
+ "insomnia"
14884
+ ];
14885
+ var BROWSER_SHAPED_AGENT_MARKERS = ["compatible;", "fetch", "agent", "headless", "+http"];
14886
+ var PRODUCT_NAME_END = /[/\s;(]/;
14887
+ var SKIPPED_PATH = new RegExp(`\\.(?:${UNLISTED_AGENT_SKIPPED_EXTENSIONS.join("|")})$`, "i");
14888
+ var COMPATIBLE_NAME = /compatible;\s*([a-z0-9][a-z0-9._-]*)/;
14889
+ var BOT_LIKE_NAME = /([a-z0-9][a-z0-9._-]*(?:bot|crawler|spider|fetcher|agent|-user))\//;
14890
+ var HEADLESS_NAME = /\b(headless[a-z]*)\//;
14891
+ var BROWSER_COMPATIBLE_NAMES = ["msie"];
14892
+ var MAX_AGENT_NAME_LENGTH = 64;
14893
+ function unrecognizedAgentName(request) {
14894
+ const method = (request.method ?? "GET").toUpperCase();
14895
+ if (method !== "GET" && method !== "HEAD") return null;
14896
+ if (request.path && SKIPPED_PATH.test(request.path.split("?")[0] ?? "")) return null;
14897
+ const ua = (request.userAgent ?? "").trim().toLowerCase();
14898
+ if (!ua) return null;
14899
+ const product = ua.split(PRODUCT_NAME_END)[0] ?? "";
14900
+ if (!product || GENERIC_HTTP_CLIENTS.includes(product)) return null;
14901
+ if (product !== "mozilla") return product.slice(0, MAX_AGENT_NAME_LENGTH);
14902
+ const name = COMPATIBLE_NAME.exec(ua)?.[1] ?? BOT_LIKE_NAME.exec(ua)?.[1] ?? HEADLESS_NAME.exec(ua)?.[1];
14903
+ if (!name || BROWSER_COMPATIBLE_NAMES.includes(name)) return null;
14904
+ return name.slice(0, MAX_AGENT_NAME_LENGTH);
14905
+ }
14906
+
14832
14907
  // ../integration-traffic/src/rollup.ts
14833
14908
  var DEFAULT_SAMPLE_LIMIT = 25;
14909
+ var MAX_UNRECOGNIZED_AGENT_NAMES = 200;
14834
14910
  var DEFAULT_AI_REFERRAL_SESSION_WINDOW_MS = 6e4;
14835
14911
  var UUID_SEGMENT2 = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
14836
14912
  var LONG_HEX_SEGMENT2 = /^[0-9a-f]{16,}$/i;
@@ -14945,6 +15021,7 @@ function buildTrafficProbeReport(events, options = {}) {
14945
15021
  const crawlerBuckets = /* @__PURE__ */ new Map();
14946
15022
  const aiUserFetchBuckets = /* @__PURE__ */ new Map();
14947
15023
  const aiReferralBuckets = /* @__PURE__ */ new Map();
15024
+ const unrecognizedAgentBuckets = /* @__PURE__ */ new Map();
14948
15025
  const aiReferralSessions = /* @__PURE__ */ new Map();
14949
15026
  const topBots = /* @__PURE__ */ new Map();
14950
15027
  const topCrawlerPaths = /* @__PURE__ */ new Map();
@@ -15052,7 +15129,21 @@ function buildTrafficProbeReport(events, options = {}) {
15052
15129
  aiReferralSessions.set(key, existing ? mergeReferralSession(existing, session) : session);
15053
15130
  }
15054
15131
  }
15055
- if (!crawler && !aiUserFetch && !aiReferral) unknownHits += 1;
15132
+ if (!crawler && !aiUserFetch && !aiReferral) {
15133
+ unknownHits += 1;
15134
+ const agentName = unrecognizedAgentName(event);
15135
+ if (agentName) {
15136
+ const key = `${tsHour} ${agentName}`;
15137
+ const existing = unrecognizedAgentBuckets.get(key);
15138
+ if (existing) {
15139
+ existing.hits += 1;
15140
+ existing.sampledUserAgent = event.userAgent ?? existing.sampledUserAgent;
15141
+ existing.sampledPath = pathNormalized;
15142
+ } else {
15143
+ unrecognizedAgentBuckets.set(key, { tsHour, agentName, hits: 1, sampledUserAgent: event.userAgent ?? "", sampledPath: pathNormalized });
15144
+ }
15145
+ }
15146
+ }
15056
15147
  samples.push({
15057
15148
  eventId: event.eventId,
15058
15149
  observedAt: event.observedAt,
@@ -15118,6 +15209,7 @@ function buildTrafficProbeReport(events, options = {}) {
15118
15209
  crawlerEventsHourly: [...crawlerBuckets.values()].sort(sortCrawlerBuckets),
15119
15210
  aiUserFetchEventsHourly: [...aiUserFetchBuckets.values()].sort(sortAiUserFetchBuckets),
15120
15211
  aiReferralEventsHourly: [...aiReferralBuckets.values()].sort(sortReferralBuckets),
15212
+ unrecognizedAgentEventsHourly: busiestUnrecognizedAgents(unrecognizedAgentBuckets),
15121
15213
  topBots: topEntries(topBots, 10),
15122
15214
  topCrawlerPaths: topEntries(topCrawlerPaths, 10),
15123
15215
  topAiUserFetchBots: topEntries(topAiUserFetchBots, 10),
@@ -15127,67 +15219,20 @@ function buildTrafficProbeReport(events, options = {}) {
15127
15219
  samples
15128
15220
  };
15129
15221
  }
15222
+ function busiestUnrecognizedAgents(buckets) {
15223
+ const hitsByName = /* @__PURE__ */ new Map();
15224
+ for (const bucket of buckets.values()) hitsByName.set(bucket.agentName, (hitsByName.get(bucket.agentName) ?? 0) + bucket.hits);
15225
+ const kept = new Set(
15226
+ [...hitsByName.entries()].sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).slice(0, MAX_UNRECOGNIZED_AGENT_NAMES).map(([name]) => name)
15227
+ );
15228
+ return [...buckets.values()].filter((bucket) => kept.has(bucket.agentName)).sort((a, b) => a.tsHour.localeCompare(b.tsHour) || a.agentName.localeCompare(b.agentName));
15229
+ }
15130
15230
  function incrementBucket(map, key, fields) {
15131
15231
  const existing = map.get(key);
15132
15232
  if (existing) existing.hits += 1;
15133
15233
  else map.set(key, { fields, hits: 1 });
15134
15234
  }
15135
15235
 
15136
- // ../integration-traffic/src/unlisted-agents.ts
15137
- var UNLISTED_AGENT_SKIPPED_EXTENSIONS = [
15138
- "avif",
15139
- "bmp",
15140
- "css",
15141
- "gif",
15142
- "ico",
15143
- "jpeg",
15144
- "jpg",
15145
- "js",
15146
- "map",
15147
- "mjs",
15148
- "mp3",
15149
- "mp4",
15150
- "otf",
15151
- "png",
15152
- "svg",
15153
- "ttf",
15154
- "webm",
15155
- "webmanifest",
15156
- "webp",
15157
- "woff",
15158
- "woff2",
15159
- "zip"
15160
- ];
15161
- var GENERIC_HTTP_CLIENTS = [
15162
- "curl",
15163
- "wget",
15164
- "python",
15165
- "python-requests",
15166
- "python-urllib",
15167
- "python-httpx",
15168
- "aiohttp",
15169
- "httpx",
15170
- "go-http-client",
15171
- "okhttp",
15172
- "java",
15173
- "apache-httpclient",
15174
- "axios",
15175
- "node",
15176
- "node-fetch",
15177
- "undici",
15178
- "got",
15179
- "libwww-perl",
15180
- "guzzlehttp",
15181
- "ruby",
15182
- "faraday",
15183
- "php",
15184
- "wordpress",
15185
- "dalvik",
15186
- "postmanruntime",
15187
- "insomnia"
15188
- ];
15189
- var BROWSER_SHAPED_AGENT_MARKERS = ["compatible;", "fetch", "agent", "headless", "+http"];
15190
-
15191
15236
  // ../integration-cloudflare-worker/src/types.ts
15192
15237
  var CLOUDFLARE_WORKER_BINDINGS = {
15193
15238
  deliveryMode: "CANONRY_DELIVERY_MODE",
@@ -2,13 +2,13 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-4GEEYY3N.js";
5
+ } from "./chunk-VWYB4RA4.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-3QJWOF2B.js";
8
+ } from "./chunk-7ZJHKLTK.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
- } from "./chunk-3MGM3U6V.js";
11
+ } from "./chunk-AAMOBJXJ.js";
12
12
  import {
13
13
  AGENT_NONE,
14
14
  OutcomeSurfaces,
@@ -19,7 +19,7 @@ import {
19
19
  integrationConnectionPropertiesSchema,
20
20
  normalizeAgentSlug,
21
21
  usageSurfaceSchema
22
- } from "./chunk-PM2DB3HE.js";
22
+ } from "./chunk-S6IC7ZK2.js";
23
23
 
24
24
  // src/outcome-telemetry.ts
25
25
  import fs from "fs";