seo 0.13.3 → 0.15.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 (89) hide show
  1. package/PRIVACY.md +244 -510
  2. package/TERMS.md +57 -72
  3. package/dist/cli.js +88 -84
  4. package/dist/cli.js.map +1 -1
  5. package/dist/{dist-BbTqJIE_.js → dist-Dik5MNDk.js} +1 -1
  6. package/dist/dist-pwGymked.js +449 -0
  7. package/dist/dist-pwGymked.js.map +1 -0
  8. package/dist/{esm-hHlvm1W0.js → esm-DieyhVZ-.js} +95 -188
  9. package/dist/{esm-hHlvm1W0.js.map → esm-DieyhVZ-.js.map} +1 -1
  10. package/dist/index.d.ts +274 -425
  11. package/dist/index.js +5295 -1345
  12. package/dist/index.js.map +1 -1
  13. package/dist/mcp.d.ts +0 -14
  14. package/dist/mcp.js +5048 -1769
  15. package/dist/mcp.js.map +1 -1
  16. package/dist/provider-sdk.d.ts +0 -2
  17. package/dist/provider-sdk.js +1 -2
  18. package/package.json +6 -5
  19. package/site-kit/README.md +13 -0
  20. package/site-kit/guide/build.md +70 -0
  21. package/site-kit/guide/data.md +49 -0
  22. package/site-kit/guide/golden-page.md +50 -0
  23. package/site-kit/guide/grow.md +58 -0
  24. package/site-kit/guide/launch.md +55 -0
  25. package/site-kit/guide/market.md +57 -0
  26. package/site-kit/guide/plan.md +49 -0
  27. package/site-kit/guide/scale.md +41 -0
  28. package/site-kit/guide/setup.md +59 -0
  29. package/site-kit/guide/writing.md +55 -0
  30. package/site-kit/starter/.github/workflows/refresh-data.yml +88 -0
  31. package/site-kit/starter/.node-version +1 -0
  32. package/site-kit/starter/AGENTS.md +65 -0
  33. package/site-kit/starter/README.md +11 -0
  34. package/site-kit/starter/astro.config.mjs +31 -0
  35. package/site-kit/starter/gitignore +7 -0
  36. package/site-kit/starter/llms.config.mjs +38 -0
  37. package/site-kit/starter/package.json +31 -0
  38. package/site-kit/starter/pnpm-workspace.yaml +5 -0
  39. package/site-kit/starter/public/_headers +5 -0
  40. package/site-kit/starter/public/favicon.svg +1 -0
  41. package/site-kit/starter/public/fonts/InterLatinVF.woff2 +0 -0
  42. package/site-kit/starter/public/fonts/JetBrainsMonoLatinVF.woff2 +0 -0
  43. package/site-kit/starter/public/fonts/LICENSE-inter.txt +93 -0
  44. package/site-kit/starter/public/fonts/LICENSE-jetbrains-mono.txt +93 -0
  45. package/site-kit/starter/scripts/deploy.mjs +60 -0
  46. package/site-kit/starter/scripts/markdown-rewrites.mjs +33 -0
  47. package/site-kit/starter/scripts/refresh-data.mjs +60 -0
  48. package/site-kit/starter/scripts/validate-data.mjs +47 -0
  49. package/site-kit/starter/site.config.json +9 -0
  50. package/site-kit/starter/src/components/Breadcrumbs.astro +27 -0
  51. package/site-kit/starter/src/components/Button.astro +46 -0
  52. package/site-kit/starter/src/components/Card.astro +54 -0
  53. package/site-kit/starter/src/components/CodeBlock.astro +62 -0
  54. package/site-kit/starter/src/components/FactTable.astro +45 -0
  55. package/site-kit/starter/src/components/FaqAccordion.astro +143 -0
  56. package/site-kit/starter/src/components/Footer.astro +34 -0
  57. package/site-kit/starter/src/components/FormInput.astro +18 -0
  58. package/site-kit/starter/src/components/FormSelect.astro +34 -0
  59. package/site-kit/starter/src/components/Header.astro +17 -0
  60. package/site-kit/starter/src/components/HugeIcon.astro +36 -0
  61. package/site-kit/starter/src/components/Logo.astro +21 -0
  62. package/site-kit/starter/src/components/PageHeader.astro +33 -0
  63. package/site-kit/starter/src/components/SectionHeading.astro +18 -0
  64. package/site-kit/starter/src/components/ui/button.ts +51 -0
  65. package/site-kit/starter/src/data/parks.json +106 -0
  66. package/site-kit/starter/src/data/sources.json +11 -0
  67. package/site-kit/starter/src/integrations/og-images.ts +49 -0
  68. package/site-kit/starter/src/integrations/sitemaps.ts +104 -0
  69. package/site-kit/starter/src/layouts/Base.astro +69 -0
  70. package/site-kit/starter/src/lib/cn.ts +5 -0
  71. package/site-kit/starter/src/lib/narrative.ts +115 -0
  72. package/site-kit/starter/src/lib/og/card.ts +85 -0
  73. package/site-kit/starter/src/lib/og/path.ts +14 -0
  74. package/site-kit/starter/src/lib/og/render.ts +30 -0
  75. package/site-kit/starter/src/lib/parks.ts +84 -0
  76. package/site-kit/starter/src/lib/seo.ts +97 -0
  77. package/site-kit/starter/src/pages/404.astro +30 -0
  78. package/site-kit/starter/src/pages/about.astro +39 -0
  79. package/site-kit/starter/src/pages/index.astro +52 -0
  80. package/site-kit/starter/src/pages/parks/[slug].astro +95 -0
  81. package/site-kit/starter/src/pages/regions/[region].astro +58 -0
  82. package/site-kit/starter/src/pages/robots.txt.ts +16 -0
  83. package/site-kit/starter/src/site.ts +29 -0
  84. package/site-kit/starter/src/styles/globals.css +561 -0
  85. package/site-kit/starter/tsconfig.json +5 -0
  86. package/site-kit/starter/wrangler.jsonc +16 -0
  87. package/skills/seo/SKILL.md +20 -1
  88. package/dist/dist-DBI-BioS.js +0 -420
  89. 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;
@@ -934,6 +923,32 @@ declare const RULE_DEFINITIONS: readonly [{
934
923
  readonly evidenceFields: ["page.robotsTxt"];
935
924
  readonly suggestedCommands: ["seo crawl <url> --json"];
936
925
  };
926
+ }, {
927
+ readonly id: "robots_txt_html";
928
+ readonly title: "robots.txt returns an HTML page";
929
+ readonly category: "indexability";
930
+ readonly defaultSeverity: "medium";
931
+ readonly whyItMatters: "Crawlers read /robots.txt as plain text rules. An HTML page there, often the home page served for every path, holds no rules and no Sitemap line, so crawlers treat the site as having no robots.txt.";
932
+ readonly howToFix: "Serve a plain text /robots.txt with the rules the site needs and a Sitemap line. Check that the catch-all route does not answer before the static file.";
933
+ readonly impactIfIgnored: "Rules meant to keep crawlers out of some paths do nothing, and crawlers must find the sitemap another way.";
934
+ readonly howToVerify: "Request /robots.txt and confirm a 200 text/plain response with User-agent lines.";
935
+ readonly agentHints: {
936
+ readonly evidenceFields: ["report.ai.robotsTxt"];
937
+ readonly suggestedCommands: ["seo crawl <url> --json"];
938
+ };
939
+ }, {
940
+ readonly id: "sitemap_url_off_host";
941
+ readonly title: "Sitemap lists URLs on another host";
942
+ readonly category: "indexability";
943
+ readonly defaultSeverity: "high";
944
+ readonly whyItMatters: "A sitemap may list only URLs on its own host, unless the other host's robots.txt or Search Console vouches for it. Localhost URLs, left by a build that used a development base URL, can never be fetched. Either way, those entries tell search engines nothing about the real pages.";
945
+ readonly howToFix: "Build the sitemap with the production URL as the base, so every <loc> uses the same scheme and host as the live site.";
946
+ readonly impactIfIgnored: "Search engines find pages only through links, and new or deep pages can take longer to be crawled.";
947
+ readonly howToVerify: "Open the sitemap and confirm every <loc> starts with the live site URL, then re-run the crawl.";
948
+ readonly agentHints: {
949
+ readonly evidenceFields: ["report.sitemapDiscovery.roots[].offHost"];
950
+ readonly suggestedCommands: ["seo crawl <url> --json"];
951
+ };
937
952
  }, {
938
953
  readonly id: "canonicalized_page";
939
954
  readonly title: "Canonicalized page";
@@ -1244,8 +1259,6 @@ export declare function listRules(): RuleInfo[];
1244
1259
  export declare function explainRule(ruleId: string): RuleInfo | undefined;
1245
1260
  export declare function recommendationForRule(ruleId: string): RuleRecommendation;
1246
1261
  export declare function hasRule(ruleId: string): ruleId is RuleId;
1247
- //#endregion
1248
- //#region packages/core/src/brand-evidence.d.ts
1249
1262
  type BrandQueryEvidence = {
1250
1263
  query: string;
1251
1264
  clicks: number;
@@ -1274,8 +1287,6 @@ type ReportBrandTerms = {
1274
1287
  excluded: ExcludedBrandTerm[];
1275
1288
  heuristic: boolean;
1276
1289
  };
1277
- //#endregion
1278
- //#region packages/core/src/analyze/page-patterns.d.ts
1279
1290
  type PageTemplate = {
1280
1291
  id: string;
1281
1292
  label: string;
@@ -1287,8 +1298,6 @@ type TemplateSummary = {
1287
1298
  count: number;
1288
1299
  sampleUrls: string[];
1289
1300
  };
1290
- //#endregion
1291
- //#region packages/core/src/analyze/second-page-analysis-types.d.ts
1292
1301
  type SecondPageSelection = {
1293
1302
  sourceRows: number;
1294
1303
  invalidRows: number;
@@ -1470,8 +1479,6 @@ type SecondPageReport = {
1470
1479
  message: string;
1471
1480
  }>;
1472
1481
  };
1473
- //#endregion
1474
- //#region packages/core/src/types/reports.d.ts
1475
1482
  export interface Recommendation {
1476
1483
  principle: string;
1477
1484
  evidenceRef: string;
@@ -1549,8 +1556,6 @@ export interface CacheStats {
1549
1556
  maxSizeBytes: number;
1550
1557
  counts: Record<string, number>;
1551
1558
  }
1552
- //#endregion
1553
- //#region packages/core/src/analytics/providers.d.ts
1554
1559
  export type AnalyticsProviderDetails = {
1555
1560
  label: string;
1556
1561
  landingMetricLabel: 'sessions' | 'landing-page visits';
@@ -1559,8 +1564,6 @@ export declare const ANALYTICS_PROVIDER_IDS: readonly ["google", "clicky"];
1559
1564
  export declare function analyticsProviderDetails(provider: AnalyticsProvider | string): AnalyticsProviderDetails;
1560
1565
  export declare function analyticsConnectionProviderId(connection: AnalyticsConnection): string;
1561
1566
  export declare function analyticsConnectionLabel(connection: AnalyticsConnection): string;
1562
- //#endregion
1563
- //#region packages/core/src/analyze/agent-report.d.ts
1564
1567
  export type AgentFindingStatus = 'open';
1565
1568
  type AgentFindingBase = {
1566
1569
  id: string;
@@ -1670,8 +1673,6 @@ export declare function buildAgentFindings(report: JsonRecord, options?: AgentRe
1670
1673
  };
1671
1674
  export declare function withAgentReportContract(report: JsonRecord, options?: AgentReportOptions): JsonRecord;
1672
1675
  export declare function agentActionsView(report: JsonRecord, options?: AgentReportOptions): JsonRecord;
1673
- //#endregion
1674
- //#region packages/core/src/errors.d.ts
1675
1676
  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
1677
  export declare class SeoError extends Error {
1677
1678
  readonly code: SeoErrorCode;
@@ -1689,8 +1690,6 @@ export declare function seoErrorEnvelope(error: unknown): {
1689
1690
  retryable: boolean;
1690
1691
  };
1691
1692
  };
1692
- //#endregion
1693
- //#region packages/core/src/ga4/account-summaries.d.ts
1694
1693
  interface Ga4PropertySummary {
1695
1694
  property: string;
1696
1695
  displayName?: string;
@@ -1702,8 +1701,6 @@ interface Ga4AccountSummary {
1702
1701
  displayName?: string;
1703
1702
  propertySummaries: Ga4PropertySummary[];
1704
1703
  }
1705
- //#endregion
1706
- //#region packages/core/src/gsc/client/types.d.ts
1707
1704
  export interface SearchAnalyticsRequest {
1708
1705
  startDate: string;
1709
1706
  endDate: string;
@@ -1764,8 +1761,6 @@ export interface UrlInspectionResult {
1764
1761
  richResultsResult?: unknown;
1765
1762
  };
1766
1763
  }
1767
- //#endregion
1768
- //#region packages/core/src/google/api.d.ts
1769
1764
  export type GoogleFetch = (url: string, init?: RequestInit) => Promise<Response>;
1770
1765
  export type GoogleCallOptions = {
1771
1766
  signIn: string;
@@ -1803,8 +1798,6 @@ export interface Ga4DataStream {
1803
1798
  }
1804
1799
  export declare function listAnalyticsDataStreams(gfetch: GoogleFetch, propertyId: string, options: GoogleCallOptions): Promise<Ga4DataStream[]>;
1805
1800
  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
1801
  export interface Ga4ReportRequest {
1809
1802
  dateRanges: Array<{
1810
1803
  startDate: string;
@@ -1862,8 +1855,6 @@ export declare function listGa4DataStreams(propertyId: string, accountEmail?: st
1862
1855
  export declare function ga4PropertyIdFromName(name: string): string;
1863
1856
  export declare function ga4RowsToObjects(result: Ga4RunReportResult): Array<Record<string, string>>;
1864
1857
  export declare function ga4ReportQualityWarnings(result: Ga4RunReportResult, label?: string): string[];
1865
- //#endregion
1866
- //#region packages/core/src/analyze/ai-referrals-types.d.ts
1867
1858
  type AiReferralMetrics = {
1868
1859
  sessions: number;
1869
1860
  eventCount: number;
@@ -1957,8 +1948,6 @@ type AiReferralReport = {
1957
1948
  }>;
1958
1949
  caveats: string[];
1959
1950
  };
1960
- //#endregion
1961
- //#region packages/core/src/analyze/ai-referrals-analysis.d.ts
1962
1951
  type AiReferralAnalysisInput = {
1963
1952
  property: string;
1964
1953
  generatedAt: string;
@@ -1973,16 +1962,10 @@ type AiReferralAnalysisInput = {
1973
1962
  totalUsersEvidence: AiReferralQueryEvidence;
1974
1963
  };
1975
1964
  export declare function analyzeAiReferralRows(input: AiReferralAnalysisInput): AiReferralReport;
1976
- //#endregion
1977
- //#region packages/core/src/analyze/ai-referrals-query.d.ts
1978
1965
  export declare function sessionSourceInListFilter(values: string[]): unknown;
1979
- //#endregion
1980
- //#region packages/core/src/analyze/ai-referrals-sources.d.ts
1981
1966
  export declare const AI_REFERRAL_SOURCES_VERSION: "ai-referral-sources@1";
1982
1967
  export declare const AI_REFERRAL_SOURCES: readonly AiReferralSourceDefinition[];
1983
1968
  export declare function aiReferralSourceForValue(value: string): AiReferralSourceDefinition | undefined;
1984
- //#endregion
1985
- //#region packages/core/src/analyze/ai-referrals.d.ts
1986
1969
  type RunGa4Report = typeof runGa4Report;
1987
1970
  export declare function aiReferralsReport(input: {
1988
1971
  property: string;
@@ -1996,8 +1979,6 @@ export declare function aiReferralsReport(input: {
1996
1979
  runGa4Report?: RunGa4Report;
1997
1980
  now?: () => Date;
1998
1981
  }): Promise<AiReferralReport>;
1999
- //#endregion
2000
- //#region packages/core/src/fetch/page-fetcher/types.d.ts
2001
1982
  interface FetchRateControls {
2002
1983
  concurrency?: number;
2003
1984
  intervalCap?: number;
@@ -2057,11 +2038,7 @@ type RobotsResult = {
2057
2038
  url: string;
2058
2039
  };
2059
2040
  type RobotsResolver = (origin: string, targetUrl: string) => Promise<RobotsResult>;
2060
- //#endregion
2061
- //#region packages/core/src/fetch/page-fetcher/plain.d.ts
2062
2041
  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
2042
  /**
2066
2043
  * One renderer owns one browser process and a bounded number of isolated
2067
2044
  * contexts. Create it once for a crawl, then close it after the crawl exits.
@@ -2069,19 +2046,13 @@ declare function fetchPlain(url: string, refresh: boolean | undefined, timeoutMs
2069
2046
  export declare function createPageRenderer(input?: {
2070
2047
  concurrency?: number;
2071
2048
  }): PageRenderer;
2072
- //#endregion
2073
- //#region packages/core/src/fetch/page-fetcher/status-probe.d.ts
2074
2049
  export declare function fetchPageStatus(url: string, opts?: FetchPageOptions): Promise<PageFetchResult>;
2075
- //#endregion
2076
- //#region packages/core/src/fetch/page-fetcher.d.ts
2077
2050
  export type FetchPageDependencies = {
2078
2051
  fetchPlain?: typeof fetchPlain;
2079
2052
  createPageRenderer?: typeof createPageRenderer;
2080
2053
  };
2081
2054
  export declare function normalizeJavaScriptRenderingMode(input: JavaScriptRenderingInput | undefined): JavaScriptRenderingMode;
2082
2055
  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
2056
  export declare function urlInspectionQuota(input: {
2086
2057
  siteUrl: string;
2087
2058
  accountEmail?: string;
@@ -2091,8 +2062,6 @@ export declare function urlInspectionQuota(input: {
2091
2062
  resetAt: string;
2092
2063
  }>;
2093
2064
  export declare function inspectUrl(input: UrlInspectionRequest): Promise<UrlInspectionResult>;
2094
- //#endregion
2095
- //#region packages/core/src/gsc/client/search-analytics.d.ts
2096
2065
  export type PageSearchMetrics = {
2097
2066
  clicks: number;
2098
2067
  impressions: number;
@@ -2119,15 +2088,11 @@ export declare function queryPagesMetricsBatch(site: string, pageUrls: string[],
2119
2088
  export declare function queryPageTopQuery(site: string, pageUrl: string, days?: number): Promise<PageTopQuery | undefined>;
2120
2089
  export declare function queryPagesTopQueries(site: string, pageUrls: string[], days?: number): Promise<Map<string, PageTopQuery>>;
2121
2090
  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
2091
  export declare function listSites(_refresh?: boolean, accountEmail?: string): Promise<Array<{
2125
2092
  siteUrl: string;
2126
2093
  permissionLevel?: string;
2127
2094
  siteType?: string;
2128
2095
  }>>;
2129
- //#endregion
2130
- //#region packages/core/src/analyze/audit-page.d.ts
2131
2096
  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
2097
  export type AuditPageDependencies = {
2133
2098
  fetchPage: typeof fetchPage;
@@ -2141,8 +2106,6 @@ export declare function auditPage(input: {
2141
2106
  refresh?: boolean;
2142
2107
  extractor?: 'defuddle' | 'readability';
2143
2108
  }, dependencies?: AuditPageDependencies): Promise<AuditPageReport>;
2144
- //#endregion
2145
- //#region packages/core/src/analyze/content-coverage-analysis.d.ts
2146
2109
  /** Fetches one page. The local binding uses the cached page fetcher. */
2147
2110
  export type PageFetcher = (url: string, options?: FetchPageOptions) => Promise<PageFetchResult>;
2148
2111
  /** Extracts page fields from a fetched page. */
@@ -2186,14 +2149,10 @@ export declare function verifyQueryContentWith(input: VerifyQueryContentInput &
2186
2149
  fetch: PageFetcher;
2187
2150
  extract: PageExtractor;
2188
2151
  }): Promise<QueryContentCoverage>;
2189
- //#endregion
2190
- //#region packages/core/src/analyze/content-coverage.d.ts
2191
2152
  export declare function verifyQueryContent(input: VerifyQueryContentInput & {
2192
2153
  fetch?: PageFetcher;
2193
2154
  extract?: PageExtractor;
2194
2155
  }): Promise<QueryContentCoverage>;
2195
- //#endregion
2196
- //#region packages/core/src/extract/content-sketch.d.ts
2197
2156
  type ContentSketch = {
2198
2157
  version: 1;
2199
2158
  wordCount: number;
@@ -2201,8 +2160,6 @@ type ContentSketch = {
2201
2160
  sampledShingles: number;
2202
2161
  hashes: string[];
2203
2162
  };
2204
- //#endregion
2205
- //#region packages/core/src/extract/main-content.d.ts
2206
2163
  interface DefuddleResult {
2207
2164
  content?: string;
2208
2165
  description?: string;
@@ -2215,8 +2172,6 @@ interface MainContentDependencies {
2215
2172
  useAsync: false;
2216
2173
  }) => DefuddleResult;
2217
2174
  }
2218
- //#endregion
2219
- //#region packages/core/src/extract/page-extractor.d.ts
2220
2175
  type CrawlerExtractionEvidence = {
2221
2176
  h1?: string;
2222
2177
  h1Count: number;
@@ -2259,8 +2214,6 @@ type PageExtraction = ExtractedPage & {
2259
2214
  crawlerEvidence?: CrawlerExtractionEvidence;
2260
2215
  };
2261
2216
  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
2217
  type PageOpportunityType = 'ctr' | 'ranking' | 'content-gap' | 'serp-framing' | 'covered' | 'technical-check' | 'unverified';
2265
2218
  type PageOpportunityBenchmark = {
2266
2219
  applicable: boolean;
@@ -2350,11 +2303,7 @@ type PageOpportunityAnalysisInput = {
2350
2303
  fetchDiagnostics?: PageFetchDiagnostics;
2351
2304
  httpStatus?: number;
2352
2305
  };
2353
- //#endregion
2354
- //#region packages/core/src/analyze/shared.d.ts
2355
2306
  export declare function unicodeTokens(value: string): string[];
2356
- //#endregion
2357
- //#region packages/core/src/analyze/opportunity-primitives.d.ts
2358
2307
  export type OpportunityBenchmarkRow = {
2359
2308
  keys?: string[];
2360
2309
  clicks: number;
@@ -2419,8 +2368,6 @@ export declare function queryOpportunityRecommendation(input: {
2419
2368
  reason: string;
2420
2369
  expectedImpact: string;
2421
2370
  };
2422
- //#endregion
2423
- //#region packages/core/src/analyze/page-technical-signals.d.ts
2424
2371
  type PageTechnicalSignal = Extract<QueryContentSignal, 'http-non-2xx' | 'http-no-content' | 'blocked' | 'fetch-incomplete' | 'redirected' | 'meta-noindex' | 'x-robots-noindex' | 'canonical-mismatch'>;
2425
2372
  declare function pageTechnicalSignals(input: {
2426
2373
  url: string;
@@ -2428,14 +2375,8 @@ declare function pageTechnicalSignals(input: {
2428
2375
  fetchDiagnostics?: PageFetchDiagnostics;
2429
2376
  httpStatus?: number;
2430
2377
  }): PageTechnicalSignal[];
2431
- //#endregion
2432
- //#region packages/core/src/analyze/page-opportunities-analysis.d.ts
2433
2378
  export declare function analyzePageOpportunitiesFromRows(input: PageOpportunityAnalysisInput): PageOpportunityAnalysis;
2434
- //#endregion
2435
- //#region packages/core/src/analyze/page-opportunities-presentation.d.ts
2436
2379
  type PageOpportunityFocus = PageOpportunityType | 'no-data';
2437
- //#endregion
2438
- //#region packages/core/src/analyze/page-opportunities.d.ts
2439
2380
  type SearchAnalytics$2 = typeof querySearchAnalytics;
2440
2381
  type FetchPage = typeof fetchPage;
2441
2382
  type ExtractPage = typeof extractPage;
@@ -2514,8 +2455,6 @@ type PageOpportunityDependencies = {
2514
2455
  now: () => Date;
2515
2456
  };
2516
2457
  export declare function pageOpportunitiesReport(input: PageOpportunityInput, dependencies?: PageOpportunityDependencies): Promise<PageOpportunityReport>;
2517
- //#endregion
2518
- //#region packages/core/src/analyze/content-optimization.d.ts
2519
2458
  export type ContentOptimizationIntent = 'comparison' | 'commercial' | 'how-to' | 'definition' | 'local' | 'navigational' | 'general';
2520
2459
  export type ContentOptimizationReport = {
2521
2460
  site: string;
@@ -2569,8 +2508,6 @@ export declare function contentOptimizationReport(input: {
2569
2508
  refresh?: boolean;
2570
2509
  js?: boolean | 'auto';
2571
2510
  }): Promise<ContentOptimizationReport>;
2572
- //#endregion
2573
- //#region packages/core/src/analyze/monitoring/types.d.ts
2574
2511
  export type CrawlPageSnapshot = {
2575
2512
  url: string;
2576
2513
  finalUrl: string;
@@ -2798,8 +2735,6 @@ export type CrawlRequestObservation = CrawlResponseObservation | {
2798
2735
  error: string;
2799
2736
  extraction: 'not-applicable';
2800
2737
  };
2801
- //#endregion
2802
- //#region packages/core/src/analyze/monitoring/sitemaps.d.ts
2803
2738
  export type SitemapInvalidLoc = {
2804
2739
  sitemapUrl: string;
2805
2740
  kind: 'url' | 'sitemap';
@@ -2883,8 +2818,6 @@ export declare function fetchSitemapUrls(input: {
2883
2818
  limit?: number;
2884
2819
  maxNested?: number;
2885
2820
  }): Promise<SitemapFetchResult>;
2886
- //#endregion
2887
- //#region packages/core/src/analyze/crawler/crawl-skip-reasons.d.ts
2888
2821
  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
2822
  export type CrawlSkipReason = (typeof CRAWL_SKIP_REASONS)[number];
2890
2823
  export type CrawlSkipImpact = 'coverage-affecting' | 'non-impacting';
@@ -2907,11 +2840,7 @@ export declare function normalizeCrawlSkipReasonCounts(input: {
2907
2840
  skippedUrlsByImpact: CrawlSkippedUrlsByImpact;
2908
2841
  };
2909
2842
  export declare function crawlSkipReasonCountsFromRecord(input?: Partial<Record<CrawlSkipReason, number>>): CrawlSkipReasonCount[];
2910
- //#endregion
2911
- //#region packages/core/src/analyze/crawler/crawl-status.d.ts
2912
2843
  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
2844
  export type CrawlOneResult = {
2916
2845
  request?: CrawlRequestObservation;
2917
2846
  page?: CrawlPageSnapshot;
@@ -2919,9 +2848,8 @@ export type CrawlOneResult = {
2919
2848
  warning?: string;
2920
2849
  };
2921
2850
  export declare function crawlOne(url: string, opts?: FetchPageOptions): Promise<CrawlOneResult>;
2851
+ export declare function snapshotFetchedPage(url: string, fetched: PageFetchResult): Promise<CrawlOneResult>;
2922
2852
  export declare function crawlStatusOnly(url: string, opts?: FetchPageOptions): Promise<CrawlOneResult>;
2923
- //#endregion
2924
- //#region packages/core/src/analyze/crawler/site-checks.d.ts
2925
2853
  type CrawlSiteChecks = {
2926
2854
  soft404: {
2927
2855
  status: 'pass' | 'warning' | 'unknown';
@@ -2937,8 +2865,6 @@ type CrawlSiteChecks = {
2937
2865
  complete: boolean;
2938
2866
  };
2939
2867
  };
2940
- //#endregion
2941
- //#region packages/core/src/analyze/crawler/site-crawl-ai-types.d.ts
2942
2868
  type CrawlAiAvailability = 'available' | 'absent' | 'access-blocked' | 'rate-limited' | 'unreachable';
2943
2869
  type CrawlAiBotAccess = {
2944
2870
  userAgent: string;
@@ -2966,6 +2892,8 @@ type CrawlAiSignals = {
2966
2892
  exists: boolean;
2967
2893
  availability: CrawlAiAvailability;
2968
2894
  status?: number;
2895
+ contentType?: string;
2896
+ servesHtml?: boolean;
2969
2897
  error?: string;
2970
2898
  sitemapUrls: string[];
2971
2899
  contentSignals?: string[];
@@ -2976,6 +2904,8 @@ type CrawlAiSignals = {
2976
2904
  exists: boolean;
2977
2905
  availability?: CrawlAiAvailability;
2978
2906
  status?: number;
2907
+ contentType?: string;
2908
+ servesHtml?: boolean;
2979
2909
  error?: string;
2980
2910
  links?: {
2981
2911
  found: number;
@@ -3015,8 +2945,6 @@ type CrawlAiSignals = {
3015
2945
  contentSignal?: string;
3016
2946
  };
3017
2947
  };
3018
- //#endregion
3019
- //#region packages/core/src/analyze/crawler/report.d.ts
3020
2948
  export type CrawlMode = 'site' | 'page' | 'list' | 'sitemap';
3021
2949
  export type CrawlStrategy = 'full' | 'health';
3022
2950
  export declare const MAX_CRAWL_PAGES = 10000;
@@ -3118,6 +3046,12 @@ export type CrawlSitemapDiscovery = {
3118
3046
  documents: SitemapDocument[];
3119
3047
  possiblyTruncated: boolean;
3120
3048
  warnings: string[];
3049
+ offHost?: {
3050
+ count: number;
3051
+ localhost: number;
3052
+ hosts: string[];
3053
+ samples: string[];
3054
+ };
3121
3055
  }>;
3122
3056
  };
3123
3057
  export type CrawlExternalLinkVerification = {
@@ -3280,14 +3214,10 @@ export declare function createCrawlReport(input: {
3280
3214
  generatedAt?: string;
3281
3215
  }): CrawlReport;
3282
3216
  export declare function normalizeLoadedCrawlReport(report: CrawlReport): CrawlReport;
3283
- //#endregion
3284
- //#region packages/core/src/analyze/crawler/audit.d.ts
3285
3217
  export declare function auditCrawlRequests(requests: CrawlRequestObservation[]): CrawlIssue[];
3286
3218
  export declare function auditCrawlPages(pages: CrawlPageSnapshot[], opts?: {
3287
3219
  startUrl?: string;
3288
3220
  }): CrawlIssue[];
3289
- //#endregion
3290
- //#region packages/core/src/analyze/crawler/top-fixes.d.ts
3291
3221
  export type TopFixFilters = {
3292
3222
  category?: RuleCategory | string;
3293
3223
  severity?: RuleSeverity | string;
@@ -3321,8 +3251,6 @@ export type TopFix = CrawlIssueGroup & {
3321
3251
  };
3322
3252
  export declare function topFixes(report: CrawlReport, filters?: TopFixFilters): TopFix[];
3323
3253
  export declare function reviewObservations(report: CrawlReport, filters?: Omit<TopFixFilters, 'recommendation'>): TopFix[];
3324
- //#endregion
3325
- //#region packages/core/src/analyze/crawler/export.d.ts
3326
3254
  export type CrawlOutputFormat = 'pretty' | 'json' | 'csv' | 'html' | 'markdown' | 'junit';
3327
3255
  export declare function renderCrawlCsv(report: CrawlReport): string;
3328
3256
  export declare function renderCrawlPagesCsv(report: CrawlReport): string;
@@ -3330,8 +3258,6 @@ export declare function renderCrawlPretty(report: CrawlReport, fixes?: TopFix[])
3330
3258
  export declare function renderCrawlJunit(report: CrawlReport): string;
3331
3259
  export declare function renderCrawlHtml(report: CrawlReport, fixes?: TopFix[]): string;
3332
3260
  export declare function renderCrawlMarkdownTickets(report: CrawlReport, fixes?: TopFix[]): string;
3333
- //#endregion
3334
- //#region packages/core/src/analyze/crawler/schemas.d.ts
3335
3261
  export declare const crawlerRuleSeveritySchema: z.ZodEnum<{
3336
3262
  high: "high";
3337
3263
  low: "low";
@@ -5354,6 +5280,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5354
5280
  unreachable: "unreachable";
5355
5281
  }>;
5356
5282
  status: z.ZodOptional<z.ZodNumber>;
5283
+ contentType: z.ZodOptional<z.ZodString>;
5284
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
5357
5285
  error: z.ZodOptional<z.ZodString>;
5358
5286
  sitemapUrls: z.ZodArray<z.ZodString>;
5359
5287
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -5380,6 +5308,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5380
5308
  unreachable: "unreachable";
5381
5309
  }>>;
5382
5310
  status: z.ZodOptional<z.ZodNumber>;
5311
+ contentType: z.ZodOptional<z.ZodString>;
5312
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
5383
5313
  error: z.ZodOptional<z.ZodString>;
5384
5314
  links: z.ZodOptional<z.ZodObject<{
5385
5315
  found: z.ZodNumber;
@@ -5515,6 +5445,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
5515
5445
  }, z.core.$strip>>;
5516
5446
  possiblyTruncated: z.ZodBoolean;
5517
5447
  warnings: z.ZodArray<z.ZodString>;
5448
+ offHost: z.ZodOptional<z.ZodObject<{
5449
+ count: z.ZodNumber;
5450
+ localhost: z.ZodNumber;
5451
+ hosts: z.ZodArray<z.ZodString>;
5452
+ samples: z.ZodArray<z.ZodString>;
5453
+ }, z.core.$strip>>;
5518
5454
  }, z.core.$strip>>;
5519
5455
  }, z.core.$strip>>;
5520
5456
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -6659,6 +6595,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6659
6595
  unreachable: "unreachable";
6660
6596
  }>;
6661
6597
  status: z.ZodOptional<z.ZodNumber>;
6598
+ contentType: z.ZodOptional<z.ZodString>;
6599
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
6662
6600
  error: z.ZodOptional<z.ZodString>;
6663
6601
  sitemapUrls: z.ZodArray<z.ZodString>;
6664
6602
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -6685,6 +6623,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6685
6623
  unreachable: "unreachable";
6686
6624
  }>>;
6687
6625
  status: z.ZodOptional<z.ZodNumber>;
6626
+ contentType: z.ZodOptional<z.ZodString>;
6627
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
6688
6628
  error: z.ZodOptional<z.ZodString>;
6689
6629
  links: z.ZodOptional<z.ZodObject<{
6690
6630
  found: z.ZodNumber;
@@ -6820,6 +6760,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6820
6760
  }, z.core.$strip>>;
6821
6761
  possiblyTruncated: z.ZodBoolean;
6822
6762
  warnings: z.ZodArray<z.ZodString>;
6763
+ offHost: z.ZodOptional<z.ZodObject<{
6764
+ count: z.ZodNumber;
6765
+ localhost: z.ZodNumber;
6766
+ hosts: z.ZodArray<z.ZodString>;
6767
+ samples: z.ZodArray<z.ZodString>;
6768
+ }, z.core.$strip>>;
6823
6769
  }, z.core.$strip>>;
6824
6770
  }, z.core.$strip>>;
6825
6771
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -7964,6 +7910,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7964
7910
  unreachable: "unreachable";
7965
7911
  }>;
7966
7912
  status: z.ZodOptional<z.ZodNumber>;
7913
+ contentType: z.ZodOptional<z.ZodString>;
7914
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
7967
7915
  error: z.ZodOptional<z.ZodString>;
7968
7916
  sitemapUrls: z.ZodArray<z.ZodString>;
7969
7917
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -7990,6 +7938,8 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
7990
7938
  unreachable: "unreachable";
7991
7939
  }>>;
7992
7940
  status: z.ZodOptional<z.ZodNumber>;
7941
+ contentType: z.ZodOptional<z.ZodString>;
7942
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
7993
7943
  error: z.ZodOptional<z.ZodString>;
7994
7944
  links: z.ZodOptional<z.ZodObject<{
7995
7945
  found: z.ZodNumber;
@@ -8125,6 +8075,12 @@ export declare const crawlReportSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8125
8075
  }, z.core.$strip>>;
8126
8076
  possiblyTruncated: z.ZodBoolean;
8127
8077
  warnings: z.ZodArray<z.ZodString>;
8078
+ offHost: z.ZodOptional<z.ZodObject<{
8079
+ count: z.ZodNumber;
8080
+ localhost: z.ZodNumber;
8081
+ hosts: z.ZodArray<z.ZodString>;
8082
+ samples: z.ZodArray<z.ZodString>;
8083
+ }, z.core.$strip>>;
8128
8084
  }, z.core.$strip>>;
8129
8085
  }, z.core.$strip>>;
8130
8086
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -9271,6 +9227,8 @@ export declare const crawlerSchemas: {
9271
9227
  unreachable: "unreachable";
9272
9228
  }>;
9273
9229
  status: z.ZodOptional<z.ZodNumber>;
9230
+ contentType: z.ZodOptional<z.ZodString>;
9231
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
9274
9232
  error: z.ZodOptional<z.ZodString>;
9275
9233
  sitemapUrls: z.ZodArray<z.ZodString>;
9276
9234
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -9297,6 +9255,8 @@ export declare const crawlerSchemas: {
9297
9255
  unreachable: "unreachable";
9298
9256
  }>>;
9299
9257
  status: z.ZodOptional<z.ZodNumber>;
9258
+ contentType: z.ZodOptional<z.ZodString>;
9259
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
9300
9260
  error: z.ZodOptional<z.ZodString>;
9301
9261
  links: z.ZodOptional<z.ZodObject<{
9302
9262
  found: z.ZodNumber;
@@ -9432,6 +9392,12 @@ export declare const crawlerSchemas: {
9432
9392
  }, z.core.$strip>>;
9433
9393
  possiblyTruncated: z.ZodBoolean;
9434
9394
  warnings: z.ZodArray<z.ZodString>;
9395
+ offHost: z.ZodOptional<z.ZodObject<{
9396
+ count: z.ZodNumber;
9397
+ localhost: z.ZodNumber;
9398
+ hosts: z.ZodArray<z.ZodString>;
9399
+ samples: z.ZodArray<z.ZodString>;
9400
+ }, z.core.$strip>>;
9435
9401
  }, z.core.$strip>>;
9436
9402
  }, z.core.$strip>>;
9437
9403
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -10576,6 +10542,8 @@ export declare const crawlerSchemas: {
10576
10542
  unreachable: "unreachable";
10577
10543
  }>;
10578
10544
  status: z.ZodOptional<z.ZodNumber>;
10545
+ contentType: z.ZodOptional<z.ZodString>;
10546
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
10579
10547
  error: z.ZodOptional<z.ZodString>;
10580
10548
  sitemapUrls: z.ZodArray<z.ZodString>;
10581
10549
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -10602,6 +10570,8 @@ export declare const crawlerSchemas: {
10602
10570
  unreachable: "unreachable";
10603
10571
  }>>;
10604
10572
  status: z.ZodOptional<z.ZodNumber>;
10573
+ contentType: z.ZodOptional<z.ZodString>;
10574
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
10605
10575
  error: z.ZodOptional<z.ZodString>;
10606
10576
  links: z.ZodOptional<z.ZodObject<{
10607
10577
  found: z.ZodNumber;
@@ -10737,6 +10707,12 @@ export declare const crawlerSchemas: {
10737
10707
  }, z.core.$strip>>;
10738
10708
  possiblyTruncated: z.ZodBoolean;
10739
10709
  warnings: z.ZodArray<z.ZodString>;
10710
+ offHost: z.ZodOptional<z.ZodObject<{
10711
+ count: z.ZodNumber;
10712
+ localhost: z.ZodNumber;
10713
+ hosts: z.ZodArray<z.ZodString>;
10714
+ samples: z.ZodArray<z.ZodString>;
10715
+ }, z.core.$strip>>;
10740
10716
  }, z.core.$strip>>;
10741
10717
  }, z.core.$strip>>;
10742
10718
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -11881,6 +11857,8 @@ export declare const crawlerSchemas: {
11881
11857
  unreachable: "unreachable";
11882
11858
  }>;
11883
11859
  status: z.ZodOptional<z.ZodNumber>;
11860
+ contentType: z.ZodOptional<z.ZodString>;
11861
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
11884
11862
  error: z.ZodOptional<z.ZodString>;
11885
11863
  sitemapUrls: z.ZodArray<z.ZodString>;
11886
11864
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -11907,6 +11885,8 @@ export declare const crawlerSchemas: {
11907
11885
  unreachable: "unreachable";
11908
11886
  }>>;
11909
11887
  status: z.ZodOptional<z.ZodNumber>;
11888
+ contentType: z.ZodOptional<z.ZodString>;
11889
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
11910
11890
  error: z.ZodOptional<z.ZodString>;
11911
11891
  links: z.ZodOptional<z.ZodObject<{
11912
11892
  found: z.ZodNumber;
@@ -12042,6 +12022,12 @@ export declare const crawlerSchemas: {
12042
12022
  }, z.core.$strip>>;
12043
12023
  possiblyTruncated: z.ZodBoolean;
12044
12024
  warnings: z.ZodArray<z.ZodString>;
12025
+ offHost: z.ZodOptional<z.ZodObject<{
12026
+ count: z.ZodNumber;
12027
+ localhost: z.ZodNumber;
12028
+ hosts: z.ZodArray<z.ZodString>;
12029
+ samples: z.ZodArray<z.ZodString>;
12030
+ }, z.core.$strip>>;
12045
12031
  }, z.core.$strip>>;
12046
12032
  }, z.core.$strip>>;
12047
12033
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -14114,6 +14100,8 @@ export declare const crawlerJsonSchemas: {
14114
14100
  unreachable: "unreachable";
14115
14101
  }>;
14116
14102
  status: z.ZodOptional<z.ZodNumber>;
14103
+ contentType: z.ZodOptional<z.ZodString>;
14104
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
14117
14105
  error: z.ZodOptional<z.ZodString>;
14118
14106
  sitemapUrls: z.ZodArray<z.ZodString>;
14119
14107
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -14140,6 +14128,8 @@ export declare const crawlerJsonSchemas: {
14140
14128
  unreachable: "unreachable";
14141
14129
  }>>;
14142
14130
  status: z.ZodOptional<z.ZodNumber>;
14131
+ contentType: z.ZodOptional<z.ZodString>;
14132
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
14143
14133
  error: z.ZodOptional<z.ZodString>;
14144
14134
  links: z.ZodOptional<z.ZodObject<{
14145
14135
  found: z.ZodNumber;
@@ -14275,6 +14265,12 @@ export declare const crawlerJsonSchemas: {
14275
14265
  }, z.core.$strip>>;
14276
14266
  possiblyTruncated: z.ZodBoolean;
14277
14267
  warnings: z.ZodArray<z.ZodString>;
14268
+ offHost: z.ZodOptional<z.ZodObject<{
14269
+ count: z.ZodNumber;
14270
+ localhost: z.ZodNumber;
14271
+ hosts: z.ZodArray<z.ZodString>;
14272
+ samples: z.ZodArray<z.ZodString>;
14273
+ }, z.core.$strip>>;
14278
14274
  }, z.core.$strip>>;
14279
14275
  }, z.core.$strip>>;
14280
14276
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -15419,6 +15415,8 @@ export declare const crawlerJsonSchemas: {
15419
15415
  unreachable: "unreachable";
15420
15416
  }>;
15421
15417
  status: z.ZodOptional<z.ZodNumber>;
15418
+ contentType: z.ZodOptional<z.ZodString>;
15419
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
15422
15420
  error: z.ZodOptional<z.ZodString>;
15423
15421
  sitemapUrls: z.ZodArray<z.ZodString>;
15424
15422
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -15445,6 +15443,8 @@ export declare const crawlerJsonSchemas: {
15445
15443
  unreachable: "unreachable";
15446
15444
  }>>;
15447
15445
  status: z.ZodOptional<z.ZodNumber>;
15446
+ contentType: z.ZodOptional<z.ZodString>;
15447
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
15448
15448
  error: z.ZodOptional<z.ZodString>;
15449
15449
  links: z.ZodOptional<z.ZodObject<{
15450
15450
  found: z.ZodNumber;
@@ -15580,6 +15580,12 @@ export declare const crawlerJsonSchemas: {
15580
15580
  }, z.core.$strip>>;
15581
15581
  possiblyTruncated: z.ZodBoolean;
15582
15582
  warnings: z.ZodArray<z.ZodString>;
15583
+ offHost: z.ZodOptional<z.ZodObject<{
15584
+ count: z.ZodNumber;
15585
+ localhost: z.ZodNumber;
15586
+ hosts: z.ZodArray<z.ZodString>;
15587
+ samples: z.ZodArray<z.ZodString>;
15588
+ }, z.core.$strip>>;
15583
15589
  }, z.core.$strip>>;
15584
15590
  }, z.core.$strip>>;
15585
15591
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -16724,6 +16730,8 @@ export declare const crawlerJsonSchemas: {
16724
16730
  unreachable: "unreachable";
16725
16731
  }>;
16726
16732
  status: z.ZodOptional<z.ZodNumber>;
16733
+ contentType: z.ZodOptional<z.ZodString>;
16734
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
16727
16735
  error: z.ZodOptional<z.ZodString>;
16728
16736
  sitemapUrls: z.ZodArray<z.ZodString>;
16729
16737
  contentSignals: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -16750,6 +16758,8 @@ export declare const crawlerJsonSchemas: {
16750
16758
  unreachable: "unreachable";
16751
16759
  }>>;
16752
16760
  status: z.ZodOptional<z.ZodNumber>;
16761
+ contentType: z.ZodOptional<z.ZodString>;
16762
+ servesHtml: z.ZodOptional<z.ZodBoolean>;
16753
16763
  error: z.ZodOptional<z.ZodString>;
16754
16764
  links: z.ZodOptional<z.ZodObject<{
16755
16765
  found: z.ZodNumber;
@@ -16885,6 +16895,12 @@ export declare const crawlerJsonSchemas: {
16885
16895
  }, z.core.$strip>>;
16886
16896
  possiblyTruncated: z.ZodBoolean;
16887
16897
  warnings: z.ZodArray<z.ZodString>;
16898
+ offHost: z.ZodOptional<z.ZodObject<{
16899
+ count: z.ZodNumber;
16900
+ localhost: z.ZodNumber;
16901
+ hosts: z.ZodArray<z.ZodString>;
16902
+ samples: z.ZodArray<z.ZodString>;
16903
+ }, z.core.$strip>>;
16888
16904
  }, z.core.$strip>>;
16889
16905
  }, z.core.$strip>>;
16890
16906
  externalLinkVerification: z.ZodOptional<z.ZodObject<{
@@ -18020,13 +18036,9 @@ export declare const crawlerJsonSchemas: {
18020
18036
  }, z.core.$strip>>;
18021
18037
  }, z.core.$strip>>;
18022
18038
  };
18023
- //#endregion
18024
- //#region packages/core/src/fetch/crawler-identity.d.ts
18025
18039
  export declare const SEO_CRAWLER_TOKEN = "SEO-Skill";
18026
18040
  export declare const SEO_CRAWLER_USER_AGENT: string;
18027
18041
  export declare const SEO_CRAWLER_IDENTITY: CrawlerIdentity;
18028
- //#endregion
18029
- //#region packages/core/src/fetch/http-client.d.ts
18030
18042
  export type HttpProfile = 'browser' | 'bot';
18031
18043
  export declare class ResponseSizeLimitError extends Error {
18032
18044
  readonly maxBytes: number;
@@ -18039,8 +18051,6 @@ export declare function publicHttpFetch(url: string, input?: RequestInit$1 & {
18039
18051
  profile?: HttpProfile;
18040
18052
  }): Promise<import("undici").Response>;
18041
18053
  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
18054
  export declare const providerExtensionIdSchema: z.ZodString;
18045
18055
  export declare const providerPackageNameSchema: z.ZodString;
18046
18056
  export declare const providerExactVersionSchema: z.ZodString;
@@ -18110,8 +18120,6 @@ export declare const providerRegistrationSchema: z.ZodObject<{
18110
18120
  export type ProviderPackageManifest = z.infer<typeof providerPackageManifestSchema>;
18111
18121
  export type InstalledProviderPackage = z.infer<typeof installedProviderPackageSchema>;
18112
18122
  export type InstalledProviderPackages = z.infer<typeof installedProviderPackagesSchema>;
18113
- //#endregion
18114
- //#region packages/core/src/provider-extensions/registry.d.ts
18115
18123
  export type RegisteredProviderExtension = SeoProviderRegistration & {
18116
18124
  package: string;
18117
18125
  version: string;
@@ -18130,8 +18138,6 @@ export declare class ProviderExtensionRegistry {
18130
18138
  action(providerId: string, actionId: string): SeoProviderActionAdapter | undefined;
18131
18139
  list(): RegisteredProviderExtension[];
18132
18140
  }
18133
- //#endregion
18134
- //#region packages/core/src/provider-extensions/loader.d.ts
18135
18141
  type ImportedProviderModule = {
18136
18142
  default?: unknown;
18137
18143
  };
@@ -18158,16 +18164,12 @@ export declare function loadProviderPackage(input: {
18158
18164
  importModule?: (url: string) => Promise<ImportedProviderModule>;
18159
18165
  }): Promise<RegisteredProviderExtension[]>;
18160
18166
  export declare function loadInstalledProviderExtensions(options?: ProviderExtensionLoaderOptions): Promise<LoadedProviderExtensions>;
18161
- //#endregion
18162
- //#region packages/core/src/providers/imports/research-columns.d.ts
18163
18167
  export declare const RESEARCH_IMPORT_COLUMN_KEYS: readonly ["keyword", "url", "position", "absolutePosition", "searchVolume", "keywordDifficulty", "cpc", "paidCompetition", "intent", "resultCount", "estimatedTraffic", "resultType", "searchVolumeUpdatedAt"];
18164
18168
  export type ResearchImportColumn = (typeof RESEARCH_IMPORT_COLUMN_KEYS)[number];
18165
18169
  export type ResearchImportColumns = Partial<Record<ResearchImportColumn, string>>;
18166
18170
  export declare function normalizedResearchColumnName(value: string): string;
18167
18171
  export declare function researchImportColumns(value: ResearchImportColumns | undefined): ResearchImportColumns | undefined;
18168
18172
  export declare function validateResearchImportColumnSources(columns: ResearchImportColumns | undefined, includedFields: Iterable<string>): void;
18169
- //#endregion
18170
- //#region packages/core/src/providers/contracts.d.ts
18171
18173
  export declare const providerIdSchema: z.ZodString;
18172
18174
  export type ProviderId = z.infer<typeof providerIdSchema>;
18173
18175
  export type ExternalServiceId = string;
@@ -18240,8 +18242,6 @@ export type KeywordMonthlySearch = {
18240
18242
  month: number;
18241
18243
  searchVolume: number;
18242
18244
  };
18243
- //#endregion
18244
- //#region packages/core/src/providers/transport.d.ts
18245
18245
  export type ProviderFetch = (url: string | URL, init?: RequestInit$1) => Promise<Response$1>;
18246
18246
  export type ProviderRequestInput = {
18247
18247
  provider: ExternalServiceId;
@@ -18259,8 +18259,6 @@ export declare function providerRequestText(input: ProviderRequestInput): Promis
18259
18259
  export declare function providerRequestJson<T>(input: ProviderRequestInput & {
18260
18260
  schema: z.ZodType<T>;
18261
18261
  }): Promise<T>;
18262
- //#endregion
18263
- //#region packages/core/src/provider-extensions/runtime.d.ts
18264
18262
  export type ProviderRuntimeOptions = {
18265
18263
  fetch?: ProviderFetch;
18266
18264
  maxRequests?: number;
@@ -18276,8 +18274,6 @@ export declare function verifyProviderExtension(input: {
18276
18274
  credentials: Readonly<Record<string, string>>;
18277
18275
  runtime?: ProviderRuntimeOptions;
18278
18276
  }): Promise<void>;
18279
- //#endregion
18280
- //#region packages/core/src/provider-extensions/analytics.d.ts
18281
18277
  export type AnalyticsProviderRuntimeOptions = ProviderRuntimeOptions;
18282
18278
  export declare function verifyAnalyticsProvider(input: {
18283
18279
  providerId: string;
@@ -18295,8 +18291,6 @@ export declare function runAnalyticsProviderLandingPages(input: {
18295
18291
  refresh?: boolean;
18296
18292
  runtime?: AnalyticsProviderRuntimeOptions;
18297
18293
  }): Promise<SeoLandingPageVisitsResult>;
18298
- //#endregion
18299
- //#region packages/core/src/analyze/workflows/analytics-value.d.ts
18300
18294
  type LandingPageValue = {
18301
18295
  sessions: number;
18302
18296
  totalUsers?: number;
@@ -18330,8 +18324,6 @@ declare function fetchLandingPageValues(input: {
18330
18324
  limit?: number;
18331
18325
  refresh?: boolean;
18332
18326
  }, dependencies?: Partial<LandingPageValueDependencies>): Promise<LandingPageValueResult>;
18333
- //#endregion
18334
- //#region packages/core/src/analyze/crawler/site-crawl-dependencies.d.ts
18335
18327
  type ResolvedCrawlSiteDependencies = {
18336
18328
  fetchPage: typeof crawlOne;
18337
18329
  fetchStatusPage: typeof crawlStatusOnly;
@@ -18350,11 +18342,7 @@ type ResolvedCrawlSiteDependencies = {
18350
18342
  totalMemory: () => number;
18351
18343
  };
18352
18344
  type CrawlSiteDependencies = Partial<ResolvedCrawlSiteDependencies>;
18353
- //#endregion
18354
- //#region packages/core/src/analyze/crawler/site-crawl.d.ts
18355
18345
  export declare function crawlSite(input: CrawlConfigInput, dependencies?: CrawlSiteDependencies): Promise<CrawlReport>;
18356
- //#endregion
18357
- //#region packages/core/src/analyze/query-quality.d.ts
18358
18346
  type QueryFlag = 'likely-automated' | 'navigational-other';
18359
18347
  declare const QUERY_FLAG_METHOD: {
18360
18348
  readonly id: "query_flags_v1";
@@ -18365,8 +18353,6 @@ declare const QUERY_FLAG_METHOD: {
18365
18353
  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
18354
  };
18367
18355
  };
18368
- //#endregion
18369
- //#region packages/core/src/analyze/ctr-underperformers-types.d.ts
18370
18356
  type CtrUnderperformerSelection = {
18371
18357
  sourceRows: number;
18372
18358
  invalidRows: number;
@@ -18419,8 +18405,6 @@ type CtrUnderperformer = {
18419
18405
  confidence: 'low';
18420
18406
  };
18421
18407
  };
18422
- //#endregion
18423
- //#region packages/core/src/analyze/min-impressions-policy.d.ts
18424
18408
  type MinImpressionsScale = {
18425
18409
  share: number;
18426
18410
  floor: number;
@@ -18434,8 +18418,6 @@ type MinImpressionsPolicy = {
18434
18418
  basisImpressions: number;
18435
18419
  scale: MinImpressionsScale;
18436
18420
  };
18437
- //#endregion
18438
- //#region packages/core/src/analyze/ctr-underperformers-report.d.ts
18439
18421
  export interface CtrUnderperformerDependencies {
18440
18422
  searchAnalytics: SearchAnalyticsQuery;
18441
18423
  now: () => Date;
@@ -18547,8 +18529,6 @@ export declare function ctrUnderperformersReportWith(input: CtrUnderperformersIn
18547
18529
  caveats: string[];
18548
18530
  recommendations: string[];
18549
18531
  }>;
18550
- //#endregion
18551
- //#region packages/core/src/analyze/ctr-underperformers-analysis.d.ts
18552
18532
  export declare const CTR_MAX_MIN_IMPRESSIONS = 1000000000;
18553
18533
  export declare const CTR_DEFAULT_LIMIT = 25;
18554
18534
  export declare const CTR_MAX_LIMIT = 100;
@@ -18570,14 +18550,8 @@ export declare function analyzeCtrUnderperformersFromRows(input: {
18570
18550
  brand: ReportBrandTerms;
18571
18551
  benchmarkByPosition: Record<string, PositionBenchmark>;
18572
18552
  };
18573
- //#endregion
18574
- //#region packages/core/src/analyze/ctr-underperformers.d.ts
18575
18553
  export declare function ctrUnderperformersReport(input: CtrUnderperformersInput, dependencies?: CtrUnderperformerDependencies): Promise<CtrUnderperformersReport>;
18576
- //#endregion
18577
- //#region packages/core/src/progress.d.ts
18578
18554
  export type ProgressReporter = (message: string) => void;
18579
- //#endregion
18580
- //#region packages/core/src/analyze/segment-impact-types.d.ts
18581
18555
  type SegmentDimension = 'page' | 'query' | 'country' | 'device';
18582
18556
  type SegmentRange = {
18583
18557
  startDate: string;
@@ -18675,8 +18649,6 @@ type SegmentImpactReport = {
18675
18649
  warnings: string[];
18676
18650
  caveats: string[];
18677
18651
  };
18678
- //#endregion
18679
- //#region packages/core/src/analyze/segment-impact-analysis.d.ts
18680
18652
  export declare function analyzeSegmentRows(input: {
18681
18653
  site: string;
18682
18654
  dimension: SegmentImpactReport['dimension'];
@@ -18695,8 +18667,6 @@ export declare function analyzeSegmentRows(input: {
18695
18667
  beforeRowsFetched?: number;
18696
18668
  afterRowsFetched?: number;
18697
18669
  }): SegmentImpactReport;
18698
- //#endregion
18699
- //#region packages/core/src/analyze/segment-impact-fallback.d.ts
18700
18670
  export declare function unavailableSegmentImpactReport(input: {
18701
18671
  site: string;
18702
18672
  dimension: SegmentDimension;
@@ -18704,8 +18674,6 @@ export declare function unavailableSegmentImpactReport(input: {
18704
18674
  reason: string;
18705
18675
  generatedAt?: string;
18706
18676
  }): SegmentImpactReport;
18707
- //#endregion
18708
- //#region packages/core/src/analyze/segment-impact-input.d.ts
18709
18677
  export declare function segmentRangeDays(range: SegmentRange): number;
18710
18678
  export declare function segmentComparisonRange(after: SegmentRange, compareDays: number): SegmentRange;
18711
18679
  export declare function resolveSegmentRanges(input: {
@@ -18718,8 +18686,6 @@ export declare function resolveSegmentRanges(input: {
18718
18686
  before: SegmentRange;
18719
18687
  after: SegmentRange;
18720
18688
  };
18721
- //#endregion
18722
- //#region packages/core/src/analyze/segment-impact.d.ts
18723
18689
  type SearchAnalytics$1 = typeof querySearchAnalytics;
18724
18690
  export interface SegmentImpactInput {
18725
18691
  site: string;
@@ -18756,8 +18722,6 @@ export declare function compareSegmentRows(input: {
18756
18722
  generatedAt?: string;
18757
18723
  }): SegmentImpactReport;
18758
18724
  export declare function segmentImpact(input: SegmentImpactInput, dependencies?: SegmentImpactDependencies): Promise<SegmentImpactReport>;
18759
- //#endregion
18760
- //#region packages/core/src/providers/domain-contracts.d.ts
18761
18725
  type ResearchImportSource = {
18762
18726
  dataset: 'ranked-keywords';
18763
18727
  file: string;
@@ -18774,13 +18738,9 @@ type RankedKeyword = KeywordMetric & {
18774
18738
  resultType: string;
18775
18739
  estimatedMonthlyTraffic: ProviderValue<number>;
18776
18740
  };
18777
- //#endregion
18778
- //#region packages/core/src/providers/imports/research-rows.d.ts
18779
18741
  type ImportedResearchRow = RankedKeyword & {
18780
18742
  domain: string;
18781
18743
  };
18782
- //#endregion
18783
- //#region packages/core/src/analyze/site-diagnostics/cannibal-types.d.ts
18784
18744
  type CannibalSuppressionReason = 'brand_query';
18785
18745
  interface CannibalSuppression {
18786
18746
  query: string;
@@ -19042,8 +19002,6 @@ interface CannibalAnalysis {
19042
19002
  suppressionSummary: Record<string, number>;
19043
19003
  templates: TemplateSummary[];
19044
19004
  }
19045
- //#endregion
19046
- //#region packages/core/src/analyze/site-diagnostics/cannibal-report.d.ts
19047
19005
  /** Search Console input. Local research-file imports use the Node binding. */
19048
19006
  export interface CannibalSearchConsoleInput {
19049
19007
  site: string;
@@ -19061,13 +19019,16 @@ export interface CannibalDependencies {
19061
19019
  now: () => Date;
19062
19020
  }
19063
19021
  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
19022
  export declare function analyzeCannibalRows(input: AnalyzeCannibalRowsInput): CannibalAnalysis;
19023
+ /**
19024
+ * Empty, partial, filtered or complete. Partial evidence (a possibly capped
19025
+ * source, invalid rows, or a candidate with no query-level demand row) never
19026
+ * becomes filtered, so it cannot read as an all-clear.
19027
+ */
19028
+ export declare function cannibalDataStatus(selection: CannibalSelection, possiblyTruncated: boolean): CannibalReport['dataStatus'];
19029
+ export declare const CANNIBAL_MINIMUM_PAGE_IMPRESSIONS = 10;
19067
19030
  export declare const CANNIBAL_MINIMUM_PAGE_SHARE = 0.1;
19068
19031
  export declare const CANNIBAL_MAXIMUM_DOMINANT_SHARE = 0.8;
19069
- //#endregion
19070
- //#region packages/core/src/analyze/site-diagnostics/cannibal-import.d.ts
19071
19032
  export interface CannibalImportReportInput {
19072
19033
  site: string;
19073
19034
  researchFiles: ResearchImportSource[];
@@ -19080,8 +19041,6 @@ export interface CannibalImportDependencies {
19080
19041
  }
19081
19042
  export declare function analyzeCannibalImportRows(input: AnalyzeCannibalImportRowsInput): CannibalImportAnalysis;
19082
19043
  export declare function cannibalImportReport(input: CannibalImportReportInput, dependencies?: CannibalImportDependencies): Promise<CannibalImportReport>;
19083
- //#endregion
19084
- //#region packages/core/src/analyze/site-diagnostics/cannibal.d.ts
19085
19044
  export interface CannibalReportInput extends CannibalSearchConsoleInput {
19086
19045
  researchFiles?: ResearchImportSource[];
19087
19046
  }
@@ -19091,8 +19050,6 @@ export declare function cannibalReport(input: CannibalReportInput & {
19091
19050
  export declare function cannibalReport(input: CannibalReportInput & {
19092
19051
  researchFiles?: undefined;
19093
19052
  }, dependencies?: CannibalDependencies): Promise<CannibalReport>;
19094
- //#endregion
19095
- //#region packages/core/src/analyze/site-diagnostics/decay-types.d.ts
19096
19053
  type DecayDiagnosis = 'lost_position' | 'lost_ctr' | 'lost_impressions' | 'lost_clicks';
19097
19054
  type DecayComparison = 'previous-period' | 'year-over-year';
19098
19055
  type DecaySignal = 'position_decline' | 'ctr_decline' | 'impression_decline' | 'click_decline';
@@ -19243,11 +19200,7 @@ interface DecayReport {
19243
19200
  ledgerSummary: string;
19244
19201
  warnings: string[];
19245
19202
  }
19246
- //#endregion
19247
- //#region packages/core/src/analyze/site-diagnostics/decay-analysis.d.ts
19248
19203
  export declare function analyzeDecay(input: AnalyzeDecayInput): DecayAnalysis;
19249
- //#endregion
19250
- //#region packages/core/src/analyze/site-diagnostics/decay-report-input.d.ts
19251
19204
  export declare function decayComparisonRange(current: {
19252
19205
  startDate: string;
19253
19206
  endDate: string;
@@ -19255,8 +19208,6 @@ export declare function decayComparisonRange(current: {
19255
19208
  startDate: string;
19256
19209
  endDate: string;
19257
19210
  };
19258
- //#endregion
19259
- //#region packages/core/src/analyze/site-diagnostics/decaying-report.d.ts
19260
19211
  export interface DecayingReportInput {
19261
19212
  site: string;
19262
19213
  days?: number;
@@ -19276,11 +19227,7 @@ export interface DecayingDependencies {
19276
19227
  now: () => Date;
19277
19228
  }
19278
19229
  export declare function decayingReportWith(input: DecayingReportInput, dependencies: DecayingDependencies): Promise<DecayReport>;
19279
- //#endregion
19280
- //#region packages/core/src/analyze/site-diagnostics/decaying.d.ts
19281
19230
  export declare function decayingReport(input: DecayingReportInput, dependencies?: DecayingDependencies): Promise<DecayReport>;
19282
- //#endregion
19283
- //#region packages/core/src/analyze/site-ctr-curve.d.ts
19284
19231
  declare const SITE_CTR_CURVE_METHOD: {
19285
19232
  readonly method: "position_bucket_url_p75_v2";
19286
19233
  readonly samplePopulation: "all_qualified_url_samples";
@@ -19302,8 +19249,6 @@ declare const SITE_CTR_CURVE_METHOD: {
19302
19249
  readonly sharedWith: readonly ["quick-wins", "ctr-underperformers"];
19303
19250
  readonly heuristic: true;
19304
19251
  };
19305
- //#endregion
19306
- //#region packages/core/src/analyze/site-diagnostics/quick-wins-types.d.ts
19307
19252
  type QuickWinSelection = {
19308
19253
  sourceRows: number;
19309
19254
  invalidRows: number;
@@ -19439,8 +19384,6 @@ type AnalyzeQuickWinsInput = {
19439
19384
  brandTerms?: string[];
19440
19385
  includeBrand?: boolean;
19441
19386
  };
19442
- //#endregion
19443
- //#region packages/core/src/analyze/site-diagnostics/quick-wins-report.d.ts
19444
19387
  export type QuickWinsInput = {
19445
19388
  site: string;
19446
19389
  days?: number;
@@ -19576,19 +19519,11 @@ export declare function quickWinsReportWith(input: QuickWinsInput, dependencies:
19576
19519
  message: string;
19577
19520
  })[];
19578
19521
  }>;
19579
- //#endregion
19580
- //#region packages/core/src/analyze/site-diagnostics/quick-wins-analysis.d.ts
19581
19522
  export declare function analyzeQuickWinsFromRows(input: AnalyzeQuickWinsInput): QuickWinAnalysis;
19582
- //#endregion
19583
- //#region packages/core/src/analyze/site-diagnostics/quick-wins.d.ts
19584
19523
  export declare function quickWinsReport(input: QuickWinsInput, dependencies?: QuickWinsDependencies): Promise<QuickWinsReport>;
19585
- //#endregion
19586
- //#region packages/core/src/analyze/site-diagnostics/types.d.ts
19587
19524
  export interface TemplateAwareReport {
19588
19525
  templates: TemplateSummary[];
19589
19526
  }
19590
- //#endregion
19591
- //#region packages/core/src/analyze/striking-distance-analysis-types.d.ts
19592
19527
  type StrikingDistanceSelection = {
19593
19528
  sourceRows: number;
19594
19529
  /** Source rows whose page URL had a #fragment; merged into the base URL. */
@@ -19703,11 +19638,7 @@ type AnalyzeStrikingDistanceInput = {
19703
19638
  brandTerms?: string[];
19704
19639
  includeBrand?: boolean;
19705
19640
  };
19706
- //#endregion
19707
- //#region packages/core/src/analyze/striking-distance-analysis.d.ts
19708
19641
  export declare function analyzeStrikingDistanceRows(input: AnalyzeStrikingDistanceInput): StrikingDistanceAnalysis;
19709
- //#endregion
19710
- //#region packages/core/src/analyze/striking-distance-report.d.ts
19711
19642
  export type StrikingDistanceInput = {
19712
19643
  site: string;
19713
19644
  /** Window length in days; ignored when startDate and endDate are given. */
@@ -19784,11 +19715,7 @@ export type StrikingDistanceDependencies = {
19784
19715
  now: () => Date;
19785
19716
  };
19786
19717
  export declare function strikingDistanceWith(input: StrikingDistanceInput, dependencies: StrikingDistanceDependencies): Promise<StrikingDistanceReport>;
19787
- //#endregion
19788
- //#region packages/core/src/analyze/striking-distance.d.ts
19789
19718
  export declare function strikingDistance(input: StrikingDistanceInput, dependencies?: StrikingDistanceDependencies): Promise<StrikingDistanceReport>;
19790
- //#endregion
19791
- //#region packages/core/src/updates/search-updates.d.ts
19792
19719
  interface SearchStatusIncident {
19793
19720
  id: string;
19794
19721
  begin: string;
@@ -19820,8 +19747,6 @@ export declare function findOverlappingSearchUpdates(input: {
19820
19747
  endDate: string;
19821
19748
  paddingDays?: number;
19822
19749
  }): SearchUpdate[];
19823
- //#endregion
19824
- //#region packages/core/src/analyze/traffic-anomaly-analysis.d.ts
19825
19750
  export interface TrafficAnomaly {
19826
19751
  site: string;
19827
19752
  metric: 'clicks' | 'impressions';
@@ -19971,8 +19896,6 @@ export declare function analyzeTrafficAnomalyRows(input: {
19971
19896
  coverage: TrafficAnomalyCoverage;
19972
19897
  detection: TrafficAnomalyDetection;
19973
19898
  };
19974
- //#endregion
19975
- //#region packages/core/src/analyze/traffic-anomaly-report.d.ts
19976
19899
  export type TrafficAnomalyInput = {
19977
19900
  site: string;
19978
19901
  days?: number;
@@ -19986,8 +19909,6 @@ export type TrafficAnomalyDependencies = {
19986
19909
  now: () => Date;
19987
19910
  };
19988
19911
  export declare function trafficAnomalyWith(input: TrafficAnomalyInput, dependencies: TrafficAnomalyDependencies): Promise<TrafficAnomalyReport>;
19989
- //#endregion
19990
- //#region packages/core/src/analyze/traffic-anomaly.d.ts
19991
19912
  export declare function trafficAnomaly(input: TrafficAnomalyInput, dependencies?: TrafficAnomalyDependencies): Promise<TrafficAnomalyReport>;
19992
19913
  export declare function updateCorrelation(input: {
19993
19914
  site: string;
@@ -20000,8 +19921,6 @@ export declare function updateCorrelation(input: {
20000
19921
  refresh?: boolean;
20001
19922
  trafficAnomalies?: TrafficAnomaly[];
20002
19923
  }): Promise<UpdateCorrelationReport>;
20003
- //#endregion
20004
- //#region packages/core/src/analyze/diagnose-property.d.ts
20005
19924
  export type DiagnosisPriority = {
20006
19925
  label: string;
20007
19926
  reason: string;
@@ -20076,8 +19995,6 @@ export declare function diagnoseProperty(input: {
20076
19995
  skipSearchData?: boolean;
20077
19996
  progress?: ProgressReporter;
20078
19997
  }, dependencies?: Partial<DiagnosePropertyDependencies>): Promise<DiagnosePropertyReport>;
20079
- //#endregion
20080
- //#region packages/core/src/decision-model.d.ts
20081
19998
  export type DecisionQuestion = {
20082
19999
  type: 'noul';
20083
20000
  instructions: unknown;
@@ -20151,8 +20068,6 @@ export declare class DecisionRunner {
20151
20068
  private release;
20152
20069
  ask(request: DecisionRequest): Promise<DecisionResponse | null>;
20153
20070
  }
20154
- //#endregion
20155
- //#region packages/core/src/analyze/internal-links-placement.d.ts
20156
20071
  interface LinkSentence {
20157
20072
  text: string;
20158
20073
  section: string;
@@ -20161,8 +20076,6 @@ interface LinkSentence {
20161
20076
  interface TermWeights {
20162
20077
  idf(term: string): number;
20163
20078
  }
20164
- //#endregion
20165
- //#region packages/core/src/analyze/internal-links-index.d.ts
20166
20079
  declare class SiteIndex implements TermWeights {
20167
20080
  private readonly ids;
20168
20081
  private readonly df;
@@ -20181,8 +20094,6 @@ declare class SiteIndex implements TermWeights {
20181
20094
  score: number;
20182
20095
  }>;
20183
20096
  }
20184
- //#endregion
20185
- //#region packages/core/src/analyze/internal-links-crawl.d.ts
20186
20097
  export declare const DEFAULT_MAX_PAGES = 500;
20187
20098
  export declare const MAX_MAX_PAGES = 5000;
20188
20099
  type CrawlSkipReason$1 = 'robots' | 'not-html' | 'http-error' | 'fetch-failed' | 'canonicalised' | 'duplicate' | 'off-site';
@@ -20203,6 +20114,13 @@ interface CrawledPage {
20203
20114
  length: number;
20204
20115
  };
20205
20116
  }
20117
+ interface SentenceSource {
20118
+ read(ref: {
20119
+ offset: number;
20120
+ length: number;
20121
+ }): Promise<LinkSentence[]>;
20122
+ close(): Promise<void>;
20123
+ }
20206
20124
  interface SiteCrawl {
20207
20125
  origin: string;
20208
20126
  method: 'sitemap' | 'links';
@@ -20210,7 +20128,7 @@ interface SiteCrawl {
20210
20128
  urls: string[];
20211
20129
  pageOfUrl: Map<number, number>;
20212
20130
  index: SiteIndex;
20213
- sentences: SentenceStore;
20131
+ sentences: SentenceSource;
20214
20132
  genericAnchors: Array<{
20215
20133
  source: number;
20216
20134
  href: string;
@@ -20229,22 +20147,6 @@ interface SiteCrawl {
20229
20147
  };
20230
20148
  warnings: string[];
20231
20149
  }
20232
- declare class SentenceStore {
20233
- private readonly dir;
20234
- private readonly handle;
20235
- private size;
20236
- private constructor();
20237
- static open(): Promise<SentenceStore>;
20238
- write(sentences: LinkSentence[]): Promise<{
20239
- offset: number;
20240
- length: number;
20241
- }>;
20242
- read(ref: {
20243
- offset: number;
20244
- length: number;
20245
- }): Promise<LinkSentence[]>;
20246
- close(): Promise<void>;
20247
- }
20248
20150
  interface CrawlInput {
20249
20151
  startUrl: string;
20250
20152
  maxPages: number;
@@ -20252,9 +20154,6 @@ interface CrawlInput {
20252
20154
  refresh?: boolean;
20253
20155
  progress?: ProgressReporter;
20254
20156
  }
20255
- declare function crawlForLinks(input: CrawlInput): Promise<SiteCrawl>;
20256
- //#endregion
20257
- //#region packages/core/src/analyze/internal-links-judge.d.ts
20258
20157
  export declare const PAGE_TYPES: {
20259
20158
  readonly pillar_guide: "A long, broad guide that covers a whole topic and would naturally link out to many narrower pages";
20260
20159
  readonly support_article: "A focused article, post, tutorial, or explainer about one narrower subject";
@@ -20288,8 +20187,6 @@ export declare const LINK_ROLES: {
20288
20187
  };
20289
20188
  type LinkRole = keyof typeof LINK_ROLES;
20290
20189
  type HeldBackReason = 'weak-sentence' | 'no-sentence';
20291
- //#endregion
20292
- //#region packages/core/src/analyze/internal-links-types.d.ts
20293
20190
  interface InternalLinkSuggestion {
20294
20191
  source: string;
20295
20192
  target: string;
@@ -20419,8 +20316,6 @@ interface InternalLinksReport {
20419
20316
  caveats: string[];
20420
20317
  next: string | null;
20421
20318
  }
20422
- //#endregion
20423
- //#region packages/core/src/analyze/internal-links.d.ts
20424
20319
  export interface InternalLinksInput {
20425
20320
  site: string;
20426
20321
  targetUrl?: string;
@@ -20430,9 +20325,10 @@ export interface InternalLinksInput {
20430
20325
  refresh?: boolean;
20431
20326
  }
20432
20327
  export interface InternalLinksDependencies {
20433
- crawl: typeof crawlForLinks;
20328
+ crawl: (input: CrawlInput) => Promise<SiteCrawl>;
20434
20329
  searchConsole: {
20435
20330
  property: string;
20331
+ maxRows?: number;
20436
20332
  query: (request: SearchAnalyticsRequest) => Promise<{
20437
20333
  rows: GscRow[];
20438
20334
  rowsFetched: number;
@@ -20450,9 +20346,8 @@ export interface InternalLinksDependencies {
20450
20346
  progress?: ProgressReporter;
20451
20347
  }
20452
20348
  export declare function siteStartUrl(site: string): string;
20349
+ export declare function internalLinksReportWith(input: InternalLinksInput, dependencies: Partial<InternalLinksDependencies> & Pick<InternalLinksDependencies, 'crawl' | 'searchConsole' | 'decisionModel'>): Promise<InternalLinksReport>;
20453
20350
  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
20351
  type PseoTemplateCluster = {
20457
20352
  id: string;
20458
20353
  signature: string;
@@ -20475,8 +20370,6 @@ type PseoTemplateShape = {
20475
20370
  tokenExamples: string[];
20476
20371
  }>;
20477
20372
  };
20478
- //#endregion
20479
- //#region packages/core/src/analyze/monitoring/index-coverage.d.ts
20480
20373
  export type IndexCoverageSourceCompleteness = 'complete' | 'partial' | 'truncated' | 'unknown' | 'unavailable';
20481
20374
  export type IndexCoverageSourceEvidence = {
20482
20375
  completeness: IndexCoverageSourceCompleteness;
@@ -20619,8 +20512,6 @@ export type IndexCoverageSignalsReport = {
20619
20512
  caveats: string[];
20620
20513
  };
20621
20514
  export declare function analyzeIndexCoverageSignals(input: IndexCoverageInput): IndexCoverageSignalsReport;
20622
- //#endregion
20623
- //#region packages/core/src/analyze/monitoring/index-coverage-report.d.ts
20624
20515
  type SearchAnalytics = typeof querySearchAnalytics;
20625
20516
  type FetchSitemap = typeof fetchSitemapUrls;
20626
20517
  export type IndexCoverageReportInput = {
@@ -20666,8 +20557,6 @@ export type IndexCoverageReportDependencies = {
20666
20557
  now: () => Date;
20667
20558
  };
20668
20559
  export declare function indexCoverageSignals(input: IndexCoverageReportInput, dependencies?: IndexCoverageReportDependencies): Promise<IndexCoverageReport>;
20669
- //#endregion
20670
- //#region packages/core/src/analyze/monitoring/redirect-trace.d.ts
20671
20560
  export type RedirectTraceStep = {
20672
20561
  url: string;
20673
20562
  status: number;
@@ -20703,8 +20592,6 @@ export declare function redirectTrace(input: {
20703
20592
  refresh?: boolean;
20704
20593
  js?: boolean | 'auto';
20705
20594
  }): Promise<RedirectTraceReport>;
20706
- //#endregion
20707
- //#region packages/core/src/analyze/monitoring/link-recover.d.ts
20708
20595
  export type LinkRecoverItem = {
20709
20596
  url: string;
20710
20597
  finalUrl: string;
@@ -20753,8 +20640,6 @@ export declare function linkRecover(input: {
20753
20640
  refresh?: boolean;
20754
20641
  js?: boolean | 'auto';
20755
20642
  }): Promise<LinkRecoverReport>;
20756
- //#endregion
20757
- //#region packages/core/src/analyze/performance-types.d.ts
20758
20643
  export type PerformanceRating = 'good' | 'needs-work' | 'poor' | 'unknown';
20759
20644
  export type PerformanceMetric = {
20760
20645
  value?: number;
@@ -20859,8 +20744,6 @@ export type PerformanceAuditReport = {
20859
20744
  caveats: string[];
20860
20745
  raw?: unknown;
20861
20746
  };
20862
- //#endregion
20863
- //#region packages/core/src/analyze/performance-crux.d.ts
20864
20747
  type CruxResult = {
20865
20748
  fieldData?: PerformanceAuditReport['fieldData'];
20866
20749
  status: PerformanceAuditReport['fieldDataStatus'];
@@ -20873,8 +20756,6 @@ export declare function fetchCruxFieldData(input: {
20873
20756
  fetchImpl?: typeof fetch$1;
20874
20757
  timeoutMs?: number;
20875
20758
  }): Promise<CruxResult>;
20876
- //#endregion
20877
- //#region packages/core/src/analyze/performance.d.ts
20878
20759
  export declare function performanceReportIsCacheable(input: {
20879
20760
  report: PerformanceAuditReport;
20880
20761
  customCrux?: boolean;
@@ -20893,8 +20774,6 @@ export declare function performanceAudit(input: {
20893
20774
  includeRaw?: boolean;
20894
20775
  now?: () => Date;
20895
20776
  }): Promise<PerformanceAuditReport>;
20896
- //#endregion
20897
- //#region packages/core/src/analyze/query-cluster-primitives.d.ts
20898
20777
  type QueryClusterRow = {
20899
20778
  query: string;
20900
20779
  impressions: number;
@@ -20910,8 +20789,6 @@ type QueryClusterPage = {
20910
20789
  };
20911
20790
  export declare function queryClusterTokens(query: string): string[];
20912
20791
  export declare function clusterQueryRows(rows: QueryClusterRow[]): QueryClusterRow[][];
20913
- //#endregion
20914
- //#region packages/core/src/analyze/query-cluster-analysis.d.ts
20915
20792
  export declare function analyzeQueryClustersFromRows(input: {
20916
20793
  rows: QueryClusterRow[];
20917
20794
  brand?: string;
@@ -20928,8 +20805,6 @@ export declare function analyzeQueryClustersFromRows(input: {
20928
20805
  minImpressions: number;
20929
20806
  limit: number;
20930
20807
  };
20931
- //#endregion
20932
- //#region packages/core/src/analyze/query-cluster.d.ts
20933
20808
  export type QueryClusterReport = {
20934
20809
  site: string;
20935
20810
  scope?: string;
@@ -20981,8 +20856,6 @@ export declare function buildQueryClusterReportFromRows(input: {
20981
20856
  minImpressions?: number;
20982
20857
  limit?: number;
20983
20858
  }): QueryClusterReport;
20984
- //#endregion
20985
- //#region packages/core/src/analyze/reports/types.d.ts
20986
20859
  export type NarrativeSection = {
20987
20860
  title: string;
20988
20861
  bullets: string[];
@@ -21006,8 +20879,6 @@ export type ReportNarrative = {
21006
20879
  }>;
21007
20880
  diagnosis: DiagnosePropertyReport;
21008
20881
  };
21009
- //#endregion
21010
- //#region packages/core/src/analyze/reports/narrative.d.ts
21011
20882
  export declare function reportNarrative(input: {
21012
20883
  site: string;
21013
20884
  days?: number;
@@ -21027,8 +20898,6 @@ export declare function reportNarrative(input: {
21027
20898
  }): Promise<ReportNarrative & {
21028
20899
  markdown: string;
21029
20900
  }>;
21030
- //#endregion
21031
- //#region packages/core/src/analyze/second-page-report.d.ts
21032
20901
  export type SecondPageInput = {
21033
20902
  site: string;
21034
20903
  /** Window length in days; ignored when startDate and endDate are given. */
@@ -21056,14 +20925,8 @@ export type SecondPageDependencies = {
21056
20925
  now: () => Date;
21057
20926
  };
21058
20927
  export declare function secondPageWith(input: SecondPageInput, dependencies: SecondPageDependencies): Promise<SecondPageReport>;
21059
- //#endregion
21060
- //#region packages/core/src/analyze/second-page-analysis.d.ts
21061
20928
  export declare function analyzeSecondPageRows(input: AnalyzeSecondPageInput): SecondPageAnalysis;
21062
- //#endregion
21063
- //#region packages/core/src/analyze/second-page.d.ts
21064
20929
  export declare function secondPage(input: SecondPageInput, dependencies?: SecondPageDependencies): Promise<SecondPageReport>;
21065
- //#endregion
21066
- //#region packages/core/src/analyze/title-width.d.ts
21067
20930
  export declare const SERP_TITLE_REFERENCE_WIDTH_PX = 580;
21068
20931
  export declare const SERP_TITLE_WIDTH_PROFILE: {
21069
20932
  readonly id: "arial-20-v1";
@@ -21081,8 +20944,6 @@ export type TitleWidthEstimate = {
21081
20944
  fallbackGraphemes: string[];
21082
20945
  };
21083
20946
  export declare function estimateSerpTitleWidth(title: string): TitleWidthEstimate;
21084
- //#endregion
21085
- //#region packages/core/src/analyze/workflows/types.d.ts
21086
20947
  export type WorkflowStep = {
21087
20948
  tool: string;
21088
20949
  status: 'completed' | 'skipped';
@@ -21152,8 +21013,6 @@ export type PriorityQueueItem = {
21152
21013
  action: string;
21153
21014
  evidence: string;
21154
21015
  };
21155
- //#endregion
21156
- //#region packages/core/src/analyze/workflows/crawl-implementation-queue.d.ts
21157
21016
  export type CrawlImplementationQueueItem = PriorityQueueItem & {
21158
21017
  ruleId: string;
21159
21018
  severity: RuleSeverity;
@@ -21173,8 +21032,6 @@ export type CrawlImplementationQueueInput = CrawlConfigInput & {
21173
21032
  };
21174
21033
  export declare function crawlFixToQueueItem(fix: TopFix): CrawlImplementationQueueItem;
21175
21034
  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
21035
  export declare function diagnosePropertyWorkflow(input: {
21179
21036
  site: string;
21180
21037
  days?: number;
@@ -21187,13 +21044,9 @@ export declare function diagnosePropertyWorkflow(input: {
21187
21044
  }): Promise<WorkflowReport<{
21188
21045
  narrative: Awaited<ReturnType<typeof reportNarrative>>;
21189
21046
  }>>;
21190
- //#endregion
21191
- //#region packages/core/src/analyze/workflows/markdown.d.ts
21192
21047
  export declare function renderWorkflowMarkdown(report: WorkflowReport<unknown>, options?: {
21193
21048
  queueLimit?: number;
21194
21049
  }): string;
21195
- //#endregion
21196
- //#region packages/core/src/presentation.d.ts
21197
21050
  export type PresentationScalar = boolean | number | string | null;
21198
21051
  export type PresentationTableColumn = {
21199
21052
  key: string;
@@ -21218,17 +21071,11 @@ export type Presentation = {
21218
21071
  tables: PresentationTable[];
21219
21072
  charts: PresentationChart[];
21220
21073
  };
21221
- //#endregion
21222
- //#region packages/core/src/analyze/workflows/presentation.d.ts
21223
21074
  export declare function workflowPresentation(report: WorkflowReport<unknown>, options?: {
21224
21075
  queueLimit?: number;
21225
21076
  }): Presentation;
21226
- //#endregion
21227
- //#region packages/core/src/analyze/workflows/priority-scoring.d.ts
21228
21077
  type PriorityCategory = 'technical' | 'content' | 'serp' | 'authority' | 'strategy';
21229
21078
  declare function priorityCategory(source: PriorityQueueItem['source'], verification?: QueryContentClassification): PriorityCategory;
21230
- //#endregion
21231
- //#region packages/core/src/analyze/workflows/refresh-priorities.d.ts
21232
21079
  type QueueDraft = Omit<PriorityQueueItem, 'category' | 'score' | 'impact' | 'scoreBreakdown'> & {
21233
21080
  impact: number;
21234
21081
  effort?: 'S' | 'M' | 'L';
@@ -21267,8 +21114,6 @@ export declare function refreshPrioritiesWorkflow(input: {
21267
21114
  warnings: string[];
21268
21115
  diagnosis: Awaited<ReturnType<typeof diagnoseProperty>>;
21269
21116
  }>>;
21270
- //#endregion
21271
- //#region packages/core/src/analyze/workflows/segments.d.ts
21272
21117
  type WorkflowSegmentCoverage = {
21273
21118
  evidenceScope: 'matched-retained-segments';
21274
21119
  eligibleRows: number;
@@ -21290,8 +21135,6 @@ type WorkflowSegmentSplit = {
21290
21135
  warnings: string[];
21291
21136
  };
21292
21137
  declare function splitSegments(report: SegmentImpactReport): WorkflowSegmentSplit;
21293
- //#endregion
21294
- //#region packages/core/src/analyze/workflows/update-postmortem.d.ts
21295
21138
  type SplitSegment = ReturnType<typeof splitSegments>;
21296
21139
  type PostmortemInsight = {
21297
21140
  dimension: 'page' | 'query' | 'device' | 'country';
@@ -21342,8 +21185,6 @@ export declare function updatePostmortemWorkflow(input: {
21342
21185
  updateCorrelation?: typeof updateCorrelation;
21343
21186
  segmentImpact?: typeof segmentImpact;
21344
21187
  }): Promise<WorkflowReport<PostmortemOutput>>;
21345
- //#endregion
21346
- //#region packages/core/src/brand.d.ts
21347
21188
  export declare function normalizeBrandText(value: string): string;
21348
21189
  /**
21349
21190
  * The registrable part of a Search Console property host, using the small
@@ -21367,8 +21208,6 @@ export declare function shouldExcludeBrandQuery(input: {
21367
21208
  brandTerms?: string[];
21368
21209
  includeBrand?: boolean;
21369
21210
  }): boolean;
21370
- //#endregion
21371
- //#region packages/core/src/brand-detect.d.ts
21372
21211
  type BrandEvidence = {
21373
21212
  query: string;
21374
21213
  clicks: number;
@@ -21396,8 +21235,6 @@ export declare function detectBrandTerms(input: {
21396
21235
  suggestedTerms: string[];
21397
21236
  candidates: BrandTermCandidate[];
21398
21237
  }>;
21399
- //#endregion
21400
- //#region packages/core/src/storage/provider-secrets.d.ts
21401
21238
  export declare const PROVIDER_SECRET_NAMES: {
21402
21239
  readonly ahrefsApiKey: "ahrefs-api-key";
21403
21240
  readonly bingApiKey: "bing-api-key";
@@ -21419,8 +21256,6 @@ export declare function readProviderSecret(input: {
21419
21256
  export declare function writeProviderSecret(name: string, value: string): Promise<Exclude<ProviderSecretSource, 'environment'>>;
21420
21257
  export declare function deleteProviderSecret(name: string): Promise<void>;
21421
21258
  export declare function deleteManagedProviderSecrets(): Promise<void>;
21422
- //#endregion
21423
- //#region packages/core/src/clicky/credentials.d.ts
21424
21259
  export declare const CLICKY_SITEKEY_ENV = "SEO_CLICKY_SITEKEY";
21425
21260
  export declare const CLICKY_SITE_KEYS_SECRET: "clicky-sitekeys";
21426
21261
  export type StoredClickySiteKey = {
@@ -21435,23 +21270,15 @@ export declare function readClickySiteKey(siteIdValue: string, input?: {
21435
21270
  }): Promise<StoredClickySiteKey | undefined>;
21436
21271
  export declare function writeClickySiteKey(siteIdValue: string, siteKeyValue: string): Promise<Exclude<ProviderSecretSource, 'environment'>>;
21437
21272
  export declare function deleteClickySiteKey(siteIdValue: string): Promise<void>;
21438
- //#endregion
21439
- //#region packages/core/src/bing/api.d.ts
21440
21273
  type BingCall = (method: string, params?: Record<string, string>) => Promise<unknown>;
21441
- //#endregion
21442
- //#region packages/core/src/commands/sites.d.ts
21443
21274
  type GoogleAccount = {
21444
21275
  email: string | null;
21445
21276
  google: GoogleFetch;
21446
21277
  };
21447
- //#endregion
21448
- //#region packages/core/src/commands/analytics-site.d.ts
21449
21278
  type AnalyticsAccess = {
21450
21279
  accounts: () => Promise<GoogleAccount[]>;
21451
21280
  signIn: string;
21452
21281
  };
21453
- //#endregion
21454
- //#region packages/core/src/commands/audit-checks.d.ts
21455
21282
  type AuditCheckRow = {
21456
21283
  url: string;
21457
21284
  in_sitemap: boolean;
@@ -21517,8 +21344,6 @@ type AuditChecks = {
21517
21344
  started: boolean;
21518
21345
  as_of: number;
21519
21346
  };
21520
- //#endregion
21521
- //#region packages/core/src/commands/audit.d.ts
21522
21347
  type AuditSummary = {
21523
21348
  status: 'done' | 'failed';
21524
21349
  complete: boolean;
@@ -21601,8 +21426,6 @@ type AuditAccess = {
21601
21426
  checks: (site: string, offset: number, limit: number) => Promise<AuditChecks | null>;
21602
21427
  add: (site: string) => Promise<'added' | 'exists' | 'full'>;
21603
21428
  };
21604
- //#endregion
21605
- //#region packages/core/src/commands/page-facts.d.ts
21606
21429
  type RedirectKind = 'permanent' | 'temporary';
21607
21430
  type LiveCheck = {
21608
21431
  first: PageFacts;
@@ -21614,8 +21437,6 @@ type LiveCheck = {
21614
21437
  }[];
21615
21438
  last: PageFacts | null;
21616
21439
  };
21617
- //#endregion
21618
- //#region packages/core/src/commands/types.d.ts
21619
21440
  declare const COMMANDS: {
21620
21441
  readonly report: {
21621
21442
  readonly where: "anywhere";
@@ -21649,6 +21470,10 @@ declare const COMMANDS: {
21649
21470
  readonly where: "local";
21650
21471
  readonly summary: "Pages that could link to a target page.";
21651
21472
  };
21473
+ readonly lint: {
21474
+ readonly where: "anywhere";
21475
+ readonly summary: "Check copy for patterns common in AI-written text, weak copy and title and description length.";
21476
+ };
21652
21477
  };
21653
21478
  type CommandId = keyof typeof COMMANDS;
21654
21479
  type Caller = (command: CommandId, args?: Record<string, string | number | undefined>) => string;
@@ -21701,6 +21526,7 @@ type CommandDeps = {
21701
21526
  audit?: AuditAccess;
21702
21527
  week?: () => Promise<WeekData | null>;
21703
21528
  startAudit?: (site: string) => Promise<StartAudit>;
21529
+ issues?: IssueStore;
21704
21530
  now?: () => Date;
21705
21531
  };
21706
21532
  type StartAudit = {
@@ -21722,8 +21548,45 @@ type PageMarkdown = {
21722
21548
  } | {
21723
21549
  error: string;
21724
21550
  };
21725
- //#endregion
21726
- //#region packages/core/src/commands/week.d.ts
21551
+ declare const ISSUE_MARKS: readonly ["open", "fixed", "ignored"];
21552
+ type IssueMark = (typeof ISSUE_MARKS)[number];
21553
+ type IssueSeen = 'found' | 'not-found' | 'not-checked';
21554
+ type StoredIssue = {
21555
+ id: string;
21556
+ kind: string;
21557
+ subject: string;
21558
+ evidence: string;
21559
+ mark: IssueMark;
21560
+ marked_at: string | null;
21561
+ note: string | null;
21562
+ first_found: string;
21563
+ last_found: string | null;
21564
+ seen: IssueSeen;
21565
+ checked_at: string | null;
21566
+ measures?: IssueMeasure[];
21567
+ };
21568
+ declare const MEASURE_DAYS: readonly [28, 56];
21569
+ type MeasureDays = (typeof MEASURE_DAYS)[number];
21570
+ type MeasurePeriod = {
21571
+ start: string;
21572
+ end: string;
21573
+ clicks: number;
21574
+ impressions: number;
21575
+ position: number | null;
21576
+ };
21577
+ type IssueMeasure = {
21578
+ days: MeasureDays;
21579
+ fixed_on: string;
21580
+ scope: 'page' | 'query on page';
21581
+ before: MeasurePeriod;
21582
+ after: MeasurePeriod;
21583
+ updates: string[] | null;
21584
+ measured_at: string;
21585
+ };
21586
+ type IssueStore = {
21587
+ read: (site: string) => Promise<StoredIssue[] | null>;
21588
+ write: (site: string, issues: StoredIssue[]) => Promise<void>;
21589
+ };
21727
21590
  type WeekSite = {
21728
21591
  property: string;
21729
21592
  link: string | null;
@@ -21752,6 +21615,37 @@ type WeekSite = {
21752
21615
  clicks: number;
21753
21616
  previous: number;
21754
21617
  } | null;
21618
+ opportunities?: WeekOpportunities | null;
21619
+ measured?: {
21620
+ total: number;
21621
+ items: (IssueMeasure & {
21622
+ subject: string;
21623
+ })[];
21624
+ };
21625
+ };
21626
+ type WeekOpportunities = {
21627
+ checked_at: number | null;
21628
+ competitors: string[];
21629
+ blocked: string | null;
21630
+ partial: boolean;
21631
+ items: WeekOpportunity[];
21632
+ };
21633
+ type WeekOpportunity = {
21634
+ keyword: string;
21635
+ kind: 'page' | 'tool';
21636
+ search_volume: number;
21637
+ cpc: number;
21638
+ intent: string;
21639
+ competitors: {
21640
+ domain: string;
21641
+ position: number;
21642
+ url: string;
21643
+ }[];
21644
+ site_dr: number;
21645
+ low_dr: number;
21646
+ top: number;
21647
+ cluster: number;
21648
+ relevance: number;
21755
21649
  };
21756
21650
  type WeekData = {
21757
21651
  start: string;
@@ -21759,8 +21653,6 @@ type WeekData = {
21759
21653
  account: string;
21760
21654
  sites: WeekSite[];
21761
21655
  };
21762
- //#endregion
21763
- //#region packages/core/src/cloud.d.ts
21764
21656
  export declare const CLOUD_URL = "https://seoskill.dev";
21765
21657
  type Pending = {
21766
21658
  device: string;
@@ -21801,8 +21693,13 @@ export declare function pendingCloudLogin(): Pending | null;
21801
21693
  export declare function finishCloudLogin(): Promise<'linked' | 'pending' | 'expired'>;
21802
21694
  export declare function cloudLogout(): Promise<boolean>;
21803
21695
  export declare function openCloudLink(url: string): Promise<void>;
21804
- //#endregion
21805
- //#region packages/core/src/storage/config.d.ts
21696
+ type LintSource = {
21697
+ path: string;
21698
+ text: string;
21699
+ } | {
21700
+ path: string;
21701
+ skipped: string;
21702
+ };
21806
21703
  export type TokenStorageMode = 'keychain' | 'file';
21807
21704
  export type TokenStorageStatus = {
21808
21705
  configured: TokenStorageMode;
@@ -21840,8 +21737,6 @@ export declare function getPrivacySnapshot(): Array<{
21840
21737
  mode: string;
21841
21738
  sizeBytes: number;
21842
21739
  }>;
21843
- //#endregion
21844
- //#region packages/core/src/gsc/auth/types.d.ts
21845
21740
  interface OAuthClientConfig {
21846
21741
  clientId: string;
21847
21742
  clientSecret: string;
@@ -21850,8 +21745,6 @@ interface OAuthClientConfig {
21850
21745
  interface GoogleAccessTokenClient {
21851
21746
  getAccessToken(): Promise<string>;
21852
21747
  }
21853
- //#endregion
21854
- //#region packages/core/src/gsc/auth/service-account.d.ts
21855
21748
  type ServiceAccountSource = 'environment-json' | 'environment-file' | 'application-default-file';
21856
21749
  export type ServiceAccountConfig = {
21857
21750
  clientEmail: string;
@@ -21875,8 +21768,6 @@ export declare class ServiceAccountAccessTokenClient implements GoogleAccessToke
21875
21768
  constructor(config: ServiceAccountConfig, fetchImpl?: typeof fetch);
21876
21769
  getAccessToken(): Promise<string>;
21877
21770
  }
21878
- //#endregion
21879
- //#region packages/core/src/gsc/auth/authorized-client.d.ts
21880
21771
  export declare function createAuthorizedClient(accountEmail?: string): Promise<{
21881
21772
  client: GoogleAccessTokenClient;
21882
21773
  tokens: StoredTokens;
@@ -21903,25 +21794,17 @@ export declare function authStatus(): Promise<{
21903
21794
  identity?: string;
21904
21795
  serviceAccount: ServiceAccountStatus;
21905
21796
  }>;
21906
- //#endregion
21907
- //#region packages/core/src/gsc/auth/client-config.d.ts
21908
21797
  export declare function getAuthModeStatus(): {
21909
21798
  sharedConfigured: boolean;
21910
21799
  byoConfigured: boolean;
21911
21800
  };
21912
21801
  export declare function getClientConfig(source?: OAuthClientConfig['source']): OAuthClientConfig | undefined;
21913
21802
  export declare function missingOAuthClientMessage(source: OAuthClientConfig['source']): string;
21914
- //#endregion
21915
- //#region packages/core/src/gsc/auth/loopback.d.ts
21916
21803
  export declare function missingSharedClientLoginMessage(): string;
21917
21804
  export declare function loginWithLoopback(clientConfig?: OAuthClientConfig | undefined): Promise<StoredTokens>;
21918
- //#endregion
21919
- //#region packages/core/src/gsc/client/fetch.d.ts
21920
21805
  export declare const LOCAL_SIGN_IN: {
21921
21806
  signIn: string;
21922
21807
  };
21923
- //#endregion
21924
- //#region packages/core/src/commands-node.d.ts
21925
21808
  export declare function nodeCommandDeps(options: {
21926
21809
  call: Caller;
21927
21810
  account?: string;
@@ -21943,8 +21826,6 @@ export declare function resolveLocalSite(site: string, options?: {
21943
21826
  }): Promise<string>;
21944
21827
  export declare function localError(error: unknown): unknown;
21945
21828
  export declare function localGoogleFetch(account?: string): Promise<GoogleFetch>;
21946
- //#endregion
21947
- //#region packages/core/src/storage/sqlite.d.ts
21948
21829
  type TransactionFunction = (...params: never[]) => unknown;
21949
21830
  declare class Statement {
21950
21831
  private readonly statement;
@@ -21969,8 +21850,6 @@ declare namespace SqliteDatabase {
21969
21850
  lastInsertRowid: number | bigint;
21970
21851
  };
21971
21852
  }
21972
- //#endregion
21973
- //#region packages/core/src/storage/database.d.ts
21974
21853
  export declare function ensurePrivateDatabaseFiles(path: string): void;
21975
21854
  export declare function getDb(): SqliteDatabase.Database;
21976
21855
  export declare function cacheDb(): SqliteDatabase.Database;
@@ -21982,8 +21861,6 @@ export declare function checkDatabaseReadiness(): {
21982
21861
  export declare function hashKey(parts: unknown[]): string;
21983
21862
  export declare function getCacheStats(): CacheStats;
21984
21863
  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
21864
  export type DoctorCheck = {
21988
21865
  id: string;
21989
21866
  label: string;
@@ -21999,8 +21876,6 @@ export declare function runDoctor(dependencies?: DoctorDependencies): Promise<{
21999
21876
  generatedAt: string;
22000
21877
  checks: DoctorCheck[];
22001
21878
  }>;
22002
- //#endregion
22003
- //#region packages/core/src/export/csv.d.ts
22004
21879
  export type CsvValue = string | number | boolean | null | undefined;
22005
21880
  export type CsvRow = Record<string, CsvValue>;
22006
21881
  export type CsvFile = {
@@ -22016,8 +21891,6 @@ export declare function refreshPrioritiesCsvFiles(report: WorkflowReport<{
22016
21891
  warnings: string[];
22017
21892
  diagnosis: DiagnosePropertyReport;
22018
21893
  }>): CsvFile[];
22019
- //#endregion
22020
- //#region packages/core/src/export/update-postmortem.d.ts
22021
21894
  type PostmortemCsvReport = WorkflowReport<{
22022
21895
  update: {
22023
21896
  attribution: string;
@@ -22096,8 +21969,6 @@ type SegmentItem = {
22096
21969
  positionDelta: number | null;
22097
21970
  };
22098
21971
  export declare function updatePostmortemCsvFiles(report: PostmortemCsvReport): CsvFile[];
22099
- //#endregion
22100
- //#region packages/core/src/ga4/matching.d.ts
22101
21972
  export type Ga4WebStreamCandidate = {
22102
21973
  account: string;
22103
21974
  property: string;
@@ -22111,8 +21982,6 @@ export type Ga4WebStreamMatch = Ga4WebStreamCandidate & {
22111
21982
  };
22112
21983
  export declare function matchGa4WebStreams(site: string, candidates: Ga4WebStreamCandidate[]): Ga4WebStreamMatch[];
22113
21984
  export declare function ga4MatchReason(match: Ga4WebStreamMatch, site: string): string;
22114
- //#endregion
22115
- //#region packages/core/src/gsc/dates.d.ts
22116
21985
  export declare const GSC_TIME_ZONE = "America/Los_Angeles";
22117
21986
  export declare const GSC_FINAL_DATA_LAG_DAYS = 4;
22118
21987
  export declare function shiftIsoDate(date: string, days: number): string;
@@ -22121,8 +21990,6 @@ export declare function finalGscDateRange(days?: number, now?: Date): {
22121
21990
  startDate: string;
22122
21991
  endDate: string;
22123
21992
  };
22124
- //#endregion
22125
- //#region packages/core/src/gsc/local-export.d.ts
22126
21993
  export declare const DEFAULT_SEARCH_CONSOLE_EXPORT_ROW_LIMIT = 5000;
22127
21994
  export declare const MAX_SEARCH_CONSOLE_EXPORT_ROW_LIMIT = 100000;
22128
21995
  export declare const MAX_SEARCH_CONSOLE_EXPORT_FILES = 20;
@@ -22182,8 +22049,6 @@ export declare function loadSearchConsoleExport(input: {
22182
22049
  now?: Date;
22183
22050
  exportedAt?: Date;
22184
22051
  }): Promise<SearchConsoleExportEvidence>;
22185
- //#endregion
22186
- //#region packages/core/src/gsc/local-export-reconcile.d.ts
22187
22052
  export declare const DEFAULT_UNREACHED_PAGE_LIMIT = 100;
22188
22053
  export type SearchConsoleExportReconciliation = {
22189
22054
  joinBasis: 'path';
@@ -22201,25 +22066,18 @@ export declare function reconcileExportPagesWithCrawl(input: {
22201
22066
  crawlOrigin: string;
22202
22067
  limit?: number;
22203
22068
  }): SearchConsoleExportReconciliation;
22204
- //#endregion
22205
- //#region packages/core/src/gsc/property-url.d.ts
22206
22069
  export declare function normalizeHttpUrl(value: string): string;
22207
22070
  export declare function assertUrlMatchesGscProperty(property: string, value: string): string;
22208
- //#endregion
22209
- //#region packages/core/src/http/read-json.d.ts
22210
22071
  export declare function readJson<T = unknown>(response: Response, label: string, options?: {
22211
22072
  maxBytes?: number;
22212
22073
  }): Promise<T>;
22213
22074
  export declare function readJsonOrUndefined<T = unknown>(response: Response, label: string): Promise<T | undefined>;
22214
- //#endregion
22215
- //#region packages/core/src/logger.d.ts
22075
+ export declare const LINT_MAX_FILES = 100;
22076
+ export declare function lintPaths(inputs: string[], cwd?: string): Promise<string[]>;
22077
+ export declare function readLintFiles(inputs: string[], cwd?: string): Promise<LintSource[]>;
22216
22078
  export declare function createLogger(runId: string): pino.Logger;
22217
22079
  export declare function makeRunId(): string;
22218
- //#endregion
22219
- //#region packages/core/src/markdown.d.ts
22220
22080
  export declare function renderPresentationTablesMarkdown(tables: PresentationTable[]): string[];
22221
- //#endregion
22222
- //#region packages/core/src/paths.d.ts
22223
22081
  export interface SeoCliPaths {
22224
22082
  configDir: string;
22225
22083
  cacheDir: string;
@@ -22243,12 +22101,8 @@ export declare function migrateLegacyMacConfig(input?: SeoCliPathOptions): void;
22243
22101
  export declare function getSeoCliPaths(): SeoCliPaths;
22244
22102
  export declare function ensureSeoCliDirs(): SeoCliPaths;
22245
22103
  export declare function fileSize(path: string): number;
22246
- //#endregion
22247
- //#region packages/core/src/phrasing.d.ts
22248
22104
  export declare function plural(count: number, singular: string, pluralLabel?: string): string;
22249
22105
  export declare function countLabel(count: number, singular: string, pluralLabel?: string): string;
22250
- //#endregion
22251
- //#region packages/core/src/provider-extensions/actions.d.ts
22252
22106
  export type ProviderActionResult = {
22253
22107
  provider: string;
22254
22108
  action: string;
@@ -22264,13 +22118,9 @@ export declare function runProviderExtensionAction(input: {
22264
22118
  refresh?: boolean;
22265
22119
  runtime?: ProviderRuntimeOptions;
22266
22120
  }): Promise<ProviderActionResult>;
22267
- //#endregion
22268
- //#region packages/core/src/provider-extensions/connections.d.ts
22269
22121
  export declare function readProviderExtensionAccount(providerIdValue: string): Record<string, string>;
22270
22122
  export declare function writeProviderExtensionAccount(providerIdValue: string, account: Readonly<Record<string, string>>): Record<string, string>;
22271
22123
  export declare function deleteProviderExtensionAccount(providerIdValue: string): void;
22272
- //#endregion
22273
- //#region packages/core/src/provider-extensions/credentials.d.ts
22274
22124
  export declare function readProviderExtensionCredentials(input: {
22275
22125
  providerId: string;
22276
22126
  account: Readonly<Record<string, string>>;
@@ -22286,8 +22136,6 @@ export declare function deleteProviderExtensionCredentials(input: {
22286
22136
  providerId: string;
22287
22137
  account: Readonly<Record<string, string>>;
22288
22138
  }): Promise<void>;
22289
- //#endregion
22290
- //#region packages/core/src/provider-extensions/discovery.d.ts
22291
22139
  export declare function listInstalledProviderExtensions(): Promise<{
22292
22140
  schemaVersion: 1;
22293
22141
  installed: {
@@ -22326,8 +22174,6 @@ export declare function describeInstalledProviderExtension(id: string): Promise<
22326
22174
  cacheTtlMs: number;
22327
22175
  }[];
22328
22176
  }>;
22329
- //#endregion
22330
- //#region packages/core/src/provider-extensions/installer.d.ts
22331
22177
  declare const providerPackageReleaseSchema: z.ZodObject<{
22332
22178
  package: z.ZodString;
22333
22179
  version: z.ZodString;
@@ -22355,14 +22201,10 @@ export type ProviderInstallerOptions = {
22355
22201
  export declare function inspectProviderPackage(value: string, options?: ProviderInstallerOptions): Promise<ProviderPackageRelease>;
22356
22202
  export declare function installProviderPackage(input: ProviderPackageRelease, options?: ProviderInstallerOptions): Promise<InstalledProviderPackage>;
22357
22203
  export declare function uninstallProviderExtension(id: string, options?: ProviderInstallerOptions): Promise<InstalledProviderPackage | undefined>;
22358
- //#endregion
22359
- //#region packages/core/src/provider-extensions/store.d.ts
22360
22204
  export declare function readInstalledProviderPackages(): InstalledProviderPackages;
22361
22205
  export declare function writeInstalledProviderPackages(value: InstalledProviderPackages): InstalledProviderPackages;
22362
22206
  export declare function saveInstalledProviderPackage(value: InstalledProviderPackage): InstalledProviderPackages;
22363
22207
  export declare function removeInstalledProviderPackage(id: string): InstalledProviderPackage | undefined;
22364
- //#endregion
22365
- //#region packages/core/src/providers/ahrefs/client.d.ts
22366
22208
  export type AhrefsLimitsAndUsage = {
22367
22209
  provider: 'ahrefs';
22368
22210
  apiVersion: 3;
@@ -22402,8 +22244,6 @@ export declare class AhrefsClient {
22402
22244
  private limitsAndUsageForKey;
22403
22245
  limitsAndUsage(): Promise<AhrefsLimitsAndUsage>;
22404
22246
  }
22405
- //#endregion
22406
- //#region packages/core/src/providers/ahrefs/credentials.d.ts
22407
22247
  export declare const AHREFS_API_KEY_ENV = "SEO_AHREFS_API_KEY";
22408
22248
  export declare const AHREFS_API_KEY_SECRET: "ahrefs-api-key";
22409
22249
  declare const store: {
@@ -22425,8 +22265,6 @@ export declare function readAhrefsApiKey(input?: {
22425
22265
  source: ProviderSecretSource;
22426
22266
  } | undefined>;
22427
22267
  export declare function deleteAhrefsApiKey(): Promise<void>;
22428
- //#endregion
22429
- //#region packages/core/src/providers/bing/credentials.d.ts
22430
22268
  export declare const BING_API_KEY_ENV = "SEO_BING_API_KEY";
22431
22269
  export declare const BING_API_KEY_SECRET: "bing-api-key";
22432
22270
  export declare function writeBingApiKey(value: string): Promise<"file" | "keychain">;
@@ -22437,8 +22275,6 @@ export declare function readBingApiKey(input?: {
22437
22275
  source: ProviderSecretSource;
22438
22276
  } | undefined>;
22439
22277
  export declare function deleteBingApiKey(): Promise<void>;
22440
- //#endregion
22441
- //#region packages/core/src/providers/dataforseo/credentials.d.ts
22442
22278
  export declare const DATAFORSEO_LOGIN_ENV = "SEO_DATAFORSEO_LOGIN";
22443
22279
  export declare const DATAFORSEO_PASSWORD_ENV = "SEO_DATAFORSEO_PASSWORD";
22444
22280
  export declare const DATAFORSEO_CREDENTIAL_SECRET: "dataforseo-credentials";
@@ -22455,8 +22291,6 @@ export declare function readDataForSeoCredentials(input?: {
22455
22291
  env?: NodeJS.ProcessEnv;
22456
22292
  }): Promise<StoredDataForSeoCredentials | undefined>;
22457
22293
  export declare function deleteDataForSeoCredentials(): Promise<void>;
22458
- //#endregion
22459
- //#region packages/core/src/providers/dataforseo/client-types.d.ts
22460
22294
  type DataForSeoAccountSnapshot = {
22461
22295
  provider: 'dataforseo';
22462
22296
  login: string;
@@ -22476,8 +22310,6 @@ type DataForSeoClientOptions = {
22476
22310
  maxResponseBytes?: number;
22477
22311
  now?: () => Date;
22478
22312
  };
22479
- //#endregion
22480
- //#region packages/core/src/providers/dataforseo/client.d.ts
22481
22313
  export declare class DataForSeoClient {
22482
22314
  private readonly fetch;
22483
22315
  private readonly credentials;
@@ -22491,8 +22323,6 @@ export declare class DataForSeoClient {
22491
22323
  private userDataForCredentials;
22492
22324
  userData(): Promise<DataForSeoAccountSnapshot>;
22493
22325
  }
22494
- //#endregion
22495
- //#region packages/core/src/providers/errors.d.ts
22496
22326
  export type ProviderErrorCode = 'configuration' | 'authentication' | 'rate-limit' | 'timeout' | 'response-too-large' | 'invalid-response' | 'remote-error';
22497
22327
  export declare const PROVIDER_ERROR_CODES: Record<ProviderErrorCode, SeoErrorCode>;
22498
22328
  export declare class ProviderError extends Error {
@@ -22512,8 +22342,6 @@ export declare class ProviderError extends Error {
22512
22342
  });
22513
22343
  toJSON(): Record<string, unknown>;
22514
22344
  }
22515
- //#endregion
22516
- //#region packages/core/src/robots-directives.d.ts
22517
22345
  export type RobotsDirective = 'noindex' | 'nofollow' | 'nosnippet';
22518
22346
  export type SnippetControlEvidence = {
22519
22347
  source: 'meta-robots' | 'x-robots-tag';
@@ -22540,8 +22368,6 @@ export declare function effectiveSnippetControl(input: {
22540
22368
  metaRobots?: string | string[];
22541
22369
  xRobotsTag?: string | string[];
22542
22370
  }): EffectiveSnippetControl;
22543
- //#endregion
22544
- //#region packages/core/src/runtime/interfaces.d.ts
22545
22371
  export interface CredentialsProvider {
22546
22372
  getGoogleOAuthClient(): OAuthClientConfig | undefined;
22547
22373
  readGoogleTokens(): Promise<StoredTokens | undefined>;
@@ -22569,8 +22395,50 @@ export declare class JsonFileStorageAdapter implements StorageAdapter {
22569
22395
  private writeAll;
22570
22396
  }
22571
22397
  export declare const localCredentialsProvider: LocalCredentialsProvider;
22572
- //#endregion
22573
- //#region packages/core/src/storage/ledger.d.ts
22398
+ type SiteCheckGroup = 'pages' | 'copy' | 'design' | 'data';
22399
+ type SiteCheckLevel = 'fail' | 'warn';
22400
+ export declare const SITE_CHECK_MAX_PAGES = 10000;
22401
+ export declare const SITE_CHECK_MAX_ISSUES = 1000;
22402
+ export declare const SITEMAP_FILE_URL_LIMIT = 5000;
22403
+ export type BuiltSite = {
22404
+ origin: string;
22405
+ files: readonly string[];
22406
+ readText: (path: string) => Promise<string>;
22407
+ readBytes: (path: string) => Promise<Uint8Array>;
22408
+ allowWords?: readonly string[];
22409
+ sources?: {
22410
+ files: readonly string[];
22411
+ readText: (path: string) => Promise<string>;
22412
+ };
22413
+ now?: Date;
22414
+ };
22415
+ export type SiteCheckIssue = {
22416
+ rule: string;
22417
+ group: SiteCheckGroup;
22418
+ level: SiteCheckLevel;
22419
+ file: string;
22420
+ found: string;
22421
+ fix: string;
22422
+ };
22423
+ export type SiteCheckResult = {
22424
+ status: 'passed' | 'failed' | 'partial';
22425
+ origin: string;
22426
+ pagesFound: number;
22427
+ pagesChecked: number;
22428
+ failures: number;
22429
+ warnings: number;
22430
+ rules: Array<{
22431
+ rule: string;
22432
+ group: SiteCheckGroup;
22433
+ level: SiteCheckLevel;
22434
+ count: number;
22435
+ fix: string;
22436
+ }>;
22437
+ issues: SiteCheckIssue[];
22438
+ issuesOmitted: number;
22439
+ };
22440
+ export declare function builtPagePath(file: string): string;
22441
+ export declare function checkBuiltSite(site: BuiltSite): Promise<SiteCheckResult>;
22574
22442
  export declare class SessionLedger {
22575
22443
  private readonly entries;
22576
22444
  private gscCalls;
@@ -22579,8 +22447,6 @@ export declare class SessionLedger {
22579
22447
  addGsc(calls: number, rows: number): void;
22580
22448
  summary(): string;
22581
22449
  }
22582
- //#endregion
22583
- //#region packages/core/src/storage/log-retention.d.ts
22584
22450
  export declare const LOG_MAX_FILE_BYTES: number;
22585
22451
  export declare const LOG_MAX_TOTAL_BYTES: number;
22586
22452
  export declare const LOG_MAX_AGE_MS: number;
@@ -22596,11 +22462,7 @@ export declare function pruneLogs(options?: {
22596
22462
  maxTotalBytes?: number;
22597
22463
  maxAgeMs?: number;
22598
22464
  }): LogPruneResult;
22599
- //#endregion
22600
- //#region packages/core/src/storage/reset.d.ts
22601
22465
  export declare function resetSeoData(): Promise<void>;
22602
- //#endregion
22603
- //#region packages/core/src/telemetry-failures.d.ts
22604
22466
  export declare const TELEMETRY_ERROR_CATEGORIES: readonly ["auth", "crawl_timeout", "network", "config", "data", "database", "filesystem", "internal", "unknown"];
22605
22467
  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
22468
  export declare const TELEMETRY_FAILURE_CONTEXTS: readonly ["crawl_pages_run_id_url"];
@@ -22616,13 +22478,9 @@ type TelemetryFailureClassification = {
22616
22478
  };
22617
22479
  export declare function classifyTelemetryFailure(error: unknown): TelemetryFailureClassification;
22618
22480
  export declare function isTelemetryOperation(value: unknown): value is TelemetryOperation;
22619
- //#endregion
22620
- //#region packages/core/src/telemetry-shared.d.ts
22621
22481
  export declare const TELEMETRY_ENDPOINT = "https://seoskill.dev/api/t";
22622
22482
  export declare const TELEMETRY_SCHEMA_VERSION = 2;
22623
22483
  export declare function isoWeek(date: Date): string;
22624
- //#endregion
22625
- //#region packages/core/src/telemetry.d.ts
22626
22484
  export declare const TELEMETRY_TIMEOUT_MS = 2000;
22627
22485
  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
22486
  export declare const TELEMETRY_AGENTS: readonly ["claude-code", "cursor", "codex", "cli", "unknown"];
@@ -22698,8 +22556,6 @@ export declare function trackTelemetryReportFailed(report: string, error: unknow
22698
22556
  export declare function trackTelemetryCommandFailed(operation: string, error: unknown, options?: TelemetryOptions): void;
22699
22557
  export declare function trackTelemetrySetupComplete(options?: TelemetryOptions): void;
22700
22558
  export declare function telemetryErrorCategory(error: unknown): TelemetryErrorCategory;
22701
- //#endregion
22702
- //#region packages/core/src/update-notice.d.ts
22703
22559
  export type UpdateNoticeOptions = {
22704
22560
  argv?: string[];
22705
22561
  cacheFile?: string;
@@ -22710,22 +22566,15 @@ export type UpdateNoticeOptions = {
22710
22566
  };
22711
22567
  export declare function isNewerVersion(current: string, latest: string): boolean;
22712
22568
  export declare function updateNotice(options?: UpdateNoticeOptions): string | undefined;
22713
- //#endregion
22714
- //#region packages/core/src/updates/search-status.d.ts
22715
22569
  export declare const INCIDENTS_URL = "https://status.search.google.com/incidents.json";
22716
22570
  export declare function fetchSearchStatusIncidents(): Promise<SearchStatusIncident[]>;
22717
22571
  export declare function listSearchUpdates(input?: {
22718
22572
  product?: string;
22719
22573
  limit?: number;
22720
22574
  }): Promise<SearchUpdate[]>;
22721
- //#endregion
22722
- //#region packages/core/src/utils/time.d.ts
22723
22575
  export declare function parseOlderThan(input?: string): number | undefined;
22724
22576
  export declare function formatRelativeExpiry(expiresAt: number): string;
22725
22577
  export declare function isoDate(daysAgo?: number): string;
22726
- //#endregion
22727
- //#region packages/core/src/version.d.ts
22728
22578
  export declare const SEO_VERSION: string;
22729
- //#endregion
22730
22579
  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
22580
  //# sourceMappingURL=index.d.ts.map