@canonry/canonry 7.13.0 → 7.14.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 (33) hide show
  1. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +14 -7
  2. package/assets/assets/AuditHistoryPanel-gAkqWz9z.js +1 -0
  3. package/assets/assets/{BacklinksPage-BQxB_eFt.js → BacklinksPage-C67DtHo8.js} +1 -1
  4. package/assets/assets/{HistoryPage-DgGUM2tr.js → HistoryPage-BQuW6Z6m.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-Cl91vUu5.js → MeasurementPropertyPage-B1XS6DR0.js} +1 -1
  6. package/assets/assets/ProjectPage-CV_7bOA7.js +8 -0
  7. package/assets/assets/{RunsPage-BtjVuurK.js → RunsPage-CJYihZYC.js} +1 -1
  8. package/assets/assets/SettingsPage-Dd3J2DQE.js +1 -0
  9. package/assets/assets/{SiteHealthSection-DMHWsfM4.js → SiteHealthSection-iktyuzt2.js} +3 -3
  10. package/assets/assets/{TrafficPage-Bf0NkbIR.js → TrafficPage-CWjK7F3j.js} +2 -2
  11. package/assets/assets/{TrafficSourceDetailPage-BtwOdTAO.js → TrafficSourceDetailPage-D4_AXQNE.js} +1 -1
  12. package/assets/assets/{extract-error-message-Cyc59Xi7.js → extract-error-message-Cxefvthz.js} +1 -1
  13. package/assets/assets/{index-DR_kNdE4.js → index-BbmiGIM_.js} +27 -27
  14. package/assets/assets/{index-D4QB1Igv.css → index-aBS1f2Bj.css} +1 -1
  15. package/assets/assets/{react-sigma_core.esm.min-CFB4bYg_.js → react-sigma_core.esm.min-DDEPa7AV.js} +1 -1
  16. package/assets/assets/{v2-overview-adapter-CLF10Pij.js → v2-overview-adapter-CLxlMdb2.js} +1 -1
  17. package/assets/index.html +2 -2
  18. package/dist/{chunk-BTHEFJCI.js → chunk-4LQ4HKVK.js} +5 -5
  19. package/dist/{chunk-AU7OUDWR.js → chunk-A25FO3Z5.js} +64 -13
  20. package/dist/{chunk-GQMSJEMZ.js → chunk-EZRBFH77.js} +233 -54
  21. package/dist/{chunk-GBH7N3VZ.js → chunk-KXHPQMBP.js} +93 -31
  22. package/dist/{chunk-EPSHIH63.js → chunk-LUQ5G5OO.js} +3 -3
  23. package/dist/{chunk-7I64KEGM.js → chunk-WHVEDCHY.js} +2 -2
  24. package/dist/{chunk-SM6ZZAPK.js → chunk-ZHXOR2LJ.js} +2 -2
  25. package/dist/cli.js +1300 -1244
  26. package/dist/{demo-server-WJUA4EIG.js → demo-server-SIATTXXS.js} +4 -4
  27. package/dist/index.js +6 -6
  28. package/dist/{intelligence-service-DJRH4Z3D.js → intelligence-service-UEEVETII.js} +2 -2
  29. package/dist/mcp.js +4 -4
  30. package/package.json +11 -11
  31. package/assets/assets/AuditHistoryPanel-BYxGn9mS.js +0 -1
  32. package/assets/assets/ProjectPage-B_S900QN.js +0 -8
  33. package/assets/assets/SettingsPage-p0x0ZwGY.js +0 -1
@@ -20,20 +20,20 @@ import {
20
20
  saveConfig,
21
21
  saveConfigPatch,
22
22
  sentimentInstallReadiness
23
- } from "./chunk-SM6ZZAPK.js";
23
+ } from "./chunk-ZHXOR2LJ.js";
24
24
  import {
25
25
  computeFactorAverages,
26
26
  deleteSiteCrawlGraphLayout,
27
27
  persistSiteCrawlGraphLayout,
28
28
  prepareSiteCrawlGraphLayout,
29
29
  recordedSharePct
30
- } from "./chunk-7I64KEGM.js";
30
+ } from "./chunk-WHVEDCHY.js";
31
31
  import {
32
32
  CanonryMcpToolNames,
33
33
  CliError,
34
34
  PACKAGE_VERSION,
35
35
  canonryMcpTools
36
- } from "./chunk-BTHEFJCI.js";
36
+ } from "./chunk-4LQ4HKVK.js";
37
37
  import {
38
38
  CC_CACHE_DIR,
39
39
  DUCKDB_SPEC,
@@ -217,7 +217,7 @@ import {
217
217
  siteLivenessState,
218
218
  toAlertView,
219
219
  usageCounters
220
- } from "./chunk-GQMSJEMZ.js";
220
+ } from "./chunk-EZRBFH77.js";
221
221
  import {
222
222
  AGENT_MEMORY_VALUE_MAX_BYTES,
223
223
  AGENT_NONE,
@@ -309,7 +309,6 @@ import {
309
309
  canonicalizeGtmContainerId,
310
310
  canonicalizeGtmResourceSelection,
311
311
  classifyProviderErrorMessage,
312
- classifyProviderErrorMessages,
313
312
  classifyTemplateLinkEdge,
314
313
  cloudflareQueueNameSchema,
315
314
  compareSemver,
@@ -378,6 +377,7 @@ import {
378
377
  maskTelemetryAnonymousId,
379
378
  matcherMatchesText,
380
379
  missingDependency,
380
+ mostActionableProviderErrorCode,
381
381
  nextScheduleUpdatedAt,
382
382
  normalizeAgentSlug,
383
383
  normalizeIdTokens,
@@ -428,8 +428,9 @@ import {
428
428
  validationError,
429
429
  visibilityReportRequestSchema,
430
430
  winnabilityClassLabel,
431
- withRetry
432
- } from "./chunk-AU7OUDWR.js";
431
+ withRetry,
432
+ withSkippedProviders
433
+ } from "./chunk-A25FO3Z5.js";
433
434
 
434
435
  // src/runtime-context.ts
435
436
  function cliRuntimeContext(env = process.env, stdio = process) {
@@ -8041,7 +8042,7 @@ function nonBlank(value) {
8041
8042
  return trimmed ? trimmed : void 0;
8042
8043
  }
8043
8044
  function resolveBuildCommit(env = process.env) {
8044
- const embedded = true ? "c2de5a23906b2d9fff8c2543a55d52dd9cbcb889" : void 0;
8045
+ const embedded = true ? "8eb9720cf39e4787ffa530b4083372db8c39ae8f" : void 0;
8045
8046
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
8046
8047
  }
8047
8048
  function resolveInstanceIdentity(env = process.env) {
@@ -8123,12 +8124,17 @@ function buildSiteAuditCompletedProps(input) {
8123
8124
  return props;
8124
8125
  }
8125
8126
  var MAX_NESTED_KEYS = 12;
8126
- function buildProviderOutcomeProps(providers, providerErrors) {
8127
- if (providerErrors.size === 0) return {};
8128
- const names = [.../* @__PURE__ */ new Set([...providers, ...providerErrors.keys()])].slice(0, MAX_NESTED_KEYS);
8127
+ function buildProviderOutcomeProps(providers, providerErrors, skippedProviders = []) {
8128
+ if (providerErrors.size === 0 && skippedProviders.length === 0) return {};
8129
+ const skipped = new Set(skippedProviders);
8130
+ const names = [.../* @__PURE__ */ new Set([...providers, ...providerErrors.keys(), ...skipped])].slice(0, MAX_NESTED_KEYS);
8129
8131
  const providerOutcomes = {};
8130
8132
  const providerHttpStatus = {};
8131
8133
  for (const name of names) {
8134
+ if (skipped.has(name)) {
8135
+ providerOutcomes[name] = "skipped";
8136
+ continue;
8137
+ }
8132
8138
  const message = providerErrors.get(name);
8133
8139
  if (message === void 0) {
8134
8140
  providerOutcomes[name] = "ok";
@@ -8140,6 +8146,20 @@ function buildProviderOutcomeProps(providers, providerErrors) {
8140
8146
  }
8141
8147
  return Object.keys(providerHttpStatus).length > 0 ? { providerOutcomes, providerHttpStatus } : { providerOutcomes };
8142
8148
  }
8149
+ function buildRunRefusedProps(input) {
8150
+ const outcomes = Object.entries(input.providers).slice(0, MAX_NESTED_KEYS);
8151
+ const props = {
8152
+ reason: "providers_failing",
8153
+ providerCount: Object.keys(input.providers).length,
8154
+ providers: Object.keys(input.providers),
8155
+ providerOutcomes: Object.fromEntries(outcomes),
8156
+ trigger: input.trigger
8157
+ };
8158
+ const domainHash = hashDomain(input.canonicalDomain ?? null);
8159
+ if (domainHash) props.domainHash = domainHash;
8160
+ if (input.location) props.location = input.location;
8161
+ return props;
8162
+ }
8143
8163
  function runFailureSite(providerCallStart, providerCallEnd) {
8144
8164
  if (providerCallStart === void 0) return "setup";
8145
8165
  return providerCallEnd === void 0 ? "provider_call" : "finalize";
@@ -8455,12 +8475,16 @@ function chunkBatchLines(lines, maxRequests, maxBytes) {
8455
8475
  if (current.length > 0) chunks.push(current);
8456
8476
  return { chunks, oversized };
8457
8477
  }
8458
- function runOutcome(inserted, providerErrors, planShortfall) {
8459
- const someFailed = providerErrors.size > 0 || planShortfall > 0;
8478
+ function calledProviderErrors(providerErrors, skipped) {
8479
+ return new Map([...providerErrors].filter(([provider]) => !(provider in skipped)));
8480
+ }
8481
+ function runOutcome(inserted, providerErrors, planShortfall, skipped) {
8482
+ const errors = calledProviderErrors(providerErrors, skipped);
8483
+ const someFailed = errors.size > 0 || planShortfall > 0 || Object.keys(skipped).length > 0;
8460
8484
  const allFailed = inserted === 0 && someFailed;
8461
8485
  return {
8462
8486
  status: allFailed ? RunStatuses.failed : someFailed ? RunStatuses.partial : RunStatuses.completed,
8463
- error: someFailed ? serializeRunError(buildProviderRunError(providerErrors)) : null
8487
+ error: someFailed ? serializeRunError(withSkippedProviders(buildProviderRunError(errors), skipped)) : null
8464
8488
  };
8465
8489
  }
8466
8490
  function runRecordingContext(db, input) {
@@ -8518,8 +8542,12 @@ function classifyRunAbortReason(message) {
8518
8542
  return void 0;
8519
8543
  }
8520
8544
  var FAILURE_STREAK_LOOKBACK = 50;
8521
- function classifyProviderErrors(errors) {
8522
- return classifyProviderErrorMessages(errors.values());
8545
+ function classifyProviderErrors(errors, skipped) {
8546
+ const codes = [
8547
+ ...[...errors.values()].map(classifyProviderErrorMessage),
8548
+ ...Object.values(skipped).map((streak) => streak.code)
8549
+ ];
8550
+ return codes.length > 0 ? mostActionableProviderErrorCode(codes) : void 0;
8523
8551
  }
8524
8552
  var JobRunner = class {
8525
8553
  /**
@@ -8739,7 +8767,14 @@ var JobRunner = class {
8739
8767
  if (activeProviders.length === 0) {
8740
8768
  throw new Error("No providers configured. Add at least one provider API key.");
8741
8769
  }
8742
- log2.info("run.dispatch", { runId, providerCount: activeProviders.length, providers: activeProviders.map((p) => p.adapter.name) });
8770
+ const skipped = existingRun.skippedProviders ?? {};
8771
+ const calledProviders = activeProviders.filter((provider) => !(provider.adapter.name in skipped));
8772
+ log2.info("run.dispatch", {
8773
+ runId,
8774
+ providerCount: calledProviders.length,
8775
+ providers: calledProviders.map((p) => p.adapter.name),
8776
+ ...Object.keys(skipped).length > 0 ? { skippedProviders: Object.keys(skipped) } : {}
8777
+ });
8743
8778
  const projectCompetitors = this.db.select().from(competitors).where(eq3(competitors.projectId, projectId)).orderBy(competitors.domain).all();
8744
8779
  const competitorDomains = projectCompetitors.map((c) => c.domain);
8745
8780
  recording = runRecordingContext(this.db, {
@@ -8761,7 +8796,7 @@ var JobRunner = class {
8761
8796
  };
8762
8797
  const queriesPerProvider = planExecution?.maxUnitsPerProvider ?? projectQueries.length;
8763
8798
  const todayPeriod = getCurrentUsageDay();
8764
- for (const p of activeProviders) {
8799
+ for (const p of calledProviders) {
8765
8800
  const providerScope = `${projectId}:${p.adapter.name}`;
8766
8801
  const limit = p.config.quotaPolicy.maxRequestsPerDay;
8767
8802
  const quota = reserveDailyQueryQuota(this.db, { scope: providerScope, period: todayPeriod, count: queriesPerProvider, limit });
@@ -8773,7 +8808,7 @@ var JobRunner = class {
8773
8808
  providerReservations.set(p.adapter.name, { scope: providerScope, period: todayPeriod, reserved: queriesPerProvider });
8774
8809
  }
8775
8810
  const executionGates = /* @__PURE__ */ new Map();
8776
- for (const provider of activeProviders) {
8811
+ for (const provider of calledProviders) {
8777
8812
  executionGates.set(
8778
8813
  provider.adapter.name,
8779
8814
  getSharedProviderExecutionGate(
@@ -8785,8 +8820,8 @@ var JobRunner = class {
8785
8820
  }
8786
8821
  const providerErrors = /* @__PURE__ */ new Map();
8787
8822
  let totalSnapshotsInserted = 0;
8788
- const apiProviders = activeProviders.filter((p) => !isBrowserProvider(p.adapter.name));
8789
- const browserProviders = activeProviders.filter((p) => isBrowserProvider(p.adapter.name));
8823
+ const apiProviders = calledProviders.filter((p) => !isBrowserProvider(p.adapter.name));
8824
+ const browserProviders = calledProviders.filter((p) => isBrowserProvider(p.adapter.name));
8790
8825
  const processQueryForProvider = async (registeredProvider, q) => {
8791
8826
  const { adapter, config } = registeredProvider;
8792
8827
  const providerName = adapter.name;
@@ -9052,7 +9087,7 @@ var JobRunner = class {
9052
9087
  for (const [provider, units] of planExecution.unitsByProvider) {
9053
9088
  const providerName = provider;
9054
9089
  const dispatched = providerDispatchCounts.get(providerName) ?? 0;
9055
- if (dispatched >= units.length || providerErrors.has(providerName)) continue;
9090
+ if (dispatched >= units.length || providerErrors.has(providerName) || providerName in skipped) continue;
9056
9091
  providerErrors.set(
9057
9092
  providerName,
9058
9093
  `No ${provider} provider was available to this worker, so ${units.length - dispatched} expected measurement(s) did not run.`
@@ -9077,6 +9112,7 @@ var JobRunner = class {
9077
9112
  inserted: totalSnapshotsInserted,
9078
9113
  providerErrors,
9079
9114
  planShortfall,
9115
+ skippedProviders: skipped,
9080
9116
  executionContext,
9081
9117
  startTime,
9082
9118
  phases: buildPhases({ startTime, providerCallStart, providerCallEnd }),
@@ -9181,7 +9217,7 @@ var JobRunner = class {
9181
9217
  */
9182
9218
  finalizeRun(input) {
9183
9219
  const { runId, providerErrors } = input;
9184
- const outcome = runOutcome(input.inserted, providerErrors, input.planShortfall);
9220
+ const outcome = runOutcome(input.inserted, providerErrors, input.planShortfall, input.skippedProviders ?? {});
9185
9221
  const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
9186
9222
  const won = this.db.transaction((tx) => {
9187
9223
  const changed = tx.update(runs).set({
@@ -9207,8 +9243,10 @@ var JobRunner = class {
9207
9243
  * post-run pipeline.
9208
9244
  */
9209
9245
  reportFinalizedRun(input, finalStatus) {
9210
- const { runId, projectId, providerErrors, executionContext } = input;
9211
- const failureCode = providerErrors.size > 0 ? classifyProviderErrors(providerErrors) : void 0;
9246
+ const { runId, projectId, executionContext } = input;
9247
+ const skippedProviders = input.skippedProviders ?? {};
9248
+ const providerErrors = calledProviderErrors(input.providerErrors, skippedProviders);
9249
+ const failureCode = classifyProviderErrors(providerErrors, skippedProviders);
9212
9250
  const sampling = failureStreakSampling(finalStatus, this.priorFailureStreak(projectId, runId), runId);
9213
9251
  if (sampling.report) {
9214
9252
  trackEvent(
@@ -9225,7 +9263,7 @@ var JobRunner = class {
9225
9263
  phases: input.phases,
9226
9264
  location: executionContext.location
9227
9265
  }),
9228
- ...buildProviderOutcomeProps(executionContext.providers, providerErrors),
9266
+ ...buildProviderOutcomeProps(executionContext.providers, providerErrors, Object.keys(skippedProviders)),
9229
9267
  ...sampling.props
9230
9268
  },
9231
9269
  failureCode ? { errorCode: failureCode } : void 0
@@ -9295,15 +9333,21 @@ var JobRunner = class {
9295
9333
  const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
9296
9334
  const decided = this.db.transaction((tx) => {
9297
9335
  const txDb = tx;
9298
- const run = txDb.select({ kind: runs.kind, status: runs.status, pendingProviderErrors: runs.pendingProviderErrors }).from(runs).where(and3(eq3(runs.id, runId), eq3(runs.projectId, projectId))).get();
9336
+ const run = txDb.select({
9337
+ kind: runs.kind,
9338
+ status: runs.status,
9339
+ pendingProviderErrors: runs.pendingProviderErrors,
9340
+ skippedProviders: runs.skippedProviders
9341
+ }).from(runs).where(and3(eq3(runs.id, runId), eq3(runs.projectId, projectId))).get();
9299
9342
  if (!run || run.status !== RunStatuses.running || run.pendingProviderErrors === null) return null;
9300
9343
  const holding = txDb.select({ id: providerBatches.id }).from(providerBatches).where(and3(eq3(providerBatches.runId, runId), inArray(providerBatches.status, RUN_HOLDING_BATCH_STATUSES))).limit(1).get();
9301
9344
  if (holding) return null;
9302
9345
  const state = measurementRunSlotState(txDb, runId);
9303
9346
  const inserted = txDb.select({ value: count() }).from(querySnapshots).where(eq3(querySnapshots.runId, runId)).get()?.value ?? 0;
9304
9347
  const providerErrors = this.batchRunProviderErrors(txDb, runId, run.pendingProviderErrors, state.missing);
9348
+ const skippedProviders = run.skippedProviders ?? {};
9305
9349
  const shortfall = state.missing.length + (state.readable ? 0 : 1);
9306
- const outcome = runOutcome(inserted, providerErrors, shortfall);
9350
+ const outcome = runOutcome(inserted, providerErrors, shortfall, skippedProviders);
9307
9351
  const won = txDb.update(runs).set({
9308
9352
  status: outcome.status,
9309
9353
  finishedAt,
@@ -9312,7 +9356,7 @@ var JobRunner = class {
9312
9356
  }).where(and3(eq3(runs.id, runId), eq3(runs.status, RunStatuses.running), isNotNull(runs.pendingProviderErrors))).run().changes === 1;
9313
9357
  if (!won) return null;
9314
9358
  recordSentimentCompletion(tx, { projectId, runId, completionKey: "initial", completedAt: finishedAt });
9315
- return { kind: run.kind, inserted, providerErrors, status: outcome.status };
9359
+ return { kind: run.kind, inserted, providerErrors, skippedProviders, status: outcome.status };
9316
9360
  });
9317
9361
  if (!decided) return false;
9318
9362
  const telemetry = this.batchRunTelemetry(runId, projectId);
@@ -9323,6 +9367,7 @@ var JobRunner = class {
9323
9367
  kind: decided.kind,
9324
9368
  inserted: decided.inserted,
9325
9369
  providerErrors: decided.providerErrors,
9370
+ skippedProviders: decided.skippedProviders,
9326
9371
  executionContext: telemetry.executionContext,
9327
9372
  startTime: telemetry.startTime,
9328
9373
  // The sweep's phase split does not survive the wait (or a restart);
@@ -10373,7 +10418,8 @@ var JobRunner = class {
10373
10418
  measurementPlanVersionId: runs.measurementPlanVersionId,
10374
10419
  measurementManifest: runs.measurementManifest,
10375
10420
  providerDispatchModes: runs.providerDispatchModes,
10376
- pendingProviderErrors: runs.pendingProviderErrors
10421
+ pendingProviderErrors: runs.pendingProviderErrors,
10422
+ skippedProviders: runs.skippedProviders
10377
10423
  }).from(runs).where(eq3(runs.id, runId)).get();
10378
10424
  }
10379
10425
  isRunCancelled(runId) {
@@ -15120,6 +15166,9 @@ var Scheduler = class {
15120
15166
  runnableProviders: this.callbacks.getRunnableProviderNames?.(),
15121
15167
  providerModels: this.callbacks.getEffectiveProviderModels?.(),
15122
15168
  batchEligibleProviders: this.callbacks.getBatchEligibleProviderNames?.() ?? null,
15169
+ // A skipped slot is otherwise invisible: no run row, nothing in the
15170
+ // dashboard. One audit row per refusal keeps it in the history.
15171
+ auditRefusal: { actor: "scheduler", entityType: "schedule", entityId: currentSchedule.id },
15123
15172
  ...claimedOccurrence && recurrence && currentSchedule.nextRunAt === claimedOccurrence ? {
15124
15173
  scheduleClaim: {
15125
15174
  scheduleId: currentSchedule.id,
@@ -15149,6 +15198,14 @@ var Scheduler = class {
15149
15198
  scheduleId: currentSchedule.id,
15150
15199
  ...queueResult.refused
15151
15200
  });
15201
+ if (queueResult.refusalRecorded) {
15202
+ trackEvent("run.aborted", buildRunRefusedProps({
15203
+ providers: queueResult.refused.providers,
15204
+ trigger: RunTriggers.scheduled,
15205
+ canonicalDomain: project.canonicalDomain,
15206
+ location: locationLabel
15207
+ }), { errorCode: "PROVIDERS_FAILING" });
15208
+ }
15152
15209
  if (!claimedOccurrence) this.updateScheduleTiming(currentSchedule.id, { nextRunAt });
15153
15210
  return;
15154
15211
  }
@@ -15169,7 +15226,12 @@ var Scheduler = class {
15169
15226
  lastRunAt: now,
15170
15227
  nextRunAt
15171
15228
  });
15172
- log16.info("run.triggered", { runId, projectName: project.name, providers: providers ?? "all" });
15229
+ log16.info("run.triggered", {
15230
+ runId,
15231
+ projectName: project.name,
15232
+ providers: providers ?? "all",
15233
+ ...Object.keys(queueResult.skippedProviders).length > 0 ? { skippedProviders: queueResult.skippedProviders } : {}
15234
+ });
15173
15235
  this.callbacks.onRunCreated(runId, projectId, providers, resolvedLocation);
15174
15236
  } catch (err) {
15175
15237
  log16.error("trigger.error", { scheduleId, projectId, kind, error: describeError(err) });
@@ -4,14 +4,14 @@ import {
4
4
  installSkills,
5
5
  loadConfigRaw,
6
6
  saveConfigPatch
7
- } from "./chunk-SM6ZZAPK.js";
7
+ } from "./chunk-ZHXOR2LJ.js";
8
8
  import {
9
9
  PACKAGE_VERSION
10
- } from "./chunk-BTHEFJCI.js";
10
+ } from "./chunk-4LQ4HKVK.js";
11
11
  import {
12
12
  SKILL_MANIFEST_FILENAME,
13
13
  SkillsClients
14
- } from "./chunk-AU7OUDWR.js";
14
+ } from "./chunk-A25FO3Z5.js";
15
15
 
16
16
  // src/skills-autosync.ts
17
17
  import fs from "fs";
@@ -5,7 +5,7 @@ import {
5
5
  siteCrawlGraphNodes,
6
6
  siteCrawlPages,
7
7
  siteCrawlSnapshots
8
- } from "./chunk-GQMSJEMZ.js";
8
+ } from "./chunk-EZRBFH77.js";
9
9
  import {
10
10
  SITE_CRAWL_GRAPH_MAX_EDGES,
11
11
  SITE_CRAWL_GRAPH_MAX_NODES,
@@ -14,7 +14,7 @@ import {
14
14
  factorStatusFromDistribution,
15
15
  factorStatusFromScore,
16
16
  roundPreservingTotal
17
- } from "./chunk-AU7OUDWR.js";
17
+ } from "./chunk-A25FO3Z5.js";
18
18
 
19
19
  // src/site-audit-factors.ts
20
20
  function recordedSharePct(factor) {
@@ -5,7 +5,7 @@ import {
5
5
  PACKAGE_VERSION,
6
6
  canonryMcpTools,
7
7
  isMachineFormat
8
- } from "./chunk-BTHEFJCI.js";
8
+ } from "./chunk-4LQ4HKVK.js";
9
9
  import {
10
10
  AGENT_PROVIDER_IDS,
11
11
  CANONRY_NPM_PACKAGE_URL,
@@ -50,7 +50,7 @@ import {
50
50
  skillsClientSchema,
51
51
  upgradeCaveatFor,
52
52
  upgradeCommandFor
53
- } from "./chunk-AU7OUDWR.js";
53
+ } from "./chunk-A25FO3Z5.js";
54
54
 
55
55
  // src/config.ts
56
56
  import fs from "fs";