@canonry/canonry 7.70.0 → 7.71.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 (134) hide show
  1. package/README.md +0 -5
  2. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +2 -1
  3. package/assets/assets/{AgentSetupPage-BSHWZvRa.js → AgentSetupPage-DexQKsfX.js} +1 -1
  4. package/assets/assets/{AuditHistoryPanel-CkOJ_9_W.js → AuditHistoryPanel-C0tKUYig.js} +1 -1
  5. package/assets/assets/{BacklinksPage-DrWQ2idL.js → BacklinksPage-CXKsDXhy.js} +1 -1
  6. package/assets/assets/{HistoryPage-XQL_fdA9.js → HistoryPage-D1UkPELF.js} +1 -1
  7. package/assets/assets/{MeasurementPropertyPage-Z7HN9XvJ.js → MeasurementPropertyPage-CsSUHpB7.js} +1 -1
  8. package/assets/assets/ProjectPage-DVQora-C.js +9 -0
  9. package/assets/assets/{RunsPage-DDlvUciW.js → RunsPage-CnPgX-bf.js} +1 -1
  10. package/assets/assets/{SettingsPage-CajGcfAQ.js → SettingsPage-DfiH_eyL.js} +1 -1
  11. package/assets/assets/SiteHealthSection-BTfTcF_w.js +2 -0
  12. package/assets/assets/{ToneBadge-enK5ryht.js → ToneBadge-aGjnkfBI.js} +1 -1
  13. package/assets/assets/{TrafficPage-BlRi6C8Y.js → TrafficPage-DIa6lxo2.js} +1 -1
  14. package/assets/assets/{TrafficSourceDetailPage-DiUYQhDR.js → TrafficSourceDetailPage-BTFJ4JkC.js} +1 -1
  15. package/assets/assets/{account-context-gUhEyKww.js → account-context-RobEwj-E.js} +1 -1
  16. package/assets/assets/{card-BPDsfFv5.js → card-BLjXAqaV.js} +1 -1
  17. package/assets/assets/{extract-error-message-YbSa8SSn.js → extract-error-message-BnVETQ_r.js} +1 -1
  18. package/assets/assets/{format-helpers-B-WHGMGn.js → format-helpers-2INiLwsz.js} +1 -1
  19. package/assets/assets/{index-CONZUwQB.css → index-Yn3nIj4B.css} +1 -1
  20. package/assets/assets/{index-CigLVn5A.js → index-zdoJudA4.js} +19 -19
  21. package/assets/assets/{query-client-DScmA_aM.js → query-client-BMplcUQL.js} +1 -1
  22. package/assets/assets/react-query-BYjj2p2M.js +1 -0
  23. package/assets/assets/{react-sigma_core.esm.min-CtveVGNY.js → react-sigma_core.esm.min-CerNhJzW.js} +1 -1
  24. package/assets/assets/{service--FVsrK0Z.js → service-DM_6LxOl.js} +1 -1
  25. package/assets/index.html +8 -8
  26. package/dist/{ads-UTME46NF.js → ads-P75E4E3Q.js} +3 -3
  27. package/dist/{agent-PYDTNLR4.js → agent-WKTCTJL7.js} +7 -7
  28. package/dist/{agent-ask-NA4QFFM6.js → agent-ask-CI4I5UER.js} +3 -3
  29. package/dist/{agent-conversations-3S56EX4U.js → agent-conversations-2LXN6PC5.js} +3 -3
  30. package/dist/{agent-memory-D2RT5TVJ.js → agent-memory-STJUYUEI.js} +3 -3
  31. package/dist/{agent-providers-5C2DRUR3.js → agent-providers-HRQCKR57.js} +3 -3
  32. package/dist/{agent-transcript-SY5BZPO3.js → agent-transcript-SMNVT5UA.js} +3 -3
  33. package/dist/{analytics-GUENANBB.js → analytics-GZRA5LS4.js} +3 -3
  34. package/dist/{apply-R5K6RGEH.js → apply-QXMZGXAY.js} +3 -3
  35. package/dist/{backfill-B2EXGQCW.js → backfill-3VVYI6XX.js} +9 -9
  36. package/dist/{backlinks-X55GUIQL.js → backlinks-VUTZFYJY.js} +3 -3
  37. package/dist/{bing-5NTEC247.js → bing-DKYPVXU4.js} +3 -3
  38. package/dist/{bootstrap-UDEEVI4Z.js → bootstrap-3CMHZS6G.js} +10 -10
  39. package/dist/{cdp-WWVZ6IBS.js → cdp-XP4RGCA6.js} +7 -7
  40. package/dist/{chunk-PJYXLC3D.js → chunk-2G3J62KV.js} +1 -1
  41. package/dist/{chunk-6RI7JFFI.js → chunk-3NOFNFGV.js} +1 -1
  42. package/dist/{chunk-6JGQT4OH.js → chunk-A3NSYJJL.js} +37 -2
  43. package/dist/{chunk-QBR7BWO6.js → chunk-AAPMP2T3.js} +8 -8
  44. package/dist/{chunk-3ZF3T3OG.js → chunk-ALXQPMYR.js} +1 -1
  45. package/dist/{chunk-RSK7E53V.js → chunk-AVNEHYTZ.js} +1 -1
  46. package/dist/{chunk-BRT5GE3Z.js → chunk-C3ZH2HLV.js} +5 -5
  47. package/dist/{chunk-RVEXUQHP.js → chunk-DEMNY4YE.js} +2 -2
  48. package/dist/{chunk-RJSJNR76.js → chunk-DP5V4C3I.js} +3 -3
  49. package/dist/{chunk-XOCF2U54.js → chunk-EDQ4V4PJ.js} +19 -1
  50. package/dist/{chunk-R7RTWOOV.js → chunk-ETMB45WP.js} +1 -1
  51. package/dist/{chunk-7W4KNDAW.js → chunk-FNVUPIMW.js} +2 -2
  52. package/dist/{chunk-PHHQVV3G.js → chunk-ILLWCY2P.js} +3 -3
  53. package/dist/{chunk-NHF3OGZN.js → chunk-IX7AKQBJ.js} +3 -3
  54. package/dist/{chunk-RPYSCFFA.js → chunk-JB4NDUWJ.js} +1 -1
  55. package/dist/{chunk-3LTLLHCD.js → chunk-JCECURGF.js} +4 -4
  56. package/dist/{chunk-42JQQZZQ.js → chunk-JEC5Z22M.js} +5 -5
  57. package/dist/{chunk-SSNKQTRX.js → chunk-JHCIMIB5.js} +3 -3
  58. package/dist/{chunk-EIRIZPR6.js → chunk-K4S2T6C5.js} +6 -3
  59. package/dist/{chunk-WOETP6NH.js → chunk-KRDMSGNZ.js} +346 -336
  60. package/dist/{chunk-JNRMODJS.js → chunk-NPHBHVAY.js} +1 -1
  61. package/dist/{chunk-DW3KF33I.js → chunk-OOXR7SZ5.js} +4 -4
  62. package/dist/{chunk-SFMCFMJR.js → chunk-QREFWO3Q.js} +1 -1
  63. package/dist/{chunk-ULUKHNE4.js → chunk-SNCRERSZ.js} +1 -1
  64. package/dist/{chunk-JGO7LGVN.js → chunk-SZSJALQM.js} +30 -10
  65. package/dist/{chunk-BGTJTKOJ.js → chunk-T6IV35KG.js} +3 -2
  66. package/dist/{chunk-KDV5NQZH.js → chunk-U6EUBP4B.js} +1 -1
  67. package/dist/{chunk-MBNXKKOD.js → chunk-VLFPI3T3.js} +2 -2
  68. package/dist/{chunk-QNSMMQJY.js → chunk-WE3SK5GQ.js} +7 -5
  69. package/dist/{chunk-CSDDKEL6.js → chunk-WHH7HWN7.js} +1 -1
  70. package/dist/{chunk-CNSLBHFP.js → chunk-WNBN4FYE.js} +1 -1
  71. package/dist/{chunk-3QHKN3JY.js → chunk-XSRKTGRG.js} +47 -32
  72. package/dist/{chunk-HZ55UIKM.js → chunk-Z6BDB4KS.js} +4 -4
  73. package/dist/{chunk-OQR4F7WF.js → chunk-ZCIC3DLS.js} +2 -2
  74. package/dist/{citations-ILU2CNT2.js → citations-X24SQ4ZU.js} +3 -3
  75. package/dist/{cli-catalog-ZBTUYNJA.js → cli-catalog-RYUJEUAY.js} +3 -3
  76. package/dist/{cli-commands-672L7BFD.js → cli-commands-DFTOVHCU.js} +7 -7
  77. package/dist/cli.js +13 -13
  78. package/dist/{competitor-NXSL3AWD.js → competitor-4GIR3D4Q.js} +3 -3
  79. package/dist/{content-TGWYXNBI.js → content-FPMODFJ4.js} +3 -3
  80. package/dist/{dashboard-IDCQTIYG.js → dashboard-IJCLC5MW.js} +6 -6
  81. package/dist/{demo-6X6IDMPT.js → demo-52GRHFQH.js} +1 -1
  82. package/dist/{demo-server-HKJWIYPQ.js → demo-server-QZPEIXU2.js} +11 -11
  83. package/dist/{discover-NW7NKL2Z.js → discover-Y7I3V75V.js} +3 -3
  84. package/dist/{discover-eval-2BVYL62I.js → discover-eval-TS67TA2C.js} +3 -3
  85. package/dist/{doctor-6I3LPYM7.js → doctor-E3OPJGNR.js} +3 -3
  86. package/dist/{evidence-ZTAMPBEP.js → evidence-HBPR3QYE.js} +3 -3
  87. package/dist/{export-cmd-4CXUQVYT.js → export-cmd-AXSRXCD5.js} +3 -3
  88. package/dist/{ga-2YXMDGHQ.js → ga-JXHGIEMK.js} +3 -3
  89. package/dist/{gbp-LTPPWTUR.js → gbp-4M54KRXG.js} +3 -3
  90. package/dist/{google-KTUJ4D3T.js → google-TBZLFQTN.js} +4 -4
  91. package/dist/{google-marketing-FAKTAI5S.js → google-marketing-EFUITED7.js} +1 -1
  92. package/dist/{health-cmd-C75E3NPQ.js → health-cmd-5SCHBHXS.js} +3 -3
  93. package/dist/{history-HE734BPT.js → history-BLOGMFLZ.js} +3 -3
  94. package/dist/index.d.ts +86 -67
  95. package/dist/index.js +24 -24
  96. package/dist/{init-M73CSTWU.js → init-2WCCRDYU.js} +11 -11
  97. package/dist/{insights-4GUVXY2V.js → insights-AUTLWRQS.js} +3 -3
  98. package/dist/intelligence-service-XDGWLXW4.js +15 -0
  99. package/dist/{journeys-BZCKKFG7.js → journeys-7Y3HE5AX.js} +3 -3
  100. package/dist/{keys-CMN3FUDW.js → keys-3T65JGMW.js} +3 -3
  101. package/dist/{keyword-QUM65R7C.js → keyword-2MQEXEYJ.js} +3 -3
  102. package/dist/{logs-HH7EP7YK.js → logs-4AWZCX2X.js} +3 -3
  103. package/dist/{mcp-76T6WX4K.js → mcp-RCMC554F.js} +2 -2
  104. package/dist/mcp.js +9 -9
  105. package/dist/{measurement-plan-2D2KQLTW.js → measurement-plan-HFPXGBVZ.js} +5 -5
  106. package/dist/{notify-VP5YYBJO.js → notify-GEUMV4QL.js} +3 -3
  107. package/dist/{organic-evidence-EAUZJVET.js → organic-evidence-TAH2R2U4.js} +3 -3
  108. package/dist/{overview-MCX3OHXK.js → overview-WBZW5QMX.js} +4 -4
  109. package/dist/{project-HMELPKXT.js → project-52XSBNDM.js} +3 -3
  110. package/dist/{query-J7UTKCY5.js → query-7DHBS2QS.js} +3 -3
  111. package/dist/{research-O4FYADRL.js → research-VDLJDU72.js} +3 -3
  112. package/dist/{results-export-4JHIHSWW.js → results-export-4XMDISAJ.js} +3 -3
  113. package/dist/{run-YJ3Y7FIE.js → run-NQ664S64.js} +4 -4
  114. package/dist/{schedule-6SXEB245.js → schedule-CFG2I3BJ.js} +3 -3
  115. package/dist/{search-MVL346VH.js → search-Q5HSLPLD.js} +3 -3
  116. package/dist/{serve-GSPGAHMD.js → serve-4X3LDV6K.js} +25 -25
  117. package/dist/{session-KFFTQBJU.js → session-3JP36MHE.js} +12 -12
  118. package/dist/{settings-UKVP6TDD.js → settings-Y7RLRCLF.js} +3 -3
  119. package/dist/{skills-DF336KFJ.js → skills-ZVV7HCF5.js} +2 -2
  120. package/dist/{snapshot-YKWGIRTM.js → snapshot-UAWGXBKI.js} +3 -3
  121. package/dist/{src-WDWTA7ON.js → src-6ZMVHPAY.js} +2 -2
  122. package/dist/{status-4PDQOFYS.js → status-A2FZZJ4M.js} +4 -4
  123. package/dist/{technical-aeo-XJRWNW24.js → technical-aeo-HXGF72PP.js} +7 -5
  124. package/dist/{telemetry-TXB7NGPP.js → telemetry-7SHJAUQD.js} +4 -4
  125. package/dist/{tools-5DBHZB4K.js → tools-3HY3R5J5.js} +11 -11
  126. package/dist/{traffic-AP22ENAC.js → traffic-6LPWSVRR.js} +5 -5
  127. package/dist/{users-44XJB4ZN.js → users-UHABRTME.js} +3 -3
  128. package/dist/{visibility-stats-5DMILJO6.js → visibility-stats-Z5D6ITSA.js} +3 -3
  129. package/dist/{wordpress-P6J44TMN.js → wordpress-HEIQZGMP.js} +3 -3
  130. package/package.json +1 -1
  131. package/assets/assets/ProjectPage-DCOhyc0W.js +0 -9
  132. package/assets/assets/SiteHealthSection-Ch56JPKl.js +0 -2
  133. package/assets/assets/react-query-gGXPkSlb.js +0 -1
  134. package/dist/intelligence-service-PAMFRLPE.js +0 -15
@@ -15,7 +15,7 @@ import {
15
15
  formatCanonryPluginUpdateHint,
16
16
  formatCanonryPluginVersionMismatch,
17
17
  skillsClientSchema
18
- } from "./chunk-6JGQT4OH.js";
18
+ } from "./chunk-A3NSYJJL.js";
19
19
 
20
20
  // src/commands/skills.ts
21
21
  import crypto from "crypto";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  runWithUsageTags
3
- } from "./chunk-BGTJTKOJ.js";
3
+ } from "./chunk-T6IV35KG.js";
4
4
  import {
5
5
  CanonryMcpToolNames,
6
6
  canonryMcpTools
7
- } from "./chunk-QNSMMQJY.js";
7
+ } from "./chunk-WE3SK5GQ.js";
8
8
  import {
9
9
  CliError
10
10
  } from "./chunk-HGMYEDAQ.js";
11
11
  import {
12
12
  buildOpenApiDocument
13
- } from "./chunk-JGO7LGVN.js";
13
+ } from "./chunk-SZSJALQM.js";
14
14
  import {
15
15
  DEFAULT_COMPETITOR_AUTO_ALIAS_MODE,
16
16
  MeasurementPortfolioLists,
@@ -23,7 +23,7 @@ import {
23
23
  seoDatasetWithoutVendor,
24
24
  seoProviderSchema,
25
25
  truncateUtf16
26
- } from "./chunk-6JGQT4OH.js";
26
+ } from "./chunk-A3NSYJJL.js";
27
27
 
28
28
  // src/agent/tools.ts
29
29
  import { Type as Type2 } from "@earendil-works/pi-ai";
@@ -28,7 +28,7 @@ import {
28
28
  unknownUsageObservation,
29
29
  usdToMicros,
30
30
  withRetry
31
- } from "./chunk-6JGQT4OH.js";
31
+ } from "./chunk-A3NSYJJL.js";
32
32
 
33
33
  // ../provider-answer-services/src/core/http.ts
34
34
  var MAX_RESPONSE_BYTES = 8 * 1024 * 1024;
@@ -23,7 +23,7 @@ import {
23
23
  measurementDraftUpsertGroupRequestSchema,
24
24
  measurementDraftUpsertMarketRequestSchema,
25
25
  measurementDraftUpsertTargetRequestSchema
26
- } from "./chunk-6JGQT4OH.js";
26
+ } from "./chunk-A3NSYJJL.js";
27
27
 
28
28
  // src/measurement-draft-actions.ts
29
29
  import { z } from "zod";
@@ -9,14 +9,14 @@ import {
9
9
  normalizeCloudflareWorkerEvent,
10
10
  sessionizeJourneyRequests,
11
11
  verifyRequestSignature
12
- } from "./chunk-CNSLBHFP.js";
12
+ } from "./chunk-WNBN4FYE.js";
13
13
  import {
14
14
  currentOutcomeAttribution,
15
15
  getRequestContext,
16
16
  registerRequestContext,
17
17
  requestAuditIdentity,
18
18
  sanitizeRequestContext
19
- } from "./chunk-KDV5NQZH.js";
19
+ } from "./chunk-U6EUBP4B.js";
20
20
  import {
21
21
  SentimentIdempotencyConflict,
22
22
  SentimentRepository,
@@ -156,7 +156,7 @@ import {
156
156
  userSessions,
157
157
  users,
158
158
  writeNegativeReviewMaxStars
159
- } from "./chunk-XOCF2U54.js";
159
+ } from "./chunk-EDQ4V4PJ.js";
160
160
  import {
161
161
  ADS_ACTIVATE_SCOPE,
162
162
  ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
@@ -378,6 +378,7 @@ import {
378
378
  SiteAuditTrendDirections,
379
379
  SiteCrawlFetchedStates,
380
380
  SiteCrawlIndexabilityReasons,
381
+ SiteCrawlUrlVersionFilters,
381
382
  SiteHealthLinkKinds,
382
383
  SiteHealthTemplateDetections,
383
384
  TrafficEventConfidences,
@@ -1111,6 +1112,7 @@ import {
1111
1112
  siteCrawlPagesResponseSchema,
1112
1113
  siteCrawlStructureResponseSchema,
1113
1114
  siteCrawlSummarySchema,
1115
+ siteCrawlUrlVersionFilterSchema,
1114
1116
  siteHealthChangesResponseSchema,
1115
1117
  siteHealthLinkKindSchema,
1116
1118
  siteHealthPathResponseSchema,
@@ -1192,7 +1194,7 @@ import {
1192
1194
  wordpressSchemaDeployResultDtoSchema,
1193
1195
  wordpressSchemaStatusResultDtoSchema,
1194
1196
  wordpressStatusDtoSchema
1195
- } from "./chunk-6JGQT4OH.js";
1197
+ } from "./chunk-A3NSYJJL.js";
1196
1198
 
1197
1199
  // ../api-routes/src/user-session.ts
1198
1200
  import crypto2 from "crypto";
@@ -42309,13 +42311,14 @@ var routeCatalog = [
42309
42311
  { name: "indexabilityState", in: "query", description: "Filter by crawler-derived indexability state; this is not Google index coverage.", schema: stringSchema },
42310
42312
  { name: "nodeKey", in: "query", description: "Return only the page with this node key. Combined with a filter it answers whether that exact page is in the filtered set, without paging through the list.", schema: stringSchema },
42311
42313
  { name: "healthState", in: "query", description: "Filter by the derived Site Health state shared with the dashboard and agents. Unlike `indexabilityState` this folds fetch state, canonical identity, and the crawler reasons into one decision. `hidden` means the SITE told answer engines not to index the page (noindex, canonical-away, robots.txt); a non-HTML file is `resource` and a redirect is `redirect`, because neither is suppressed. Values: `eligible`, `hidden`, `resource`, `redirect`, `failed`, `unchecked`.", schema: { type: "string", enum: ["eligible", "hidden", "resource", "redirect", "failed", "unchecked"] } },
42312
- { name: "auditState", in: "query", description: "Filter by audit state.", schema: stringSchema },
42314
+ { name: "auditState", in: "query", description: "Filter by audit state. A URL version has `url-version`: it was fetched and classified but not scored.", schema: stringSchema },
42315
+ { name: "urlVersions", in: "query", description: "URL versions are parameter addresses (filters, views, cache settings) whose canonical names the same path, so the site marks them as copies of that page. The audit does not score them or count them in fixes, and `inventorySummary.urlVersions` counts them. `include` (default) keeps every crawled address, `exclude` lists pages only, as the dashboard does, and `only` lists the URL versions, each with `urlVersionOf`. Scans made before URL versions were set aside have none.", schema: { type: "string", enum: ["include", "exclude", "only"] } },
42313
42316
  { name: "sort", in: "query", description: "Sort order. Defaults to `url`.", schema: { type: "string", enum: ["url", "path", "score-asc", "score-desc"] } },
42314
42317
  crawlCursorParameter,
42315
42318
  crawlLimitParameter
42316
42319
  ],
42317
42320
  responses: {
42318
- 400: errorResponse("Invalid date, conflicting runId/date, or invalid cursor identity."),
42321
+ 400: errorResponse("Invalid date, conflicting runId/date, invalid urlVersions, or invalid cursor identity."),
42319
42322
  200: jsonResponse("Crawl pages returned.", "SiteCrawlPagesResponseDto"),
42320
42323
  404: errorResponse("Project or site-audit run not found. A known run that published no crawl returns 200 with the no-crawl state instead.")
42321
42324
  }
@@ -72106,6 +72109,14 @@ function parseSiteHealthState(value) {
72106
72109
  }
72107
72110
  return allowed.data;
72108
72111
  }
72112
+ function parseUrlVersionFilter(value) {
72113
+ if (value === void 0 || value === "") return SiteCrawlUrlVersionFilters.include;
72114
+ const allowed = siteCrawlUrlVersionFilterSchema.safeParse(value);
72115
+ if (!allowed.success) {
72116
+ throw validationError(`"urlVersions" must be one of: ${siteCrawlUrlVersionFilterSchema.options.join(", ")}`);
72117
+ }
72118
+ return allowed.data;
72119
+ }
72109
72120
  function parseBoolean2(value) {
72110
72121
  if (value === true || value === "true" || value === "1") return true;
72111
72122
  if (value === false || value === "false" || value === "0") return false;
@@ -72188,7 +72199,8 @@ function mapCrawlPage(row) {
72188
72199
  linkScoreRaw: row.linkScoreRaw,
72189
72200
  linkScoreNormalized: row.linkScoreNormalized,
72190
72201
  healthState: deriveSiteHealthState(row),
72191
- healthReason: deriveSiteHealthReason(row)
72202
+ healthReason: deriveSiteHealthReason(row),
72203
+ urlVersionOf: row.urlVersionOf ?? null
72192
72204
  };
72193
72205
  }
72194
72206
  function withRecordedShare(factor) {
@@ -72559,19 +72571,22 @@ async function technicalAeoRoutes(app, opts) {
72559
72571
  };
72560
72572
  const inventorySummaryFor = (scope) => {
72561
72573
  if (!scope) return null;
72562
- const groups = crawlReasonGroups(and83(
72574
+ const inScope = and83(
72563
72575
  eq100(siteCrawlPages.projectId, scope.projectId),
72564
72576
  eq100(siteCrawlPages.runId, scope.runId),
72565
72577
  eq100(siteCrawlPages.attemptId, scope.attemptId)
72566
- ));
72578
+ );
72579
+ const groups = crawlReasonGroups(inScope);
72567
72580
  const total = groups.reduce((sum, group) => sum + group.pages, 0);
72568
72581
  const eligible = groups.reduce((sum, group) => sum + (group.inventoryEligible ? group.pages : 0), 0);
72582
+ const urlVersions = app.db.select({ value: count8() }).from(siteCrawlPages).where(and83(inScope, isNotNull10(siteCrawlPages.urlVersionOf))).get()?.value ?? 0;
72569
72583
  return {
72570
72584
  scope: "selected-snapshot",
72571
72585
  total,
72572
72586
  eligible,
72573
72587
  excluded: total - eligible,
72574
- excludedReasons: reasonCounts(groups.filter((group) => !group.inventoryEligible))
72588
+ excludedReasons: reasonCounts(groups.filter((group) => !group.inventoryEligible)),
72589
+ urlVersions
72575
72590
  };
72576
72591
  };
72577
72592
  const completenessOf = (target) => ({
@@ -73739,6 +73754,9 @@ async function technicalAeoRoutes(app, opts) {
73739
73754
  if (request.query.fetchState) filters.push(eq100(siteCrawlPages.fetchState, request.query.fetchState));
73740
73755
  if (request.query.indexabilityState) filters.push(eq100(siteCrawlPages.indexabilityState, request.query.indexabilityState));
73741
73756
  if (request.query.auditState) filters.push(eq100(siteCrawlPages.auditState, request.query.auditState));
73757
+ const urlVersions = parseUrlVersionFilter(request.query.urlVersions);
73758
+ if (urlVersions === SiteCrawlUrlVersionFilters.exclude) filters.push(isNull17(siteCrawlPages.urlVersionOf));
73759
+ if (urlVersions === SiteCrawlUrlVersionFilters.only) filters.push(isNotNull10(siteCrawlPages.urlVersionOf));
73742
73760
  const healthState = parseSiteHealthState(request.query.healthState);
73743
73761
  const limit = parseBoundedLimit(request.query.limit, 100, 200);
73744
73762
  const sort = ["score-desc", "score-asc", "path"].includes(request.query.sort ?? "") ? request.query.sort : "url";
@@ -73752,6 +73770,8 @@ async function technicalAeoRoutes(app, opts) {
73752
73770
  fetchState: request.query.fetchState || null,
73753
73771
  indexabilityState: request.query.indexabilityState || null,
73754
73772
  auditState: request.query.auditState || null,
73773
+ // Absent for the default, so a cursor issued before this filter existed still matches.
73774
+ ...urlVersions === SiteCrawlUrlVersionFilters.include ? {} : { urlVersions },
73755
73775
  healthState,
73756
73776
  sort
73757
73777
  })).digest("base64url");
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadConfig
3
- } from "./chunk-6RI7JFFI.js";
3
+ } from "./chunk-3NOFNFGV.js";
4
4
  import {
5
5
  PACKAGE_VERSION
6
6
  } from "./chunk-AOJU5LKX.js";
@@ -36,7 +36,7 @@ import {
36
36
  sentimentSettingsReadSchema,
37
37
  sentimentSummaryReadSchema,
38
38
  upgradeCommandFor
39
- } from "./chunk-6JGQT4OH.js";
39
+ } from "./chunk-A3NSYJJL.js";
40
40
 
41
41
  // ../api-client-generated/src/generated/core/bodySerializer.gen.ts
42
42
  var jsonBodySerializer = {
@@ -6410,6 +6410,7 @@ var ApiClient = class {
6410
6410
  fetchState: opts?.fetchState,
6411
6411
  indexabilityState: opts?.indexabilityState,
6412
6412
  auditState: opts?.auditState,
6413
+ urlVersions: opts?.urlVersions,
6413
6414
  sort: opts?.sort,
6414
6415
  cursor: opts?.cursor,
6415
6416
  limit: opts?.limit !== void 0 ? String(opts.limit) : void 0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  USAGE_TELEMETRY_HEADERS,
3
3
  redactLogString
4
- } from "./chunk-6JGQT4OH.js";
4
+ } from "./chunk-A3NSYJJL.js";
5
5
 
6
6
  // ../api-routes/src/request-context.ts
7
7
  import { AsyncLocalStorage } from "async_hooks";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  trackIntegrationConnection
3
- } from "./chunk-3LTLLHCD.js";
3
+ } from "./chunk-JCECURGF.js";
4
4
  import {
5
5
  cliRuntimeContext
6
- } from "./chunk-RVEXUQHP.js";
6
+ } from "./chunk-DEMNY4YE.js";
7
7
 
8
8
  // src/cli-connection-telemetry.ts
9
9
  function trackCliConnection(properties) {
@@ -2,11 +2,11 @@ import {
2
2
  dedupeGscSitemapUrls,
3
3
  resolveDiscoveredGscSitemapUrls,
4
4
  submitGscSitemapBatches
5
- } from "./chunk-CSDDKEL6.js";
5
+ } from "./chunk-WHH7HWN7.js";
6
6
  import {
7
7
  measurementDraftOperationSchema,
8
8
  runMeasurementDraftAction
9
- } from "./chunk-ULUKHNE4.js";
9
+ } from "./chunk-SNCRERSZ.js";
10
10
  import {
11
11
  CliError
12
12
  } from "./chunk-HGMYEDAQ.js";
@@ -177,7 +177,7 @@ import {
177
177
  trafficSeriesGranularitySchema,
178
178
  visibilityCompareSelectionSchema,
179
179
  visibilityReportRequestSchema
180
- } from "./chunk-6JGQT4OH.js";
180
+ } from "./chunk-A3NSYJJL.js";
181
181
 
182
182
  // src/mcp/tool-registry.ts
183
183
  import { z as z2 } from "zod";
@@ -1034,7 +1034,8 @@ var technicalAeoCrawlPagesInputSchema = z2.object({
1034
1034
  inventoryEligible: z2.boolean().optional().describe("Filter Canonry technical-inventory eligibility. This is not actual Google index coverage."),
1035
1035
  fetchState: z2.string().min(1).optional().describe("Filter crawler fetch state, for example html, redirect, non-html, or fetch-error."),
1036
1036
  indexabilityState: z2.string().min(1).optional().describe("Filter crawler-derived indexability state. This is not Google index coverage."),
1037
- auditState: z2.string().min(1).optional().describe("Filter audit state."),
1037
+ auditState: z2.string().min(1).optional().describe("Filter audit state. url-version marks a URL version: fetched and classified, not scored."),
1038
+ urlVersions: z2.enum(["include", "exclude", "only"]).optional().describe("URL versions are parameter addresses whose canonical names the same path, so the site marks them as copies of that page; the audit does not score them or count them in fixes. include (default) keeps every address, exclude lists pages only (the dashboard view), only lists the URL versions with urlVersionOf."),
1038
1039
  sort: z2.enum(["url", "path", "score-asc", "score-desc"]).optional(),
1039
1040
  cursor: z2.string().min(1).optional().describe("Opaque cursor from the previous crawl-pages result."),
1040
1041
  limit: z2.number().int().positive().max(200).optional()
@@ -4150,7 +4151,7 @@ var rawCanonryMcpTools = [
4150
4151
  defineTool({
4151
4152
  name: "canonry_technical_aeo_crawl_pages",
4152
4153
  title: "List Technical AEO crawl pages",
4153
- description: "For a requested scan date pass date=YYYY-MM-DD. If the year was omitted and that date has no data, use availableScanDates.matchingMonthDayDates to resolve the year and request the exact returned date before concluding the historical scan is missing. recentDates and matchingMonthDayDates are bounded; totalDates and matchingMonthDayTotal report their full counts. No automatic date fallback. inventorySummary gives whole-snapshot eligible/excluded counts and disjoint excluded reasons; healthReasonCounts covers the filtered list before paging. Use these exact counts, never infer canonical-away from unknown indexability. healthReason distinguishes terminal redirects from canonical-to-other pages. Default runSelection reports same-date ambiguity and selects complete or most-pages evidence on the latest scan date. Read one bounded, cursor-paged list of canonical crawl nodes. Filter crawler-derived indexability and audit state, then follow nextCursor; this is technical inventory eligibility, not a claim about Google index coverage. `complete: false` means the crawl stopped at the budget named by `termination`, so a missing page or link is not proof it does not exist.",
4154
+ description: "For a requested scan date pass date=YYYY-MM-DD. If the year was omitted and that date has no data, use availableScanDates.matchingMonthDayDates to resolve the year and request the exact returned date before concluding the historical scan is missing. recentDates and matchingMonthDayDates are bounded; totalDates and matchingMonthDayTotal report their full counts. No automatic date fallback. inventorySummary gives whole-snapshot eligible/excluded counts, disjoint excluded reasons, and urlVersions (parameter copies of a page the audit did not score; pass urlVersions=exclude to list pages only); healthReasonCounts covers the filtered list before paging. Use these exact counts, never infer canonical-away from unknown indexability. healthReason distinguishes terminal redirects from canonical-to-other pages. Default runSelection reports same-date ambiguity and selects complete or most-pages evidence on the latest scan date. Read one bounded, cursor-paged list of canonical crawl nodes. Filter crawler-derived indexability and audit state, then follow nextCursor; this is technical inventory eligibility, not a claim about Google index coverage. `complete: false` means the crawl stopped at the budget named by `termination`, so a missing page or link is not proof it does not exist.",
4154
4155
  access: "read",
4155
4156
  tier: "monitoring",
4156
4157
  inputSchema: technicalAeoCrawlPagesInputSchema,
@@ -4163,6 +4164,7 @@ var rawCanonryMcpTools = [
4163
4164
  fetchState: input.fetchState,
4164
4165
  indexabilityState: input.indexabilityState,
4165
4166
  auditState: input.auditState,
4167
+ urlVersions: input.urlVersions,
4166
4168
  sort: input.sort,
4167
4169
  cursor: input.cursor,
4168
4170
  limit: input.limit
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-HGMYEDAQ.js";
5
5
  import {
6
6
  describeError
7
- } from "./chunk-6JGQT4OH.js";
7
+ } from "./chunk-A3NSYJJL.js";
8
8
 
9
9
  // src/gsc-sitemap-submission.ts
10
10
  function dedupeGscSitemapUrls(urls) {
@@ -8,7 +8,7 @@ import {
8
8
  classifyJourneyEntry,
9
9
  hostMatchesDomain,
10
10
  hostOf
11
- } from "./chunk-6JGQT4OH.js";
11
+ } from "./chunk-A3NSYJJL.js";
12
12
 
13
13
  // ../integration-traffic/src/ip-ranges/amazonbot.json
14
14
  var amazonbot_default = {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  answerServiceAdapters,
3
3
  answerServiceDescriptors
4
- } from "./chunk-SFMCFMJR.js";
4
+ } from "./chunk-QREFWO3Q.js";
5
5
  import {
6
6
  AeroLlmUsageFeatures,
7
7
  aeroTurnStatus,
@@ -27,14 +27,14 @@ import {
27
27
  resolveConfiguredAgentProvider,
28
28
  resolveSessionProviderAndModel,
29
29
  setAeroSystemPrompt
30
- } from "./chunk-BRT5GE3Z.js";
30
+ } from "./chunk-C3ZH2HLV.js";
31
31
  import {
32
32
  AeroToolProfiles,
33
33
  AeroToolScopes,
34
34
  buildAeroStateTools,
35
35
  isAeroToolProfile,
36
36
  truncateToolResult
37
- } from "./chunk-DW3KF33I.js";
37
+ } from "./chunk-OOXR7SZ5.js";
38
38
  import {
39
39
  getGoogleAuthConfig,
40
40
  getGoogleConnection,
@@ -53,7 +53,7 @@ import {
53
53
  removeCloudflareTrafficConnection,
54
54
  removeCloudflareTrafficConnectionBySourceId,
55
55
  upsertCloudflareTrafficConnection
56
- } from "./chunk-RPYSCFFA.js";
56
+ } from "./chunk-JB4NDUWJ.js";
57
57
  import {
58
58
  claudeAdapter,
59
59
  embedQueries,
@@ -64,7 +64,7 @@ import {
64
64
  openaiAdapter,
65
65
  openrouterAdapter,
66
66
  perplexityAdapter
67
- } from "./chunk-EIRIZPR6.js";
67
+ } from "./chunk-K4S2T6C5.js";
68
68
  import {
69
69
  classifyUsageSurface,
70
70
  createApiUsageTelemetry,
@@ -76,7 +76,7 @@ import {
76
76
  startOutcomeTimer,
77
77
  trackFeatureCompleted,
78
78
  trackInstallState
79
- } from "./chunk-3LTLLHCD.js";
79
+ } from "./chunk-JCECURGF.js";
80
80
  import {
81
81
  isLoopbackBindHost
82
82
  } from "./chunk-TSENU4GG.js";
@@ -84,7 +84,7 @@ import {
84
84
  isApiProviderRegistrable,
85
85
  isCdpProviderRegistrable,
86
86
  registeredProviderNames
87
- } from "./chunk-3ZF3T3OG.js";
87
+ } from "./chunk-ALXQPMYR.js";
88
88
  import {
89
89
  checkLatestVersionForServer,
90
90
  getOrCreateAnonymousId,
@@ -95,17 +95,17 @@ import {
95
95
  recordDashboardEvent,
96
96
  setTelemetryPreference,
97
97
  trackEvent
98
- } from "./chunk-RVEXUQHP.js";
98
+ } from "./chunk-DEMNY4YE.js";
99
99
  import {
100
100
  createCanonryMcpServer
101
- } from "./chunk-PHHQVV3G.js";
101
+ } from "./chunk-ILLWCY2P.js";
102
102
  import {
103
103
  CANONRY_MCP_TIERS,
104
104
  CANONRY_MCP_TOOLKIT_NAMES
105
105
  } from "./chunk-NDTU7FGL.js";
106
106
  import {
107
107
  ApiClient
108
- } from "./chunk-BGTJTKOJ.js";
108
+ } from "./chunk-T6IV35KG.js";
109
109
  import {
110
110
  AGENT_PROVIDERS,
111
111
  adapterSupportsBatch,
@@ -136,21 +136,21 @@ import {
136
136
  saveConfigPatch,
137
137
  sentimentInstallReadiness,
138
138
  updateSharedProviderExecutionGate
139
- } from "./chunk-6RI7JFFI.js";
139
+ } from "./chunk-3NOFNFGV.js";
140
140
  import {
141
141
  getBundledSkillSnapshots
142
- } from "./chunk-JNRMODJS.js";
142
+ } from "./chunk-NPHBHVAY.js";
143
143
  import {
144
144
  computeFactorAverages,
145
145
  deleteSiteCrawlGraphLayout,
146
146
  persistSiteCrawlGraphLayout,
147
147
  prepareSiteCrawlGraphLayout,
148
148
  recordedSharePct
149
- } from "./chunk-7W4KNDAW.js";
149
+ } from "./chunk-FNVUPIMW.js";
150
150
  import {
151
151
  CanonryMcpToolNames,
152
152
  canonryMcpTools
153
- } from "./chunk-QNSMMQJY.js";
153
+ } from "./chunk-WE3SK5GQ.js";
154
154
  import {
155
155
  PACKAGE_VERSION
156
156
  } from "./chunk-AOJU5LKX.js";
@@ -162,11 +162,11 @@ import {
162
162
  addLogListener,
163
163
  createFastifyLogger,
164
164
  createLogger
165
- } from "./chunk-42JQQZZQ.js";
165
+ } from "./chunk-JEC5Z22M.js";
166
166
  import {
167
167
  computeCitedCompetitorDomains,
168
168
  determineCitationState
169
- } from "./chunk-R7RTWOOV.js";
169
+ } from "./chunk-ETMB45WP.js";
170
170
  import {
171
171
  BingApiError,
172
172
  CC_CACHE_DIR,
@@ -286,7 +286,7 @@ import {
286
286
  webhookResponseReason,
287
287
  webhookTargetRefusalReason,
288
288
  writeAuditLog
289
- } from "./chunk-JGO7LGVN.js";
289
+ } from "./chunk-SZSJALQM.js";
290
290
  import {
291
291
  OperationalLogStore,
292
292
  SentimentIdempotencyConflict,
@@ -372,7 +372,7 @@ import {
372
372
  siteLivenessState,
373
373
  trafficSources,
374
374
  usageCounters
375
- } from "./chunk-XOCF2U54.js";
375
+ } from "./chunk-EDQ4V4PJ.js";
376
376
  import {
377
377
  AGENT_MEMORY_VALUE_MAX_BYTES,
378
378
  AI_ENGINE_DOMAINS,
@@ -446,6 +446,7 @@ import {
446
446
  SITE_AUDIT_DEFAULT_PAGE_LIMIT,
447
447
  SITE_AUDIT_MAX_EDGE_LIMIT,
448
448
  SITE_AUDIT_MAX_PAGE_LIMIT,
449
+ SITE_CRAWL_URL_VERSION_AUDIT_STATE,
449
450
  STORED_ONLY_HEADER,
450
451
  SchedulableRunKinds,
451
452
  SentimentOutcomes,
@@ -606,6 +607,7 @@ import {
606
607
  serializeRunError,
607
608
  shiftIsoCalendarDate,
608
609
  siteAuditRequestIdentity,
610
+ siteCrawlUrlVersionOf,
609
611
  splitList,
610
612
  startOfDayHourInTimeZone,
611
613
  statusClassOf,
@@ -622,7 +624,7 @@ import {
622
624
  winnabilityClassLabel,
623
625
  withRetry,
624
626
  withSkippedProviders
625
- } from "./chunk-6JGQT4OH.js";
627
+ } from "./chunk-A3NSYJJL.js";
626
628
 
627
629
  // src/google-marketing-runtime.ts
628
630
  import crypto2 from "crypto";
@@ -5805,7 +5807,7 @@ function nonBlank(value) {
5805
5807
  return trimmed ? trimmed : void 0;
5806
5808
  }
5807
5809
  function resolveBuildCommit(env = process.env) {
5808
- const embedded = true ? "248bb6e43737a9fdd7b9fc5f05a1e150c58843a4" : void 0;
5810
+ const embedded = true ? "9caa25b0ba175e5a81276cef6fe4c541f3f40073" : void 0;
5809
5811
  return nonBlank(embedded) ?? nonBlank(env.CANONRY_COMMIT);
5810
5812
  }
5811
5813
  function resolveInstanceIdentity(env = process.env) {
@@ -11948,7 +11950,14 @@ function pageDiscoverySource(page) {
11948
11950
  if (page.provenance.sitemapSources.length > 0) return "sitemap";
11949
11951
  return "link";
11950
11952
  }
11953
+ function urlVersionOf(page) {
11954
+ return siteCrawlUrlVersionOf({ fetchState: page.state, url: page.requestedUrl, canonicalUrl: page.canonicalUrl });
11955
+ }
11956
+ function isScoredPage(page) {
11957
+ return page.audit != null && urlVersionOf(page) === null;
11958
+ }
11951
11959
  function pageAuditState(page) {
11960
+ if (urlVersionOf(page) !== null) return SITE_CRAWL_URL_VERSION_AUDIT_STATE;
11952
11961
  if (page.audit) return "success";
11953
11962
  if (page.state === "fetch-error") return "error";
11954
11963
  return "not-applicable";
@@ -11962,7 +11971,7 @@ function isCancelled(error, signal) {
11962
11971
  return error instanceof DOMException && error.name === "AbortError";
11963
11972
  }
11964
11973
  function isLegacyScorecardPage(page) {
11965
- return page.audit != null || page.state === "fetch-error";
11974
+ return isScoredPage(page) || page.state === "fetch-error";
11966
11975
  }
11967
11976
  function emptyCompleteCrawlError(rootUrl, finalRootUrl, pagesObserved) {
11968
11977
  if (!finalRootUrl) return new Error(`Site audit could not successfully audit any of ${pagesObserved} observed page(s).`);
@@ -12110,7 +12119,8 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
12110
12119
  }
12111
12120
  };
12112
12121
  const persistPage = (tx, page, now) => {
12113
- const audit = page.audit;
12122
+ const versionOf = urlVersionOf(page);
12123
+ const audit = versionOf === null ? page.audit : null;
12114
12124
  const canonicalNodeKey = page.canonicalUrl ? nodeKeyByUrl.get(page.canonicalUrl) ?? null : null;
12115
12125
  const healthState = deriveSiteHealthState({
12116
12126
  fetchState: page.state,
@@ -12147,6 +12157,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
12147
12157
  indexabilityState: page.indexability.state,
12148
12158
  indexabilityReasons: page.indexability.reasons,
12149
12159
  healthState,
12160
+ urlVersionOf: versionOf,
12150
12161
  auditState: pageAuditState(page),
12151
12162
  auditScore: audit?.overallScore ?? null,
12152
12163
  auditFields: audit ? crawlAuditFields(audit) : {},
@@ -12181,6 +12192,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
12181
12192
  indexabilityState: page.indexability.state,
12182
12193
  indexabilityReasons: page.indexability.reasons,
12183
12194
  healthState,
12195
+ urlVersionOf: versionOf,
12184
12196
  auditState: pageAuditState(page),
12185
12197
  auditScore: audit?.overallScore ?? null,
12186
12198
  auditFields: audit ? crawlAuditFields(audit) : {},
@@ -12353,8 +12365,7 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
12353
12365
  onEvent: persistEvent
12354
12366
  });
12355
12367
  const crawlSummary = report.summary;
12356
- const hasAuditedPages = crawlSummary.auditRollup.auditedPages > 0;
12357
- if (crawlSummary.complete && !hasAuditedPages) {
12368
+ if (crawlSummary.complete && crawlSummary.auditRollup.auditedPages === 0) {
12358
12369
  throw emptyCompleteCrawlError(crawlSummary.rootUrl, crawlSummary.finalRootUrl, crawlSummary.pagesObserved);
12359
12370
  }
12360
12371
  const placementRulesetVersion = crawlSummary.linkPlacementRulesetVersion ?? null;
@@ -12379,7 +12390,11 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
12379
12390
  rootUrl: crawlSummary.finalRootUrl ?? crawlSummary.rootUrl
12380
12391
  }, { signal: opts.signal, timeoutMs: opts.graphLayoutTimeoutMs });
12381
12392
  const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
12382
- const factors = computeFactorAverages([...observedPages.values()]);
12393
+ const pageObservations = [...observedPages.values()].filter((page) => urlVersionOf(page) === null);
12394
+ const scoredPages = pageObservations.filter(isScoredPage);
12395
+ const pagesAudited = scoredPages.length;
12396
+ const aggregateScore = pagesAudited > 0 ? Math.round(scoredPages.reduce((total, page) => total + page.audit.overallScore, 0) / pagesAudited) : null;
12397
+ const factors = computeFactorAverages(pageObservations);
12383
12398
  const errorCount = observedErrorCount(observedPages.values());
12384
12399
  const terminalStatus = crawlSummary.complete ? "completed" : "partial";
12385
12400
  const deadLinksChecked = opts.checkDeadLinks ? deadLinkCheckedCount(observedEdges.values(), observedPages.values()) : 0;
@@ -12387,8 +12402,8 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
12387
12402
  const unverifiedLinks = report.deadLinks.unverified;
12388
12403
  const deadLinksFound = deadLinkFindings.length;
12389
12404
  const deadLinksUnverified = new Set(unverifiedLinks.map((finding) => finding.to)).size;
12390
- const legacyIssues = factors.map((factor) => toLegacyIssue(factor, crawlSummary.auditRollup.auditedPages)).filter((issue) => issue !== null);
12391
- const issueEvidence = buildSiteCrawlIssueEvidence(crawlSummary.siteIssues, observedPages.values());
12405
+ const legacyIssues = factors.map((factor) => toLegacyIssue(factor, pagesAudited)).filter((issue) => issue !== null);
12406
+ const issueEvidence = buildSiteCrawlIssueEvidence(crawlSummary.siteIssues, pageObservations);
12392
12407
  try {
12393
12408
  persistSiteCrawlGraphLayout(db, { projectId, runId, attemptId }, graphLayout, finishedAt);
12394
12409
  } catch (error) {
@@ -12420,16 +12435,16 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
12420
12435
  const published = db.transaction((tx) => {
12421
12436
  const claim2 = tx.update(runs).set({ status: terminalStatus, finishedAt }).where(and14(eq18(runs.id, runId), eq18(runs.status, "running"))).run();
12422
12437
  if (claim2.changes === 0) return false;
12423
- if (hasAuditedPages) {
12438
+ if (aggregateScore !== null) {
12424
12439
  tx.insert(siteAuditSnapshots).values({
12425
12440
  id: crypto19.randomUUID(),
12426
12441
  projectId,
12427
12442
  runId,
12428
12443
  sitemapUrl: opts.sitemapUrl ?? new URL("/sitemap.xml", crawlRootUrl).href,
12429
12444
  auditedAt: crawlSummary.completedAt,
12430
- aggregateScore: crawlSummary.auditRollup.aggregateScore ?? 0,
12445
+ aggregateScore,
12431
12446
  pagesDiscovered: crawlSummary.pagesDiscovered,
12432
- pagesAudited: crawlSummary.auditRollup.auditedPages,
12447
+ pagesAudited,
12433
12448
  pagesSkipped: Math.max(0, crawlSummary.pagesDiscovered - crawlSummary.pagesObserved),
12434
12449
  pagesErrored: errorCount,
12435
12450
  factorAverages: factors,
@@ -12558,9 +12573,9 @@ async function executeSiteAudit(db, runId, projectId, opts = {}) {
12558
12573
  termination: crawlSummary.terminationReason,
12559
12574
  pagesDiscovered: crawlSummary.pagesDiscovered,
12560
12575
  pagesFetched: crawlSummary.pagesFetched,
12561
- pagesAudited: crawlSummary.auditRollup.auditedPages,
12576
+ pagesAudited,
12562
12577
  pagesErrored: errorCount,
12563
- aggregateScore: crawlSummary.auditRollup.aggregateScore,
12578
+ aggregateScore,
12564
12579
  pageBudget: maxPages,
12565
12580
  checkDeadLinks: opts.checkDeadLinks ?? false,
12566
12581
  deadLinksFound
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  registeredProviderNames
3
- } from "./chunk-3ZF3T3OG.js";
3
+ } from "./chunk-ALXQPMYR.js";
4
4
  import {
5
5
  configExists,
6
6
  loadConfigRaw
7
- } from "./chunk-6RI7JFFI.js";
7
+ } from "./chunk-3NOFNFGV.js";
8
8
 
9
9
  // src/setup-state.ts
10
10
  import fs from "fs";
@@ -28,7 +28,7 @@ async function buildSetupState() {
28
28
  }
29
29
  if (dbPath && fs.existsSync(dbPath)) {
30
30
  try {
31
- const { createClient, projects, queries: queriesTable } = await import("./src-WDWTA7ON.js");
31
+ const { createClient, projects, queries: queriesTable } = await import("./src-6ZMVHPAY.js");
32
32
  const db = createClient(dbPath);
33
33
  project_count = db.select({ id: projects.id }).from(projects).all().length;
34
34
  const firstQuery = db.select({ id: queriesTable.id }).from(queriesTable).limit(1).all();
@@ -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-GSPGAHMD.js");
50
+ const { serveCommand } = await import("./serve-4X3LDV6K.js");
51
51
  await serveCommand(format);
52
52
  }
53
53
 
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-BGTJTKOJ.js";
3
+ } from "./chunk-T6IV35KG.js";
4
4
  import {
5
5
  emitJsonl
6
6
  } from "./chunk-Z7IUAJOF.js";
@@ -19,7 +19,7 @@ import {
19
19
  formatMicros,
20
20
  formatRunErrorOneLine,
21
21
  resolveProviderInput
22
- } from "./chunk-6JGQT4OH.js";
22
+ } from "./chunk-A3NSYJJL.js";
23
23
 
24
24
  // src/commands/run.ts
25
25
  function getClient() {
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  createApiClient
3
- } from "./chunk-BGTJTKOJ.js";
4
- import "./chunk-6RI7JFFI.js";
3
+ } from "./chunk-T6IV35KG.js";
4
+ import "./chunk-3NOFNFGV.js";
5
5
  import "./chunk-AOJU5LKX.js";
6
6
  import "./chunk-HGMYEDAQ.js";
7
- import "./chunk-6JGQT4OH.js";
7
+ import "./chunk-A3NSYJJL.js";
8
8
  import "./chunk-MLKGABMK.js";
9
9
 
10
10
  // src/commands/citations.ts