seo 0.14.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -923,6 +923,32 @@ declare const RULE_DEFINITIONS: readonly [{
923
923
  readonly evidenceFields: ["page.robotsTxt"];
924
924
  readonly suggestedCommands: ["seo crawl <url> --json"];
925
925
  };
926
+ }, {
927
+ readonly id: "robots_txt_html";
928
+ readonly title: "robots.txt returns an HTML page";
929
+ readonly category: "indexability";
930
+ readonly defaultSeverity: "medium";
931
+ readonly whyItMatters: "Crawlers read /robots.txt as plain text rules. An HTML page there, often the home page served for every path, holds no rules and no Sitemap line, so crawlers treat the site as having no robots.txt.";
932
+ readonly howToFix: "Serve a plain text /robots.txt with the rules the site needs and a Sitemap line. Check that the catch-all route does not answer before the static file.";
933
+ readonly impactIfIgnored: "Rules meant to keep crawlers out of some paths do nothing, and crawlers must find the sitemap another way.";
934
+ readonly howToVerify: "Request /robots.txt and confirm a 200 text/plain response with User-agent lines.";
935
+ readonly agentHints: {
936
+ readonly evidenceFields: ["report.ai.robotsTxt"];
937
+ readonly suggestedCommands: ["seo crawl <url> --json"];
938
+ };
939
+ }, {
940
+ readonly id: "sitemap_url_off_host";
941
+ readonly title: "Sitemap lists URLs on another host";
942
+ readonly category: "indexability";
943
+ readonly defaultSeverity: "high";
944
+ readonly whyItMatters: "A sitemap may list only URLs on its own host, unless the other host's robots.txt or Search Console vouches for it. Localhost URLs, left by a build that used a development base URL, can never be fetched. Either way, those entries tell search engines nothing about the real pages.";
945
+ readonly howToFix: "Build the sitemap with the production URL as the base, so every <loc> uses the same scheme and host as the live site.";
946
+ readonly impactIfIgnored: "Search engines find pages only through links, and new or deep pages can take longer to be crawled.";
947
+ readonly howToVerify: "Open the sitemap and confirm every <loc> starts with the live site URL, then re-run the crawl.";
948
+ readonly agentHints: {
949
+ readonly evidenceFields: ["report.sitemapDiscovery.roots[].offHost"];
950
+ readonly suggestedCommands: ["seo crawl <url> --json"];
951
+ };
926
952
  }, {
927
953
  readonly id: "canonicalized_page";
928
954
  readonly title: "Canonicalized page";
@@ -2866,6 +2892,8 @@ type CrawlAiSignals = {
2866
2892
  exists: boolean;
2867
2893
  availability: CrawlAiAvailability;
2868
2894
  status?: number;
2895
+ contentType?: string;
2896
+ servesHtml?: boolean;
2869
2897
  error?: string;
2870
2898
  sitemapUrls: string[];
2871
2899
  contentSignals?: string[];
@@ -2876,6 +2904,8 @@ type CrawlAiSignals = {
2876
2904
  exists: boolean;
2877
2905
  availability?: CrawlAiAvailability;
2878
2906
  status?: number;
2907
+ contentType?: string;
2908
+ servesHtml?: boolean;
2879
2909
  error?: string;
2880
2910
  links?: {
2881
2911
  found: number;
@@ -3016,6 +3046,12 @@ export type CrawlSitemapDiscovery = {
3016
3046
  documents: SitemapDocument[];
3017
3047
  possiblyTruncated: boolean;
3018
3048
  warnings: string[];
3049
+ offHost?: {
3050
+ count: number;
3051
+ localhost: number;
3052
+ hosts: string[];
3053
+ samples: string[];
3054
+ };
3019
3055
  }>;
3020
3056
  };
3021
3057
  export type CrawlExternalLinkVerification = {
@@ -3632,10 +3668,10 @@ export declare const crawlPageSnapshotSchema: z.ZodObject<{
3632
3668
  raw: z.ZodString;
3633
3669
  resolved: z.ZodOptional<z.ZodString>;
3634
3670
  ignoredReason: z.ZodOptional<z.ZodEnum<{
3635
- "invalid-url": "invalid-url";
3636
3671
  "outside-head": "outside-head";
3637
3672
  "alternate-qualifier": "alternate-qualifier";
3638
3673
  fragment: "fragment";
3674
+ "invalid-url": "invalid-url";
3639
3675
  "non-http-url": "non-http-url";
3640
3676
  }>>;
3641
3677
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -4269,15 +4305,15 @@ export declare const crawlReportSummarySchema: z.ZodObject<{
4269
4305
  skippedUrls: z.ZodNumber;
4270
4306
  skipReasons: z.ZodArray<z.ZodObject<{
4271
4307
  reason: z.ZodEnum<{
4308
+ "invalid-url": "invalid-url";
4309
+ "robots-disallowed": "robots-disallowed";
4310
+ "origin-backpressure": "origin-backpressure";
4272
4311
  "asset-url": "asset-url";
4273
4312
  "configured-exclusion": "configured-exclusion";
4274
4313
  "duplicate-normalization": "duplicate-normalization";
4275
- "invalid-url": "invalid-url";
4276
4314
  "memory-pressure": "memory-pressure";
4277
4315
  "off-origin": "off-origin";
4278
- "origin-backpressure": "origin-backpressure";
4279
4316
  "queue-safety-limit": "queue-safety-limit";
4280
- "robots-disallowed": "robots-disallowed";
4281
4317
  "robots-uncertain": "robots-uncertain";
4282
4318
  "legacy-unclassified": "legacy-unclassified";
4283
4319
  }>;
@@ -4435,15 +4471,15 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4435
4471
  skippedUrls: z.ZodNumber;
4436
4472
  skipReasons: z.ZodArray<z.ZodObject<{
4437
4473
  reason: z.ZodEnum<{
4474
+ "invalid-url": "invalid-url";
4475
+ "robots-disallowed": "robots-disallowed";
4476
+ "origin-backpressure": "origin-backpressure";
4438
4477
  "asset-url": "asset-url";
4439
4478
  "configured-exclusion": "configured-exclusion";
4440
4479
  "duplicate-normalization": "duplicate-normalization";
4441
- "invalid-url": "invalid-url";
4442
4480
  "memory-pressure": "memory-pressure";
4443
4481
  "off-origin": "off-origin";
4444
- "origin-backpressure": "origin-backpressure";
4445
4482
  "queue-safety-limit": "queue-safety-limit";
4446
- "robots-disallowed": "robots-disallowed";
4447
4483
  "robots-uncertain": "robots-uncertain";
4448
4484
  "legacy-unclassified": "legacy-unclassified";
4449
4485
  }>;
@@ -4815,10 +4851,10 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4815
4851
  raw: z.ZodString;
4816
4852
  resolved: z.ZodOptional<z.ZodString>;
4817
4853
  ignoredReason: z.ZodOptional<z.ZodEnum<{
4818
- "invalid-url": "invalid-url";
4819
4854
  "outside-head": "outside-head";
4820
4855
  "alternate-qualifier": "alternate-qualifier";
4821
4856
  fragment: "fragment";
4857
+ "invalid-url": "invalid-url";
4822
4858
  "non-http-url": "non-http-url";
4823
4859
  }>>;
4824
4860
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -5244,6 +5280,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5244
5280
  unreachable: "unreachable";
5245
5281
  }>;
5246
5282
  status: z.ZodOptional<z.ZodNumber>;
5283
+ contentType: z.ZodOptional<z.ZodString>;
5284
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
5247
5285
  error: z.ZodOptional<z.ZodString>;
5248
5286
  sitemapUrls: z.ZodArray<z.ZodString>;
5249
5287
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -5270,6 +5308,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5270
5308
  unreachable: "unreachable";
5271
5309
  }>>;
5272
5310
  status: z.ZodOptional<z.ZodNumber>;
5311
+ contentType: z.ZodOptional<z.ZodString>;
5312
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
5273
5313
  error: z.ZodOptional<z.ZodString>;
5274
5314
  links: z.ZodOptional<z.ZodObject<{
5275
5315
  found: z.ZodNumber;
@@ -5405,6 +5445,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5405
5445
  }, z.core.$strip>>;
5406
5446
  possiblyTruncated: z.ZodBoolean;
5407
5447
  warnings: z.ZodArray<z.ZodString>;
5448
+ offHost: z.ZodOptional<z.ZodObject<{
5449
+ count: z.ZodNumber;
5450
+ localhost: z.ZodNumber;
5451
+ hosts: z.ZodArray<z.ZodString>;
5452
+ samples: z.ZodArray<z.ZodString>;
5453
+ }, z.core.$strip>>;
5408
5454
  }, z.core.$strip>>;
5409
5455
  }, z.core.$strip>>;
5410
5456
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -5740,15 +5786,15 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5740
5786
  skippedUrls: z.ZodNumber;
5741
5787
  skipReasons: z.ZodArray<z.ZodObject<{
5742
5788
  reason: z.ZodEnum<{
5789
+ "invalid-url": "invalid-url";
5790
+ "robots-disallowed": "robots-disallowed";
5791
+ "origin-backpressure": "origin-backpressure";
5743
5792
  "asset-url": "asset-url";
5744
5793
  "configured-exclusion": "configured-exclusion";
5745
5794
  "duplicate-normalization": "duplicate-normalization";
5746
- "invalid-url": "invalid-url";
5747
5795
  "memory-pressure": "memory-pressure";
5748
5796
  "off-origin": "off-origin";
5749
- "origin-backpressure": "origin-backpressure";
5750
5797
  "queue-safety-limit": "queue-safety-limit";
5751
- "robots-disallowed": "robots-disallowed";
5752
5798
  "robots-uncertain": "robots-uncertain";
5753
5799
  "legacy-unclassified": "legacy-unclassified";
5754
5800
  }>;
@@ -6120,10 +6166,10 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6120
6166
  raw: z.ZodString;
6121
6167
  resolved: z.ZodOptional<z.ZodString>;
6122
6168
  ignoredReason: z.ZodOptional<z.ZodEnum<{
6123
- "invalid-url": "invalid-url";
6124
6169
  "outside-head": "outside-head";
6125
6170
  "alternate-qualifier": "alternate-qualifier";
6126
6171
  fragment: "fragment";
6172
+ "invalid-url": "invalid-url";
6127
6173
  "non-http-url": "non-http-url";
6128
6174
  }>>;
6129
6175
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -6549,6 +6595,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6549
6595
  unreachable: "unreachable";
6550
6596
  }>;
6551
6597
  status: z.ZodOptional<z.ZodNumber>;
6598
+ contentType: z.ZodOptional<z.ZodString>;
6599
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
6552
6600
  error: z.ZodOptional<z.ZodString>;
6553
6601
  sitemapUrls: z.ZodArray<z.ZodString>;
6554
6602
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -6575,6 +6623,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6575
6623
  unreachable: "unreachable";
6576
6624
  }>>;
6577
6625
  status: z.ZodOptional<z.ZodNumber>;
6626
+ contentType: z.ZodOptional<z.ZodString>;
6627
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
6578
6628
  error: z.ZodOptional<z.ZodString>;
6579
6629
  links: z.ZodOptional<z.ZodObject<{
6580
6630
  found: z.ZodNumber;
@@ -6710,6 +6760,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6710
6760
  }, z.core.$strip>>;
6711
6761
  possiblyTruncated: z.ZodBoolean;
6712
6762
  warnings: z.ZodArray<z.ZodString>;
6763
+ offHost: z.ZodOptional<z.ZodObject<{
6764
+ count: z.ZodNumber;
6765
+ localhost: z.ZodNumber;
6766
+ hosts: z.ZodArray<z.ZodString>;
6767
+ samples: z.ZodArray<z.ZodString>;
6768
+ }, z.core.$strip>>;
6713
6769
  }, z.core.$strip>>;
6714
6770
  }, z.core.$strip>>;
6715
6771
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -7045,15 +7101,15 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7045
7101
  skippedUrls: z.ZodNumber;
7046
7102
  skipReasons: z.ZodArray<z.ZodObject<{
7047
7103
  reason: z.ZodEnum<{
7104
+ "invalid-url": "invalid-url";
7105
+ "robots-disallowed": "robots-disallowed";
7106
+ "origin-backpressure": "origin-backpressure";
7048
7107
  "asset-url": "asset-url";
7049
7108
  "configured-exclusion": "configured-exclusion";
7050
7109
  "duplicate-normalization": "duplicate-normalization";
7051
- "invalid-url": "invalid-url";
7052
7110
  "memory-pressure": "memory-pressure";
7053
7111
  "off-origin": "off-origin";
7054
- "origin-backpressure": "origin-backpressure";
7055
7112
  "queue-safety-limit": "queue-safety-limit";
7056
- "robots-disallowed": "robots-disallowed";
7057
7113
  "robots-uncertain": "robots-uncertain";
7058
7114
  "legacy-unclassified": "legacy-unclassified";
7059
7115
  }>;
@@ -7425,10 +7481,10 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7425
7481
  raw: z.ZodString;
7426
7482
  resolved: z.ZodOptional<z.ZodString>;
7427
7483
  ignoredReason: z.ZodOptional<z.ZodEnum<{
7428
- "invalid-url": "invalid-url";
7429
7484
  "outside-head": "outside-head";
7430
7485
  "alternate-qualifier": "alternate-qualifier";
7431
7486
  fragment: "fragment";
7487
+ "invalid-url": "invalid-url";
7432
7488
  "non-http-url": "non-http-url";
7433
7489
  }>>;
7434
7490
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -7854,6 +7910,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7854
7910
  unreachable: "unreachable";
7855
7911
  }>;
7856
7912
  status: z.ZodOptional<z.ZodNumber>;
7913
+ contentType: z.ZodOptional<z.ZodString>;
7914
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
7857
7915
  error: z.ZodOptional<z.ZodString>;
7858
7916
  sitemapUrls: z.ZodArray<z.ZodString>;
7859
7917
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -7880,6 +7938,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7880
7938
  unreachable: "unreachable";
7881
7939
  }>>;
7882
7940
  status: z.ZodOptional<z.ZodNumber>;
7941
+ contentType: z.ZodOptional<z.ZodString>;
7942
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
7883
7943
  error: z.ZodOptional<z.ZodString>;
7884
7944
  links: z.ZodOptional<z.ZodObject<{
7885
7945
  found: z.ZodNumber;
@@ -8015,6 +8075,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8015
8075
  }, z.core.$strip>>;
8016
8076
  possiblyTruncated: z.ZodBoolean;
8017
8077
  warnings: z.ZodArray<z.ZodString>;
8078
+ offHost: z.ZodOptional<z.ZodObject<{
8079
+ count: z.ZodNumber;
8080
+ localhost: z.ZodNumber;
8081
+ hosts: z.ZodArray<z.ZodString>;
8082
+ samples: z.ZodArray<z.ZodString>;
8083
+ }, z.core.$strip>>;
8018
8084
  }, z.core.$strip>>;
8019
8085
  }, z.core.$strip>>;
8020
8086
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -8352,15 +8418,15 @@ export declare const crawlerSchemas: {
8352
8418
  skippedUrls: z.ZodNumber;
8353
8419
  skipReasons: z.ZodArray<z.ZodObject<{
8354
8420
  reason: z.ZodEnum<{
8421
+ "invalid-url": "invalid-url";
8422
+ "robots-disallowed": "robots-disallowed";
8423
+ "origin-backpressure": "origin-backpressure";
8355
8424
  "asset-url": "asset-url";
8356
8425
  "configured-exclusion": "configured-exclusion";
8357
8426
  "duplicate-normalization": "duplicate-normalization";
8358
- "invalid-url": "invalid-url";
8359
8427
  "memory-pressure": "memory-pressure";
8360
8428
  "off-origin": "off-origin";
8361
- "origin-backpressure": "origin-backpressure";
8362
8429
  "queue-safety-limit": "queue-safety-limit";
8363
- "robots-disallowed": "robots-disallowed";
8364
8430
  "robots-uncertain": "robots-uncertain";
8365
8431
  "legacy-unclassified": "legacy-unclassified";
8366
8432
  }>;
@@ -8732,10 +8798,10 @@ export declare const crawlerSchemas: {
8732
8798
  raw: z.ZodString;
8733
8799
  resolved: z.ZodOptional<z.ZodString>;
8734
8800
  ignoredReason: z.ZodOptional<z.ZodEnum<{
8735
- "invalid-url": "invalid-url";
8736
8801
  "outside-head": "outside-head";
8737
8802
  "alternate-qualifier": "alternate-qualifier";
8738
8803
  fragment: "fragment";
8804
+ "invalid-url": "invalid-url";
8739
8805
  "non-http-url": "non-http-url";
8740
8806
  }>>;
8741
8807
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -9161,6 +9227,8 @@ export declare const crawlerSchemas: {
9161
9227
  unreachable: "unreachable";
9162
9228
  }>;
9163
9229
  status: z.ZodOptional<z.ZodNumber>;
9230
+ contentType: z.ZodOptional<z.ZodString>;
9231
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
9164
9232
  error: z.ZodOptional<z.ZodString>;
9165
9233
  sitemapUrls: z.ZodArray<z.ZodString>;
9166
9234
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -9187,6 +9255,8 @@ export declare const crawlerSchemas: {
9187
9255
  unreachable: "unreachable";
9188
9256
  }>>;
9189
9257
  status: z.ZodOptional<z.ZodNumber>;
9258
+ contentType: z.ZodOptional<z.ZodString>;
9259
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
9190
9260
  error: z.ZodOptional<z.ZodString>;
9191
9261
  links: z.ZodOptional<z.ZodObject<{
9192
9262
  found: z.ZodNumber;
@@ -9322,6 +9392,12 @@ export declare const crawlerSchemas: {
9322
9392
  }, z.core.$strip>>;
9323
9393
  possiblyTruncated: z.ZodBoolean;
9324
9394
  warnings: z.ZodArray<z.ZodString>;
9395
+ offHost: z.ZodOptional<z.ZodObject<{
9396
+ count: z.ZodNumber;
9397
+ localhost: z.ZodNumber;
9398
+ hosts: z.ZodArray<z.ZodString>;
9399
+ samples: z.ZodArray<z.ZodString>;
9400
+ }, z.core.$strip>>;
9325
9401
  }, z.core.$strip>>;
9326
9402
  }, z.core.$strip>>;
9327
9403
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -9657,15 +9733,15 @@ export declare const crawlerSchemas: {
9657
9733
  skippedUrls: z.ZodNumber;
9658
9734
  skipReasons: z.ZodArray<z.ZodObject<{
9659
9735
  reason: z.ZodEnum<{
9736
+ "invalid-url": "invalid-url";
9737
+ "robots-disallowed": "robots-disallowed";
9738
+ "origin-backpressure": "origin-backpressure";
9660
9739
  "asset-url": "asset-url";
9661
9740
  "configured-exclusion": "configured-exclusion";
9662
9741
  "duplicate-normalization": "duplicate-normalization";
9663
- "invalid-url": "invalid-url";
9664
9742
  "memory-pressure": "memory-pressure";
9665
9743
  "off-origin": "off-origin";
9666
- "origin-backpressure": "origin-backpressure";
9667
9744
  "queue-safety-limit": "queue-safety-limit";
9668
- "robots-disallowed": "robots-disallowed";
9669
9745
  "robots-uncertain": "robots-uncertain";
9670
9746
  "legacy-unclassified": "legacy-unclassified";
9671
9747
  }>;
@@ -10037,10 +10113,10 @@ export declare const crawlerSchemas: {
10037
10113
  raw: z.ZodString;
10038
10114
  resolved: z.ZodOptional<z.ZodString>;
10039
10115
  ignoredReason: z.ZodOptional<z.ZodEnum<{
10040
- "invalid-url": "invalid-url";
10041
10116
  "outside-head": "outside-head";
10042
10117
  "alternate-qualifier": "alternate-qualifier";
10043
10118
  fragment: "fragment";
10119
+ "invalid-url": "invalid-url";
10044
10120
  "non-http-url": "non-http-url";
10045
10121
  }>>;
10046
10122
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -10466,6 +10542,8 @@ export declare const crawlerSchemas: {
10466
10542
  unreachable: "unreachable";
10467
10543
  }>;
10468
10544
  status: z.ZodOptional<z.ZodNumber>;
10545
+ contentType: z.ZodOptional<z.ZodString>;
10546
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
10469
10547
  error: z.ZodOptional<z.ZodString>;
10470
10548
  sitemapUrls: z.ZodArray<z.ZodString>;
10471
10549
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -10492,6 +10570,8 @@ export declare const crawlerSchemas: {
10492
10570
  unreachable: "unreachable";
10493
10571
  }>>;
10494
10572
  status: z.ZodOptional<z.ZodNumber>;
10573
+ contentType: z.ZodOptional<z.ZodString>;
10574
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
10495
10575
  error: z.ZodOptional<z.ZodString>;
10496
10576
  links: z.ZodOptional<z.ZodObject<{
10497
10577
  found: z.ZodNumber;
@@ -10627,6 +10707,12 @@ export declare const crawlerSchemas: {
10627
10707
  }, z.core.$strip>>;
10628
10708
  possiblyTruncated: z.ZodBoolean;
10629
10709
  warnings: z.ZodArray<z.ZodString>;
10710
+ offHost: z.ZodOptional<z.ZodObject<{
10711
+ count: z.ZodNumber;
10712
+ localhost: z.ZodNumber;
10713
+ hosts: z.ZodArray<z.ZodString>;
10714
+ samples: z.ZodArray<z.ZodString>;
10715
+ }, z.core.$strip>>;
10630
10716
  }, z.core.$strip>>;
10631
10717
  }, z.core.$strip>>;
10632
10718
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -10962,15 +11048,15 @@ export declare const crawlerSchemas: {
10962
11048
  skippedUrls: z.ZodNumber;
10963
11049
  skipReasons: z.ZodArray<z.ZodObject<{
10964
11050
  reason: z.ZodEnum<{
11051
+ "invalid-url": "invalid-url";
11052
+ "robots-disallowed": "robots-disallowed";
11053
+ "origin-backpressure": "origin-backpressure";
10965
11054
  "asset-url": "asset-url";
10966
11055
  "configured-exclusion": "configured-exclusion";
10967
11056
  "duplicate-normalization": "duplicate-normalization";
10968
- "invalid-url": "invalid-url";
10969
11057
  "memory-pressure": "memory-pressure";
10970
11058
  "off-origin": "off-origin";
10971
- "origin-backpressure": "origin-backpressure";
10972
11059
  "queue-safety-limit": "queue-safety-limit";
10973
- "robots-disallowed": "robots-disallowed";
10974
11060
  "robots-uncertain": "robots-uncertain";
10975
11061
  "legacy-unclassified": "legacy-unclassified";
10976
11062
  }>;
@@ -11342,10 +11428,10 @@ export declare const crawlerSchemas: {
11342
11428
  raw: z.ZodString;
11343
11429
  resolved: z.ZodOptional<z.ZodString>;
11344
11430
  ignoredReason: z.ZodOptional<z.ZodEnum<{
11345
- "invalid-url": "invalid-url";
11346
11431
  "outside-head": "outside-head";
11347
11432
  "alternate-qualifier": "alternate-qualifier";
11348
11433
  fragment: "fragment";
11434
+ "invalid-url": "invalid-url";
11349
11435
  "non-http-url": "non-http-url";
11350
11436
  }>>;
11351
11437
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -11771,6 +11857,8 @@ export declare const crawlerSchemas: {
11771
11857
  unreachable: "unreachable";
11772
11858
  }>;
11773
11859
  status: z.ZodOptional<z.ZodNumber>;
11860
+ contentType: z.ZodOptional<z.ZodString>;
11861
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
11774
11862
  error: z.ZodOptional<z.ZodString>;
11775
11863
  sitemapUrls: z.ZodArray<z.ZodString>;
11776
11864
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -11797,6 +11885,8 @@ export declare const crawlerSchemas: {
11797
11885
  unreachable: "unreachable";
11798
11886
  }>>;
11799
11887
  status: z.ZodOptional<z.ZodNumber>;
11888
+ contentType: z.ZodOptional<z.ZodString>;
11889
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
11800
11890
  error: z.ZodOptional<z.ZodString>;
11801
11891
  links: z.ZodOptional<z.ZodObject<{
11802
11892
  found: z.ZodNumber;
@@ -11932,6 +12022,12 @@ export declare const crawlerSchemas: {
11932
12022
  }, z.core.$strip>>;
11933
12023
  possiblyTruncated: z.ZodBoolean;
11934
12024
  warnings: z.ZodArray<z.ZodString>;
12025
+ offHost: z.ZodOptional<z.ZodObject<{
12026
+ count: z.ZodNumber;
12027
+ localhost: z.ZodNumber;
12028
+ hosts: z.ZodArray<z.ZodString>;
12029
+ samples: z.ZodArray<z.ZodString>;
12030
+ }, z.core.$strip>>;
11935
12031
  }, z.core.$strip>>;
11936
12032
  }, z.core.$strip>>;
11937
12033
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -12771,10 +12867,10 @@ export declare const crawlerSchemas: {
12771
12867
  raw: z.ZodString;
12772
12868
  resolved: z.ZodOptional<z.ZodString>;
12773
12869
  ignoredReason: z.ZodOptional<z.ZodEnum<{
12774
- "invalid-url": "invalid-url";
12775
12870
  "outside-head": "outside-head";
12776
12871
  "alternate-qualifier": "alternate-qualifier";
12777
12872
  fragment: "fragment";
12873
+ "invalid-url": "invalid-url";
12778
12874
  "non-http-url": "non-http-url";
12779
12875
  }>>;
12780
12876
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -13195,15 +13291,15 @@ export declare const crawlerJsonSchemas: {
13195
13291
  skippedUrls: z.ZodNumber;
13196
13292
  skipReasons: z.ZodArray<z.ZodObject<{
13197
13293
  reason: z.ZodEnum<{
13294
+ "invalid-url": "invalid-url";
13295
+ "robots-disallowed": "robots-disallowed";
13296
+ "origin-backpressure": "origin-backpressure";
13198
13297
  "asset-url": "asset-url";
13199
13298
  "configured-exclusion": "configured-exclusion";
13200
13299
  "duplicate-normalization": "duplicate-normalization";
13201
- "invalid-url": "invalid-url";
13202
13300
  "memory-pressure": "memory-pressure";
13203
13301
  "off-origin": "off-origin";
13204
- "origin-backpressure": "origin-backpressure";
13205
13302
  "queue-safety-limit": "queue-safety-limit";
13206
- "robots-disallowed": "robots-disallowed";
13207
13303
  "robots-uncertain": "robots-uncertain";
13208
13304
  "legacy-unclassified": "legacy-unclassified";
13209
13305
  }>;
@@ -13575,10 +13671,10 @@ export declare const crawlerJsonSchemas: {
13575
13671
  raw: z.ZodString;
13576
13672
  resolved: z.ZodOptional<z.ZodString>;
13577
13673
  ignoredReason: z.ZodOptional<z.ZodEnum<{
13578
- "invalid-url": "invalid-url";
13579
13674
  "outside-head": "outside-head";
13580
13675
  "alternate-qualifier": "alternate-qualifier";
13581
13676
  fragment: "fragment";
13677
+ "invalid-url": "invalid-url";
13582
13678
  "non-http-url": "non-http-url";
13583
13679
  }>>;
13584
13680
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -14004,6 +14100,8 @@ export declare const crawlerJsonSchemas: {
14004
14100
  unreachable: "unreachable";
14005
14101
  }>;
14006
14102
  status: z.ZodOptional<z.ZodNumber>;
14103
+ contentType: z.ZodOptional<z.ZodString>;
14104
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
14007
14105
  error: z.ZodOptional<z.ZodString>;
14008
14106
  sitemapUrls: z.ZodArray<z.ZodString>;
14009
14107
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -14030,6 +14128,8 @@ export declare const crawlerJsonSchemas: {
14030
14128
  unreachable: "unreachable";
14031
14129
  }>>;
14032
14130
  status: z.ZodOptional<z.ZodNumber>;
14131
+ contentType: z.ZodOptional<z.ZodString>;
14132
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
14033
14133
  error: z.ZodOptional<z.ZodString>;
14034
14134
  links: z.ZodOptional<z.ZodObject<{
14035
14135
  found: z.ZodNumber;
@@ -14165,6 +14265,12 @@ export declare const crawlerJsonSchemas: {
14165
14265
  }, z.core.$strip>>;
14166
14266
  possiblyTruncated: z.ZodBoolean;
14167
14267
  warnings: z.ZodArray<z.ZodString>;
14268
+ offHost: z.ZodOptional<z.ZodObject<{
14269
+ count: z.ZodNumber;
14270
+ localhost: z.ZodNumber;
14271
+ hosts: z.ZodArray<z.ZodString>;
14272
+ samples: z.ZodArray<z.ZodString>;
14273
+ }, z.core.$strip>>;
14168
14274
  }, z.core.$strip>>;
14169
14275
  }, z.core.$strip>>;
14170
14276
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -14500,15 +14606,15 @@ export declare const crawlerJsonSchemas: {
14500
14606
  skippedUrls: z.ZodNumber;
14501
14607
  skipReasons: z.ZodArray<z.ZodObject<{
14502
14608
  reason: z.ZodEnum<{
14609
+ "invalid-url": "invalid-url";
14610
+ "robots-disallowed": "robots-disallowed";
14611
+ "origin-backpressure": "origin-backpressure";
14503
14612
  "asset-url": "asset-url";
14504
14613
  "configured-exclusion": "configured-exclusion";
14505
14614
  "duplicate-normalization": "duplicate-normalization";
14506
- "invalid-url": "invalid-url";
14507
14615
  "memory-pressure": "memory-pressure";
14508
14616
  "off-origin": "off-origin";
14509
- "origin-backpressure": "origin-backpressure";
14510
14617
  "queue-safety-limit": "queue-safety-limit";
14511
- "robots-disallowed": "robots-disallowed";
14512
14618
  "robots-uncertain": "robots-uncertain";
14513
14619
  "legacy-unclassified": "legacy-unclassified";
14514
14620
  }>;
@@ -14880,10 +14986,10 @@ export declare const crawlerJsonSchemas: {
14880
14986
  raw: z.ZodString;
14881
14987
  resolved: z.ZodOptional<z.ZodString>;
14882
14988
  ignoredReason: z.ZodOptional<z.ZodEnum<{
14883
- "invalid-url": "invalid-url";
14884
14989
  "outside-head": "outside-head";
14885
14990
  "alternate-qualifier": "alternate-qualifier";
14886
14991
  fragment: "fragment";
14992
+ "invalid-url": "invalid-url";
14887
14993
  "non-http-url": "non-http-url";
14888
14994
  }>>;
14889
14995
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -15309,6 +15415,8 @@ export declare const crawlerJsonSchemas: {
15309
15415
  unreachable: "unreachable";
15310
15416
  }>;
15311
15417
  status: z.ZodOptional<z.ZodNumber>;
15418
+ contentType: z.ZodOptional<z.ZodString>;
15419
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
15312
15420
  error: z.ZodOptional<z.ZodString>;
15313
15421
  sitemapUrls: z.ZodArray<z.ZodString>;
15314
15422
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -15335,6 +15443,8 @@ export declare const crawlerJsonSchemas: {
15335
15443
  unreachable: "unreachable";
15336
15444
  }>>;
15337
15445
  status: z.ZodOptional<z.ZodNumber>;
15446
+ contentType: z.ZodOptional<z.ZodString>;
15447
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
15338
15448
  error: z.ZodOptional<z.ZodString>;
15339
15449
  links: z.ZodOptional<z.ZodObject<{
15340
15450
  found: z.ZodNumber;
@@ -15470,6 +15580,12 @@ export declare const crawlerJsonSchemas: {
15470
15580
  }, z.core.$strip>>;
15471
15581
  possiblyTruncated: z.ZodBoolean;
15472
15582
  warnings: z.ZodArray<z.ZodString>;
15583
+ offHost: z.ZodOptional<z.ZodObject<{
15584
+ count: z.ZodNumber;
15585
+ localhost: z.ZodNumber;
15586
+ hosts: z.ZodArray<z.ZodString>;
15587
+ samples: z.ZodArray<z.ZodString>;
15588
+ }, z.core.$strip>>;
15473
15589
  }, z.core.$strip>>;
15474
15590
  }, z.core.$strip>>;
15475
15591
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -15805,15 +15921,15 @@ export declare const crawlerJsonSchemas: {
15805
15921
  skippedUrls: z.ZodNumber;
15806
15922
  skipReasons: z.ZodArray<z.ZodObject<{
15807
15923
  reason: z.ZodEnum<{
15924
+ "invalid-url": "invalid-url";
15925
+ "robots-disallowed": "robots-disallowed";
15926
+ "origin-backpressure": "origin-backpressure";
15808
15927
  "asset-url": "asset-url";
15809
15928
  "configured-exclusion": "configured-exclusion";
15810
15929
  "duplicate-normalization": "duplicate-normalization";
15811
- "invalid-url": "invalid-url";
15812
15930
  "memory-pressure": "memory-pressure";
15813
15931
  "off-origin": "off-origin";
15814
- "origin-backpressure": "origin-backpressure";
15815
15932
  "queue-safety-limit": "queue-safety-limit";
15816
- "robots-disallowed": "robots-disallowed";
15817
15933
  "robots-uncertain": "robots-uncertain";
15818
15934
  "legacy-unclassified": "legacy-unclassified";
15819
15935
  }>;
@@ -16185,10 +16301,10 @@ export declare const crawlerJsonSchemas: {
16185
16301
  raw: z.ZodString;
16186
16302
  resolved: z.ZodOptional<z.ZodString>;
16187
16303
  ignoredReason: z.ZodOptional<z.ZodEnum<{
16188
- "invalid-url": "invalid-url";
16189
16304
  "outside-head": "outside-head";
16190
16305
  "alternate-qualifier": "alternate-qualifier";
16191
16306
  fragment: "fragment";
16307
+ "invalid-url": "invalid-url";
16192
16308
  "non-http-url": "non-http-url";
16193
16309
  }>>;
16194
16310
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -16614,6 +16730,8 @@ export declare const crawlerJsonSchemas: {
16614
16730
  unreachable: "unreachable";
16615
16731
  }>;
16616
16732
  status: z.ZodOptional<z.ZodNumber>;
16733
+ contentType: z.ZodOptional<z.ZodString>;
16734
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
16617
16735
  error: z.ZodOptional<z.ZodString>;
16618
16736
  sitemapUrls: z.ZodArray<z.ZodString>;
16619
16737
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -16640,6 +16758,8 @@ export declare const crawlerJsonSchemas: {
16640
16758
  unreachable: "unreachable";
16641
16759
  }>>;
16642
16760
  status: z.ZodOptional<z.ZodNumber>;
16761
+ contentType: z.ZodOptional<z.ZodString>;
16762
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
16643
16763
  error: z.ZodOptional<z.ZodString>;
16644
16764
  links: z.ZodOptional<z.ZodObject<{
16645
16765
  found: z.ZodNumber;
@@ -16775,6 +16895,12 @@ export declare const crawlerJsonSchemas: {
16775
16895
  }, z.core.$strip>>;
16776
16896
  possiblyTruncated: z.ZodBoolean;
16777
16897
  warnings: z.ZodArray<z.ZodString>;
16898
+ offHost: z.ZodOptional<z.ZodObject<{
16899
+ count: z.ZodNumber;
16900
+ localhost: z.ZodNumber;
16901
+ hosts: z.ZodArray<z.ZodString>;
16902
+ samples: z.ZodArray<z.ZodString>;
16903
+ }, z.core.$strip>>;
16778
16904
  }, z.core.$strip>>;
16779
16905
  }, z.core.$strip>>;
16780
16906
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -17614,10 +17740,10 @@ export declare const crawlerJsonSchemas: {
17614
17740
  raw: z.ZodString;
17615
17741
  resolved: z.ZodOptional<z.ZodString>;
17616
17742
  ignoredReason: z.ZodOptional<z.ZodEnum<{
17617
- "invalid-url": "invalid-url";
17618
17743
  "outside-head": "outside-head";
17619
17744
  "alternate-qualifier": "alternate-qualifier";
17620
17745
  fragment: "fragment";
17746
+ "invalid-url": "invalid-url";
17621
17747
  "non-http-url": "non-http-url";
17622
17748
  }>>;
17623
17749
  streamedMetadata: z.ZodOptional<z.ZodLiteral<true>>;
@@ -19988,6 +20114,13 @@ interface CrawledPage {
19988
20114
  length: number;
19989
20115
  };
19990
20116
  }
20117
+ interface SentenceSource {
20118
+ read(ref: {
20119
+ offset: number;
20120
+ length: number;
20121
+ }): Promise<LinkSentence[]>;
20122
+ close(): Promise<void>;
20123
+ }
19991
20124
  interface SiteCrawl {
19992
20125
  origin: string;
19993
20126
  method: 'sitemap' | 'links';
@@ -19995,7 +20128,7 @@ interface SiteCrawl {
19995
20128
  urls: string[];
19996
20129
  pageOfUrl: Map<number, number>;
19997
20130
  index: SiteIndex;
19998
- sentences: SentenceStore;
20131
+ sentences: SentenceSource;
19999
20132
  genericAnchors: Array<{
20000
20133
  source: number;
20001
20134
  href: string;
@@ -20014,22 +20147,6 @@ interface SiteCrawl {
20014
20147
  };
20015
20148
  warnings: string[];
20016
20149
  }
20017
- declare class SentenceStore {
20018
- private readonly dir;
20019
- private readonly handle;
20020
- private size;
20021
- private constructor();
20022
- static open(): Promise<SentenceStore>;
20023
- write(sentences: LinkSentence[]): Promise<{
20024
- offset: number;
20025
- length: number;
20026
- }>;
20027
- read(ref: {
20028
- offset: number;
20029
- length: number;
20030
- }): Promise<LinkSentence[]>;
20031
- close(): Promise<void>;
20032
- }
20033
20150
  interface CrawlInput {
20034
20151
  startUrl: string;
20035
20152
  maxPages: number;
@@ -20037,7 +20154,6 @@ interface CrawlInput {
20037
20154
  refresh?: boolean;
20038
20155
  progress?: ProgressReporter;
20039
20156
  }
20040
- declare function crawlForLinks(input: CrawlInput): Promise<SiteCrawl>;
20041
20157
  export declare const PAGE_TYPES: {
20042
20158
  readonly pillar_guide: "A long, broad guide that covers a whole topic and would naturally link out to many narrower pages";
20043
20159
  readonly support_article: "A focused article, post, tutorial, or explainer about one narrower subject";
@@ -20209,9 +20325,10 @@ export interface InternalLinksInput {
20209
20325
  refresh?: boolean;
20210
20326
  }
20211
20327
  export interface InternalLinksDependencies {
20212
- crawl: typeof crawlForLinks;
20328
+ crawl: (input: CrawlInput) => Promise<SiteCrawl>;
20213
20329
  searchConsole: {
20214
20330
  property: string;
20331
+ maxRows?: number;
20215
20332
  query: (request: SearchAnalyticsRequest) => Promise<{
20216
20333
  rows: GscRow[];
20217
20334
  rowsFetched: number;
@@ -20229,6 +20346,7 @@ export interface InternalLinksDependencies {
20229
20346
  progress?: ProgressReporter;
20230
20347
  }
20231
20348
  export declare function siteStartUrl(site: string): string;
20349
+ export declare function internalLinksReportWith(input: InternalLinksInput, dependencies: Partial<InternalLinksDependencies> & Pick<InternalLinksDependencies, 'crawl' | 'searchConsole' | 'decisionModel'>): Promise<InternalLinksReport>;
20232
20350
  export declare function internalLinksReport(input: InternalLinksInput, dependencies: Partial<InternalLinksDependencies> & Pick<InternalLinksDependencies, 'searchConsole' | 'decisionModel'>): Promise<InternalLinksReport>;
20233
20351
  type PseoTemplateCluster = {
20234
20352
  id: string;
@@ -21308,26 +21426,6 @@ type AuditAccess = {
21308
21426
  checks: (site: string, offset: number, limit: number) => Promise<AuditChecks | null>;
21309
21427
  add: (site: string) => Promise<'added' | 'exists' | 'full'>;
21310
21428
  };
21311
- declare const ISSUE_MARKS: readonly ["open", "fixed", "ignored"];
21312
- type IssueMark = (typeof ISSUE_MARKS)[number];
21313
- type IssueSeen = 'found' | 'not-found' | 'not-checked';
21314
- type StoredIssue = {
21315
- id: string;
21316
- kind: string;
21317
- subject: string;
21318
- evidence: string;
21319
- mark: IssueMark;
21320
- marked_at: string | null;
21321
- note: string | null;
21322
- first_found: string;
21323
- last_found: string | null;
21324
- seen: IssueSeen;
21325
- checked_at: string | null;
21326
- };
21327
- type IssueStore = {
21328
- read: (site: string) => Promise<StoredIssue[] | null>;
21329
- write: (site: string, issues: StoredIssue[]) => Promise<void>;
21330
- };
21331
21429
  type RedirectKind = 'permanent' | 'temporary';
21332
21430
  type LiveCheck = {
21333
21431
  first: PageFacts;
@@ -21372,6 +21470,10 @@ declare const COMMANDS: {
21372
21470
  readonly where: "local";
21373
21471
  readonly summary: "Pages that could link to a target page.";
21374
21472
  };
21473
+ readonly lint: {
21474
+ readonly where: "anywhere";
21475
+ readonly summary: "Check copy for patterns common in AI-written text, weak copy and title and description length.";
21476
+ };
21375
21477
  };
21376
21478
  type CommandId = keyof typeof COMMANDS;
21377
21479
  type Caller = (command: CommandId, args?: Record<string, string | number | undefined>) => string;
@@ -21446,6 +21548,45 @@ type PageMarkdown = {
21446
21548
  } | {
21447
21549
  error: string;
21448
21550
  };
21551
+ declare const ISSUE_MARKS: readonly ["open", "fixed", "ignored"];
21552
+ type IssueMark = (typeof ISSUE_MARKS)[number];
21553
+ type IssueSeen = 'found' | 'not-found' | 'not-checked';
21554
+ type StoredIssue = {
21555
+ id: string;
21556
+ kind: string;
21557
+ subject: string;
21558
+ evidence: string;
21559
+ mark: IssueMark;
21560
+ marked_at: string | null;
21561
+ note: string | null;
21562
+ first_found: string;
21563
+ last_found: string | null;
21564
+ seen: IssueSeen;
21565
+ checked_at: string | null;
21566
+ measures?: IssueMeasure[];
21567
+ };
21568
+ declare const MEASURE_DAYS: readonly [28, 56];
21569
+ type MeasureDays = (typeof MEASURE_DAYS)[number];
21570
+ type MeasurePeriod = {
21571
+ start: string;
21572
+ end: string;
21573
+ clicks: number;
21574
+ impressions: number;
21575
+ position: number | null;
21576
+ };
21577
+ type IssueMeasure = {
21578
+ days: MeasureDays;
21579
+ fixed_on: string;
21580
+ scope: 'page' | 'query on page';
21581
+ before: MeasurePeriod;
21582
+ after: MeasurePeriod;
21583
+ updates: string[] | null;
21584
+ measured_at: string;
21585
+ };
21586
+ type IssueStore = {
21587
+ read: (site: string) => Promise<StoredIssue[] | null>;
21588
+ write: (site: string, issues: StoredIssue[]) => Promise<void>;
21589
+ };
21449
21590
  type WeekSite = {
21450
21591
  property: string;
21451
21592
  link: string | null;
@@ -21474,6 +21615,37 @@ type WeekSite = {
21474
21615
  clicks: number;
21475
21616
  previous: number;
21476
21617
  } | null;
21618
+ opportunities?: WeekOpportunities | null;
21619
+ measured?: {
21620
+ total: number;
21621
+ items: (IssueMeasure & {
21622
+ subject: string;
21623
+ })[];
21624
+ };
21625
+ };
21626
+ type WeekOpportunities = {
21627
+ checked_at: number | null;
21628
+ competitors: string[];
21629
+ blocked: string | null;
21630
+ partial: boolean;
21631
+ items: WeekOpportunity[];
21632
+ };
21633
+ type WeekOpportunity = {
21634
+ keyword: string;
21635
+ kind: 'page' | 'tool';
21636
+ search_volume: number;
21637
+ cpc: number;
21638
+ intent: string;
21639
+ competitors: {
21640
+ domain: string;
21641
+ position: number;
21642
+ url: string;
21643
+ }[];
21644
+ site_dr: number;
21645
+ low_dr: number;
21646
+ top: number;
21647
+ cluster: number;
21648
+ relevance: number;
21477
21649
  };
21478
21650
  type WeekData = {
21479
21651
  start: string;
@@ -21521,6 +21693,13 @@ export declare function pendingCloudLogin(): Pending | null;
21521
21693
  export declare function finishCloudLogin(): Promise<'linked' | 'pending' | 'expired'>;
21522
21694
  export declare function cloudLogout(): Promise<boolean>;
21523
21695
  export declare function openCloudLink(url: string): Promise<void>;
21696
+ type LintSource = {
21697
+ path: string;
21698
+ text: string;
21699
+ } | {
21700
+ path: string;
21701
+ skipped: string;
21702
+ };
21524
21703
  export type TokenStorageMode = 'keychain' | 'file';
21525
21704
  export type TokenStorageStatus = {
21526
21705
  configured: TokenStorageMode;
@@ -21893,6 +22072,9 @@ export declare function readJson<T = unknown>(response: Response, label: string,
21893
22072
  maxBytes?: number;
21894
22073
  }): Promise<T>;
21895
22074
  export declare function readJsonOrUndefined<T = unknown>(response: Response, label: string): Promise<T | undefined>;
22075
+ export declare const LINT_MAX_FILES = 100;
22076
+ export declare function lintPaths(inputs: string[], cwd?: string): Promise<string[]>;
22077
+ export declare function readLintFiles(inputs: string[], cwd?: string): Promise<LintSource[]>;
21896
22078
  export declare function createLogger(runId: string): pino.Logger;
21897
22079
  export declare function makeRunId(): string;
21898
22080
  export declare function renderPresentationTablesMarkdown(tables: PresentationTable[]): string[];