seo 0.13.3 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/PRIVACY.md +9 -1
  2. package/dist/cli.js +84 -80
  3. package/dist/cli.js.map +1 -1
  4. package/dist/{dist-BbTqJIE_.js → dist-4Yam8ps7.js} +1 -1
  5. package/dist/dist-B_2zww72.js +427 -0
  6. package/dist/dist-B_2zww72.js.map +1 -0
  7. package/dist/{esm-hHlvm1W0.js → esm-BmuxgZyN.js} +95 -188
  8. package/dist/{esm-hHlvm1W0.js.map → esm-BmuxgZyN.js.map} +1 -1
  9. package/dist/index.d.ts +73 -406
  10. package/dist/index.js +1448 -564
  11. package/dist/index.js.map +1 -1
  12. package/dist/mcp.d.ts +0 -14
  13. package/dist/mcp.js +1020 -807
  14. package/dist/mcp.js.map +1 -1
  15. package/dist/provider-sdk.d.ts +0 -2
  16. package/dist/provider-sdk.js +1 -2
  17. package/package.json +6 -5
  18. package/site-kit/README.md +13 -0
  19. package/site-kit/guide/build.md +70 -0
  20. package/site-kit/guide/data.md +49 -0
  21. package/site-kit/guide/golden-page.md +50 -0
  22. package/site-kit/guide/grow.md +58 -0
  23. package/site-kit/guide/launch.md +55 -0
  24. package/site-kit/guide/market.md +57 -0
  25. package/site-kit/guide/plan.md +49 -0
  26. package/site-kit/guide/scale.md +41 -0
  27. package/site-kit/guide/setup.md +59 -0
  28. package/site-kit/guide/writing.md +55 -0
  29. package/site-kit/starter/.github/workflows/refresh-data.yml +88 -0
  30. package/site-kit/starter/.node-version +1 -0
  31. package/site-kit/starter/AGENTS.md +65 -0
  32. package/site-kit/starter/README.md +11 -0
  33. package/site-kit/starter/astro.config.mjs +31 -0
  34. package/site-kit/starter/gitignore +7 -0
  35. package/site-kit/starter/llms.config.mjs +38 -0
  36. package/site-kit/starter/package.json +31 -0
  37. package/site-kit/starter/pnpm-workspace.yaml +5 -0
  38. package/site-kit/starter/public/_headers +5 -0
  39. package/site-kit/starter/public/favicon.svg +1 -0
  40. package/site-kit/starter/public/fonts/InterLatinVF.woff2 +0 -0
  41. package/site-kit/starter/public/fonts/JetBrainsMonoLatinVF.woff2 +0 -0
  42. package/site-kit/starter/public/fonts/LICENSE-inter.txt +93 -0
  43. package/site-kit/starter/public/fonts/LICENSE-jetbrains-mono.txt +93 -0
  44. package/site-kit/starter/scripts/deploy.mjs +60 -0
  45. package/site-kit/starter/scripts/markdown-rewrites.mjs +33 -0
  46. package/site-kit/starter/scripts/refresh-data.mjs +60 -0
  47. package/site-kit/starter/scripts/validate-data.mjs +47 -0
  48. package/site-kit/starter/site.config.json +9 -0
  49. package/site-kit/starter/src/components/Breadcrumbs.astro +27 -0
  50. package/site-kit/starter/src/components/Button.astro +46 -0
  51. package/site-kit/starter/src/components/Card.astro +54 -0
  52. package/site-kit/starter/src/components/CodeBlock.astro +62 -0
  53. package/site-kit/starter/src/components/FactTable.astro +45 -0
  54. package/site-kit/starter/src/components/FaqAccordion.astro +143 -0
  55. package/site-kit/starter/src/components/Footer.astro +34 -0
  56. package/site-kit/starter/src/components/FormInput.astro +18 -0
  57. package/site-kit/starter/src/components/FormSelect.astro +34 -0
  58. package/site-kit/starter/src/components/Header.astro +17 -0
  59. package/site-kit/starter/src/components/HugeIcon.astro +36 -0
  60. package/site-kit/starter/src/components/Logo.astro +21 -0
  61. package/site-kit/starter/src/components/PageHeader.astro +33 -0
  62. package/site-kit/starter/src/components/SectionHeading.astro +18 -0
  63. package/site-kit/starter/src/components/ui/button.ts +51 -0
  64. package/site-kit/starter/src/data/parks.json +106 -0
  65. package/site-kit/starter/src/data/sources.json +11 -0
  66. package/site-kit/starter/src/integrations/og-images.ts +49 -0
  67. package/site-kit/starter/src/integrations/sitemaps.ts +104 -0
  68. package/site-kit/starter/src/layouts/Base.astro +69 -0
  69. package/site-kit/starter/src/lib/cn.ts +5 -0
  70. package/site-kit/starter/src/lib/narrative.ts +115 -0
  71. package/site-kit/starter/src/lib/og/card.ts +85 -0
  72. package/site-kit/starter/src/lib/og/path.ts +14 -0
  73. package/site-kit/starter/src/lib/og/render.ts +30 -0
  74. package/site-kit/starter/src/lib/parks.ts +84 -0
  75. package/site-kit/starter/src/lib/seo.ts +97 -0
  76. package/site-kit/starter/src/pages/404.astro +30 -0
  77. package/site-kit/starter/src/pages/about.astro +39 -0
  78. package/site-kit/starter/src/pages/index.astro +52 -0
  79. package/site-kit/starter/src/pages/parks/[slug].astro +95 -0
  80. package/site-kit/starter/src/pages/regions/[region].astro +58 -0
  81. package/site-kit/starter/src/pages/robots.txt.ts +16 -0
  82. package/site-kit/starter/src/site.ts +29 -0
  83. package/site-kit/starter/src/styles/globals.css +561 -0
  84. package/site-kit/starter/tsconfig.json +5 -0
  85. package/site-kit/starter/wrangler.jsonc +16 -0
  86. package/skills/seo/SKILL.md +19 -1
  87. package/dist/dist-DBI-BioS.js +0 -420
  88. package/dist/dist-DBI-BioS.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -5,7 +5,6 @@ import { Headers as Headers$1, RequestInit as RequestInit$1, Response as Respons
5
5
  import Libsql from "libsql";
6
6
  import "htmlparser2";
7
7
  import pino from "pino";
8
- //#region packages/core/src/types/auth.d.ts
9
8
  export declare const tokenSchema: z.ZodObject<{
10
9
  provider: z.ZodLiteral<"google">;
11
10
  account_email: z.ZodString;
@@ -40,8 +39,6 @@ export declare const tokenStoreSchema: z.ZodObject<{
40
39
  }, z.core.$strip>>;
41
40
  }, z.core.$strip>;
42
41
  export type StoredTokenStore = z.infer<typeof tokenStoreSchema>;
43
- //#endregion
44
- //#region packages/core/src/types/config.d.ts
45
42
  export declare const providerPreferenceSchema: z.ZodEnum<{
46
43
  cheap: "cheap";
47
44
  authoritative: "authoritative";
@@ -83,8 +80,6 @@ export declare const configSchema: z.ZodObject<{
83
80
  export type AppConfig = z.infer<typeof configSchema>;
84
81
  export type AnalyticsConnection = z.infer<typeof analyticsConnectionSchema>;
85
82
  export type AnalyticsProvider = z.infer<typeof analyticsProviderSchema>;
86
- //#endregion
87
- //#region packages/core/src/extract/canonical.d.ts
88
83
  type CanonicalSource = 'html-head' | 'html-body' | 'http-header';
89
84
  type CanonicalCandidate = {
90
85
  source: CanonicalSource;
@@ -106,8 +101,6 @@ type CanonicalEvidence = {
106
101
  selectedUrl?: string;
107
102
  candidates: CanonicalCandidate[];
108
103
  };
109
- //#endregion
110
- //#region packages/core/src/types/pages.d.ts
111
104
  export interface GscRow {
112
105
  keys: string[];
113
106
  clicks: number;
@@ -421,8 +414,6 @@ export interface ExtractedPage {
421
414
  contentExtraction: ContentExtractionDiagnostics;
422
415
  warnings: string[];
423
416
  }
424
- //#endregion
425
- //#region packages/core/src/types/providers.d.ts
426
417
  /** Calls and units one provider used during a report run. */
427
418
  export interface CreditUsage {
428
419
  provider: string;
@@ -432,8 +423,6 @@ export interface CreditUsage {
432
423
  calls: number;
433
424
  cacheHits?: number;
434
425
  }
435
- //#endregion
436
- //#region packages/core/src/rules.d.ts
437
426
  type RuleDefinition = {
438
427
  id: string;
439
428
  title: string;
@@ -1244,8 +1233,6 @@ export declare function listRules(): RuleInfo[];
1244
1233
  export declare function explainRule(ruleId: string): RuleInfo | undefined;
1245
1234
  export declare function recommendationForRule(ruleId: string): RuleRecommendation;
1246
1235
  export declare function hasRule(ruleId: string): ruleId is RuleId;
1247
- //#endregion
1248
- //#region packages/core/src/brand-evidence.d.ts
1249
1236
  type BrandQueryEvidence = {
1250
1237
  query: string;
1251
1238
  clicks: number;
@@ -1274,8 +1261,6 @@ type ReportBrandTerms = {
1274
1261
  excluded: ExcludedBrandTerm[];
1275
1262
  heuristic: boolean;
1276
1263
  };
1277
- //#endregion
1278
- //#region packages/core/src/analyze/page-patterns.d.ts
1279
1264
  type PageTemplate = {
1280
1265
  id: string;
1281
1266
  label: string;
@@ -1287,8 +1272,6 @@ type TemplateSummary = {
1287
1272
  count: number;
1288
1273
  sampleUrls: string[];
1289
1274
  };
1290
- //#endregion
1291
- //#region packages/core/src/analyze/second-page-analysis-types.d.ts
1292
1275
  type SecondPageSelection = {
1293
1276
  sourceRows: number;
1294
1277
  invalidRows: number;
@@ -1470,8 +1453,6 @@ type SecondPageReport = {
1470
1453
  message: string;
1471
1454
  }>;
1472
1455
  };
1473
- //#endregion
1474
- //#region packages/core/src/types/reports.d.ts
1475
1456
  export interface Recommendation {
1476
1457
  principle: string;
1477
1458
  evidenceRef: string;
@@ -1549,8 +1530,6 @@ export interface CacheStats {
1549
1530
  maxSizeBytes: number;
1550
1531
  counts: Record<string, number>;
1551
1532
  }
1552
- //#endregion
1553
- //#region packages/core/src/analytics/providers.d.ts
1554
1533
  export type AnalyticsProviderDetails = {
1555
1534
  label: string;
1556
1535
  landingMetricLabel: 'sessions' | 'landing-page visits';
@@ -1559,8 +1538,6 @@ export declare const ANALYTICS_PROVIDER_IDS: readonly ["google", "clicky"];
1559
1538
  export declare function analyticsProviderDetails(provider: AnalyticsProvider | string): AnalyticsProviderDetails;
1560
1539
  export declare function analyticsConnectionProviderId(connection: AnalyticsConnection): string;
1561
1540
  export declare function analyticsConnectionLabel(connection: AnalyticsConnection): string;
1562
- //#endregion
1563
- //#region packages/core/src/analyze/agent-report.d.ts
1564
1541
  export type AgentFindingStatus = 'open';
1565
1542
  type AgentFindingBase = {
1566
1543
  id: string;
@@ -1670,8 +1647,6 @@ export declare function buildAgentFindings(report: JsonRecord, options?: AgentRe
1670
1647
  };
1671
1648
  export declare function withAgentReportContract(report: JsonRecord, options?: AgentReportOptions): JsonRecord;
1672
1649
  export declare function agentActionsView(report: JsonRecord, options?: AgentReportOptions): JsonRecord;
1673
- //#endregion
1674
- //#region packages/core/src/errors.d.ts
1675
1650
  export 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';
1676
1651
  export declare class SeoError extends Error {
1677
1652
  readonly code: SeoErrorCode;
@@ -1689,8 +1664,6 @@ export declare function seoErrorEnvelope(error: unknown): {
1689
1664
  retryable: boolean;
1690
1665
  };
1691
1666
  };
1692
- //#endregion
1693
- //#region packages/core/src/ga4/account-summaries.d.ts
1694
1667
  interface Ga4PropertySummary {
1695
1668
  property: string;
1696
1669
  displayName?: string;
@@ -1702,8 +1675,6 @@ interface Ga4AccountSummary {
1702
1675
  displayName?: string;
1703
1676
  propertySummaries: Ga4PropertySummary[];
1704
1677
  }
1705
- //#endregion
1706
- //#region packages/core/src/gsc/client/types.d.ts
1707
1678
  export interface SearchAnalyticsRequest {
1708
1679
  startDate: string;
1709
1680
  endDate: string;
@@ -1764,8 +1735,6 @@ export interface UrlInspectionResult {
1764
1735
  richResultsResult?: unknown;
1765
1736
  };
1766
1737
  }
1767
- //#endregion
1768
- //#region packages/core/src/google/api.d.ts
1769
1738
  export type GoogleFetch = (url: string, init?: RequestInit) => Promise<Response>;
1770
1739
  export type GoogleCallOptions = {
1771
1740
  signIn: string;
@@ -1803,8 +1772,6 @@ export interface Ga4DataStream {
1803
1772
  }
1804
1773
  export declare function listAnalyticsDataStreams(gfetch: GoogleFetch, propertyId: string, options: GoogleCallOptions): Promise<Ga4DataStream[]>;
1805
1774
  export declare function runAnalyticsReport<T = unknown>(gfetch: GoogleFetch, propertyId: string, body: unknown, options: GoogleCallOptions): Promise<T>;
1806
- //#endregion
1807
- //#region packages/core/src/ga4/client.d.ts
1808
1775
  export interface Ga4ReportRequest {
1809
1776
  dateRanges: Array<{
1810
1777
  startDate: string;
@@ -1862,8 +1829,6 @@ export declare function listGa4DataStreams(propertyId: string, accountEmail?: st
1862
1829
  export declare function ga4PropertyIdFromName(name: string): string;
1863
1830
  export declare function ga4RowsToObjects(result: Ga4RunReportResult): Array<Record<string, string>>;
1864
1831
  export declare function ga4ReportQualityWarnings(result: Ga4RunReportResult, label?: string): string[];
1865
- //#endregion
1866
- //#region packages/core/src/analyze/ai-referrals-types.d.ts
1867
1832
  type AiReferralMetrics = {
1868
1833
  sessions: number;
1869
1834
  eventCount: number;
@@ -1957,8 +1922,6 @@ type AiReferralReport = {
1957
1922
  }>;
1958
1923
  caveats: string[];
1959
1924
  };
1960
- //#endregion
1961
- //#region packages/core/src/analyze/ai-referrals-analysis.d.ts
1962
1925
  type AiReferralAnalysisInput = {
1963
1926
  property: string;
1964
1927
  generatedAt: string;
@@ -1973,16 +1936,10 @@ type AiReferralAnalysisInput = {
1973
1936
  totalUsersEvidence: AiReferralQueryEvidence;
1974
1937
  };
1975
1938
  export declare function analyzeAiReferralRows(input: AiReferralAnalysisInput): AiReferralReport;
1976
- //#endregion
1977
- //#region packages/core/src/analyze/ai-referrals-query.d.ts
1978
1939
  export declare function sessionSourceInListFilter(values: string[]): unknown;
1979
- //#endregion
1980
- //#region packages/core/src/analyze/ai-referrals-sources.d.ts
1981
1940
  export declare const AI_REFERRAL_SOURCES_VERSION: "ai-referral-sources@1";
1982
1941
  export declare const AI_REFERRAL_SOURCES: readonly AiReferralSourceDefinition[];
1983
1942
  export declare function aiReferralSourceForValue(value: string): AiReferralSourceDefinition | undefined;
1984
- //#endregion
1985
- //#region packages/core/src/analyze/ai-referrals.d.ts
1986
1943
  type RunGa4Report = typeof runGa4Report;
1987
1944
  export declare function aiReferralsReport(input: {
1988
1945
  property: string;
@@ -1996,8 +1953,6 @@ export declare function aiReferralsReport(input: {
1996
1953
  runGa4Report?: RunGa4Report;
1997
1954
  now?: () => Date;
1998
1955
  }): Promise<AiReferralReport>;
1999
- //#endregion
2000
- //#region packages/core/src/fetch/page-fetcher/types.d.ts
2001
1956
  interface FetchRateControls {
2002
1957
  concurrency?: number;
2003
1958
  intervalCap?: number;
@@ -2057,11 +2012,7 @@ type RobotsResult = {
2057
2012
  url: string;
2058
2013
  };
2059
2014
  type RobotsResolver = (origin: string, targetUrl: string) => Promise<RobotsResult>;
2060
- //#endregion
2061
- //#region packages/core/src/fetch/page-fetcher/plain.d.ts
2062
2015
  declare function fetchPlain(url: string, refresh: boolean | undefined, timeoutMs: number | undefined, rate: NormalizedFetchRateControls, signal?: AbortSignal, respectRobots?: boolean, writeCache?: boolean): Promise<PageFetchResult>;
2063
- //#endregion
2064
- //#region packages/core/src/fetch/page-fetcher/rendered.d.ts
2065
2016
  /**
2066
2017
  * One renderer owns one browser process and a bounded number of isolated
2067
2018
  * contexts. Create it once for a crawl, then close it after the crawl exits.
@@ -2069,19 +2020,13 @@ declare function fetchPlain(url: string, refresh: boolean | undefined, timeoutMs
2069
2020
  export declare function createPageRenderer(input?: {
2070
2021
  concurrency?: number;
2071
2022
  }): PageRenderer;
2072
- //#endregion
2073
- //#region packages/core/src/fetch/page-fetcher/status-probe.d.ts
2074
2023
  export declare function fetchPageStatus(url: string, opts?: FetchPageOptions): Promise<PageFetchResult>;
2075
- //#endregion
2076
- //#region packages/core/src/fetch/page-fetcher.d.ts
2077
2024
  export type FetchPageDependencies = {
2078
2025
  fetchPlain?: typeof fetchPlain;
2079
2026
  createPageRenderer?: typeof createPageRenderer;
2080
2027
  };
2081
2028
  export declare function normalizeJavaScriptRenderingMode(input: JavaScriptRenderingInput | undefined): JavaScriptRenderingMode;
2082
2029
  export declare function fetchPage(url: string, opts?: FetchPageOptions, dependencies?: FetchPageDependencies): Promise<PageFetchResult>;
2083
- //#endregion
2084
- //#region packages/core/src/gsc/client/inspection.d.ts
2085
2030
  export declare function urlInspectionQuota(input: {
2086
2031
  siteUrl: string;
2087
2032
  accountEmail?: string;
@@ -2091,8 +2036,6 @@ export declare function urlInspectionQuota(input: {
2091
2036
  resetAt: string;
2092
2037
  }>;
2093
2038
  export declare function inspectUrl(input: UrlInspectionRequest): Promise<UrlInspectionResult>;
2094
- //#endregion
2095
- //#region packages/core/src/gsc/client/search-analytics.d.ts
2096
2039
  export type PageSearchMetrics = {
2097
2040
  clicks: number;
2098
2041
  impressions: number;
@@ -2119,15 +2062,11 @@ export declare function queryPagesMetricsBatch(site: string, pageUrls: string[],
2119
2062
  export declare function queryPageTopQuery(site: string, pageUrl: string, days?: number): Promise<PageTopQuery | undefined>;
2120
2063
  export declare function queryPagesTopQueries(site: string, pageUrls: string[], days?: number): Promise<Map<string, PageTopQuery>>;
2121
2064
  export declare function queryPagesTopQueriesBatch(site: string, pageUrls: string[], range?: number | SearchDateWindow): Promise<SearchPageBatch<PageTopQuery>>;
2122
- //#endregion
2123
- //#region packages/core/src/gsc/client/sites.d.ts
2124
2065
  export declare function listSites(_refresh?: boolean, accountEmail?: string): Promise<Array<{
2125
2066
  siteUrl: string;
2126
2067
  permissionLevel?: string;
2127
2068
  siteType?: string;
2128
2069
  }>>;
2129
- //#endregion
2130
- //#region packages/core/src/analyze/audit-page.d.ts
2131
2070
  export declare const AUDIT_PAGE_RULE_IDS: readonly ["missing_title", "title_too_wide", "h1_missing", "canonical_invalid", "canonical_conflict", "canonical_multiple", "canonical_outside_head", "canonical_streamed_in_body", "canonical_mismatch"];
2132
2071
  export type AuditPageDependencies = {
2133
2072
  fetchPage: typeof fetchPage;
@@ -2141,8 +2080,6 @@ export declare function auditPage(input: {
2141
2080
  refresh?: boolean;
2142
2081
  extractor?: 'defuddle' | 'readability';
2143
2082
  }, dependencies?: AuditPageDependencies): Promise<AuditPageReport>;
2144
- //#endregion
2145
- //#region packages/core/src/analyze/content-coverage-analysis.d.ts
2146
2083
  /** Fetches one page. The local binding uses the cached page fetcher. */
2147
2084
  export type PageFetcher = (url: string, options?: FetchPageOptions) => Promise<PageFetchResult>;
2148
2085
  /** Extracts page fields from a fetched page. */
@@ -2186,14 +2123,10 @@ export declare function verifyQueryContentWith(input: VerifyQueryContentInput &
2186
2123
  fetch: PageFetcher;
2187
2124
  extract: PageExtractor;
2188
2125
  }): Promise<QueryContentCoverage>;
2189
- //#endregion
2190
- //#region packages/core/src/analyze/content-coverage.d.ts
2191
2126
  export declare function verifyQueryContent(input: VerifyQueryContentInput & {
2192
2127
  fetch?: PageFetcher;
2193
2128
  extract?: PageExtractor;
2194
2129
  }): Promise<QueryContentCoverage>;
2195
- //#endregion
2196
- //#region packages/core/src/extract/content-sketch.d.ts
2197
2130
  type ContentSketch = {
2198
2131
  version: 1;
2199
2132
  wordCount: number;
@@ -2201,8 +2134,6 @@ type ContentSketch = {
2201
2134
  sampledShingles: number;
2202
2135
  hashes: string[];
2203
2136
  };
2204
- //#endregion
2205
- //#region packages/core/src/extract/main-content.d.ts
2206
2137
  interface DefuddleResult {
2207
2138
  content?: string;
2208
2139
  description?: string;
@@ -2215,8 +2146,6 @@ interface MainContentDependencies {
2215
2146
  useAsync: false;
2216
2147
  }) => DefuddleResult;
2217
2148
  }
2218
- //#endregion
2219
- //#region packages/core/src/extract/page-extractor.d.ts
2220
2149
  type CrawlerExtractionEvidence = {
2221
2150
  h1?: string;
2222
2151
  h1Count: number;
@@ -2259,8 +2188,6 @@ type PageExtraction = ExtractedPage & {
2259
2188
  crawlerEvidence?: CrawlerExtractionEvidence;
2260
2189
  };
2261
2190
  declare function extractPage(fetchResult: PageFetchResult, extractor?: ContentExtractor, dependencies?: MainContentDependencies): Promise<PageExtraction>;
2262
- //#endregion
2263
- //#region packages/core/src/analyze/page-opportunities-types.d.ts
2264
2191
  type PageOpportunityType = 'ctr' | 'ranking' | 'content-gap' | 'serp-framing' | 'covered' | 'technical-check' | 'unverified';
2265
2192
  type PageOpportunityBenchmark = {
2266
2193
  applicable: boolean;
@@ -2350,11 +2277,7 @@ type PageOpportunityAnalysisInput = {
2350
2277
  fetchDiagnostics?: PageFetchDiagnostics;
2351
2278
  httpStatus?: number;
2352
2279
  };
2353
- //#endregion
2354
- //#region packages/core/src/analyze/shared.d.ts
2355
2280
  export declare function unicodeTokens(value: string): string[];
2356
- //#endregion
2357
- //#region packages/core/src/analyze/opportunity-primitives.d.ts
2358
2281
  export type OpportunityBenchmarkRow = {
2359
2282
  keys?: string[];
2360
2283
  clicks: number;
@@ -2419,8 +2342,6 @@ export declare function queryOpportunityRecommendation(input: {
2419
2342
  reason: string;
2420
2343
  expectedImpact: string;
2421
2344
  };
2422
- //#endregion
2423
- //#region packages/core/src/analyze/page-technical-signals.d.ts
2424
2345
  type PageTechnicalSignal = Extract<QueryContentSignal, 'http-non-2xx' | 'http-no-content' | 'blocked' | 'fetch-incomplete' | 'redirected' | 'meta-noindex' | 'x-robots-noindex' | 'canonical-mismatch'>;
2425
2346
  declare function pageTechnicalSignals(input: {
2426
2347
  url: string;
@@ -2428,14 +2349,8 @@ declare function pageTechnicalSignals(input: {
2428
2349
  fetchDiagnostics?: PageFetchDiagnostics;
2429
2350
  httpStatus?: number;
2430
2351
  }): PageTechnicalSignal[];
2431
- //#endregion
2432
- //#region packages/core/src/analyze/page-opportunities-analysis.d.ts
2433
2352
  export declare function analyzePageOpportunitiesFromRows(input: PageOpportunityAnalysisInput): PageOpportunityAnalysis;
2434
- //#endregion
2435
- //#region packages/core/src/analyze/page-opportunities-presentation.d.ts
2436
2353
  type PageOpportunityFocus = PageOpportunityType | 'no-data';
2437
- //#endregion
2438
- //#region packages/core/src/analyze/page-opportunities.d.ts
2439
2354
  type SearchAnalytics$2 = typeof querySearchAnalytics;
2440
2355
  type FetchPage = typeof fetchPage;
2441
2356
  type ExtractPage = typeof extractPage;
@@ -2514,8 +2429,6 @@ type PageOpportunityDependencies = {
2514
2429
  now: () => Date;
2515
2430
  };
2516
2431
  export declare function pageOpportunitiesReport(input: PageOpportunityInput, dependencies?: PageOpportunityDependencies): Promise<PageOpportunityReport>;
2517
- //#endregion
2518
- //#region packages/core/src/analyze/content-optimization.d.ts
2519
2432
  export type ContentOptimizationIntent = 'comparison' | 'commercial' | 'how-to' | 'definition' | 'local' | 'navigational' | 'general';
2520
2433
  export type ContentOptimizationReport = {
2521
2434
  site: string;
@@ -2569,8 +2482,6 @@ export declare function contentOptimizationReport(input: {
2569
2482
  refresh?: boolean;
2570
2483
  js?: boolean | 'auto';
2571
2484
  }): Promise<ContentOptimizationReport>;
2572
- //#endregion
2573
- //#region packages/core/src/analyze/monitoring/types.d.ts
2574
2485
  export type CrawlPageSnapshot = {
2575
2486
  url: string;
2576
2487
  finalUrl: string;
@@ -2798,8 +2709,6 @@ export type CrawlRequestObservation = CrawlResponseObservation | {
2798
2709
  error: string;
2799
2710
  extraction: 'not-applicable';
2800
2711
  };
2801
- //#endregion
2802
- //#region packages/core/src/analyze/monitoring/sitemaps.d.ts
2803
2712
  export type SitemapInvalidLoc = {
2804
2713
  sitemapUrl: string;
2805
2714
  kind: 'url' | 'sitemap';
@@ -2883,8 +2792,6 @@ export declare function fetchSitemapUrls(input: {
2883
2792
  limit?: number;
2884
2793
  maxNested?: number;
2885
2794
  }): Promise<SitemapFetchResult>;
2886
- //#endregion
2887
- //#region packages/core/src/analyze/crawler/crawl-skip-reasons.d.ts
2888
2795
  export declare const CRAWL_SKIP_REASONS: readonly ["asset-url", "configured-exclusion", "duplicate-normalization", "invalid-url", "memory-pressure", "off-origin", "origin-backpressure", "queue-safety-limit", "robots-disallowed", "robots-uncertain", "legacy-unclassified"];
2889
2796
  export type CrawlSkipReason = (typeof CRAWL_SKIP_REASONS)[number];
2890
2797
  export type CrawlSkipImpact = 'coverage-affecting' | 'non-impacting';
@@ -2907,11 +2814,7 @@ export declare function normalizeCrawlSkipReasonCounts(input: {
2907
2814
  skippedUrlsByImpact: CrawlSkippedUrlsByImpact;
2908
2815
  };
2909
2816
  export declare function crawlSkipReasonCountsFromRecord(input?: Partial<Record<CrawlSkipReason, number>>): CrawlSkipReasonCount[];
2910
- //#endregion
2911
- //#region packages/core/src/analyze/crawler/crawl-status.d.ts
2912
2817
  type CrawlStatusPhase = 'started' | 'url_queued' | 'url_skipped' | 'page_started' | 'page_completed' | 'page_failed' | 'page_skipped' | 'external_links_started' | 'external_links_completed' | 'cancelled' | 'completed';
2913
- //#endregion
2914
- //#region packages/core/src/analyze/monitoring/crawl-page.d.ts
2915
2818
  export type CrawlOneResult = {
2916
2819
  request?: CrawlRequestObservation;
2917
2820
  page?: CrawlPageSnapshot;
@@ -2919,9 +2822,8 @@ export type CrawlOneResult = {
2919
2822
  warning?: string;
2920
2823
  };
2921
2824
  export declare function crawlOne(url: string, opts?: FetchPageOptions): Promise<CrawlOneResult>;
2825
+ export declare function snapshotFetchedPage(url: string, fetched: PageFetchResult): Promise<CrawlOneResult>;
2922
2826
  export declare function crawlStatusOnly(url: string, opts?: FetchPageOptions): Promise<CrawlOneResult>;
2923
- //#endregion
2924
- //#region packages/core/src/analyze/crawler/site-checks.d.ts
2925
2827
  type CrawlSiteChecks = {
2926
2828
  soft404: {
2927
2829
  status: 'pass' | 'warning' | 'unknown';
@@ -2937,8 +2839,6 @@ type CrawlSiteChecks = {
2937
2839
  complete: boolean;
2938
2840
  };
2939
2841
  };
2940
- //#endregion
2941
- //#region packages/core/src/analyze/crawler/site-crawl-ai-types.d.ts
2942
2842
  type CrawlAiAvailability = 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable';
2943
2843
  type CrawlAiBotAccess = {
2944
2844
  userAgent: string;
@@ -3015,8 +2915,6 @@ type CrawlAiSignals = {
3015
2915
  contentSignal?: string;
3016
2916
  };
3017
2917
  };
3018
- //#endregion
3019
- //#region packages/core/src/analyze/crawler/report.d.ts
3020
2918
  export type CrawlMode = 'site' | 'page' | 'list' | 'sitemap';
3021
2919
  export type CrawlStrategy = 'full' | 'health';
3022
2920
  export declare const MAX_CRAWL_PAGES = 10000;
@@ -3280,14 +3178,10 @@ export declare function createCrawlReport(input: {
3280
3178
  generatedAt?: string;
3281
3179
  }): CrawlReport;
3282
3180
  export declare function normalizeLoadedCrawlReport(report: CrawlReport): CrawlReport;
3283
- //#endregion
3284
- //#region packages/core/src/analyze/crawler/audit.d.ts
3285
3181
  export declare function auditCrawlRequests(requests: CrawlRequestObservation[]): CrawlIssue[];
3286
3182
  export declare function auditCrawlPages(pages: CrawlPageSnapshot[], opts?: {
3287
3183
  startUrl?: string;
3288
3184
  }): CrawlIssue[];
3289
- //#endregion
3290
- //#region packages/core/src/analyze/crawler/top-fixes.d.ts
3291
3185
  export type TopFixFilters = {
3292
3186
  category?: RuleCategory | string;
3293
3187
  severity?: RuleSeverity | string;
@@ -3321,8 +3215,6 @@ export type TopFix = CrawlIssueGroup & {
3321
3215
  };
3322
3216
  export declare function topFixes(report: CrawlReport, filters?: TopFixFilters): TopFix[];
3323
3217
  export declare function reviewObservations(report: CrawlReport, filters?: Omit<TopFixFilters, 'recommendation'>): TopFix[];
3324
- //#endregion
3325
- //#region packages/core/src/analyze/crawler/export.d.ts
3326
3218
  export type CrawlOutputFormat = 'pretty' | 'json' | 'csv' | 'html' | 'markdown' | 'junit';
3327
3219
  export declare function renderCrawlCsv(report: CrawlReport): string;
3328
3220
  export declare function renderCrawlPagesCsv(report: CrawlReport): string;
@@ -3330,8 +3222,6 @@ export declare function renderCrawlPretty(report: CrawlReport, fixes?: TopFix[])
3330
3222
  export declare function renderCrawlJunit(report: CrawlReport): string;
3331
3223
  export declare function renderCrawlHtml(report: CrawlReport, fixes?: TopFix[]): string;
3332
3224
  export declare function renderCrawlMarkdownTickets(report: CrawlReport, fixes?: TopFix[]): string;
3333
- //#endregion
3334
- //#region packages/core/src/analyze/crawler/schemas.d.ts
3335
3225
  export declare const crawlerRuleSeveritySchema: z.ZodEnum<{
3336
3226
  high: "high";
3337
3227
  low: "low";
@@ -18020,13 +17910,9 @@ export declare const crawlerJsonSchemas: {
18020
17910
  }, z.core.$strip>>;
18021
17911
  }, z.core.$strip>>;
18022
17912
  };
18023
- //#endregion
18024
- //#region packages/core/src/fetch/crawler-identity.d.ts
18025
17913
  export declare const SEO_CRAWLER_TOKEN = "SEO-Skill";
18026
17914
  export declare const SEO_CRAWLER_USER_AGENT: string;
18027
17915
  export declare const SEO_CRAWLER_IDENTITY: CrawlerIdentity;
18028
- //#endregion
18029
- //#region packages/core/src/fetch/http-client.d.ts
18030
17916
  export type HttpProfile = 'browser' | 'bot';
18031
17917
  export declare class ResponseSizeLimitError extends Error {
18032
17918
  readonly maxBytes: number;
@@ -18039,8 +17925,6 @@ export declare function publicHttpFetch(url: string, input?: RequestInit$1 & {
18039
17925
  profile?: HttpProfile;
18040
17926
  }): Promise<import("undici").Response>;
18041
17927
  export declare function readBoundedResponseText(response: Awaited<ReturnType<typeof publicHttpFetch>>, maxBytes: number, label?: string): Promise<string>;
18042
- //#endregion
18043
- //#region packages/core/src/provider-extensions/contracts.d.ts
18044
17928
  export declare const providerExtensionIdSchema: z.ZodString;
18045
17929
  export declare const providerPackageNameSchema: z.ZodString;
18046
17930
  export declare const providerExactVersionSchema: z.ZodString;
@@ -18110,8 +17994,6 @@ export declare const providerRegistrationSchema: z.ZodObject<{
18110
17994
  export type ProviderPackageManifest = z.infer<typeof providerPackageManifestSchema>;
18111
17995
  export type InstalledProviderPackage = z.infer<typeof installedProviderPackageSchema>;
18112
17996
  export type InstalledProviderPackages = z.infer<typeof installedProviderPackagesSchema>;
18113
- //#endregion
18114
- //#region packages/core/src/provider-extensions/registry.d.ts
18115
17997
  export type RegisteredProviderExtension = SeoProviderRegistration & {
18116
17998
  package: string;
18117
17999
  version: string;
@@ -18130,8 +18012,6 @@ export declare class ProviderExtensionRegistry {
18130
18012
  action(providerId: string, actionId: string): SeoProviderActionAdapter | undefined;
18131
18013
  list(): RegisteredProviderExtension[];
18132
18014
  }
18133
- //#endregion
18134
- //#region packages/core/src/provider-extensions/loader.d.ts
18135
18015
  type ImportedProviderModule = {
18136
18016
  default?: unknown;
18137
18017
  };
@@ -18158,16 +18038,12 @@ export declare function loadProviderPackage(input: {
18158
18038
  importModule?: (url: string) => Promise<ImportedProviderModule>;
18159
18039
  }): Promise<RegisteredProviderExtension[]>;
18160
18040
  export declare function loadInstalledProviderExtensions(options?: ProviderExtensionLoaderOptions): Promise<LoadedProviderExtensions>;
18161
- //#endregion
18162
- //#region packages/core/src/providers/imports/research-columns.d.ts
18163
18041
  export declare const RESEARCH_IMPORT_COLUMN_KEYS: readonly ["keyword", "url", "position", "absolutePosition", "searchVolume", "keywordDifficulty", "cpc", "paidCompetition", "intent", "resultCount", "estimatedTraffic", "resultType", "searchVolumeUpdatedAt"];
18164
18042
  export type ResearchImportColumn = (typeof RESEARCH_IMPORT_COLUMN_KEYS)[number];
18165
18043
  export type ResearchImportColumns = Partial<Record<ResearchImportColumn, string>>;
18166
18044
  export declare function normalizedResearchColumnName(value: string): string;
18167
18045
  export declare function researchImportColumns(value: ResearchImportColumns | undefined): ResearchImportColumns | undefined;
18168
18046
  export declare function validateResearchImportColumnSources(columns: ResearchImportColumns | undefined, includedFields: Iterable<string>): void;
18169
- //#endregion
18170
- //#region packages/core/src/providers/contracts.d.ts
18171
18047
  export declare const providerIdSchema: z.ZodString;
18172
18048
  export type ProviderId = z.infer<typeof providerIdSchema>;
18173
18049
  export type ExternalServiceId = string;
@@ -18240,8 +18116,6 @@ export type KeywordMonthlySearch = {
18240
18116
  month: number;
18241
18117
  searchVolume: number;
18242
18118
  };
18243
- //#endregion
18244
- //#region packages/core/src/providers/transport.d.ts
18245
18119
  export type ProviderFetch = (url: string | URL, init?: RequestInit$1) => Promise<Response$1>;
18246
18120
  export type ProviderRequestInput = {
18247
18121
  provider: ExternalServiceId;
@@ -18259,8 +18133,6 @@ export declare function providerRequestText(input: ProviderRequestInput): Promis
18259
18133
  export declare function providerRequestJson<T>(input: ProviderRequestInput & {
18260
18134
  schema: z.ZodType<T>;
18261
18135
  }): Promise<T>;
18262
- //#endregion
18263
- //#region packages/core/src/provider-extensions/runtime.d.ts
18264
18136
  export type ProviderRuntimeOptions = {
18265
18137
  fetch?: ProviderFetch;
18266
18138
  maxRequests?: number;
@@ -18276,8 +18148,6 @@ export declare function verifyProviderExtension(input: {
18276
18148
  credentials: Readonly<Record<string, string>>;
18277
18149
  runtime?: ProviderRuntimeOptions;
18278
18150
  }): Promise<void>;
18279
- //#endregion
18280
- //#region packages/core/src/provider-extensions/analytics.d.ts
18281
18151
  export type AnalyticsProviderRuntimeOptions = ProviderRuntimeOptions;
18282
18152
  export declare function verifyAnalyticsProvider(input: {
18283
18153
  providerId: string;
@@ -18295,8 +18165,6 @@ export declare function runAnalyticsProviderLandingPages(input: {
18295
18165
  refresh?: boolean;
18296
18166
  runtime?: AnalyticsProviderRuntimeOptions;
18297
18167
  }): Promise<SeoLandingPageVisitsResult>;
18298
- //#endregion
18299
- //#region packages/core/src/analyze/workflows/analytics-value.d.ts
18300
18168
  type LandingPageValue = {
18301
18169
  sessions: number;
18302
18170
  totalUsers?: number;
@@ -18330,8 +18198,6 @@ declare function fetchLandingPageValues(input: {
18330
18198
  limit?: number;
18331
18199
  refresh?: boolean;
18332
18200
  }, dependencies?: Partial<LandingPageValueDependencies>): Promise<LandingPageValueResult>;
18333
- //#endregion
18334
- //#region packages/core/src/analyze/crawler/site-crawl-dependencies.d.ts
18335
18201
  type ResolvedCrawlSiteDependencies = {
18336
18202
  fetchPage: typeof crawlOne;
18337
18203
  fetchStatusPage: typeof crawlStatusOnly;
@@ -18350,11 +18216,7 @@ type ResolvedCrawlSiteDependencies = {
18350
18216
  totalMemory: () => number;
18351
18217
  };
18352
18218
  type CrawlSiteDependencies = Partial<ResolvedCrawlSiteDependencies>;
18353
- //#endregion
18354
- //#region packages/core/src/analyze/crawler/site-crawl.d.ts
18355
18219
  export declare function crawlSite(input: CrawlConfigInput, dependencies?: CrawlSiteDependencies): Promise<CrawlReport>;
18356
- //#endregion
18357
- //#region packages/core/src/analyze/query-quality.d.ts
18358
18220
  type QueryFlag = 'likely-automated' | 'navigational-other';
18359
18221
  declare const QUERY_FLAG_METHOD: {
18360
18222
  readonly id: "query_flags_v1";
@@ -18365,8 +18227,6 @@ declare const QUERY_FLAG_METHOD: {
18365
18227
  readonly 'navigational-other': "Names a domain that is not the property's host, ends with a spoken domain suffix or a login/site/app word, starts with a large platform name and adds no topic word, or is one short ASCII word that is not a brand term. Such queries usually look for another site.";
18366
18228
  };
18367
18229
  };
18368
- //#endregion
18369
- //#region packages/core/src/analyze/ctr-underperformers-types.d.ts
18370
18230
  type CtrUnderperformerSelection = {
18371
18231
  sourceRows: number;
18372
18232
  invalidRows: number;
@@ -18419,8 +18279,6 @@ type CtrUnderperformer = {
18419
18279
  confidence: 'low';
18420
18280
  };
18421
18281
  };
18422
- //#endregion
18423
- //#region packages/core/src/analyze/min-impressions-policy.d.ts
18424
18282
  type MinImpressionsScale = {
18425
18283
  share: number;
18426
18284
  floor: number;
@@ -18434,8 +18292,6 @@ type MinImpressionsPolicy = {
18434
18292
  basisImpressions: number;
18435
18293
  scale: MinImpressionsScale;
18436
18294
  };
18437
- //#endregion
18438
- //#region packages/core/src/analyze/ctr-underperformers-report.d.ts
18439
18295
  export interface CtrUnderperformerDependencies {
18440
18296
  searchAnalytics: SearchAnalyticsQuery;
18441
18297
  now: () => Date;
@@ -18547,8 +18403,6 @@ export declare function ctrUnderperformersReportWith(input: CtrUnderperformersIn
18547
18403
  caveats: string[];
18548
18404
  recommendations: string[];
18549
18405
  }>;
18550
- //#endregion
18551
- //#region packages/core/src/analyze/ctr-underperformers-analysis.d.ts
18552
18406
  export declare const CTR_MAX_MIN_IMPRESSIONS = 1000000000;
18553
18407
  export declare const CTR_DEFAULT_LIMIT = 25;
18554
18408
  export declare const CTR_MAX_LIMIT = 100;
@@ -18570,14 +18424,8 @@ export declare function analyzeCtrUnderperformersFromRows(input: {
18570
18424
  brand: ReportBrandTerms;
18571
18425
  benchmarkByPosition: Record<string, PositionBenchmark>;
18572
18426
  };
18573
- //#endregion
18574
- //#region packages/core/src/analyze/ctr-underperformers.d.ts
18575
18427
  export declare function ctrUnderperformersReport(input: CtrUnderperformersInput, dependencies?: CtrUnderperformerDependencies): Promise<CtrUnderperformersReport>;
18576
- //#endregion
18577
- //#region packages/core/src/progress.d.ts
18578
18428
  export type ProgressReporter = (message: string) => void;
18579
- //#endregion
18580
- //#region packages/core/src/analyze/segment-impact-types.d.ts
18581
18429
  type SegmentDimension = 'page' | 'query' | 'country' | 'device';
18582
18430
  type SegmentRange = {
18583
18431
  startDate: string;
@@ -18675,8 +18523,6 @@ type SegmentImpactReport = {
18675
18523
  warnings: string[];
18676
18524
  caveats: string[];
18677
18525
  };
18678
- //#endregion
18679
- //#region packages/core/src/analyze/segment-impact-analysis.d.ts
18680
18526
  export declare function analyzeSegmentRows(input: {
18681
18527
  site: string;
18682
18528
  dimension: SegmentImpactReport['dimension'];
@@ -18695,8 +18541,6 @@ export declare function analyzeSegmentRows(input: {
18695
18541
  beforeRowsFetched?: number;
18696
18542
  afterRowsFetched?: number;
18697
18543
  }): SegmentImpactReport;
18698
- //#endregion
18699
- //#region packages/core/src/analyze/segment-impact-fallback.d.ts
18700
18544
  export declare function unavailableSegmentImpactReport(input: {
18701
18545
  site: string;
18702
18546
  dimension: SegmentDimension;
@@ -18704,8 +18548,6 @@ export declare function unavailableSegmentImpactReport(input: {
18704
18548
  reason: string;
18705
18549
  generatedAt?: string;
18706
18550
  }): SegmentImpactReport;
18707
- //#endregion
18708
- //#region packages/core/src/analyze/segment-impact-input.d.ts
18709
18551
  export declare function segmentRangeDays(range: SegmentRange): number;
18710
18552
  export declare function segmentComparisonRange(after: SegmentRange, compareDays: number): SegmentRange;
18711
18553
  export declare function resolveSegmentRanges(input: {
@@ -18718,8 +18560,6 @@ export declare function resolveSegmentRanges(input: {
18718
18560
  before: SegmentRange;
18719
18561
  after: SegmentRange;
18720
18562
  };
18721
- //#endregion
18722
- //#region packages/core/src/analyze/segment-impact.d.ts
18723
18563
  type SearchAnalytics$1 = typeof querySearchAnalytics;
18724
18564
  export interface SegmentImpactInput {
18725
18565
  site: string;
@@ -18756,8 +18596,6 @@ export declare function compareSegmentRows(input: {
18756
18596
  generatedAt?: string;
18757
18597
  }): SegmentImpactReport;
18758
18598
  export declare function segmentImpact(input: SegmentImpactInput, dependencies?: SegmentImpactDependencies): Promise<SegmentImpactReport>;
18759
- //#endregion
18760
- //#region packages/core/src/providers/domain-contracts.d.ts
18761
18599
  type ResearchImportSource = {
18762
18600
  dataset: 'ranked-keywords';
18763
18601
  file: string;
@@ -18774,13 +18612,9 @@ type RankedKeyword = KeywordMetric & {
18774
18612
  resultType: string;
18775
18613
  estimatedMonthlyTraffic: ProviderValue<number>;
18776
18614
  };
18777
- //#endregion
18778
- //#region packages/core/src/providers/imports/research-rows.d.ts
18779
18615
  type ImportedResearchRow = RankedKeyword & {
18780
18616
  domain: string;
18781
18617
  };
18782
- //#endregion
18783
- //#region packages/core/src/analyze/site-diagnostics/cannibal-types.d.ts
18784
18618
  type CannibalSuppressionReason = 'brand_query';
18785
18619
  interface CannibalSuppression {
18786
18620
  query: string;
@@ -19042,8 +18876,6 @@ interface CannibalAnalysis {
19042
18876
  suppressionSummary: Record<string, number>;
19043
18877
  templates: TemplateSummary[];
19044
18878
  }
19045
- //#endregion
19046
- //#region packages/core/src/analyze/site-diagnostics/cannibal-report.d.ts
19047
18879
  /** Search Console input. Local research-file imports use the Node binding. */
19048
18880
  export interface CannibalSearchConsoleInput {
19049
18881
  site: string;
@@ -19061,13 +18893,16 @@ export interface CannibalDependencies {
19061
18893
  now: () => Date;
19062
18894
  }
19063
18895
  export declare function cannibalReportWith(input: CannibalSearchConsoleInput, dependencies: CannibalDependencies): Promise<CannibalReport>;
19064
- //#endregion
19065
- //#region packages/core/src/analyze/site-diagnostics/cannibal-analysis.d.ts
19066
18896
  export declare function analyzeCannibalRows(input: AnalyzeCannibalRowsInput): CannibalAnalysis;
18897
+ /**
18898
+ * Empty, partial, filtered or complete. Partial evidence (a possibly capped
18899
+ * source, invalid rows, or a candidate with no query-level demand row) never
18900
+ * becomes filtered, so it cannot read as an all-clear.
18901
+ */
18902
+ export declare function cannibalDataStatus(selection: CannibalSelection, possiblyTruncated: boolean): CannibalReport['dataStatus'];
18903
+ export declare const CANNIBAL_MINIMUM_PAGE_IMPRESSIONS = 10;
19067
18904
  export declare const CANNIBAL_MINIMUM_PAGE_SHARE = 0.1;
19068
18905
  export declare const CANNIBAL_MAXIMUM_DOMINANT_SHARE = 0.8;
19069
- //#endregion
19070
- //#region packages/core/src/analyze/site-diagnostics/cannibal-import.d.ts
19071
18906
  export interface CannibalImportReportInput {
19072
18907
  site: string;
19073
18908
  researchFiles: ResearchImportSource[];
@@ -19080,8 +18915,6 @@ export interface CannibalImportDependencies {
19080
18915
  }
19081
18916
  export declare function analyzeCannibalImportRows(input: AnalyzeCannibalImportRowsInput): CannibalImportAnalysis;
19082
18917
  export declare function cannibalImportReport(input: CannibalImportReportInput, dependencies?: CannibalImportDependencies): Promise<CannibalImportReport>;
19083
- //#endregion
19084
- //#region packages/core/src/analyze/site-diagnostics/cannibal.d.ts
19085
18918
  export interface CannibalReportInput extends CannibalSearchConsoleInput {
19086
18919
  researchFiles?: ResearchImportSource[];
19087
18920
  }
@@ -19091,8 +18924,6 @@ export declare function cannibalReport(input: CannibalReportInput & {
19091
18924
  export declare function cannibalReport(input: CannibalReportInput & {
19092
18925
  researchFiles?: undefined;
19093
18926
  }, dependencies?: CannibalDependencies): Promise<CannibalReport>;
19094
- //#endregion
19095
- //#region packages/core/src/analyze/site-diagnostics/decay-types.d.ts
19096
18927
  type DecayDiagnosis = 'lost_position' | 'lost_ctr' | 'lost_impressions' | 'lost_clicks';
19097
18928
  type DecayComparison = 'previous-period' | 'year-over-year';
19098
18929
  type DecaySignal = 'position_decline' | 'ctr_decline' | 'impression_decline' | 'click_decline';
@@ -19243,11 +19074,7 @@ interface DecayReport {
19243
19074
  ledgerSummary: string;
19244
19075
  warnings: string[];
19245
19076
  }
19246
- //#endregion
19247
- //#region packages/core/src/analyze/site-diagnostics/decay-analysis.d.ts
19248
19077
  export declare function analyzeDecay(input: AnalyzeDecayInput): DecayAnalysis;
19249
- //#endregion
19250
- //#region packages/core/src/analyze/site-diagnostics/decay-report-input.d.ts
19251
19078
  export declare function decayComparisonRange(current: {
19252
19079
  startDate: string;
19253
19080
  endDate: string;
@@ -19255,8 +19082,6 @@ export declare function decayComparisonRange(current: {
19255
19082
  startDate: string;
19256
19083
  endDate: string;
19257
19084
  };
19258
- //#endregion
19259
- //#region packages/core/src/analyze/site-diagnostics/decaying-report.d.ts
19260
19085
  export interface DecayingReportInput {
19261
19086
  site: string;
19262
19087
  days?: number;
@@ -19276,11 +19101,7 @@ export interface DecayingDependencies {
19276
19101
  now: () => Date;
19277
19102
  }
19278
19103
  export declare function decayingReportWith(input: DecayingReportInput, dependencies: DecayingDependencies): Promise<DecayReport>;
19279
- //#endregion
19280
- //#region packages/core/src/analyze/site-diagnostics/decaying.d.ts
19281
19104
  export declare function decayingReport(input: DecayingReportInput, dependencies?: DecayingDependencies): Promise<DecayReport>;
19282
- //#endregion
19283
- //#region packages/core/src/analyze/site-ctr-curve.d.ts
19284
19105
  declare const SITE_CTR_CURVE_METHOD: {
19285
19106
  readonly method: "position_bucket_url_p75_v2";
19286
19107
  readonly samplePopulation: "all_qualified_url_samples";
@@ -19302,8 +19123,6 @@ declare const SITE_CTR_CURVE_METHOD: {
19302
19123
  readonly sharedWith: readonly ["quick-wins", "ctr-underperformers"];
19303
19124
  readonly heuristic: true;
19304
19125
  };
19305
- //#endregion
19306
- //#region packages/core/src/analyze/site-diagnostics/quick-wins-types.d.ts
19307
19126
  type QuickWinSelection = {
19308
19127
  sourceRows: number;
19309
19128
  invalidRows: number;
@@ -19439,8 +19258,6 @@ type AnalyzeQuickWinsInput = {
19439
19258
  brandTerms?: string[];
19440
19259
  includeBrand?: boolean;
19441
19260
  };
19442
- //#endregion
19443
- //#region packages/core/src/analyze/site-diagnostics/quick-wins-report.d.ts
19444
19261
  export type QuickWinsInput = {
19445
19262
  site: string;
19446
19263
  days?: number;
@@ -19576,19 +19393,11 @@ export declare function quickWinsReportWith(input: QuickWinsInput, dependencies:
19576
19393
  message: string;
19577
19394
  })[];
19578
19395
  }>;
19579
- //#endregion
19580
- //#region packages/core/src/analyze/site-diagnostics/quick-wins-analysis.d.ts
19581
19396
  export declare function analyzeQuickWinsFromRows(input: AnalyzeQuickWinsInput): QuickWinAnalysis;
19582
- //#endregion
19583
- //#region packages/core/src/analyze/site-diagnostics/quick-wins.d.ts
19584
19397
  export declare function quickWinsReport(input: QuickWinsInput, dependencies?: QuickWinsDependencies): Promise<QuickWinsReport>;
19585
- //#endregion
19586
- //#region packages/core/src/analyze/site-diagnostics/types.d.ts
19587
19398
  export interface TemplateAwareReport {
19588
19399
  templates: TemplateSummary[];
19589
19400
  }
19590
- //#endregion
19591
- //#region packages/core/src/analyze/striking-distance-analysis-types.d.ts
19592
19401
  type StrikingDistanceSelection = {
19593
19402
  sourceRows: number;
19594
19403
  /** Source rows whose page URL had a #fragment; merged into the base URL. */
@@ -19703,11 +19512,7 @@ type AnalyzeStrikingDistanceInput = {
19703
19512
  brandTerms?: string[];
19704
19513
  includeBrand?: boolean;
19705
19514
  };
19706
- //#endregion
19707
- //#region packages/core/src/analyze/striking-distance-analysis.d.ts
19708
19515
  export declare function analyzeStrikingDistanceRows(input: AnalyzeStrikingDistanceInput): StrikingDistanceAnalysis;
19709
- //#endregion
19710
- //#region packages/core/src/analyze/striking-distance-report.d.ts
19711
19516
  export type StrikingDistanceInput = {
19712
19517
  site: string;
19713
19518
  /** Window length in days; ignored when startDate and endDate are given. */
@@ -19784,11 +19589,7 @@ export type StrikingDistanceDependencies = {
19784
19589
  now: () => Date;
19785
19590
  };
19786
19591
  export declare function strikingDistanceWith(input: StrikingDistanceInput, dependencies: StrikingDistanceDependencies): Promise<StrikingDistanceReport>;
19787
- //#endregion
19788
- //#region packages/core/src/analyze/striking-distance.d.ts
19789
19592
  export declare function strikingDistance(input: StrikingDistanceInput, dependencies?: StrikingDistanceDependencies): Promise<StrikingDistanceReport>;
19790
- //#endregion
19791
- //#region packages/core/src/updates/search-updates.d.ts
19792
19593
  interface SearchStatusIncident {
19793
19594
  id: string;
19794
19595
  begin: string;
@@ -19820,8 +19621,6 @@ export declare function findOverlappingSearchUpdates(input: {
19820
19621
  endDate: string;
19821
19622
  paddingDays?: number;
19822
19623
  }): SearchUpdate[];
19823
- //#endregion
19824
- //#region packages/core/src/analyze/traffic-anomaly-analysis.d.ts
19825
19624
  export interface TrafficAnomaly {
19826
19625
  site: string;
19827
19626
  metric: 'clicks' | 'impressions';
@@ -19971,8 +19770,6 @@ export declare function analyzeTrafficAnomalyRows(input: {
19971
19770
  coverage: TrafficAnomalyCoverage;
19972
19771
  detection: TrafficAnomalyDetection;
19973
19772
  };
19974
- //#endregion
19975
- //#region packages/core/src/analyze/traffic-anomaly-report.d.ts
19976
19773
  export type TrafficAnomalyInput = {
19977
19774
  site: string;
19978
19775
  days?: number;
@@ -19986,8 +19783,6 @@ export type TrafficAnomalyDependencies = {
19986
19783
  now: () => Date;
19987
19784
  };
19988
19785
  export declare function trafficAnomalyWith(input: TrafficAnomalyInput, dependencies: TrafficAnomalyDependencies): Promise<TrafficAnomalyReport>;
19989
- //#endregion
19990
- //#region packages/core/src/analyze/traffic-anomaly.d.ts
19991
19786
  export declare function trafficAnomaly(input: TrafficAnomalyInput, dependencies?: TrafficAnomalyDependencies): Promise<TrafficAnomalyReport>;
19992
19787
  export declare function updateCorrelation(input: {
19993
19788
  site: string;
@@ -20000,8 +19795,6 @@ export declare function updateCorrelation(input: {
20000
19795
  refresh?: boolean;
20001
19796
  trafficAnomalies?: TrafficAnomaly[];
20002
19797
  }): Promise<UpdateCorrelationReport>;
20003
- //#endregion
20004
- //#region packages/core/src/analyze/diagnose-property.d.ts
20005
19798
  export type DiagnosisPriority = {
20006
19799
  label: string;
20007
19800
  reason: string;
@@ -20076,8 +19869,6 @@ export declare function diagnoseProperty(input: {
20076
19869
  skipSearchData?: boolean;
20077
19870
  progress?: ProgressReporter;
20078
19871
  }, dependencies?: Partial<DiagnosePropertyDependencies>): Promise<DiagnosePropertyReport>;
20079
- //#endregion
20080
- //#region packages/core/src/decision-model.d.ts
20081
19872
  export type DecisionQuestion = {
20082
19873
  type: 'noul';
20083
19874
  instructions: unknown;
@@ -20151,8 +19942,6 @@ export declare class DecisionRunner {
20151
19942
  private release;
20152
19943
  ask(request: DecisionRequest): Promise<DecisionResponse | null>;
20153
19944
  }
20154
- //#endregion
20155
- //#region packages/core/src/analyze/internal-links-placement.d.ts
20156
19945
  interface LinkSentence {
20157
19946
  text: string;
20158
19947
  section: string;
@@ -20161,8 +19950,6 @@ interface LinkSentence {
20161
19950
  interface TermWeights {
20162
19951
  idf(term: string): number;
20163
19952
  }
20164
- //#endregion
20165
- //#region packages/core/src/analyze/internal-links-index.d.ts
20166
19953
  declare class SiteIndex implements TermWeights {
20167
19954
  private readonly ids;
20168
19955
  private readonly df;
@@ -20181,8 +19968,6 @@ declare class SiteIndex implements TermWeights {
20181
19968
  score: number;
20182
19969
  }>;
20183
19970
  }
20184
- //#endregion
20185
- //#region packages/core/src/analyze/internal-links-crawl.d.ts
20186
19971
  export declare const DEFAULT_MAX_PAGES = 500;
20187
19972
  export declare const MAX_MAX_PAGES = 5000;
20188
19973
  type CrawlSkipReason$1 = 'robots' | 'not-html' | 'http-error' | 'fetch-failed' | 'canonicalised' | 'duplicate' | 'off-site';
@@ -20253,8 +20038,6 @@ interface CrawlInput {
20253
20038
  progress?: ProgressReporter;
20254
20039
  }
20255
20040
  declare function crawlForLinks(input: CrawlInput): Promise<SiteCrawl>;
20256
- //#endregion
20257
- //#region packages/core/src/analyze/internal-links-judge.d.ts
20258
20041
  export declare const PAGE_TYPES: {
20259
20042
  readonly pillar_guide: "A long, broad guide that covers a whole topic and would naturally link out to many narrower pages";
20260
20043
  readonly support_article: "A focused article, post, tutorial, or explainer about one narrower subject";
@@ -20288,8 +20071,6 @@ export declare const LINK_ROLES: {
20288
20071
  };
20289
20072
  type LinkRole = keyof typeof LINK_ROLES;
20290
20073
  type HeldBackReason = 'weak-sentence' | 'no-sentence';
20291
- //#endregion
20292
- //#region packages/core/src/analyze/internal-links-types.d.ts
20293
20074
  interface InternalLinkSuggestion {
20294
20075
  source: string;
20295
20076
  target: string;
@@ -20419,8 +20200,6 @@ interface InternalLinksReport {
20419
20200
  caveats: string[];
20420
20201
  next: string | null;
20421
20202
  }
20422
- //#endregion
20423
- //#region packages/core/src/analyze/internal-links.d.ts
20424
20203
  export interface InternalLinksInput {
20425
20204
  site: string;
20426
20205
  targetUrl?: string;
@@ -20451,8 +20230,6 @@ export interface InternalLinksDependencies {
20451
20230
  }
20452
20231
  export declare function siteStartUrl(site: string): string;
20453
20232
  export declare function internalLinksReport(input: InternalLinksInput, dependencies: Partial<InternalLinksDependencies> & Pick<InternalLinksDependencies, 'searchConsole' | 'decisionModel'>): Promise<InternalLinksReport>;
20454
- //#endregion
20455
- //#region packages/core/src/analyze/url-templates.d.ts
20456
20233
  type PseoTemplateCluster = {
20457
20234
  id: string;
20458
20235
  signature: string;
@@ -20475,8 +20252,6 @@ type PseoTemplateShape = {
20475
20252
  tokenExamples: string[];
20476
20253
  }>;
20477
20254
  };
20478
- //#endregion
20479
- //#region packages/core/src/analyze/monitoring/index-coverage.d.ts
20480
20255
  export type IndexCoverageSourceCompleteness = 'complete' | 'partial' | 'truncated' | 'unknown' | 'unavailable';
20481
20256
  export type IndexCoverageSourceEvidence = {
20482
20257
  completeness: IndexCoverageSourceCompleteness;
@@ -20619,8 +20394,6 @@ export type IndexCoverageSignalsReport = {
20619
20394
  caveats: string[];
20620
20395
  };
20621
20396
  export declare function analyzeIndexCoverageSignals(input: IndexCoverageInput): IndexCoverageSignalsReport;
20622
- //#endregion
20623
- //#region packages/core/src/analyze/monitoring/index-coverage-report.d.ts
20624
20397
  type SearchAnalytics = typeof querySearchAnalytics;
20625
20398
  type FetchSitemap = typeof fetchSitemapUrls;
20626
20399
  export type IndexCoverageReportInput = {
@@ -20666,8 +20439,6 @@ export type IndexCoverageReportDependencies = {
20666
20439
  now: () => Date;
20667
20440
  };
20668
20441
  export declare function indexCoverageSignals(input: IndexCoverageReportInput, dependencies?: IndexCoverageReportDependencies): Promise<IndexCoverageReport>;
20669
- //#endregion
20670
- //#region packages/core/src/analyze/monitoring/redirect-trace.d.ts
20671
20442
  export type RedirectTraceStep = {
20672
20443
  url: string;
20673
20444
  status: number;
@@ -20703,8 +20474,6 @@ export declare function redirectTrace(input: {
20703
20474
  refresh?: boolean;
20704
20475
  js?: boolean | 'auto';
20705
20476
  }): Promise<RedirectTraceReport>;
20706
- //#endregion
20707
- //#region packages/core/src/analyze/monitoring/link-recover.d.ts
20708
20477
  export type LinkRecoverItem = {
20709
20478
  url: string;
20710
20479
  finalUrl: string;
@@ -20753,8 +20522,6 @@ export declare function linkRecover(input: {
20753
20522
  refresh?: boolean;
20754
20523
  js?: boolean | 'auto';
20755
20524
  }): Promise<LinkRecoverReport>;
20756
- //#endregion
20757
- //#region packages/core/src/analyze/performance-types.d.ts
20758
20525
  export type PerformanceRating = 'good' | 'needs-work' | 'poor' | 'unknown';
20759
20526
  export type PerformanceMetric = {
20760
20527
  value?: number;
@@ -20859,8 +20626,6 @@ export type PerformanceAuditReport = {
20859
20626
  caveats: string[];
20860
20627
  raw?: unknown;
20861
20628
  };
20862
- //#endregion
20863
- //#region packages/core/src/analyze/performance-crux.d.ts
20864
20629
  type CruxResult = {
20865
20630
  fieldData?: PerformanceAuditReport['fieldData'];
20866
20631
  status: PerformanceAuditReport['fieldDataStatus'];
@@ -20873,8 +20638,6 @@ export declare function fetchCruxFieldData(input: {
20873
20638
  fetchImpl?: typeof fetch$1;
20874
20639
  timeoutMs?: number;
20875
20640
  }): Promise<CruxResult>;
20876
- //#endregion
20877
- //#region packages/core/src/analyze/performance.d.ts
20878
20641
  export declare function performanceReportIsCacheable(input: {
20879
20642
  report: PerformanceAuditReport;
20880
20643
  customCrux?: boolean;
@@ -20893,8 +20656,6 @@ export declare function performanceAudit(input: {
20893
20656
  includeRaw?: boolean;
20894
20657
  now?: () => Date;
20895
20658
  }): Promise<PerformanceAuditReport>;
20896
- //#endregion
20897
- //#region packages/core/src/analyze/query-cluster-primitives.d.ts
20898
20659
  type QueryClusterRow = {
20899
20660
  query: string;
20900
20661
  impressions: number;
@@ -20910,8 +20671,6 @@ type QueryClusterPage = {
20910
20671
  };
20911
20672
  export declare function queryClusterTokens(query: string): string[];
20912
20673
  export declare function clusterQueryRows(rows: QueryClusterRow[]): QueryClusterRow[][];
20913
- //#endregion
20914
- //#region packages/core/src/analyze/query-cluster-analysis.d.ts
20915
20674
  export declare function analyzeQueryClustersFromRows(input: {
20916
20675
  rows: QueryClusterRow[];
20917
20676
  brand?: string;
@@ -20928,8 +20687,6 @@ export declare function analyzeQueryClustersFromRows(input: {
20928
20687
  minImpressions: number;
20929
20688
  limit: number;
20930
20689
  };
20931
- //#endregion
20932
- //#region packages/core/src/analyze/query-cluster.d.ts
20933
20690
  export type QueryClusterReport = {
20934
20691
  site: string;
20935
20692
  scope?: string;
@@ -20981,8 +20738,6 @@ export declare function buildQueryClusterReportFromRows(input: {
20981
20738
  minImpressions?: number;
20982
20739
  limit?: number;
20983
20740
  }): QueryClusterReport;
20984
- //#endregion
20985
- //#region packages/core/src/analyze/reports/types.d.ts
20986
20741
  export type NarrativeSection = {
20987
20742
  title: string;
20988
20743
  bullets: string[];
@@ -21006,8 +20761,6 @@ export type ReportNarrative = {
21006
20761
  }>;
21007
20762
  diagnosis: DiagnosePropertyReport;
21008
20763
  };
21009
- //#endregion
21010
- //#region packages/core/src/analyze/reports/narrative.d.ts
21011
20764
  export declare function reportNarrative(input: {
21012
20765
  site: string;
21013
20766
  days?: number;
@@ -21027,8 +20780,6 @@ export declare function reportNarrative(input: {
21027
20780
  }): Promise<ReportNarrative & {
21028
20781
  markdown: string;
21029
20782
  }>;
21030
- //#endregion
21031
- //#region packages/core/src/analyze/second-page-report.d.ts
21032
20783
  export type SecondPageInput = {
21033
20784
  site: string;
21034
20785
  /** Window length in days; ignored when startDate and endDate are given. */
@@ -21056,14 +20807,8 @@ export type SecondPageDependencies = {
21056
20807
  now: () => Date;
21057
20808
  };
21058
20809
  export declare function secondPageWith(input: SecondPageInput, dependencies: SecondPageDependencies): Promise<SecondPageReport>;
21059
- //#endregion
21060
- //#region packages/core/src/analyze/second-page-analysis.d.ts
21061
20810
  export declare function analyzeSecondPageRows(input: AnalyzeSecondPageInput): SecondPageAnalysis;
21062
- //#endregion
21063
- //#region packages/core/src/analyze/second-page.d.ts
21064
20811
  export declare function secondPage(input: SecondPageInput, dependencies?: SecondPageDependencies): Promise<SecondPageReport>;
21065
- //#endregion
21066
- //#region packages/core/src/analyze/title-width.d.ts
21067
20812
  export declare const SERP_TITLE_REFERENCE_WIDTH_PX = 580;
21068
20813
  export declare const SERP_TITLE_WIDTH_PROFILE: {
21069
20814
  readonly id: "arial-20-v1";
@@ -21081,8 +20826,6 @@ export type TitleWidthEstimate = {
21081
20826
  fallbackGraphemes: string[];
21082
20827
  };
21083
20828
  export declare function estimateSerpTitleWidth(title: string): TitleWidthEstimate;
21084
- //#endregion
21085
- //#region packages/core/src/analyze/workflows/types.d.ts
21086
20829
  export type WorkflowStep = {
21087
20830
  tool: string;
21088
20831
  status: 'completed' | 'skipped';
@@ -21152,8 +20895,6 @@ export type PriorityQueueItem = {
21152
20895
  action: string;
21153
20896
  evidence: string;
21154
20897
  };
21155
- //#endregion
21156
- //#region packages/core/src/analyze/workflows/crawl-implementation-queue.d.ts
21157
20898
  export type CrawlImplementationQueueItem = PriorityQueueItem & {
21158
20899
  ruleId: string;
21159
20900
  severity: RuleSeverity;
@@ -21173,8 +20914,6 @@ export type CrawlImplementationQueueInput = CrawlConfigInput & {
21173
20914
  };
21174
20915
  export declare function crawlFixToQueueItem(fix: TopFix): CrawlImplementationQueueItem;
21175
20916
  export declare function crawlImplementationQueueWorkflow(input: CrawlImplementationQueueInput, dependencies?: CrawlSiteDependencies): Promise<WorkflowReport<CrawlImplementationQueueOutput>>;
21176
- //#endregion
21177
- //#region packages/core/src/analyze/workflows/diagnose-property.d.ts
21178
20917
  export declare function diagnosePropertyWorkflow(input: {
21179
20918
  site: string;
21180
20919
  days?: number;
@@ -21187,13 +20926,9 @@ export declare function diagnosePropertyWorkflow(input: {
21187
20926
  }): Promise<WorkflowReport<{
21188
20927
  narrative: Awaited<ReturnType<typeof reportNarrative>>;
21189
20928
  }>>;
21190
- //#endregion
21191
- //#region packages/core/src/analyze/workflows/markdown.d.ts
21192
20929
  export declare function renderWorkflowMarkdown(report: WorkflowReport<unknown>, options?: {
21193
20930
  queueLimit?: number;
21194
20931
  }): string;
21195
- //#endregion
21196
- //#region packages/core/src/presentation.d.ts
21197
20932
  export type PresentationScalar = boolean | number | string | null;
21198
20933
  export type PresentationTableColumn = {
21199
20934
  key: string;
@@ -21218,17 +20953,11 @@ export type Presentation = {
21218
20953
  tables: PresentationTable[];
21219
20954
  charts: PresentationChart[];
21220
20955
  };
21221
- //#endregion
21222
- //#region packages/core/src/analyze/workflows/presentation.d.ts
21223
20956
  export declare function workflowPresentation(report: WorkflowReport<unknown>, options?: {
21224
20957
  queueLimit?: number;
21225
20958
  }): Presentation;
21226
- //#endregion
21227
- //#region packages/core/src/analyze/workflows/priority-scoring.d.ts
21228
20959
  type PriorityCategory = 'technical' | 'content' | 'serp' | 'authority' | 'strategy';
21229
20960
  declare function priorityCategory(source: PriorityQueueItem['source'], verification?: QueryContentClassification): PriorityCategory;
21230
- //#endregion
21231
- //#region packages/core/src/analyze/workflows/refresh-priorities.d.ts
21232
20961
  type QueueDraft = Omit<PriorityQueueItem, 'category' | 'score' | 'impact' | 'scoreBreakdown'> & {
21233
20962
  impact: number;
21234
20963
  effort?: 'S' | 'M' | 'L';
@@ -21267,8 +20996,6 @@ export declare function refreshPrioritiesWorkflow(input: {
21267
20996
  warnings: string[];
21268
20997
  diagnosis: Awaited<ReturnType<typeof diagnoseProperty>>;
21269
20998
  }>>;
21270
- //#endregion
21271
- //#region packages/core/src/analyze/workflows/segments.d.ts
21272
20999
  type WorkflowSegmentCoverage = {
21273
21000
  evidenceScope: 'matched-retained-segments';
21274
21001
  eligibleRows: number;
@@ -21290,8 +21017,6 @@ type WorkflowSegmentSplit = {
21290
21017
  warnings: string[];
21291
21018
  };
21292
21019
  declare function splitSegments(report: SegmentImpactReport): WorkflowSegmentSplit;
21293
- //#endregion
21294
- //#region packages/core/src/analyze/workflows/update-postmortem.d.ts
21295
21020
  type SplitSegment = ReturnType<typeof splitSegments>;
21296
21021
  type PostmortemInsight = {
21297
21022
  dimension: 'page' | 'query' | 'device' | 'country';
@@ -21342,8 +21067,6 @@ export declare function updatePostmortemWorkflow(input: {
21342
21067
  updateCorrelation?: typeof updateCorrelation;
21343
21068
  segmentImpact?: typeof segmentImpact;
21344
21069
  }): Promise<WorkflowReport<PostmortemOutput>>;
21345
- //#endregion
21346
- //#region packages/core/src/brand.d.ts
21347
21070
  export declare function normalizeBrandText(value: string): string;
21348
21071
  /**
21349
21072
  * The registrable part of a Search Console property host, using the small
@@ -21367,8 +21090,6 @@ export declare function shouldExcludeBrandQuery(input: {
21367
21090
  brandTerms?: string[];
21368
21091
  includeBrand?: boolean;
21369
21092
  }): boolean;
21370
- //#endregion
21371
- //#region packages/core/src/brand-detect.d.ts
21372
21093
  type BrandEvidence = {
21373
21094
  query: string;
21374
21095
  clicks: number;
@@ -21396,8 +21117,6 @@ export declare function detectBrandTerms(input: {
21396
21117
  suggestedTerms: string[];
21397
21118
  candidates: BrandTermCandidate[];
21398
21119
  }>;
21399
- //#endregion
21400
- //#region packages/core/src/storage/provider-secrets.d.ts
21401
21120
  export declare const PROVIDER_SECRET_NAMES: {
21402
21121
  readonly ahrefsApiKey: "ahrefs-api-key";
21403
21122
  readonly bingApiKey: "bing-api-key";
@@ -21419,8 +21138,6 @@ export declare function readProviderSecret(input: {
21419
21138
  export declare function writeProviderSecret(name: string, value: string): Promise<Exclude<ProviderSecretSource, 'environment'>>;
21420
21139
  export declare function deleteProviderSecret(name: string): Promise<void>;
21421
21140
  export declare function deleteManagedProviderSecrets(): Promise<void>;
21422
- //#endregion
21423
- //#region packages/core/src/clicky/credentials.d.ts
21424
21141
  export declare const CLICKY_SITEKEY_ENV = "SEO_CLICKY_SITEKEY";
21425
21142
  export declare const CLICKY_SITE_KEYS_SECRET: "clicky-sitekeys";
21426
21143
  export type StoredClickySiteKey = {
@@ -21435,23 +21152,15 @@ export declare function readClickySiteKey(siteIdValue: string, input?: {
21435
21152
  }): Promise<StoredClickySiteKey | undefined>;
21436
21153
  export declare function writeClickySiteKey(siteIdValue: string, siteKeyValue: string): Promise<Exclude<ProviderSecretSource, 'environment'>>;
21437
21154
  export declare function deleteClickySiteKey(siteIdValue: string): Promise<void>;
21438
- //#endregion
21439
- //#region packages/core/src/bing/api.d.ts
21440
21155
  type BingCall = (method: string, params?: Record<string, string>) => Promise<unknown>;
21441
- //#endregion
21442
- //#region packages/core/src/commands/sites.d.ts
21443
21156
  type GoogleAccount = {
21444
21157
  email: string | null;
21445
21158
  google: GoogleFetch;
21446
21159
  };
21447
- //#endregion
21448
- //#region packages/core/src/commands/analytics-site.d.ts
21449
21160
  type AnalyticsAccess = {
21450
21161
  accounts: () => Promise<GoogleAccount[]>;
21451
21162
  signIn: string;
21452
21163
  };
21453
- //#endregion
21454
- //#region packages/core/src/commands/audit-checks.d.ts
21455
21164
  type AuditCheckRow = {
21456
21165
  url: string;
21457
21166
  in_sitemap: boolean;
@@ -21517,8 +21226,6 @@ type AuditChecks = {
21517
21226
  started: boolean;
21518
21227
  as_of: number;
21519
21228
  };
21520
- //#endregion
21521
- //#region packages/core/src/commands/audit.d.ts
21522
21229
  type AuditSummary = {
21523
21230
  status: 'done' | 'failed';
21524
21231
  complete: boolean;
@@ -21601,8 +21308,26 @@ type AuditAccess = {
21601
21308
  checks: (site: string, offset: number, limit: number) => Promise<AuditChecks | null>;
21602
21309
  add: (site: string) => Promise<'added' | 'exists' | 'full'>;
21603
21310
  };
21604
- //#endregion
21605
- //#region packages/core/src/commands/page-facts.d.ts
21311
+ declare const ISSUE_MARKS: readonly ["open", "fixed", "ignored"];
21312
+ type IssueMark = (typeof ISSUE_MARKS)[number];
21313
+ type IssueSeen = 'found' | 'not-found' | 'not-checked';
21314
+ type StoredIssue = {
21315
+ id: string;
21316
+ kind: string;
21317
+ subject: string;
21318
+ evidence: string;
21319
+ mark: IssueMark;
21320
+ marked_at: string | null;
21321
+ note: string | null;
21322
+ first_found: string;
21323
+ last_found: string | null;
21324
+ seen: IssueSeen;
21325
+ checked_at: string | null;
21326
+ };
21327
+ type IssueStore = {
21328
+ read: (site: string) => Promise<StoredIssue[] | null>;
21329
+ write: (site: string, issues: StoredIssue[]) => Promise<void>;
21330
+ };
21606
21331
  type RedirectKind = 'permanent' | 'temporary';
21607
21332
  type LiveCheck = {
21608
21333
  first: PageFacts;
@@ -21614,8 +21339,6 @@ type LiveCheck = {
21614
21339
  }[];
21615
21340
  last: PageFacts | null;
21616
21341
  };
21617
- //#endregion
21618
- //#region packages/core/src/commands/types.d.ts
21619
21342
  declare const COMMANDS: {
21620
21343
  readonly report: {
21621
21344
  readonly where: "anywhere";
@@ -21701,6 +21424,7 @@ type CommandDeps = {
21701
21424
  audit?: AuditAccess;
21702
21425
  week?: () => Promise<WeekData | null>;
21703
21426
  startAudit?: (site: string) => Promise<StartAudit>;
21427
+ issues?: IssueStore;
21704
21428
  now?: () => Date;
21705
21429
  };
21706
21430
  type StartAudit = {
@@ -21722,8 +21446,6 @@ type PageMarkdown = {
21722
21446
  } | {
21723
21447
  error: string;
21724
21448
  };
21725
- //#endregion
21726
- //#region packages/core/src/commands/week.d.ts
21727
21449
  type WeekSite = {
21728
21450
  property: string;
21729
21451
  link: string | null;
@@ -21759,8 +21481,6 @@ type WeekData = {
21759
21481
  account: string;
21760
21482
  sites: WeekSite[];
21761
21483
  };
21762
- //#endregion
21763
- //#region packages/core/src/cloud.d.ts
21764
21484
  export declare const CLOUD_URL = "https://seoskill.dev";
21765
21485
  type Pending = {
21766
21486
  device: string;
@@ -21801,8 +21521,6 @@ export declare function pendingCloudLogin(): Pending | null;
21801
21521
  export declare function finishCloudLogin(): Promise<'linked' | 'pending' | 'expired'>;
21802
21522
  export declare function cloudLogout(): Promise<boolean>;
21803
21523
  export declare function openCloudLink(url: string): Promise<void>;
21804
- //#endregion
21805
- //#region packages/core/src/storage/config.d.ts
21806
21524
  export type TokenStorageMode = 'keychain' | 'file';
21807
21525
  export type TokenStorageStatus = {
21808
21526
  configured: TokenStorageMode;
@@ -21840,8 +21558,6 @@ export declare function getPrivacySnapshot(): Array<{
21840
21558
  mode: string;
21841
21559
  sizeBytes: number;
21842
21560
  }>;
21843
- //#endregion
21844
- //#region packages/core/src/gsc/auth/types.d.ts
21845
21561
  interface OAuthClientConfig {
21846
21562
  clientId: string;
21847
21563
  clientSecret: string;
@@ -21850,8 +21566,6 @@ interface OAuthClientConfig {
21850
21566
  interface GoogleAccessTokenClient {
21851
21567
  getAccessToken(): Promise<string>;
21852
21568
  }
21853
- //#endregion
21854
- //#region packages/core/src/gsc/auth/service-account.d.ts
21855
21569
  type ServiceAccountSource = 'environment-json' | 'environment-file' | 'application-default-file';
21856
21570
  export type ServiceAccountConfig = {
21857
21571
  clientEmail: string;
@@ -21875,8 +21589,6 @@ export declare class ServiceAccountAccessTokenClient implements GoogleAccessToke
21875
21589
  constructor(config: ServiceAccountConfig, fetchImpl?: typeof fetch);
21876
21590
  getAccessToken(): Promise<string>;
21877
21591
  }
21878
- //#endregion
21879
- //#region packages/core/src/gsc/auth/authorized-client.d.ts
21880
21592
  export declare function createAuthorizedClient(accountEmail?: string): Promise<{
21881
21593
  client: GoogleAccessTokenClient;
21882
21594
  tokens: StoredTokens;
@@ -21903,25 +21615,17 @@ export declare function authStatus(): Promise<{
21903
21615
  identity?: string;
21904
21616
  serviceAccount: ServiceAccountStatus;
21905
21617
  }>;
21906
- //#endregion
21907
- //#region packages/core/src/gsc/auth/client-config.d.ts
21908
21618
  export declare function getAuthModeStatus(): {
21909
21619
  sharedConfigured: boolean;
21910
21620
  byoConfigured: boolean;
21911
21621
  };
21912
21622
  export declare function getClientConfig(source?: OAuthClientConfig['source']): OAuthClientConfig | undefined;
21913
21623
  export declare function missingOAuthClientMessage(source: OAuthClientConfig['source']): string;
21914
- //#endregion
21915
- //#region packages/core/src/gsc/auth/loopback.d.ts
21916
21624
  export declare function missingSharedClientLoginMessage(): string;
21917
21625
  export declare function loginWithLoopback(clientConfig?: OAuthClientConfig | undefined): Promise<StoredTokens>;
21918
- //#endregion
21919
- //#region packages/core/src/gsc/client/fetch.d.ts
21920
21626
  export declare const LOCAL_SIGN_IN: {
21921
21627
  signIn: string;
21922
21628
  };
21923
- //#endregion
21924
- //#region packages/core/src/commands-node.d.ts
21925
21629
  export declare function nodeCommandDeps(options: {
21926
21630
  call: Caller;
21927
21631
  account?: string;
@@ -21943,8 +21647,6 @@ export declare function resolveLocalSite(site: string, options?: {
21943
21647
  }): Promise<string>;
21944
21648
  export declare function localError(error: unknown): unknown;
21945
21649
  export declare function localGoogleFetch(account?: string): Promise<GoogleFetch>;
21946
- //#endregion
21947
- //#region packages/core/src/storage/sqlite.d.ts
21948
21650
  type TransactionFunction = (...params: never[]) => unknown;
21949
21651
  declare class Statement {
21950
21652
  private readonly statement;
@@ -21969,8 +21671,6 @@ declare namespace SqliteDatabase {
21969
21671
  lastInsertRowid: number | bigint;
21970
21672
  };
21971
21673
  }
21972
- //#endregion
21973
- //#region packages/core/src/storage/database.d.ts
21974
21674
  export declare function ensurePrivateDatabaseFiles(path: string): void;
21975
21675
  export declare function getDb(): SqliteDatabase.Database;
21976
21676
  export declare function cacheDb(): SqliteDatabase.Database;
@@ -21982,8 +21682,6 @@ export declare function checkDatabaseReadiness(): {
21982
21682
  export declare function hashKey(parts: unknown[]): string;
21983
21683
  export declare function getCacheStats(): CacheStats;
21984
21684
  export declare function clearCache(provider?: 'gsc' | 'google-analytics' | 'dataforseo' | 'ahrefs' | 'clicky' | 'http', olderThanMs?: number): number;
21985
- //#endregion
21986
- //#region packages/core/src/doctor.d.ts
21987
21685
  export type DoctorCheck = {
21988
21686
  id: string;
21989
21687
  label: string;
@@ -21999,8 +21697,6 @@ export declare function runDoctor(dependencies?: DoctorDependencies): Promise<{
21999
21697
  generatedAt: string;
22000
21698
  checks: DoctorCheck[];
22001
21699
  }>;
22002
- //#endregion
22003
- //#region packages/core/src/export/csv.d.ts
22004
21700
  export type CsvValue = string | number | boolean | null | undefined;
22005
21701
  export type CsvRow = Record<string, CsvValue>;
22006
21702
  export type CsvFile = {
@@ -22016,8 +21712,6 @@ export declare function refreshPrioritiesCsvFiles(report: WorkflowReport<{
22016
21712
  warnings: string[];
22017
21713
  diagnosis: DiagnosePropertyReport;
22018
21714
  }>): CsvFile[];
22019
- //#endregion
22020
- //#region packages/core/src/export/update-postmortem.d.ts
22021
21715
  type PostmortemCsvReport = WorkflowReport<{
22022
21716
  update: {
22023
21717
  attribution: string;
@@ -22096,8 +21790,6 @@ type SegmentItem = {
22096
21790
  positionDelta: number | null;
22097
21791
  };
22098
21792
  export declare function updatePostmortemCsvFiles(report: PostmortemCsvReport): CsvFile[];
22099
- //#endregion
22100
- //#region packages/core/src/ga4/matching.d.ts
22101
21793
  export type Ga4WebStreamCandidate = {
22102
21794
  account: string;
22103
21795
  property: string;
@@ -22111,8 +21803,6 @@ export type Ga4WebStreamMatch = Ga4WebStreamCandidate & {
22111
21803
  };
22112
21804
  export declare function matchGa4WebStreams(site: string, candidates: Ga4WebStreamCandidate[]): Ga4WebStreamMatch[];
22113
21805
  export declare function ga4MatchReason(match: Ga4WebStreamMatch, site: string): string;
22114
- //#endregion
22115
- //#region packages/core/src/gsc/dates.d.ts
22116
21806
  export declare const GSC_TIME_ZONE = "America/Los_Angeles";
22117
21807
  export declare const GSC_FINAL_DATA_LAG_DAYS = 4;
22118
21808
  export declare function shiftIsoDate(date: string, days: number): string;
@@ -22121,8 +21811,6 @@ export declare function finalGscDateRange(days?: number, now?: Date): {
22121
21811
  startDate: string;
22122
21812
  endDate: string;
22123
21813
  };
22124
- //#endregion
22125
- //#region packages/core/src/gsc/local-export.d.ts
22126
21814
  export declare const DEFAULT_SEARCH_CONSOLE_EXPORT_ROW_LIMIT = 5000;
22127
21815
  export declare const MAX_SEARCH_CONSOLE_EXPORT_ROW_LIMIT = 100000;
22128
21816
  export declare const MAX_SEARCH_CONSOLE_EXPORT_FILES = 20;
@@ -22182,8 +21870,6 @@ export declare function loadSearchConsoleExport(input: {
22182
21870
  now?: Date;
22183
21871
  exportedAt?: Date;
22184
21872
  }): Promise<SearchConsoleExportEvidence>;
22185
- //#endregion
22186
- //#region packages/core/src/gsc/local-export-reconcile.d.ts
22187
21873
  export declare const DEFAULT_UNREACHED_PAGE_LIMIT = 100;
22188
21874
  export type SearchConsoleExportReconciliation = {
22189
21875
  joinBasis: 'path';
@@ -22201,25 +21887,15 @@ export declare function reconcileExportPagesWithCrawl(input: {
22201
21887
  crawlOrigin: string;
22202
21888
  limit?: number;
22203
21889
  }): SearchConsoleExportReconciliation;
22204
- //#endregion
22205
- //#region packages/core/src/gsc/property-url.d.ts
22206
21890
  export declare function normalizeHttpUrl(value: string): string;
22207
21891
  export declare function assertUrlMatchesGscProperty(property: string, value: string): string;
22208
- //#endregion
22209
- //#region packages/core/src/http/read-json.d.ts
22210
21892
  export declare function readJson<T = unknown>(response: Response, label: string, options?: {
22211
21893
  maxBytes?: number;
22212
21894
  }): Promise<T>;
22213
21895
  export declare function readJsonOrUndefined<T = unknown>(response: Response, label: string): Promise<T | undefined>;
22214
- //#endregion
22215
- //#region packages/core/src/logger.d.ts
22216
21896
  export declare function createLogger(runId: string): pino.Logger;
22217
21897
  export declare function makeRunId(): string;
22218
- //#endregion
22219
- //#region packages/core/src/markdown.d.ts
22220
21898
  export declare function renderPresentationTablesMarkdown(tables: PresentationTable[]): string[];
22221
- //#endregion
22222
- //#region packages/core/src/paths.d.ts
22223
21899
  export interface SeoCliPaths {
22224
21900
  configDir: string;
22225
21901
  cacheDir: string;
@@ -22243,12 +21919,8 @@ export declare function migrateLegacyMacConfig(input?: SeoCliPathOptions): void;
22243
21919
  export declare function getSeoCliPaths(): SeoCliPaths;
22244
21920
  export declare function ensureSeoCliDirs(): SeoCliPaths;
22245
21921
  export declare function fileSize(path: string): number;
22246
- //#endregion
22247
- //#region packages/core/src/phrasing.d.ts
22248
21922
  export declare function plural(count: number, singular: string, pluralLabel?: string): string;
22249
21923
  export declare function countLabel(count: number, singular: string, pluralLabel?: string): string;
22250
- //#endregion
22251
- //#region packages/core/src/provider-extensions/actions.d.ts
22252
21924
  export type ProviderActionResult = {
22253
21925
  provider: string;
22254
21926
  action: string;
@@ -22264,13 +21936,9 @@ export declare function runProviderExtensionAction(input: {
22264
21936
  refresh?: boolean;
22265
21937
  runtime?: ProviderRuntimeOptions;
22266
21938
  }): Promise<ProviderActionResult>;
22267
- //#endregion
22268
- //#region packages/core/src/provider-extensions/connections.d.ts
22269
21939
  export declare function readProviderExtensionAccount(providerIdValue: string): Record<string, string>;
22270
21940
  export declare function writeProviderExtensionAccount(providerIdValue: string, account: Readonly<Record<string, string>>): Record<string, string>;
22271
21941
  export declare function deleteProviderExtensionAccount(providerIdValue: string): void;
22272
- //#endregion
22273
- //#region packages/core/src/provider-extensions/credentials.d.ts
22274
21942
  export declare function readProviderExtensionCredentials(input: {
22275
21943
  providerId: string;
22276
21944
  account: Readonly<Record<string, string>>;
@@ -22286,8 +21954,6 @@ export declare function deleteProviderExtensionCredentials(input: {
22286
21954
  providerId: string;
22287
21955
  account: Readonly<Record<string, string>>;
22288
21956
  }): Promise<void>;
22289
- //#endregion
22290
- //#region packages/core/src/provider-extensions/discovery.d.ts
22291
21957
  export declare function listInstalledProviderExtensions(): Promise<{
22292
21958
  schemaVersion: 1;
22293
21959
  installed: {
@@ -22326,8 +21992,6 @@ export declare function describeInstalledProviderExtension(id: string): Promise<
22326
21992
  cacheTtlMs: number;
22327
21993
  }[];
22328
21994
  }>;
22329
- //#endregion
22330
- //#region packages/core/src/provider-extensions/installer.d.ts
22331
21995
  declare const providerPackageReleaseSchema: z.ZodObject<{
22332
21996
  package: z.ZodString;
22333
21997
  version: z.ZodString;
@@ -22355,14 +22019,10 @@ export type ProviderInstallerOptions = {
22355
22019
  export declare function inspectProviderPackage(value: string, options?: ProviderInstallerOptions): Promise<ProviderPackageRelease>;
22356
22020
  export declare function installProviderPackage(input: ProviderPackageRelease, options?: ProviderInstallerOptions): Promise<InstalledProviderPackage>;
22357
22021
  export declare function uninstallProviderExtension(id: string, options?: ProviderInstallerOptions): Promise<InstalledProviderPackage | undefined>;
22358
- //#endregion
22359
- //#region packages/core/src/provider-extensions/store.d.ts
22360
22022
  export declare function readInstalledProviderPackages(): InstalledProviderPackages;
22361
22023
  export declare function writeInstalledProviderPackages(value: InstalledProviderPackages): InstalledProviderPackages;
22362
22024
  export declare function saveInstalledProviderPackage(value: InstalledProviderPackage): InstalledProviderPackages;
22363
22025
  export declare function removeInstalledProviderPackage(id: string): InstalledProviderPackage | undefined;
22364
- //#endregion
22365
- //#region packages/core/src/providers/ahrefs/client.d.ts
22366
22026
  export type AhrefsLimitsAndUsage = {
22367
22027
  provider: 'ahrefs';
22368
22028
  apiVersion: 3;
@@ -22402,8 +22062,6 @@ export declare class AhrefsClient {
22402
22062
  private limitsAndUsageForKey;
22403
22063
  limitsAndUsage(): Promise<AhrefsLimitsAndUsage>;
22404
22064
  }
22405
- //#endregion
22406
- //#region packages/core/src/providers/ahrefs/credentials.d.ts
22407
22065
  export declare const AHREFS_API_KEY_ENV = "SEO_AHREFS_API_KEY";
22408
22066
  export declare const AHREFS_API_KEY_SECRET: "ahrefs-api-key";
22409
22067
  declare const store: {
@@ -22425,8 +22083,6 @@ export declare function readAhrefsApiKey(input?: {
22425
22083
  source: ProviderSecretSource;
22426
22084
  } | undefined>;
22427
22085
  export declare function deleteAhrefsApiKey(): Promise<void>;
22428
- //#endregion
22429
- //#region packages/core/src/providers/bing/credentials.d.ts
22430
22086
  export declare const BING_API_KEY_ENV = "SEO_BING_API_KEY";
22431
22087
  export declare const BING_API_KEY_SECRET: "bing-api-key";
22432
22088
  export declare function writeBingApiKey(value: string): Promise<"file" | "keychain">;
@@ -22437,8 +22093,6 @@ export declare function readBingApiKey(input?: {
22437
22093
  source: ProviderSecretSource;
22438
22094
  } | undefined>;
22439
22095
  export declare function deleteBingApiKey(): Promise<void>;
22440
- //#endregion
22441
- //#region packages/core/src/providers/dataforseo/credentials.d.ts
22442
22096
  export declare const DATAFORSEO_LOGIN_ENV = "SEO_DATAFORSEO_LOGIN";
22443
22097
  export declare const DATAFORSEO_PASSWORD_ENV = "SEO_DATAFORSEO_PASSWORD";
22444
22098
  export declare const DATAFORSEO_CREDENTIAL_SECRET: "dataforseo-credentials";
@@ -22455,8 +22109,6 @@ export declare function readDataForSeoCredentials(input?: {
22455
22109
  env?: NodeJS.ProcessEnv;
22456
22110
  }): Promise<StoredDataForSeoCredentials | undefined>;
22457
22111
  export declare function deleteDataForSeoCredentials(): Promise<void>;
22458
- //#endregion
22459
- //#region packages/core/src/providers/dataforseo/client-types.d.ts
22460
22112
  type DataForSeoAccountSnapshot = {
22461
22113
  provider: 'dataforseo';
22462
22114
  login: string;
@@ -22476,8 +22128,6 @@ type DataForSeoClientOptions = {
22476
22128
  maxResponseBytes?: number;
22477
22129
  now?: () => Date;
22478
22130
  };
22479
- //#endregion
22480
- //#region packages/core/src/providers/dataforseo/client.d.ts
22481
22131
  export declare class DataForSeoClient {
22482
22132
  private readonly fetch;
22483
22133
  private readonly credentials;
@@ -22491,8 +22141,6 @@ export declare class DataForSeoClient {
22491
22141
  private userDataForCredentials;
22492
22142
  userData(): Promise<DataForSeoAccountSnapshot>;
22493
22143
  }
22494
- //#endregion
22495
- //#region packages/core/src/providers/errors.d.ts
22496
22144
  export type ProviderErrorCode = 'configuration' | 'authentication' | 'rate-limit' | 'timeout' | 'response-too-large' | 'invalid-response' | 'remote-error';
22497
22145
  export declare const PROVIDER_ERROR_CODES: Record<ProviderErrorCode, SeoErrorCode>;
22498
22146
  export declare class ProviderError extends Error {
@@ -22512,8 +22160,6 @@ export declare class ProviderError extends Error {
22512
22160
  });
22513
22161
  toJSON(): Record<string, unknown>;
22514
22162
  }
22515
- //#endregion
22516
- //#region packages/core/src/robots-directives.d.ts
22517
22163
  export type RobotsDirective = 'noindex' | 'nofollow' | 'nosnippet';
22518
22164
  export type SnippetControlEvidence = {
22519
22165
  source: 'meta-robots' | 'x-robots-tag';
@@ -22540,8 +22186,6 @@ export declare function effectiveSnippetControl(input: {
22540
22186
  metaRobots?: string | string[];
22541
22187
  xRobotsTag?: string | string[];
22542
22188
  }): EffectiveSnippetControl;
22543
- //#endregion
22544
- //#region packages/core/src/runtime/interfaces.d.ts
22545
22189
  export interface CredentialsProvider {
22546
22190
  getGoogleOAuthClient(): OAuthClientConfig | undefined;
22547
22191
  readGoogleTokens(): Promise<StoredTokens | undefined>;
@@ -22569,8 +22213,50 @@ export declare class JsonFileStorageAdapter implements StorageAdapter {
22569
22213
  private writeAll;
22570
22214
  }
22571
22215
  export declare const localCredentialsProvider: LocalCredentialsProvider;
22572
- //#endregion
22573
- //#region packages/core/src/storage/ledger.d.ts
22216
+ type SiteCheckGroup = 'pages' | 'copy' | 'design' | 'data';
22217
+ type SiteCheckLevel = 'fail' | 'warn';
22218
+ export declare const SITE_CHECK_MAX_PAGES = 10000;
22219
+ export declare const SITE_CHECK_MAX_ISSUES = 1000;
22220
+ export declare const SITEMAP_FILE_URL_LIMIT = 5000;
22221
+ export type BuiltSite = {
22222
+ origin: string;
22223
+ files: readonly string[];
22224
+ readText: (path: string) => Promise<string>;
22225
+ readBytes: (path: string) => Promise<Uint8Array>;
22226
+ allowWords?: readonly string[];
22227
+ sources?: {
22228
+ files: readonly string[];
22229
+ readText: (path: string) => Promise<string>;
22230
+ };
22231
+ now?: Date;
22232
+ };
22233
+ export type SiteCheckIssue = {
22234
+ rule: string;
22235
+ group: SiteCheckGroup;
22236
+ level: SiteCheckLevel;
22237
+ file: string;
22238
+ found: string;
22239
+ fix: string;
22240
+ };
22241
+ export type SiteCheckResult = {
22242
+ status: 'passed' | 'failed' | 'partial';
22243
+ origin: string;
22244
+ pagesFound: number;
22245
+ pagesChecked: number;
22246
+ failures: number;
22247
+ warnings: number;
22248
+ rules: Array<{
22249
+ rule: string;
22250
+ group: SiteCheckGroup;
22251
+ level: SiteCheckLevel;
22252
+ count: number;
22253
+ fix: string;
22254
+ }>;
22255
+ issues: SiteCheckIssue[];
22256
+ issuesOmitted: number;
22257
+ };
22258
+ export declare function builtPagePath(file: string): string;
22259
+ export declare function checkBuiltSite(site: BuiltSite): Promise<SiteCheckResult>;
22574
22260
  export declare class SessionLedger {
22575
22261
  private readonly entries;
22576
22262
  private gscCalls;
@@ -22579,8 +22265,6 @@ export declare class SessionLedger {
22579
22265
  addGsc(calls: number, rows: number): void;
22580
22266
  summary(): string;
22581
22267
  }
22582
- //#endregion
22583
- //#region packages/core/src/storage/log-retention.d.ts
22584
22268
  export declare const LOG_MAX_FILE_BYTES: number;
22585
22269
  export declare const LOG_MAX_TOTAL_BYTES: number;
22586
22270
  export declare const LOG_MAX_AGE_MS: number;
@@ -22596,11 +22280,7 @@ export declare function pruneLogs(options?: {
22596
22280
  maxTotalBytes?: number;
22597
22281
  maxAgeMs?: number;
22598
22282
  }): LogPruneResult;
22599
- //#endregion
22600
- //#region packages/core/src/storage/reset.d.ts
22601
22283
  export declare function resetSeoData(): Promise<void>;
22602
- //#endregion
22603
- //#region packages/core/src/telemetry-failures.d.ts
22604
22284
  export declare const TELEMETRY_ERROR_CATEGORIES: readonly ["auth", "crawl_timeout", "network", "config", "data", "database", "filesystem", "internal", "unknown"];
22605
22285
  export declare const TELEMETRY_FAILURE_REASONS: readonly ["access_denied", "auth_config_required", "auth_expired", "auth_required", "crawl_timeout", "database_constraint", "database_corrupt", "database_locked", "database_read_only", "database_unique_constraint", "filesystem_full", "filesystem_not_found", "filesystem_permission", "insufficient_data", "internal_error", "invalid_input", "network_connection", "network_dns", "network_timeout", "network_tls", "optional_provider_unavailable", "property_not_found", "provider_unavailable", "rate_limited", "unknown"];
22606
22286
  export declare const TELEMETRY_FAILURE_CONTEXTS: readonly ["crawl_pages_run_id_url"];
@@ -22616,13 +22296,9 @@ type TelemetryFailureClassification = {
22616
22296
  };
22617
22297
  export declare function classifyTelemetryFailure(error: unknown): TelemetryFailureClassification;
22618
22298
  export declare function isTelemetryOperation(value: unknown): value is TelemetryOperation;
22619
- //#endregion
22620
- //#region packages/core/src/telemetry-shared.d.ts
22621
22299
  export declare const TELEMETRY_ENDPOINT = "https://seoskill.dev/api/t";
22622
22300
  export declare const TELEMETRY_SCHEMA_VERSION = 2;
22623
22301
  export declare function isoWeek(date: Date): string;
22624
- //#endregion
22625
- //#region packages/core/src/telemetry.d.ts
22626
22302
  export declare const TELEMETRY_TIMEOUT_MS = 2000;
22627
22303
  export declare const TELEMETRY_EVENTS: readonly ["first_run", "setup_complete", "audit_start", "audit_complete", "audit_failed", "command_failed", "first_audit_complete", "active_d1", "active_d7", "active_d30"];
22628
22304
  export declare const TELEMETRY_AGENTS: readonly ["claude-code", "cursor", "codex", "cli", "unknown"];
@@ -22698,8 +22374,6 @@ export declare function trackTelemetryReportFailed(report: string, error: unknow
22698
22374
  export declare function trackTelemetryCommandFailed(operation: string, error: unknown, options?: TelemetryOptions): void;
22699
22375
  export declare function trackTelemetrySetupComplete(options?: TelemetryOptions): void;
22700
22376
  export declare function telemetryErrorCategory(error: unknown): TelemetryErrorCategory;
22701
- //#endregion
22702
- //#region packages/core/src/update-notice.d.ts
22703
22377
  export type UpdateNoticeOptions = {
22704
22378
  argv?: string[];
22705
22379
  cacheFile?: string;
@@ -22710,22 +22384,15 @@ export type UpdateNoticeOptions = {
22710
22384
  };
22711
22385
  export declare function isNewerVersion(current: string, latest: string): boolean;
22712
22386
  export declare function updateNotice(options?: UpdateNoticeOptions): string | undefined;
22713
- //#endregion
22714
- //#region packages/core/src/updates/search-status.d.ts
22715
22387
  export declare const INCIDENTS_URL = "https://status.search.google.com/incidents.json";
22716
22388
  export declare function fetchSearchStatusIncidents(): Promise<SearchStatusIncident[]>;
22717
22389
  export declare function listSearchUpdates(input?: {
22718
22390
  product?: string;
22719
22391
  limit?: number;
22720
22392
  }): Promise<SearchUpdate[]>;
22721
- //#endregion
22722
- //#region packages/core/src/utils/time.d.ts
22723
22393
  export declare function parseOlderThan(input?: string): number | undefined;
22724
22394
  export declare function formatRelativeExpiry(expiresAt: number): string;
22725
22395
  export declare function isoDate(daysAgo?: number): string;
22726
- //#endregion
22727
- //#region packages/core/src/version.d.ts
22728
22396
  export declare const SEO_VERSION: string;
22729
- //#endregion
22730
22397
  export { type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, type AnalyzeCannibalImportRowsInput, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, type CannibalAnalysis, type CannibalImportAnalysis, type CannibalImportItem, type CannibalImportPage, type CannibalImportReport, type CannibalImportSelection, type CannibalItem, type CannibalPage, type CannibalReport, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, type CrawlAiAvailability, type CrawlAiBotAccess, type CrawlAiLinkCheck, type CrawlAiResourceSignal, type CrawlAiSignals, type CrawlSiteChecks, type CrawlSiteDependencies, type CrawlStatusPhase, type CtrUnderperformer, type CtrUnderperformerSelection, type DataForSeoAccountSnapshot, type DataForSeoClientOptions, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, type FetchPageOptions, type FetchRateControls, type Ga4AccountSummary, type Ga4PropertySummary, type GoogleAccessTokenClient, type InternalLinkSuggestion, type InternalLinksPage, type InternalLinksReport, type JavaScriptRenderingInput, type JavaScriptRenderingMode, type OAuthClientConfig, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, type PageOpportunityItem, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, type QueryClusterPage, type QueryClusterRow, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, SEO_PROVIDER_API_VERSION, type SearchStatusIncident, type SearchUpdate, type SecondPageAnalysis, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, type SecondPageSelection, type SegmentDimension, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SeoAnalyticsConnection, SeoAnalyticsLandingPageResult, SeoLandingPageVisitRow, SeoLandingPageVisitsCapability, SeoLandingPageVisitsResult, SeoProviderActionAdapter, SeoProviderActivate, SeoProviderApiVersion, SeoProviderCapabilityAdapter, SeoProviderCapabilityId, SeoProviderConnection, SeoProviderConnectionAdapter, SeoProviderConnectionField, SeoProviderHost, SeoProviderJson, SeoProviderJsonSchema, SeoProviderKind, SeoProviderRegistration, SeoProviderRequest, SeoProviderRuntime, SeoSearchMarket, SeoSerpLocalPackResult, SeoSerpOrganicResult, SeoSerpSnapshotCapability, SeoSerpSnapshotResult, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, type TelemetryErrorCategory, type TelemetryFailureClassification, type TelemetryFailureContext, type TelemetryFailureReason, type TelemetryOperation, type UnmatchedSegment, pageTechnicalSignals as technicalPageSignals };
22731
22398
  //# sourceMappingURL=index.d.ts.map