@canonry/canonry 4.157.0 → 4.158.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 (26) hide show
  1. package/assets/assets/{AuditHistoryPanel-D12lHs6n.js → AuditHistoryPanel-McQfjoU9.js} +1 -1
  2. package/assets/assets/{BacklinksPage-D2ScFYru.js → BacklinksPage-Da8y1Wv8.js} +1 -1
  3. package/assets/assets/{HistoryPage-jZ_I4rwX.js → HistoryPage-9MJfhRyT.js} +1 -1
  4. package/assets/assets/{MeasurementPropertyPage-BIdQjXJT.js → MeasurementPropertyPage-BiNAHEJW.js} +1 -1
  5. package/assets/assets/ProjectPage-mWSMjXrR.js +15 -0
  6. package/assets/assets/{RunRow-Q2X0NR74.js → RunRow-DCG2LBlS.js} +1 -1
  7. package/assets/assets/{RunsPage-Cw7YVsbJ.js → RunsPage-ByWA_FSk.js} +1 -1
  8. package/assets/assets/{SettingsPage-bFl2EXOD.js → SettingsPage-DdSeKAKF.js} +1 -1
  9. package/assets/assets/{TrafficPage-DJjhk7Jw.js → TrafficPage-5u8rPcBt.js} +1 -1
  10. package/assets/assets/{TrafficSourceDetailPage-CGKwIu9A.js → TrafficSourceDetailPage-Dm-fK87u.js} +1 -1
  11. package/assets/assets/{extract-error-message-BHm98tXH.js → extract-error-message-CtxkAd6E.js} +1 -1
  12. package/assets/assets/{index-VO6nKq5b.js → index-DUfg50Pl.js} +25 -25
  13. package/assets/assets/index-cXb3mfeQ.css +1 -0
  14. package/assets/assets/{react-sigma_core.esm.min-EzswMBkr.js → react-sigma_core.esm.min-ComIyDKi.js} +1 -1
  15. package/assets/index.html +2 -2
  16. package/dist/{chunk-AEIKAWOW.js → chunk-4VZP64GZ.js} +189 -11
  17. package/dist/{chunk-TRRVBTU5.js → chunk-DEVAEC2S.js} +50 -1
  18. package/dist/{chunk-KMTRO56O.js → chunk-LK6YFHG4.js} +1 -1
  19. package/dist/{chunk-MEBL4EJO.js → chunk-YP4K2KXH.js} +114 -21
  20. package/dist/cli.js +4 -4
  21. package/dist/index.js +4 -4
  22. package/dist/{intelligence-service-YUUPSJRC.js → intelligence-service-LQ6ZRWMF.js} +2 -2
  23. package/dist/mcp.js +2 -2
  24. package/package.json +11 -10
  25. package/assets/assets/ProjectPage-CLvLOOtj.js +0 -15
  26. package/assets/assets/index-BxegEwic.css +0 -1
@@ -10,7 +10,7 @@ import {
10
10
  loadConfig,
11
11
  loadConfigRaw,
12
12
  saveConfigPatch
13
- } from "./chunk-KMTRO56O.js";
13
+ } from "./chunk-LK6YFHG4.js";
14
14
  import {
15
15
  CC_CACHE_DIR,
16
16
  DUCKDB_SPEC,
@@ -136,7 +136,7 @@ import {
136
136
  siteCrawlSnapshots,
137
137
  toAlertView,
138
138
  usageCounters
139
- } from "./chunk-MEBL4EJO.js";
139
+ } from "./chunk-YP4K2KXH.js";
140
140
  import {
141
141
  AGENT_MEMORY_VALUE_MAX_BYTES,
142
142
  AGENT_PROVIDER_IDS,
@@ -236,7 +236,7 @@ import {
236
236
  validationError,
237
237
  winnabilityClassLabel,
238
238
  withRetry
239
- } from "./chunk-TRRVBTU5.js";
239
+ } from "./chunk-DEVAEC2S.js";
240
240
 
241
241
  // src/telemetry.ts
242
242
  import crypto from "crypto";
@@ -7004,7 +7004,6 @@ import { createRequire as createRequire3 } from "module";
7004
7004
  import { Worker } from "worker_threads";
7005
7005
  import { and as and10, asc, count, desc as desc6, eq as eq13, isNull, ne as ne2, or, sql as sql5 } from "drizzle-orm";
7006
7006
  import { alias } from "drizzle-orm/sqlite-core";
7007
- var SITE_CRAWL_GRAPH_LAYOUT_VERSION = "site-health-fa2-v1";
7008
7007
  var SITE_CRAWL_GRAPH_LAYOUT_TIMEOUT_MS = 15e3;
7009
7008
  var SITE_CRAWL_GRAPH_SEED_SCALE = 100;
7010
7009
  var graphSourcePage = alias(siteCrawlPages, "layout_graph_source_page");
@@ -7014,20 +7013,81 @@ var FORCE_ATLAS_SETTINGS = Object.freeze({
7014
7013
  barnesHutOptimize: true,
7015
7014
  barnesHutTheta: 0.5,
7016
7015
  edgeWeightInfluence: 0.5,
7017
- gravity: 1,
7018
- linLogMode: false,
7019
- outboundAttractionDistribution: false,
7020
- scalingRatio: 10,
7016
+ gravity: 0.2,
7017
+ linLogMode: true,
7018
+ outboundAttractionDistribution: true,
7019
+ scalingRatio: 2,
7021
7020
  slowDown: 10,
7022
7021
  strongGravityMode: false
7023
7022
  });
7023
+ var RENDER_MAX_NODE_SIZE = 14;
7024
+ var RENDER_HALF_EXTENT_PX = 420;
7025
+ var NODE_SIZE_EXTENT_FRACTION = RENDER_MAX_NODE_SIZE / RENDER_HALF_EXTENT_PX;
7026
+ var NOVERLAP_SETTINGS = Object.freeze({
7027
+ /** Half a node of clear space between two touching nodes. */
7028
+ marginFactor: 0.5,
7029
+ expansion: 1.1,
7030
+ ratio: 1,
7031
+ speed: 3,
7032
+ /**
7033
+ * Node discs may claim at most this share of the graph's bounding box. At
7034
+ * the 20k cap the extent-derived size asks for spacing the graph physically
7035
+ * does not have, and noverlap either runs for minutes or overflows its
7036
+ * collision set. This bound keeps the pass solvable at every graph size,
7037
+ * and it only binds on graphs far too dense to read node-by-node anyway.
7038
+ */
7039
+ maxPackingFraction: 0.15,
7040
+ /** Cells hold a handful of nodes each, which is what keeps the pass linear. */
7041
+ gridSizeMin: 10,
7042
+ gridSizeMax: 200,
7043
+ iterationLadder: [
7044
+ { maxNodes: 1e3, iterations: 120 },
7045
+ { maxNodes: 5e3, iterations: 60 }
7046
+ ],
7047
+ iterationsFloor: 20
7048
+ });
7049
+ function noverlapGridSize(nodeCount) {
7050
+ return Math.max(
7051
+ NOVERLAP_SETTINGS.gridSizeMin,
7052
+ Math.min(NOVERLAP_SETTINGS.gridSizeMax, Math.ceil(Math.sqrt(Math.max(1, nodeCount))))
7053
+ );
7054
+ }
7055
+ function noverlapMaxIterations(nodeCount) {
7056
+ for (const step of NOVERLAP_SETTINGS.iterationLadder) {
7057
+ if (nodeCount <= step.maxNodes) return step.iterations;
7058
+ }
7059
+ return NOVERLAP_SETTINGS.iterationsFloor;
7060
+ }
7061
+ var OUTLIER_RING_INNER_FACTOR = 1.25;
7062
+ var OUTLIER_RING_OUTER_FACTOR = 1.75;
7063
+ var OUTLIER_RING_MAX_RINGS = 4;
7064
+ var OUTLIER_RING_TARGET_PER_RING = 16;
7065
+ var OUTLIER_RING_MIN_RADIUS = 1;
7066
+ function siteCrawlGraphLayoutSettingsFingerprint(settings) {
7067
+ return crypto16.createHash("sha256").update(JSON.stringify(settings)).digest("hex").slice(0, 8);
7068
+ }
7069
+ var SITE_CRAWL_GRAPH_LAYOUT_ALGORITHM = "site-health-fa2-v2";
7070
+ var SITE_CRAWL_GRAPH_LAYOUT_VERSION = `${SITE_CRAWL_GRAPH_LAYOUT_ALGORITHM}-${siteCrawlGraphLayoutSettingsFingerprint({
7071
+ forceAtlas: FORCE_ATLAS_SETTINGS,
7072
+ noverlap: NOVERLAP_SETTINGS,
7073
+ nodeSizeExtentFraction: NODE_SIZE_EXTENT_FRACTION,
7074
+ outlierRing: {
7075
+ inner: OUTLIER_RING_INNER_FACTOR,
7076
+ outer: OUTLIER_RING_OUTER_FACTOR,
7077
+ maxRings: OUTLIER_RING_MAX_RINGS,
7078
+ targetPerRing: OUTLIER_RING_TARGET_PER_RING,
7079
+ minRadius: OUTLIER_RING_MIN_RADIUS
7080
+ }
7081
+ })}`;
7024
7082
  var WORKER_SOURCE = String.raw`
7025
7083
  const {parentPort, workerData} = require('node:worker_threads');
7026
7084
  try {
7027
7085
  const graphologyModule = require(workerData.graphologyPath);
7028
7086
  const forceAtlasModule = require(workerData.forceAtlasPath);
7087
+ const noverlapModule = require(workerData.noverlapPath);
7029
7088
  const MultiDirectedGraph = graphologyModule.MultiDirectedGraph;
7030
7089
  const forceAtlas2 = forceAtlasModule.default || forceAtlasModule;
7090
+ const noverlap = noverlapModule.default || noverlapModule;
7031
7091
  const graph = new MultiDirectedGraph({allowSelfLoops: true});
7032
7092
  for (const node of workerData.input.nodes) {
7033
7093
  graph.addNode(node.nodeKey, {x: node.x, y: node.y});
@@ -7043,6 +7103,45 @@ try {
7043
7103
  settings: workerData.settings,
7044
7104
  });
7045
7105
  }
7106
+ // Anti-overlap runs on the spatialization ForceAtlas2 just produced. Node
7107
+ // size is uniform and derived from the graph's own extent, so the pass is
7108
+ // scale invariant and stays deterministic for a fixed input.
7109
+ if (graph.order > 1) {
7110
+ let sumX = 0;
7111
+ let sumY = 0;
7112
+ graph.forEachNode(function (nodeKey, attributes) {
7113
+ sumX += attributes.x;
7114
+ sumY += attributes.y;
7115
+ });
7116
+ const centerX = sumX / graph.order;
7117
+ const centerY = sumY / graph.order;
7118
+ let extent = 0;
7119
+ graph.forEachNode(function (nodeKey, attributes) {
7120
+ extent = Math.max(extent, Math.abs(attributes.x - centerX), Math.abs(attributes.y - centerY));
7121
+ });
7122
+ if (Number.isFinite(extent) && extent > 0) {
7123
+ // Whichever bound is tighter: one render-sized node, or the largest disc
7124
+ // that still leaves the graph mostly empty space at this node count.
7125
+ const byExtent = extent * workerData.nodeSizeExtentFraction;
7126
+ const byArea = Math.sqrt(
7127
+ (workerData.noverlap.maxPackingFraction * Math.pow(2 * extent, 2)) / graph.order,
7128
+ ) / 2;
7129
+ const nodeSize = Math.min(byExtent, byArea);
7130
+ graph.forEachNode(function (nodeKey) {
7131
+ graph.setNodeAttribute(nodeKey, 'size', nodeSize);
7132
+ });
7133
+ noverlap.assign(graph, {
7134
+ maxIterations: workerData.noverlap.maxIterations,
7135
+ settings: {
7136
+ gridSize: workerData.noverlap.gridSize,
7137
+ margin: nodeSize * workerData.noverlap.marginFactor,
7138
+ expansion: workerData.noverlap.expansion,
7139
+ ratio: workerData.noverlap.ratio,
7140
+ speed: workerData.noverlap.speed,
7141
+ },
7142
+ });
7143
+ }
7144
+ }
7046
7145
  const positions = [];
7047
7146
  graph.forEachNode((nodeKey, attributes) => {
7048
7147
  positions.push({nodeKey, x: attributes.x, y: attributes.y});
@@ -7113,8 +7212,15 @@ async function computeForceAtlasPositions(input, options = {}) {
7113
7212
  workerData: {
7114
7213
  graphologyPath: requireFromPackage.resolve("graphology"),
7115
7214
  forceAtlasPath: requireFromPackage.resolve("graphology-layout-forceatlas2"),
7215
+ noverlapPath: requireFromPackage.resolve("graphology-layout-noverlap"),
7116
7216
  input,
7117
- settings: FORCE_ATLAS_SETTINGS
7217
+ settings: FORCE_ATLAS_SETTINGS,
7218
+ noverlap: {
7219
+ ...NOVERLAP_SETTINGS,
7220
+ gridSize: noverlapGridSize(input.nodes.length),
7221
+ maxIterations: noverlapMaxIterations(input.nodes.length)
7222
+ },
7223
+ nodeSizeExtentFraction: NODE_SIZE_EXTENT_FRACTION
7118
7224
  }
7119
7225
  });
7120
7226
  const timeoutMs = options.timeoutMs ?? SITE_CRAWL_GRAPH_LAYOUT_TIMEOUT_MS;
@@ -7143,6 +7249,77 @@ async function computeForceAtlasPositions(input, options = {}) {
7143
7249
  });
7144
7250
  });
7145
7251
  }
7252
+ function siteCrawlGraphComponents(nodeKeys, edges) {
7253
+ const parent = new Map(nodeKeys.map((key) => [key, key]));
7254
+ const find = (key) => {
7255
+ let root = key;
7256
+ while (parent.get(root) !== root) root = parent.get(root);
7257
+ let cursor = key;
7258
+ while (parent.get(cursor) !== root) {
7259
+ const next = parent.get(cursor);
7260
+ parent.set(cursor, root);
7261
+ cursor = next;
7262
+ }
7263
+ return root;
7264
+ };
7265
+ for (const edge of edges) {
7266
+ if (!parent.has(edge.sourceNodeKey) || !parent.has(edge.targetNodeKey)) continue;
7267
+ const sourceRoot = find(edge.sourceNodeKey);
7268
+ const targetRoot = find(edge.targetNodeKey);
7269
+ if (sourceRoot === targetRoot) continue;
7270
+ if (sourceRoot < targetRoot) parent.set(targetRoot, sourceRoot);
7271
+ else parent.set(sourceRoot, targetRoot);
7272
+ }
7273
+ const members = /* @__PURE__ */ new Map();
7274
+ for (const key of [...nodeKeys].sort()) {
7275
+ const root = find(key);
7276
+ const group = members.get(root);
7277
+ if (group) group.push(key);
7278
+ else members.set(root, [key]);
7279
+ }
7280
+ let mainRoot = null;
7281
+ for (const [root, group] of members) {
7282
+ if (mainRoot === null) {
7283
+ mainRoot = root;
7284
+ continue;
7285
+ }
7286
+ const best = members.get(mainRoot);
7287
+ if (group.length > best.length || group.length === best.length && root < mainRoot) mainRoot = root;
7288
+ }
7289
+ const main = new Set(mainRoot === null ? [] : members.get(mainRoot));
7290
+ const outliers = [...members.entries()].filter(([root]) => root !== mainRoot).sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).flatMap(([, group]) => group);
7291
+ return { main, outliers };
7292
+ }
7293
+ function frameDisconnectedNodes(positions, edges) {
7294
+ const { main, outliers } = siteCrawlGraphComponents(positions.map((p) => p.nodeKey), edges);
7295
+ if (outliers.length === 0 || main.size === 0) return [...positions];
7296
+ const mainPositions = positions.filter((position) => main.has(position.nodeKey));
7297
+ const centerX = mainPositions.reduce((sum, p) => sum + p.x, 0) / mainPositions.length;
7298
+ const centerY = mainPositions.reduce((sum, p) => sum + p.y, 0) / mainPositions.length;
7299
+ if (!Number.isFinite(centerX) || !Number.isFinite(centerY)) return [...positions];
7300
+ const mainRadius = Math.max(
7301
+ OUTLIER_RING_MIN_RADIUS,
7302
+ ...mainPositions.map((p) => Math.hypot(p.x - centerX, p.y - centerY)).filter(Number.isFinite)
7303
+ );
7304
+ const ringCount = Math.max(1, Math.min(
7305
+ OUTLIER_RING_MAX_RINGS,
7306
+ Math.ceil(outliers.length / OUTLIER_RING_TARGET_PER_RING)
7307
+ ));
7308
+ const placed = /* @__PURE__ */ new Map();
7309
+ for (const [index, nodeKey] of outliers.entries()) {
7310
+ const ring = index % ringCount;
7311
+ const ringRadius = mainRadius * (ringCount === 1 ? OUTLIER_RING_INNER_FACTOR : OUTLIER_RING_INNER_FACTOR + (OUTLIER_RING_OUTER_FACTOR - OUTLIER_RING_INNER_FACTOR) * (ring / (ringCount - 1)));
7312
+ const slot = Math.floor(index / ringCount);
7313
+ const slotsOnRing = Math.ceil((outliers.length - ring) / ringCount);
7314
+ const angle = (slot + ring % 2 * 0.5) / Math.max(1, slotsOnRing) * Math.PI * 2;
7315
+ placed.set(nodeKey, {
7316
+ nodeKey,
7317
+ x: centerX + Math.cos(angle) * ringRadius,
7318
+ y: centerY + Math.sin(angle) * ringRadius
7319
+ });
7320
+ }
7321
+ return positions.map((position) => placed.get(position.nodeKey) ?? position);
7322
+ }
7146
7323
  function normalizePositions(seededNodes, computed, rootNodeKey) {
7147
7324
  const byKey = new Map(computed.map((position) => [position.nodeKey, position]));
7148
7325
  if (byKey.size !== seededNodes.length) throw new Error("Graph layout returned an incomplete node set");
@@ -7190,6 +7367,7 @@ async function layoutSiteCrawlGraphInput(input, options = {}) {
7190
7367
  iterations: adaptiveForceAtlasIterations(input.nodes.length, input.edges.length)
7191
7368
  }, { signal: options.signal, timeoutMs: options.timeoutMs });
7192
7369
  options.signal?.throwIfAborted();
7370
+ const framed = frameDisconnectedNodes(positions, input.edges);
7193
7371
  return {
7194
7372
  state: "ready",
7195
7373
  layoutVersion: SITE_CRAWL_GRAPH_LAYOUT_VERSION,
@@ -7197,7 +7375,7 @@ async function layoutSiteCrawlGraphInput(input, options = {}) {
7197
7375
  totalEdges: input.totalEdges,
7198
7376
  nodeCount: input.nodes.length,
7199
7377
  edgeCount: input.edges.length,
7200
- nodes: normalizePositions(seeded, positions, input.rootNodeKey),
7378
+ nodes: normalizePositions(seeded, framed, input.rootNodeKey),
7201
7379
  edges: input.edges.map((edge, sampleRank) => ({ ...edge, sampleRank }))
7202
7380
  };
7203
7381
  } catch (error) {
@@ -8472,7 +8650,7 @@ function readStoredGroundingSources(rawResponse) {
8472
8650
  return result;
8473
8651
  }
8474
8652
  async function backfillInsightsCommand(project, opts) {
8475
- const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-YUUPSJRC.js");
8653
+ const { IntelligenceService: IntelligenceService2 } = await import("./intelligence-service-LQ6ZRWMF.js");
8476
8654
  const config = loadConfig();
8477
8655
  const db = createClient(config.database);
8478
8656
  migrate(db);
@@ -8561,7 +8561,24 @@ var siteCrawlSummarySchema = z24.object({
8561
8561
  counts: siteCrawlCountsSchema,
8562
8562
  deadLinks: siteCrawlDeadLinksSummarySchema
8563
8563
  });
8564
+ var siteCrawlTerminationSchema = z24.enum([
8565
+ "complete",
8566
+ "unknown",
8567
+ "max-pages",
8568
+ "max-edges",
8569
+ "max-fetches",
8570
+ "max-duration",
8571
+ "max-bytes",
8572
+ "max-page-bytes",
8573
+ "max-depth",
8574
+ "max-links-per-page",
8575
+ "max-query-variants",
8576
+ "max-sitemap-fanout",
8577
+ "max-sitemap-urls",
8578
+ "root-host-redirect"
8579
+ ]);
8564
8580
  var siteHealthStateSchema = z24.enum(["eligible", "hidden", "failed", "unchecked"]);
8581
+ var SiteHealthStates = siteHealthStateSchema.enum;
8565
8582
  var SiteCrawlFetchStates = {
8566
8583
  discovered: "discovered",
8567
8584
  robotsBlocked: "robots-blocked",
@@ -8762,6 +8779,13 @@ var siteCrawlGraphEdgeSchema = z24.object({
8762
8779
  followable: z24.boolean(),
8763
8780
  occurrences: z24.number().int().positive()
8764
8781
  });
8782
+ var siteCrawlGraphLayoutUnavailableReasonSchema = z24.enum([
8783
+ "no-crawl",
8784
+ "legacy-snapshot",
8785
+ "details-unavailable",
8786
+ "layout-failed",
8787
+ "empty-crawl"
8788
+ ]);
8765
8789
  var siteCrawlGraphLayoutSchema = z24.discriminatedUnion("state", [
8766
8790
  z24.object({
8767
8791
  state: z24.literal("ready"),
@@ -8771,13 +8795,20 @@ var siteCrawlGraphLayoutSchema = z24.discriminatedUnion("state", [
8771
8795
  z24.object({
8772
8796
  state: z24.literal("unavailable"),
8773
8797
  version: z24.null(),
8774
- reason: z24.enum(["no-crawl", "legacy-snapshot", "details-unavailable", "layout-failed", "empty-crawl"])
8798
+ reason: siteCrawlGraphLayoutUnavailableReasonSchema
8775
8799
  })
8776
8800
  ]);
8777
8801
  var siteCrawlGraphResponseSchema = z24.object({
8778
8802
  project: z24.string(),
8779
8803
  hasCrawlData: z24.boolean(),
8780
8804
  runId: z24.string().nullable(),
8805
+ /**
8806
+ * Server-owned identity of the crawl root, resolved from the snapshot root
8807
+ * URL (or the depth-0 page). Consumers must not infer the home page from a
8808
+ * path or a link score. It is null when the crawl persisted no page detail,
8809
+ * and it can name a page that graph sampling left out of `nodes`.
8810
+ */
8811
+ rootNodeKey: z24.string().nullable(),
8781
8812
  layout: siteCrawlGraphLayoutSchema,
8782
8813
  /** Total canonical pages in the persisted crawl before graph sampling. */
8783
8814
  totalNodes: z24.number().int().nonnegative(),
@@ -9020,6 +9051,20 @@ var siteAuditRunResponseSchema = z24.object({
9020
9051
  runId: z24.string(),
9021
9052
  status: runStatusSchema
9022
9053
  });
9054
+ var siteHealthScanSchema = z24.object({
9055
+ runId: z24.string(),
9056
+ status: runStatusSchema,
9057
+ createdAt: z24.string(),
9058
+ startedAt: z24.string().nullable(),
9059
+ finishedAt: z24.string().nullable(),
9060
+ hasCrawlData: z24.boolean()
9061
+ });
9062
+ var siteHealthScansResponseSchema = z24.object({
9063
+ project: z24.string(),
9064
+ scans: z24.array(siteHealthScanSchema).default([])
9065
+ });
9066
+ var SITE_HEALTH_SCANS_DEFAULT_LIMIT = 20;
9067
+ var SITE_HEALTH_SCANS_MAX_LIMIT = 100;
9023
9068
 
9024
9069
  // ../contracts/src/schedule.ts
9025
9070
  import { z as z25 } from "zod";
@@ -14699,6 +14744,7 @@ export {
14699
14744
  siteAuditPagesResponseSchema,
14700
14745
  siteAuditTrendResponseSchema,
14701
14746
  siteCrawlSummarySchema,
14747
+ siteHealthStateSchema,
14702
14748
  SiteCrawlFetchedStates,
14703
14749
  deriveSiteHealthState,
14704
14750
  siteCrawlAuditFactorSchema,
@@ -14734,6 +14780,9 @@ export {
14734
14780
  normalizeSiteAuditRunRequest,
14735
14781
  siteAuditRequestIdentity,
14736
14782
  siteAuditRunResponseSchema,
14783
+ siteHealthScansResponseSchema,
14784
+ SITE_HEALTH_SCANS_DEFAULT_LIMIT,
14785
+ SITE_HEALTH_SCANS_MAX_LIMIT,
14737
14786
  schedulableRunKindSchema,
14738
14787
  SchedulableRunKinds,
14739
14788
  scheduleDtoSchema,
@@ -81,7 +81,7 @@ import {
81
81
  trafficConnectWordpressRequestSchema,
82
82
  trafficEventKindSchema,
83
83
  trafficSeriesGranularitySchema
84
- } from "./chunk-TRRVBTU5.js";
84
+ } from "./chunk-DEVAEC2S.js";
85
85
 
86
86
  // src/config.ts
87
87
  import fs from "fs";