seo 0.2.13 → 0.2.15

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
@@ -244,6 +244,13 @@ declare const providerPreferenceSchema: z.ZodEnum<{
244
244
  cheap: "cheap";
245
245
  authoritative: "authoritative";
246
246
  }>;
247
+ declare const providerSpendLimitOverridesSchema: z.ZodObject<{
248
+ dailyNoticeMicros: z.ZodOptional<z.ZodNumber>;
249
+ dailyHardLimitMicros: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
250
+ monthlyHardLimitMicros: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
251
+ maxRequestsPerReport: z.ZodOptional<z.ZodNumber>;
252
+ maxRowsPerReport: z.ZodOptional<z.ZodNumber>;
253
+ }, z.core.$strict>;
247
254
  declare const analyticsConnectionsSchema: z.ZodDefault<z.ZodObject<{
248
255
  google: z.ZodOptional<z.ZodObject<{
249
256
  propertyId: z.ZodString;
@@ -322,6 +329,29 @@ declare const configSchema: z.ZodObject<{
322
329
  cheap: "cheap";
323
330
  authoritative: "authoritative";
324
331
  }>>;
332
+ costLimits: z.ZodOptional<z.ZodObject<{
333
+ dataforseo: z.ZodOptional<z.ZodObject<{
334
+ dailyNoticeMicros: z.ZodOptional<z.ZodNumber>;
335
+ dailyHardLimitMicros: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
336
+ monthlyHardLimitMicros: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
337
+ maxRequestsPerReport: z.ZodOptional<z.ZodNumber>;
338
+ maxRowsPerReport: z.ZodOptional<z.ZodNumber>;
339
+ }, z.core.$strict>>;
340
+ semrush: z.ZodOptional<z.ZodObject<{
341
+ dailyNoticeMicros: z.ZodOptional<z.ZodNumber>;
342
+ dailyHardLimitMicros: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
343
+ monthlyHardLimitMicros: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
344
+ maxRequestsPerReport: z.ZodOptional<z.ZodNumber>;
345
+ maxRowsPerReport: z.ZodOptional<z.ZodNumber>;
346
+ }, z.core.$strict>>;
347
+ ahrefs: z.ZodOptional<z.ZodObject<{
348
+ dailyNoticeMicros: z.ZodOptional<z.ZodNumber>;
349
+ dailyHardLimitMicros: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
350
+ monthlyHardLimitMicros: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
351
+ maxRequestsPerReport: z.ZodOptional<z.ZodNumber>;
352
+ maxRowsPerReport: z.ZodOptional<z.ZodNumber>;
353
+ }, z.core.$strict>>;
354
+ }, z.core.$strict>>;
325
355
  }, z.core.$strip>>;
326
356
  security: z.ZodDefault<z.ZodObject<{
327
357
  useKeychain: z.ZodDefault<z.ZodBoolean>;
@@ -658,6 +688,7 @@ interface ExtractedPage {
658
688
  }
659
689
  //#endregion
660
690
  //#region packages/core/src/types/providers.d.ts
691
+ /** @deprecated Use ProviderCostEvidence from providers/contracts. */
661
692
  interface CreditUsage {
662
693
  provider: string;
663
694
  units: number;
@@ -666,16 +697,19 @@ interface CreditUsage {
666
697
  calls: number;
667
698
  cacheHits?: number;
668
699
  }
700
+ /** @deprecated Use ProviderEvidence from providers/contracts. */
669
701
  interface ProviderResult<T> {
670
702
  data: T;
671
703
  usage: CreditUsage;
672
704
  warnings?: string[];
673
705
  cached?: boolean;
674
706
  }
707
+ /** @deprecated Use a capability-specific request type. */
675
708
  interface ProviderOpts {
676
709
  database?: string;
677
710
  refresh?: boolean;
678
711
  }
712
+ /** @deprecated Use KeywordMetric from providers/contracts. */
679
713
  interface KeywordOverview {
680
714
  phrase: string;
681
715
  volume?: number;
@@ -685,6 +719,7 @@ interface KeywordOverview {
685
719
  intent?: string;
686
720
  results?: number;
687
721
  }
722
+ /** @deprecated Use a capability-specific row type from providers/contracts. */
688
723
  interface KeywordRow {
689
724
  phrase: string;
690
725
  volume?: number;
@@ -695,6 +730,11 @@ interface KeywordRow {
695
730
  domain?: string;
696
731
  position?: number;
697
732
  }
733
+ /**
734
+ * @deprecated Use the small capability interfaces from providers/contracts.
735
+ * This compatibility contract remains until the registered reports replace
736
+ * the provider-specific MCP passthrough.
737
+ */
698
738
  interface KeywordDataProvider {
699
739
  readonly name: string;
700
740
  readonly capabilities: {
@@ -725,9 +765,11 @@ interface KeywordDataProvider {
725
765
  resetAt?: string;
726
766
  }>;
727
767
  }
768
+ /** @deprecated Use a capability-specific provider contract. */
728
769
  interface SerpProvider {
729
770
  readonly name: string;
730
771
  }
772
+ /** @deprecated Use a capability-specific provider contract. */
731
773
  interface BacklinkProvider {
732
774
  readonly name: string;
733
775
  }
@@ -980,7 +1022,7 @@ declare const RULE_DEFINITIONS: readonly [{
980
1022
  readonly impactIfIgnored: "An avoidable redirect adds a request and can turn into a chain later. An intentional direct redirect needs no change.";
981
1023
  readonly howToVerify: "Re-run the crawl and confirm the requested URL is the same as the final URL, or that the redirect is intentional.";
982
1024
  readonly agentHints: {
983
- readonly evidenceFields: ["page.url", "page.finalUrl", "page.status"];
1025
+ readonly evidenceFields: ["page.url", "page.finalUrl", "page.status", "page.metaRefresh"];
984
1026
  readonly suggestedCommands: ["seo redirect-trace --url <url> --json"];
985
1027
  };
986
1028
  }, {
@@ -2012,6 +2054,10 @@ type CrawlerExtractionEvidence = {
2012
2054
  }>;
2013
2055
  socialProfileLinks: string[];
2014
2056
  contentSketch: ContentSketch;
2057
+ metaRefresh?: {
2058
+ targetUrl: string;
2059
+ delaySeconds: number;
2060
+ };
2015
2061
  softAuthenticationGate?: {
2016
2062
  kind: 'login-form';
2017
2063
  indicators: string[];
@@ -2235,7 +2281,7 @@ declare function analyzePageOpportunitiesFromRows(input: PageOpportunityAnalysis
2235
2281
  type PageOpportunityFocus = PageOpportunityType | 'no-data';
2236
2282
  //#endregion
2237
2283
  //#region packages/core/src/analyze/page-opportunities.d.ts
2238
- type SearchAnalytics$10 = typeof querySearchAnalytics;
2284
+ type SearchAnalytics$11 = typeof querySearchAnalytics;
2239
2285
  type FetchPage$4 = typeof fetchPage;
2240
2286
  type ExtractPage$3 = typeof extractPage;
2241
2287
  type PageOpportunityInput = {
@@ -2307,7 +2353,7 @@ type PageOpportunityReport = {
2307
2353
  recommendations: string[];
2308
2354
  };
2309
2355
  type PageOpportunityDependencies = {
2310
- searchAnalytics: SearchAnalytics$10;
2356
+ searchAnalytics: SearchAnalytics$11;
2311
2357
  fetch: FetchPage$4;
2312
2358
  extract: ExtractPage$3;
2313
2359
  now: () => Date;
@@ -2495,7 +2541,7 @@ type CrawlPageSnapshot = {
2495
2541
  h3Count?: number;
2496
2542
  indexable: boolean;
2497
2543
  indexability?: string;
2498
- declaredIndexability?: 'indexable-candidate' | 'noindex' | 'robots-blocked' | 'canonical-conflict' | 'canonical-hint-other' | 'not-html' | 'unknown';
2544
+ declaredIndexability?: 'indexable-candidate' | 'noindex' | 'robots-blocked' | 'canonical-conflict' | 'canonical-hint-other' | 'meta-refresh' | 'not-html' | 'unknown';
2499
2545
  extractionStatus?: 'complete' | 'failed' | 'not-applicable' | 'unknown-media-type';
2500
2546
  extractionError?: string;
2501
2547
  wordCount: number;
@@ -2511,6 +2557,10 @@ type CrawlPageSnapshot = {
2511
2557
  indicators: string[];
2512
2558
  formActionPath?: string;
2513
2559
  };
2560
+ metaRefresh?: {
2561
+ targetUrl: string;
2562
+ delaySeconds: number;
2563
+ };
2514
2564
  tabbedContent?: {
2515
2565
  groups: number;
2516
2566
  panels: number;
@@ -4697,6 +4747,7 @@ declare const crawlPageSnapshotSchema: z.ZodObject<{
4697
4747
  "robots-blocked": "robots-blocked";
4698
4748
  "canonical-conflict": "canonical-conflict";
4699
4749
  "canonical-hint-other": "canonical-hint-other";
4750
+ "meta-refresh": "meta-refresh";
4700
4751
  "not-html": "not-html";
4701
4752
  }>>;
4702
4753
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -4748,6 +4799,10 @@ declare const crawlPageSnapshotSchema: z.ZodObject<{
4748
4799
  indicators: z.ZodArray<z.ZodString>;
4749
4800
  formActionPath: z.ZodOptional<z.ZodString>;
4750
4801
  }, z.core.$strip>>;
4802
+ metaRefresh: z.ZodOptional<z.ZodObject<{
4803
+ targetUrl: z.ZodString;
4804
+ delaySeconds: z.ZodNumber;
4805
+ }, z.core.$strip>>;
4751
4806
  tabbedContent: z.ZodOptional<z.ZodObject<{
4752
4807
  groups: z.ZodNumber;
4753
4808
  panels: z.ZodNumber;
@@ -4803,8 +4858,8 @@ declare const crawlPageSnapshotSchema: z.ZodObject<{
4803
4858
  status: z.ZodOptional<z.ZodNumber>;
4804
4859
  error: z.ZodOptional<z.ZodString>;
4805
4860
  state: z.ZodOptional<z.ZodEnum<{
4806
- unavailable: "unavailable";
4807
4861
  available: "available";
4862
+ unavailable: "unavailable";
4808
4863
  "rate-limited": "rate-limited";
4809
4864
  "confirmed-broken": "confirmed-broken";
4810
4865
  transient: "transient";
@@ -5856,6 +5911,7 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5856
5911
  "robots-blocked": "robots-blocked";
5857
5912
  "canonical-conflict": "canonical-conflict";
5858
5913
  "canonical-hint-other": "canonical-hint-other";
5914
+ "meta-refresh": "meta-refresh";
5859
5915
  "not-html": "not-html";
5860
5916
  }>>;
5861
5917
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -5907,6 +5963,10 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5907
5963
  indicators: z.ZodArray<z.ZodString>;
5908
5964
  formActionPath: z.ZodOptional<z.ZodString>;
5909
5965
  }, z.core.$strip>>;
5966
+ metaRefresh: z.ZodOptional<z.ZodObject<{
5967
+ targetUrl: z.ZodString;
5968
+ delaySeconds: z.ZodNumber;
5969
+ }, z.core.$strip>>;
5910
5970
  tabbedContent: z.ZodOptional<z.ZodObject<{
5911
5971
  groups: z.ZodNumber;
5912
5972
  panels: z.ZodNumber;
@@ -5962,8 +6022,8 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5962
6022
  status: z.ZodOptional<z.ZodNumber>;
5963
6023
  error: z.ZodOptional<z.ZodString>;
5964
6024
  state: z.ZodOptional<z.ZodEnum<{
5965
- unavailable: "unavailable";
5966
6025
  available: "available";
6026
+ unavailable: "unavailable";
5967
6027
  "rate-limited": "rate-limited";
5968
6028
  "confirmed-broken": "confirmed-broken";
5969
6029
  transient: "transient";
@@ -6359,8 +6419,8 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6359
6419
  deferredUrls: z.ZodNumber;
6360
6420
  limit: z.ZodNumber;
6361
6421
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
6362
- unavailable: "unavailable";
6363
6422
  available: "available";
6423
+ unavailable: "unavailable";
6364
6424
  "rate-limited": "rate-limited";
6365
6425
  "confirmed-broken": "confirmed-broken";
6366
6426
  transient: "transient";
@@ -7300,6 +7360,7 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7300
7360
  "robots-blocked": "robots-blocked";
7301
7361
  "canonical-conflict": "canonical-conflict";
7302
7362
  "canonical-hint-other": "canonical-hint-other";
7363
+ "meta-refresh": "meta-refresh";
7303
7364
  "not-html": "not-html";
7304
7365
  }>>;
7305
7366
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -7351,6 +7412,10 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7351
7412
  indicators: z.ZodArray<z.ZodString>;
7352
7413
  formActionPath: z.ZodOptional<z.ZodString>;
7353
7414
  }, z.core.$strip>>;
7415
+ metaRefresh: z.ZodOptional<z.ZodObject<{
7416
+ targetUrl: z.ZodString;
7417
+ delaySeconds: z.ZodNumber;
7418
+ }, z.core.$strip>>;
7354
7419
  tabbedContent: z.ZodOptional<z.ZodObject<{
7355
7420
  groups: z.ZodNumber;
7356
7421
  panels: z.ZodNumber;
@@ -7406,8 +7471,8 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7406
7471
  status: z.ZodOptional<z.ZodNumber>;
7407
7472
  error: z.ZodOptional<z.ZodString>;
7408
7473
  state: z.ZodOptional<z.ZodEnum<{
7409
- unavailable: "unavailable";
7410
7474
  available: "available";
7475
+ unavailable: "unavailable";
7411
7476
  "rate-limited": "rate-limited";
7412
7477
  "confirmed-broken": "confirmed-broken";
7413
7478
  transient: "transient";
@@ -7803,8 +7868,8 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7803
7868
  deferredUrls: z.ZodNumber;
7804
7869
  limit: z.ZodNumber;
7805
7870
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
7806
- unavailable: "unavailable";
7807
7871
  available: "available";
7872
+ unavailable: "unavailable";
7808
7873
  "rate-limited": "rate-limited";
7809
7874
  "confirmed-broken": "confirmed-broken";
7810
7875
  transient: "transient";
@@ -8744,6 +8809,7 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8744
8809
  "robots-blocked": "robots-blocked";
8745
8810
  "canonical-conflict": "canonical-conflict";
8746
8811
  "canonical-hint-other": "canonical-hint-other";
8812
+ "meta-refresh": "meta-refresh";
8747
8813
  "not-html": "not-html";
8748
8814
  }>>;
8749
8815
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -8795,6 +8861,10 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8795
8861
  indicators: z.ZodArray<z.ZodString>;
8796
8862
  formActionPath: z.ZodOptional<z.ZodString>;
8797
8863
  }, z.core.$strip>>;
8864
+ metaRefresh: z.ZodOptional<z.ZodObject<{
8865
+ targetUrl: z.ZodString;
8866
+ delaySeconds: z.ZodNumber;
8867
+ }, z.core.$strip>>;
8798
8868
  tabbedContent: z.ZodOptional<z.ZodObject<{
8799
8869
  groups: z.ZodNumber;
8800
8870
  panels: z.ZodNumber;
@@ -8850,8 +8920,8 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8850
8920
  status: z.ZodOptional<z.ZodNumber>;
8851
8921
  error: z.ZodOptional<z.ZodString>;
8852
8922
  state: z.ZodOptional<z.ZodEnum<{
8853
- unavailable: "unavailable";
8854
8923
  available: "available";
8924
+ unavailable: "unavailable";
8855
8925
  "rate-limited": "rate-limited";
8856
8926
  "confirmed-broken": "confirmed-broken";
8857
8927
  transient: "transient";
@@ -9247,8 +9317,8 @@ declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
9247
9317
  deferredUrls: z.ZodNumber;
9248
9318
  limit: z.ZodNumber;
9249
9319
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
9250
- unavailable: "unavailable";
9251
9320
  available: "available";
9321
+ unavailable: "unavailable";
9252
9322
  "rate-limited": "rate-limited";
9253
9323
  "confirmed-broken": "confirmed-broken";
9254
9324
  transient: "transient";
@@ -10190,6 +10260,7 @@ declare const crawlerSchemas: {
10190
10260
  "robots-blocked": "robots-blocked";
10191
10261
  "canonical-conflict": "canonical-conflict";
10192
10262
  "canonical-hint-other": "canonical-hint-other";
10263
+ "meta-refresh": "meta-refresh";
10193
10264
  "not-html": "not-html";
10194
10265
  }>>;
10195
10266
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -10241,6 +10312,10 @@ declare const crawlerSchemas: {
10241
10312
  indicators: z.ZodArray<z.ZodString>;
10242
10313
  formActionPath: z.ZodOptional<z.ZodString>;
10243
10314
  }, z.core.$strip>>;
10315
+ metaRefresh: z.ZodOptional<z.ZodObject<{
10316
+ targetUrl: z.ZodString;
10317
+ delaySeconds: z.ZodNumber;
10318
+ }, z.core.$strip>>;
10244
10319
  tabbedContent: z.ZodOptional<z.ZodObject<{
10245
10320
  groups: z.ZodNumber;
10246
10321
  panels: z.ZodNumber;
@@ -10296,8 +10371,8 @@ declare const crawlerSchemas: {
10296
10371
  status: z.ZodOptional<z.ZodNumber>;
10297
10372
  error: z.ZodOptional<z.ZodString>;
10298
10373
  state: z.ZodOptional<z.ZodEnum<{
10299
- unavailable: "unavailable";
10300
10374
  available: "available";
10375
+ unavailable: "unavailable";
10301
10376
  "rate-limited": "rate-limited";
10302
10377
  "confirmed-broken": "confirmed-broken";
10303
10378
  transient: "transient";
@@ -10693,8 +10768,8 @@ declare const crawlerSchemas: {
10693
10768
  deferredUrls: z.ZodNumber;
10694
10769
  limit: z.ZodNumber;
10695
10770
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
10696
- unavailable: "unavailable";
10697
10771
  available: "available";
10772
+ unavailable: "unavailable";
10698
10773
  "rate-limited": "rate-limited";
10699
10774
  "confirmed-broken": "confirmed-broken";
10700
10775
  transient: "transient";
@@ -11634,6 +11709,7 @@ declare const crawlerSchemas: {
11634
11709
  "robots-blocked": "robots-blocked";
11635
11710
  "canonical-conflict": "canonical-conflict";
11636
11711
  "canonical-hint-other": "canonical-hint-other";
11712
+ "meta-refresh": "meta-refresh";
11637
11713
  "not-html": "not-html";
11638
11714
  }>>;
11639
11715
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -11685,6 +11761,10 @@ declare const crawlerSchemas: {
11685
11761
  indicators: z.ZodArray<z.ZodString>;
11686
11762
  formActionPath: z.ZodOptional<z.ZodString>;
11687
11763
  }, z.core.$strip>>;
11764
+ metaRefresh: z.ZodOptional<z.ZodObject<{
11765
+ targetUrl: z.ZodString;
11766
+ delaySeconds: z.ZodNumber;
11767
+ }, z.core.$strip>>;
11688
11768
  tabbedContent: z.ZodOptional<z.ZodObject<{
11689
11769
  groups: z.ZodNumber;
11690
11770
  panels: z.ZodNumber;
@@ -11740,8 +11820,8 @@ declare const crawlerSchemas: {
11740
11820
  status: z.ZodOptional<z.ZodNumber>;
11741
11821
  error: z.ZodOptional<z.ZodString>;
11742
11822
  state: z.ZodOptional<z.ZodEnum<{
11743
- unavailable: "unavailable";
11744
11823
  available: "available";
11824
+ unavailable: "unavailable";
11745
11825
  "rate-limited": "rate-limited";
11746
11826
  "confirmed-broken": "confirmed-broken";
11747
11827
  transient: "transient";
@@ -12137,8 +12217,8 @@ declare const crawlerSchemas: {
12137
12217
  deferredUrls: z.ZodNumber;
12138
12218
  limit: z.ZodNumber;
12139
12219
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
12140
- unavailable: "unavailable";
12141
12220
  available: "available";
12221
+ unavailable: "unavailable";
12142
12222
  "rate-limited": "rate-limited";
12143
12223
  "confirmed-broken": "confirmed-broken";
12144
12224
  transient: "transient";
@@ -13078,6 +13158,7 @@ declare const crawlerSchemas: {
13078
13158
  "robots-blocked": "robots-blocked";
13079
13159
  "canonical-conflict": "canonical-conflict";
13080
13160
  "canonical-hint-other": "canonical-hint-other";
13161
+ "meta-refresh": "meta-refresh";
13081
13162
  "not-html": "not-html";
13082
13163
  }>>;
13083
13164
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -13129,6 +13210,10 @@ declare const crawlerSchemas: {
13129
13210
  indicators: z.ZodArray<z.ZodString>;
13130
13211
  formActionPath: z.ZodOptional<z.ZodString>;
13131
13212
  }, z.core.$strip>>;
13213
+ metaRefresh: z.ZodOptional<z.ZodObject<{
13214
+ targetUrl: z.ZodString;
13215
+ delaySeconds: z.ZodNumber;
13216
+ }, z.core.$strip>>;
13132
13217
  tabbedContent: z.ZodOptional<z.ZodObject<{
13133
13218
  groups: z.ZodNumber;
13134
13219
  panels: z.ZodNumber;
@@ -13184,8 +13269,8 @@ declare const crawlerSchemas: {
13184
13269
  status: z.ZodOptional<z.ZodNumber>;
13185
13270
  error: z.ZodOptional<z.ZodString>;
13186
13271
  state: z.ZodOptional<z.ZodEnum<{
13187
- unavailable: "unavailable";
13188
13272
  available: "available";
13273
+ unavailable: "unavailable";
13189
13274
  "rate-limited": "rate-limited";
13190
13275
  "confirmed-broken": "confirmed-broken";
13191
13276
  transient: "transient";
@@ -13581,8 +13666,8 @@ declare const crawlerSchemas: {
13581
13666
  deferredUrls: z.ZodNumber;
13582
13667
  limit: z.ZodNumber;
13583
13668
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
13584
- unavailable: "unavailable";
13585
13669
  available: "available";
13670
+ unavailable: "unavailable";
13586
13671
  "rate-limited": "rate-limited";
13587
13672
  "confirmed-broken": "confirmed-broken";
13588
13673
  transient: "transient";
@@ -14656,6 +14741,7 @@ declare const crawlerSchemas: {
14656
14741
  "robots-blocked": "robots-blocked";
14657
14742
  "canonical-conflict": "canonical-conflict";
14658
14743
  "canonical-hint-other": "canonical-hint-other";
14744
+ "meta-refresh": "meta-refresh";
14659
14745
  "not-html": "not-html";
14660
14746
  }>>;
14661
14747
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -14707,6 +14793,10 @@ declare const crawlerSchemas: {
14707
14793
  indicators: z.ZodArray<z.ZodString>;
14708
14794
  formActionPath: z.ZodOptional<z.ZodString>;
14709
14795
  }, z.core.$strip>>;
14796
+ metaRefresh: z.ZodOptional<z.ZodObject<{
14797
+ targetUrl: z.ZodString;
14798
+ delaySeconds: z.ZodNumber;
14799
+ }, z.core.$strip>>;
14710
14800
  tabbedContent: z.ZodOptional<z.ZodObject<{
14711
14801
  groups: z.ZodNumber;
14712
14802
  panels: z.ZodNumber;
@@ -14762,8 +14852,8 @@ declare const crawlerSchemas: {
14762
14852
  status: z.ZodOptional<z.ZodNumber>;
14763
14853
  error: z.ZodOptional<z.ZodString>;
14764
14854
  state: z.ZodOptional<z.ZodEnum<{
14765
- unavailable: "unavailable";
14766
14855
  available: "available";
14856
+ unavailable: "unavailable";
14767
14857
  "rate-limited": "rate-limited";
14768
14858
  "confirmed-broken": "confirmed-broken";
14769
14859
  transient: "transient";
@@ -15435,6 +15525,7 @@ declare const crawlerJsonSchemas: {
15435
15525
  "robots-blocked": "robots-blocked";
15436
15526
  "canonical-conflict": "canonical-conflict";
15437
15527
  "canonical-hint-other": "canonical-hint-other";
15528
+ "meta-refresh": "meta-refresh";
15438
15529
  "not-html": "not-html";
15439
15530
  }>>;
15440
15531
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -15486,6 +15577,10 @@ declare const crawlerJsonSchemas: {
15486
15577
  indicators: z.ZodArray<z.ZodString>;
15487
15578
  formActionPath: z.ZodOptional<z.ZodString>;
15488
15579
  }, z.core.$strip>>;
15580
+ metaRefresh: z.ZodOptional<z.ZodObject<{
15581
+ targetUrl: z.ZodString;
15582
+ delaySeconds: z.ZodNumber;
15583
+ }, z.core.$strip>>;
15489
15584
  tabbedContent: z.ZodOptional<z.ZodObject<{
15490
15585
  groups: z.ZodNumber;
15491
15586
  panels: z.ZodNumber;
@@ -15541,8 +15636,8 @@ declare const crawlerJsonSchemas: {
15541
15636
  status: z.ZodOptional<z.ZodNumber>;
15542
15637
  error: z.ZodOptional<z.ZodString>;
15543
15638
  state: z.ZodOptional<z.ZodEnum<{
15544
- unavailable: "unavailable";
15545
15639
  available: "available";
15640
+ unavailable: "unavailable";
15546
15641
  "rate-limited": "rate-limited";
15547
15642
  "confirmed-broken": "confirmed-broken";
15548
15643
  transient: "transient";
@@ -15938,8 +16033,8 @@ declare const crawlerJsonSchemas: {
15938
16033
  deferredUrls: z.ZodNumber;
15939
16034
  limit: z.ZodNumber;
15940
16035
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
15941
- unavailable: "unavailable";
15942
16036
  available: "available";
16037
+ unavailable: "unavailable";
15943
16038
  "rate-limited": "rate-limited";
15944
16039
  "confirmed-broken": "confirmed-broken";
15945
16040
  transient: "transient";
@@ -16879,6 +16974,7 @@ declare const crawlerJsonSchemas: {
16879
16974
  "robots-blocked": "robots-blocked";
16880
16975
  "canonical-conflict": "canonical-conflict";
16881
16976
  "canonical-hint-other": "canonical-hint-other";
16977
+ "meta-refresh": "meta-refresh";
16882
16978
  "not-html": "not-html";
16883
16979
  }>>;
16884
16980
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -16930,6 +17026,10 @@ declare const crawlerJsonSchemas: {
16930
17026
  indicators: z.ZodArray<z.ZodString>;
16931
17027
  formActionPath: z.ZodOptional<z.ZodString>;
16932
17028
  }, z.core.$strip>>;
17029
+ metaRefresh: z.ZodOptional<z.ZodObject<{
17030
+ targetUrl: z.ZodString;
17031
+ delaySeconds: z.ZodNumber;
17032
+ }, z.core.$strip>>;
16933
17033
  tabbedContent: z.ZodOptional<z.ZodObject<{
16934
17034
  groups: z.ZodNumber;
16935
17035
  panels: z.ZodNumber;
@@ -16985,8 +17085,8 @@ declare const crawlerJsonSchemas: {
16985
17085
  status: z.ZodOptional<z.ZodNumber>;
16986
17086
  error: z.ZodOptional<z.ZodString>;
16987
17087
  state: z.ZodOptional<z.ZodEnum<{
16988
- unavailable: "unavailable";
16989
17088
  available: "available";
17089
+ unavailable: "unavailable";
16990
17090
  "rate-limited": "rate-limited";
16991
17091
  "confirmed-broken": "confirmed-broken";
16992
17092
  transient: "transient";
@@ -17382,8 +17482,8 @@ declare const crawlerJsonSchemas: {
17382
17482
  deferredUrls: z.ZodNumber;
17383
17483
  limit: z.ZodNumber;
17384
17484
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
17385
- unavailable: "unavailable";
17386
17485
  available: "available";
17486
+ unavailable: "unavailable";
17387
17487
  "rate-limited": "rate-limited";
17388
17488
  "confirmed-broken": "confirmed-broken";
17389
17489
  transient: "transient";
@@ -18323,6 +18423,7 @@ declare const crawlerJsonSchemas: {
18323
18423
  "robots-blocked": "robots-blocked";
18324
18424
  "canonical-conflict": "canonical-conflict";
18325
18425
  "canonical-hint-other": "canonical-hint-other";
18426
+ "meta-refresh": "meta-refresh";
18326
18427
  "not-html": "not-html";
18327
18428
  }>>;
18328
18429
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -18374,6 +18475,10 @@ declare const crawlerJsonSchemas: {
18374
18475
  indicators: z.ZodArray<z.ZodString>;
18375
18476
  formActionPath: z.ZodOptional<z.ZodString>;
18376
18477
  }, z.core.$strip>>;
18478
+ metaRefresh: z.ZodOptional<z.ZodObject<{
18479
+ targetUrl: z.ZodString;
18480
+ delaySeconds: z.ZodNumber;
18481
+ }, z.core.$strip>>;
18377
18482
  tabbedContent: z.ZodOptional<z.ZodObject<{
18378
18483
  groups: z.ZodNumber;
18379
18484
  panels: z.ZodNumber;
@@ -18429,8 +18534,8 @@ declare const crawlerJsonSchemas: {
18429
18534
  status: z.ZodOptional<z.ZodNumber>;
18430
18535
  error: z.ZodOptional<z.ZodString>;
18431
18536
  state: z.ZodOptional<z.ZodEnum<{
18432
- unavailable: "unavailable";
18433
18537
  available: "available";
18538
+ unavailable: "unavailable";
18434
18539
  "rate-limited": "rate-limited";
18435
18540
  "confirmed-broken": "confirmed-broken";
18436
18541
  transient: "transient";
@@ -18826,8 +18931,8 @@ declare const crawlerJsonSchemas: {
18826
18931
  deferredUrls: z.ZodNumber;
18827
18932
  limit: z.ZodNumber;
18828
18933
  outcomes: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
18829
- unavailable: "unavailable";
18830
18934
  available: "available";
18935
+ unavailable: "unavailable";
18831
18936
  "rate-limited": "rate-limited";
18832
18937
  "confirmed-broken": "confirmed-broken";
18833
18938
  transient: "transient";
@@ -19901,6 +20006,7 @@ declare const crawlerJsonSchemas: {
19901
20006
  "robots-blocked": "robots-blocked";
19902
20007
  "canonical-conflict": "canonical-conflict";
19903
20008
  "canonical-hint-other": "canonical-hint-other";
20009
+ "meta-refresh": "meta-refresh";
19904
20010
  "not-html": "not-html";
19905
20011
  }>>;
19906
20012
  extractionStatus: z.ZodOptional<z.ZodEnum<{
@@ -19952,6 +20058,10 @@ declare const crawlerJsonSchemas: {
19952
20058
  indicators: z.ZodArray<z.ZodString>;
19953
20059
  formActionPath: z.ZodOptional<z.ZodString>;
19954
20060
  }, z.core.$strip>>;
20061
+ metaRefresh: z.ZodOptional<z.ZodObject<{
20062
+ targetUrl: z.ZodString;
20063
+ delaySeconds: z.ZodNumber;
20064
+ }, z.core.$strip>>;
19955
20065
  tabbedContent: z.ZodOptional<z.ZodObject<{
19956
20066
  groups: z.ZodNumber;
19957
20067
  panels: z.ZodNumber;
@@ -20007,8 +20117,8 @@ declare const crawlerJsonSchemas: {
20007
20117
  status: z.ZodOptional<z.ZodNumber>;
20008
20118
  error: z.ZodOptional<z.ZodString>;
20009
20119
  state: z.ZodOptional<z.ZodEnum<{
20010
- unavailable: "unavailable";
20011
20120
  available: "available";
20121
+ unavailable: "unavailable";
20012
20122
  "rate-limited": "rate-limited";
20013
20123
  "confirmed-broken": "confirmed-broken";
20014
20124
  transient: "transient";
@@ -20231,9 +20341,9 @@ declare function analyzeCtrUnderperformersFromRows(input: {
20231
20341
  };
20232
20342
  //#endregion
20233
20343
  //#region packages/core/src/analyze/ctr-underperformers.d.ts
20234
- type SearchAnalytics$9 = typeof querySearchAnalytics;
20344
+ type SearchAnalytics$10 = typeof querySearchAnalytics;
20235
20345
  interface CtrUnderperformerDependencies {
20236
- searchAnalytics: SearchAnalytics$9;
20346
+ searchAnalytics: SearchAnalytics$10;
20237
20347
  now: () => Date;
20238
20348
  }
20239
20349
  declare function ctrUnderperformersReport(input: {
@@ -20431,7 +20541,7 @@ declare function resolveSegmentRanges(input: {
20431
20541
  };
20432
20542
  //#endregion
20433
20543
  //#region packages/core/src/analyze/segment-impact.d.ts
20434
- type SearchAnalytics$8 = typeof querySearchAnalytics;
20544
+ type SearchAnalytics$9 = typeof querySearchAnalytics;
20435
20545
  interface SegmentImpactInput {
20436
20546
  site: string;
20437
20547
  dimension?: SegmentDimension;
@@ -20445,7 +20555,7 @@ interface SegmentImpactInput {
20445
20555
  refresh?: boolean;
20446
20556
  }
20447
20557
  interface SegmentImpactDependencies {
20448
- searchAnalytics: SearchAnalytics$8;
20558
+ searchAnalytics: SearchAnalytics$9;
20449
20559
  now: () => Date;
20450
20560
  }
20451
20561
  declare function compareSegmentRows(input: {
@@ -20640,7 +20750,7 @@ declare const CANNIBAL_MINIMUM_PAGE_SHARE = 0.1;
20640
20750
  declare const CANNIBAL_MAXIMUM_DOMINANT_SHARE = 0.8;
20641
20751
  //#endregion
20642
20752
  //#region packages/core/src/analyze/site-diagnostics/cannibal.d.ts
20643
- type SearchAnalytics$7 = typeof querySearchAnalytics;
20753
+ type SearchAnalytics$8 = typeof querySearchAnalytics;
20644
20754
  interface CannibalReportInput {
20645
20755
  site: string;
20646
20756
  days?: number;
@@ -20653,7 +20763,7 @@ interface CannibalReportInput {
20653
20763
  refresh?: boolean;
20654
20764
  }
20655
20765
  interface CannibalDependencies {
20656
- searchAnalytics: SearchAnalytics$7;
20766
+ searchAnalytics: SearchAnalytics$8;
20657
20767
  now: () => Date;
20658
20768
  }
20659
20769
  declare function cannibalReport(input: CannibalReportInput, dependencies?: CannibalDependencies): Promise<CannibalReport>;
@@ -20821,7 +20931,7 @@ declare function decayComparisonRange(current: {
20821
20931
  };
20822
20932
  //#endregion
20823
20933
  //#region packages/core/src/analyze/site-diagnostics/decaying.d.ts
20824
- type SearchAnalytics$6 = typeof querySearchAnalytics;
20934
+ type SearchAnalytics$7 = typeof querySearchAnalytics;
20825
20935
  interface DecayingReportInput {
20826
20936
  site: string;
20827
20937
  days?: number;
@@ -20837,7 +20947,7 @@ interface DecayingReportInput {
20837
20947
  refresh?: boolean;
20838
20948
  }
20839
20949
  interface DecayingDependencies {
20840
- searchAnalytics: SearchAnalytics$6;
20950
+ searchAnalytics: SearchAnalytics$7;
20841
20951
  now: () => Date;
20842
20952
  }
20843
20953
  declare function decayingReport(input: DecayingReportInput, dependencies?: DecayingDependencies): Promise<DecayReport>;
@@ -20983,7 +21093,7 @@ type AnalyzeQuickWinsInput = {
20983
21093
  declare function analyzeQuickWinsFromRows(input: AnalyzeQuickWinsInput): QuickWinAnalysis;
20984
21094
  //#endregion
20985
21095
  //#region packages/core/src/analyze/site-diagnostics/quick-wins.d.ts
20986
- type SearchAnalytics$5 = typeof querySearchAnalytics;
21096
+ type SearchAnalytics$6 = typeof querySearchAnalytics;
20987
21097
  type FetchPage$3 = typeof fetchPage;
20988
21098
  type ExtractPage$2 = typeof extractPage;
20989
21099
  type QuickWinsInput = {
@@ -21002,7 +21112,7 @@ type QuickWinsInput = {
21002
21112
  refresh?: boolean;
21003
21113
  };
21004
21114
  type QuickWinsDependencies = {
21005
- searchAnalytics: SearchAnalytics$5;
21115
+ searchAnalytics: SearchAnalytics$6;
21006
21116
  fetch: FetchPage$3;
21007
21117
  extract: ExtractPage$2;
21008
21118
  now: () => Date;
@@ -21244,7 +21354,7 @@ type AnalyzeStrikingDistanceInput = {
21244
21354
  declare function analyzeStrikingDistanceRows(input: AnalyzeStrikingDistanceInput): StrikingDistanceAnalysis;
21245
21355
  //#endregion
21246
21356
  //#region packages/core/src/analyze/striking-distance.d.ts
21247
- type SearchAnalytics$4 = typeof querySearchAnalytics;
21357
+ type SearchAnalytics$5 = typeof querySearchAnalytics;
21248
21358
  type VerifyQueryContent = typeof verifyQueryContent;
21249
21359
  type StrikingDistanceInput = {
21250
21360
  site: string;
@@ -21309,7 +21419,7 @@ type StrikingDistanceReport = {
21309
21419
  recommendations: string[];
21310
21420
  };
21311
21421
  type StrikingDistanceDependencies = {
21312
- searchAnalytics: SearchAnalytics$4;
21422
+ searchAnalytics: SearchAnalytics$5;
21313
21423
  verifyContent: VerifyQueryContent;
21314
21424
  now: () => Date;
21315
21425
  };
@@ -21988,7 +22098,7 @@ interface InternalLinksAnalysis {
21988
22098
  declare function analyzeInternalLinksFromRows(input: InternalLinksAnalysisInput): InternalLinksAnalysis;
21989
22099
  //#endregion
21990
22100
  //#region packages/core/src/analyze/internal-links.d.ts
21991
- type SearchAnalytics$3 = typeof querySearchAnalytics;
22101
+ type SearchAnalytics$4 = typeof querySearchAnalytics;
21992
22102
  type FetchPage$2 = typeof fetchPage;
21993
22103
  type ExtractPage$1 = typeof extractPage;
21994
22104
  interface InternalLinksInput {
@@ -22005,13 +22115,548 @@ interface InternalLinksInput {
22005
22115
  refresh?: boolean;
22006
22116
  }
22007
22117
  interface InternalLinksDependencies {
22008
- searchAnalytics: SearchAnalytics$3;
22118
+ searchAnalytics: SearchAnalytics$4;
22009
22119
  fetch: FetchPage$2;
22010
22120
  extract: ExtractPage$1;
22011
22121
  now: () => Date;
22012
22122
  }
22013
22123
  declare function internalLinksReport(input: InternalLinksInput, dependencies?: InternalLinksDependencies): Promise<InternalLinksReport>;
22014
22124
  //#endregion
22125
+ //#region packages/core/src/providers/contracts.d.ts
22126
+ declare const providerIdSchema: z.ZodEnum<{
22127
+ dataforseo: "dataforseo";
22128
+ semrush: "semrush";
22129
+ ahrefs: "ahrefs";
22130
+ }>;
22131
+ type ProviderId = z.infer<typeof providerIdSchema>;
22132
+ declare const providerCapabilitySchema: z.ZodEnum<{
22133
+ "keyword-metrics": "keyword-metrics";
22134
+ "keyword-discovery": "keyword-discovery";
22135
+ "serp-snapshot": "serp-snapshot";
22136
+ "domain-overview": "domain-overview";
22137
+ "ranked-keywords": "ranked-keywords";
22138
+ "relevant-pages": "relevant-pages";
22139
+ "serp-competitors": "serp-competitors";
22140
+ "link-summary": "link-summary";
22141
+ "referring-domains": "referring-domains";
22142
+ backlinks: "backlinks";
22143
+ "domain-rating": "domain-rating";
22144
+ "local-search": "local-search";
22145
+ "ai-mentions": "ai-mentions";
22146
+ "ai-prompt-observation": "ai-prompt-observation";
22147
+ }>;
22148
+ type ProviderCapability = z.infer<typeof providerCapabilitySchema>;
22149
+ declare const searchMarketSchema: z.ZodObject<{
22150
+ searchEngine: z.ZodDefault<z.ZodEnum<{
22151
+ google: "google";
22152
+ bing: "bing";
22153
+ }>>;
22154
+ countryCode: z.ZodString;
22155
+ languageCode: z.ZodString;
22156
+ location: z.ZodOptional<z.ZodObject<{
22157
+ code: z.ZodOptional<z.ZodNumber>;
22158
+ name: z.ZodOptional<z.ZodString>;
22159
+ }, z.core.$strip>>;
22160
+ device: z.ZodOptional<z.ZodEnum<{
22161
+ mobile: "mobile";
22162
+ desktop: "desktop";
22163
+ }>>;
22164
+ }, z.core.$strict>;
22165
+ type SearchMarket = z.infer<typeof searchMarketSchema>;
22166
+ type ProviderValue<T> = {
22167
+ state: 'observed';
22168
+ value: T;
22169
+ } | {
22170
+ state: 'missing' | 'unavailable' | 'invalid';
22171
+ value: null;
22172
+ reason: string;
22173
+ };
22174
+ declare function observedValue<T>(value: T): ProviderValue<T>;
22175
+ declare function unavailableValue<T>(state: 'missing' | 'unavailable' | 'invalid', reason: string): ProviderValue<T>;
22176
+ type ProviderWarning = {
22177
+ code: string;
22178
+ message: string;
22179
+ field?: string;
22180
+ row?: number;
22181
+ };
22182
+ type ProviderCoverage = {
22183
+ requestedRows: number | null;
22184
+ returnedRows: number | null;
22185
+ retainedRows: number | null;
22186
+ invalidRows: number;
22187
+ providerTotalRows: number | null;
22188
+ completeness: 'complete' | 'partial' | 'capped' | 'filtered' | 'unavailable' | 'invalid' | 'unknown';
22189
+ nextCursor: string | null;
22190
+ };
22191
+ type ProviderCacheEvidence = {
22192
+ status: 'hit' | 'miss' | 'bypass';
22193
+ storedAt: string | null;
22194
+ expiresAt: string | null;
22195
+ };
22196
+ type ProviderCostEvidence = {
22197
+ currency: 'USD';
22198
+ estimatedMicros: number | null;
22199
+ actualMicros: number | null;
22200
+ taskIds: string[];
22201
+ };
22202
+ type ProviderRequestEvidence = {
22203
+ operation: string;
22204
+ endpoint: string;
22205
+ limit: number | null;
22206
+ filters: Record<string, string | number | boolean>;
22207
+ sort: string[];
22208
+ };
22209
+ type ProviderEvidence<T> = {
22210
+ schemaVersion: 1;
22211
+ provider: ProviderId;
22212
+ capability: ProviderCapability;
22213
+ data: T;
22214
+ observedAt: string;
22215
+ market: SearchMarket;
22216
+ coverage: ProviderCoverage;
22217
+ cache: ProviderCacheEvidence;
22218
+ cost: ProviderCostEvidence;
22219
+ request: ProviderRequestEvidence;
22220
+ warnings: ProviderWarning[];
22221
+ };
22222
+ type ProviderCapabilitySupport = {
22223
+ capability: ProviderCapability;
22224
+ status: 'available' | 'unavailable';
22225
+ reason?: string;
22226
+ markets: 'all' | readonly ProviderMarketSupport[];
22227
+ };
22228
+ type ProviderMarketSupport = {
22229
+ searchEngines?: readonly SearchMarket['searchEngine'][];
22230
+ countryCodes?: readonly string[];
22231
+ languageCodes?: readonly string[];
22232
+ devices?: readonly NonNullable<SearchMarket['device']>[];
22233
+ location?: 'any' | 'country-only' | 'canonical';
22234
+ };
22235
+ interface ProviderAdapter {
22236
+ readonly provider: ProviderId;
22237
+ readonly capabilitySupport: readonly ProviderCapabilitySupport[];
22238
+ }
22239
+ type KeywordMetric = {
22240
+ keyword: string;
22241
+ monthlySearchVolume: ProviderValue<number>;
22242
+ monthlySearches: ProviderValue<KeywordMonthlySearch[]>;
22243
+ searchVolumeUpdatedAt: ProviderValue<string>;
22244
+ cpcUsd: ProviderValue<number>;
22245
+ paidCompetition: ProviderValue<number>;
22246
+ keywordDifficulty: ProviderValue<number>;
22247
+ intent: ProviderValue<string>;
22248
+ resultCount: ProviderValue<number>;
22249
+ };
22250
+ type KeywordMonthlySearch = {
22251
+ year: number;
22252
+ month: number;
22253
+ searchVolume: number;
22254
+ };
22255
+ type ProviderRequestContext = {
22256
+ projectId?: string;
22257
+ reportId: string;
22258
+ reportRunId: string;
22259
+ };
22260
+ type KeywordMetricsRequest = {
22261
+ keywords: string[];
22262
+ market: SearchMarket;
22263
+ refresh?: boolean;
22264
+ context?: ProviderRequestContext;
22265
+ };
22266
+ interface KeywordMetricsProvider extends ProviderAdapter {
22267
+ keywordMetrics(input: KeywordMetricsRequest): Promise<ProviderEvidence<KeywordMetric[]>>;
22268
+ }
22269
+ declare const keywordDiscoverySourceSchema: z.ZodEnum<{
22270
+ ideas: "ideas";
22271
+ related: "related";
22272
+ suggestions: "suggestions";
22273
+ }>;
22274
+ type KeywordDiscoverySource = z.infer<typeof keywordDiscoverySourceSchema>;
22275
+ type KeywordIdeaSource = {
22276
+ seed: string;
22277
+ source: KeywordDiscoverySource;
22278
+ };
22279
+ type KeywordIdea = KeywordMetric & {
22280
+ sources: KeywordIdeaSource[];
22281
+ };
22282
+ type KeywordDiscoveryRequest = {
22283
+ seeds: string[];
22284
+ sources: KeywordDiscoverySource[];
22285
+ market: SearchMarket;
22286
+ limit: number;
22287
+ refresh?: boolean;
22288
+ context?: ProviderRequestContext;
22289
+ };
22290
+ interface KeywordDiscoveryProvider extends ProviderAdapter {
22291
+ discoverKeywords(input: KeywordDiscoveryRequest): Promise<ProviderEvidence<KeywordIdea[]>>;
22292
+ }
22293
+ type SerpOrganicResult = {
22294
+ rankGroup: number;
22295
+ rankAbsolute: number;
22296
+ page: number;
22297
+ domain: string;
22298
+ url: string;
22299
+ title: string | null;
22300
+ description: string | null;
22301
+ isFeaturedSnippet: boolean | null;
22302
+ };
22303
+ type SerpSnapshot = {
22304
+ keyword: string;
22305
+ effectiveKeyword: string;
22306
+ searchEngineDomain: string | null;
22307
+ checkedAt: string;
22308
+ checkUrl: string | null;
22309
+ resultCount: number | null;
22310
+ pagesCount: number | null;
22311
+ features: string[];
22312
+ organicResults: SerpOrganicResult[];
22313
+ };
22314
+ type SerpSnapshotRequest = {
22315
+ keyword: string;
22316
+ market: SearchMarket;
22317
+ depth: number;
22318
+ refresh?: boolean;
22319
+ context?: ProviderRequestContext;
22320
+ };
22321
+ interface SerpSnapshotProvider extends ProviderAdapter {
22322
+ serpSnapshot(input: SerpSnapshotRequest): Promise<ProviderEvidence<SerpSnapshot>>;
22323
+ }
22324
+ //#endregion
22325
+ //#region packages/core/src/providers/resolver.d.ts
22326
+ type ProviderCandidate = {
22327
+ adapter: ProviderAdapter;
22328
+ connected: boolean;
22329
+ priority: number;
22330
+ };
22331
+ type ProviderResolution = {
22332
+ status: 'available';
22333
+ provider: ProviderAdapter;
22334
+ considered: ProviderId[];
22335
+ } | {
22336
+ status: 'unavailable';
22337
+ reason: 'provider-not-registered' | 'provider-not-connected' | 'capability-not-supported' | 'market-not-supported';
22338
+ considered: ProviderId[];
22339
+ };
22340
+ declare function resolveProvider(input: {
22341
+ capability: ProviderCapability;
22342
+ market: SearchMarket;
22343
+ candidates: readonly ProviderCandidate[];
22344
+ provider?: ProviderId;
22345
+ }): ProviderResolution;
22346
+ //#endregion
22347
+ //#region packages/core/src/analyze/keyword-metrics.d.ts
22348
+ type KeywordTrend = {
22349
+ state: 'observed';
22350
+ direction: 'increasing' | 'decreasing' | 'stable' | 'increased-from-zero';
22351
+ recentAverage: number;
22352
+ previousAverage: number;
22353
+ absoluteChange: number;
22354
+ percentChange: ProviderValue<number>;
22355
+ months: Array<{
22356
+ year: number;
22357
+ month: number;
22358
+ }>;
22359
+ methodology: string;
22360
+ } | {
22361
+ state: 'unavailable';
22362
+ reason: string;
22363
+ };
22364
+ type KeywordMetricAnalysis = {
22365
+ keyword: string;
22366
+ trend: KeywordTrend;
22367
+ };
22368
+ type KeywordMetricFinding = {
22369
+ code: 'recent-demand-increase' | 'recent-demand-decrease';
22370
+ keyword: string;
22371
+ evidenceRef: string;
22372
+ principle: string;
22373
+ detail: string;
22374
+ };
22375
+ type KeywordMetricsReport = {
22376
+ schemaVersion: 1;
22377
+ generatedAt: string;
22378
+ dataStatus: 'complete' | 'partial' | 'unavailable';
22379
+ market: SearchMarket;
22380
+ summary: {
22381
+ requestedKeywords: number;
22382
+ providerRows: number;
22383
+ keywordsWithObservedVolume: number;
22384
+ observedZeroVolume: number;
22385
+ missingOrInvalidVolume: number;
22386
+ increasingTrends: number;
22387
+ decreasingTrends: number;
22388
+ stableTrends: number;
22389
+ unavailableTrends: number;
22390
+ verdict: string;
22391
+ };
22392
+ evidence: ProviderEvidence<KeywordMetric[]>;
22393
+ analysis: KeywordMetricAnalysis[];
22394
+ findings: KeywordMetricFinding[];
22395
+ caveats: string[];
22396
+ nextSteps: string[];
22397
+ };
22398
+ type KeywordMetricsReportDependencies = {
22399
+ candidates?: readonly ProviderCandidate[];
22400
+ now?: () => Date;
22401
+ };
22402
+ declare function analyzeKeywordTrend(metric: KeywordMetric): KeywordTrend;
22403
+ declare function keywordMetricsReport(input: {
22404
+ keywords: string[];
22405
+ market: SearchMarket;
22406
+ provider?: ProviderId;
22407
+ projectId?: string;
22408
+ context?: Partial<ProviderRequestContext>;
22409
+ refresh?: boolean;
22410
+ }, dependencies?: KeywordMetricsReportDependencies): Promise<KeywordMetricsReport>;
22411
+ //#endregion
22412
+ //#region packages/core/src/analyze/pseo/query-insights.d.ts
22413
+ type PseoQueryPattern = {
22414
+ label: string;
22415
+ queryCount: number;
22416
+ clicks: number;
22417
+ impressions: number;
22418
+ examples: string[];
22419
+ };
22420
+ //#endregion
22421
+ //#region packages/core/src/analyze/second-page-analysis.d.ts
22422
+ declare function analyzeSecondPageRows(input: AnalyzeSecondPageInput): SecondPageAnalysis;
22423
+ //#endregion
22424
+ //#region packages/core/src/analyze/keyword-opportunity-contract.d.ts
22425
+ type KeywordOpportunitySource = 'quick-wins' | 'second-page' | 'striking-distance';
22426
+ type KeywordOpportunitiesInput = {
22427
+ site: string;
22428
+ days?: number;
22429
+ minImpressions?: number;
22430
+ limit?: number;
22431
+ keywordLimit?: number;
22432
+ queriesPerPage?: number;
22433
+ clusterLimit?: number;
22434
+ brandTerms?: string[];
22435
+ includeBrand?: boolean;
22436
+ includeExternal?: boolean;
22437
+ market?: SearchMarket;
22438
+ provider?: ProviderId;
22439
+ projectId?: string;
22440
+ refresh?: boolean;
22441
+ };
22442
+ type BoundedSecondPageItem = Omit<SecondPageItem, 'queries'> & {
22443
+ queries: SecondPageItem['queries'];
22444
+ queryCoverage: {
22445
+ available: number;
22446
+ returned: number;
22447
+ omitted: number;
22448
+ };
22449
+ };
22450
+ type QuickWinsSection = Omit<QuickWinAnalysis, 'eligibleItems'>;
22451
+ type SecondPageSection = Omit<SecondPageAnalysis, 'items'> & {
22452
+ items: BoundedSecondPageItem[];
22453
+ };
22454
+ type StrikingDistanceSection = Omit<StrikingDistanceAnalysis, 'groups'> & {
22455
+ groups: StrikingDistanceAnalysis['groups'];
22456
+ groupCoverage: {
22457
+ available: number;
22458
+ returned: number;
22459
+ omitted: number;
22460
+ };
22461
+ };
22462
+ type KeywordOpportunityFirstParty = {
22463
+ provider: 'google-search-console';
22464
+ dimensions: ['query', 'page'];
22465
+ searchType: 'web';
22466
+ dataState: 'final';
22467
+ rowsFetched: number;
22468
+ calls: number;
22469
+ maxRows: number;
22470
+ possiblyTruncated: boolean;
22471
+ completeness: 'retained-query-rows-only';
22472
+ quickWins: QuickWinsSection;
22473
+ secondPage: SecondPageSection;
22474
+ strikingDistance: StrikingDistanceSection;
22475
+ };
22476
+ type KeywordOpportunityExternal = {
22477
+ requested: boolean;
22478
+ status: 'not-requested' | 'skipped' | 'complete' | 'partial' | 'unavailable';
22479
+ selection: {
22480
+ availableKeywords: number;
22481
+ requestedKeywords: number;
22482
+ omittedKeywords: number;
22483
+ method: 'round-robin-first-party-sections';
22484
+ };
22485
+ report: KeywordMetricsReport | null;
22486
+ reason?: string;
22487
+ error?: {
22488
+ code: 'PROVIDER_UNAVAILABLE' | 'RATE_LIMITED';
22489
+ message: string;
22490
+ retryable: boolean;
22491
+ };
22492
+ };
22493
+ type KeywordOpportunityCombined = {
22494
+ keyword: string;
22495
+ sources: KeywordOpportunitySource[];
22496
+ firstParty: {
22497
+ clicks: number;
22498
+ impressions: number;
22499
+ ctr: number;
22500
+ averagePosition: number;
22501
+ urls: Array<{
22502
+ url: string;
22503
+ clicks: number;
22504
+ impressions: number;
22505
+ ctr: number;
22506
+ averagePosition: number;
22507
+ }>;
22508
+ urlCoverage: {
22509
+ available: number;
22510
+ returned: number;
22511
+ omitted: number;
22512
+ };
22513
+ };
22514
+ external?: {
22515
+ evidenceRef: string;
22516
+ monthlySearchVolume: KeywordMetric['monthlySearchVolume'];
22517
+ cpcUsd: KeywordMetric['cpcUsd'];
22518
+ keywordDifficulty: KeywordMetric['keywordDifficulty'];
22519
+ intent: KeywordMetric['intent'];
22520
+ resultCount: KeywordMetric['resultCount'];
22521
+ trend: KeywordTrend;
22522
+ };
22523
+ };
22524
+ type KeywordOpportunityCluster = QueryCluster & {
22525
+ externalContext: {
22526
+ selectedQueries: number;
22527
+ metricsWithObservedVolume: number;
22528
+ metricEvidenceRefs: string[];
22529
+ };
22530
+ };
22531
+ type KeywordOpportunityFinding = {
22532
+ code: 'provider-zero-with-first-party-impressions';
22533
+ keyword: string;
22534
+ evidenceRefs: [string, string];
22535
+ detail: string;
22536
+ action: string;
22537
+ } | {
22538
+ code: 'recent-demand-increase';
22539
+ keyword: string;
22540
+ evidenceRefs: [string, string];
22541
+ detail: string;
22542
+ action: string;
22543
+ } | {
22544
+ code: 'programmatic-template-cluster';
22545
+ keyword: string;
22546
+ evidenceRefs: [string];
22547
+ detail: string;
22548
+ action: string;
22549
+ };
22550
+ type KeywordOpportunityDataSourcePrompt = {
22551
+ clusterRef: string;
22552
+ queryLabel: string;
22553
+ instruction: string;
22554
+ requiredChecks: readonly ['stable entity IDs and join keys', 'required attributes and missing-value rules', 'source provenance and usage rights', 'update cadence and freshness checks', 'page uniqueness and duplicate prevention', 'representative output and internal-link review'];
22555
+ evidenceBoundary: string;
22556
+ };
22557
+ type KeywordOpportunitiesReport = {
22558
+ schemaVersion: 1;
22559
+ site: string;
22560
+ generatedAt: string;
22561
+ range: {
22562
+ startDate: string;
22563
+ endDate: string;
22564
+ };
22565
+ rangeDays: number;
22566
+ dataStatus: 'complete' | 'partial' | 'empty' | 'filtered';
22567
+ summary: {
22568
+ sourceRows: number;
22569
+ quickWinCandidates: number;
22570
+ secondPageCandidates: number;
22571
+ strikingDistanceCandidates: number;
22572
+ availableCandidateKeywords: number;
22573
+ returnedCandidateKeywords: number;
22574
+ externalMetricsObserved: number;
22575
+ candidateClusters: number;
22576
+ programmaticTemplateClusters: number;
22577
+ verdict: string;
22578
+ };
22579
+ methodology: {
22580
+ id: 'gsc_keyword_opportunities_v1';
22581
+ sourceAcquisition: 'one-bounded-query-page-acquisition';
22582
+ opportunityAnalyses: readonly ['gsc_quick_wins_v2', 'gsc_second_page_v2', 'gsc_striking_distance_v2'];
22583
+ externalSelection: 'round-robin-first-party-sections';
22584
+ externalChangesPriorityScore: false;
22585
+ clustersUse: 'returned-opportunity-keyword-subset';
22586
+ clusterMinImpressions: 25;
22587
+ };
22588
+ firstParty: KeywordOpportunityFirstParty;
22589
+ external: KeywordOpportunityExternal;
22590
+ combined: KeywordOpportunityCombined[];
22591
+ candidateClusters: KeywordOpportunityCluster[];
22592
+ programmaticPatterns: PseoQueryPattern[];
22593
+ findings: KeywordOpportunityFinding[];
22594
+ dataSourcePrompts: KeywordOpportunityDataSourcePrompt[];
22595
+ caveats: string[];
22596
+ nextSteps: string[];
22597
+ };
22598
+ //#endregion
22599
+ //#region packages/core/src/analyze/keyword-opportunities.d.ts
22600
+ type SearchAnalytics$3 = typeof querySearchAnalytics;
22601
+ type KeywordMetrics = typeof keywordMetricsReport;
22602
+ type KeywordOpportunitiesDependencies = {
22603
+ searchAnalytics?: SearchAnalytics$3;
22604
+ keywordMetrics?: KeywordMetrics;
22605
+ now?: () => Date;
22606
+ };
22607
+ declare function keywordOpportunitiesReport(input: KeywordOpportunitiesInput, dependencies?: KeywordOpportunitiesDependencies): Promise<KeywordOpportunitiesReport>;
22608
+ //#endregion
22609
+ //#region packages/core/src/analyze/keyword-research.d.ts
22610
+ type KeywordResearchAnalysis = {
22611
+ keyword: string;
22612
+ sourceCount: number;
22613
+ seedCount: number;
22614
+ trend: KeywordTrend;
22615
+ };
22616
+ type KeywordResearchFinding = {
22617
+ code: 'multi-source-keyword' | 'recent-demand-increase';
22618
+ keyword: string;
22619
+ evidenceRef: string;
22620
+ principle: string;
22621
+ detail: string;
22622
+ };
22623
+ type KeywordResearchReport = {
22624
+ schemaVersion: 1;
22625
+ generatedAt: string;
22626
+ dataStatus: 'complete' | 'partial' | 'unavailable';
22627
+ market: SearchMarket;
22628
+ summary: {
22629
+ requestedSeeds: number;
22630
+ requestedSources: number;
22631
+ discoveredKeywords: number;
22632
+ keywordsWithObservedVolume: number;
22633
+ observedZeroVolume: number;
22634
+ missingOrInvalidVolume: number;
22635
+ keywordsFoundBySeveralSources: number;
22636
+ increasingTrends: number;
22637
+ verdict: string;
22638
+ };
22639
+ evidence: ProviderEvidence<KeywordIdea[]>;
22640
+ analysis: KeywordResearchAnalysis[];
22641
+ findings: KeywordResearchFinding[];
22642
+ caveats: string[];
22643
+ nextSteps: string[];
22644
+ };
22645
+ type KeywordResearchReportDependencies = {
22646
+ candidates?: readonly ProviderCandidate[];
22647
+ now?: () => Date;
22648
+ };
22649
+ declare function keywordResearchReport(input: {
22650
+ seeds: string[];
22651
+ sources?: KeywordDiscoverySource[];
22652
+ market: SearchMarket;
22653
+ limit?: number;
22654
+ provider?: ProviderId;
22655
+ projectId?: string;
22656
+ context?: Partial<ProviderRequestContext>;
22657
+ refresh?: boolean;
22658
+ }, dependencies?: KeywordResearchReportDependencies): Promise<KeywordResearchReport>;
22659
+ //#endregion
22015
22660
  //#region packages/core/src/analyze/monitoring/crawl-diff.d.ts
22016
22661
  declare function compareCrawlPages(input: {
22017
22662
  current: CrawlPageSnapshot[];
@@ -22416,14 +23061,15 @@ declare namespace SqliteDatabase {
22416
23061
  }
22417
23062
  //#endregion
22418
23063
  //#region packages/core/src/storage/database.d.ts
23064
+ declare function ensurePrivateDatabaseFiles(path: string): void;
22419
23065
  declare function getDb(): SqliteDatabase.Database;
22420
- declare function noteCacheWrite(sizeBytes?: number): void;
23066
+ declare function noteCacheWrite(sizeBytes?: number, database?: SqliteDatabase.Database): void;
22421
23067
  declare function checkDatabaseReadiness(): {
22422
23068
  dbPath: string;
22423
23069
  };
22424
23070
  declare function hashKey(parts: unknown[]): string;
22425
23071
  declare function getCacheStats(): CacheStats;
22426
- declare function clearCache(provider?: 'gsc' | 'google-analytics' | 'semrush' | 'http', olderThanMs?: number): number;
23072
+ declare function clearCache(provider?: 'gsc' | 'google-analytics' | 'semrush' | 'dataforseo' | 'http', olderThanMs?: number): number;
22427
23073
  //#endregion
22428
23074
  //#region packages/core/src/analyze/monitoring/index-watch.d.ts
22429
23075
  declare const INDEX_WATCH_ATTEMPT_RETENTION = 20;
@@ -22740,15 +23386,6 @@ declare function performanceAudit(input: {
22740
23386
  now?: () => Date;
22741
23387
  }): Promise<PerformanceAuditReport>;
22742
23388
  //#endregion
22743
- //#region packages/core/src/analyze/pseo/query-insights.d.ts
22744
- type PseoQueryPattern = {
22745
- label: string;
22746
- queryCount: number;
22747
- clicks: number;
22748
- impressions: number;
22749
- examples: string[];
22750
- };
22751
- //#endregion
22752
23389
  //#region packages/core/src/analyze/pseo/types.d.ts
22753
23390
  type PseoQueryPageRow = {
22754
23391
  query: string;
@@ -23025,6 +23662,25 @@ declare function pseoAuditOptions(input: Omit<PseoAuditInput, 'site'>): {
23025
23662
  rate?: FetchRateControls | undefined;
23026
23663
  progress?: ProgressReporter | undefined;
23027
23664
  };
23665
+ type PseoAuditAcquisition = {
23666
+ options: ReturnType<typeof pseoAuditOptions>;
23667
+ generatedAt: string;
23668
+ range: {
23669
+ startDate: string;
23670
+ endDate: string;
23671
+ };
23672
+ warnings: string[];
23673
+ sitemapUrls: string[];
23674
+ pageRows: PseoPageRow[];
23675
+ queryPageRows: PseoQueryPageRow[];
23676
+ pageRowsFetched: number;
23677
+ queryPageRowsFetched: number;
23678
+ };
23679
+ declare function acquirePseoAuditEvidence(input: PseoAuditInput, dependencies?: PseoDependencies): Promise<PseoAuditAcquisition>;
23680
+ declare function buildPseoAuditFromAcquisition(input: PseoAuditInput, acquisition: PseoAuditAcquisition, evidence?: {
23681
+ crawl: PseoCrawlSample[];
23682
+ inspection: PseoInspectionSample[];
23683
+ }): PseoAuditReport;
23028
23684
  declare function pseoAuditReport(input: PseoAuditInput, dependencies?: PseoDependencies): Promise<PseoAuditReport>;
23029
23685
  //#endregion
23030
23686
  //#region packages/core/src/analyze/pseo/markdown.d.ts
@@ -23059,6 +23715,276 @@ type Presentation = {
23059
23715
  //#region packages/core/src/analyze/pseo/presentation.d.ts
23060
23716
  declare function pseoPresentation(report: PseoAuditReport): Presentation;
23061
23717
  //#endregion
23718
+ //#region packages/core/src/analyze/pseo-opportunity-contract.d.ts
23719
+ type PseoOpportunitiesInput = Pick<PseoAuditInput, 'site' | 'days' | 'sitemaps' | 'maxSitemapUrls' | 'templateLimit' | 'minimumTemplateUrls' | 'minimumTemplateShare' | 'minimumTemplateImpressions' | 'brandTerms' | 'includeBrand' | 'refresh'> & {
23720
+ clusterLimit?: number;
23721
+ includeExternal?: boolean;
23722
+ market?: SearchMarket;
23723
+ provider?: ProviderId;
23724
+ discoverySources?: KeywordDiscoverySource[];
23725
+ discoveryLimit?: number;
23726
+ candidateLimit?: number;
23727
+ serpLimit?: number;
23728
+ serpDepth?: number;
23729
+ projectId?: string;
23730
+ };
23731
+ type PseoOpportunityTemplate = {
23732
+ signature: string;
23733
+ shape: PseoAuditTemplate['shape'];
23734
+ sampleUrls: string[];
23735
+ population: {
23736
+ discoveredUrls: number;
23737
+ gscVisibleUrls: number;
23738
+ untestedUrls: number;
23739
+ };
23740
+ searchEvidence: {
23741
+ clicks: number;
23742
+ impressions: number;
23743
+ averagePosition: number;
23744
+ topQueries: Array<{
23745
+ query: string;
23746
+ clicks: number;
23747
+ impressions: number;
23748
+ position: number;
23749
+ }>;
23750
+ queryPatterns: PseoAuditTemplate['metrics']['queryPatterns'];
23751
+ };
23752
+ evidenceClass: 'search-evidenced-template' | 'observed-template';
23753
+ auditVerdict: PseoAuditTemplate['verdict'];
23754
+ confidence: PseoAuditTemplate['confidence'];
23755
+ evidenceRef: string;
23756
+ };
23757
+ type PseoOpportunityCluster = Pick<QueryCluster, 'label' | 'intent' | 'totals' | 'template' | 'summary' | 'recommendation'> & {
23758
+ queries: QueryCluster['queries'];
23759
+ evidenceClass: 'template-mapped' | 'query-cluster';
23760
+ templateRef: string | null;
23761
+ evidenceRef: string;
23762
+ };
23763
+ type PseoResearchSeed = {
23764
+ keyword: string;
23765
+ source: 'template' | 'query-cluster';
23766
+ evidenceRef: string;
23767
+ templateRef: string | null;
23768
+ };
23769
+ type PseoExternalCandidate = {
23770
+ keyword: string;
23771
+ classification: 'existing-first-party-query' | 'search-evidenced-template-expansion' | 'new-template-research';
23772
+ seedRefs: string[];
23773
+ templateRefs: string[];
23774
+ sources: KeywordIdea['sources'];
23775
+ monthlySearchVolume: KeywordIdea['monthlySearchVolume'];
23776
+ keywordDifficulty: KeywordIdea['keywordDifficulty'];
23777
+ intent: KeywordIdea['intent'];
23778
+ resultCount: KeywordIdea['resultCount'];
23779
+ evidenceRef: string;
23780
+ };
23781
+ type PseoExternalAcquisition = Pick<ProviderEvidence<never>, 'provider' | 'observedAt' | 'market' | 'coverage' | 'cache' | 'cost' | 'request' | 'warnings'>;
23782
+ type PseoDiscoveryEvidence = {
23783
+ requested: boolean;
23784
+ status: 'not-requested' | 'skipped' | 'complete' | 'partial' | 'unavailable';
23785
+ seeds: PseoResearchSeed[];
23786
+ acquisition: PseoExternalAcquisition | null;
23787
+ availableCandidates: number;
23788
+ returnedCandidates: number;
23789
+ omittedCandidates: number;
23790
+ candidates: PseoExternalCandidate[];
23791
+ reason?: string;
23792
+ error?: {
23793
+ code: string;
23794
+ message: string;
23795
+ retryable: boolean;
23796
+ };
23797
+ };
23798
+ type PseoSerpObservation = {
23799
+ keyword: string;
23800
+ status: 'complete' | 'partial' | 'unavailable';
23801
+ acquisition: PseoExternalAcquisition | null;
23802
+ features: string[];
23803
+ organicResults: SerpOrganicResult[];
23804
+ resultCoverage: {
23805
+ available: number;
23806
+ returned: number;
23807
+ omitted: number;
23808
+ };
23809
+ reason?: string;
23810
+ error?: {
23811
+ code: string;
23812
+ message: string;
23813
+ retryable: boolean;
23814
+ };
23815
+ };
23816
+ type PseoSerpEvidence = {
23817
+ requested: boolean;
23818
+ requestedQueries: number;
23819
+ completedQueries: number;
23820
+ failedQueries: number;
23821
+ observations: PseoSerpObservation[];
23822
+ };
23823
+ type PseoCompetitorPattern = {
23824
+ domain: string;
23825
+ queryCount: number;
23826
+ resultCount: number;
23827
+ bestRank: number;
23828
+ queries: string[];
23829
+ sampleUrls: string[];
23830
+ repeatedTemplates: Array<{
23831
+ signature: string;
23832
+ urlCount: number;
23833
+ sampleUrls: string[];
23834
+ }>;
23835
+ evidenceRefs: string[];
23836
+ };
23837
+ type PseoDataSourceBrief = {
23838
+ candidateRef: string;
23839
+ proposalType: 'template-expansion' | 'new-template-research';
23840
+ instruction: string;
23841
+ requiredChecks: readonly ['entities and required fields', 'stable identifiers and join keys', 'geographic and language coverage', 'update cadence and stale-data handling', 'source provenance, licensing, and attribution', 'validation rules and missing-value stop conditions', 'bounded inventory and duplicate prevention', 'representative output, crawl, canonical, and internal-link review'];
23842
+ evidenceBoundary: string;
23843
+ };
23844
+ type PseoOpportunityFinding = {
23845
+ code: 'template-expansion-candidate';
23846
+ evidenceRefs: [string, string];
23847
+ detail: string;
23848
+ action: string;
23849
+ } | {
23850
+ code: 'new-template-research-candidate';
23851
+ evidenceRefs: [string];
23852
+ detail: string;
23853
+ action: string;
23854
+ } | {
23855
+ code: 'competitor-repeated-pattern';
23856
+ evidenceRefs: [string];
23857
+ detail: string;
23858
+ action: string;
23859
+ };
23860
+ type PseoKnownCost = {
23861
+ currency: 'USD';
23862
+ knownEstimatedMicros: number;
23863
+ knownActualMicros: number;
23864
+ unknownEstimatedRequests: number;
23865
+ unknownActualRequests: number;
23866
+ taskIds: string[];
23867
+ };
23868
+ type PseoOpportunitiesReport = {
23869
+ schemaVersion: 1;
23870
+ methodology: 'pseo_opportunities_v1';
23871
+ site: string;
23872
+ generatedAt: string;
23873
+ dataStatus: 'complete' | 'partial' | 'empty' | 'filtered';
23874
+ market: SearchMarket | null;
23875
+ summary: {
23876
+ observedTemplates: number;
23877
+ searchEvidencedTemplates: number;
23878
+ queryClusters: number;
23879
+ researchSeeds: number;
23880
+ discoveredCandidates: number;
23881
+ templateExpansionCandidates: number;
23882
+ newTemplateResearchCandidates: number;
23883
+ serpSnapshots: number;
23884
+ observedCompetitors: number;
23885
+ dataSourceBriefs: number;
23886
+ verdict: string;
23887
+ };
23888
+ source: {
23889
+ pseoAudit: {
23890
+ range: {
23891
+ startDate: string;
23892
+ endDate: string;
23893
+ };
23894
+ dataStatus: PseoAuditReport['dataStatus'];
23895
+ pageRows: number;
23896
+ queryPageRows: number;
23897
+ pageRowsPossiblyTruncated: boolean;
23898
+ queryPageRowsPossiblyTruncated: boolean;
23899
+ discoveredUrls: number;
23900
+ returnedTemplates: number;
23901
+ };
23902
+ queryClusters: {
23903
+ range: {
23904
+ startDate: string;
23905
+ endDate: string;
23906
+ };
23907
+ returnedClusters: number;
23908
+ returnedQueries: number;
23909
+ completeness: 'returned-clusters-only';
23910
+ minImpressions: number;
23911
+ limit: number;
23912
+ };
23913
+ external: {
23914
+ discovery: PseoDiscoveryEvidence;
23915
+ serps: PseoSerpEvidence;
23916
+ cost: PseoKnownCost;
23917
+ };
23918
+ };
23919
+ selection: {
23920
+ templateLimit: number;
23921
+ clusterLimit: number;
23922
+ seedLimit: 5;
23923
+ discoveryLimit: number;
23924
+ candidateLimit: number;
23925
+ serpLimit: number;
23926
+ serpDepth: number;
23927
+ organicResultsPerSnapshot: 10;
23928
+ competitorLimit: 10;
23929
+ dataSourceBriefLimit: 3;
23930
+ candidateOrder: 'classification-source-count-volume-keyword-v1';
23931
+ };
23932
+ templates: PseoOpportunityTemplate[];
23933
+ queryClusters: PseoOpportunityCluster[];
23934
+ competitors: PseoCompetitorPattern[];
23935
+ findings: PseoOpportunityFinding[];
23936
+ dataSourceBriefs: PseoDataSourceBrief[];
23937
+ caveats: string[];
23938
+ nextSteps: string[];
23939
+ };
23940
+ //#endregion
23941
+ //#region packages/core/src/analyze/serp-results.d.ts
23942
+ type SerpDomainSummary = {
23943
+ domain: string;
23944
+ resultCount: number;
23945
+ ranks: number[];
23946
+ };
23947
+ type SerpResultFinding = {
23948
+ code: 'query-correction' | 'repeated-domain';
23949
+ evidenceRef: string;
23950
+ principle: string;
23951
+ detail: string;
23952
+ };
23953
+ type SerpResultsReport = {
23954
+ schemaVersion: 1;
23955
+ generatedAt: string;
23956
+ dataStatus: 'complete' | 'partial' | 'unavailable';
23957
+ market: SearchMarket;
23958
+ summary: {
23959
+ keyword: string;
23960
+ effectiveKeyword: string;
23961
+ requestedDepth: number;
23962
+ organicResults: number;
23963
+ uniqueDomains: number;
23964
+ observedFeatures: number;
23965
+ correctedQuery: boolean;
23966
+ verdict: string;
23967
+ };
23968
+ evidence: ProviderEvidence<SerpSnapshot>;
23969
+ domains: SerpDomainSummary[];
23970
+ findings: SerpResultFinding[];
23971
+ caveats: string[];
23972
+ nextSteps: string[];
23973
+ };
23974
+ type SerpResultsReportDependencies = {
23975
+ candidates?: readonly ProviderCandidate[];
23976
+ now?: () => Date;
23977
+ };
23978
+ declare function serpResultsReport(input: {
23979
+ keyword: string;
23980
+ market: SearchMarket;
23981
+ depth?: number;
23982
+ provider?: ProviderId;
23983
+ projectId?: string;
23984
+ context?: Partial<ProviderRequestContext>;
23985
+ refresh?: boolean;
23986
+ }, dependencies?: SerpResultsReportDependencies): Promise<SerpResultsReport>;
23987
+ //#endregion
23062
23988
  //#region packages/core/src/analyze/query-cluster-primitives.d.ts
23063
23989
  type QueryClusterRow = {
23064
23990
  query: string;
@@ -23118,8 +24044,10 @@ type QueryClusterReport = {
23118
24044
  caveats: string[];
23119
24045
  recommendations: string[];
23120
24046
  };
24047
+ type QueryClusterSourceRow = Awaited<ReturnType<typeof querySearchAnalytics>>['rows'][number];
23121
24048
  declare function queryClusterReport(input: {
23122
24049
  site: string;
24050
+ days?: number;
23123
24051
  scope?: string;
23124
24052
  brand?: string;
23125
24053
  brandTerms?: string[];
@@ -23128,6 +24056,54 @@ declare function queryClusterReport(input: {
23128
24056
  limit?: number;
23129
24057
  refresh?: boolean;
23130
24058
  }): Promise<QueryClusterReport>;
24059
+ declare function buildQueryClusterReportFromRows(input: {
24060
+ site: string;
24061
+ days: number;
24062
+ range: {
24063
+ startDate: string;
24064
+ endDate: string;
24065
+ };
24066
+ generatedAt: string;
24067
+ rows: QueryClusterSourceRow[];
24068
+ scope?: string;
24069
+ brand?: string;
24070
+ brandTerms?: string[];
24071
+ includeBrand?: boolean;
24072
+ minImpressions?: number;
24073
+ limit?: number;
24074
+ }): QueryClusterReport;
24075
+ //#endregion
24076
+ //#region packages/core/src/analyze/pseo-opportunities/input.d.ts
24077
+ type ValidatedPseoOpportunitiesInput = Omit<PseoOpportunitiesInput, 'days' | 'templateLimit' | 'clusterLimit' | 'discoverySources' | 'discoveryLimit' | 'candidateLimit' | 'serpLimit' | 'serpDepth' | 'market' | 'provider'> & {
24078
+ days: number;
24079
+ templateLimit: number;
24080
+ clusterLimit: number;
24081
+ discoverySources: KeywordDiscoverySource[];
24082
+ discoveryLimit: number;
24083
+ candidateLimit: number;
24084
+ serpLimit: number;
24085
+ serpDepth: number;
24086
+ market?: SearchMarket;
24087
+ provider?: PseoOpportunitiesInput['provider'];
24088
+ };
24089
+ //#endregion
24090
+ //#region packages/core/src/analyze/pseo-opportunities/first-party-acquisition.d.ts
24091
+ type PseoOpportunityFirstPartyReport = {
24092
+ audit: PseoAuditReport;
24093
+ queryClusters: QueryClusterReport;
24094
+ };
24095
+ declare function pseoOpportunityFirstPartyReport(options: ValidatedPseoOpportunitiesInput, dependencies?: {
24096
+ acquirePseoAuditEvidence?: typeof acquirePseoAuditEvidence;
24097
+ }): Promise<PseoOpportunityFirstPartyReport>;
24098
+ //#endregion
24099
+ //#region packages/core/src/analyze/pseo-opportunities/report.d.ts
24100
+ type PseoOpportunitiesDependencies = {
24101
+ firstPartyReport?: typeof pseoOpportunityFirstPartyReport;
24102
+ keywordResearchReport?: typeof keywordResearchReport;
24103
+ serpResultsReport?: typeof serpResultsReport;
24104
+ now?: () => Date;
24105
+ };
24106
+ declare function pseoOpportunitiesReport(input: PseoOpportunitiesInput, dependencies?: PseoOpportunitiesDependencies): Promise<PseoOpportunitiesReport>;
23131
24107
  //#endregion
23132
24108
  //#region packages/core/src/errors.d.ts
23133
24109
  type SeoErrorCode = 'ACCESS_DENIED' | 'AUTH_CONFIG_REQUIRED' | 'AUTH_EXPIRED' | 'AUTH_REQUIRED' | 'INSUFFICIENT_DATA' | 'INTERNAL_ERROR' | 'INVALID_INPUT' | 'OPTIONAL_PROVIDER_UNAVAILABLE' | 'PROPERTY_NOT_FOUND' | 'PROVIDER_UNAVAILABLE' | 'RATE_LIMITED';
@@ -23238,9 +24214,6 @@ declare function reportNarrative(input: {
23238
24214
  //#region packages/core/src/analyze/reports/presentation.d.ts
23239
24215
  declare function reportPresentation(report: ReportNarrative): Presentation;
23240
24216
  //#endregion
23241
- //#region packages/core/src/analyze/second-page-analysis.d.ts
23242
- declare function analyzeSecondPageRows(input: AnalyzeSecondPageInput): SecondPageAnalysis;
23243
- //#endregion
23244
24217
  //#region packages/core/src/analyze/second-page.d.ts
23245
24218
  type SearchAnalytics = typeof querySearchAnalytics;
23246
24219
  type FetchPage = typeof fetchPage;
@@ -24879,18 +25852,538 @@ declare function fileSize(path: string): number;
24879
25852
  declare function plural(count: number, singular: string, pluralLabel?: string): string;
24880
25853
  declare function countLabel(count: number, singular: string, pluralLabel?: string): string;
24881
25854
  //#endregion
25855
+ //#region packages/core/src/providers/cost-limits.d.ts
25856
+ type ProviderSpendLimits = {
25857
+ dailyNoticeMicros: number;
25858
+ dailyHardLimitMicros: number | null;
25859
+ monthlyHardLimitMicros: number | null;
25860
+ maxRequestsPerReport: number;
25861
+ maxRowsPerReport: number;
25862
+ };
25863
+ declare const DEFAULT_PROVIDER_SPEND_LIMITS: ProviderSpendLimits;
25864
+ declare function getProviderSpendLimits(provider: ProviderId): ProviderSpendLimits;
25865
+ declare function setProviderSpendLimits(provider: ProviderId, limits: ProviderSpendLimits): ProviderSpendLimits;
25866
+ //#endregion
25867
+ //#region packages/core/src/storage/provider-spend.d.ts
25868
+ declare const PROVIDER_SPEND_RETENTION_DAYS: number;
25869
+ declare const PROVIDER_SPEND_MAX_ROWS = 50000;
25870
+ declare const PROVIDER_SPEND_MAX_BYTES: number;
25871
+ type ProviderSpendState = 'reserved' | 'succeeded' | 'partial' | 'failed' | 'unknown';
25872
+ type ProviderSpendReservationInput = {
25873
+ provider: ProviderId;
25874
+ capability: ProviderCapability;
25875
+ endpoint: string;
25876
+ projectId?: string;
25877
+ reportId: string;
25878
+ reportRunId: string;
25879
+ requestedRows: number;
25880
+ estimatedCostMicros: number;
25881
+ };
25882
+ type ProviderSpendReservation = ProviderSpendReservationInput & {
25883
+ id: string;
25884
+ occurredAt: string;
25885
+ expiresAt: string;
25886
+ };
25887
+ type ProviderSpendFinalization = {
25888
+ provider: ProviderId;
25889
+ state: Exclude<ProviderSpendState, 'reserved' | 'unknown'>;
25890
+ actualCostMicros: number | null;
25891
+ returnedRows: number | null;
25892
+ taskIds: string[];
25893
+ };
25894
+ type ProviderSpendNotice = {
25895
+ provider: ProviderId;
25896
+ thresholdMicros: number;
25897
+ periodStart: string;
25898
+ spentMicros: number;
25899
+ };
25900
+ type ProviderSpendSummary = {
25901
+ provider: ProviderId;
25902
+ periodTimezone: 'UTC';
25903
+ today: {
25904
+ periodStart: string;
25905
+ effectiveCostMicros: number;
25906
+ actualCostMicros: number;
25907
+ estimatedOrUnknownCostMicros: number;
25908
+ requests: number;
25909
+ };
25910
+ month: {
25911
+ periodStart: string;
25912
+ effectiveCostMicros: number;
25913
+ actualCostMicros: number;
25914
+ estimatedOrUnknownCostMicros: number;
25915
+ requests: number;
25916
+ };
25917
+ retained: {
25918
+ effectiveCostMicros: number;
25919
+ actualCostMicros: number;
25920
+ estimatedOrUnknownCostMicros: number;
25921
+ requests: number;
25922
+ oldestAt: string | null;
25923
+ newestAt: string | null;
25924
+ };
25925
+ states: Record<ProviderSpendState, number>;
25926
+ limits: ProviderSpendLimits;
25927
+ retention: {
25928
+ days: number;
25929
+ maxRows: number;
25930
+ maxBytes: number;
25931
+ logicalBytes: number;
25932
+ };
25933
+ };
25934
+ declare function reserveProviderSpend(input: ProviderSpendReservationInput, options?: {
25935
+ database?: SqliteDatabase.Database;
25936
+ limits?: ProviderSpendLimits;
25937
+ now?: number;
25938
+ }): ProviderSpendReservation;
25939
+ declare function finalizeProviderSpend(reservationId: string, result: ProviderSpendFinalization, options?: {
25940
+ database?: SqliteDatabase.Database;
25941
+ limits?: ProviderSpendLimits;
25942
+ now?: number;
25943
+ }): ProviderSpendNotice | null;
25944
+ declare function getProviderSpendSummary(provider: ProviderId, options?: {
25945
+ database?: SqliteDatabase.Database;
25946
+ limits?: ProviderSpendLimits;
25947
+ now?: number;
25948
+ }): ProviderSpendSummary;
25949
+ //#endregion
25950
+ //#region packages/core/src/providers/transport.d.ts
25951
+ type ProviderFetch = (url: string | URL, init?: RequestInit$1) => Promise<Response$1>;
25952
+ type ProviderRequestInput = {
25953
+ provider: ProviderId;
25954
+ operation: string;
25955
+ url: string | URL;
25956
+ init?: RequestInit$1;
25957
+ fetch: ProviderFetch;
25958
+ maxResponseBytes: number;
25959
+ timeoutMs: number;
25960
+ retry?: 'never' | 'safe';
25961
+ retryDelayMs?: number;
25962
+ };
25963
+ declare function providerRequestText(input: ProviderRequestInput): Promise<string>;
25964
+ declare function providerRequestJson<T>(input: ProviderRequestInput & {
25965
+ schema: z.ZodType<T>;
25966
+ }): Promise<T>;
25967
+ //#endregion
25968
+ //#region packages/core/src/providers/dataforseo/credentials.d.ts
25969
+ declare const DATAFORSEO_LOGIN_ENV = "SEO_DATAFORSEO_LOGIN";
25970
+ declare const DATAFORSEO_PASSWORD_ENV = "SEO_DATAFORSEO_PASSWORD";
25971
+ declare const DATAFORSEO_CREDENTIAL_SECRET = "dataforseo-credentials";
25972
+ type DataForSeoCredentials = {
25973
+ login: string;
25974
+ password: string;
25975
+ };
25976
+ type StoredDataForSeoCredentials = DataForSeoCredentials & {
25977
+ source: ProviderSecretSource;
25978
+ migrated: boolean;
25979
+ };
25980
+ declare function writeDataForSeoCredentials(credentials: DataForSeoCredentials): Promise<Exclude<ProviderSecretSource, 'environment'>>;
25981
+ declare function readDataForSeoCredentials(input?: {
25982
+ env?: NodeJS.ProcessEnv;
25983
+ }): Promise<StoredDataForSeoCredentials | undefined>;
25984
+ declare function deleteDataForSeoCredentials(): Promise<void>;
25985
+ //#endregion
25986
+ //#region packages/core/src/providers/dataforseo/discovery-schema.d.ts
25987
+ declare const dataForSeoDiscoveryResponseSchema: z.ZodObject<{
25988
+ status_code: z.ZodNumber;
25989
+ status_message: z.ZodString;
25990
+ cost: z.ZodOptional<z.ZodNumber>;
25991
+ tasks_count: z.ZodNumber;
25992
+ tasks_error: z.ZodNumber;
25993
+ tasks: z.ZodArray<z.ZodObject<{
25994
+ id: z.ZodOptional<z.ZodString>;
25995
+ status_code: z.ZodNumber;
25996
+ status_message: z.ZodString;
25997
+ cost: z.ZodOptional<z.ZodNumber>;
25998
+ result_count: z.ZodOptional<z.ZodNumber>;
25999
+ result: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
26000
+ seed_keyword: z.ZodOptional<z.ZodString>;
26001
+ seed_keywords: z.ZodOptional<z.ZodArray<z.ZodString>>;
26002
+ total_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26003
+ items_count: z.ZodOptional<z.ZodNumber>;
26004
+ offset_token: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26005
+ items: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
26006
+ keyword: z.ZodString;
26007
+ keyword_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26008
+ search_volume: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26009
+ cpc: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26010
+ competition: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26011
+ monthly_searches: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
26012
+ year: z.ZodNumber;
26013
+ month: z.ZodNumber;
26014
+ search_volume: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26015
+ }, z.core.$loose>>>>;
26016
+ last_updated_time: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26017
+ }, z.core.$strip>>>;
26018
+ keyword_properties: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26019
+ keyword_difficulty: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26020
+ }, z.core.$strip>>>;
26021
+ serp_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26022
+ se_results_count: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
26023
+ }, z.core.$strip>>>;
26024
+ search_intent_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26025
+ main_intent: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
26026
+ informational: "informational";
26027
+ navigational: "navigational";
26028
+ commercial: "commercial";
26029
+ transactional: "transactional";
26030
+ }>>>;
26031
+ }, z.core.$strip>>>;
26032
+ }, z.core.$loose>, z.ZodObject<{
26033
+ keyword_data: z.ZodObject<{
26034
+ keyword: z.ZodString;
26035
+ keyword_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26036
+ search_volume: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26037
+ cpc: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26038
+ competition: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26039
+ monthly_searches: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
26040
+ year: z.ZodNumber;
26041
+ month: z.ZodNumber;
26042
+ search_volume: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26043
+ }, z.core.$loose>>>>;
26044
+ last_updated_time: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26045
+ }, z.core.$strip>>>;
26046
+ keyword_properties: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26047
+ keyword_difficulty: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26048
+ }, z.core.$strip>>>;
26049
+ serp_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26050
+ se_results_count: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
26051
+ }, z.core.$strip>>>;
26052
+ search_intent_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26053
+ main_intent: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
26054
+ informational: "informational";
26055
+ navigational: "navigational";
26056
+ commercial: "commercial";
26057
+ transactional: "transactional";
26058
+ }>>>;
26059
+ }, z.core.$strip>>>;
26060
+ }, z.core.$loose>;
26061
+ depth: z.ZodOptional<z.ZodNumber>;
26062
+ related_keywords: z.ZodOptional<z.ZodArray<z.ZodString>>;
26063
+ }, z.core.$loose>]>>>>;
26064
+ }, z.core.$loose>>>>;
26065
+ }, z.core.$loose>>;
26066
+ }, z.core.$loose>;
26067
+ type DataForSeoDiscoveryResponse = z.infer<typeof dataForSeoDiscoveryResponseSchema>;
26068
+ //#endregion
26069
+ //#region packages/core/src/providers/dataforseo/paid-request.d.ts
26070
+ type DataForSeoUnitPrice = {
26071
+ perRequestMicros: number | null;
26072
+ perResultMicros: number | null;
26073
+ };
26074
+ //#endregion
26075
+ //#region packages/core/src/providers/dataforseo/schema.d.ts
26076
+ declare const dataForSeoKeywordOverviewResponseSchema: z.ZodObject<{
26077
+ status_code: z.ZodNumber;
26078
+ status_message: z.ZodString;
26079
+ cost: z.ZodOptional<z.ZodNumber>;
26080
+ tasks_count: z.ZodNumber;
26081
+ tasks_error: z.ZodNumber;
26082
+ tasks: z.ZodArray<z.ZodObject<{
26083
+ id: z.ZodOptional<z.ZodString>;
26084
+ status_code: z.ZodNumber;
26085
+ status_message: z.ZodString;
26086
+ cost: z.ZodOptional<z.ZodNumber>;
26087
+ result_count: z.ZodOptional<z.ZodNumber>;
26088
+ result: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
26089
+ items_count: z.ZodOptional<z.ZodNumber>;
26090
+ items: z.ZodOptional<z.ZodArray<z.ZodObject<{
26091
+ keyword: z.ZodString;
26092
+ keyword_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26093
+ search_volume: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26094
+ cpc: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26095
+ competition: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26096
+ monthly_searches: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
26097
+ year: z.ZodNumber;
26098
+ month: z.ZodNumber;
26099
+ search_volume: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26100
+ }, z.core.$loose>>>>;
26101
+ last_updated_time: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26102
+ }, z.core.$strip>>>;
26103
+ keyword_properties: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26104
+ keyword_difficulty: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26105
+ }, z.core.$strip>>>;
26106
+ serp_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26107
+ se_results_count: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>>;
26108
+ }, z.core.$strip>>>;
26109
+ search_intent_info: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26110
+ main_intent: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
26111
+ informational: "informational";
26112
+ navigational: "navigational";
26113
+ commercial: "commercial";
26114
+ transactional: "transactional";
26115
+ }>>>;
26116
+ }, z.core.$strip>>>;
26117
+ }, z.core.$loose>>>;
26118
+ }, z.core.$loose>>>>;
26119
+ }, z.core.$loose>>;
26120
+ }, z.core.$loose>;
26121
+ type DataForSeoKeywordOverviewResponse = z.infer<typeof dataForSeoKeywordOverviewResponseSchema>;
26122
+ //#endregion
26123
+ //#region packages/core/src/providers/dataforseo/serp-schema.d.ts
26124
+ declare const dataForSeoSerpResponseSchema: z.ZodObject<{
26125
+ status_code: z.ZodNumber;
26126
+ status_message: z.ZodString;
26127
+ cost: z.ZodOptional<z.ZodNumber>;
26128
+ tasks_count: z.ZodNumber;
26129
+ tasks_error: z.ZodNumber;
26130
+ tasks: z.ZodArray<z.ZodObject<{
26131
+ id: z.ZodOptional<z.ZodString>;
26132
+ status_code: z.ZodNumber;
26133
+ status_message: z.ZodString;
26134
+ cost: z.ZodOptional<z.ZodNumber>;
26135
+ result_count: z.ZodOptional<z.ZodNumber>;
26136
+ result: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
26137
+ keyword: z.ZodString;
26138
+ se_domain: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26139
+ check_url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26140
+ datetime: z.ZodString;
26141
+ spell: z.ZodOptional<z.ZodNullable<z.ZodObject<{
26142
+ keyword: z.ZodOptional<z.ZodString>;
26143
+ type: z.ZodOptional<z.ZodString>;
26144
+ }, z.core.$loose>>>;
26145
+ item_types: z.ZodOptional<z.ZodArray<z.ZodString>>;
26146
+ se_results_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26147
+ pages_count: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26148
+ items_count: z.ZodOptional<z.ZodNumber>;
26149
+ items: z.ZodOptional<z.ZodArray<z.ZodObject<{
26150
+ type: z.ZodString;
26151
+ rank_group: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26152
+ rank_absolute: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26153
+ page: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26154
+ domain: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26155
+ url: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26156
+ title: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26157
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
26158
+ is_featured_snippet: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
26159
+ }, z.core.$loose>>>;
26160
+ }, z.core.$loose>>>>;
26161
+ }, z.core.$loose>>;
26162
+ }, z.core.$loose>;
26163
+ type DataForSeoSerpResponse = z.infer<typeof dataForSeoSerpResponseSchema>;
26164
+ //#endregion
26165
+ //#region packages/core/src/providers/dataforseo/client-types.d.ts
26166
+ type DataForSeoAccountSnapshot = {
26167
+ provider: 'dataforseo';
26168
+ login: string;
26169
+ timezone: string | null;
26170
+ balanceMicros: number | null;
26171
+ depositedMicros: number | null;
26172
+ accountDailySpendMicros: number | null;
26173
+ accountDailySpendPeriod: string | null;
26174
+ accountDailyLimitMicros: number | null;
26175
+ keywordOverviewPrice: DataForSeoUnitPrice;
26176
+ keywordDiscoveryPrices: Record<KeywordDiscoverySource, DataForSeoUnitPrice>;
26177
+ serpLiveAdvancedPrice: DataForSeoUnitPrice;
26178
+ backlinksSubscriptionExpiresAt: string | null;
26179
+ aiMentionsSubscriptionExpiresAt: string | null;
26180
+ apiVersion: string | null;
26181
+ requestCostMicros: number;
26182
+ taskIds: string[];
26183
+ observedAt: string;
26184
+ };
26185
+ type DataForSeoClientOptions = {
26186
+ fetch?: ProviderFetch;
26187
+ credentials?: () => DataForSeoCredentials | undefined | Promise<DataForSeoCredentials | undefined>;
26188
+ baseUrl?: string;
26189
+ timeoutMs?: number;
26190
+ maxResponseBytes?: number;
26191
+ now?: () => Date;
26192
+ database?: SqliteDatabase.Database;
26193
+ keywordOverviewTtlMs?: number;
26194
+ keywordDiscoveryTtlMs?: number;
26195
+ serpTtlMs?: number;
26196
+ accountPricingTtlMs?: number;
26197
+ spendLimits?: ProviderSpendLimits;
26198
+ };
26199
+ type DataForSeoKeywordOverviewRequest = {
26200
+ keywords: string[];
26201
+ languageCode: string;
26202
+ locationCode?: number;
26203
+ locationName?: string;
26204
+ includeSerpInfo?: boolean;
26205
+ includeClickstreamData?: boolean;
26206
+ refresh?: boolean;
26207
+ projectId?: string;
26208
+ reportId: string;
26209
+ reportRunId: string;
26210
+ };
26211
+ type DataForSeoKeywordOverviewSnapshot = {
26212
+ response: DataForSeoKeywordOverviewResponse;
26213
+ observedAt: string;
26214
+ returnedRows: number;
26215
+ cache: ProviderCacheEvidence;
26216
+ cost: ProviderCostEvidence;
26217
+ spendNotice: ProviderSpendNotice | null;
26218
+ warnings: ProviderWarning[];
26219
+ };
26220
+ type DataForSeoKeywordDiscoveryRequest = {
26221
+ source: KeywordDiscoverySource;
26222
+ seeds: string[];
26223
+ languageCode: string;
26224
+ locationCode?: number;
26225
+ locationName?: string;
26226
+ limit: number;
26227
+ refresh?: boolean;
26228
+ context: ProviderRequestContext;
26229
+ };
26230
+ type DataForSeoKeywordDiscoverySnapshot = {
26231
+ response: DataForSeoDiscoveryResponse;
26232
+ observedAt: string;
26233
+ returnedRows: number;
26234
+ providerTotalRows: number | null;
26235
+ nextCursor: string | null;
26236
+ cache: ProviderCacheEvidence;
26237
+ cost: ProviderCostEvidence;
26238
+ spendNotice: ProviderSpendNotice | null;
26239
+ warnings: ProviderWarning[];
26240
+ };
26241
+ type DataForSeoSerpRequest = {
26242
+ keyword: string;
26243
+ languageCode: string;
26244
+ locationCode?: number;
26245
+ locationName?: string;
26246
+ device: 'desktop' | 'mobile';
26247
+ depth: number;
26248
+ refresh?: boolean;
26249
+ context: ProviderRequestContext;
26250
+ };
26251
+ type DataForSeoSerpSnapshot = {
26252
+ response: DataForSeoSerpResponse;
26253
+ observedAt: string;
26254
+ returnedRows: number;
26255
+ cache: ProviderCacheEvidence;
26256
+ cost: ProviderCostEvidence;
26257
+ spendNotice: ProviderSpendNotice | null;
26258
+ warnings: ProviderWarning[];
26259
+ };
26260
+ //#endregion
26261
+ //#region packages/core/src/providers/dataforseo/client.d.ts
26262
+ declare class DataForSeoClient {
26263
+ private readonly fetch;
26264
+ private readonly credentials;
26265
+ private readonly baseUrl;
26266
+ private readonly timeoutMs;
26267
+ private readonly maxResponseBytes;
26268
+ private readonly now;
26269
+ private readonly database;
26270
+ private readonly keywordOverviewTtlMs;
26271
+ private readonly keywordDiscoveryTtlMs;
26272
+ private readonly serpTtlMs;
26273
+ private readonly accountPricingTtlMs;
26274
+ private readonly spendLimits;
26275
+ private accountPricing;
26276
+ private accountPricingRequest;
26277
+ constructor(options?: DataForSeoClientOptions);
26278
+ private getCredentials;
26279
+ private authorization;
26280
+ private userDataForCredentials;
26281
+ userData(): Promise<DataForSeoAccountSnapshot>;
26282
+ private pricingForCredentials;
26283
+ private paidPost;
26284
+ keywordOverview(input: DataForSeoKeywordOverviewRequest): Promise<DataForSeoKeywordOverviewSnapshot>;
26285
+ keywordDiscovery(input: DataForSeoKeywordDiscoveryRequest): Promise<DataForSeoKeywordDiscoverySnapshot>;
26286
+ serpLive(input: DataForSeoSerpRequest): Promise<DataForSeoSerpSnapshot>;
26287
+ }
26288
+ //#endregion
26289
+ //#region packages/core/src/providers/dataforseo/keyword-discovery.d.ts
26290
+ type KeywordDiscoveryClient = Pick<DataForSeoClient, 'keywordDiscovery'>;
26291
+ type DataForSeoKeywordDiscoveryProviderOptions = DataForSeoClientOptions & {
26292
+ client?: KeywordDiscoveryClient;
26293
+ };
26294
+ declare class DataForSeoKeywordDiscoveryProvider implements KeywordDiscoveryProvider {
26295
+ readonly provider: "dataforseo";
26296
+ readonly capabilitySupport: readonly [{
26297
+ readonly capability: "keyword-discovery";
26298
+ readonly status: "available";
26299
+ readonly markets: readonly [{
26300
+ readonly searchEngines: readonly ["google"];
26301
+ readonly location: "any";
26302
+ }];
26303
+ }];
26304
+ private readonly client;
26305
+ constructor(options?: DataForSeoKeywordDiscoveryProviderOptions);
26306
+ discoverKeywords(input: KeywordDiscoveryRequest): Promise<ProviderEvidence<KeywordIdea[]>>;
26307
+ }
26308
+ //#endregion
26309
+ //#region packages/core/src/providers/dataforseo/keyword-metrics.d.ts
26310
+ type KeywordMetricsClient = Pick<DataForSeoClient, 'keywordOverview'>;
26311
+ type DataForSeoKeywordMetricsProviderOptions = DataForSeoClientOptions & {
26312
+ client?: KeywordMetricsClient;
26313
+ };
26314
+ declare class DataForSeoKeywordMetricsProvider implements KeywordMetricsProvider {
26315
+ readonly provider: "dataforseo";
26316
+ readonly capabilitySupport: readonly [{
26317
+ readonly capability: "keyword-metrics";
26318
+ readonly status: "available";
26319
+ readonly markets: readonly [{
26320
+ readonly searchEngines: readonly ["google"];
26321
+ readonly location: "any";
26322
+ }];
26323
+ }];
26324
+ private readonly client;
26325
+ constructor(options?: DataForSeoKeywordMetricsProviderOptions);
26326
+ keywordMetrics(input: KeywordMetricsRequest): Promise<ProviderEvidence<KeywordMetric[]>>;
26327
+ }
26328
+ //#endregion
26329
+ //#region packages/core/src/providers/dataforseo/serp-snapshot.d.ts
26330
+ type SerpClient = Pick<DataForSeoClient, 'serpLive'>;
26331
+ type DataForSeoSerpSnapshotProviderOptions = DataForSeoClientOptions & {
26332
+ client?: SerpClient;
26333
+ };
26334
+ declare class DataForSeoSerpSnapshotProvider implements SerpSnapshotProvider {
26335
+ readonly provider: "dataforseo";
26336
+ readonly capabilitySupport: readonly [{
26337
+ readonly capability: "serp-snapshot";
26338
+ readonly status: "available";
26339
+ readonly markets: readonly [{
26340
+ readonly searchEngines: readonly ["google"];
26341
+ readonly devices: readonly ["desktop", "mobile"];
26342
+ readonly location: "any";
26343
+ }];
26344
+ }];
26345
+ private readonly client;
26346
+ constructor(options?: DataForSeoSerpSnapshotProviderOptions);
26347
+ serpSnapshot(input: SerpSnapshotRequest): Promise<ProviderEvidence<SerpSnapshot>>;
26348
+ }
26349
+ //#endregion
24882
26350
  //#region packages/core/src/providers/dataforseo.d.ts
26351
+ type DataForSeoProviderOptions = DataForSeoClientOptions;
24883
26352
  declare class DataForSeoProvider implements KeywordDataProvider {
24884
26353
  readonly name = "dataforseo";
24885
26354
  readonly capabilities: {
24886
26355
  overview: boolean;
24887
26356
  };
24888
- private getAuthHeader;
26357
+ private readonly client;
26358
+ constructor(options?: DataForSeoProviderOptions);
24889
26359
  keywordOverview(phrase: string, opts?: ProviderOpts): Promise<ProviderResult<KeywordOverview>>;
24890
26360
  }
24891
26361
  //#endregion
26362
+ //#region packages/core/src/providers/errors.d.ts
26363
+ type ProviderErrorCode = 'configuration' | 'authentication' | 'budget-limit' | 'rate-limit' | 'timeout' | 'response-too-large' | 'invalid-response' | 'remote-error';
26364
+ declare class ProviderError extends Error {
26365
+ readonly provider: ProviderId;
26366
+ readonly operation: string;
26367
+ readonly code: ProviderErrorCode;
26368
+ readonly status: number | null;
26369
+ readonly retryable: boolean;
26370
+ constructor(input: {
26371
+ provider: ProviderId;
26372
+ operation: string;
26373
+ code: ProviderErrorCode;
26374
+ message: string;
26375
+ status?: number;
26376
+ retryable?: boolean;
26377
+ cause?: unknown;
26378
+ });
26379
+ toJSON(): Record<string, unknown>;
26380
+ }
26381
+ //#endregion
24892
26382
  //#region packages/core/src/providers/router.d.ts
24893
- declare function getKeywordProvider(prefer?: 'cheap' | 'authoritative'): KeywordDataProvider | undefined;
26383
+ declare function getKeywordProvider(prefer?: 'cheap' | 'authoritative', dependencies?: {
26384
+ readConfig?: () => AppConfig;
26385
+ hasDataForSeoCredentials?: () => boolean | Promise<boolean>;
26386
+ }): Promise<KeywordDataProvider | undefined>;
24894
26387
  //#endregion
24895
26388
  //#region packages/core/src/providers/semrush.d.ts
24896
26389
  declare class SemrushProvider implements KeywordDataProvider {
@@ -25167,7 +26660,7 @@ declare const TELEMETRY_TIMEOUT_MS = 2000;
25167
26660
  declare const TELEMETRY_EVENTS: readonly ["first_run", "setup_complete", "audit_start", "audit_complete", "audit_failed", "first_audit_complete", "active_d1", "active_d7", "active_d30"];
25168
26661
  declare const TELEMETRY_AGENTS: readonly ["claude-code", "cursor", "codex", "cli", "unknown"];
25169
26662
  declare const TELEMETRY_ERROR_CATEGORIES: readonly ["auth", "crawl_timeout", "network", "config", "unknown"];
25170
- declare const TELEMETRY_REPORTS: readonly ["affected-urls", "agent-readiness", "ai-readiness", "ai-referrals", "ai-search-scorecard", "audit-page", "audit-urls", "bing-webmaster-overview", "cannibalisation", "community-intent", "compare-crawls", "content-optimization", "crawl-diff", "site-crawl", "ctr-underperformers", "decaying-pages", "setup-check", "entity-readiness", "explain-crawl-issue", "geo-gaps", "crawl-report", "index-coverage", "index-coverage-plan", "index-monitor", "index-watch", "internal-links", "link-evidence", "server-log-analysis", "link-recovery", "crawl-history", "crawler-rules", "llms-txt-audit", "generate-llms-txt", "measure-change", "monthly-report", "okf-build", "okf-validate", "page-opportunities", "performance-audit", "pseo-audit", "query-clusters", "quick-wins", "redirect-trace", "narrative-report", "second-page", "segment-impact", "striking-distance", "seo-to-ai-query", "top-fixes", "traffic-anomaly", "update-correlation", "search-performance-overview", "monthly-action-plan", "refresh-priorities", "technical-watch", "update-postmortem"];
26663
+ declare const TELEMETRY_REPORTS: readonly ["affected-urls", "agent-readiness", "ai-readiness", "ai-referrals", "ai-search-scorecard", "audit-page", "audit-urls", "bing-webmaster-overview", "cannibalisation", "community-intent", "compare-crawls", "content-optimization", "crawl-diff", "site-crawl", "ctr-underperformers", "decaying-pages", "setup-check", "entity-readiness", "explain-crawl-issue", "geo-gaps", "crawl-report", "index-coverage", "index-coverage-plan", "index-monitor", "index-watch", "internal-links", "keyword-metrics", "keyword-opportunities", "keyword-research", "link-evidence", "server-log-analysis", "link-recovery", "crawl-history", "crawler-rules", "llms-txt-audit", "generate-llms-txt", "measure-change", "monthly-report", "okf-build", "okf-validate", "page-opportunities", "performance-audit", "pseo-audit", "pseo-opportunities", "query-clusters", "quick-wins", "redirect-trace", "narrative-report", "second-page", "segment-impact", "serp-results", "striking-distance", "seo-to-ai-query", "top-fixes", "traffic-anomaly", "update-correlation", "search-performance-overview", "monthly-action-plan", "refresh-priorities", "technical-watch", "update-postmortem"];
25171
26664
  type TelemetryEvent = (typeof TELEMETRY_EVENTS)[number];
25172
26665
  type TelemetryAgent = (typeof TELEMETRY_AGENTS)[number];
25173
26666
  type TelemetryErrorCategory = (typeof TELEMETRY_ERROR_CATEGORIES)[number];
@@ -25242,5 +26735,5 @@ declare function isoDate(daysAgo?: number): string;
25242
26735
  //#region packages/core/src/version.d.ts
25243
26736
  declare const SEO_VERSION: string;
25244
26737
  //#endregion
25245
- export { AI_REFERRAL_SOURCES, AI_REFERRAL_SOURCES_VERSION, AI_SEARCH_SCORECARD_METHODOLOGY_ID, AI_SEARCH_SCORECARD_METHODOLOGY_VERSION, AUDIT_PAGE_RULE_IDS, AUTOMATIC_BASELINE_SITE_RETENTION, AUTOMATIC_BASELINE_TOTAL_RETENTION, AccessBlockEvidence, AffectedUrl, AffectedUrlFilters, AffectedUrlResult, AffectedUrlSelection, type AgentDiscoveryDataStatus, type AgentEndpointDiscovery, type AgentEndpointObservation, type AgentLinkHeaderEntry, type AgentLinkHeaderObservation, AgentReadinessCheck, AgentReadinessCheckStatus, type AgentReadinessProfile, AgentReadinessReport, AgentReadinessSection, type AgentRepresentationResponse, type AgentSkillObservation, AiReadinessReport, type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, AiSearchScorecard, AnalyticsMetricDelta, AnalyticsTestMetrics, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, AppConfig, AuditPageDependencies, AuditPageReport, AuthorizedGoogleClient, BING_API_KEY_ENV, BING_API_KEY_SECRET, BROWSER_USER_AGENT, BacklinkProvider, BingCrawlRow, BingDimensionRow, BingLinkCountRow, BingLinkPage, BingRows, BingTrafficRow, BingUrlLinkRow, BingWebmasterClient, BingWebmasterCredentials, BingWebmasterSite, BoundedSitemapInventory, BrandTermCandidate, CANNIBAL_MAXIMUM_DOMINANT_SHARE, CANNIBAL_MINIMUM_PAGE_SHARE, CRAWL_REPORT_STORAGE_VERSION, CRAWL_RUN_RETENTION, CRAWL_SKIP_REASONS, CTR_DEFAULT_LIMIT, CTR_DEFAULT_MIN_IMPRESSIONS, CTR_MAX_LIMIT, CTR_MAX_MIN_IMPRESSIONS, CacheStats, type CannibalAnalysis, CannibalDependencies, type CannibalItem, type CannibalPage, type CannibalReport, CannibalReportInput, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, ChangeMeasurement, ChangeMeasurementAttempt, ChangeRow, ChangeScope, ClientProfile, ClientProfileInput, CollectedLinkEvidence, CommunityIntent, CommunityIntentClassification, CommunityIntentReport, ContentExtractionDiagnostics, ContentExtractor, ContentGroup, ContentGroupDimension, ContentGroupMatchType, ContentGroupRow, ContentOptimizationIntent, ContentOptimizationReport, CoverageField, CrawlAccessSummary, type CrawlAgentDiscovery, CrawlAiBotAccess, CrawlAiResourceSignal, CrawlAiSignals, CrawlAnalyticsDataSource, CrawlConfig, CrawlConfigInput, CrawlDataSourceStatus, CrawlDataSourceWindow, CrawlDiffItem, CrawlDiffRecommendation, CrawlDiffReport, CrawlExternalLinkVerification, CrawlFetchRateConfig, CrawlImplementationQueueInput, CrawlImplementationQueueItem, CrawlImplementationQueueOutput, CrawlIssue, CrawlIssueGroup, CrawlLinkGraph, CrawlMode, CrawlOneResult, CrawlOutputFormat, CrawlPageRow, CrawlPageSnapshot, CrawlReport, CrawlReportDataSources, CrawlReportMeta, CrawlReportSaveOptions, CrawlReportStorageEnvelope, CrawlReportStoreAdapter, CrawlReportSummary, CrawlRequestObservation, CrawlResponseObservation, CrawlRun, CrawlRunRow, CrawlRunStats, CrawlSearchDataSource, type CrawlSiteChecks, type CrawlSiteDependencies, CrawlSitemapDiscovery, CrawlSkipImpact, CrawlSkipReason, CrawlSkipReasonCount, CrawlSkippedUrlsByImpact, CrawlSnapshotDiffReport, CrawlSnapshotIssueChange, CrawlSnapshotPageChange, CrawlStatusEvent, CrawlStatusHandler, CrawlStatusPhase, CrawlStrategy, CrawlerCategory, CrawlerIdentity, CrawlerPathSummary, CrawlerSummary, CredentialsProvider, CreditUsage, CsvFile, CsvRow, CsvValue, type CtrUnderperformer, CtrUnderperformerDependencies, type CtrUnderperformerSelection, DataForSeoProvider, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, DecayingDependencies, DecayingReportInput, DiagnosePropertyDependencies, DiagnosePropertyReport, DiagnosisDataStatus, DiagnosisPriority, DoctorCheck, DueIndexSelection, DueIndexUrl, EffectiveSnippetControl, EntityReadinessCheck, EntityReadinessReport, ExternalLinkCheck, ExternalLinkCheckAttempt, ExternalLinkCheckState, ExtractedLinkLocation, ExtractedPage, FetchPageDependencies, type FetchPageOptions, type FetchRateControls, GSC_FINAL_DATA_LAG_DAYS, GSC_TIME_ZONE, Ga4AccountSummary, Ga4DataStream, Ga4PropertySummary, Ga4ReportRequest, Ga4RunReportResult, Ga4WebStreamCandidate, Ga4WebStreamMatch, GenerateLlmsTxtOptions, GeneratedLlmsTxt, GeoGap, GeoGapFilters, GeoGapResult, type GoogleAccessTokenClient, GoogleRichResultAssessment, GoogleRichResultAssessmentSelection, GoogleRichResultAssessmentStatus, GscRow, HttpProfile, INDEXNOW_ENDPOINT, INDEXNOW_KEYS_SECRET, INDEXNOW_KEY_ENV, INDEXNOW_MAX_URLS, INDEX_WATCH_ATTEMPT_RETENTION, INTERNAL_LINK_LEXICAL_TARGET_LIMIT, INTERNAL_LINK_MATCH_EVIDENCE_LIMIT, IndexCoverageBoundedSection, IndexCoverageCandidateItem, IndexCoverageControlReason, IndexCoverageControlledItem, IndexCoverageCrawlInput, IndexCoverageInput, IndexCoverageInventoryItem, IndexCoveragePlan, IndexCoveragePlanInput, IndexCoverageReport, IndexCoverageReportDependencies, IndexCoverageReportInput, IndexCoverageSearchConsoleInput, IndexCoverageSearchVisibilityItem, IndexCoverageSignalsReport, IndexCoverageSitemapInput, IndexCoverageSourceCompleteness, IndexCoverageSourceEvidence, IndexCoverageSourceMembership, IndexCoverageTemplateReview, IndexMonitorPropertyRun, IndexMonitorReport, IndexNowKey, IndexNowKeySource, IndexNowSubmission, IndexPlanProperty, IndexPlanSuggestion, IndexPropertyUrlAllocation, IndexWatchChange, IndexWatchChangeKind, IndexWatchDependencies, IndexWatchIssueCode, IndexWatchItem, IndexWatchPrevious, IndexWatchReport, IndexWatchRow, IndexWatchStore, type InternalLinkCandidate, type InternalLinkMatchKind, type InternalLinkOpportunity, type InternalLinkQueryMatch, InternalLinksAnalysis, InternalLinksAnalysisInput, InternalLinksDependencies, InternalLinksInput, type InternalLinksReport, type InternalLinksSelection, type InternalLinksWarning, type JavaScriptRenderingInput, type JavaScriptRenderingMode, JsonFileStorageAdapter, KeywordDataProvider, KeywordOverview, KeywordRow, LINK_RECOVER_RUN_RETENTION, LOG_MAX_AGE_MS, LOG_MAX_FILE_BYTES, LOG_MAX_TOTAL_BYTES, LatestCrawlSummaryRow, LighthouseFailureCode, LinkEvidenceProvenance, LinkEvidenceProvider, LinkEvidenceRow, LinkRecoverItem, LinkRecoverReport, LinkRecoverSummary, LinkTargetCount, LlmsAuditIssue, LlmsAuditReport, type LlmsTxtLinkObservation, LocalCredentialsProvider, LogPruneResult, MAX_CRAWL_CONCURRENCY, MAX_CRAWL_DEPTH, MAX_CRAWL_PAGES, MAX_CRAWL_TIMEOUT_MS, type MarkdownAlternateObservation, type MarkdownQualityObservation, MeasureChangeDependencies, MetricDelta, MonitoringStatusCheck, MonitoringStatusReport, NarrativeSection, type OAuthClientConfig, OKF_DEFAULT_CONCEPTS, OKF_MAX_CONCEPTS, OkfBundle, OkfExplainReport, OkfFile, OkfValidationIssue, OkfValidationReport, OpportunityBenchmarkRow, PageFetchDiagnostics, PageFetchResult, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, PageOpportunityInput, type PageOpportunityItem, PageOpportunityReport, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, PageSearchMetrics, PageTopQuery, PartialDiagnosisReason, PerformanceAuditReport, PerformanceFieldData, PerformanceFieldMetric, PerformanceMetric, PerformanceRating, PositionBenchmark, Presentation, PresentationChart, PresentationScalar, PresentationTable, PresentationTableColumn, PriorityQueueItem, ProgressReporter, ProviderOpts, ProviderResult, ProviderSecret, ProviderSecretSource, PseoAuditInput, type PseoAuditReport, type PseoAuditTemplate, type PseoCrawlSample, type PseoCrawlTechnicalStatus, PseoDependencies, type PseoEntityFit, type PseoIndexStatus, type PseoInspectionSample, type PseoPageRow, type PseoQueryCoverage, type PseoQueryPageRow, PseoTemplateCluster, type PseoTemplateMetrics, PseoTemplateShape, QueryCluster, type QueryClusterPage, type QueryClusterRow, QueryContentClassification, QueryContentCoverage, QueryContentSignal, QueryFieldCoverage, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, QuickWinsDependencies, QuickWinsInput, REPORT_BASELINE_MAX_AGE_MS, REPORT_BASELINE_MAX_DEPTH, REPORT_BASELINE_MAX_PAGES, RawLinkEvidenceRow, ReadinessCheck, ReadinessSection, ReadinessStatus, Recommendation, RedirectTraceIssue, RedirectTraceReport, RedirectTraceStep, RenderingDocumentDifference, RenderingDocumentField, RenderingDocumentSnapshot, ReportHtmlInput, ReportHtmlSection, ReportHtmlView, ReportNarrative, ResolveTechnicalBaselineInput, ResponseSizeLimitError, RobotsDirective, RuleCategory, RuleId, RuleInfo, RuleRecommendation, RuleSeverity, SCORECARD_CHECK_WEIGHTS, SCORECARD_STATUS_CREDIT, SEO_CRAWLER_IDENTITY, SEO_CRAWLER_TOKEN, SEO_CRAWLER_USER_AGENT, SEO_VERSION, SERP_TITLE_REFERENCE_WIDTH_PX, SERP_TITLE_WIDTH_PROFILE, ScorecardBand, ScorecardCheck, ScorecardCheckId, ScorecardObservation, ScorecardStatus, SearchAnalyticsRequest, SearchDateWindow, SearchPageBatch, SearchStatusIncident, SearchUpdate, type SecondPageAnalysis, SecondPageDependencies, SecondPageInput, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, type SecondPageSelection, type SegmentDimension, SegmentImpactDependencies, SegmentImpactInput, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SemrushProvider, SeoChange, SeoCliPathOptions, SeoCliPaths, SeoError, SeoErrorCode, SeoToAiQueryReport, SerpProvider, ServerLogEvidence, ServerLogFormat, ServerLogRecord, ServiceAccountAccessTokenClient, ServiceAccountConfig, ServiceAccountStatus, SessionLedger, SitemapDocument, SitemapFetchResult, SitemapInvalidLoc, SitemapLastmodObservation, SkippedDiagnosisSection, SnippetControlEvidence, StatusBreakdown, StorageAdapter, StoredTokens, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, StrikingDistanceDependencies, StrikingDistanceInput, StrikingDistanceItem, StrikingDistanceReport, TELEMETRY_AGENTS, TELEMETRY_ENDPOINT, TELEMETRY_ERROR_CATEGORIES, TELEMETRY_EVENTS, TELEMETRY_NOTICE, TELEMETRY_REPORTS, TELEMETRY_SCHEMA_VERSION, TELEMETRY_TIMEOUT_MS, TechnicalBaseline, TechnicalBaselineDependencies, TechnicalBaselineStatus, TelemetryAgent, TelemetryDisableReason, TelemetryErrorCategory, TelemetryEvent, TelemetryOptions, TelemetryPayload, TelemetryReport, TelemetryState, TelemetryStatus, TemplateAwareReport, TestMetrics, TitleWidthEstimate, TokenStorageMode, TokenStorageStatus, TopFix, TopFixFilters, TrafficAnomaly, TrafficAnomalyCoverage, TrafficAnomalyReport, type UnmatchedSegment, UpdateConfounder, UpdateCorrelationReport, UrlInspectionRequest, UrlInspectionResult, WorkflowAction, WorkflowReport, WorkflowStep, addStatus, affectedUrls, agentReadiness, aiPromptsForQuery, aiReadiness, aiReferralSourceForValue, aiReferralsReport, aiSearchScorecard, allocateIndexUrlsToProperties, analyticsConnectionsSchema, analyzeAiReferralRows, analyzeBingCrawl, analyzeBingDimensions, analyzeBingTraffic, analyzeCannibalRows, analyzeCtrUnderperformersFromRows, analyzeDecay, analyzeIndexCoverageSignals, analyzeInternalLinksFromRows, analyzePageOpportunitiesFromRows, analyzeQueryClustersFromRows, analyzeQuickWinsFromRows, analyzeSecondPageRows, analyzeSegmentRows, analyzeStrikingDistanceRows, analyzeTrafficAnomalyRows, assertCrawlConfigLimits, assertUrlMatchesGscProperty, attachCrawlRecommendations, auditCrawlPages, auditCrawlRequests, auditLlmsTxt, auditPage, authStatus, bingAnalysisDefaults, bingWebmasterOverview, bingWebmasterSiteUrl, boundedSitemapInventory, buildOkfBundle, buildPseoAuditReportFromRows, buildTelemetryPayload, cannibalReport, changeMeasurementCsvRows, checkDatabaseReadiness, classifyCommunityIntent, classifyCrawler, clearCache, clientProfileSchema, clusterPseoTemplates, clusterQueryRows, collectAgentDiscovery, collectBingLinkEvidence, combineRobotsValues, communityIntentReport, compareCrawlPages, compareCrawlReports, compareLinkEvidence, compareSegmentRows, configSchema, contentCoverageRecommendation, contentCoverageType, contentOptimizationFromPageOpportunities, contentOptimizationReport, countLabel, crawlConfigHash, crawlConfigSchema, crawlDefinitionId, crawlDiff, crawlFixToQueueItem, crawlImplementationQueueWorkflow, crawlIssueGroupSchema, crawlIssueSchema, crawlOne, crawlPageSnapshotSchema, crawlReportSchema, crawlReportStore, crawlReportSummarySchema, crawlRequestObservationSchema, crawlRunId, crawlSite, crawlSkipImpact, crawlSkipReasonCountsFromRecord, crawlStatusOnly, crawlTopFixSchema, crawlerJsonSchemas, crawlerRuleCategorySchema, crawlerRuleIdSchema, crawlerRuleInfoSchema, crawlerRuleRecommendationSchema, crawlerRuleSeveritySchema, crawlerSchemas, createAuthorizedClient, createBingWebmasterClient, createContentGroup, createCrawlReport, createCtrBenchmarkContext, createGoogleAccessTokenClient, createIndexNowKey, createIndexNowKeyRecord, createLogger, createPageRenderer, ctrUnderperformersReport, decayClusterDrafts, decayComparisonRange, decayingReport, deleteChange, deleteClient, deleteContentGroup, deleteCrawlReport, deleteProviderSecret, deleteTokens, deriveBrandTerms, detectBrandTerms, detectTelemetryAgent, diagnoseCsvFiles, diagnoseProperty, diagnosePropertyWorkflow, effectiveRobotsDirectives, effectiveSnippetControl, emptyStatusBreakdown, ensureSeoCliDirs, entityReadiness, estimateSerpTitleWidth, expectedCtrForPosition, explainOkfValidation, explainRule, fetchCruxFieldData, fetchPage, fetchPageStatus, fetchSearchStatusIncidents, fetchSitemapUrls, fetchText, fileSize, finalGscDateRange, findOverlappingSearchUpdates, formatRelativeExpiry, ga4MatchReason, ga4PropertyIdFromName, ga4ReportQualityWarnings, ga4RequestCanUseCache, ga4RowsToObjects, generateLlmsTxt, geoGaps, geoGapsReport, getAuthModeStatus, getCacheStats, getChange, getClient, getClientConfig, getContentGroup, getDb, getKeywordProvider, getPreviousRun, getPrivacySnapshot, getRepeatedLinkRecoverUrls, getRunPages, getSeoCliPaths, getServiceAccountConfig, getServiceAccountStatus, getTelemetryStatus, getTokenStorageStatus, googleAnalyticsPropertyId, groupCrawlIssues, hasMetaRobotsDirective, hasRule, hasXRobotsDirective, hashKey, importLinkEvidence, importServerLog, indexCoveragePlan, indexCoverageSignals, indexMonitor, indexWatch, inferPseoTemplate, inferTemplateMovement, initializeTelemetry, insertCrawlRun, insertLinkRecoverRun, inspectUrl, internalLinksReport, interpretUpdateCorrelation, isBrandQuery, isCompatibleTechnicalBaseline, isCurrentTechnicalBaseline, isEntityEvidenceSchemaType, isSiteIdentitySchemaType, isSkippableReportError, isTelemetryCi, isTelemetryReport, isoDate, isoWeek, latestCrawlReport, latestCrawlSummaries, latestFinalGscDate, latestIndexWatchSummary, latestLinkRecoverSummary, linkEntries, linkEvidenceKey, linkEvidenceReport, linkRecover, linkRecoverRecommendation, listChanges, listClients, listContentGroups, listCrawlReports, listGa4AccountSummaries, listGa4DataStreams, listIndexNowKeys, listRules, listSearchUpdates, listSites, loadCrawlReport, localCredentialsProvider, loginWithLoopback, makeRunId, matchGa4WebStreams, measureChange, measureCoverage, metaRobotsDirectives, migrateLegacyMacConfig, missingOAuthClientMessage, missingSharedClientLoginMessage, monitoringStatus, monthlyReport, monthlyReportWorkflow, narrativeCsvFiles, normalizeCrawlConfig, normalizeCrawlSkipReasonCounts, normalizeForCoverage, normalizeHttpUrl, normalizeJavaScriptRenderingMode, normalizeLinkEvidenceRow, normalizeLoadedCrawlReport, noteCacheWrite, okfConceptLimit, pageEvidenceRecommendation, pageOpportunitiesReport, parseCombinedLogLine, parseIndexNowSite, parseJsonLogLine, parseOlderThan, parsePseoPath, performanceAudit, performanceReportIsCacheable, planDueIndexUrls, planIndexCoverageFromUrls, plural, propertyMatchesUrl, providerPreferenceSchema, pruneIndexWatchSnapshots, pruneLogs, pseoAuditOptions, pseoAuditReport, pseoCsvFiles, pseoIndexStatus, pseoPresentation, publicHttpFetch, queryClusterReport, queryClusterTokens, queryContentCoverageFromPage, queryContentFieldsFromPage, queryFieldCoverage, queryOpportunityRecommendation, queryPageMetrics, queryPageTopQuery, queryPagesMetrics, queryPagesMetricsBatch, queryPagesTopQueries, queryPagesTopQueriesBatch, querySearchAnalytics, quickWinsCsvRows, quickWinsReport, readBoundedResponseText, readConfig, readOauthClient, readProviderSecret, readTokens, recommendCrawlDiffItem, recommendationForRule, recordChange, redirectTrace, refreshAuthToken, refreshPrioritiesCsvFiles, refreshPrioritiesWorkflow, removeIndexNowKey, renderCrawlCsv, renderCrawlHtml, renderCrawlJunit, renderCrawlMarkdownTickets, renderCrawlPagesCsv, renderCrawlPretty, renderCsv, renderPresentationTablesMarkdown, renderPseoMarkdown, renderReportHtml, renderWorkflowMarkdown, reportNarrative, reportPresentation, requestHeaders, resolveIndexNowKey, resolveSegmentRanges, resolveSeoCliPaths, resolveTechnicalBaseline, reviewObservations, roundedPosition, runDoctor, runGa4Report, safeError, saveClient, saveCrawlReport, saveIndexNowKey, secondPage, segmentComparisonRange, segmentImpact, segmentRangeDays, selectAffectedUrls, selectDueIndexUrls, seoErrorEnvelope, seoToAiQueryReport, serverLogReport, sessionSourceInListFilter, setClientBingSite, setDefaultClient, setTelemetryEnabled, setTokenStorageMode, shiftIsoDate, shouldExcludeBrandQuery, siteSchema, sqliteCrawlReportStore, strikingDistance, submitIndexNow, summarizeCrawlReport, pageTechnicalSignals as technicalPageSignals, technicalWatchWorkflow, telemetryErrorCategory, templateForUrl, toSeoError, tokenSchema, topCrawlRecommendations, topFixes, trackTelemetryReportComplete, trackTelemetryReportFailed, trackTelemetryReportStart, trackTelemetrySetupComplete, trafficAnomaly, unavailableSegmentImpactReport, unicodeTokens, updateCorrelation, updatePostmortemCsvFiles, updatePostmortemWorkflow, validateIndexNowKey, validateIndexNowKeyRecord, validateOkfFiles, verifyIndexNowKey, verifyQueryContent, workflowPresentation, writeConfig, writeOauthClient, writeProviderSecret, writeTokens, xRobotsDirectives };
26738
+ export { AI_REFERRAL_SOURCES, AI_REFERRAL_SOURCES_VERSION, AI_SEARCH_SCORECARD_METHODOLOGY_ID, AI_SEARCH_SCORECARD_METHODOLOGY_VERSION, AUDIT_PAGE_RULE_IDS, AUTOMATIC_BASELINE_SITE_RETENTION, AUTOMATIC_BASELINE_TOTAL_RETENTION, AccessBlockEvidence, AffectedUrl, AffectedUrlFilters, AffectedUrlResult, AffectedUrlSelection, type AgentDiscoveryDataStatus, type AgentEndpointDiscovery, type AgentEndpointObservation, type AgentLinkHeaderEntry, type AgentLinkHeaderObservation, AgentReadinessCheck, AgentReadinessCheckStatus, type AgentReadinessProfile, AgentReadinessReport, AgentReadinessSection, type AgentRepresentationResponse, type AgentSkillObservation, AiReadinessReport, type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, AiSearchScorecard, AnalyticsMetricDelta, AnalyticsTestMetrics, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, AppConfig, AuditPageDependencies, AuditPageReport, AuthorizedGoogleClient, BING_API_KEY_ENV, BING_API_KEY_SECRET, BROWSER_USER_AGENT, BacklinkProvider, BingCrawlRow, BingDimensionRow, BingLinkCountRow, BingLinkPage, BingRows, BingTrafficRow, BingUrlLinkRow, BingWebmasterClient, BingWebmasterCredentials, BingWebmasterSite, BoundedSecondPageItem, BoundedSitemapInventory, BrandTermCandidate, CANNIBAL_MAXIMUM_DOMINANT_SHARE, CANNIBAL_MINIMUM_PAGE_SHARE, CRAWL_REPORT_STORAGE_VERSION, CRAWL_RUN_RETENTION, CRAWL_SKIP_REASONS, CTR_DEFAULT_LIMIT, CTR_DEFAULT_MIN_IMPRESSIONS, CTR_MAX_LIMIT, CTR_MAX_MIN_IMPRESSIONS, CacheStats, type CannibalAnalysis, CannibalDependencies, type CannibalItem, type CannibalPage, type CannibalReport, CannibalReportInput, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, ChangeMeasurement, ChangeMeasurementAttempt, ChangeRow, ChangeScope, ClientProfile, ClientProfileInput, CollectedLinkEvidence, CommunityIntent, CommunityIntentClassification, CommunityIntentReport, ContentExtractionDiagnostics, ContentExtractor, ContentGroup, ContentGroupDimension, ContentGroupMatchType, ContentGroupRow, ContentOptimizationIntent, ContentOptimizationReport, CoverageField, CrawlAccessSummary, type CrawlAgentDiscovery, CrawlAiBotAccess, CrawlAiResourceSignal, CrawlAiSignals, CrawlAnalyticsDataSource, CrawlConfig, CrawlConfigInput, CrawlDataSourceStatus, CrawlDataSourceWindow, CrawlDiffItem, CrawlDiffRecommendation, CrawlDiffReport, CrawlExternalLinkVerification, CrawlFetchRateConfig, CrawlImplementationQueueInput, CrawlImplementationQueueItem, CrawlImplementationQueueOutput, CrawlIssue, CrawlIssueGroup, CrawlLinkGraph, CrawlMode, CrawlOneResult, CrawlOutputFormat, CrawlPageRow, CrawlPageSnapshot, CrawlReport, CrawlReportDataSources, CrawlReportMeta, CrawlReportSaveOptions, CrawlReportStorageEnvelope, CrawlReportStoreAdapter, CrawlReportSummary, CrawlRequestObservation, CrawlResponseObservation, CrawlRun, CrawlRunRow, CrawlRunStats, CrawlSearchDataSource, type CrawlSiteChecks, type CrawlSiteDependencies, CrawlSitemapDiscovery, CrawlSkipImpact, CrawlSkipReason, CrawlSkipReasonCount, CrawlSkippedUrlsByImpact, CrawlSnapshotDiffReport, CrawlSnapshotIssueChange, CrawlSnapshotPageChange, CrawlStatusEvent, CrawlStatusHandler, CrawlStatusPhase, CrawlStrategy, CrawlerCategory, CrawlerIdentity, CrawlerPathSummary, CrawlerSummary, CredentialsProvider, CreditUsage, CsvFile, CsvRow, CsvValue, type CtrUnderperformer, CtrUnderperformerDependencies, type CtrUnderperformerSelection, DATAFORSEO_CREDENTIAL_SECRET, DATAFORSEO_LOGIN_ENV, DATAFORSEO_PASSWORD_ENV, DEFAULT_PROVIDER_SPEND_LIMITS, type DataForSeoAccountSnapshot, DataForSeoClient, type DataForSeoClientOptions, DataForSeoCredentials, DataForSeoKeywordDiscoveryProvider, DataForSeoKeywordDiscoveryProviderOptions, type DataForSeoKeywordDiscoveryRequest, type DataForSeoKeywordDiscoverySnapshot, DataForSeoKeywordMetricsProvider, DataForSeoKeywordMetricsProviderOptions, type DataForSeoKeywordOverviewRequest, type DataForSeoKeywordOverviewSnapshot, DataForSeoProvider, type DataForSeoSerpRequest, type DataForSeoSerpSnapshot, DataForSeoSerpSnapshotProvider, DataForSeoSerpSnapshotProviderOptions, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, DecayingDependencies, DecayingReportInput, DiagnosePropertyDependencies, DiagnosePropertyReport, DiagnosisDataStatus, DiagnosisPriority, DoctorCheck, DueIndexSelection, DueIndexUrl, EffectiveSnippetControl, EntityReadinessCheck, EntityReadinessReport, ExternalLinkCheck, ExternalLinkCheckAttempt, ExternalLinkCheckState, ExtractedLinkLocation, ExtractedPage, FetchPageDependencies, type FetchPageOptions, type FetchRateControls, GSC_FINAL_DATA_LAG_DAYS, GSC_TIME_ZONE, Ga4AccountSummary, Ga4DataStream, Ga4PropertySummary, Ga4ReportRequest, Ga4RunReportResult, Ga4WebStreamCandidate, Ga4WebStreamMatch, GenerateLlmsTxtOptions, GeneratedLlmsTxt, GeoGap, GeoGapFilters, GeoGapResult, type GoogleAccessTokenClient, GoogleRichResultAssessment, GoogleRichResultAssessmentSelection, GoogleRichResultAssessmentStatus, GscRow, HttpProfile, INDEXNOW_ENDPOINT, INDEXNOW_KEYS_SECRET, INDEXNOW_KEY_ENV, INDEXNOW_MAX_URLS, INDEX_WATCH_ATTEMPT_RETENTION, INTERNAL_LINK_LEXICAL_TARGET_LIMIT, INTERNAL_LINK_MATCH_EVIDENCE_LIMIT, IndexCoverageBoundedSection, IndexCoverageCandidateItem, IndexCoverageControlReason, IndexCoverageControlledItem, IndexCoverageCrawlInput, IndexCoverageInput, IndexCoverageInventoryItem, IndexCoveragePlan, IndexCoveragePlanInput, IndexCoverageReport, IndexCoverageReportDependencies, IndexCoverageReportInput, IndexCoverageSearchConsoleInput, IndexCoverageSearchVisibilityItem, IndexCoverageSignalsReport, IndexCoverageSitemapInput, IndexCoverageSourceCompleteness, IndexCoverageSourceEvidence, IndexCoverageSourceMembership, IndexCoverageTemplateReview, IndexMonitorPropertyRun, IndexMonitorReport, IndexNowKey, IndexNowKeySource, IndexNowSubmission, IndexPlanProperty, IndexPlanSuggestion, IndexPropertyUrlAllocation, IndexWatchChange, IndexWatchChangeKind, IndexWatchDependencies, IndexWatchIssueCode, IndexWatchItem, IndexWatchPrevious, IndexWatchReport, IndexWatchRow, IndexWatchStore, type InternalLinkCandidate, type InternalLinkMatchKind, type InternalLinkOpportunity, type InternalLinkQueryMatch, InternalLinksAnalysis, InternalLinksAnalysisInput, InternalLinksDependencies, InternalLinksInput, type InternalLinksReport, type InternalLinksSelection, type InternalLinksWarning, type JavaScriptRenderingInput, type JavaScriptRenderingMode, JsonFileStorageAdapter, KeywordDataProvider, KeywordDiscoveryProvider, KeywordDiscoveryRequest, KeywordDiscoverySource, KeywordIdea, KeywordIdeaSource, KeywordMetric, KeywordMetricAnalysis, KeywordMetricFinding, KeywordMetricsProvider, KeywordMetricsReport, KeywordMetricsReportDependencies, KeywordMetricsRequest, KeywordMonthlySearch, KeywordOpportunitiesDependencies, KeywordOpportunitiesInput, KeywordOpportunitiesReport, KeywordOpportunityCluster, KeywordOpportunityCombined, KeywordOpportunityDataSourcePrompt, KeywordOpportunityExternal, KeywordOpportunityFinding, KeywordOpportunityFirstParty, KeywordOpportunitySource, KeywordOverview, KeywordResearchAnalysis, KeywordResearchFinding, KeywordResearchReport, KeywordResearchReportDependencies, KeywordRow, KeywordTrend, LINK_RECOVER_RUN_RETENTION, LOG_MAX_AGE_MS, LOG_MAX_FILE_BYTES, LOG_MAX_TOTAL_BYTES, LatestCrawlSummaryRow, LighthouseFailureCode, LinkEvidenceProvenance, LinkEvidenceProvider, LinkEvidenceRow, LinkRecoverItem, LinkRecoverReport, LinkRecoverSummary, LinkTargetCount, LlmsAuditIssue, LlmsAuditReport, type LlmsTxtLinkObservation, LocalCredentialsProvider, LogPruneResult, MAX_CRAWL_CONCURRENCY, MAX_CRAWL_DEPTH, MAX_CRAWL_PAGES, MAX_CRAWL_TIMEOUT_MS, type MarkdownAlternateObservation, type MarkdownQualityObservation, MeasureChangeDependencies, MetricDelta, MonitoringStatusCheck, MonitoringStatusReport, NarrativeSection, type OAuthClientConfig, OKF_DEFAULT_CONCEPTS, OKF_MAX_CONCEPTS, OkfBundle, OkfExplainReport, OkfFile, OkfValidationIssue, OkfValidationReport, OpportunityBenchmarkRow, PROVIDER_SPEND_MAX_BYTES, PROVIDER_SPEND_MAX_ROWS, PROVIDER_SPEND_RETENTION_DAYS, PageFetchDiagnostics, PageFetchResult, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, PageOpportunityInput, type PageOpportunityItem, PageOpportunityReport, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, PageSearchMetrics, PageTopQuery, PartialDiagnosisReason, PerformanceAuditReport, PerformanceFieldData, PerformanceFieldMetric, PerformanceMetric, PerformanceRating, PositionBenchmark, Presentation, PresentationChart, PresentationScalar, PresentationTable, PresentationTableColumn, PriorityQueueItem, ProgressReporter, ProviderAdapter, ProviderCacheEvidence, ProviderCandidate, ProviderCapability, ProviderCapabilitySupport, ProviderCostEvidence, ProviderCoverage, ProviderError, ProviderErrorCode, ProviderEvidence, ProviderFetch, ProviderId, ProviderMarketSupport, ProviderOpts, ProviderRequestContext, ProviderRequestEvidence, ProviderRequestInput, ProviderResolution, ProviderResult, ProviderSecret, ProviderSecretSource, ProviderSpendFinalization, ProviderSpendLimits, ProviderSpendNotice, ProviderSpendReservation, ProviderSpendReservationInput, ProviderSpendState, ProviderSpendSummary, ProviderValue, ProviderWarning, PseoAuditAcquisition, PseoAuditInput, type PseoAuditReport, type PseoAuditTemplate, type PseoCompetitorPattern, type PseoCrawlSample, type PseoCrawlTechnicalStatus, type PseoDataSourceBrief, PseoDependencies, type PseoDiscoveryEvidence, type PseoEntityFit, type PseoExternalAcquisition, type PseoExternalCandidate, type PseoIndexStatus, type PseoInspectionSample, type PseoKnownCost, PseoOpportunitiesDependencies, type PseoOpportunitiesInput, type PseoOpportunitiesReport, type PseoOpportunityCluster, type PseoOpportunityFinding, type PseoOpportunityTemplate, type PseoPageRow, type PseoQueryCoverage, type PseoQueryPageRow, type PseoResearchSeed, type PseoSerpEvidence, type PseoSerpObservation, PseoTemplateCluster, type PseoTemplateMetrics, PseoTemplateShape, QueryCluster, type QueryClusterPage, QueryClusterReport, type QueryClusterRow, QueryClusterSourceRow, QueryContentClassification, QueryContentCoverage, QueryContentSignal, QueryFieldCoverage, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, QuickWinsDependencies, QuickWinsInput, QuickWinsSection, REPORT_BASELINE_MAX_AGE_MS, REPORT_BASELINE_MAX_DEPTH, REPORT_BASELINE_MAX_PAGES, RawLinkEvidenceRow, ReadinessCheck, ReadinessSection, ReadinessStatus, Recommendation, RedirectTraceIssue, RedirectTraceReport, RedirectTraceStep, RenderingDocumentDifference, RenderingDocumentField, RenderingDocumentSnapshot, ReportHtmlInput, ReportHtmlSection, ReportHtmlView, ReportNarrative, ResolveTechnicalBaselineInput, ResponseSizeLimitError, RobotsDirective, RuleCategory, RuleId, RuleInfo, RuleRecommendation, RuleSeverity, SCORECARD_CHECK_WEIGHTS, SCORECARD_STATUS_CREDIT, SEO_CRAWLER_IDENTITY, SEO_CRAWLER_TOKEN, SEO_CRAWLER_USER_AGENT, SEO_VERSION, SERP_TITLE_REFERENCE_WIDTH_PX, SERP_TITLE_WIDTH_PROFILE, ScorecardBand, ScorecardCheck, ScorecardCheckId, ScorecardObservation, ScorecardStatus, SearchAnalyticsRequest, SearchDateWindow, SearchMarket, SearchPageBatch, SearchStatusIncident, SearchUpdate, type SecondPageAnalysis, SecondPageDependencies, SecondPageInput, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, SecondPageSection, type SecondPageSelection, type SegmentDimension, SegmentImpactDependencies, SegmentImpactInput, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SemrushProvider, SeoChange, SeoCliPathOptions, SeoCliPaths, SeoError, SeoErrorCode, SeoToAiQueryReport, SerpDomainSummary, SerpOrganicResult, SerpProvider, SerpResultFinding, SerpResultsReport, SerpResultsReportDependencies, SerpSnapshot, SerpSnapshotProvider, SerpSnapshotRequest, ServerLogEvidence, ServerLogFormat, ServerLogRecord, ServiceAccountAccessTokenClient, ServiceAccountConfig, ServiceAccountStatus, SessionLedger, SitemapDocument, SitemapFetchResult, SitemapInvalidLoc, SitemapLastmodObservation, SkippedDiagnosisSection, SnippetControlEvidence, StatusBreakdown, StorageAdapter, StoredDataForSeoCredentials, StoredTokens, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, StrikingDistanceDependencies, StrikingDistanceInput, StrikingDistanceItem, StrikingDistanceReport, StrikingDistanceSection, TELEMETRY_AGENTS, TELEMETRY_ENDPOINT, TELEMETRY_ERROR_CATEGORIES, TELEMETRY_EVENTS, TELEMETRY_NOTICE, TELEMETRY_REPORTS, TELEMETRY_SCHEMA_VERSION, TELEMETRY_TIMEOUT_MS, TechnicalBaseline, TechnicalBaselineDependencies, TechnicalBaselineStatus, TelemetryAgent, TelemetryDisableReason, TelemetryErrorCategory, TelemetryEvent, TelemetryOptions, TelemetryPayload, TelemetryReport, TelemetryState, TelemetryStatus, TemplateAwareReport, TestMetrics, TitleWidthEstimate, TokenStorageMode, TokenStorageStatus, TopFix, TopFixFilters, TrafficAnomaly, TrafficAnomalyCoverage, TrafficAnomalyReport, type UnmatchedSegment, UpdateConfounder, UpdateCorrelationReport, UrlInspectionRequest, UrlInspectionResult, WorkflowAction, WorkflowReport, WorkflowStep, acquirePseoAuditEvidence, addStatus, affectedUrls, agentReadiness, aiPromptsForQuery, aiReadiness, aiReferralSourceForValue, aiReferralsReport, aiSearchScorecard, allocateIndexUrlsToProperties, analyticsConnectionsSchema, analyzeAiReferralRows, analyzeBingCrawl, analyzeBingDimensions, analyzeBingTraffic, analyzeCannibalRows, analyzeCtrUnderperformersFromRows, analyzeDecay, analyzeIndexCoverageSignals, analyzeInternalLinksFromRows, analyzeKeywordTrend, analyzePageOpportunitiesFromRows, analyzeQueryClustersFromRows, analyzeQuickWinsFromRows, analyzeSecondPageRows, analyzeSegmentRows, analyzeStrikingDistanceRows, analyzeTrafficAnomalyRows, assertCrawlConfigLimits, assertUrlMatchesGscProperty, attachCrawlRecommendations, auditCrawlPages, auditCrawlRequests, auditLlmsTxt, auditPage, authStatus, bingAnalysisDefaults, bingWebmasterOverview, bingWebmasterSiteUrl, boundedSitemapInventory, buildOkfBundle, buildPseoAuditFromAcquisition, buildPseoAuditReportFromRows, buildQueryClusterReportFromRows, buildTelemetryPayload, cannibalReport, changeMeasurementCsvRows, checkDatabaseReadiness, classifyCommunityIntent, classifyCrawler, clearCache, clientProfileSchema, clusterPseoTemplates, clusterQueryRows, collectAgentDiscovery, collectBingLinkEvidence, combineRobotsValues, communityIntentReport, compareCrawlPages, compareCrawlReports, compareLinkEvidence, compareSegmentRows, configSchema, contentCoverageRecommendation, contentCoverageType, contentOptimizationFromPageOpportunities, contentOptimizationReport, countLabel, crawlConfigHash, crawlConfigSchema, crawlDefinitionId, crawlDiff, crawlFixToQueueItem, crawlImplementationQueueWorkflow, crawlIssueGroupSchema, crawlIssueSchema, crawlOne, crawlPageSnapshotSchema, crawlReportSchema, crawlReportStore, crawlReportSummarySchema, crawlRequestObservationSchema, crawlRunId, crawlSite, crawlSkipImpact, crawlSkipReasonCountsFromRecord, crawlStatusOnly, crawlTopFixSchema, crawlerJsonSchemas, crawlerRuleCategorySchema, crawlerRuleIdSchema, crawlerRuleInfoSchema, crawlerRuleRecommendationSchema, crawlerRuleSeveritySchema, crawlerSchemas, createAuthorizedClient, createBingWebmasterClient, createContentGroup, createCrawlReport, createCtrBenchmarkContext, createGoogleAccessTokenClient, createIndexNowKey, createIndexNowKeyRecord, createLogger, createPageRenderer, ctrUnderperformersReport, decayClusterDrafts, decayComparisonRange, decayingReport, deleteChange, deleteClient, deleteContentGroup, deleteCrawlReport, deleteDataForSeoCredentials, deleteProviderSecret, deleteTokens, deriveBrandTerms, detectBrandTerms, detectTelemetryAgent, diagnoseCsvFiles, diagnoseProperty, diagnosePropertyWorkflow, effectiveRobotsDirectives, effectiveSnippetControl, emptyStatusBreakdown, ensurePrivateDatabaseFiles, ensureSeoCliDirs, entityReadiness, estimateSerpTitleWidth, expectedCtrForPosition, explainOkfValidation, explainRule, fetchCruxFieldData, fetchPage, fetchPageStatus, fetchSearchStatusIncidents, fetchSitemapUrls, fetchText, fileSize, finalGscDateRange, finalizeProviderSpend, findOverlappingSearchUpdates, formatRelativeExpiry, ga4MatchReason, ga4PropertyIdFromName, ga4ReportQualityWarnings, ga4RequestCanUseCache, ga4RowsToObjects, generateLlmsTxt, geoGaps, geoGapsReport, getAuthModeStatus, getCacheStats, getChange, getClient, getClientConfig, getContentGroup, getDb, getKeywordProvider, getPreviousRun, getPrivacySnapshot, getProviderSpendLimits, getProviderSpendSummary, getRepeatedLinkRecoverUrls, getRunPages, getSeoCliPaths, getServiceAccountConfig, getServiceAccountStatus, getTelemetryStatus, getTokenStorageStatus, googleAnalyticsPropertyId, groupCrawlIssues, hasMetaRobotsDirective, hasRule, hasXRobotsDirective, hashKey, importLinkEvidence, importServerLog, indexCoveragePlan, indexCoverageSignals, indexMonitor, indexWatch, inferPseoTemplate, inferTemplateMovement, initializeTelemetry, insertCrawlRun, insertLinkRecoverRun, inspectUrl, internalLinksReport, interpretUpdateCorrelation, isBrandQuery, isCompatibleTechnicalBaseline, isCurrentTechnicalBaseline, isEntityEvidenceSchemaType, isSiteIdentitySchemaType, isSkippableReportError, isTelemetryCi, isTelemetryReport, isoDate, isoWeek, keywordDiscoverySourceSchema, keywordMetricsReport, keywordOpportunitiesReport, keywordResearchReport, latestCrawlReport, latestCrawlSummaries, latestFinalGscDate, latestIndexWatchSummary, latestLinkRecoverSummary, linkEntries, linkEvidenceKey, linkEvidenceReport, linkRecover, linkRecoverRecommendation, listChanges, listClients, listContentGroups, listCrawlReports, listGa4AccountSummaries, listGa4DataStreams, listIndexNowKeys, listRules, listSearchUpdates, listSites, loadCrawlReport, localCredentialsProvider, loginWithLoopback, makeRunId, matchGa4WebStreams, measureChange, measureCoverage, metaRobotsDirectives, migrateLegacyMacConfig, missingOAuthClientMessage, missingSharedClientLoginMessage, monitoringStatus, monthlyReport, monthlyReportWorkflow, narrativeCsvFiles, normalizeCrawlConfig, normalizeCrawlSkipReasonCounts, normalizeForCoverage, normalizeHttpUrl, normalizeJavaScriptRenderingMode, normalizeLinkEvidenceRow, normalizeLoadedCrawlReport, noteCacheWrite, observedValue, okfConceptLimit, pageEvidenceRecommendation, pageOpportunitiesReport, parseCombinedLogLine, parseIndexNowSite, parseJsonLogLine, parseOlderThan, parsePseoPath, performanceAudit, performanceReportIsCacheable, planDueIndexUrls, planIndexCoverageFromUrls, plural, propertyMatchesUrl, providerCapabilitySchema, providerIdSchema, providerPreferenceSchema, providerRequestJson, providerRequestText, providerSpendLimitOverridesSchema, pruneIndexWatchSnapshots, pruneLogs, pseoAuditOptions, pseoAuditReport, pseoCsvFiles, pseoIndexStatus, pseoOpportunitiesReport, pseoPresentation, publicHttpFetch, queryClusterReport, queryClusterTokens, queryContentCoverageFromPage, queryContentFieldsFromPage, queryFieldCoverage, queryOpportunityRecommendation, queryPageMetrics, queryPageTopQuery, queryPagesMetrics, queryPagesMetricsBatch, queryPagesTopQueries, queryPagesTopQueriesBatch, querySearchAnalytics, quickWinsCsvRows, quickWinsReport, readBoundedResponseText, readConfig, readDataForSeoCredentials, readOauthClient, readProviderSecret, readTokens, recommendCrawlDiffItem, recommendationForRule, recordChange, redirectTrace, refreshAuthToken, refreshPrioritiesCsvFiles, refreshPrioritiesWorkflow, removeIndexNowKey, renderCrawlCsv, renderCrawlHtml, renderCrawlJunit, renderCrawlMarkdownTickets, renderCrawlPagesCsv, renderCrawlPretty, renderCsv, renderPresentationTablesMarkdown, renderPseoMarkdown, renderReportHtml, renderWorkflowMarkdown, reportNarrative, reportPresentation, requestHeaders, reserveProviderSpend, resolveIndexNowKey, resolveProvider, resolveSegmentRanges, resolveSeoCliPaths, resolveTechnicalBaseline, reviewObservations, roundedPosition, runDoctor, runGa4Report, safeError, saveClient, saveCrawlReport, saveIndexNowKey, searchMarketSchema, secondPage, segmentComparisonRange, segmentImpact, segmentRangeDays, selectAffectedUrls, selectDueIndexUrls, seoErrorEnvelope, seoToAiQueryReport, serpResultsReport, serverLogReport, sessionSourceInListFilter, setClientBingSite, setDefaultClient, setProviderSpendLimits, setTelemetryEnabled, setTokenStorageMode, shiftIsoDate, shouldExcludeBrandQuery, siteSchema, sqliteCrawlReportStore, strikingDistance, submitIndexNow, summarizeCrawlReport, pageTechnicalSignals as technicalPageSignals, technicalWatchWorkflow, telemetryErrorCategory, templateForUrl, toSeoError, tokenSchema, topCrawlRecommendations, topFixes, trackTelemetryReportComplete, trackTelemetryReportFailed, trackTelemetryReportStart, trackTelemetrySetupComplete, trafficAnomaly, unavailableSegmentImpactReport, unavailableValue, unicodeTokens, updateCorrelation, updatePostmortemCsvFiles, updatePostmortemWorkflow, validateIndexNowKey, validateIndexNowKeyRecord, validateOkfFiles, verifyIndexNowKey, verifyQueryContent, workflowPresentation, writeConfig, writeDataForSeoCredentials, writeOauthClient, writeProviderSecret, writeTokens, xRobotsDirectives };
25246
26739
  //# sourceMappingURL=index.d.ts.map