@rankcli/agent-runtime 0.0.38 → 0.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -213,17 +213,14 @@ interface IssueDefinition {
213
213
  }
214
214
  declare const ISSUE_DEFINITIONS: Record<string, IssueDefinition>;
215
215
 
216
- /** Shape every paid-tier check function shares: (html, url) -> issues + check-specific data. */
216
+ /** Shape these checks share: (html, url) -> issues + check-specific data. */
217
217
  type PremiumCheckFn = (html: string, url: string) => {
218
218
  issues: AuditIssue[];
219
219
  data: unknown;
220
220
  };
221
221
  /**
222
- * Injected by the caller when premium checks are actually available -
223
- * audit-worker (first-party server, imports @rankcli/agent-runtime-premium
224
- * directly) or the CLI (after a valid license decrypts the WASM-embedded
225
- * bundle). This package never imports an implementation, only this type -
226
- * see docs/GEO_COVERAGE.md or packaging.test.ts for why.
222
+ * The checks `runFullAudit` runs through its `premiumChecks` option. The default is the
223
+ * built-in set in premium-checks.ts; a caller can pass its own to replace or stub them.
227
224
  */
228
225
  interface PremiumChecks {
229
226
  analyzeFeaturedSnippet: PremiumCheckFn;
@@ -281,6 +278,43 @@ interface AuditOptions {
281
278
  declare function runFullAudit(options: AuditOptions): Promise<AuditReport>;
282
279
  declare function formatReport(report: AuditReport): string;
283
280
 
281
+ /**
282
+ * Where a `<meta http-equiv="refresh" content="0;url=...">` sends the page, resolved against
283
+ * the page's own URL, or null when the page is not such a redirect.
284
+ *
285
+ * Search engines treat an instant meta refresh as a redirect and index the target, so an
286
+ * audit has to follow it too: docs.astro.build answers its root with an 80-byte stub of this
287
+ * kind, and auditing the stub scored the site 57 with seven errors (no title, no H1, no
288
+ * viewport, no content) that the real page does not have. Only quick refreshes count (up to
289
+ * 5 seconds, the range Google documents as a redirect); a page that reloads itself every
290
+ * minute is a page, not a redirect, and a refresh to the same URL is ignored.
291
+ */
292
+ declare function metaRefreshTarget(html: string, pageUrl: string): string | null;
293
+
294
+ /**
295
+ * One condition, one finding.
296
+ *
297
+ * The checks grew up independently and several report the same missing thing under their own
298
+ * codes: a page with no viewport tag got VIEWPORT_MISSING (error), HTML_NO_VIEWPORT (warning)
299
+ * and RESPONSIVE_NO_VIEWPORT (error); a site with no testimonials got six findings from four
300
+ * checks; a client-rendered shell got the same diagnosis five times. The issue count is the
301
+ * number people quote, and padding it teaches them the list is noise.
302
+ *
303
+ * Each rule names the code that stays and the codes it makes redundant whenever it is present.
304
+ * A code is only dropped when its primary is in the same report, so a check that fires alone is
305
+ * untouched. The rules are read against the report as the checks produced it, so a code dropped
306
+ * by one rule still triggers its own.
307
+ */
308
+ declare const REDUNDANT_WHEN_PRESENT: ReadonlyArray<{
309
+ keep: string | RegExp;
310
+ drop: readonly string[];
311
+ }>;
312
+ /**
313
+ * Drop the findings that another finding in the same list already covers, and collapse any
314
+ * code reported twice (its affected URLs are merged into the first).
315
+ */
316
+ declare function dedupeIssues(issues: AuditIssue[]): AuditIssue[];
317
+
284
318
  interface RobotsTxtResult {
285
319
  exists: boolean;
286
320
  content?: string;
@@ -1115,6 +1149,820 @@ declare function analyzeResponsiveImages(html: string, url: string): {
1115
1149
  data: ResponsiveImageData;
1116
1150
  };
1117
1151
 
1152
+ interface SnippetOpportunity {
1153
+ type: 'definition' | 'list' | 'table' | 'paragraph' | 'qa';
1154
+ heading: string;
1155
+ score: number;
1156
+ issues: string[];
1157
+ suggestions: string[];
1158
+ }
1159
+ interface FeaturedSnippetData {
1160
+ hasDefinitionFormat: boolean;
1161
+ hasListFormat: boolean;
1162
+ hasTableFormat: boolean;
1163
+ hasQAFormat: boolean;
1164
+ hasInvertedPyramid: boolean;
1165
+ opportunities: SnippetOpportunity[];
1166
+ faqSchemaPresent: boolean;
1167
+ howToSchemaPresent: boolean;
1168
+ questionHeadingsCount: number;
1169
+ }
1170
+ /**
1171
+ * Main function: Analyze page for featured snippet optimization
1172
+ */
1173
+ declare function analyzeFeaturedSnippet(html: string, url: string): {
1174
+ issues: AuditIssue[];
1175
+ data: FeaturedSnippetData;
1176
+ };
1177
+
1178
+ interface InternalLinkGraphData {
1179
+ totalInternalLinks: number;
1180
+ orphanPages: string[];
1181
+ deepPages: string[];
1182
+ hubPages: string[];
1183
+ authorityPages: string[];
1184
+ linkDistribution: {
1185
+ url: string;
1186
+ links: number;
1187
+ }[];
1188
+ firstLinkAnchors: Map<string, string>;
1189
+ contextualLinkRatio: number;
1190
+ navigationVsContentRatio: number;
1191
+ }
1192
+ /**
1193
+ * Main function: Analyze internal link structure
1194
+ */
1195
+ declare function analyzeInternalLinkGraph(html: string, url: string): {
1196
+ issues: AuditIssue[];
1197
+ data: Partial<InternalLinkGraphData>;
1198
+ };
1199
+
1200
+ interface AuthorInfo {
1201
+ name: string | null;
1202
+ bio: string | null;
1203
+ credentials: string[];
1204
+ socialLinks: string[];
1205
+ hasSchema: boolean;
1206
+ photoPresent: boolean;
1207
+ }
1208
+ interface OrganizationInfo {
1209
+ name: string | null;
1210
+ type: string | null;
1211
+ hasSchema: boolean;
1212
+ hasContactInfo: boolean;
1213
+ hasSocialProfiles: boolean;
1214
+ trustBadges: string[];
1215
+ }
1216
+ interface ReviewInfo {
1217
+ hasReviewer: boolean;
1218
+ reviewerName: string | null;
1219
+ reviewerCredentials: string[];
1220
+ reviewDate: string | null;
1221
+ nextReviewDate: string | null;
1222
+ reviewType: 'medical' | 'expert' | 'fact-check' | 'editorial' | null;
1223
+ }
1224
+ interface TrustBadgeInfo {
1225
+ pressFeatures: string[];
1226
+ certifications: string[];
1227
+ awards: string[];
1228
+ partnerships: string[];
1229
+ }
1230
+ interface EEATData {
1231
+ author: AuthorInfo;
1232
+ organization: OrganizationInfo;
1233
+ reviewer: ReviewInfo;
1234
+ trustBadges: TrustBadgeInfo;
1235
+ experienceSignals: string[];
1236
+ expertiseSignals: string[];
1237
+ authoritySignals: string[];
1238
+ trustSignals: string[];
1239
+ citationCount: number;
1240
+ authoritativeSources: string[];
1241
+ contentDate: {
1242
+ published: string | null;
1243
+ modified: string | null;
1244
+ };
1245
+ hasVideoContent: boolean;
1246
+ videoExperienceSignals: string[];
1247
+ isYMYL: boolean;
1248
+ }
1249
+ /**
1250
+ * Main function: Analyze E-E-A-T signals
1251
+ */
1252
+ declare function analyzeEEATSignals(html: string, url: string): {
1253
+ issues: AuditIssue[];
1254
+ data: EEATData;
1255
+ };
1256
+
1257
+ interface ZipfAnalysis {
1258
+ alpha: number;
1259
+ isNatural: boolean;
1260
+ rSquared: number;
1261
+ stuffedKeywords: Array<{
1262
+ word: string;
1263
+ deviation: number;
1264
+ }>;
1265
+ missingMidTail: string[];
1266
+ }
1267
+ interface EntropyAnalysis {
1268
+ wordEntropy: number;
1269
+ normalizedEntropy: number;
1270
+ vocabularyRichness: number;
1271
+ repetitionScore: number;
1272
+ bigramEntropy: number;
1273
+ qualityIndicator: 'excellent' | 'good' | 'average' | 'poor';
1274
+ }
1275
+ interface BM25Analysis {
1276
+ keyword: string;
1277
+ score: number;
1278
+ termFrequency: number;
1279
+ saturationPoint: boolean;
1280
+ lengthPenalty: number;
1281
+ recommendation: string;
1282
+ }
1283
+ interface ContentScienceData {
1284
+ zipf: ZipfAnalysis;
1285
+ entropy: EntropyAnalysis;
1286
+ bm25: BM25Analysis[];
1287
+ overallQuality: 'excellent' | 'good' | 'needs-work' | 'poor';
1288
+ }
1289
+ /**
1290
+ * Run comprehensive content science analysis
1291
+ */
1292
+ declare function analyzeContentScience(html: string, url: string, targetKeywords?: string[]): {
1293
+ issues: AuditIssue[];
1294
+ data: ContentScienceData;
1295
+ };
1296
+
1297
+ interface PageKeywordData {
1298
+ url: string;
1299
+ title: string;
1300
+ h1: string[];
1301
+ metaDescription: string;
1302
+ primaryKeywords: string[];
1303
+ keywordDensity: Map<string, number>;
1304
+ }
1305
+ /**
1306
+ * Analyze a single page for cannibalization signals
1307
+ * Used for single-page audits to detect potential self-cannibalization patterns
1308
+ */
1309
+ declare function analyzeKeywordCannibalizationSinglePage(html: string, url: string): {
1310
+ issues: AuditIssue[];
1311
+ data: PageKeywordData;
1312
+ };
1313
+
1314
+ interface AboveFoldAnalysis {
1315
+ hasHeadline: boolean;
1316
+ headlineText: string | null;
1317
+ hasCTA: boolean;
1318
+ ctaCount: number;
1319
+ ctaTexts: string[];
1320
+ hasForm: boolean;
1321
+ formType: 'contact' | 'signup' | 'search' | 'calculator' | 'other' | null;
1322
+ hasSocialProof: boolean;
1323
+ socialProofTypes: string[];
1324
+ hasHeroImage: boolean;
1325
+ hasVideo: boolean;
1326
+ estimatedAboveFoldScore: number;
1327
+ }
1328
+ interface SocialProofAnalysis {
1329
+ hasTestimonials: boolean;
1330
+ testimonialCount: number;
1331
+ hasReviews: boolean;
1332
+ reviewCount: number;
1333
+ hasRatings: boolean;
1334
+ averageRating: number | null;
1335
+ hasClientLogos: boolean;
1336
+ clientLogoCount: number;
1337
+ hasCaseStudies: boolean;
1338
+ hasAwards: boolean;
1339
+ hasCertifications: boolean;
1340
+ hasTrustBadges: boolean;
1341
+ hasStatistics: boolean;
1342
+ statisticsFound: string[];
1343
+ socialProofScore: number;
1344
+ }
1345
+ interface EngagementTriggers {
1346
+ hasCalculator: boolean;
1347
+ calculatorTypes: string[];
1348
+ hasQuiz: boolean;
1349
+ hasInteractiveElement: boolean;
1350
+ interactiveTypes: string[];
1351
+ hasEmbeddedVideo: boolean;
1352
+ videoCount: number;
1353
+ hasExpandableContent: boolean;
1354
+ hasTabsOrAccordion: boolean;
1355
+ hasChatWidget: boolean;
1356
+ engagementScore: number;
1357
+ }
1358
+ interface ConversionElementsData {
1359
+ aboveFold: AboveFoldAnalysis;
1360
+ socialProof: SocialProofAnalysis;
1361
+ engagementTriggers: EngagementTriggers;
1362
+ pageType: 'commercial' | 'informational' | 'mixed' | 'unknown';
1363
+ recommendations: string[];
1364
+ }
1365
+ /**
1366
+ * Main function: Analyze conversion elements
1367
+ */
1368
+ declare function analyzeConversionElements(html: string, url: string): {
1369
+ issues: AuditIssue[];
1370
+ data: ConversionElementsData;
1371
+ };
1372
+
1373
+ interface KeywordPlacementData {
1374
+ detectedKeywords: string[];
1375
+ urlAnalysis: {
1376
+ containsKeyword: boolean;
1377
+ keywordInUrl: string | null;
1378
+ urlSlug: string;
1379
+ isCleanUrl: boolean;
1380
+ hasDynamicParams: boolean;
1381
+ };
1382
+ titleAnalysis: {
1383
+ hasExactMatch: boolean;
1384
+ hasPartialMatch: boolean;
1385
+ titleMatchScore: number;
1386
+ position: 'start' | 'middle' | 'end' | 'none';
1387
+ };
1388
+ h1Analysis: {
1389
+ hasExactMatch: boolean;
1390
+ hasPartialMatch: boolean;
1391
+ h1Text: string | null;
1392
+ };
1393
+ firstParagraphAnalysis: {
1394
+ hasKeyword: boolean;
1395
+ keywordPosition: number | null;
1396
+ firstParagraphPreview: string;
1397
+ isWithinFirst100Words: boolean;
1398
+ };
1399
+ metaDescriptionAnalysis: {
1400
+ hasKeyword: boolean;
1401
+ position: 'start' | 'middle' | 'end' | 'none';
1402
+ };
1403
+ overallPlacementScore: number;
1404
+ }
1405
+ /**
1406
+ * Main function: Analyze keyword placement
1407
+ */
1408
+ declare function analyzeKeywordPlacement(html: string, url: string): {
1409
+ issues: AuditIssue[];
1410
+ data: KeywordPlacementData;
1411
+ };
1412
+
1413
+ interface InternalLink {
1414
+ href: string;
1415
+ anchorText: string;
1416
+ context: 'navigation' | 'content' | 'footer' | 'sidebar';
1417
+ isDoFollow: boolean;
1418
+ destination: 'internal' | 'external' | 'anchor';
1419
+ }
1420
+ interface TopicalClusterData {
1421
+ currentUrl: string;
1422
+ internalLinks: InternalLink[];
1423
+ externalLinks: InternalLink[];
1424
+ anchorLinks: InternalLink[];
1425
+ linkMetrics: {
1426
+ totalLinks: number;
1427
+ internalLinkCount: number;
1428
+ externalLinkCount: number;
1429
+ contentLinks: number;
1430
+ uniqueInternalDestinations: number;
1431
+ avgAnchorTextLength: number;
1432
+ hasExactMatchAnchors: boolean;
1433
+ };
1434
+ clusterSignals: {
1435
+ hasHubStructure: boolean;
1436
+ hasSpokeLinks: boolean;
1437
+ hasBreadcrumbs: boolean;
1438
+ hasRelatedPosts: boolean;
1439
+ hasCategoryLinks: boolean;
1440
+ internalToExternalRatio: number;
1441
+ };
1442
+ orphanPageRisk: 'low' | 'medium' | 'high';
1443
+ recommendations: string[];
1444
+ }
1445
+ /**
1446
+ * Main function: Analyze topical cluster structure
1447
+ */
1448
+ declare function analyzeTopicalClusters(html: string, url: string): {
1449
+ issues: AuditIssue[];
1450
+ data: TopicalClusterData;
1451
+ };
1452
+
1453
+ interface PlatformLink {
1454
+ platform: string;
1455
+ url: string;
1456
+ type: 'profile' | 'content' | 'mention' | 'embed';
1457
+ location: 'header' | 'footer' | 'content' | 'sidebar' | 'schema';
1458
+ }
1459
+ interface PlatformPresenceData {
1460
+ detectedPlatforms: string[];
1461
+ platformLinks: PlatformLink[];
1462
+ socialProfiles: {
1463
+ platform: string;
1464
+ url: string;
1465
+ hasSchemaMarkup: boolean;
1466
+ }[];
1467
+ embeddedContent: {
1468
+ platform: string;
1469
+ count: number;
1470
+ }[];
1471
+ metrics: {
1472
+ totalPlatforms: number;
1473
+ hasYouTube: boolean;
1474
+ hasTikTok: boolean;
1475
+ hasTwitter: boolean;
1476
+ hasLinkedIn: boolean;
1477
+ hasReddit: boolean;
1478
+ hasFacebook: boolean;
1479
+ hasInstagram: boolean;
1480
+ hasPinterest: boolean;
1481
+ hasPodcast: boolean;
1482
+ hasGitHub: boolean;
1483
+ };
1484
+ schemaPresence: {
1485
+ hasSameAs: boolean;
1486
+ sameAsUrls: string[];
1487
+ hasOrganizationSchema: boolean;
1488
+ hasPersonSchema: boolean;
1489
+ };
1490
+ crossPlatformScore: number;
1491
+ recommendations: string[];
1492
+ }
1493
+ /**
1494
+ * Main function: Analyze platform presence
1495
+ */
1496
+ declare function analyzePlatformPresence(html: string, url: string): {
1497
+ issues: AuditIssue[];
1498
+ data: PlatformPresenceData;
1499
+ };
1500
+
1501
+ interface InteractiveElement {
1502
+ type: 'calculator' | 'quiz' | 'form' | 'widget' | 'embed' | 'tool' | 'interactive';
1503
+ description: string;
1504
+ location: string;
1505
+ hasUserInput: boolean;
1506
+ }
1507
+ interface InteractiveToolsData {
1508
+ hasInteractiveTools: boolean;
1509
+ tools: InteractiveElement[];
1510
+ dwellTimeSignals: {
1511
+ hasCalculator: boolean;
1512
+ hasQuiz: boolean;
1513
+ hasInteractiveWidget: boolean;
1514
+ hasVideoEmbed: boolean;
1515
+ hasCodePlayground: boolean;
1516
+ hasConfigurator: boolean;
1517
+ hasChatWidget: boolean;
1518
+ };
1519
+ toolCount: number;
1520
+ dwellTimeScore: number;
1521
+ recommendations: string[];
1522
+ }
1523
+ /**
1524
+ * Main function: Analyze interactive tools on the page
1525
+ */
1526
+ declare function analyzeInteractiveTools(html: string, url: string): {
1527
+ issues: AuditIssue[];
1528
+ data: InteractiveToolsData;
1529
+ };
1530
+
1531
+ type FunnelStage = 'tofu' | 'mofu' | 'bofu' | 'mixed';
1532
+ interface FunnelIntentData {
1533
+ detectedStage: FunnelStage;
1534
+ confidence: number;
1535
+ signals: {
1536
+ tofu: string[];
1537
+ mofu: string[];
1538
+ bofu: string[];
1539
+ };
1540
+ metrics: {
1541
+ informationalScore: number;
1542
+ considerationScore: number;
1543
+ conversionScore: number;
1544
+ };
1545
+ pageType: string;
1546
+ aiOverviewRisk: 'high' | 'medium' | 'low';
1547
+ recommendations: string[];
1548
+ }
1549
+ /**
1550
+ * Main function: Analyze search funnel intent
1551
+ */
1552
+ declare function analyzeFunnelIntent(html: string, url: string): {
1553
+ issues: AuditIssue[];
1554
+ data: FunnelIntentData;
1555
+ };
1556
+
1557
+ interface NavBoostSignalsData {
1558
+ clickOptimization: {
1559
+ hasClearTitle: boolean;
1560
+ hasCompellingMetaDesc: boolean;
1561
+ titleTruncated: boolean;
1562
+ metaDescTruncated: boolean;
1563
+ estimatedCTRPotential: 'high' | 'medium' | 'low';
1564
+ };
1565
+ engagementSignals: {
1566
+ hasTableOfContents: boolean;
1567
+ hasJumpLinks: boolean;
1568
+ estimatedScrollDepth: 'deep' | 'medium' | 'shallow';
1569
+ hasProgressIndicator: boolean;
1570
+ hasStickyNavigation: boolean;
1571
+ contentSections: number;
1572
+ };
1573
+ bounceRiskFactors: {
1574
+ hasAboveFoldContent: boolean;
1575
+ hasSlowLoadingIndicators: boolean;
1576
+ hasPopupRisk: boolean;
1577
+ hasIntrusiveAds: boolean;
1578
+ contentMatchesTitle: boolean;
1579
+ hasImmediateValue: boolean;
1580
+ };
1581
+ dwellTimeFactors: {
1582
+ estimatedReadTime: number;
1583
+ hasVideo: boolean;
1584
+ hasInteractiveElements: boolean;
1585
+ contentDepth: 'comprehensive' | 'moderate' | 'thin';
1586
+ hasRelatedContent: boolean;
1587
+ };
1588
+ overallNavBoostScore: number;
1589
+ recommendations: string[];
1590
+ }
1591
+ /**
1592
+ * Main function: Analyze NavBoost optimization signals
1593
+ */
1594
+ declare function analyzeNavBoostSignals(html: string, url: string): {
1595
+ issues: AuditIssue[];
1596
+ data: NavBoostSignalsData;
1597
+ };
1598
+
1599
+ interface EntitySEOData {
1600
+ entitySignals: {
1601
+ hasOrganizationSchema: boolean;
1602
+ hasPersonSchema: boolean;
1603
+ hasProductSchema: boolean;
1604
+ hasSameAsReferences: boolean;
1605
+ sameAsUrls: string[];
1606
+ hasMainEntityOfPage: boolean;
1607
+ hasAboutReference: boolean;
1608
+ };
1609
+ entityClarity: {
1610
+ primaryEntityType: string | null;
1611
+ entityNameConsistency: boolean;
1612
+ hasEntityDefinition: boolean;
1613
+ hasWikipediaStyleIntro: boolean;
1614
+ entityMentionCount: number;
1615
+ };
1616
+ topicalCoverage: {
1617
+ hasRelatedEntities: boolean;
1618
+ relatedEntityCount: number;
1619
+ hasEntityRelationships: boolean;
1620
+ topicalDepthScore: number;
1621
+ };
1622
+ knowledgePanelSignals: {
1623
+ hasCompanyInfo: boolean;
1624
+ hasFounderInfo: boolean;
1625
+ hasHeadquarters: boolean;
1626
+ hasIndustryMention: boolean;
1627
+ hasDateFounded: boolean;
1628
+ };
1629
+ entitySEOScore: number;
1630
+ recommendations: string[];
1631
+ }
1632
+ /**
1633
+ * Main function: Analyze Entity SEO optimization
1634
+ */
1635
+ declare function analyzeEntitySEO(html: string, url: string): {
1636
+ issues: AuditIssue[];
1637
+ data: EntitySEOData;
1638
+ };
1639
+
1640
+ interface FreshnessSignalsData {
1641
+ dateSignals: {
1642
+ hasDatePublished: boolean;
1643
+ hasDateModified: boolean;
1644
+ hasSchemaDatePublished: boolean;
1645
+ hasSchemaDateModified: boolean;
1646
+ visibleDateOnPage: string | null;
1647
+ schemaDatePublished: string | null;
1648
+ schemaDateModified: string | null;
1649
+ daysSincePublished: number | null;
1650
+ daysSinceModified: number | null;
1651
+ };
1652
+ freshnessIndicators: {
1653
+ hasCurrentYearMention: boolean;
1654
+ hasRecentDateReferences: boolean;
1655
+ hasUpdateNotice: boolean;
1656
+ hasChangeLog: boolean;
1657
+ hasVersionNumber: boolean;
1658
+ contentFreshnessSignal: 'fresh' | 'dated' | 'evergreen' | 'unknown';
1659
+ };
1660
+ qdfRelevance: {
1661
+ isLikelyQDFTopic: boolean;
1662
+ qdfIndicators: string[];
1663
+ updateFrequencyRecommendation: string;
1664
+ };
1665
+ aiCitationOptimization: {
1666
+ hasLastUpdatedMeta: boolean;
1667
+ hasClearDateFormat: boolean;
1668
+ freshnessSchemaComplete: boolean;
1669
+ aiCitationReadiness: 'high' | 'medium' | 'low';
1670
+ };
1671
+ freshnessScore: number;
1672
+ recommendations: string[];
1673
+ }
1674
+ /**
1675
+ * Main function: Analyze freshness signals
1676
+ */
1677
+ declare function analyzeFreshnessSignals(html: string, url: string): {
1678
+ issues: AuditIssue[];
1679
+ data: FreshnessSignalsData;
1680
+ };
1681
+
1682
+ /**
1683
+ * AI Content Structure Checks
1684
+ *
1685
+ * AI systems prefer well-structured content that's easy to parse and quote.
1686
+ * These checks verify content is formatted optimally for AI consumption:
1687
+ * - Tables for comparisons/data
1688
+ * - Numbered lists for steps/procedures
1689
+ * - Bullet points for features/benefits
1690
+ * - Clear Q&A format for direct answers
1691
+ * - Concise, quotable statements
1692
+ */
1693
+
1694
+ interface AIContentStructureData {
1695
+ tables: {
1696
+ count: number;
1697
+ hasComparisonTable: boolean;
1698
+ hasDataTable: boolean;
1699
+ };
1700
+ lists: {
1701
+ orderedLists: number;
1702
+ unorderedLists: number;
1703
+ hasStepByStep: boolean;
1704
+ hasBulletedFeatures: boolean;
1705
+ };
1706
+ qaFormat: {
1707
+ hasExplicitQA: boolean;
1708
+ questionCount: number;
1709
+ hasDirectAnswers: boolean;
1710
+ };
1711
+ quotability: {
1712
+ hasDefinitions: boolean;
1713
+ hasConciseStatements: boolean;
1714
+ shortParagraphRatio: number;
1715
+ };
1716
+ structureScore: number;
1717
+ }
1718
+ declare function analyzeAIContentStructure(html: string, url: string): {
1719
+ issues: AuditIssue[];
1720
+ data: AIContentStructureData;
1721
+ };
1722
+
1723
+ /**
1724
+ * RAG Chunk Readiness
1725
+ *
1726
+ * How AI answer engines actually retrieve content: RAG (Retrieval-Augmented
1727
+ * Generation) systems chunk a page into pieces — the 2026 convergence
1728
+ * benchmark is roughly 400-512 tokens per chunk, 10-25% overlap — then
1729
+ * retrieve whichever chunk(s) best match a query, not the whole page. A page
1730
+ * whose own heading-delimited sections are naturally chunk-sized, with clear
1731
+ * headings and paragraphs that don't lean on the previous section's context
1732
+ * to make sense, is less likely to get split mid-thought by a RAG chunker —
1733
+ * preserving the semantic boundaries the author actually wrote, which is
1734
+ * what the RAG-chunking literature credits with better retrieval recall.
1735
+ *
1736
+ * This is a genuinely different angle from ai-content-structure.ts (tables/
1737
+ * lists/Q&A formatting): that's about FORMAT, this is about SECTION SIZE
1738
+ * and SELF-CONTAINMENT. Novel enough that no dedicated site-auditing tool
1739
+ * for it was found as of this writing — RAG-chunking guidance that exists
1740
+ * targets people building RAG systems, not people writing web content.
1741
+ */
1742
+
1743
+ interface ChunkSection {
1744
+ heading: string;
1745
+ headingLevel: number;
1746
+ wordCount: number;
1747
+ estimatedTokens: number;
1748
+ sizeQuality: 'too-short' | 'good' | 'too-long';
1749
+ startsWithDanglingReference: boolean;
1750
+ }
1751
+ interface RAGChunkReadinessData {
1752
+ sections: ChunkSection[];
1753
+ totalSections: number;
1754
+ wellSizedSectionCount: number;
1755
+ danglingReferenceCount: number;
1756
+ chunkReadinessScore: number;
1757
+ }
1758
+ declare function analyzeRAGChunkReadiness(html: string, url: string): {
1759
+ issues: AuditIssue[];
1760
+ data: RAGChunkReadinessData;
1761
+ };
1762
+
1763
+ /**
1764
+ * Citation Quality Checks
1765
+ *
1766
+ * AI prioritizes content that cites reputable sources. Well-cited content
1767
+ * demonstrates expertise and trustworthiness (E-E-A-T signals).
1768
+ * These checks verify proper citation practices.
1769
+ */
1770
+
1771
+ interface CitationQualityData {
1772
+ totalLinks: number;
1773
+ externalLinks: number;
1774
+ citationLinks: number;
1775
+ reputableSources: {
1776
+ academic: string[];
1777
+ government: string[];
1778
+ educational: string[];
1779
+ authoritative: string[];
1780
+ technical: string[];
1781
+ };
1782
+ citationPatterns: {
1783
+ hasInlineCitations: boolean;
1784
+ hasReferencesSection: boolean;
1785
+ hasStatistics: boolean;
1786
+ statisticsWithSources: number;
1787
+ statisticsWithoutSources: number;
1788
+ };
1789
+ citationScore: number;
1790
+ }
1791
+ declare function analyzeCitationQuality(html: string, url: string): {
1792
+ issues: AuditIssue[];
1793
+ data: CitationQualityData;
1794
+ };
1795
+
1796
+ /**
1797
+ * Answer Conciseness Checks
1798
+ *
1799
+ * AI systems prefer succinct, quotable answers. Content that provides
1800
+ * clear, direct answers to questions is more likely to be cited.
1801
+ * This check analyzes answer quality and quotability.
1802
+ */
1803
+
1804
+ interface AnswerConcisenessData {
1805
+ headings: {
1806
+ total: number;
1807
+ questions: number;
1808
+ withDirectAnswers: number;
1809
+ };
1810
+ answers: {
1811
+ averageFirstSentenceLength: number;
1812
+ shortAnswersCount: number;
1813
+ longAnswersCount: number;
1814
+ quotableAnswers: string[];
1815
+ };
1816
+ definitions: {
1817
+ count: number;
1818
+ examples: string[];
1819
+ };
1820
+ keyTakeaways: {
1821
+ hasSummary: boolean;
1822
+ hasTLDR: boolean;
1823
+ hasKeyPoints: boolean;
1824
+ };
1825
+ concisenessScore: number;
1826
+ }
1827
+ declare function analyzeAnswerConciseness(html: string, url: string): {
1828
+ issues: AuditIssue[];
1829
+ data: AnswerConcisenessData;
1830
+ };
1831
+
1832
+ /**
1833
+ * Brand Mention Optimization Checks
1834
+ *
1835
+ * AI systems extract and quote brand information when answering queries.
1836
+ * This check analyzes whether your brand is clearly defined in a way
1837
+ * that AI can extract, quote, and recommend.
1838
+ *
1839
+ * Key insight: "AI doesn't decide who you are. It mostly just repeats
1840
+ * what it finds on the internet." - Control your brand narrative.
1841
+ */
1842
+
1843
+ interface BrandMentionData {
1844
+ brandSignals: {
1845
+ hasBrandDefinition: boolean;
1846
+ hasUSP: boolean;
1847
+ hasValueProposition: boolean;
1848
+ hasBrandStatement: boolean;
1849
+ brandMentionCount: number;
1850
+ };
1851
+ brandCoverage: {
1852
+ hasPricingInfo: boolean;
1853
+ hasAboutSection: boolean;
1854
+ hasFAQSection: boolean;
1855
+ hasTestimonials: boolean;
1856
+ hasProofPoints: boolean;
1857
+ };
1858
+ brandConsistency: {
1859
+ hasConsistentNaming: boolean;
1860
+ hasContactInfo: boolean;
1861
+ hasSocialLinks: boolean;
1862
+ hasReviewLinks: boolean;
1863
+ };
1864
+ quotableBrandStatements: string[];
1865
+ brandScore: number;
1866
+ }
1867
+ declare function analyzeBrandMentionOptimization(html: string, url: string): {
1868
+ issues: AuditIssue[];
1869
+ data: BrandMentionData;
1870
+ };
1871
+
1872
+ /**
1873
+ * AI Citation Worthiness Checks
1874
+ *
1875
+ * AI systems prefer to cite content that demonstrates originality and
1876
+ * human expertise - things AI can't easily fake. This check analyzes
1877
+ * signals that make content worthy of being cited as a source.
1878
+ *
1879
+ * Key insight: "If AI can easily create it, don't publish it.
1880
+ * Add what AI can't fake: original data, real experience, real
1881
+ * screenshots, real documentation, and real opinions."
1882
+ */
1883
+
1884
+ interface AICitationWorthinessData {
1885
+ originalitySignals: {
1886
+ hasOriginalData: boolean;
1887
+ hasScreenshots: boolean;
1888
+ hasOriginalImages: boolean;
1889
+ hasDatedContent: boolean;
1890
+ hasFirstPersonExperience: boolean;
1891
+ };
1892
+ expertiseSignals: {
1893
+ hasAuthorByline: boolean;
1894
+ hasAuthorCredentials: boolean;
1895
+ hasExpertQuotes: boolean;
1896
+ hasMethodology: boolean;
1897
+ hasPrimaryResearch: boolean;
1898
+ };
1899
+ proofSignals: {
1900
+ hasSpecificNumbers: boolean;
1901
+ hasCaseStudies: boolean;
1902
+ hasBeforeAfter: boolean;
1903
+ hasDocumentation: boolean;
1904
+ hasRealExamples: boolean;
1905
+ };
1906
+ citationWorthinessScore: number;
1907
+ aiProofElements: string[];
1908
+ }
1909
+ declare function analyzeAICitationWorthiness(html: string, url: string): {
1910
+ issues: AuditIssue[];
1911
+ data: AICitationWorthinessData;
1912
+ };
1913
+
1914
+ /**
1915
+ * Review Ecosystem Checks
1916
+ *
1917
+ * AI systems use review signals from multiple platforms to assess brand trust.
1918
+ * This check analyzes integration with review platforms and testimonial presence.
1919
+ *
1920
+ * Key insight: "If you want visibility across AI platforms, you need review
1921
+ * diversity. That means building reviews on the platforms that matter in
1922
+ * your specific niche."
1923
+ */
1924
+
1925
+ interface ReviewEcosystemData {
1926
+ reviewPlatforms: {
1927
+ linked: string[];
1928
+ embedded: string[];
1929
+ sameAsLinks: string[];
1930
+ };
1931
+ testimonials: {
1932
+ count: number;
1933
+ hasAttribution: boolean;
1934
+ hasPhotos: boolean;
1935
+ hasCompanyNames: boolean;
1936
+ };
1937
+ reviewSchema: {
1938
+ hasAggregateRating: boolean;
1939
+ hasReviewSchema: boolean;
1940
+ ratingValue?: number;
1941
+ reviewCount?: number;
1942
+ };
1943
+ trustSignals: {
1944
+ hasTrustBadges: boolean;
1945
+ hasCertifications: boolean;
1946
+ hasAwards: boolean;
1947
+ hasMediaMentions: boolean;
1948
+ };
1949
+ reviewEcosystemScore: number;
1950
+ }
1951
+ declare function analyzeReviewEcosystem(html: string, url: string): {
1952
+ issues: AuditIssue[];
1953
+ data: ReviewEcosystemData;
1954
+ };
1955
+
1956
+ /**
1957
+ * The 21 checks that used to live in a private package, encrypted into the CLI's WASM
1958
+ * binary and decrypted with a passphrase that shipped in the same tarball. Every plan runs
1959
+ * every check, so they are ordinary checks now: `runFullAudit` runs them by default and
1960
+ * `premiumChecks` is exported for callers that want to run or replace them individually.
1961
+ */
1962
+
1963
+ /** What `runFullAudit` runs when no `premiumChecks` option is given. */
1964
+ declare const premiumChecks: PremiumChecks;
1965
+
1118
1966
  /**
1119
1967
  * URL Safety Check (Local Hash Database)
1120
1968
  *
@@ -5703,4 +6551,4 @@ declare namespace index {
5703
6551
  export { type index_DetectionResult as DetectionResult, type index_Evidence as Evidence, type index_Framework as Framework, type index_FrameworkCheck as FrameworkCheck, type index_FrameworkInfo as FrameworkInfo, type index_FrameworkRecipe as FrameworkRecipe, index_SCORE_FLOOR as SCORE_FLOOR, index_SIGNALS as SIGNALS, index_SUPPORTED_FRAMEWORKS as SUPPORTED_FRAMEWORKS, type index_Signal as Signal, index_WEIGHT as WEIGHT, detectFramework$1 as detectFramework, index_detectFromEvidence as detectFromEvidence, index_detectFromHeaders as detectFromHeaders, index_detectFromHtml as detectFromHtml, index_detectFromPackageJson as detectFromPackageJson, index_embedRecipe as embedRecipe, index_getFrameworkChecks as getFrameworkChecks, index_getFrameworkDisplayName as getFrameworkDisplayName, index_getFrameworkIssues as getFrameworkIssues, index_getFrameworkSuggestions as getFrameworkSuggestions, index_getFrameworkSummary as getFrameworkSummary, index_getMigrationPaths as getMigrationPaths, index_getPerformanceTips as getPerformanceTips, index_getSeoChallenges as getSeoChallenges, index_getTotalFrameworkChecks as getTotalFrameworkChecks, index_loadRecipe as loadRecipe };
5704
6552
  }
5705
6553
 
5706
- export { type AIContentConfig, type AIKeywordResearchOptions, type AgentDefinition, type AgentTool, type AlertChannel, type AlertConfig, type AlertMessage, type AlertResult, type AlertSeverity, type AlertType, type AuditAlertPayload, type AuditIssue, type AuditIssueData, type AuditOptions, type AuditPRResult, type AuditReport, type AuditReportData, type AuditRunnerOptions, type AuditRunnerResult, type AuditSchedule, type BlogPostConfig, type BrandConfig, type CIAction, type CIKeywordOptions, type CIKeywordResult, COMMIT_TYPES, type ChangelogConfig, type ChangelogResult, type CitationCheckOptions, type CommitConfig, type ComparisonConfig, type ComparisonRow, type CompetitiveInsight, type CompetitiveSearchOptions, type CompetitiveSearchResult, type CompetitorComparison, type CompetitorKeywordResult, type CompetitorOverlap, type CompetitorTool, type CompetitorUrl, type ContentElements, type ContentGeneratorOptions, type ContentRecommendation, type ConventionalCommit, type CrawlResult, type CrawlStats, type CrawledPage, type CreateAuditPROptions, type CreatePROptions, type DataForSEOCredentials, type DeterministicFixInput, type DeterministicFixes, type DiscoveredPage, type EnhancedToolIdea, type ExecOptions, type ExecuteOptions, type ExecutionResult, type FAQItem, type FAQSchemaOptions, type FeaturedSnippetAnalysis, type Fix, type FixFile, type FixGeneratorOptions, type FixResult, type FrameworkInfo$1 as FrameworkInfo, type FreeKeywordResult, type FreeToolIdea, type GA4Config, type GEOAlert, type GEOAlertType, type GEOHistory, type GEOHistoryOptions, type GEOQuery, type GEOReport, type GEOResult, type GEOTrend, type GSCConfig, type GSCCredentials, type GSCPerformanceData, type GSCQueryData, type GSCQueryResult, type GeneratedCode, type GeneratedContent, type GeneratedFix, type HeadingStructure, type HeadlineAnalysis, type HealthScore, ISSUE_DEFINITIONS, type ImageInfo$2 as ImageInfo, type InjectionResult, type IntentAnalysis, type IssueCategory, type IssueDefinition, type IssueSeverity, type KeyFact, type KeyFactsOptions, type KeywordAction, type KeywordCluster, type KeywordData, type KeywordDensityAnalysis, type KeywordLLM, type KeywordOpportunity, type KeywordRecommendation, type KeywordResearchOptions, type KeywordResearchResult, type KeywordStats, type KeywordTopic, type KeywordTrend, type LLMCitationResult, type LLMJudgeOptions, type LLMProvider, LOCATION_CODES, type LSIKeyword, type LinkInfo$1 as LinkInfo, type Mention, type MentionType, type MetaData, type MetaFixOptions, type NGram, type NLPAnalysisResult, OG_IMAGE_SPECS, type OptimizeOptions, type PRConfig, type PRDescription, PRIORITY_WEIGHTS, type PRResult, type PageAudit, type PageData, type PageMeta, type PaidKeywordResult, type ParsedResponse, type PlanTier, type ProviderStats, type QuickWin, type RankCheckOptions, type RankCheckResult, type RankHistory, RankTracker, type RankingResult, type RankingTierLimits, type ReadabilityResult, type ReadmeConfig, type ReadmeResult, type ReportBranding, type ReportConfig, type ReportData, type ReportPageData, type RouteInfo, type SEOAnalysisResult, type SEOFixCommit, type SEOFixSummary, type SEOIssue, type SEORecommendation, type SEOScore, SEO_SCOPES, SITE_PROFILE_QUESTIONS, type ScheduledAuditConfig, type ScheduledAuditResult, type SchemaData, Schemas, type SearchIntent, type Sentiment, type SerpApiConfig, SerpClient, type SerpClientConfig, type SerpFeature, type SiteCrawlResult, type SiteProfile, type SiteSummary, type SnippetRecommendation, type SnippetType, type SocialMetaConfig, type SocialMetaFix, type SummarizerOptions, type TFIDFResult, TIER_LIMITS, type ToolFeasibilityScore, type ToolFunction, type ToolResult, type TopicClusterResult, type TopicModel, type TrackedKeyword, type TrackerConfig, type TrackingOptions, type TrendDirection, type UncertaintyAssessment, type WizardQuestion, type WizardResponse, type WizardResult, type WizardSession, type WorkflowConfig, addTrackingResult, analyzeAnchorText, analyzeCanonicalAdvanced, analyzeClientRendering, analyzeContentFreshness, analyzeDOMStructure, analyzeFeaturedSnippetPotential, analyzeHeadings, analyzeHeadline, analyzeHreflang, analyzeImages$1 as analyzeImages, analyzeKeywordDensity, analyzeKeywords, analyzeLinks, analyzeLocalSEO, analyzeMobile, analyzeModernImages, analyzeOnPage, analyzePagination, analyzePerformance, analyzeReadability, analyzeRedirectChain, analyzeRedirects, analyzeResponsiveImages, analyzeSERPPreview, analyzeSecurity, analyzeSecurityHeaders$1 as analyzeSecurityHeaders, analyzeSocialMeta, analyzeStructuredData$1 as analyzeStructuredData, analyzeTrackerBloat, analyzeUrl, analyzeUrlSafety, index$1 as analyzers, applyFixes, assessReplacement, buildDeterministicFixes, buildFrameworkGuidance, buildGSCApiRequest, buildGSCRequest, calculateAIVisibilityScore, calculateBM25, calculateTFIDF$1 as calculateKeywordTFIDF, calculateNextRun, calculateTFIDF, checkAIBotBlocking, checkAMP, checkAdsTxt, checkAppleTouchIcon, checkBalance, checkCertificate, checkDMARC, checkGitHubCLI, checkInternalRedirects, checkJSRenderingRatio, checkLLMCitations, checkLlmsTxt, checkMobileResources, checkPlaintextEmails, checkRedirects, checkRobots, checkRobotsTxt, checkSPF, checkSitemap, classifyIntent, classifyIntents, clusterKeywordsByEmbedding, compareCompetitorVisibility, comparePeriods, completeWizard, crawlSite, crawlUrl, createAuditPR, createFallbackSummary, createGEOHistory, createPullRequest, createSEOCommit, createSEOCommits, describeConcerns, detectDuplicates, detectFramework, detectGitHubPages, detectMentions, detectSoft404, detectTechnologies, detectVisibilityChanges, discoverCompetitorKeywords, discoverPagesFromLinks, discoverRoutesFromRepo, enhanceSummaryWithCompetitors, enhanceToolIdea, enrichKeywordsWithEstimates, ensureGitRepo, evaluateAndEnhanceToolIdeas, evaluateToolFeasibility, executeAgent, extractContentHash, extractEntityPhrases, extractImages, extractKeyPhrases, extractLinks, extractMeta, extractNgrams, extractSchema, extractSeedKeywords, extractTopics, fetchCoreWebVitals, findAlmostPage1Keywords, findAppRoot, findCTROpportunities, findHtmlEntry, findLSIKeywords, findPageFiles, findTopPerformers, formatAlertMessage, formatCIResult, formatCompetitorReport, formatConventionalCommit, formatFeaturedSnippetReport, formatHeadlineReport, formatIntentReport, formatKeywordDensityReport, formatKeywordReport, formatPRBody, formatPRTitle, formatReadabilityReport, formatReport, formatSEOCommitMessage, formatTopicReport, formatWizardProgress, index as frameworks, generateAICitableContent, generateAllFixes, generateAngularSEOService, generateAspNetCoreSEO, generateAstroBaseHead, generateAstroMeta, generateBlogPost, generateBranchName, generateChangelog, generateCommitSummary, generateComparisonTable, generateCompleteSocialMetaSetup, generateDjangoSEOHelper, generateDuplicateIssues, generateEleventySEO, generateFAQSchema, generateFixes, generateGA4EnvTemplate, generateGA4ReactComponent, generateGA4Script, generateGA4ViteScript, generateGEOReport, generateGSCVerificationTag, generateGitHubActionSetup, generateGoSEO, generateHTMLReport, generateHTMLSocialMeta, generateHTMXSEO, generateHeadlineVariations, generateHugoSEO, generateJekyllSEO, generateJsonReport, generateKeyFacts, generateLaravelSEOHelper, generateMarkdownReport, generateNextAppMetadata, generateNextJsAppRouterMetadata, generateNextJsPagesRouterHead, generateNextPagesHead, generateNuxtSEOHead, generatePDFReport, generatePRDescription, generatePhoenixSEO, generateRailsSEOHelper, generateReactHelmetSocialMeta, generateReactSEOHead, generateRecommendationQueries, generateRemixMeta, generateRemixSEO, generateSecretsDoc, generateSocialMetaFix, generateSpringBootSEO, generateSvelteKitMeta, generateSvelteKitSEOHead, generateUncertaintyQuestions, generateVueSEOHead, generateWizardQuestions, generateWorkflow, getAIVisibilitySummary, getAutocompleteSuggestions, getDateRange, getExpandedSuggestions, getFrameworkSpecificFix, getFrameworkSpecificFixExtended, getGSCSetupInstructions, getGitUser, getKeywordData, getKeywordSuggestions, getMaxKdThreshold, getNextQuestion, getRelatedKeywords, getVisibilityTrend, groupKeywordsByTopic, identifyQuickWins, injectGA4, injectGSCVerification, interpolatePrompt, isGitRepo, keywordLLM, listFiles, loadAgent, loadAgentByName, mergePages, openAIKeywordLLM, optimizeForAI, optimizeReadme, parseGEOResponse, parseGSCResponse, parseJsonReply, parseSitemap, prioritizeKeywords, processWizardResponse, readFile, routesToUrls, runAIKeywordResearch, runAIReadinessChecks, runAdditionalChecks, runAuditWithFixes, runCIKeywordResearch, runCrawlabilityChecks, runDirectAnalysis, runFullAudit, runKeywordResearch, runNLPAnalysis, runScheduledAudit, scoreContentSEO, scoreMention, searchCompetitors, searchFormatConverters, searchHackerNews, sendAlert, sendAlerts, sendDiscordAlert, sendSlackAlert, servedDir, shouldRunAudit, shouldSendAlert, startWizardSession, suggestSchemaTypes, summarizeSite, tokenize, tools, trackLLMVisibility, transformGSCData, urlSafetyDatabase, wizardResponsesToContext, writeFile, writeGitHubActionFiles };
6554
+ export { type AIContentConfig, type AIKeywordResearchOptions, type AgentDefinition, type AgentTool, type AlertChannel, type AlertConfig, type AlertMessage, type AlertResult, type AlertSeverity, type AlertType, type AuditAlertPayload, type AuditIssue, type AuditIssueData, type AuditOptions, type AuditPRResult, type AuditReport, type AuditReportData, type AuditRunnerOptions, type AuditRunnerResult, type AuditSchedule, type BlogPostConfig, type BrandConfig, type CIAction, type CIKeywordOptions, type CIKeywordResult, COMMIT_TYPES, type ChangelogConfig, type ChangelogResult, type CitationCheckOptions, type CommitConfig, type ComparisonConfig, type ComparisonRow, type CompetitiveInsight, type CompetitiveSearchOptions, type CompetitiveSearchResult, type CompetitorComparison, type CompetitorKeywordResult, type CompetitorOverlap, type CompetitorTool, type CompetitorUrl, type ContentElements, type ContentGeneratorOptions, type ContentRecommendation, type ConventionalCommit, type CrawlResult, type CrawlStats, type CrawledPage, type CreateAuditPROptions, type CreatePROptions, type DataForSEOCredentials, type DeterministicFixInput, type DeterministicFixes, type DiscoveredPage, type EnhancedToolIdea, type ExecOptions, type ExecuteOptions, type ExecutionResult, type FAQItem, type FAQSchemaOptions, type FeaturedSnippetAnalysis, type Fix, type FixFile, type FixGeneratorOptions, type FixResult, type FrameworkInfo$1 as FrameworkInfo, type FreeKeywordResult, type FreeToolIdea, type GA4Config, type GEOAlert, type GEOAlertType, type GEOHistory, type GEOHistoryOptions, type GEOQuery, type GEOReport, type GEOResult, type GEOTrend, type GSCConfig, type GSCCredentials, type GSCPerformanceData, type GSCQueryData, type GSCQueryResult, type GeneratedCode, type GeneratedContent, type GeneratedFix, type HeadingStructure, type HeadlineAnalysis, type HealthScore, ISSUE_DEFINITIONS, type ImageInfo$2 as ImageInfo, type InjectionResult, type IntentAnalysis, type IssueCategory, type IssueDefinition, type IssueSeverity, type KeyFact, type KeyFactsOptions, type KeywordAction, type KeywordCluster, type KeywordData, type KeywordDensityAnalysis, type KeywordLLM, type KeywordOpportunity, type KeywordRecommendation, type KeywordResearchOptions, type KeywordResearchResult, type KeywordStats, type KeywordTopic, type KeywordTrend, type LLMCitationResult, type LLMJudgeOptions, type LLMProvider, LOCATION_CODES, type LSIKeyword, type LinkInfo$1 as LinkInfo, type Mention, type MentionType, type MetaData, type MetaFixOptions, type NGram, type NLPAnalysisResult, OG_IMAGE_SPECS, type OptimizeOptions, type PRConfig, type PRDescription, PRIORITY_WEIGHTS, type PRResult, type PageAudit, type PageData, type PageMeta, type PaidKeywordResult, type ParsedResponse, type PlanTier, type PremiumCheckFn, type PremiumChecks, type ProviderStats, type QuickWin, REDUNDANT_WHEN_PRESENT, type RankCheckOptions, type RankCheckResult, type RankHistory, RankTracker, type RankingResult, type RankingTierLimits, type ReadabilityResult, type ReadmeConfig, type ReadmeResult, type ReportBranding, type ReportConfig, type ReportData, type ReportPageData, type RouteInfo, type SEOAnalysisResult, type SEOFixCommit, type SEOFixSummary, type SEOIssue, type SEORecommendation, type SEOScore, SEO_SCOPES, SITE_PROFILE_QUESTIONS, type ScheduledAuditConfig, type ScheduledAuditResult, type SchemaData, Schemas, type SearchIntent, type Sentiment, type SerpApiConfig, SerpClient, type SerpClientConfig, type SerpFeature, type SiteCrawlResult, type SiteProfile, type SiteSummary, type SnippetRecommendation, type SnippetType, type SocialMetaConfig, type SocialMetaFix, type SummarizerOptions, type TFIDFResult, TIER_LIMITS, type ToolFeasibilityScore, type ToolFunction, type ToolResult, type TopicClusterResult, type TopicModel, type TrackedKeyword, type TrackerConfig, type TrackingOptions, type TrendDirection, type UncertaintyAssessment, type WizardQuestion, type WizardResponse, type WizardResult, type WizardSession, type WorkflowConfig, addTrackingResult, analyzeAICitationWorthiness, analyzeAIContentStructure, analyzeAnchorText, analyzeAnswerConciseness, analyzeBrandMentionOptimization, analyzeCanonicalAdvanced, analyzeCitationQuality, analyzeClientRendering, analyzeContentFreshness, analyzeContentScience, analyzeConversionElements, analyzeDOMStructure, analyzeEEATSignals, analyzeEntitySEO, analyzeFeaturedSnippet, analyzeFeaturedSnippetPotential, analyzeFreshnessSignals, analyzeFunnelIntent, analyzeHeadings, analyzeHeadline, analyzeHreflang, analyzeImages$1 as analyzeImages, analyzeInteractiveTools, analyzeInternalLinkGraph, analyzeKeywordCannibalizationSinglePage, analyzeKeywordDensity, analyzeKeywordPlacement, analyzeKeywords, analyzeLinks, analyzeLocalSEO, analyzeMobile, analyzeModernImages, analyzeNavBoostSignals, analyzeOnPage, analyzePagination, analyzePerformance, analyzePlatformPresence, analyzeRAGChunkReadiness, analyzeReadability, analyzeRedirectChain, analyzeRedirects, analyzeResponsiveImages, analyzeReviewEcosystem, analyzeSERPPreview, analyzeSecurity, analyzeSecurityHeaders$1 as analyzeSecurityHeaders, analyzeSocialMeta, analyzeStructuredData$1 as analyzeStructuredData, analyzeTopicalClusters, analyzeTrackerBloat, analyzeUrl, analyzeUrlSafety, index$1 as analyzers, applyFixes, assessReplacement, buildDeterministicFixes, buildFrameworkGuidance, buildGSCApiRequest, buildGSCRequest, calculateAIVisibilityScore, calculateBM25, calculateTFIDF$1 as calculateKeywordTFIDF, calculateNextRun, calculateTFIDF, checkAIBotBlocking, checkAMP, checkAdsTxt, checkAppleTouchIcon, checkBalance, checkCertificate, checkDMARC, checkGitHubCLI, checkInternalRedirects, checkJSRenderingRatio, checkLLMCitations, checkLlmsTxt, checkMobileResources, checkPlaintextEmails, checkRedirects, checkRobots, checkRobotsTxt, checkSPF, checkSitemap, classifyIntent, classifyIntents, clusterKeywordsByEmbedding, compareCompetitorVisibility, comparePeriods, completeWizard, crawlSite, crawlUrl, createAuditPR, createFallbackSummary, createGEOHistory, createPullRequest, createSEOCommit, createSEOCommits, dedupeIssues, describeConcerns, detectDuplicates, detectFramework, detectGitHubPages, detectMentions, detectSoft404, detectTechnologies, detectVisibilityChanges, discoverCompetitorKeywords, discoverPagesFromLinks, discoverRoutesFromRepo, enhanceSummaryWithCompetitors, enhanceToolIdea, enrichKeywordsWithEstimates, ensureGitRepo, evaluateAndEnhanceToolIdeas, evaluateToolFeasibility, executeAgent, extractContentHash, extractEntityPhrases, extractImages, extractKeyPhrases, extractLinks, extractMeta, extractNgrams, extractSchema, extractSeedKeywords, extractTopics, fetchCoreWebVitals, findAlmostPage1Keywords, findAppRoot, findCTROpportunities, findHtmlEntry, findLSIKeywords, findPageFiles, findTopPerformers, formatAlertMessage, formatCIResult, formatCompetitorReport, formatConventionalCommit, formatFeaturedSnippetReport, formatHeadlineReport, formatIntentReport, formatKeywordDensityReport, formatKeywordReport, formatPRBody, formatPRTitle, formatReadabilityReport, formatReport, formatSEOCommitMessage, formatTopicReport, formatWizardProgress, index as frameworks, generateAICitableContent, generateAllFixes, generateAngularSEOService, generateAspNetCoreSEO, generateAstroBaseHead, generateAstroMeta, generateBlogPost, generateBranchName, generateChangelog, generateCommitSummary, generateComparisonTable, generateCompleteSocialMetaSetup, generateDjangoSEOHelper, generateDuplicateIssues, generateEleventySEO, generateFAQSchema, generateFixes, generateGA4EnvTemplate, generateGA4ReactComponent, generateGA4Script, generateGA4ViteScript, generateGEOReport, generateGSCVerificationTag, generateGitHubActionSetup, generateGoSEO, generateHTMLReport, generateHTMLSocialMeta, generateHTMXSEO, generateHeadlineVariations, generateHugoSEO, generateJekyllSEO, generateJsonReport, generateKeyFacts, generateLaravelSEOHelper, generateMarkdownReport, generateNextAppMetadata, generateNextJsAppRouterMetadata, generateNextJsPagesRouterHead, generateNextPagesHead, generateNuxtSEOHead, generatePDFReport, generatePRDescription, generatePhoenixSEO, generateRailsSEOHelper, generateReactHelmetSocialMeta, generateReactSEOHead, generateRecommendationQueries, generateRemixMeta, generateRemixSEO, generateSecretsDoc, generateSocialMetaFix, generateSpringBootSEO, generateSvelteKitMeta, generateSvelteKitSEOHead, generateUncertaintyQuestions, generateVueSEOHead, generateWizardQuestions, generateWorkflow, getAIVisibilitySummary, getAutocompleteSuggestions, getDateRange, getExpandedSuggestions, getFrameworkSpecificFix, getFrameworkSpecificFixExtended, getGSCSetupInstructions, getGitUser, getKeywordData, getKeywordSuggestions, getMaxKdThreshold, getNextQuestion, getRelatedKeywords, getVisibilityTrend, groupKeywordsByTopic, identifyQuickWins, injectGA4, injectGSCVerification, interpolatePrompt, isGitRepo, keywordLLM, listFiles, loadAgent, loadAgentByName, mergePages, metaRefreshTarget, openAIKeywordLLM, optimizeForAI, optimizeReadme, parseGEOResponse, parseGSCResponse, parseJsonReply, parseSitemap, premiumChecks, prioritizeKeywords, processWizardResponse, readFile, routesToUrls, runAIKeywordResearch, runAIReadinessChecks, runAdditionalChecks, runAuditWithFixes, runCIKeywordResearch, runCrawlabilityChecks, runDirectAnalysis, runFullAudit, runKeywordResearch, runNLPAnalysis, runScheduledAudit, scoreContentSEO, scoreMention, searchCompetitors, searchFormatConverters, searchHackerNews, sendAlert, sendAlerts, sendDiscordAlert, sendSlackAlert, servedDir, shouldRunAudit, shouldSendAlert, startWizardSession, suggestSchemaTypes, summarizeSite, tokenize, tools, trackLLMVisibility, transformGSCData, urlSafetyDatabase, wizardResponsesToContext, writeFile, writeGitHubActionFiles };