@canonry/canonry 4.154.1 → 4.156.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 (37) hide show
  1. package/assets/agent-workspace/AGENTS.md +2 -2
  2. package/assets/agent-workspace/skills/aero/references/orchestration.md +3 -3
  3. package/assets/agent-workspace/skills/canonry/SKILL.md +2 -2
  4. package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +27 -7
  5. package/assets/assets/{AuditHistoryPanel-WKf-vvmg.js → AuditHistoryPanel-gmJMVlXX.js} +1 -1
  6. package/assets/assets/{BacklinksPage-By06DbHN.js → BacklinksPage-Bv2sTCyN.js} +1 -1
  7. package/assets/assets/{HistoryPage-C_PcPiyX.js → HistoryPage-13q7GkiI.js} +1 -1
  8. package/assets/assets/{MeasurementPropertyPage-BHnNegEa.js → MeasurementPropertyPage-BgBqXT1p.js} +1 -1
  9. package/assets/assets/ProjectPage-EsGwKhot.js +15 -0
  10. package/assets/assets/{RunRow-9qn5Eer_.js → RunRow-bPzapIGJ.js} +1 -1
  11. package/assets/assets/{RunsPage-FxMTprK1.js → RunsPage-Dqfz18lH.js} +1 -1
  12. package/assets/assets/{SettingsPage-Cr7_PrNW.js → SettingsPage-_wMecn-V.js} +1 -1
  13. package/assets/assets/{TrafficPage-D0qk9uMN.js → TrafficPage-RYBdsOLB.js} +1 -1
  14. package/assets/assets/{TrafficSourceDetailPage-CXa_3_Gy.js → TrafficSourceDetailPage-DpeMMyKU.js} +1 -1
  15. package/assets/assets/{extract-error-message-RkTEH1Vb.js → extract-error-message-DUarAlyD.js} +1 -1
  16. package/assets/assets/index-BxegEwic.css +1 -0
  17. package/assets/assets/index-DP-fT2uI.js +83 -0
  18. package/assets/assets/react-sigma_core.esm.min-DnypJl5w.js +312 -0
  19. package/assets/assets/vendor-lucide-BtYdosYk.js +1 -0
  20. package/assets/assets/{vendor-markdown-CpDJch4G.js → vendor-markdown-D274_wsI.js} +1 -1
  21. package/assets/assets/{vendor-radix-DnzzbllM.js → vendor-radix-BxMXSwbC.js} +1 -1
  22. package/assets/assets/{vendor-recharts-33ACLxsD.js → vendor-recharts-C4ktw_aE.js} +1 -1
  23. package/assets/assets/{vendor-tanstack-BjS7iY3g.js → vendor-tanstack-pFxw0eGP.js} +1 -1
  24. package/assets/index.html +7 -7
  25. package/dist/{chunk-KRMLGFY3.js → chunk-ABNN2ZVR.js} +2438 -114
  26. package/dist/{chunk-NNW7TJUZ.js → chunk-AMPT2EP7.js} +527 -5
  27. package/dist/{chunk-ANSQ6JNO.js → chunk-CPASKGUE.js} +563 -4
  28. package/dist/{chunk-JOP2DGXL.js → chunk-ZWESOFA5.js} +1230 -310
  29. package/dist/cli.js +742 -8
  30. package/dist/index.js +4 -4
  31. package/dist/{intelligence-service-ZY5KOSZV.js → intelligence-service-WHC7B32V.js} +2 -2
  32. package/dist/mcp.js +4 -4
  33. package/package.json +13 -11
  34. package/assets/assets/ProjectPage-VTbW21dz.js +0 -12
  35. package/assets/assets/index-DyL54s8x.css +0 -1
  36. package/assets/assets/index-nSWJ9yka.js +0 -83
  37. package/assets/assets/vendor-lucide-ByU7vBHt.js +0 -1
@@ -8441,6 +8441,7 @@ var snapshotReportSchema = z23.object({
8441
8441
 
8442
8442
  // ../contracts/src/technical-aeo.ts
8443
8443
  import { z as z24 } from "zod";
8444
+ var nullableRunStatusSchema = z24.union([runStatusSchema, z24.null()]);
8444
8445
  var siteAuditFactorStatusSchema = z24.enum(["pass", "partial", "fail"]);
8445
8446
  var SiteAuditFactorStatuses = siteAuditFactorStatusSchema.enum;
8446
8447
  function factorStatusFromScore(score) {
@@ -8475,7 +8476,7 @@ var siteAuditScoreSchema = z24.object({
8475
8476
  project: z24.string(),
8476
8477
  hasData: z24.boolean(),
8477
8478
  runId: z24.string().nullable(),
8478
- runStatus: runStatusSchema.nullable(),
8479
+ runStatus: nullableRunStatusSchema,
8479
8480
  sitemapUrl: z24.string().nullable(),
8480
8481
  auditedAt: z24.string().nullable(),
8481
8482
  aggregateScore: z24.number(),
@@ -8523,12 +8524,498 @@ var siteAuditTrendResponseSchema = z24.object({
8523
8524
  project: z24.string(),
8524
8525
  points: z24.array(siteAuditTrendPointSchema).default([])
8525
8526
  });
8527
+ var siteCrawlDeadLinkStateSchema = z24.enum(["disabled", "complete", "partial", "unavailable"]);
8528
+ var SiteCrawlDeadLinkStates = siteCrawlDeadLinkStateSchema.enum;
8529
+ var siteCrawlCountsSchema = z24.object({
8530
+ pagesDiscovered: z24.number().int().nonnegative(),
8531
+ pagesFetched: z24.number().int().nonnegative(),
8532
+ pagesEligible: z24.number().int().nonnegative(),
8533
+ edges: z24.number().int().nonnegative(),
8534
+ findings: z24.number().int().nonnegative()
8535
+ });
8536
+ var siteCrawlDeadLinksSummarySchema = z24.discriminatedUnion("state", [
8537
+ z24.object({ state: z24.literal("unavailable") }),
8538
+ z24.object({ state: z24.literal("disabled") }),
8539
+ z24.object({ state: z24.literal("complete"), checked: z24.number().int().nonnegative(), found: z24.number().int().nonnegative() }),
8540
+ z24.object({ state: z24.literal("partial"), checked: z24.number().int().nonnegative(), found: z24.number().int().nonnegative() })
8541
+ ]);
8542
+ var siteCrawlSummarySchema = z24.object({
8543
+ project: z24.string(),
8544
+ hasCrawlData: z24.boolean(),
8545
+ legacyAuditAvailable: z24.boolean(),
8546
+ runId: z24.string().nullable(),
8547
+ runStatus: nullableRunStatusSchema,
8548
+ /** Root URL originally requested by the operator; null for legacy snapshots. */
8549
+ requestedRootUrl: z24.string().nullable(),
8550
+ /** Effective root followed by the crawl after any supported host redirect. */
8551
+ rootUrl: z24.string().nullable(),
8552
+ crawlSchemaVersion: z24.string().nullable().optional(),
8553
+ engineVersion: z24.string().nullable().optional(),
8554
+ normalizationVersion: z24.string().nullable().optional(),
8555
+ indexabilityVersion: z24.string().nullable().optional(),
8556
+ linkScoreVersion: z24.string().nullable().optional(),
8557
+ effectiveOptions: z24.record(z24.string(), z24.unknown()).default({}),
8558
+ complete: z24.boolean(),
8559
+ termination: z24.string().nullable(),
8560
+ detailsAvailable: z24.boolean(),
8561
+ counts: siteCrawlCountsSchema,
8562
+ deadLinks: siteCrawlDeadLinksSummarySchema
8563
+ });
8564
+ var siteHealthStateSchema = z24.enum(["eligible", "hidden", "failed", "unchecked"]);
8565
+ var SiteCrawlFetchStates = {
8566
+ discovered: "discovered",
8567
+ robotsBlocked: "robots-blocked",
8568
+ html: "html",
8569
+ redirect: "redirect",
8570
+ nonHtml: "non-html",
8571
+ fetchError: "fetch-error"
8572
+ };
8573
+ var SiteCrawlFetchedStates = [
8574
+ SiteCrawlFetchStates.html,
8575
+ SiteCrawlFetchStates.redirect,
8576
+ SiteCrawlFetchStates.nonHtml,
8577
+ SiteCrawlFetchStates.fetchError
8578
+ ];
8579
+ var SiteCrawlIndexabilityStates = {
8580
+ indexable: "indexable",
8581
+ noindex: "noindex",
8582
+ blocked: "blocked",
8583
+ unknown: "unknown"
8584
+ };
8585
+ var SiteCrawlIndexabilityReasons = {
8586
+ robotsDisallow: "robots-disallow",
8587
+ redirectTerminal: "redirect-terminal",
8588
+ metaRobotsNoindex: "meta-robots-noindex",
8589
+ xRobotsNoindex: "x-robots-noindex",
8590
+ canonicalToOther: "canonical-to-other",
8591
+ notHtmlOrUnavailable: "not-html-or-unavailable"
8592
+ };
8593
+ function pointsToOtherCanonical(input) {
8594
+ return input.indexabilityReasons?.some((reason) => reason === SiteCrawlIndexabilityReasons.canonicalToOther) === true || input.nodeKey !== void 0 && input.canonicalNodeKey !== null && input.canonicalNodeKey !== void 0 && input.canonicalNodeKey !== input.nodeKey;
8595
+ }
8596
+ function deriveSiteHealthState(input) {
8597
+ switch (input.fetchState) {
8598
+ case SiteCrawlFetchStates.fetchError:
8599
+ return "failed";
8600
+ case SiteCrawlFetchStates.discovered:
8601
+ return "unchecked";
8602
+ case SiteCrawlFetchStates.redirect:
8603
+ case SiteCrawlFetchStates.robotsBlocked:
8604
+ case SiteCrawlFetchStates.nonHtml:
8605
+ return "hidden";
8606
+ case SiteCrawlFetchStates.html:
8607
+ break;
8608
+ default:
8609
+ return "unchecked";
8610
+ }
8611
+ if (pointsToOtherCanonical(input)) return "hidden";
8612
+ switch (input.indexabilityState) {
8613
+ case SiteCrawlIndexabilityStates.indexable:
8614
+ return "eligible";
8615
+ case SiteCrawlIndexabilityStates.noindex:
8616
+ case SiteCrawlIndexabilityStates.blocked:
8617
+ return "hidden";
8618
+ case SiteCrawlIndexabilityStates.unknown:
8619
+ default:
8620
+ return "unchecked";
8621
+ }
8622
+ }
8623
+ var siteCrawlPageSchema = z24.object({
8624
+ nodeKey: z24.string(),
8625
+ url: z24.string(),
8626
+ finalUrl: z24.string().nullable(),
8627
+ path: z24.string(),
8628
+ parentPath: z24.string(),
8629
+ discoverySource: z24.string(),
8630
+ fetchState: z24.string(),
8631
+ httpStatus: z24.number().int().nullable(),
8632
+ canonicalUrl: z24.string().nullable(),
8633
+ indexabilityState: z24.string(),
8634
+ indexabilityReasons: z24.array(z24.string()).default([]),
8635
+ auditState: z24.string(),
8636
+ auditScore: z24.number().nullable(),
8637
+ inventoryEligible: z24.boolean(),
8638
+ depth: z24.number().int().nullable(),
8639
+ inboundUniqueEdges: z24.number().int().nonnegative(),
8640
+ outboundUniqueEdges: z24.number().int().nonnegative(),
8641
+ inboundOccurrences: z24.number().int().nonnegative(),
8642
+ outboundOccurrences: z24.number().int().nonnegative(),
8643
+ linkScoreRaw: z24.number().nullable(),
8644
+ linkScoreNormalized: z24.number().nullable(),
8645
+ healthState: siteHealthStateSchema
8646
+ });
8647
+ var siteCrawlAuditFindingSchema = z24.object({
8648
+ type: z24.enum(["found", "missing", "info", "timeout", "unreachable"]),
8649
+ /** Stable machine code; UI and agents must not key behavior off `message`. */
8650
+ code: z24.string().min(1),
8651
+ message: z24.string().min(1)
8652
+ });
8653
+ var siteCrawlAuditFactorSchema = siteAuditPageFactorSchema.extend({
8654
+ status: siteAuditFactorStatusSchema,
8655
+ /** `null` means the engine did not explicitly classify applicability. */
8656
+ applicable: z24.boolean().nullable(),
8657
+ findings: z24.array(siteCrawlAuditFindingSchema).default([]),
8658
+ recommendations: z24.array(z24.string()).default([])
8659
+ });
8660
+ var siteCrawlCriticalDefectSchema = z24.object({
8661
+ id: z24.string().min(1),
8662
+ severity: z24.enum(["critical", "warning"]),
8663
+ detail: z24.string().min(1),
8664
+ recommendation: z24.string().min(1)
8665
+ });
8666
+ var siteCrawlPageAuditProvenanceSchema = z24.object({
8667
+ project: z24.string(),
8668
+ runId: z24.string(),
8669
+ complete: z24.boolean(),
8670
+ termination: z24.string().nullable()
8671
+ });
8672
+ var siteCrawlPageAuditIdentitySchema = z24.object({
8673
+ nodeKey: z24.string(),
8674
+ url: z24.string(),
8675
+ auditState: z24.string()
8676
+ });
8677
+ var siteCrawlPageAuditSchema = z24.discriminatedUnion("state", [
8678
+ z24.object({
8679
+ state: z24.literal("no-crawl"),
8680
+ project: z24.string(),
8681
+ runId: z24.null()
8682
+ }),
8683
+ siteCrawlPageAuditProvenanceSchema.extend({ state: z24.literal("details-unavailable") }),
8684
+ siteCrawlPageAuditProvenanceSchema.extend({ state: z24.literal("not-found") }),
8685
+ siteCrawlPageAuditProvenanceSchema.merge(siteCrawlPageAuditIdentitySchema).extend({
8686
+ state: z24.literal("not-audited"),
8687
+ auditScore: z24.null(),
8688
+ factors: z24.array(siteCrawlAuditFactorSchema).length(0).default([]),
8689
+ criticalDefects: z24.array(siteCrawlCriticalDefectSchema).length(0).default([])
8690
+ }),
8691
+ siteCrawlPageAuditProvenanceSchema.merge(siteCrawlPageAuditIdentitySchema).extend({
8692
+ state: z24.literal("ready"),
8693
+ auditScore: z24.number(),
8694
+ /** Old crawl rows retain factor scores but did not persist evidence prose. */
8695
+ evidenceState: z24.enum(["complete", "scores-only"]),
8696
+ factors: z24.array(siteCrawlAuditFactorSchema).default([]),
8697
+ criticalDefects: z24.array(siteCrawlCriticalDefectSchema).default([])
8698
+ })
8699
+ ]);
8700
+ var siteCrawlPagesResponseSchema = z24.object({
8701
+ project: z24.string(),
8702
+ hasCrawlData: z24.boolean(),
8703
+ runId: z24.string().nullable(),
8704
+ total: z24.number().int().nonnegative(),
8705
+ nextCursor: z24.string().nullable(),
8706
+ pages: z24.array(siteCrawlPageSchema).default([])
8707
+ });
8708
+ var siteCrawlStructureChildSchema = z24.object({
8709
+ path: z24.string(),
8710
+ /** URL of the exact folder landing page, null for a synthetic hierarchy node. */
8711
+ url: z24.string().nullable(),
8712
+ hasPage: z24.boolean(),
8713
+ pageCount: z24.number().int().positive(),
8714
+ inventoryEligibleCount: z24.number().int().nonnegative(),
8715
+ fetchedCount: z24.number().int().nonnegative()
8716
+ });
8717
+ var siteCrawlStructureResponseSchema = z24.object({
8718
+ project: z24.string(),
8719
+ hasCrawlData: z24.boolean(),
8720
+ runId: z24.string().nullable(),
8721
+ parentPath: z24.string(),
8722
+ nextCursor: z24.string().nullable(),
8723
+ children: z24.array(siteCrawlStructureChildSchema).default([])
8724
+ });
8725
+ var siteCrawlEdgeSchema = z24.object({
8726
+ edgeKey: z24.string(),
8727
+ sourceNodeKey: z24.string(),
8728
+ sourceUrl: z24.string(),
8729
+ targetNodeKey: z24.string().nullable(),
8730
+ targetUrl: z24.string(),
8731
+ relation: z24.string(),
8732
+ internal: z24.boolean(),
8733
+ followable: z24.boolean(),
8734
+ occurrences: z24.number().int().positive(),
8735
+ followableOccurrences: z24.number().int().nonnegative(),
8736
+ nofollowOccurrences: z24.number().int().nonnegative(),
8737
+ anchors: z24.array(z24.string()).default([])
8738
+ });
8739
+ var siteCrawlGraphNodeSchema = z24.object({
8740
+ nodeKey: z24.string(),
8741
+ url: z24.string(),
8742
+ path: z24.string(),
8743
+ depth: z24.number().int().nonnegative().nullable(),
8744
+ indexabilityState: z24.string(),
8745
+ fetchState: z24.string(),
8746
+ auditState: z24.string(),
8747
+ auditScore: z24.number().nullable(),
8748
+ inventoryEligible: z24.boolean(),
8749
+ inboundUniqueEdges: z24.number().int().nonnegative(),
8750
+ outboundUniqueEdges: z24.number().int().nonnegative(),
8751
+ linkScoreNormalized: z24.number().nullable(),
8752
+ healthState: siteHealthStateSchema,
8753
+ /** Publish-time ForceAtlas2 coordinate. Reads never run layout physics. */
8754
+ x: z24.number(),
8755
+ /** Publish-time ForceAtlas2 coordinate. Reads never run layout physics. */
8756
+ y: z24.number()
8757
+ });
8758
+ var siteCrawlGraphEdgeSchema = z24.object({
8759
+ edgeKey: z24.string(),
8760
+ sourceNodeKey: z24.string(),
8761
+ targetNodeKey: z24.string(),
8762
+ followable: z24.boolean(),
8763
+ occurrences: z24.number().int().positive()
8764
+ });
8765
+ var siteCrawlGraphLayoutSchema = z24.discriminatedUnion("state", [
8766
+ z24.object({
8767
+ state: z24.literal("ready"),
8768
+ version: z24.string().min(1),
8769
+ computedAt: z24.string().min(1)
8770
+ }),
8771
+ z24.object({
8772
+ state: z24.literal("unavailable"),
8773
+ version: z24.null(),
8774
+ reason: z24.enum(["no-crawl", "legacy-snapshot", "details-unavailable", "layout-failed", "empty-crawl"])
8775
+ })
8776
+ ]);
8777
+ var siteCrawlGraphResponseSchema = z24.object({
8778
+ project: z24.string(),
8779
+ hasCrawlData: z24.boolean(),
8780
+ runId: z24.string().nullable(),
8781
+ layout: siteCrawlGraphLayoutSchema,
8782
+ /** Total canonical pages in the persisted crawl before graph sampling. */
8783
+ totalNodes: z24.number().int().nonnegative(),
8784
+ /** Total graph-compatible internal anchor edges before graph sampling. */
8785
+ totalEdges: z24.number().int().nonnegative(),
8786
+ nodes: z24.array(siteCrawlGraphNodeSchema).default([]),
8787
+ edges: z24.array(siteCrawlGraphEdgeSchema).default([]),
8788
+ omittedNodes: z24.number().int().nonnegative(),
8789
+ omittedEdges: z24.number().int().nonnegative(),
8790
+ /** True when publish/read caps or a layout failure omit graph rows. */
8791
+ sampled: z24.boolean()
8792
+ });
8793
+ var SITE_CRAWL_GRAPH_DEFAULT_MAX_NODES = 2e4;
8794
+ var SITE_CRAWL_GRAPH_MAX_NODES = 2e4;
8795
+ var SITE_CRAWL_GRAPH_DEFAULT_MAX_EDGES = 5e4;
8796
+ var SITE_CRAWL_GRAPH_MAX_EDGES = 5e4;
8797
+ var siteHealthSubgraphRelationSchema = z24.enum([
8798
+ "focus",
8799
+ "inbound",
8800
+ "outbound",
8801
+ "both",
8802
+ "transitive"
8803
+ ]);
8804
+ var siteHealthSubgraphNodeSchema = siteCrawlPageSchema.extend({
8805
+ distance: z24.number().int().nonnegative(),
8806
+ relationToFocus: siteHealthSubgraphRelationSchema
8807
+ });
8808
+ var siteHealthSubgraphResponseSchema = z24.object({
8809
+ project: z24.string(),
8810
+ hasCrawlData: z24.boolean(),
8811
+ runId: z24.string().nullable(),
8812
+ /** Selected snapshot provenance. Historical partial crawls stay explicit. */
8813
+ complete: z24.boolean(),
8814
+ termination: z24.string().nullable(),
8815
+ state: z24.enum(["no-crawl", "details-unavailable", "ready"]),
8816
+ focusNodeKey: z24.string().nullable(),
8817
+ focusUrl: z24.string().nullable(),
8818
+ hops: z24.number().int().min(0).max(3),
8819
+ totalNodes: z24.number().int().nonnegative(),
8820
+ totalEdges: z24.number().int().nonnegative(),
8821
+ nodes: z24.array(siteHealthSubgraphNodeSchema).default([]),
8822
+ edges: z24.array(siteCrawlEdgeSchema).default([]),
8823
+ omittedNodes: z24.number().int().nonnegative(),
8824
+ omittedEdges: z24.number().int().nonnegative(),
8825
+ /** `lower-bound` means totals and omissions are minimums because traversal hit a cap. */
8826
+ countAccuracy: z24.enum(["exact", "lower-bound"]),
8827
+ truncated: z24.boolean()
8828
+ });
8829
+ var SITE_HEALTH_SUBGRAPH_DEFAULT_MAX_NODES = 25;
8830
+ var SITE_HEALTH_SUBGRAPH_MAX_NODES = 200;
8831
+ var SITE_HEALTH_SUBGRAPH_DEFAULT_MAX_EDGES = 50;
8832
+ var SITE_HEALTH_SUBGRAPH_MAX_EDGES = 500;
8833
+ var siteHealthNodeReferenceSchema = z24.object({
8834
+ nodeKey: z24.string(),
8835
+ url: z24.string(),
8836
+ path: z24.string()
8837
+ });
8838
+ var siteHealthPathResponseSchema = z24.object({
8839
+ project: z24.string(),
8840
+ runId: z24.string().nullable(),
8841
+ /** Selected snapshot provenance. `unreachable` on a partial crawl is not a site-wide claim. */
8842
+ complete: z24.boolean(),
8843
+ termination: z24.string().nullable(),
8844
+ state: z24.enum(["no-crawl", "details-unavailable", "found", "unreachable", "truncated"]),
8845
+ from: siteHealthNodeReferenceSchema.nullable(),
8846
+ to: siteHealthNodeReferenceSchema.nullable(),
8847
+ maxDepth: z24.number().int().positive(),
8848
+ visitedNodes: z24.number().int().nonnegative(),
8849
+ nodes: z24.array(siteCrawlPageSchema).default([]),
8850
+ edges: z24.array(siteCrawlEdgeSchema).default([])
8851
+ });
8852
+ var SITE_HEALTH_PATH_DEFAULT_MAX_DEPTH = 12;
8853
+ var SITE_HEALTH_PATH_MAX_DEPTH = 24;
8854
+ var SITE_HEALTH_PATH_MAX_VISITED_NODES = 5e3;
8855
+ var siteHealthChangeKindSchema = z24.enum(["added", "removed", "changed"]);
8856
+ var siteHealthPageChangeSchema = z24.object({
8857
+ entity: z24.literal("page"),
8858
+ change: siteHealthChangeKindSchema,
8859
+ key: z24.string(),
8860
+ changedFields: z24.array(z24.string()).default([]),
8861
+ before: siteCrawlPageSchema.nullable(),
8862
+ after: siteCrawlPageSchema.nullable()
8863
+ });
8864
+ var siteHealthLinkChangeSchema = z24.object({
8865
+ entity: z24.literal("link"),
8866
+ change: siteHealthChangeKindSchema,
8867
+ key: z24.string(),
8868
+ changedFields: z24.array(z24.string()).default([]),
8869
+ before: siteCrawlEdgeSchema.nullable(),
8870
+ after: siteCrawlEdgeSchema.nullable()
8871
+ });
8872
+ var siteHealthChangeRecordSchema = z24.discriminatedUnion("entity", [
8873
+ siteHealthPageChangeSchema,
8874
+ siteHealthLinkChangeSchema
8875
+ ]);
8876
+ var siteHealthChangeCountsSchema = z24.object({
8877
+ added: z24.number().int().nonnegative(),
8878
+ removed: z24.number().int().nonnegative(),
8879
+ changed: z24.number().int().nonnegative()
8880
+ });
8881
+ var siteHealthChangesFiltersSchema = z24.object({
8882
+ scope: z24.enum(["all", "pages", "links"]),
8883
+ change: z24.enum(["all", "added", "removed", "changed"])
8884
+ });
8885
+ var siteHealthChangesResponseSchema = z24.discriminatedUnion("state", [
8886
+ z24.object({
8887
+ project: z24.string(),
8888
+ state: z24.literal("unavailable"),
8889
+ reason: z24.enum(["no-crawl", "insufficient-history", "details-unavailable", "partial-not-comparable"]),
8890
+ fromRunId: z24.string().nullable(),
8891
+ toRunId: z24.string().nullable()
8892
+ }),
8893
+ z24.object({
8894
+ project: z24.string(),
8895
+ state: z24.literal("incompatible"),
8896
+ reason: z24.literal("incompatible-versions"),
8897
+ fromRunId: z24.string(),
8898
+ toRunId: z24.string(),
8899
+ mismatchedVersions: z24.array(z24.string()).min(1)
8900
+ }),
8901
+ z24.object({
8902
+ project: z24.string(),
8903
+ state: z24.literal("ready"),
8904
+ fromRunId: z24.string(),
8905
+ toRunId: z24.string(),
8906
+ versions: z24.object({
8907
+ crawlSchema: z24.string(),
8908
+ normalization: z24.string(),
8909
+ indexability: z24.string(),
8910
+ linkScore: z24.string()
8911
+ }),
8912
+ /** The filters whose post-filter counts and records this page represents. */
8913
+ filters: siteHealthChangesFiltersSchema,
8914
+ /** Continuations omit summary work; reuse the exact summary from the first page. */
8915
+ summaryState: z24.enum(["exact", "omitted-on-continuation"]),
8916
+ summary: z24.object({
8917
+ pages: siteHealthChangeCountsSchema,
8918
+ links: siteHealthChangeCountsSchema
8919
+ }).nullable(),
8920
+ total: z24.number().int().nonnegative().nullable(),
8921
+ nextCursor: z24.string().nullable(),
8922
+ changes: z24.array(siteHealthChangeRecordSchema).default([])
8923
+ })
8924
+ ]);
8925
+ var SITE_HEALTH_CHANGES_DEFAULT_LIMIT = 25;
8926
+ var SITE_HEALTH_CHANGES_MAX_LIMIT = 100;
8927
+ var siteCrawlInternalLinksResponseSchema = z24.object({
8928
+ project: z24.string(),
8929
+ hasCrawlData: z24.boolean(),
8930
+ runId: z24.string().nullable(),
8931
+ total: z24.number().int().nonnegative(),
8932
+ nextCursor: z24.string().nullable(),
8933
+ edges: z24.array(siteCrawlEdgeSchema).default([])
8934
+ });
8935
+ var siteCrawlNeighborsResponseSchema = z24.object({
8936
+ project: z24.string(),
8937
+ hasCrawlData: z24.boolean(),
8938
+ runId: z24.string().nullable(),
8939
+ nodeKey: z24.string().nullable(),
8940
+ url: z24.string().nullable(),
8941
+ inbound: z24.array(siteCrawlEdgeSchema).default([]),
8942
+ outbound: z24.array(siteCrawlEdgeSchema).default([]),
8943
+ inboundTruncated: z24.boolean(),
8944
+ outboundTruncated: z24.boolean()
8945
+ });
8946
+ var siteCrawlDeadLinkSchema = z24.object({
8947
+ findingKey: z24.string(),
8948
+ severity: z24.string(),
8949
+ sourceNodeKey: z24.string().nullable(),
8950
+ sourceUrl: z24.string().nullable(),
8951
+ targetNodeKey: z24.string().nullable(),
8952
+ targetUrl: z24.string().nullable(),
8953
+ evidence: z24.record(z24.string(), z24.unknown()).default({})
8954
+ });
8955
+ var siteCrawlDeadLinksResponseSchema = z24.discriminatedUnion("state", [
8956
+ z24.object({ project: z24.string(), runId: z24.string().nullable(), state: z24.literal("unavailable"), legacyAuditAvailable: z24.boolean() }),
8957
+ z24.object({ project: z24.string(), runId: z24.string(), state: z24.literal("disabled"), checkDeadLinks: z24.literal(false) }),
8958
+ z24.object({
8959
+ project: z24.string(),
8960
+ runId: z24.string(),
8961
+ state: z24.literal("complete"),
8962
+ checkDeadLinks: z24.literal(true),
8963
+ checked: z24.number().int().nonnegative(),
8964
+ found: z24.number().int().nonnegative(),
8965
+ total: z24.number().int().nonnegative(),
8966
+ nextCursor: z24.string().nullable(),
8967
+ deadLinks: z24.array(siteCrawlDeadLinkSchema).default([])
8968
+ }),
8969
+ z24.object({
8970
+ project: z24.string(),
8971
+ runId: z24.string(),
8972
+ state: z24.literal("partial"),
8973
+ checkDeadLinks: z24.literal(true),
8974
+ checked: z24.number().int().nonnegative(),
8975
+ found: z24.number().int().nonnegative(),
8976
+ total: z24.number().int().nonnegative(),
8977
+ nextCursor: z24.string().nullable(),
8978
+ deadLinks: z24.array(siteCrawlDeadLinkSchema).default([])
8979
+ })
8980
+ ]);
8981
+ var SITE_AUDIT_DEFAULT_PAGE_LIMIT = 1e3;
8982
+ var SITE_AUDIT_MAX_PAGE_LIMIT = 5e4;
8983
+ var SITE_AUDIT_DEFAULT_EDGE_LIMIT = 1e5;
8984
+ var SITE_AUDIT_MAX_EDGE_LIMIT = 1e6;
8526
8985
  var siteAuditRunRequestSchema = z24.object({
8527
- /** Override the sitemap URL. Defaults to `https://<canonicalDomain>/sitemap.xml`. */
8986
+ /** @deprecated Prefer the configured project sitemap; retained for compatibility. */
8528
8987
  sitemapUrl: z24.string().url().optional(),
8529
- /** Cap the number of pages audited (highest sitemap `<priority>` first). */
8530
- limit: z24.number().int().positive().max(2e3).optional()
8531
- });
8988
+ /** @deprecated Prefer `maxPages`; retained for compatibility. */
8989
+ limit: z24.number().int().positive().max(2e3).optional(),
8990
+ /** Crawl page budget. When omitted, Canonry crawls up to 1,000 pages. */
8991
+ maxPages: z24.number().int().positive().max(5e4).optional(),
8992
+ /** Internal-link observation budget. When omitted, Canonry retains up to 100,000 edges. */
8993
+ maxEdges: z24.number().int().positive().max(1e6).optional(),
8994
+ /** Maximum crawl depth from the root. */
8995
+ maxDepth: z24.number().int().min(0).max(100).optional(),
8996
+ /** Off by default; derives findings only from observed internal targets. External links are never probed. */
8997
+ checkDeadLinks: z24.boolean().default(false)
8998
+ });
8999
+ function normalizeSiteAuditRunRequest(request) {
9000
+ return {
9001
+ schemaVersion: 1,
9002
+ sitemapUrl: request.sitemapUrl ? new URL(request.sitemapUrl).toString() : null,
9003
+ maxPages: request.maxPages ?? request.limit ?? SITE_AUDIT_DEFAULT_PAGE_LIMIT,
9004
+ maxEdges: request.maxEdges ?? SITE_AUDIT_DEFAULT_EDGE_LIMIT,
9005
+ maxDepth: request.maxDepth ?? null,
9006
+ checkDeadLinks: request.checkDeadLinks === true
9007
+ };
9008
+ }
9009
+ function siteAuditRequestIdentity(request) {
9010
+ return JSON.stringify([
9011
+ request.schemaVersion,
9012
+ request.sitemapUrl,
9013
+ request.maxPages,
9014
+ request.maxEdges,
9015
+ request.maxDepth,
9016
+ request.checkDeadLinks
9017
+ ]);
9018
+ }
8532
9019
  var siteAuditRunResponseSchema = z24.object({
8533
9020
  runId: z24.string(),
8534
9021
  status: runStatusSchema
@@ -14143,9 +14630,44 @@ export {
14143
14630
  factorStatusFromScore,
14144
14631
  SiteAuditTrendDirections,
14145
14632
  siteAuditScoreSchema,
14633
+ siteAuditPageFactorSchema,
14146
14634
  siteAuditPagesResponseSchema,
14147
14635
  siteAuditTrendResponseSchema,
14636
+ siteCrawlSummarySchema,
14637
+ SiteCrawlFetchedStates,
14638
+ deriveSiteHealthState,
14639
+ siteCrawlAuditFactorSchema,
14640
+ siteCrawlCriticalDefectSchema,
14641
+ siteCrawlPageAuditSchema,
14642
+ siteCrawlPagesResponseSchema,
14643
+ siteCrawlStructureResponseSchema,
14644
+ siteCrawlGraphResponseSchema,
14645
+ SITE_CRAWL_GRAPH_DEFAULT_MAX_NODES,
14646
+ SITE_CRAWL_GRAPH_MAX_NODES,
14647
+ SITE_CRAWL_GRAPH_DEFAULT_MAX_EDGES,
14648
+ SITE_CRAWL_GRAPH_MAX_EDGES,
14649
+ siteHealthSubgraphResponseSchema,
14650
+ SITE_HEALTH_SUBGRAPH_DEFAULT_MAX_NODES,
14651
+ SITE_HEALTH_SUBGRAPH_MAX_NODES,
14652
+ SITE_HEALTH_SUBGRAPH_DEFAULT_MAX_EDGES,
14653
+ SITE_HEALTH_SUBGRAPH_MAX_EDGES,
14654
+ siteHealthPathResponseSchema,
14655
+ SITE_HEALTH_PATH_DEFAULT_MAX_DEPTH,
14656
+ SITE_HEALTH_PATH_MAX_DEPTH,
14657
+ SITE_HEALTH_PATH_MAX_VISITED_NODES,
14658
+ siteHealthChangesResponseSchema,
14659
+ SITE_HEALTH_CHANGES_DEFAULT_LIMIT,
14660
+ SITE_HEALTH_CHANGES_MAX_LIMIT,
14661
+ siteCrawlInternalLinksResponseSchema,
14662
+ siteCrawlNeighborsResponseSchema,
14663
+ siteCrawlDeadLinksResponseSchema,
14664
+ SITE_AUDIT_DEFAULT_PAGE_LIMIT,
14665
+ SITE_AUDIT_MAX_PAGE_LIMIT,
14666
+ SITE_AUDIT_DEFAULT_EDGE_LIMIT,
14667
+ SITE_AUDIT_MAX_EDGE_LIMIT,
14148
14668
  siteAuditRunRequestSchema,
14669
+ normalizeSiteAuditRunRequest,
14670
+ siteAuditRequestIdentity,
14149
14671
  siteAuditRunResponseSchema,
14150
14672
  schedulableRunKindSchema,
14151
14673
  SchedulableRunKinds,