@canonry/canonry 7.87.0 → 7.87.1

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 (24) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +2 -1
  2. package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +10 -6
  3. package/dist/{backfill-LIMS34H6.js → backfill-PNHBAV5N.js} +3 -3
  4. package/dist/{chunk-ITOK75B6.js → chunk-2I22IUA3.js} +1 -1
  5. package/dist/{chunk-OJKWT6U6.js → chunk-BKZ6PQAE.js} +6 -6
  6. package/dist/{chunk-D5V6YQXA.js → chunk-CR54BCUP.js} +3 -3
  7. package/dist/{chunk-KOBOKZXF.js → chunk-ECZGTJIQ.js} +1 -1
  8. package/dist/{chunk-YKB67YKH.js → chunk-J7ITGXCS.js} +1 -1
  9. package/dist/{chunk-L5NMS7AU.js → chunk-RHOIR5QY.js} +1 -1
  10. package/dist/{chunk-EJZHL67Y.js → chunk-RSPOFH66.js} +1 -1
  11. package/dist/{chunk-JGGDENAA.js → chunk-UXSWQAVZ.js} +14 -14
  12. package/dist/{chunk-EQGCGZZY.js → chunk-W7DHXSXN.js} +20 -3
  13. package/dist/{cli-commands-J6KWSWIS.js → cli-commands-62QECRBV.js} +1 -1
  14. package/dist/cli.js +2 -2
  15. package/dist/{dashboard-5QMYF4ZP.js → dashboard-4HOXCUQE.js} +1 -1
  16. package/dist/{demo-KGQL5EJM.js → demo-IY7Y7KR3.js} +1 -1
  17. package/dist/{demo-server-ERIR2T2N.js → demo-server-BLLSDILQ.js} +2 -2
  18. package/dist/index.js +6 -6
  19. package/dist/{init-HOBW5K2Q.js → init-JY76QAOC.js} +1 -1
  20. package/dist/{intelligence-service-2AH42Y4Q.js → intelligence-service-GJYBEHJE.js} +2 -2
  21. package/dist/{serve-WF5ZXWW6.js → serve-ZQXMTDE7.js} +7 -7
  22. package/dist/{session-HEDEP77R.js → session-MGOUDLXN.js} +3 -3
  23. package/dist/{tools-KYG67FBW.js → tools-ZWFLE5UR.js} +2 -2
  24. package/package.json +1 -1
@@ -1054,7 +1054,8 @@ more than 1,000 messages remain afterwards and names the cause. After
1054
1054
  `deadline` or `batch-cap` the drain hit its limit: if the operator approves a
1055
1055
  manual drain, run a manual sync, and if the backlog recurs, get approval to
1056
1056
  shorten the schedule interval or raise the time limit. After `empty-pulls`
1057
- Cloudflare still counted messages it would not return; later syncs pull them.
1057
+ Cloudflare still counted messages it would not return, even after waiting
1058
+ between pulls; later syncs pull them.
1058
1059
 
1059
1060
  Read the [server-side traffic guide](server-side-traffic.md) for token safety,
1060
1061
  route checks, activation order, smoke tests, rollback, and troubleshooting.
@@ -947,10 +947,13 @@ usable value, receipts keep Cloudflare's 14-day maximum plus the margin.
947
947
  Each Queue sync drains in batches of up to 100 messages for as long as
948
948
  Cloudflare reports a backlog, up to a 4-minute time limit per sync
949
949
  (`CANONRY_CLOUDFLARE_QUEUE_SYNC_DEADLINE_MS`, 30 seconds to 15 minutes) and a
950
- 300-pull safety cap. Cloudflare can return a partial or briefly empty batch
951
- while a backlog waits, so a sync stops only when Cloudflare reports no backlog,
952
- two pulls in a row come back empty, or the limit is reached. If a pull fails
953
- after earlier batches were saved, the run ends `partial` and keeps them.
950
+ 300-pull safety cap. Cloudflare can return a partial or empty batch while a
951
+ backlog waits (on a busy Queue, about 3 pulls in 10 come back empty). While 100
952
+ or more messages wait, the sync waits after each empty pull, 0.5, 1, 2, 4 and
953
+ then 8 seconds, and pulls again. It stops when Cloudflare reports no backlog,
954
+ when every wait came back empty, when fewer than 100 messages wait and two
955
+ pulls in a row came back empty, or at the limit. If a pull fails after earlier
956
+ batches were saved, the run ends `partial` and keeps them.
954
957
 
955
958
  Each sync run records what it did and why it stopped in `syncSummary`: pulls,
956
959
  empty pulls, messages pulled and acknowledged, redelivered (duplicate) events,
@@ -964,8 +967,9 @@ the drain) and warns above that, with the cause taken from the last stop
964
967
  reason. After `deadline` or `batch-cap` the drain hit its limit: shorten the
965
968
  `traffic-sync` interval or raise the time limit, or messages will pass the
966
969
  Queue's retention and be dropped. After `empty-pulls` or `unleased-only`
967
- Cloudflare still counted messages it would not return (leased or not yet
968
- visible); later syncs pull them, and raising the time limit does not help.
970
+ Cloudflare still counted messages it would not return, even after the waits
971
+ (leased or not yet visible); later syncs pull them, and raising the time limit
972
+ does not help.
969
973
 
970
974
  ## Syncing data
971
975
 
@@ -10,8 +10,8 @@ import {
10
10
  backfillSnapshotAttributionCommand,
11
11
  backfillTrafficClassificationCommand,
12
12
  replayQueryAuditLog
13
- } from "./chunk-D5V6YQXA.js";
14
- import "./chunk-L5NMS7AU.js";
13
+ } from "./chunk-CR54BCUP.js";
14
+ import "./chunk-RHOIR5QY.js";
15
15
  import "./chunk-2FJB3CSS.js";
16
16
  import "./chunk-HGMYEDAQ.js";
17
17
  import "./chunk-JAYUWQAV.js";
@@ -19,7 +19,7 @@ import "./chunk-IBGZ6D6R.js";
19
19
  import {
20
20
  backfillProjectAnswerMentions,
21
21
  backfillProjectAnswerMentionsInChunks
22
- } from "./chunk-EQGCGZZY.js";
22
+ } from "./chunk-W7DHXSXN.js";
23
23
  import "./chunk-VDYXB6SV.js";
24
24
  import "./chunk-GBWCEOZR.js";
25
25
  import "./chunk-O26FQ7RI.js";
@@ -17,7 +17,7 @@ import {
17
17
  mergeGscQueryTotalsWithFallback,
18
18
  readGscQueryDailyRows,
19
19
  readLatestGscDataDate
20
- } from "./chunk-EQGCGZZY.js";
20
+ } from "./chunk-W7DHXSXN.js";
21
21
  import {
22
22
  competitors,
23
23
  gbpDailyMetrics,
@@ -27,14 +27,14 @@ import {
27
27
  resolveConfiguredAgentProvider,
28
28
  resolveSessionProviderAndModel,
29
29
  setAeroSystemPrompt
30
- } from "./chunk-KOBOKZXF.js";
30
+ } from "./chunk-ECZGTJIQ.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-EJZHL67Y.js";
37
+ } from "./chunk-RSPOFH66.js";
38
38
  import {
39
39
  getGoogleAuthConfig,
40
40
  getGoogleConnection,
@@ -65,7 +65,7 @@ import {
65
65
  openrouterAdapter,
66
66
  perplexityAdapter,
67
67
  startTrafficReclassification
68
- } from "./chunk-L5NMS7AU.js";
68
+ } from "./chunk-RHOIR5QY.js";
69
69
  import {
70
70
  classifyUsageSurface,
71
71
  createApiUsageTelemetry,
@@ -162,7 +162,7 @@ import {
162
162
  } from "./chunk-HGMYEDAQ.js";
163
163
  import {
164
164
  IntelligenceService
165
- } from "./chunk-ITOK75B6.js";
165
+ } from "./chunk-2I22IUA3.js";
166
166
  import {
167
167
  computeCitedCompetitorDomains,
168
168
  determineCitationState
@@ -292,7 +292,7 @@ import {
292
292
  webhookResponseReason,
293
293
  webhookTargetRefusalReason,
294
294
  writeAuditLog
295
- } from "./chunk-EQGCGZZY.js";
295
+ } from "./chunk-W7DHXSXN.js";
296
296
  import {
297
297
  OperationalLogStore,
298
298
  SentimentIdempotencyConflict,
@@ -5940,7 +5940,7 @@ function nonBlank(value) {
5940
5940
  return trimmed ? trimmed : void 0;
5941
5941
  }
5942
5942
  function resolveBuildCommit(env = process.env) {
5943
- const embedded = true ? "485708a537f8d1db1356f1225a77b6052a3e7589" : void 0;
5943
+ const embedded = true ? "a044e59ea7224007b8c3e85cb1c037f6aff2c6c9" : void 0;
5944
5944
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5945
5945
  }
5946
5946
  function resolveInstanceIdentity(env = process.env) {
@@ -8,7 +8,7 @@ import {
8
8
  reparseStoredResult4,
9
9
  reparseStoredResult5,
10
10
  resolveStoredApiResponse
11
- } from "./chunk-L5NMS7AU.js";
11
+ } from "./chunk-RHOIR5QY.js";
12
12
  import {
13
13
  loadConfig
14
14
  } from "./chunk-2FJB3CSS.js";
@@ -24,7 +24,7 @@ import {
24
24
  createRunCompetitorResolver,
25
25
  readMarketCompetitorNames,
26
26
  refreshSnapshotMentionIdentity
27
- } from "./chunk-EQGCGZZY.js";
27
+ } from "./chunk-W7DHXSXN.js";
28
28
  import {
29
29
  RawEventSampleEventTypes,
30
30
  auditLog,
@@ -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-2AH42Y4Q.js");
432
+ const { IntelligenceService } = await import("./intelligence-service-GJYBEHJE.js");
433
433
  const config = loadConfig();
434
434
  const db = createClient(config.database);
435
435
  migrate(db);
@@ -5,7 +5,7 @@ import {
5
5
  isStoredPageReadTool,
6
6
  isStoredReadTool,
7
7
  truncateToolResult
8
- } from "./chunk-EJZHL67Y.js";
8
+ } from "./chunk-RSPOFH66.js";
9
9
  import {
10
10
  CANONRY_MCP_TOOLKITS,
11
11
  resolveAeroSkillDir
@@ -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-WF5ZXWW6.js");
50
+ const { serveCommand } = await import("./serve-ZQXMTDE7.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -6,7 +6,7 @@ import {
6
6
  correctBackgroundCallJourneys,
7
7
  mergeSplitJourneyVisitors,
8
8
  writeUnrecognizedAgentBuckets
9
- } from "./chunk-EQGCGZZY.js";
9
+ } from "./chunk-W7DHXSXN.js";
10
10
  import {
11
11
  AGENT_TRUST_RULES_VERSION,
12
12
  BROWSER_SHAPED_AGENT_MARKERS,
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-EQGCGZZY.js";
13
+ } from "./chunk-W7DHXSXN.js";
14
14
  import {
15
15
  DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
16
16
  MeasurementPortfolioLists,
@@ -728,7 +728,7 @@ var DEMO_CLI_COMMANDS = [{
728
728
  options: { host: stringOption(), port: stringOption(), "trust-proxy": multiStringOption() },
729
729
  allowPositionals: false,
730
730
  run: async (input) => {
731
- const { demoCommand } = await import("./demo-KGQL5EJM.js");
731
+ const { demoCommand } = await import("./demo-IY7Y7KR3.js");
732
732
  await demoCommand({
733
733
  host: getString(input.values, "host"),
734
734
  port: getString(input.values, "port"),
@@ -749,7 +749,7 @@ var BACKFILL_CLI_COMMANDS = [
749
749
  allowPositionals: false,
750
750
  supportsDryRun: true,
751
751
  run: async (input) => {
752
- const { backfillAnswerVisibilityCommand } = await import("./backfill-LIMS34H6.js");
752
+ const { backfillAnswerVisibilityCommand } = await import("./backfill-PNHBAV5N.js");
753
753
  await backfillAnswerVisibilityCommand({
754
754
  project: getString(input.values, "project"),
755
755
  dryRun: input.dryRun,
@@ -766,7 +766,7 @@ var BACKFILL_CLI_COMMANDS = [
766
766
  allowPositionals: false,
767
767
  supportsDryRun: true,
768
768
  run: async (input) => {
769
- const { backfillAnswerMentionsCommand } = await import("./backfill-LIMS34H6.js");
769
+ const { backfillAnswerMentionsCommand } = await import("./backfill-PNHBAV5N.js");
770
770
  await backfillAnswerMentionsCommand({
771
771
  project: getString(input.values, "project"),
772
772
  dryRun: input.dryRun,
@@ -784,7 +784,7 @@ var BACKFILL_CLI_COMMANDS = [
784
784
  },
785
785
  supportsDryRun: true,
786
786
  run: async (input) => {
787
- const { backfillInsightsCommand } = await import("./backfill-LIMS34H6.js");
787
+ const { backfillInsightsCommand } = await import("./backfill-PNHBAV5N.js");
788
788
  const usage = "canonry backfill insights <project> [--from-run <id>] [--to-run <id>] [--since <date>] [--dry-run] [--format json]";
789
789
  const project3 = requireProject(input, "backfill insights", usage);
790
790
  await backfillInsightsCommand(project3, {
@@ -804,7 +804,7 @@ var BACKFILL_CLI_COMMANDS = [
804
804
  },
805
805
  allowPositionals: false,
806
806
  run: async (input) => {
807
- const { backfillNormalizedPathsCommand } = await import("./backfill-LIMS34H6.js");
807
+ const { backfillNormalizedPathsCommand } = await import("./backfill-PNHBAV5N.js");
808
808
  await backfillNormalizedPathsCommand({
809
809
  project: getString(input.values, "project"),
810
810
  format: input.format
@@ -819,7 +819,7 @@ var BACKFILL_CLI_COMMANDS = [
819
819
  },
820
820
  allowPositionals: false,
821
821
  run: async (input) => {
822
- const { backfillAiReferralPathsCommand } = await import("./backfill-LIMS34H6.js");
822
+ const { backfillAiReferralPathsCommand } = await import("./backfill-PNHBAV5N.js");
823
823
  await backfillAiReferralPathsCommand({
824
824
  project: getString(input.values, "project"),
825
825
  format: input.format
@@ -831,7 +831,7 @@ var BACKFILL_CLI_COMMANDS = [
831
831
  usage: "canonry backfill snapshot-attribution <project> [--dry-run] [--format json]",
832
832
  supportsDryRun: true,
833
833
  run: async (input) => {
834
- const { backfillSnapshotAttributionCommand } = await import("./backfill-LIMS34H6.js");
834
+ const { backfillSnapshotAttributionCommand } = await import("./backfill-PNHBAV5N.js");
835
835
  const usage = "canonry backfill snapshot-attribution <project> [--dry-run] [--format json]";
836
836
  const project3 = requireProject(input, "backfill snapshot-attribution", usage);
837
837
  await backfillSnapshotAttributionCommand({
@@ -850,7 +850,7 @@ var BACKFILL_CLI_COMMANDS = [
850
850
  allowPositionals: false,
851
851
  supportsDryRun: true,
852
852
  run: async (input) => {
853
- const { backfillTrafficClassificationCommand } = await import("./backfill-LIMS34H6.js");
853
+ const { backfillTrafficClassificationCommand } = await import("./backfill-PNHBAV5N.js");
854
854
  await backfillTrafficClassificationCommand({
855
855
  project: getString(input.values, "project"),
856
856
  dryRun: input.dryRun,
@@ -1292,7 +1292,7 @@ var DASHBOARD_CLI_COMMANDS = [
1292
1292
  usage: "canonry dashboard reset-password [--format json]",
1293
1293
  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.",
1294
1294
  run: async (input) => {
1295
- const { resetDashboardPassword } = await import("./dashboard-5QMYF4ZP.js");
1295
+ const { resetDashboardPassword } = await import("./dashboard-4HOXCUQE.js");
1296
1296
  await resetDashboardPassword({ format: input.format });
1297
1297
  }
1298
1298
  },
@@ -6931,7 +6931,7 @@ var SYSTEM_CLI_COMMANDS = [
6931
6931
  options: { access: stringOption() },
6932
6932
  run: async (input) => {
6933
6933
  if (input.positionals.length > 1) throw usageError("Expected at most one command group");
6934
- const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-CBTM3JKP.js"), import("./cli-commands-J6KWSWIS.js")]);
6934
+ const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-CBTM3JKP.js"), import("./cli-commands-62QECRBV.js")]);
6935
6935
  printCliCatalog(REGISTERED_CLI_COMMANDS2, input.format, input.positionals[0], getString(input.values, "access"));
6936
6936
  }
6937
6937
  },
@@ -6980,7 +6980,7 @@ var SYSTEM_CLI_COMMANDS = [
6980
6980
  },
6981
6981
  allowPositionals: false,
6982
6982
  run: async (input) => {
6983
- const { initCommand } = await import("./init-HOBW5K2Q.js");
6983
+ const { initCommand } = await import("./init-JY76QAOC.js");
6984
6984
  await initCommand({
6985
6985
  force: getBoolean(input.values, "force"),
6986
6986
  ref: getString(input.values, "ref"),
@@ -7035,7 +7035,7 @@ var SYSTEM_CLI_COMMANDS = [
7035
7035
  allowPositionals: false,
7036
7036
  run: async (input) => {
7037
7037
  applyServerEnv(input.values);
7038
- const { serveCommand } = await import("./serve-WF5ZXWW6.js");
7038
+ const { serveCommand } = await import("./serve-ZQXMTDE7.js");
7039
7039
  await serveCommand(input.format);
7040
7040
  }
7041
7041
  },
@@ -8404,8 +8404,8 @@ var AGENT_CLI_COMMANDS = [
8404
8404
  "timeout-ms": stringOption()
8405
8405
  },
8406
8406
  run: async (input) => {
8407
- const { coerceAgentProvider } = await import("./session-HEDEP77R.js");
8408
- const { AERO_TOOL_PROFILES, isAeroToolProfile } = await import("./tools-KYG67FBW.js");
8407
+ const { coerceAgentProvider } = await import("./session-MGOUDLXN.js");
8408
+ const { AERO_TOOL_PROFILES, isAeroToolProfile } = await import("./tools-ZWFLE5UR.js");
8409
8409
  const { agentAsk } = await import("./agent-ask-7VUPXTXL.js");
8410
8410
  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]`;
8411
8411
  const project3 = requireProject(input, "agent.ask", usage);
@@ -62587,6 +62587,7 @@ var DEFAULT_VERCEL_SYNC_DEADLINE_MS = 4 * 6e4;
62587
62587
  var CLOUDFLARE_QUEUE_BATCH_SIZE = 100;
62588
62588
  var DEFAULT_CLOUDFLARE_QUEUE_SYNC_DEADLINE_MS = 4 * 6e4;
62589
62589
  var DEFAULT_CLOUDFLARE_QUEUE_MAX_BATCHES = 300;
62590
+ var DEFAULT_CLOUDFLARE_QUEUE_EMPTY_PULL_BACKOFF_MS = [500, 1e3, 2e3, 4e3, 8e3];
62590
62591
  var CLOUDFLARE_QUEUE_RESIDUAL_WARN_COUNT = 1e3;
62591
62592
  var MIN_VERCEL_SYNC_DEADLINE_MS = 3e4;
62592
62593
  var MAX_VERCEL_SYNC_DEADLINE_MS = 15 * 6e4;
@@ -64816,9 +64817,13 @@ async function trafficRoutes(app, opts) {
64816
64817
  const readQueueRetentionSeconds = opts.getCloudflareQueueRetentionSeconds ?? getCloudflareQueueRetentionSeconds;
64817
64818
  const cloudflareQueueMaxBatches = opts.cloudflareQueueMaxBatches ?? DEFAULT_CLOUDFLARE_QUEUE_MAX_BATCHES;
64818
64819
  const cloudflareQueueSyncDeadlineMs = opts.cloudflareQueueSyncDeadlineMs ?? DEFAULT_CLOUDFLARE_QUEUE_SYNC_DEADLINE_MS;
64820
+ const cloudflareQueueEmptyPullBackoffMs = opts.cloudflareQueueEmptyPullBackoffMs ?? DEFAULT_CLOUDFLARE_QUEUE_EMPTY_PULL_BACKOFF_MS;
64819
64821
  if (!Number.isInteger(cloudflareQueueMaxBatches) || cloudflareQueueMaxBatches < 1 || cloudflareQueueMaxBatches > 1e3) {
64820
64822
  throw new RangeError("cloudflareQueueMaxBatches must be an integer from 1 to 1000");
64821
64823
  }
64824
+ if (cloudflareQueueEmptyPullBackoffMs.some((ms) => !Number.isFinite(ms) || ms < 0)) {
64825
+ throw new RangeError("cloudflareQueueEmptyPullBackoffMs must hold non-negative milliseconds");
64826
+ }
64822
64827
  const allowLoopback = opts.allowLoopbackWebhooks === true;
64823
64828
  let rawSampleRetentionTimer;
64824
64829
  app.addHook("onReady", async () => {
@@ -66000,9 +66005,20 @@ async function trafficRoutes(app, opts) {
66000
66005
  break;
66001
66006
  }
66002
66007
  consecutiveEmptyPulls = pulled.skippedUnleasedMessageCount === 0 ? consecutiveEmptyPulls + 1 : 0;
66003
- if (consecutiveEmptyPulls >= 2) {
66004
- stopReason = CloudflareQueueDrainStopReasons["empty-pulls"];
66005
- break;
66008
+ if (consecutiveEmptyPulls > 0) {
66009
+ const waits = remainingBacklogCount >= CLOUDFLARE_QUEUE_BATCH_SIZE ? cloudflareQueueEmptyPullBackoffMs : [0];
66010
+ if (consecutiveEmptyPulls > waits.length) {
66011
+ stopReason = CloudflareQueueDrainStopReasons["empty-pulls"];
66012
+ break;
66013
+ }
66014
+ const waitMs = waits[consecutiveEmptyPulls - 1];
66015
+ if (waitMs > 0) {
66016
+ if (waitMs >= drainDeadlineMs - Date.now()) {
66017
+ stopReason = CloudflareQueueDrainStopReasons.deadline;
66018
+ break;
66019
+ }
66020
+ await new Promise((resolve) => setTimeout(resolve, waitMs));
66021
+ }
66006
66022
  }
66007
66023
  } else {
66008
66024
  consecutiveEmptyPulls = 0;
@@ -76578,6 +76594,7 @@ async function apiRoutes(app, opts) {
76578
76594
  getCloudflareQueueRetentionSeconds: opts.getCloudflareQueueRetentionSeconds,
76579
76595
  cloudflareQueueMaxBatches: opts.cloudflareQueueMaxBatches,
76580
76596
  cloudflareQueueSyncDeadlineMs: opts.cloudflareQueueSyncDeadlineMs,
76597
+ cloudflareQueueEmptyPullBackoffMs: opts.cloudflareQueueEmptyPullBackoffMs,
76581
76598
  cloudflareTrafficIngestUrl: opts.cloudflareTrafficIngestUrl,
76582
76599
  cloudflareIngestRateLimitMax: opts.cloudflareIngestRateLimitMax,
76583
76600
  cloudflareIngestIpRateLimitMax: opts.cloudflareIngestIpRateLimitMax,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  REGISTERED_CLI_COMMANDS
3
- } from "./chunk-JGGDENAA.js";
3
+ } from "./chunk-UXSWQAVZ.js";
4
4
  import "./chunk-6GO5VVAC.js";
5
5
  import "./chunk-VJWDBFSL.js";
6
6
  import "./chunk-4LNZTL7M.js";
package/dist/cli.js CHANGED
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node --import tsx
2
2
  import {
3
3
  REGISTERED_CLI_COMMANDS
4
- } from "./chunk-JGGDENAA.js";
4
+ } from "./chunk-UXSWQAVZ.js";
5
5
  import "./chunk-6GO5VVAC.js";
6
6
  import {
7
7
  buildSetupState,
8
8
  runPendingServeHandoff
9
- } from "./chunk-YKB67YKH.js";
9
+ } from "./chunk-J7ITGXCS.js";
10
10
  import "./chunk-VJWDBFSL.js";
11
11
  import "./chunk-4LNZTL7M.js";
12
12
  import "./chunk-TSENU4GG.js";
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-HGMYEDAQ.js";
8
8
  import {
9
9
  anyUsersExist
10
- } from "./chunk-EQGCGZZY.js";
10
+ } from "./chunk-W7DHXSXN.js";
11
11
  import "./chunk-VDYXB6SV.js";
12
12
  import "./chunk-GBWCEOZR.js";
13
13
  import {
@@ -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-ERIR2T2N.js");
43
+ const { createDemoServer } = await import("./demo-server-BLLSDILQ.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-ITOK75B6.js";
21
+ } from "./chunk-2I22IUA3.js";
22
22
  import {
23
23
  determineCitationState
24
24
  } from "./chunk-JAYUWQAV.js";
@@ -26,7 +26,7 @@ import "./chunk-IBGZ6D6R.js";
26
26
  import {
27
27
  apiRoutes,
28
28
  assessConversionTrackingIntegrity
29
- } from "./chunk-EQGCGZZY.js";
29
+ } from "./chunk-W7DHXSXN.js";
30
30
  import "./chunk-VDYXB6SV.js";
31
31
  import "./chunk-GBWCEOZR.js";
32
32
  import {
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@ import {
3
3
  createGoogleMarketingCredentialStore,
4
4
  createGoogleMarketingRuntime,
5
5
  createServer
6
- } from "./chunk-OJKWT6U6.js";
6
+ } from "./chunk-BKZ6PQAE.js";
7
7
  import "./chunk-IK7QEKKD.js";
8
- import "./chunk-KOBOKZXF.js";
9
- import "./chunk-EJZHL67Y.js";
8
+ import "./chunk-ECZGTJIQ.js";
9
+ import "./chunk-RSPOFH66.js";
10
10
  import "./chunk-ELCLGWUT.js";
11
11
  import "./chunk-XEBKF4N5.js";
12
12
  import "./chunk-4FWDITQG.js";
13
- import "./chunk-L5NMS7AU.js";
13
+ import "./chunk-RHOIR5QY.js";
14
14
  import "./chunk-6F5ULQDY.js";
15
15
  import "./chunk-TSENU4GG.js";
16
16
  import "./chunk-3KK6FWDF.js";
@@ -28,10 +28,10 @@ import "./chunk-GXTCDNX7.js";
28
28
  import "./chunk-MNLAIB67.js";
29
29
  import "./chunk-AOJU5LKX.js";
30
30
  import "./chunk-HGMYEDAQ.js";
31
- import "./chunk-ITOK75B6.js";
31
+ import "./chunk-2I22IUA3.js";
32
32
  import "./chunk-JAYUWQAV.js";
33
33
  import "./chunk-IBGZ6D6R.js";
34
- import "./chunk-EQGCGZZY.js";
34
+ import "./chunk-W7DHXSXN.js";
35
35
  import "./chunk-VDYXB6SV.js";
36
36
  import "./chunk-GBWCEOZR.js";
37
37
  import "./chunk-O26FQ7RI.js";
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  buildSetupState,
9
9
  queueServeHandoff
10
- } from "./chunk-YKB67YKH.js";
10
+ } from "./chunk-J7ITGXCS.js";
11
11
  import "./chunk-VJWDBFSL.js";
12
12
  import "./chunk-6F5ULQDY.js";
13
13
  import "./chunk-3KK6FWDF.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  HISTORY_WINDOW_RUNS,
3
3
  IntelligenceService
4
- } from "./chunk-ITOK75B6.js";
4
+ } from "./chunk-2I22IUA3.js";
5
5
  import "./chunk-JAYUWQAV.js";
6
6
  import "./chunk-IBGZ6D6R.js";
7
- import "./chunk-EQGCGZZY.js";
7
+ import "./chunk-W7DHXSXN.js";
8
8
  import "./chunk-VDYXB6SV.js";
9
9
  import "./chunk-GBWCEOZR.js";
10
10
  import "./chunk-O26FQ7RI.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  backfillAiReferralPaths,
3
3
  backfillNormalizedPaths
4
- } from "./chunk-D5V6YQXA.js";
4
+ } from "./chunk-CR54BCUP.js";
5
5
  import {
6
6
  operatorHttpUrl
7
7
  } from "./chunk-6GO5VVAC.js";
@@ -9,14 +9,14 @@ import {
9
9
  allowsKeylessFirstRunSetup,
10
10
  createServer,
11
11
  waitForServerRuntimeStartup
12
- } from "./chunk-OJKWT6U6.js";
12
+ } from "./chunk-BKZ6PQAE.js";
13
13
  import "./chunk-IK7QEKKD.js";
14
- import "./chunk-KOBOKZXF.js";
15
- import "./chunk-EJZHL67Y.js";
14
+ import "./chunk-ECZGTJIQ.js";
15
+ import "./chunk-RSPOFH66.js";
16
16
  import "./chunk-ELCLGWUT.js";
17
17
  import "./chunk-XEBKF4N5.js";
18
18
  import "./chunk-4FWDITQG.js";
19
- import "./chunk-L5NMS7AU.js";
19
+ import "./chunk-RHOIR5QY.js";
20
20
  import {
21
21
  trackFeatureCompleted
22
22
  } from "./chunk-6F5ULQDY.js";
@@ -57,13 +57,13 @@ import {
57
57
  CliError,
58
58
  isMachineFormat
59
59
  } from "./chunk-HGMYEDAQ.js";
60
- import "./chunk-ITOK75B6.js";
60
+ import "./chunk-2I22IUA3.js";
61
61
  import "./chunk-JAYUWQAV.js";
62
62
  import "./chunk-IBGZ6D6R.js";
63
63
  import {
64
64
  refreshSnapshotMentionIdentity,
65
65
  snapshotsWithSentimentResults
66
- } from "./chunk-EQGCGZZY.js";
66
+ } from "./chunk-W7DHXSXN.js";
67
67
  import "./chunk-VDYXB6SV.js";
68
68
  import "./chunk-GBWCEOZR.js";
69
69
  import {
@@ -9,8 +9,8 @@ import {
9
9
  resolveAeroModel,
10
10
  resolveConfiguredAgentProvider,
11
11
  resolveSessionProviderAndModel
12
- } from "./chunk-KOBOKZXF.js";
13
- import "./chunk-EJZHL67Y.js";
12
+ } from "./chunk-ECZGTJIQ.js";
13
+ import "./chunk-RSPOFH66.js";
14
14
  import {
15
15
  resolveAeroSkillDir
16
16
  } from "./chunk-MTW37GXF.js";
@@ -26,7 +26,7 @@ import "./chunk-MNLAIB67.js";
26
26
  import "./chunk-AOJU5LKX.js";
27
27
  import "./chunk-HGMYEDAQ.js";
28
28
  import "./chunk-IBGZ6D6R.js";
29
- import "./chunk-EQGCGZZY.js";
29
+ import "./chunk-W7DHXSXN.js";
30
30
  import "./chunk-VDYXB6SV.js";
31
31
  import "./chunk-GBWCEOZR.js";
32
32
  import "./chunk-O26FQ7RI.js";
@@ -11,7 +11,7 @@ import {
11
11
  buildAllTools,
12
12
  buildReadTools,
13
13
  isAeroToolProfile
14
- } from "./chunk-EJZHL67Y.js";
14
+ } from "./chunk-RSPOFH66.js";
15
15
  import "./chunk-TEQF4ZJA.js";
16
16
  import "./chunk-2FJB3CSS.js";
17
17
  import "./chunk-TN53B5AB.js";
@@ -19,7 +19,7 @@ import "./chunk-GXTCDNX7.js";
19
19
  import "./chunk-MNLAIB67.js";
20
20
  import "./chunk-AOJU5LKX.js";
21
21
  import "./chunk-HGMYEDAQ.js";
22
- import "./chunk-EQGCGZZY.js";
22
+ import "./chunk-W7DHXSXN.js";
23
23
  import "./chunk-VDYXB6SV.js";
24
24
  import "./chunk-GBWCEOZR.js";
25
25
  import "./chunk-O26FQ7RI.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canonry/canonry",
3
- "version": "7.87.0",
3
+ "version": "7.87.1",
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": [