@canonry/canonry 7.79.1 → 7.80.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.
@@ -10,7 +10,7 @@ import {
10
10
  backfillSnapshotAttributionCommand,
11
11
  backfillTrafficClassificationCommand,
12
12
  replayQueryAuditLog
13
- } from "./chunk-6OCQTAXU.js";
13
+ } from "./chunk-T2TIQP5O.js";
14
14
  import "./chunk-7S6SQFFT.js";
15
15
  import "./chunk-3QJWOF2B.js";
16
16
  import "./chunk-HGMYEDAQ.js";
@@ -18,8 +18,8 @@ import "./chunk-JERATA5R.js";
18
18
  import {
19
19
  backfillProjectAnswerMentions,
20
20
  backfillProjectAnswerMentionsInChunks
21
- } from "./chunk-KUMHO22S.js";
22
- import "./chunk-O4WBYEGV.js";
21
+ } from "./chunk-R3US2RG6.js";
22
+ import "./chunk-B36XUBYK.js";
23
23
  import "./chunk-3MGM3U6V.js";
24
24
  import "./chunk-HRFPGXON.js";
25
25
  import "./chunk-PM2DB3HE.js";
@@ -15133,6 +15133,61 @@ function incrementBucket(map, key, fields) {
15133
15133
  else map.set(key, { fields, hits: 1 });
15134
15134
  }
15135
15135
 
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
+
15136
15191
  // ../integration-cloudflare-worker/src/types.ts
15137
15192
  var CLOUDFLARE_WORKER_BINDINGS = {
15138
15193
  deliveryMode: "CANONRY_DELIVERY_MODE",
@@ -15184,7 +15239,8 @@ var DEFAULT_BOT_LIST = {
15184
15239
  uaKeywords: [
15185
15240
  ...DEFAULT_AI_CRAWLER_USER_AGENT_SUBSTRINGS,
15186
15241
  // Preserve a small forward-looking machine-traffic net. The shared
15187
- // classifier still drops unknown products after delivery.
15242
+ // classifier still drops unknown products after delivery. Agents whose
15243
+ // names carry none of these words are caught by `isUnlistedAgent`.
15188
15244
  "bot",
15189
15245
  "crawler",
15190
15246
  "spider"
@@ -15203,6 +15259,27 @@ var DEFAULT_BOT_SCORE_MAX_FORWARD = 30;
15203
15259
  var WORKER_COMPATIBILITY_DATE = "2026-05-01";
15204
15260
  var CLOUDFLARE_PAGE_VIEWS_VERSION_SUFFIX = "+page-views";
15205
15261
  var PAGE_VIEW_ASSET_EXTENSIONS = ["avif", "bmp", "css", "gif", "ico", "jpeg", "jpg", "js", "map", "mjs", "mp3", "mp4", "otf", "pdf", "png", "svg", "ttf", "txt", "webm", "webmanifest", "webp", "woff", "woff2", "xml", "zip"];
15262
+ var UNLISTED_AGENT_FILTER = `
15263
+ const UNLISTED_AGENT_SKIPPED_PATTERN = new RegExp(${JSON.stringify(`\\.(?:${UNLISTED_AGENT_SKIPPED_EXTENSIONS.join("|")})$`)}, 'i')
15264
+ const PRODUCT_NAME_END = new RegExp(${JSON.stringify("[/\\s;(]")})
15265
+ const GENERIC_HTTP_CLIENTS = ${JSON.stringify(GENERIC_HTTP_CLIENTS)}
15266
+ const BROWSER_SHAPED_AGENT_MARKERS = ${JSON.stringify(BROWSER_SHAPED_AGENT_MARKERS)}
15267
+
15268
+ function isUnlistedAgent(request) {
15269
+ const method = request.method || 'GET'
15270
+ if (method !== 'GET' && method !== 'HEAD') return false
15271
+ const ua = lower(request.headers.get('user-agent') || '').trim()
15272
+ if (!ua) return false
15273
+ const product = ua.split(PRODUCT_NAME_END)[0]
15274
+ if (GENERIC_HTTP_CLIENTS.indexOf(product) !== -1) return false
15275
+ if (product === 'mozilla' && !BROWSER_SHAPED_AGENT_MARKERS.some((marker) => ua.indexOf(marker) !== -1)) return false
15276
+ try {
15277
+ return !UNLISTED_AGENT_SKIPPED_PATTERN.test(new URL(request.url).pathname)
15278
+ } catch (_) {
15279
+ return false
15280
+ }
15281
+ }
15282
+ `;
15206
15283
  var PAGE_VIEW_FILTER = `
15207
15284
  const PAGE_VIEW_ASSET_PATTERN = new RegExp(${JSON.stringify(`\\.(?:${PAGE_VIEW_ASSET_EXTENSIONS.join("|")})$`)}, 'i')
15208
15285
 
@@ -15419,10 +15496,11 @@ function botSignals(cf) {
15419
15496
  if (typeof cf.botScore === 'number' && cf.botScore < BOT_SCORE_MAX_FORWARD) return true
15420
15497
  return false
15421
15498
  }
15422
- ${pageViewFilter}
15499
+ ${UNLISTED_AGENT_FILTER}${pageViewFilter}
15423
15500
  function shouldForward(request) {
15424
15501
  const ua = request.headers.get('user-agent') || ''
15425
15502
  if (uaMatches(ua)) return true
15503
+ if (isUnlistedAgent(request)) return true
15426
15504
  if (urlUtmMatches(request.url)) return true
15427
15505
  const referer = request.headers.get('referer') || ''
15428
15506
  if (refererMatches(referer)) return true
@@ -727,7 +727,7 @@ var DEMO_CLI_COMMANDS = [{
727
727
  options: { host: stringOption(), port: stringOption(), "trust-proxy": multiStringOption() },
728
728
  allowPositionals: false,
729
729
  run: async (input) => {
730
- const { demoCommand } = await import("./demo-COMFIESH.js");
730
+ const { demoCommand } = await import("./demo-HWM3OWEO.js");
731
731
  await demoCommand({
732
732
  host: getString(input.values, "host"),
733
733
  port: getString(input.values, "port"),
@@ -748,7 +748,7 @@ var BACKFILL_CLI_COMMANDS = [
748
748
  allowPositionals: false,
749
749
  supportsDryRun: true,
750
750
  run: async (input) => {
751
- const { backfillAnswerVisibilityCommand } = await import("./backfill-SRE52FDL.js");
751
+ const { backfillAnswerVisibilityCommand } = await import("./backfill-BXEYMV3Y.js");
752
752
  await backfillAnswerVisibilityCommand({
753
753
  project: getString(input.values, "project"),
754
754
  dryRun: input.dryRun,
@@ -765,7 +765,7 @@ var BACKFILL_CLI_COMMANDS = [
765
765
  allowPositionals: false,
766
766
  supportsDryRun: true,
767
767
  run: async (input) => {
768
- const { backfillAnswerMentionsCommand } = await import("./backfill-SRE52FDL.js");
768
+ const { backfillAnswerMentionsCommand } = await import("./backfill-BXEYMV3Y.js");
769
769
  await backfillAnswerMentionsCommand({
770
770
  project: getString(input.values, "project"),
771
771
  dryRun: input.dryRun,
@@ -783,7 +783,7 @@ var BACKFILL_CLI_COMMANDS = [
783
783
  },
784
784
  supportsDryRun: true,
785
785
  run: async (input) => {
786
- const { backfillInsightsCommand } = await import("./backfill-SRE52FDL.js");
786
+ const { backfillInsightsCommand } = await import("./backfill-BXEYMV3Y.js");
787
787
  const usage = "canonry backfill insights <project> [--from-run <id>] [--to-run <id>] [--since <date>] [--dry-run] [--format json]";
788
788
  const project3 = requireProject(input, "backfill insights", usage);
789
789
  await backfillInsightsCommand(project3, {
@@ -803,7 +803,7 @@ var BACKFILL_CLI_COMMANDS = [
803
803
  },
804
804
  allowPositionals: false,
805
805
  run: async (input) => {
806
- const { backfillNormalizedPathsCommand } = await import("./backfill-SRE52FDL.js");
806
+ const { backfillNormalizedPathsCommand } = await import("./backfill-BXEYMV3Y.js");
807
807
  await backfillNormalizedPathsCommand({
808
808
  project: getString(input.values, "project"),
809
809
  format: input.format
@@ -818,7 +818,7 @@ var BACKFILL_CLI_COMMANDS = [
818
818
  },
819
819
  allowPositionals: false,
820
820
  run: async (input) => {
821
- const { backfillAiReferralPathsCommand } = await import("./backfill-SRE52FDL.js");
821
+ const { backfillAiReferralPathsCommand } = await import("./backfill-BXEYMV3Y.js");
822
822
  await backfillAiReferralPathsCommand({
823
823
  project: getString(input.values, "project"),
824
824
  format: input.format
@@ -830,7 +830,7 @@ var BACKFILL_CLI_COMMANDS = [
830
830
  usage: "canonry backfill snapshot-attribution <project> [--dry-run] [--format json]",
831
831
  supportsDryRun: true,
832
832
  run: async (input) => {
833
- const { backfillSnapshotAttributionCommand } = await import("./backfill-SRE52FDL.js");
833
+ const { backfillSnapshotAttributionCommand } = await import("./backfill-BXEYMV3Y.js");
834
834
  const usage = "canonry backfill snapshot-attribution <project> [--dry-run] [--format json]";
835
835
  const project3 = requireProject(input, "backfill snapshot-attribution", usage);
836
836
  await backfillSnapshotAttributionCommand({
@@ -849,7 +849,7 @@ var BACKFILL_CLI_COMMANDS = [
849
849
  allowPositionals: false,
850
850
  supportsDryRun: true,
851
851
  run: async (input) => {
852
- const { backfillTrafficClassificationCommand } = await import("./backfill-SRE52FDL.js");
852
+ const { backfillTrafficClassificationCommand } = await import("./backfill-BXEYMV3Y.js");
853
853
  await backfillTrafficClassificationCommand({
854
854
  project: getString(input.values, "project"),
855
855
  dryRun: input.dryRun,
@@ -1291,7 +1291,7 @@ var DASHBOARD_CLI_COMMANDS = [
1291
1291
  usage: "canonry dashboard reset-password [--format json]",
1292
1292
  help: "Clears the dashboard password from config.yaml, so the dashboard asks for a new one after a restart.\nLocal only: it edits the config file under CANONRY_CONFIG_DIR and does not call the server.",
1293
1293
  run: async (input) => {
1294
- const { resetDashboardPassword } = await import("./dashboard-43ST35IW.js");
1294
+ const { resetDashboardPassword } = await import("./dashboard-L5XCPIFW.js");
1295
1295
  await resetDashboardPassword({ format: input.format });
1296
1296
  }
1297
1297
  },
@@ -3236,7 +3236,7 @@ var TRAFFIC_CLI_COMMANDS = [
3236
3236
  help: "Complete stored traffic totals and breakdowns for the selected window. Project-wide for Simple and Advanced portfolios; no provider calls or sync.",
3237
3237
  options: { period: stringOption() },
3238
3238
  run: async (input) => {
3239
- const { trafficAnalytics } = await import("./traffic-2JFQKVAX.js");
3239
+ const { trafficAnalytics } = await import("./traffic-77CKSYM3.js");
3240
3240
  const project3 = requireProject(input, "traffic.analytics", "canonry traffic analytics <project> [--period 7|14|30|90]");
3241
3241
  await trafficAnalytics(project3, { period: getString(input.values, "window") ?? getString(input.values, "period"), format: input.format });
3242
3242
  }
@@ -3248,7 +3248,7 @@ var TRAFFIC_CLI_COMMANDS = [
3248
3248
  help: "DB-only diagnostic. Raw headlines stay unchanged. Candidate bursts are not confirmed automation; adjusted counts are estimates. Property, Target and market attribution are unavailable. The observed GA quotient has unknown comparable coverage.",
3249
3249
  options: { "start-date": stringOption(), "end-date": stringOption(), source: stringOption(), "burst-threshold": stringOption(), "ratio-threshold": stringOption(), limit: stringOption() },
3250
3250
  run: async (input) => {
3251
- const { trafficReferralAssessment } = await import("./traffic-2JFQKVAX.js");
3251
+ const { trafficReferralAssessment } = await import("./traffic-77CKSYM3.js");
3252
3252
  const project3 = requireProject(input, "traffic.referral-assessment", "canonry traffic referral-assessment <project> --start-date YYYY-MM-DD --end-date YYYY-MM-DD");
3253
3253
  await trafficReferralAssessment(project3, {
3254
3254
  startDate: getString(input.values, "start") ?? getString(input.values, "start-date"),
@@ -3281,7 +3281,7 @@ var TRAFFIC_CLI_COMMANDS = [
3281
3281
  "confirm-fail-open": { type: "boolean" }
3282
3282
  },
3283
3283
  run: async (input) => {
3284
- const { trafficConnectCloudflare, DEFAULT_CLOUDFLARE_QUEUE_RETENTION_SECONDS } = await import("./traffic-2JFQKVAX.js");
3284
+ const { trafficConnectCloudflare, DEFAULT_CLOUDFLARE_QUEUE_RETENTION_SECONDS } = await import("./traffic-77CKSYM3.js");
3285
3285
  const forwardPageViews = getBoolean(input.values, "forward-page-views");
3286
3286
  const noForwardPageViews = getBoolean(input.values, "no-forward-page-views");
3287
3287
  if (forwardPageViews && noForwardPageViews) {
@@ -3334,7 +3334,7 @@ var TRAFFIC_CLI_COMMANDS = [
3334
3334
  "display-name": stringOption()
3335
3335
  },
3336
3336
  run: async (input) => {
3337
- const { trafficConnectCloudRun } = await import("./traffic-2JFQKVAX.js");
3337
+ const { trafficConnectCloudRun } = await import("./traffic-77CKSYM3.js");
3338
3338
  const project3 = requireProject(
3339
3339
  input,
3340
3340
  "traffic.connect.cloud-run",
@@ -3365,7 +3365,7 @@ var TRAFFIC_CLI_COMMANDS = [
3365
3365
  "display-name": stringOption()
3366
3366
  },
3367
3367
  run: async (input) => {
3368
- const { trafficConnectWordpress } = await import("./traffic-2JFQKVAX.js");
3368
+ const { trafficConnectWordpress } = await import("./traffic-77CKSYM3.js");
3369
3369
  const project3 = requireProject(
3370
3370
  input,
3371
3371
  "traffic.connect.wordpress",
@@ -3397,7 +3397,7 @@ var TRAFFIC_CLI_COMMANDS = [
3397
3397
  "display-name": stringOption()
3398
3398
  },
3399
3399
  run: async (input) => {
3400
- const { trafficConnectVercel } = await import("./traffic-2JFQKVAX.js");
3400
+ const { trafficConnectVercel } = await import("./traffic-77CKSYM3.js");
3401
3401
  const project3 = requireProject(
3402
3402
  input,
3403
3403
  "traffic.connect.vercel",
@@ -3436,7 +3436,7 @@ var TRAFFIC_CLI_COMMANDS = [
3436
3436
  source: stringOption()
3437
3437
  },
3438
3438
  run: async (input) => {
3439
- const { trafficActivate } = await import("./traffic-2JFQKVAX.js");
3439
+ const { trafficActivate } = await import("./traffic-77CKSYM3.js");
3440
3440
  const project3 = requireProject(
3441
3441
  input,
3442
3442
  "traffic.activate",
@@ -3455,7 +3455,7 @@ var TRAFFIC_CLI_COMMANDS = [
3455
3455
  "since-minutes": stringOption()
3456
3456
  },
3457
3457
  run: async (input) => {
3458
- const { trafficSync } = await import("./traffic-2JFQKVAX.js");
3458
+ const { trafficSync } = await import("./traffic-77CKSYM3.js");
3459
3459
  const project3 = requireProject(
3460
3460
  input,
3461
3461
  "traffic.sync",
@@ -3484,7 +3484,7 @@ var TRAFFIC_CLI_COMMANDS = [
3484
3484
  wait: { type: "boolean" }
3485
3485
  },
3486
3486
  run: async (input) => {
3487
- const { trafficBackfill } = await import("./traffic-2JFQKVAX.js");
3487
+ const { trafficBackfill } = await import("./traffic-77CKSYM3.js");
3488
3488
  const project3 = requireProject(
3489
3489
  input,
3490
3490
  "traffic.backfill",
@@ -3513,7 +3513,7 @@ var TRAFFIC_CLI_COMMANDS = [
3513
3513
  "advance-to-now": { type: "boolean" }
3514
3514
  },
3515
3515
  run: async (input) => {
3516
- const { trafficReset } = await import("./traffic-2JFQKVAX.js");
3516
+ const { trafficReset } = await import("./traffic-77CKSYM3.js");
3517
3517
  const project3 = requireProject(
3518
3518
  input,
3519
3519
  "traffic.reset",
@@ -3535,7 +3535,7 @@ var TRAFFIC_CLI_COMMANDS = [
3535
3535
  source: stringOption()
3536
3536
  },
3537
3537
  run: async (input) => {
3538
- const { trafficDeclareGap } = await import("./traffic-2JFQKVAX.js");
3538
+ const { trafficDeclareGap } = await import("./traffic-77CKSYM3.js");
3539
3539
  const project3 = requireProject(
3540
3540
  input,
3541
3541
  "traffic.declare-gap",
@@ -3550,7 +3550,7 @@ var TRAFFIC_CLI_COMMANDS = [
3550
3550
  path: ["traffic", "sources"],
3551
3551
  usage: "canonry traffic sources <project> [--format json]",
3552
3552
  run: async (input) => {
3553
- const { trafficSources } = await import("./traffic-2JFQKVAX.js");
3553
+ const { trafficSources } = await import("./traffic-77CKSYM3.js");
3554
3554
  const project3 = requireProject(
3555
3555
  input,
3556
3556
  "traffic.sources",
@@ -3563,7 +3563,7 @@ var TRAFFIC_CLI_COMMANDS = [
3563
3563
  path: ["traffic", "status"],
3564
3564
  usage: "canonry traffic status <project> [--format json]",
3565
3565
  run: async (input) => {
3566
- const { trafficStatus } = await import("./traffic-2JFQKVAX.js");
3566
+ const { trafficStatus } = await import("./traffic-77CKSYM3.js");
3567
3567
  const project3 = requireProject(
3568
3568
  input,
3569
3569
  "traffic.status",
@@ -3578,7 +3578,7 @@ var TRAFFIC_CLI_COMMANDS = [
3578
3578
  help: "Stored sampled tail with 30-day retention, not visits. Unknown traffic is excluded by default. No provider calls.",
3579
3579
  options: { kind: stringOption(), source: stringOption(), since: stringOption(), until: stringOption(), "since-minutes": stringOption(), path: stringOption(), limit: stringOption(), offset: stringOption() },
3580
3580
  run: async (input) => {
3581
- const { trafficSamples } = await import("./traffic-2JFQKVAX.js");
3581
+ const { trafficSamples } = await import("./traffic-77CKSYM3.js");
3582
3582
  const project3 = requireProject(input, "traffic.samples", "canonry traffic samples <project>");
3583
3583
  const integer = (name) => parseIntegerOption(input, name, { command: "traffic.samples", usage: "canonry traffic samples <project>", message: `--${name} must be an integer` });
3584
3584
  await trafficSamples(project3, { kind: getString(input.values, "kind"), sourceId: getString(input.values, "source"), since: getString(input.values, "since"), until: getString(input.values, "until"), sinceMinutes: integer("since-minutes"), path: getString(input.values, "path"), limit: integer("limit"), offset: integer("offset"), format: input.format });
@@ -3597,7 +3597,7 @@ var TRAFFIC_CLI_COMMANDS = [
3597
3597
  granularity: stringOption()
3598
3598
  },
3599
3599
  run: async (input) => {
3600
- const { trafficEvents } = await import("./traffic-2JFQKVAX.js");
3600
+ const { trafficEvents } = await import("./traffic-77CKSYM3.js");
3601
3601
  const project3 = requireProject(
3602
3602
  input,
3603
3603
  "traffic.events",
@@ -6868,7 +6868,7 @@ var SYSTEM_CLI_COMMANDS = [
6868
6868
  options: { access: stringOption() },
6869
6869
  run: async (input) => {
6870
6870
  if (input.positionals.length > 1) throw usageError("Expected at most one command group");
6871
- const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-KC6JYHSW.js"), import("./cli-commands-BZLUMYKR.js")]);
6871
+ const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-KC6JYHSW.js"), import("./cli-commands-XFFBO46N.js")]);
6872
6872
  printCliCatalog(REGISTERED_CLI_COMMANDS2, input.format, input.positionals[0], getString(input.values, "access"));
6873
6873
  }
6874
6874
  },
@@ -6917,7 +6917,7 @@ var SYSTEM_CLI_COMMANDS = [
6917
6917
  },
6918
6918
  allowPositionals: false,
6919
6919
  run: async (input) => {
6920
- const { initCommand } = await import("./init-YKLLVT7X.js");
6920
+ const { initCommand } = await import("./init-WXKOOS25.js");
6921
6921
  await initCommand({
6922
6922
  force: getBoolean(input.values, "force"),
6923
6923
  ref: getString(input.values, "ref"),
@@ -6972,7 +6972,7 @@ var SYSTEM_CLI_COMMANDS = [
6972
6972
  allowPositionals: false,
6973
6973
  run: async (input) => {
6974
6974
  applyServerEnv(input.values);
6975
- const { serveCommand } = await import("./serve-VU3E7XTX.js");
6975
+ const { serveCommand } = await import("./serve-7JITP7HH.js");
6976
6976
  await serveCommand(input.format);
6977
6977
  }
6978
6978
  },
@@ -8290,8 +8290,8 @@ var AGENT_CLI_COMMANDS = [
8290
8290
  "timeout-ms": stringOption()
8291
8291
  },
8292
8292
  run: async (input) => {
8293
- const { coerceAgentProvider } = await import("./session-JKMEKQYL.js");
8294
- const { AERO_TOOL_PROFILES, isAeroToolProfile } = await import("./tools-LGTWLH5Y.js");
8293
+ const { coerceAgentProvider } = await import("./session-PCUTTGTF.js");
8294
+ const { AERO_TOOL_PROFILES, isAeroToolProfile } = await import("./tools-LILIKI26.js");
8295
8295
  const { agentAsk } = await import("./agent-ask-32RTOL2M.js");
8296
8296
  const usage = `canonry agent ask <project> "<prompt>" [--provider ${AGENT_PROVIDER_IDS.join("|")}] [--model <id>] [--scope all|read-only] [--profile default|ads-operator] [--context <json>] [--conversation <id>] [--max-tool-calls <n>] [--timeout-ms <ms>] [--format json]`;
8297
8297
  const project3 = requireProject(input, "agent.ask", usage);
@@ -27,14 +27,14 @@ import {
27
27
  resolveConfiguredAgentProvider,
28
28
  resolveSessionProviderAndModel,
29
29
  setAeroSystemPrompt
30
- } from "./chunk-27MGZQ6Z.js";
30
+ } from "./chunk-MIQMUSE4.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-I7RTAHCL.js";
37
+ } from "./chunk-JJO5XNS6.js";
38
38
  import {
39
39
  getGoogleAuthConfig,
40
40
  getGoogleConnection,
@@ -161,7 +161,7 @@ import {
161
161
  } from "./chunk-HGMYEDAQ.js";
162
162
  import {
163
163
  IntelligenceService
164
- } from "./chunk-ZMMS3FAR.js";
164
+ } from "./chunk-QAVJ6LHN.js";
165
165
  import {
166
166
  addLogListener,
167
167
  createFastifyLogger,
@@ -291,7 +291,7 @@ import {
291
291
  webhookResponseReason,
292
292
  webhookTargetRefusalReason,
293
293
  writeAuditLog
294
- } from "./chunk-KUMHO22S.js";
294
+ } from "./chunk-R3US2RG6.js";
295
295
  import {
296
296
  OperationalLogStore,
297
297
  SentimentIdempotencyConflict,
@@ -5937,7 +5937,7 @@ function nonBlank(value) {
5937
5937
  return trimmed ? trimmed : void 0;
5938
5938
  }
5939
5939
  function resolveBuildCommit(env = process.env) {
5940
- const embedded = true ? "7d17991013508621d89f3b6ce69a1ea77ae372ad" : void 0;
5940
+ const embedded = true ? "7de408778ee8c17a4b7d4e10315544e07bc057a8" : void 0;
5941
5941
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5942
5942
  }
5943
5943
  function resolveInstanceIdentity(env = process.env) {
@@ -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-VU3E7XTX.js");
50
+ const { serveCommand } = await import("./serve-7JITP7HH.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-KUMHO22S.js";
13
+ } from "./chunk-R3US2RG6.js";
14
14
  import {
15
15
  DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
16
16
  MeasurementPortfolioLists,
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-I7RTAHCL.js";
8
+ } from "./chunk-JJO5XNS6.js";
9
9
  import {
10
10
  CANONRY_MCP_TOOLKITS,
11
11
  resolveAeroSkillDir
@@ -17,7 +17,7 @@ import {
17
17
  mergeGscQueryTotalsWithFallback,
18
18
  readGscQueryDailyRows,
19
19
  readLatestGscDataDate
20
- } from "./chunk-KUMHO22S.js";
20
+ } from "./chunk-R3US2RG6.js";
21
21
  import {
22
22
  competitors,
23
23
  gbpDailyMetrics,
@@ -9,7 +9,7 @@ import {
9
9
  normalizeCloudflareWorkerEvent,
10
10
  sessionizeJourneyRequests,
11
11
  verifyRequestSignature
12
- } from "./chunk-O4WBYEGV.js";
12
+ } from "./chunk-B36XUBYK.js";
13
13
  import {
14
14
  currentOutcomeAttribution,
15
15
  getRequestContext,
@@ -29617,7 +29617,7 @@ import { and as and42, asc as asc10, count as count4, desc as desc23, eq as eq50
29617
29617
  import "zod";
29618
29618
 
29619
29619
  // ../api-routes/src/cloudflare-worker-version.ts
29620
- var CURRENT_CLOUDFLARE_WORKER_VERSION = "1.0.1";
29620
+ var CURRENT_CLOUDFLARE_WORKER_VERSION = "1.1.0";
29621
29621
  function cloudflareWorkerVersionFor(options) {
29622
29622
  return `${CURRENT_CLOUDFLARE_WORKER_VERSION}${options.forwardPageViews ? CLOUDFLARE_PAGE_VIEWS_VERSION_SUFFIX : ""}`;
29623
29623
  }
@@ -23,11 +23,11 @@ import {
23
23
  createRunCompetitorResolver,
24
24
  readMarketCompetitorNames,
25
25
  refreshSnapshotMentionIdentity
26
- } from "./chunk-KUMHO22S.js";
26
+ } from "./chunk-R3US2RG6.js";
27
27
  import {
28
28
  classifyAiUserFetch,
29
29
  classifyCrawler
30
- } from "./chunk-O4WBYEGV.js";
30
+ } from "./chunk-B36XUBYK.js";
31
31
  import {
32
32
  RawEventSampleEventTypes,
33
33
  aiUserFetchEventsHourly,
@@ -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-5STL6A45.js");
440
+ const { IntelligenceService } = await import("./intelligence-service-RVKSPP4X.js");
441
441
  const config = loadConfig();
442
442
  const db = createClient(config.database);
443
443
  migrate(db);
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  REGISTERED_CLI_COMMANDS
3
- } from "./chunk-DEQC5XVD.js";
3
+ } from "./chunk-CJ4JDM5W.js";
4
4
  import "./chunk-6GO5VVAC.js";
5
5
  import "./chunk-2EWZ3DJ4.js";
6
6
  import "./chunk-VJWDBFSL.js";
package/dist/cli.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node --import tsx
2
2
  import {
3
3
  REGISTERED_CLI_COMMANDS
4
- } from "./chunk-DEQC5XVD.js";
4
+ } from "./chunk-CJ4JDM5W.js";
5
5
  import {
6
6
  buildSetupState,
7
7
  runPendingServeHandoff
8
- } from "./chunk-SWWZ733W.js";
8
+ } from "./chunk-ENUSVOQ5.js";
9
9
  import "./chunk-6GO5VVAC.js";
10
10
  import "./chunk-2EWZ3DJ4.js";
11
11
  import "./chunk-VJWDBFSL.js";
@@ -7,8 +7,8 @@ import {
7
7
  } from "./chunk-HGMYEDAQ.js";
8
8
  import {
9
9
  anyUsersExist
10
- } from "./chunk-KUMHO22S.js";
11
- import "./chunk-O4WBYEGV.js";
10
+ } from "./chunk-R3US2RG6.js";
11
+ import "./chunk-B36XUBYK.js";
12
12
  import "./chunk-3MGM3U6V.js";
13
13
  import {
14
14
  createClient
@@ -40,7 +40,7 @@ function parseDemoTrustedProxies(values) {
40
40
  async function demoCommand(options) {
41
41
  const { host, port } = parseDemoListenOptions(options);
42
42
  const trustProxy = parseDemoTrustedProxies(options.trustProxy);
43
- const { createDemoServer } = await import("./demo-server-MRGL3SNP.js");
43
+ const { createDemoServer } = await import("./demo-server-5DE5PAEC.js");
44
44
  const app = await createDemoServer({ trustProxy });
45
45
  let stopping = false;
46
46
  const stop = () => {
@@ -18,7 +18,7 @@ import "./chunk-HGMYEDAQ.js";
18
18
  import {
19
19
  HISTORY_WINDOW_RUNS,
20
20
  IntelligenceService
21
- } from "./chunk-ZMMS3FAR.js";
21
+ } from "./chunk-QAVJ6LHN.js";
22
22
  import "./chunk-TZRYVW75.js";
23
23
  import {
24
24
  determineCitationState
@@ -26,8 +26,8 @@ import {
26
26
  import {
27
27
  apiRoutes,
28
28
  assessConversionTrackingIntegrity
29
- } from "./chunk-KUMHO22S.js";
30
- import "./chunk-O4WBYEGV.js";
29
+ } from "./chunk-R3US2RG6.js";
30
+ import "./chunk-B36XUBYK.js";
31
31
  import "./chunk-3MGM3U6V.js";
32
32
  import {
33
33
  adsAdGroups,
package/dist/index.js CHANGED
@@ -3,10 +3,10 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-QOKK5PMO.js";
6
+ } from "./chunk-DKONZ36U.js";
7
7
  import "./chunk-WSWHLKKJ.js";
8
- import "./chunk-27MGZQ6Z.js";
9
- import "./chunk-I7RTAHCL.js";
8
+ import "./chunk-MIQMUSE4.js";
9
+ import "./chunk-JJO5XNS6.js";
10
10
  import "./chunk-ELCLGWUT.js";
11
11
  import "./chunk-XEBKF4N5.js";
12
12
  import "./chunk-KZB6HLFT.js";
@@ -28,11 +28,11 @@ import "./chunk-ZHFE6J3A.js";
28
28
  import "./chunk-7HB6QLX4.js";
29
29
  import "./chunk-AOJU5LKX.js";
30
30
  import "./chunk-HGMYEDAQ.js";
31
- import "./chunk-ZMMS3FAR.js";
31
+ import "./chunk-QAVJ6LHN.js";
32
32
  import "./chunk-TZRYVW75.js";
33
33
  import "./chunk-JERATA5R.js";
34
- import "./chunk-KUMHO22S.js";
35
- import "./chunk-O4WBYEGV.js";
34
+ import "./chunk-R3US2RG6.js";
35
+ import "./chunk-B36XUBYK.js";
36
36
  import "./chunk-3MGM3U6V.js";
37
37
  import "./chunk-HRFPGXON.js";
38
38
  import "./chunk-PM2DB3HE.js";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  buildSetupState,
9
9
  queueServeHandoff
10
- } from "./chunk-SWWZ733W.js";
10
+ } from "./chunk-ENUSVOQ5.js";
11
11
  import "./chunk-VJWDBFSL.js";
12
12
  import "./chunk-PLLDJUG2.js";
13
13
  import "./chunk-FCYGY4FT.js";
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  HISTORY_WINDOW_RUNS,
3
3
  IntelligenceService
4
- } from "./chunk-ZMMS3FAR.js";
4
+ } from "./chunk-QAVJ6LHN.js";
5
5
  import "./chunk-TZRYVW75.js";
6
6
  import "./chunk-JERATA5R.js";
7
- import "./chunk-KUMHO22S.js";
8
- import "./chunk-O4WBYEGV.js";
7
+ import "./chunk-R3US2RG6.js";
8
+ import "./chunk-B36XUBYK.js";
9
9
  import "./chunk-3MGM3U6V.js";
10
10
  import "./chunk-HRFPGXON.js";
11
11
  import "./chunk-PM2DB3HE.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  backfillAiReferralPaths,
3
3
  backfillNormalizedPaths
4
- } from "./chunk-6OCQTAXU.js";
4
+ } from "./chunk-T2TIQP5O.js";
5
5
  import {
6
6
  operatorHttpUrl
7
7
  } from "./chunk-6GO5VVAC.js";
@@ -9,10 +9,10 @@ import {
9
9
  allowsKeylessFirstRunSetup,
10
10
  createServer,
11
11
  waitForServerRuntimeStartup
12
- } from "./chunk-QOKK5PMO.js";
12
+ } from "./chunk-DKONZ36U.js";
13
13
  import "./chunk-WSWHLKKJ.js";
14
- import "./chunk-27MGZQ6Z.js";
15
- import "./chunk-I7RTAHCL.js";
14
+ import "./chunk-MIQMUSE4.js";
15
+ import "./chunk-JJO5XNS6.js";
16
16
  import "./chunk-ELCLGWUT.js";
17
17
  import "./chunk-XEBKF4N5.js";
18
18
  import "./chunk-KZB6HLFT.js";
@@ -57,14 +57,14 @@ import {
57
57
  CliError,
58
58
  isMachineFormat
59
59
  } from "./chunk-HGMYEDAQ.js";
60
- import "./chunk-ZMMS3FAR.js";
60
+ import "./chunk-QAVJ6LHN.js";
61
61
  import "./chunk-TZRYVW75.js";
62
62
  import "./chunk-JERATA5R.js";
63
63
  import {
64
64
  refreshSnapshotMentionIdentity,
65
65
  snapshotsWithSentimentResults
66
- } from "./chunk-KUMHO22S.js";
67
- import "./chunk-O4WBYEGV.js";
66
+ } from "./chunk-R3US2RG6.js";
67
+ import "./chunk-B36XUBYK.js";
68
68
  import "./chunk-3MGM3U6V.js";
69
69
  import {
70
70
  createClient,
@@ -9,8 +9,8 @@ import {
9
9
  resolveAeroModel,
10
10
  resolveConfiguredAgentProvider,
11
11
  resolveSessionProviderAndModel
12
- } from "./chunk-27MGZQ6Z.js";
13
- import "./chunk-I7RTAHCL.js";
12
+ } from "./chunk-MIQMUSE4.js";
13
+ import "./chunk-JJO5XNS6.js";
14
14
  import {
15
15
  resolveAeroSkillDir
16
16
  } from "./chunk-JI7FDO7I.js";
@@ -26,8 +26,8 @@ import "./chunk-7HB6QLX4.js";
26
26
  import "./chunk-AOJU5LKX.js";
27
27
  import "./chunk-HGMYEDAQ.js";
28
28
  import "./chunk-TZRYVW75.js";
29
- import "./chunk-KUMHO22S.js";
30
- import "./chunk-O4WBYEGV.js";
29
+ import "./chunk-R3US2RG6.js";
30
+ import "./chunk-B36XUBYK.js";
31
31
  import "./chunk-3MGM3U6V.js";
32
32
  import "./chunk-HRFPGXON.js";
33
33
  import "./chunk-PM2DB3HE.js";
@@ -11,7 +11,7 @@ import {
11
11
  buildAllTools,
12
12
  buildReadTools,
13
13
  isAeroToolProfile
14
- } from "./chunk-I7RTAHCL.js";
14
+ } from "./chunk-JJO5XNS6.js";
15
15
  import "./chunk-7OAXEMOF.js";
16
16
  import "./chunk-3QJWOF2B.js";
17
17
  import "./chunk-MUYTDD35.js";
@@ -19,8 +19,8 @@ import "./chunk-ZHFE6J3A.js";
19
19
  import "./chunk-7HB6QLX4.js";
20
20
  import "./chunk-AOJU5LKX.js";
21
21
  import "./chunk-HGMYEDAQ.js";
22
- import "./chunk-KUMHO22S.js";
23
- import "./chunk-O4WBYEGV.js";
22
+ import "./chunk-R3US2RG6.js";
23
+ import "./chunk-B36XUBYK.js";
24
24
  import "./chunk-3MGM3U6V.js";
25
25
  import "./chunk-HRFPGXON.js";
26
26
  import "./chunk-PM2DB3HE.js";
@@ -23,7 +23,7 @@ import {
23
23
  DEFAULT_BOT_LIST,
24
24
  generateWorkerScript,
25
25
  generateWranglerToml
26
- } from "./chunk-O4WBYEGV.js";
26
+ } from "./chunk-B36XUBYK.js";
27
27
  import {
28
28
  RunStatuses,
29
29
  TrafficEventKinds,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "7.79.1",
3
+ "version": "7.80.0",
4
4
  "type": "module",
5
5
  "description": "Self-hosted AI visibility (AEO) platform: track how ChatGPT, Claude, Gemini, and Perplexity cite your domain, join it with Search Console, GA4, server-side traffic, and paid media, and fix what you find through agent tools (CLI, REST, MCP). Local SQLite.",
6
6
  "keywords": [