seo 0.2.5 → 0.2.6

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.
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __seoCreateRequire } from 'node:module'; const require = __seoCreateRequire(import.meta.url);
3
- import{s as e}from"./dist-oOrG0Vub.js";export{e as startMcpServer};
3
+ import{s as e}from"./dist-PRmi6cXV.js";export{e as startMcpServer};
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
- import { Headers, RequestInit, fetch as fetch$1 } from "undici";
2
+ import { Headers, RequestInit as RequestInit$1, fetch as fetch$1 } from "undici";
3
3
  import { z } from "zod";
4
4
  import Database from "better-sqlite3";
5
5
  import pino from "pino";
@@ -2743,7 +2743,7 @@ type LatestCrawlSummaryRow = CrawlRunRow & {
2743
2743
  type HttpProfile = 'browser' | 'bot';
2744
2744
  declare const BROWSER_USER_AGENT: string;
2745
2745
  declare function requestHeaders(profile: HttpProfile): Headers;
2746
- declare function publicHttpFetch(url: string, input?: RequestInit & {
2746
+ declare function publicHttpFetch(url: string, input?: RequestInit$1 & {
2747
2747
  profile?: HttpProfile;
2748
2748
  }): Promise<import("undici").Response>;
2749
2749
  //#endregion
@@ -20390,6 +20390,7 @@ interface SeoCliPaths {
20390
20390
  configFile: string;
20391
20391
  tokensFile: string;
20392
20392
  oauthClientFile: string;
20393
+ telemetryStateFile: string;
20393
20394
  cacheDbFile: string;
20394
20395
  }
20395
20396
  type SeoCliPathOptions = {
@@ -20520,6 +20521,80 @@ declare class SessionLedger {
20520
20521
  summary(): string;
20521
20522
  }
20522
20523
  //#endregion
20524
+ //#region packages/core/src/telemetry.d.ts
20525
+ declare const TELEMETRY_ENDPOINT = "https://seoskill.dev/api/t";
20526
+ declare const TELEMETRY_SCHEMA_VERSION = 1;
20527
+ declare const TELEMETRY_TIMEOUT_MS = 2000;
20528
+ declare const TELEMETRY_EVENTS: readonly ["first_run", "setup_complete", "audit_start", "audit_complete", "audit_failed", "first_audit_complete", "active_d1", "active_d7", "active_d30"];
20529
+ declare const TELEMETRY_AGENTS: readonly ["claude-code", "cursor", "codex", "cli", "unknown"];
20530
+ declare const TELEMETRY_ERROR_CATEGORIES: readonly ["auth", "crawl_timeout", "network", "config", "unknown"];
20531
+ declare const TELEMETRY_REPORTS: readonly ["affected-urls", "agent-readiness", "ai-readiness", "ai-referrals", "ai-search-scorecard", "audit-page", "audit-urls", "cannibalisation", "community-intent", "compare-crawls", "content-optimization", "crawl-diff", "site-crawl", "ctr-underperformers", "decaying-pages", "setup-check", "entity-readiness", "explain-crawl-issue", "geo-gaps", "crawl-report", "index-coverage", "index-coverage-plan", "index-monitor", "index-watch", "internal-links", "link-recovery", "crawl-history", "crawler-rules", "llms-txt-audit", "generate-llms-txt", "measure-change", "monthly-report", "okf-build", "okf-validate", "page-opportunities", "performance-audit", "pseo-audit", "query-clusters", "quick-wins", "redirect-trace", "narrative-report", "second-page", "segment-impact", "striking-distance", "seo-to-ai-query", "top-fixes", "traffic-anomaly", "update-correlation", "search-performance-overview", "monthly-action-plan", "refresh-priorities", "technical-watch", "update-postmortem"];
20532
+ type TelemetryEvent = (typeof TELEMETRY_EVENTS)[number];
20533
+ type TelemetryAgent = (typeof TELEMETRY_AGENTS)[number];
20534
+ type TelemetryErrorCategory = (typeof TELEMETRY_ERROR_CATEGORIES)[number];
20535
+ type TelemetryReport = (typeof TELEMETRY_REPORTS)[number];
20536
+ type TelemetryState = {
20537
+ telemetryEnabled: boolean;
20538
+ firstRunAt: string;
20539
+ cohort: string;
20540
+ sentMilestones: TelemetryMilestone[];
20541
+ };
20542
+ type TelemetryPayload = {
20543
+ event: TelemetryEvent;
20544
+ version: string;
20545
+ agent: TelemetryAgent;
20546
+ os: string;
20547
+ arch: string;
20548
+ node: string;
20549
+ cohort: string;
20550
+ schema: 1;
20551
+ errorCategory?: TelemetryErrorCategory;
20552
+ report?: TelemetryReport;
20553
+ };
20554
+ type TelemetryMilestone = 'first_run' | 'setup_complete' | 'first_audit_complete' | 'active_d1' | 'active_d7' | 'active_d30';
20555
+ type TelemetryFetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
20556
+ type TelemetryOptions = {
20557
+ agent?: TelemetryAgent;
20558
+ clientName?: string;
20559
+ endpoint?: string;
20560
+ env?: NodeJS.ProcessEnv;
20561
+ fetch?: TelemetryFetch;
20562
+ nodeVersion?: string;
20563
+ now?: Date;
20564
+ notice?: (message: string) => void;
20565
+ processArch?: string;
20566
+ processPlatform?: string;
20567
+ stateFile?: string;
20568
+ version?: string;
20569
+ };
20570
+ type TelemetryDisableReason = 'ci' | 'do_not_track' | 'environment' | 'local_setting' | 'invalid_state';
20571
+ type TelemetryStatus = {
20572
+ enabled: boolean;
20573
+ reason?: TelemetryDisableReason;
20574
+ stateFile: string;
20575
+ state?: TelemetryState;
20576
+ };
20577
+ declare const TELEMETRY_NOTICE = "SEO Skill collects anonymous usage data to improve the tool (event name,\nreport id, version, agent, OS, architecture, Node major, and install week;\nnever URLs, report data, or identifiers of any kind).\nDocs: https://seoskill.dev/telemetry\nDisable: seo telemetry disable (or set DO_NOT_TRACK=1)\n";
20578
+ declare function isTelemetryCi(env?: NodeJS.ProcessEnv): boolean;
20579
+ declare function isTelemetryReport(value: unknown): value is TelemetryReport;
20580
+ declare function isoWeek(date: Date): string;
20581
+ declare function detectTelemetryAgent(input?: {
20582
+ clientName?: string;
20583
+ env?: NodeJS.ProcessEnv;
20584
+ }): TelemetryAgent;
20585
+ declare function buildTelemetryPayload(event: TelemetryEvent, state: TelemetryState, fields?: {
20586
+ errorCategory?: TelemetryErrorCategory;
20587
+ report?: TelemetryReport;
20588
+ }, options?: TelemetryOptions): TelemetryPayload;
20589
+ declare function getTelemetryStatus(options?: TelemetryOptions): TelemetryStatus;
20590
+ declare function setTelemetryEnabled(enabled: boolean, options?: TelemetryOptions): TelemetryStatus;
20591
+ declare function initializeTelemetry(options?: TelemetryOptions): TelemetryStatus;
20592
+ declare function trackTelemetryReportStart(report: string, options?: TelemetryOptions): void;
20593
+ declare function trackTelemetryReportComplete(report: string, options?: TelemetryOptions): void;
20594
+ declare function trackTelemetryReportFailed(report: string, errorCategory: TelemetryErrorCategory, options?: TelemetryOptions): void;
20595
+ declare function trackTelemetrySetupComplete(options?: TelemetryOptions): void;
20596
+ declare function telemetryErrorCategory(error: unknown): TelemetryErrorCategory;
20597
+ //#endregion
20523
20598
  //#region packages/core/src/utils/time.d.ts
20524
20599
  declare function parseOlderThan(input?: string): number | undefined;
20525
20600
  declare function formatRelativeExpiry(expiresAt: number): string;
@@ -20528,5 +20603,5 @@ declare function isoDate(daysAgo?: number): string;
20528
20603
  //#region packages/core/src/version.d.ts
20529
20604
  declare const SEO_VERSION: string;
20530
20605
  //#endregion
20531
- export { AI_REFERRAL_SOURCES, AI_REFERRAL_SOURCES_VERSION, AI_SEARCH_SCORECARD_METHODOLOGY_ID, AI_SEARCH_SCORECARD_METHODOLOGY_VERSION, AUDIT_PAGE_RULE_IDS, AffectedUrl, AffectedUrlFilters, AffectedUrlResult, AffectedUrlSelection, type AgentDiscoveryDataStatus, AgentReadinessCheck, AgentReadinessCheckStatus, type AgentReadinessProfile, AgentReadinessReport, AgentReadinessSection, type AgentRepresentationResponse, type AgentSkillObservation, AiReadinessReport, type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, AiSearchScorecard, AnalyticsMetricDelta, AnalyticsTestMetrics, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, AppConfig, AuditPageDependencies, AuditPageReport, AuthorizedGoogleClient, BROWSER_USER_AGENT, BacklinkProvider, BoundedSitemapInventory, BrandTermCandidate, CANNIBAL_MAXIMUM_DOMINANT_SHARE, CANNIBAL_MINIMUM_PAGE_SHARE, CRAWL_REPORT_STORAGE_VERSION, CRAWL_SKIP_REASONS, CTR_DEFAULT_LIMIT, CTR_DEFAULT_MIN_IMPRESSIONS, CTR_MAX_LIMIT, CTR_MAX_MIN_IMPRESSIONS, CacheStats, type CannibalAnalysis, CannibalDependencies, type CannibalItem, type CannibalPage, type CannibalReport, CannibalReportInput, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, ChangeMeasurement, ChangeMeasurementAttempt, ChangeRow, ChangeScope, ClientProfile, ClientProfileInput, CommunityIntent, CommunityIntentClassification, CommunityIntentReport, ContentExtractionDiagnostics, ContentExtractor, ContentGroup, ContentGroupDimension, ContentGroupMatchType, ContentGroupRow, ContentOptimizationIntent, ContentOptimizationReport, CoverageField, type CrawlAgentDiscovery, CrawlAiBotAccess, CrawlAiResourceSignal, CrawlAiSignals, CrawlAnalyticsDataSource, CrawlConfig, CrawlConfigInput, CrawlDataSourceStatus, CrawlDataSourceWindow, CrawlDiffItem, CrawlDiffRecommendation, CrawlDiffReport, CrawlExternalLinkVerification, CrawlFetchRateConfig, CrawlImplementationQueueInput, CrawlImplementationQueueItem, CrawlImplementationQueueOutput, CrawlIssue, CrawlIssueGroup, CrawlLinkGraph, CrawlMode, CrawlOneResult, CrawlOutputFormat, CrawlPageRow, CrawlPageSnapshot, CrawlReport, CrawlReportDataSources, CrawlReportMeta, CrawlReportStorageEnvelope, CrawlReportStoreAdapter, CrawlReportSummary, CrawlRequestObservation, CrawlResponseObservation, CrawlRun, CrawlRunRow, CrawlRunStats, CrawlSearchDataSource, type CrawlSiteDependencies, CrawlSitemapDiscovery, CrawlSkipImpact, CrawlSkipReason, CrawlSkipReasonCount, CrawlSkippedUrlsByImpact, CrawlSnapshotDiffReport, CrawlSnapshotIssueChange, CrawlSnapshotPageChange, CrawlStatusEvent, CrawlStatusHandler, CrawlStatusPhase, CredentialsProvider, CreditUsage, CsvFile, CsvRow, CsvValue, type CtrUnderperformer, CtrUnderperformerDependencies, type CtrUnderperformerSelection, DataForSeoProvider, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, DecayingDependencies, DecayingReportInput, DiagnosePropertyDependencies, DiagnosePropertyReport, DiagnosisDataStatus, DiagnosisPriority, DoctorCheck, DueIndexSelection, DueIndexUrl, EffectiveSnippetControl, EntityReadinessCheck, EntityReadinessReport, ExternalLinkCheck, ExternalLinkCheckAttempt, ExternalLinkCheckState, ExtractedLinkLocation, ExtractedPage, FetchPageDependencies, type FetchPageOptions, type FetchRateControls, GSC_FINAL_DATA_LAG_DAYS, GSC_TIME_ZONE, Ga4AccountSummary, Ga4DataStream, Ga4PropertySummary, Ga4ReportRequest, Ga4RunReportResult, Ga4WebStreamCandidate, Ga4WebStreamMatch, GenerateLlmsTxtOptions, GeneratedLlmsTxt, GeoGap, GeoGapFilters, GeoGapResult, type GoogleAccessTokenClient, GoogleRichResultAssessment, GoogleRichResultAssessmentSelection, GoogleRichResultAssessmentStatus, GscRow, HttpProfile, INTERNAL_LINK_LEXICAL_TARGET_LIMIT, INTERNAL_LINK_MATCH_EVIDENCE_LIMIT, IndexCoverageBoundedSection, IndexCoverageCandidateItem, IndexCoverageControlReason, IndexCoverageControlledItem, IndexCoverageCrawlInput, IndexCoverageInput, IndexCoverageInventoryItem, IndexCoveragePlan, IndexCoveragePlanInput, IndexCoverageReport, IndexCoverageReportDependencies, IndexCoverageReportInput, IndexCoverageSearchConsoleInput, IndexCoverageSearchVisibilityItem, IndexCoverageSignalsReport, IndexCoverageSitemapInput, IndexCoverageSourceCompleteness, IndexCoverageSourceEvidence, IndexCoverageSourceMembership, IndexCoverageTemplateReview, IndexMonitorPropertyRun, IndexMonitorReport, IndexPlanProperty, IndexPlanSuggestion, IndexPropertyUrlAllocation, IndexWatchChange, IndexWatchChangeKind, IndexWatchDependencies, IndexWatchIssueCode, IndexWatchItem, IndexWatchPrevious, IndexWatchReport, IndexWatchRow, IndexWatchStore, type InternalLinkCandidate, type InternalLinkMatchKind, type InternalLinkOpportunity, type InternalLinkQueryMatch, InternalLinksAnalysis, InternalLinksAnalysisInput, InternalLinksDependencies, InternalLinksInput, type InternalLinksReport, type InternalLinksSelection, type InternalLinksWarning, type JavaScriptRenderingInput, type JavaScriptRenderingMode, JsonFileStorageAdapter, KeywordDataProvider, KeywordOverview, KeywordRow, LatestCrawlSummaryRow, LighthouseFailureCode, LinkRecoverItem, LinkRecoverReport, LinkRecoverSummary, LlmsAuditIssue, LlmsAuditReport, type LlmsTxtLinkObservation, LocalCredentialsProvider, type MarkdownAlternateObservation, type MarkdownQualityObservation, MeasureChangeDependencies, MetricDelta, MonitoringStatusCheck, MonitoringStatusReport, NarrativeSection, type OAuthClientConfig, OKF_DEFAULT_CONCEPTS, OKF_MAX_CONCEPTS, OkfBundle, OkfExplainReport, OkfFile, OkfValidationIssue, OkfValidationReport, OpportunityBenchmarkRow, PageFetchDiagnostics, PageFetchResult, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, PageOpportunityInput, type PageOpportunityItem, PageOpportunityReport, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, PageSearchMetrics, PageTopQuery, PartialDiagnosisReason, PerformanceAuditReport, PerformanceFieldData, PerformanceFieldMetric, PerformanceMetric, PerformanceRating, PositionBenchmark, Presentation, PresentationChart, PresentationScalar, PresentationTable, PresentationTableColumn, PriorityQueueItem, ProgressReporter, ProviderOpts, ProviderResult, PseoAuditInput, type PseoAuditReport, type PseoAuditTemplate, type PseoCrawlSample, type PseoCrawlTechnicalStatus, PseoDependencies, type PseoEntityFit, type PseoIndexStatus, type PseoInspectionSample, type PseoPageRow, type PseoQueryCoverage, type PseoQueryPageRow, PseoTemplateCluster, type PseoTemplateMetrics, PseoTemplateShape, QueryCluster, type QueryClusterPage, type QueryClusterRow, QueryContentClassification, QueryContentCoverage, QueryContentSignal, QueryFieldCoverage, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, QuickWinsDependencies, QuickWinsInput, REPORT_BASELINE_MAX_AGE_MS, REPORT_BASELINE_MAX_DEPTH, REPORT_BASELINE_MAX_PAGES, ReadinessCheck, ReadinessSection, ReadinessStatus, Recommendation, RedirectTraceIssue, RedirectTraceReport, RedirectTraceStep, RenderingDocumentDifference, RenderingDocumentField, RenderingDocumentSnapshot, ReportNarrative, ResolveTechnicalBaselineInput, RobotsDirective, RuleCategory, RuleId, RuleInfo, RuleRecommendation, RuleSeverity, SCORECARD_CHECK_WEIGHTS, SCORECARD_STATUS_CREDIT, SEO_VERSION, SERP_TITLE_REFERENCE_WIDTH_PX, SERP_TITLE_WIDTH_PROFILE, ScorecardBand, ScorecardCheck, ScorecardCheckId, ScorecardObservation, ScorecardStatus, SearchAnalyticsRequest, SearchDateWindow, SearchPageBatch, SearchStatusIncident, SearchUpdate, type SecondPageAnalysis, SecondPageDependencies, SecondPageInput, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, type SecondPageSelection, type SegmentDimension, SegmentImpactDependencies, SegmentImpactInput, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SemrushProvider, SeoChange, SeoCliPathOptions, SeoCliPaths, SeoError, SeoErrorCode, SeoToAiQueryReport, SerpProvider, ServiceAccountAccessTokenClient, ServiceAccountConfig, ServiceAccountStatus, SessionLedger, SitemapDocument, SitemapFetchResult, SitemapInvalidLoc, SitemapLastmodObservation, SkippedDiagnosisSection, SnippetControlEvidence, StorageAdapter, StoredTokens, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, StrikingDistanceDependencies, StrikingDistanceInput, StrikingDistanceItem, StrikingDistanceReport, TechnicalBaseline, TechnicalBaselineDependencies, TechnicalBaselineStatus, TemplateAwareReport, TestMetrics, TitleWidthEstimate, TokenStorageMode, TokenStorageStatus, TopFix, TopFixFilters, TrafficAnomaly, TrafficAnomalyCoverage, TrafficAnomalyReport, type UnmatchedSegment, UpdateConfounder, UpdateCorrelationReport, UrlInspectionRequest, UrlInspectionResult, WorkflowAction, WorkflowReport, WorkflowStep, affectedUrls, agentReadiness, aiPromptsForQuery, aiReadiness, aiReferralSourceForValue, aiReferralsReport, aiSearchScorecard, allocateIndexUrlsToProperties, analyticsConnectionsSchema, analyzeAiReferralRows, analyzeCannibalRows, analyzeCtrUnderperformersFromRows, analyzeDecay, analyzeIndexCoverageSignals, analyzeInternalLinksFromRows, analyzePageOpportunitiesFromRows, analyzeQueryClustersFromRows, analyzeQuickWinsFromRows, analyzeSecondPageRows, analyzeSegmentRows, analyzeStrikingDistanceRows, analyzeTrafficAnomalyRows, assertUrlMatchesGscProperty, attachCrawlRecommendations, auditCrawlPages, auditCrawlRequests, auditLlmsTxt, auditPage, authStatus, boundedSitemapInventory, buildOkfBundle, buildPseoAuditReportFromRows, cannibalReport, changeMeasurementCsvRows, classifyCommunityIntent, clearCache, clientProfileSchema, clusterPseoTemplates, clusterQueryRows, collectAgentDiscovery, combineRobotsValues, communityIntentReport, compareCrawlPages, compareCrawlReports, compareSegmentRows, configSchema, contentCoverageRecommendation, contentCoverageType, contentOptimizationFromPageOpportunities, contentOptimizationReport, countLabel, crawlConfigHash, crawlConfigSchema, crawlDefinitionId, crawlDiff, crawlFixToQueueItem, crawlImplementationQueueWorkflow, crawlIssueGroupSchema, crawlIssueSchema, crawlOne, crawlPageSnapshotSchema, crawlReportSchema, crawlReportStore, crawlReportSummarySchema, crawlRequestObservationSchema, crawlRunId, crawlSite, crawlSkipImpact, crawlSkipReasonCountsFromRecord, crawlTopFixSchema, crawlerJsonSchemas, crawlerRuleCategorySchema, crawlerRuleIdSchema, crawlerRuleInfoSchema, crawlerRuleRecommendationSchema, crawlerRuleSeveritySchema, crawlerSchemas, createAuthorizedClient, createContentGroup, createCrawlReport, createCtrBenchmarkContext, createGoogleAccessTokenClient, createLogger, createPageRenderer, ctrUnderperformersReport, decayClusterDrafts, decayComparisonRange, decayingReport, deleteChange, deleteClient, deleteContentGroup, deleteCrawlReport, deleteTokens, deriveBrandTerms, detectBrandTerms, diagnoseCsvFiles, diagnoseProperty, diagnosePropertyWorkflow, effectiveRobotsDirectives, effectiveSnippetControl, ensureSeoCliDirs, entityReadiness, estimateSerpTitleWidth, expectedCtrForPosition, explainOkfValidation, explainRule, fetchCruxFieldData, fetchPage, fetchSearchStatusIncidents, fetchSitemapUrls, fileSize, finalGscDateRange, findOverlappingSearchUpdates, formatRelativeExpiry, ga4MatchReason, ga4PropertyIdFromName, ga4ReportQualityWarnings, ga4RequestCanUseCache, ga4RowsToObjects, generateLlmsTxt, geoGaps, geoGapsReport, getAuthModeStatus, getCacheStats, getChange, getClient, getClientConfig, getContentGroup, getDb, getKeywordProvider, getPreviousRun, getPrivacySnapshot, getRepeatedLinkRecoverUrls, getRunPages, getSeoCliPaths, getServiceAccountConfig, getServiceAccountStatus, getTokenStorageStatus, googleAnalyticsPropertyId, groupCrawlIssues, hasMetaRobotsDirective, hasRule, hasXRobotsDirective, hashKey, indexCoveragePlan, indexCoverageSignals, indexMonitor, indexWatch, inferPseoTemplate, inferTemplateMovement, insertCrawlRun, insertLinkRecoverRun, inspectUrl, internalLinksReport, interpretUpdateCorrelation, isBrandQuery, isCompatibleTechnicalBaseline, isCurrentTechnicalBaseline, isEntityEvidenceSchemaType, isSiteIdentitySchemaType, isSkippableReportError, isoDate, latestCrawlReport, latestCrawlSummaries, latestFinalGscDate, latestIndexWatchSummary, latestLinkRecoverSummary, linkRecover, linkRecoverRecommendation, listChanges, listClients, listContentGroups, listCrawlReports, listGa4AccountSummaries, listGa4DataStreams, listRules, listSearchUpdates, listSites, loadCrawlReport, localCredentialsProvider, loginWithLoopback, makeRunId, matchGa4WebStreams, measureChange, measureCoverage, metaRobotsDirectives, migrateLegacyMacConfig, missingOAuthClientMessage, missingSharedClientLoginMessage, monitoringStatus, monthlyReport, monthlyReportWorkflow, narrativeCsvFiles, normalizeCrawlConfig, normalizeCrawlSkipReasonCounts, normalizeForCoverage, normalizeHttpUrl, normalizeJavaScriptRenderingMode, normalizeLoadedCrawlReport, okfConceptLimit, pageEvidenceRecommendation, pageOpportunitiesReport, parseOlderThan, parsePseoPath, performanceAudit, performanceReportIsCacheable, planDueIndexUrls, planIndexCoverageFromUrls, plural, propertyMatchesUrl, providerPreferenceSchema, pseoAuditOptions, pseoAuditReport, pseoCsvFiles, pseoIndexStatus, pseoPresentation, publicHttpFetch, queryClusterReport, queryClusterTokens, queryContentCoverageFromPage, queryContentFieldsFromPage, queryFieldCoverage, queryOpportunityRecommendation, queryPageMetrics, queryPageTopQuery, queryPagesMetrics, queryPagesMetricsBatch, queryPagesTopQueries, queryPagesTopQueriesBatch, querySearchAnalytics, quickWinsCsvRows, quickWinsReport, readConfig, readOauthClient, readTokens, recommendCrawlDiffItem, recommendationForRule, recordChange, redirectTrace, refreshAuthToken, refreshPrioritiesCsvFiles, refreshPrioritiesWorkflow, renderCrawlCsv, renderCrawlHtml, renderCrawlMarkdownTickets, renderCrawlPagesCsv, renderCrawlPretty, renderCsv, renderPresentationTablesMarkdown, renderPseoMarkdown, renderWorkflowMarkdown, reportNarrative, reportPresentation, requestHeaders, resolveSegmentRanges, resolveSeoCliPaths, resolveTechnicalBaseline, reviewObservations, roundedPosition, runDoctor, runGa4Report, saveClient, saveCrawlReport, secondPage, segmentComparisonRange, segmentImpact, segmentRangeDays, selectAffectedUrls, selectDueIndexUrls, seoErrorEnvelope, seoToAiQueryReport, sessionSourceInListFilter, setDefaultClient, setTokenStorageMode, shiftIsoDate, shouldExcludeBrandQuery, siteSchema, sqliteCrawlReportStore, strikingDistance, summarizeCrawlReport, pageTechnicalSignals as technicalPageSignals, technicalWatchWorkflow, templateForUrl, toSeoError, tokenSchema, topCrawlRecommendations, topFixes, trafficAnomaly, unavailableSegmentImpactReport, unicodeTokens, updateCorrelation, updatePostmortemCsvFiles, updatePostmortemWorkflow, validateOkfFiles, verifyQueryContent, workflowPresentation, writeConfig, writeOauthClient, writeTokens, xRobotsDirectives };
20606
+ export { AI_REFERRAL_SOURCES, AI_REFERRAL_SOURCES_VERSION, AI_SEARCH_SCORECARD_METHODOLOGY_ID, AI_SEARCH_SCORECARD_METHODOLOGY_VERSION, AUDIT_PAGE_RULE_IDS, AffectedUrl, AffectedUrlFilters, AffectedUrlResult, AffectedUrlSelection, type AgentDiscoveryDataStatus, AgentReadinessCheck, AgentReadinessCheckStatus, type AgentReadinessProfile, AgentReadinessReport, AgentReadinessSection, type AgentRepresentationResponse, type AgentSkillObservation, AiReadinessReport, type AiReferralDataSource, type AiReferralMetrics, type AiReferralQueryEvidence, type AiReferralReport, type AiReferralSourceDefinition, AiSearchScorecard, AnalyticsMetricDelta, AnalyticsTestMetrics, type AnalyzeCannibalRowsInput, type AnalyzeDecayInput, type AnalyzeQuickWinsInput, type AnalyzeSecondPageInput, type AnalyzeStrikingDistanceInput, AppConfig, AuditPageDependencies, AuditPageReport, AuthorizedGoogleClient, BROWSER_USER_AGENT, BacklinkProvider, BoundedSitemapInventory, BrandTermCandidate, CANNIBAL_MAXIMUM_DOMINANT_SHARE, CANNIBAL_MINIMUM_PAGE_SHARE, CRAWL_REPORT_STORAGE_VERSION, CRAWL_SKIP_REASONS, CTR_DEFAULT_LIMIT, CTR_DEFAULT_MIN_IMPRESSIONS, CTR_MAX_LIMIT, CTR_MAX_MIN_IMPRESSIONS, CacheStats, type CannibalAnalysis, CannibalDependencies, type CannibalItem, type CannibalPage, type CannibalReport, CannibalReportInput, type CannibalSelection, type CannibalSuppression, type CannibalSuppressionReason, ChangeMeasurement, ChangeMeasurementAttempt, ChangeRow, ChangeScope, ClientProfile, ClientProfileInput, CommunityIntent, CommunityIntentClassification, CommunityIntentReport, ContentExtractionDiagnostics, ContentExtractor, ContentGroup, ContentGroupDimension, ContentGroupMatchType, ContentGroupRow, ContentOptimizationIntent, ContentOptimizationReport, CoverageField, type CrawlAgentDiscovery, CrawlAiBotAccess, CrawlAiResourceSignal, CrawlAiSignals, CrawlAnalyticsDataSource, CrawlConfig, CrawlConfigInput, CrawlDataSourceStatus, CrawlDataSourceWindow, CrawlDiffItem, CrawlDiffRecommendation, CrawlDiffReport, CrawlExternalLinkVerification, CrawlFetchRateConfig, CrawlImplementationQueueInput, CrawlImplementationQueueItem, CrawlImplementationQueueOutput, CrawlIssue, CrawlIssueGroup, CrawlLinkGraph, CrawlMode, CrawlOneResult, CrawlOutputFormat, CrawlPageRow, CrawlPageSnapshot, CrawlReport, CrawlReportDataSources, CrawlReportMeta, CrawlReportStorageEnvelope, CrawlReportStoreAdapter, CrawlReportSummary, CrawlRequestObservation, CrawlResponseObservation, CrawlRun, CrawlRunRow, CrawlRunStats, CrawlSearchDataSource, type CrawlSiteDependencies, CrawlSitemapDiscovery, CrawlSkipImpact, CrawlSkipReason, CrawlSkipReasonCount, CrawlSkippedUrlsByImpact, CrawlSnapshotDiffReport, CrawlSnapshotIssueChange, CrawlSnapshotPageChange, CrawlStatusEvent, CrawlStatusHandler, CrawlStatusPhase, CredentialsProvider, CreditUsage, CsvFile, CsvRow, CsvValue, type CtrUnderperformer, CtrUnderperformerDependencies, type CtrUnderperformerSelection, DataForSeoProvider, type DecayAnalysis, type DecayComparison, type DecayDiagnosis, type DecayGroup, type DecayItem, type DecayMetrics, type DecayReport, type DecaySelection, type DecaySignal, DecayingDependencies, DecayingReportInput, DiagnosePropertyDependencies, DiagnosePropertyReport, DiagnosisDataStatus, DiagnosisPriority, DoctorCheck, DueIndexSelection, DueIndexUrl, EffectiveSnippetControl, EntityReadinessCheck, EntityReadinessReport, ExternalLinkCheck, ExternalLinkCheckAttempt, ExternalLinkCheckState, ExtractedLinkLocation, ExtractedPage, FetchPageDependencies, type FetchPageOptions, type FetchRateControls, GSC_FINAL_DATA_LAG_DAYS, GSC_TIME_ZONE, Ga4AccountSummary, Ga4DataStream, Ga4PropertySummary, Ga4ReportRequest, Ga4RunReportResult, Ga4WebStreamCandidate, Ga4WebStreamMatch, GenerateLlmsTxtOptions, GeneratedLlmsTxt, GeoGap, GeoGapFilters, GeoGapResult, type GoogleAccessTokenClient, GoogleRichResultAssessment, GoogleRichResultAssessmentSelection, GoogleRichResultAssessmentStatus, GscRow, HttpProfile, INTERNAL_LINK_LEXICAL_TARGET_LIMIT, INTERNAL_LINK_MATCH_EVIDENCE_LIMIT, IndexCoverageBoundedSection, IndexCoverageCandidateItem, IndexCoverageControlReason, IndexCoverageControlledItem, IndexCoverageCrawlInput, IndexCoverageInput, IndexCoverageInventoryItem, IndexCoveragePlan, IndexCoveragePlanInput, IndexCoverageReport, IndexCoverageReportDependencies, IndexCoverageReportInput, IndexCoverageSearchConsoleInput, IndexCoverageSearchVisibilityItem, IndexCoverageSignalsReport, IndexCoverageSitemapInput, IndexCoverageSourceCompleteness, IndexCoverageSourceEvidence, IndexCoverageSourceMembership, IndexCoverageTemplateReview, IndexMonitorPropertyRun, IndexMonitorReport, IndexPlanProperty, IndexPlanSuggestion, IndexPropertyUrlAllocation, IndexWatchChange, IndexWatchChangeKind, IndexWatchDependencies, IndexWatchIssueCode, IndexWatchItem, IndexWatchPrevious, IndexWatchReport, IndexWatchRow, IndexWatchStore, type InternalLinkCandidate, type InternalLinkMatchKind, type InternalLinkOpportunity, type InternalLinkQueryMatch, InternalLinksAnalysis, InternalLinksAnalysisInput, InternalLinksDependencies, InternalLinksInput, type InternalLinksReport, type InternalLinksSelection, type InternalLinksWarning, type JavaScriptRenderingInput, type JavaScriptRenderingMode, JsonFileStorageAdapter, KeywordDataProvider, KeywordOverview, KeywordRow, LatestCrawlSummaryRow, LighthouseFailureCode, LinkRecoverItem, LinkRecoverReport, LinkRecoverSummary, LlmsAuditIssue, LlmsAuditReport, type LlmsTxtLinkObservation, LocalCredentialsProvider, type MarkdownAlternateObservation, type MarkdownQualityObservation, MeasureChangeDependencies, MetricDelta, MonitoringStatusCheck, MonitoringStatusReport, NarrativeSection, type OAuthClientConfig, OKF_DEFAULT_CONCEPTS, OKF_MAX_CONCEPTS, OkfBundle, OkfExplainReport, OkfFile, OkfValidationIssue, OkfValidationReport, OpportunityBenchmarkRow, PageFetchDiagnostics, PageFetchResult, type PageOpportunityAnalysis, type PageOpportunityAnalysisInput, type PageOpportunityBenchmark, PageOpportunityInput, type PageOpportunityItem, PageOpportunityReport, type PageOpportunitySelection, type PageOpportunityType, type PageOpportunityVerification, type PageRenderer, PageSearchMetrics, PageTopQuery, PartialDiagnosisReason, PerformanceAuditReport, PerformanceFieldData, PerformanceFieldMetric, PerformanceMetric, PerformanceRating, PositionBenchmark, Presentation, PresentationChart, PresentationScalar, PresentationTable, PresentationTableColumn, PriorityQueueItem, ProgressReporter, ProviderOpts, ProviderResult, PseoAuditInput, type PseoAuditReport, type PseoAuditTemplate, type PseoCrawlSample, type PseoCrawlTechnicalStatus, PseoDependencies, type PseoEntityFit, type PseoIndexStatus, type PseoInspectionSample, type PseoPageRow, type PseoQueryCoverage, type PseoQueryPageRow, PseoTemplateCluster, type PseoTemplateMetrics, PseoTemplateShape, QueryCluster, type QueryClusterPage, type QueryClusterRow, QueryContentClassification, QueryContentCoverage, QueryContentSignal, QueryFieldCoverage, type QuickWinAnalysis, type QuickWinGroup, type QuickWinItem, type QuickWinSelection, type QuickWinTemplateRecommendation, QuickWinsDependencies, QuickWinsInput, REPORT_BASELINE_MAX_AGE_MS, REPORT_BASELINE_MAX_DEPTH, REPORT_BASELINE_MAX_PAGES, ReadinessCheck, ReadinessSection, ReadinessStatus, Recommendation, RedirectTraceIssue, RedirectTraceReport, RedirectTraceStep, RenderingDocumentDifference, RenderingDocumentField, RenderingDocumentSnapshot, ReportNarrative, ResolveTechnicalBaselineInput, RobotsDirective, RuleCategory, RuleId, RuleInfo, RuleRecommendation, RuleSeverity, SCORECARD_CHECK_WEIGHTS, SCORECARD_STATUS_CREDIT, SEO_VERSION, SERP_TITLE_REFERENCE_WIDTH_PX, SERP_TITLE_WIDTH_PROFILE, ScorecardBand, ScorecardCheck, ScorecardCheckId, ScorecardObservation, ScorecardStatus, SearchAnalyticsRequest, SearchDateWindow, SearchPageBatch, SearchStatusIncident, SearchUpdate, type SecondPageAnalysis, SecondPageDependencies, SecondPageInput, type SecondPageItem, type SecondPageQuery, type SecondPageRecommendation, type SecondPageReport, type SecondPageSelection, type SegmentDimension, SegmentImpactDependencies, SegmentImpactInput, type SegmentImpactItem, type SegmentImpactReport, type SegmentImpactSelection, type SegmentPeriodEvidence, type SegmentRange, SemrushProvider, SeoChange, SeoCliPathOptions, SeoCliPaths, SeoError, SeoErrorCode, SeoToAiQueryReport, SerpProvider, ServiceAccountAccessTokenClient, ServiceAccountConfig, ServiceAccountStatus, SessionLedger, SitemapDocument, SitemapFetchResult, SitemapInvalidLoc, SitemapLastmodObservation, SkippedDiagnosisSection, SnippetControlEvidence, StorageAdapter, StoredTokens, type StrikingDistanceAnalysis, type StrikingDistanceAnalysisGroup, type StrikingDistanceAnalysisItem, StrikingDistanceDependencies, StrikingDistanceInput, StrikingDistanceItem, StrikingDistanceReport, TELEMETRY_AGENTS, TELEMETRY_ENDPOINT, TELEMETRY_ERROR_CATEGORIES, TELEMETRY_EVENTS, TELEMETRY_NOTICE, TELEMETRY_REPORTS, TELEMETRY_SCHEMA_VERSION, TELEMETRY_TIMEOUT_MS, TechnicalBaseline, TechnicalBaselineDependencies, TechnicalBaselineStatus, TelemetryAgent, TelemetryDisableReason, TelemetryErrorCategory, TelemetryEvent, TelemetryOptions, TelemetryPayload, TelemetryReport, TelemetryState, TelemetryStatus, TemplateAwareReport, TestMetrics, TitleWidthEstimate, TokenStorageMode, TokenStorageStatus, TopFix, TopFixFilters, TrafficAnomaly, TrafficAnomalyCoverage, TrafficAnomalyReport, type UnmatchedSegment, UpdateConfounder, UpdateCorrelationReport, UrlInspectionRequest, UrlInspectionResult, WorkflowAction, WorkflowReport, WorkflowStep, affectedUrls, agentReadiness, aiPromptsForQuery, aiReadiness, aiReferralSourceForValue, aiReferralsReport, aiSearchScorecard, allocateIndexUrlsToProperties, analyticsConnectionsSchema, analyzeAiReferralRows, analyzeCannibalRows, analyzeCtrUnderperformersFromRows, analyzeDecay, analyzeIndexCoverageSignals, analyzeInternalLinksFromRows, analyzePageOpportunitiesFromRows, analyzeQueryClustersFromRows, analyzeQuickWinsFromRows, analyzeSecondPageRows, analyzeSegmentRows, analyzeStrikingDistanceRows, analyzeTrafficAnomalyRows, assertUrlMatchesGscProperty, attachCrawlRecommendations, auditCrawlPages, auditCrawlRequests, auditLlmsTxt, auditPage, authStatus, boundedSitemapInventory, buildOkfBundle, buildPseoAuditReportFromRows, buildTelemetryPayload, cannibalReport, changeMeasurementCsvRows, classifyCommunityIntent, clearCache, clientProfileSchema, clusterPseoTemplates, clusterQueryRows, collectAgentDiscovery, combineRobotsValues, communityIntentReport, compareCrawlPages, compareCrawlReports, compareSegmentRows, configSchema, contentCoverageRecommendation, contentCoverageType, contentOptimizationFromPageOpportunities, contentOptimizationReport, countLabel, crawlConfigHash, crawlConfigSchema, crawlDefinitionId, crawlDiff, crawlFixToQueueItem, crawlImplementationQueueWorkflow, crawlIssueGroupSchema, crawlIssueSchema, crawlOne, crawlPageSnapshotSchema, crawlReportSchema, crawlReportStore, crawlReportSummarySchema, crawlRequestObservationSchema, crawlRunId, crawlSite, crawlSkipImpact, crawlSkipReasonCountsFromRecord, crawlTopFixSchema, crawlerJsonSchemas, crawlerRuleCategorySchema, crawlerRuleIdSchema, crawlerRuleInfoSchema, crawlerRuleRecommendationSchema, crawlerRuleSeveritySchema, crawlerSchemas, createAuthorizedClient, createContentGroup, createCrawlReport, createCtrBenchmarkContext, createGoogleAccessTokenClient, createLogger, createPageRenderer, ctrUnderperformersReport, decayClusterDrafts, decayComparisonRange, decayingReport, deleteChange, deleteClient, deleteContentGroup, deleteCrawlReport, deleteTokens, deriveBrandTerms, detectBrandTerms, detectTelemetryAgent, diagnoseCsvFiles, diagnoseProperty, diagnosePropertyWorkflow, effectiveRobotsDirectives, effectiveSnippetControl, ensureSeoCliDirs, entityReadiness, estimateSerpTitleWidth, expectedCtrForPosition, explainOkfValidation, explainRule, fetchCruxFieldData, fetchPage, fetchSearchStatusIncidents, fetchSitemapUrls, fileSize, finalGscDateRange, findOverlappingSearchUpdates, formatRelativeExpiry, ga4MatchReason, ga4PropertyIdFromName, ga4ReportQualityWarnings, ga4RequestCanUseCache, ga4RowsToObjects, generateLlmsTxt, geoGaps, geoGapsReport, getAuthModeStatus, getCacheStats, getChange, getClient, getClientConfig, getContentGroup, getDb, getKeywordProvider, getPreviousRun, getPrivacySnapshot, getRepeatedLinkRecoverUrls, getRunPages, getSeoCliPaths, getServiceAccountConfig, getServiceAccountStatus, getTelemetryStatus, getTokenStorageStatus, googleAnalyticsPropertyId, groupCrawlIssues, hasMetaRobotsDirective, hasRule, hasXRobotsDirective, hashKey, indexCoveragePlan, indexCoverageSignals, indexMonitor, indexWatch, inferPseoTemplate, inferTemplateMovement, initializeTelemetry, insertCrawlRun, insertLinkRecoverRun, inspectUrl, internalLinksReport, interpretUpdateCorrelation, isBrandQuery, isCompatibleTechnicalBaseline, isCurrentTechnicalBaseline, isEntityEvidenceSchemaType, isSiteIdentitySchemaType, isSkippableReportError, isTelemetryCi, isTelemetryReport, isoDate, isoWeek, latestCrawlReport, latestCrawlSummaries, latestFinalGscDate, latestIndexWatchSummary, latestLinkRecoverSummary, linkRecover, linkRecoverRecommendation, listChanges, listClients, listContentGroups, listCrawlReports, listGa4AccountSummaries, listGa4DataStreams, listRules, listSearchUpdates, listSites, loadCrawlReport, localCredentialsProvider, loginWithLoopback, makeRunId, matchGa4WebStreams, measureChange, measureCoverage, metaRobotsDirectives, migrateLegacyMacConfig, missingOAuthClientMessage, missingSharedClientLoginMessage, monitoringStatus, monthlyReport, monthlyReportWorkflow, narrativeCsvFiles, normalizeCrawlConfig, normalizeCrawlSkipReasonCounts, normalizeForCoverage, normalizeHttpUrl, normalizeJavaScriptRenderingMode, normalizeLoadedCrawlReport, okfConceptLimit, pageEvidenceRecommendation, pageOpportunitiesReport, parseOlderThan, parsePseoPath, performanceAudit, performanceReportIsCacheable, planDueIndexUrls, planIndexCoverageFromUrls, plural, propertyMatchesUrl, providerPreferenceSchema, pseoAuditOptions, pseoAuditReport, pseoCsvFiles, pseoIndexStatus, pseoPresentation, publicHttpFetch, queryClusterReport, queryClusterTokens, queryContentCoverageFromPage, queryContentFieldsFromPage, queryFieldCoverage, queryOpportunityRecommendation, queryPageMetrics, queryPageTopQuery, queryPagesMetrics, queryPagesMetricsBatch, queryPagesTopQueries, queryPagesTopQueriesBatch, querySearchAnalytics, quickWinsCsvRows, quickWinsReport, readConfig, readOauthClient, readTokens, recommendCrawlDiffItem, recommendationForRule, recordChange, redirectTrace, refreshAuthToken, refreshPrioritiesCsvFiles, refreshPrioritiesWorkflow, renderCrawlCsv, renderCrawlHtml, renderCrawlMarkdownTickets, renderCrawlPagesCsv, renderCrawlPretty, renderCsv, renderPresentationTablesMarkdown, renderPseoMarkdown, renderWorkflowMarkdown, reportNarrative, reportPresentation, requestHeaders, resolveSegmentRanges, resolveSeoCliPaths, resolveTechnicalBaseline, reviewObservations, roundedPosition, runDoctor, runGa4Report, saveClient, saveCrawlReport, secondPage, segmentComparisonRange, segmentImpact, segmentRangeDays, selectAffectedUrls, selectDueIndexUrls, seoErrorEnvelope, seoToAiQueryReport, sessionSourceInListFilter, setDefaultClient, setTelemetryEnabled, setTokenStorageMode, shiftIsoDate, shouldExcludeBrandQuery, siteSchema, sqliteCrawlReportStore, strikingDistance, summarizeCrawlReport, pageTechnicalSignals as technicalPageSignals, technicalWatchWorkflow, telemetryErrorCategory, templateForUrl, toSeoError, tokenSchema, topCrawlRecommendations, topFixes, trackTelemetryReportComplete, trackTelemetryReportFailed, trackTelemetryReportStart, trackTelemetrySetupComplete, trafficAnomaly, unavailableSegmentImpactReport, unicodeTokens, updateCorrelation, updatePostmortemCsvFiles, updatePostmortemWorkflow, validateOkfFiles, verifyQueryContent, workflowPresentation, writeConfig, writeOauthClient, writeTokens, xRobotsDirectives };
20532
20607
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { createRequire as __seoCreateRequire } from 'node:module'; const require = __seoCreateRequire(import.meta.url);
2
- import { n as load, t as version } from "./package-BF_XgK7-.js";
2
+ import { n as load, t as version } from "./package-B9-D646K.js";
3
3
  import { Headers, fetch as fetch$1 } from "undici";
4
4
  import { chmodSync, createWriteStream, existsSync, mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
5
- import { homedir } from "node:os";
5
+ import { arch, homedir, platform } from "node:os";
6
6
  import { dirname, join } from "node:path";
7
7
  import { z } from "zod";
8
8
  import lockfile from "proper-lockfile";
@@ -146,6 +146,7 @@ function resolveSeoCliPaths(input = {}) {
146
146
  configFile: join(configDir, "config.json"),
147
147
  tokensFile: join(configDir, "tokens.json"),
148
148
  oauthClientFile: join(configDir, "oauth-client.json"),
149
+ telemetryStateFile: join(configDir, "telemetry.json"),
149
150
  cacheDbFile: join(cacheDir, "cache.db")
150
151
  };
151
152
  }
@@ -493,6 +494,12 @@ function getPrivacySnapshot() {
493
494
  mode: fileMode(paths.oauthClientFile),
494
495
  sizeBytes: sizeOf(paths.oauthClientFile)
495
496
  },
497
+ {
498
+ label: "Telemetry state",
499
+ path: paths.telemetryStateFile,
500
+ mode: fileMode(paths.telemetryStateFile),
501
+ sizeBytes: sizeOf(paths.telemetryStateFile)
502
+ },
496
503
  {
497
504
  label: "Cache DB",
498
505
  path: paths.cacheDbFile,
@@ -28480,6 +28487,371 @@ var JsonFileStorageAdapter = class {
28480
28487
  };
28481
28488
  const localCredentialsProvider = new LocalCredentialsProvider();
28482
28489
  //#endregion
28490
+ //#region packages/core/src/version.ts
28491
+ const SEO_VERSION = version;
28492
+ //#endregion
28493
+ //#region packages/core/src/telemetry.ts
28494
+ const TELEMETRY_ENDPOINT = "https://seoskill.dev/api/t";
28495
+ const TELEMETRY_SCHEMA_VERSION = 1;
28496
+ const TELEMETRY_TIMEOUT_MS = 2e3;
28497
+ const TELEMETRY_EVENTS = [
28498
+ "first_run",
28499
+ "setup_complete",
28500
+ "audit_start",
28501
+ "audit_complete",
28502
+ "audit_failed",
28503
+ "first_audit_complete",
28504
+ "active_d1",
28505
+ "active_d7",
28506
+ "active_d30"
28507
+ ];
28508
+ const TELEMETRY_AGENTS = [
28509
+ "claude-code",
28510
+ "cursor",
28511
+ "codex",
28512
+ "cli",
28513
+ "unknown"
28514
+ ];
28515
+ const TELEMETRY_ERROR_CATEGORIES = [
28516
+ "auth",
28517
+ "crawl_timeout",
28518
+ "network",
28519
+ "config",
28520
+ "unknown"
28521
+ ];
28522
+ const TELEMETRY_REPORTS = [
28523
+ "affected-urls",
28524
+ "agent-readiness",
28525
+ "ai-readiness",
28526
+ "ai-referrals",
28527
+ "ai-search-scorecard",
28528
+ "audit-page",
28529
+ "audit-urls",
28530
+ "cannibalisation",
28531
+ "community-intent",
28532
+ "compare-crawls",
28533
+ "content-optimization",
28534
+ "crawl-diff",
28535
+ "site-crawl",
28536
+ "ctr-underperformers",
28537
+ "decaying-pages",
28538
+ "setup-check",
28539
+ "entity-readiness",
28540
+ "explain-crawl-issue",
28541
+ "geo-gaps",
28542
+ "crawl-report",
28543
+ "index-coverage",
28544
+ "index-coverage-plan",
28545
+ "index-monitor",
28546
+ "index-watch",
28547
+ "internal-links",
28548
+ "link-recovery",
28549
+ "crawl-history",
28550
+ "crawler-rules",
28551
+ "llms-txt-audit",
28552
+ "generate-llms-txt",
28553
+ "measure-change",
28554
+ "monthly-report",
28555
+ "okf-build",
28556
+ "okf-validate",
28557
+ "page-opportunities",
28558
+ "performance-audit",
28559
+ "pseo-audit",
28560
+ "query-clusters",
28561
+ "quick-wins",
28562
+ "redirect-trace",
28563
+ "narrative-report",
28564
+ "second-page",
28565
+ "segment-impact",
28566
+ "striking-distance",
28567
+ "seo-to-ai-query",
28568
+ "top-fixes",
28569
+ "traffic-anomaly",
28570
+ "update-correlation",
28571
+ "search-performance-overview",
28572
+ "monthly-action-plan",
28573
+ "refresh-priorities",
28574
+ "technical-watch",
28575
+ "update-postmortem"
28576
+ ];
28577
+ const RETENTION_MILESTONES = [
28578
+ {
28579
+ days: 1,
28580
+ event: "active_d1"
28581
+ },
28582
+ {
28583
+ days: 7,
28584
+ event: "active_d7"
28585
+ },
28586
+ {
28587
+ days: 30,
28588
+ event: "active_d30"
28589
+ }
28590
+ ];
28591
+ const CI_ENVIRONMENT_KEYS = [
28592
+ "GITHUB_ACTIONS",
28593
+ "GITLAB_CI",
28594
+ "CIRCLECI",
28595
+ "TRAVIS",
28596
+ "BUILDKITE",
28597
+ "JENKINS_URL",
28598
+ "TEAMCITY_VERSION",
28599
+ "TF_BUILD",
28600
+ "BITBUCKET_BUILD_NUMBER",
28601
+ "CODEBUILD_BUILD_ID"
28602
+ ];
28603
+ const TELEMETRY_NOTICE = `SEO Skill collects anonymous usage data to improve the tool (event name,
28604
+ report id, version, agent, OS, architecture, Node major, and install week;
28605
+ never URLs, report data, or identifiers of any kind).
28606
+ Docs: https://seoskill.dev/telemetry
28607
+ Disable: seo telemetry disable (or set DO_NOT_TRACK=1)\n`;
28608
+ function optionEnv(options) {
28609
+ return options.env ?? process.env;
28610
+ }
28611
+ function optionNow(options) {
28612
+ return options.now ?? /* @__PURE__ */ new Date();
28613
+ }
28614
+ function optionStateFile(options) {
28615
+ return options.stateFile ?? getSeoCliPaths().telemetryStateFile;
28616
+ }
28617
+ function isEnvEnabled(value) {
28618
+ return value === "1" || value?.toLowerCase() === "true";
28619
+ }
28620
+ function isTelemetryCi(env = process.env) {
28621
+ return env.NODE_ENV === "test" || Boolean(env.NODE_TEST_CONTEXT) || isEnvEnabled(env.CI) || CI_ENVIRONMENT_KEYS.some((key) => Boolean(env[key]));
28622
+ }
28623
+ function environmentDisableReason(env) {
28624
+ if (isTelemetryCi(env)) return "ci";
28625
+ if (isEnvEnabled(env.DO_NOT_TRACK)) return "do_not_track";
28626
+ if (isEnvEnabled(env.SEOSKILL_TELEMETRY_DISABLED) || isEnvEnabled(env.SEO_TELEMETRY_DISABLED)) return "environment";
28627
+ }
28628
+ function isTelemetryMilestone(value) {
28629
+ return typeof value === "string" && [
28630
+ "first_run",
28631
+ "setup_complete",
28632
+ "first_audit_complete",
28633
+ "active_d1",
28634
+ "active_d7",
28635
+ "active_d30"
28636
+ ].includes(value);
28637
+ }
28638
+ function isTelemetryReport(value) {
28639
+ return typeof value === "string" && TELEMETRY_REPORTS.includes(value);
28640
+ }
28641
+ function isValidCohort(value) {
28642
+ return typeof value === "string" && /^\d{4}-W(?:0[1-9]|[1-4]\d|5[0-3])$/.test(value);
28643
+ }
28644
+ function isTelemetryState(value) {
28645
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
28646
+ const state = value;
28647
+ return typeof state.telemetryEnabled === "boolean" && typeof state.firstRunAt === "string" && Number.isFinite(Date.parse(state.firstRunAt)) && isValidCohort(state.cohort) && Array.isArray(state.sentMilestones) && state.sentMilestones.every(isTelemetryMilestone);
28648
+ }
28649
+ function readState(path) {
28650
+ if (!existsSync(path)) return { kind: "missing" };
28651
+ const value = readJsonFile(path);
28652
+ return isTelemetryState(value) ? {
28653
+ kind: "valid",
28654
+ state: value
28655
+ } : { kind: "invalid" };
28656
+ }
28657
+ function writeState(path, state) {
28658
+ writeJsonAtomic(path, state, 384);
28659
+ }
28660
+ function isoWeek(date) {
28661
+ const utc = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()));
28662
+ const day = utc.getUTCDay() || 7;
28663
+ utc.setUTCDate(utc.getUTCDate() + 4 - day);
28664
+ const yearStart = new Date(Date.UTC(utc.getUTCFullYear(), 0, 1));
28665
+ const week = Math.ceil(((utc.getTime() - yearStart.getTime()) / 864e5 + 1) / 7);
28666
+ return `${utc.getUTCFullYear()}-W${String(week).padStart(2, "0")}`;
28667
+ }
28668
+ function newState(options, enabled = true) {
28669
+ const now = optionNow(options);
28670
+ return {
28671
+ telemetryEnabled: enabled,
28672
+ firstRunAt: now.toISOString(),
28673
+ cohort: isoWeek(now),
28674
+ sentMilestones: []
28675
+ };
28676
+ }
28677
+ function detectTelemetryAgent(input = {}) {
28678
+ const env = input.env ?? process.env;
28679
+ const clientName = input.clientName?.toLowerCase() ?? "";
28680
+ if (clientName.includes("claude")) return "claude-code";
28681
+ if (clientName.includes("cursor")) return "cursor";
28682
+ if (clientName.includes("codex")) return "codex";
28683
+ if (input.clientName) return "unknown";
28684
+ if (env.CLAUDECODE || env.CLAUDE_CODE) return "claude-code";
28685
+ if (env.CURSOR_AGENT || env.CURSOR_TRACE_ID || env.CURSOR_SESSION_ID) return "cursor";
28686
+ if (env.CODEX_HOME || env.CODEX_THREAD_ID || env.CODEX_SANDBOX) return "codex";
28687
+ return "cli";
28688
+ }
28689
+ function telemetryAgent(options) {
28690
+ return options.agent ?? detectTelemetryAgent({
28691
+ clientName: options.clientName,
28692
+ env: optionEnv(options)
28693
+ });
28694
+ }
28695
+ function nodeMajor(version) {
28696
+ return version.replace(/^v/, "").split(".")[0] || "unknown";
28697
+ }
28698
+ function buildTelemetryPayload(event, state, fields = {}, options = {}) {
28699
+ return {
28700
+ event,
28701
+ version: options.version ?? SEO_VERSION,
28702
+ agent: telemetryAgent(options),
28703
+ os: options.processPlatform ?? platform(),
28704
+ arch: options.processArch ?? arch(),
28705
+ node: nodeMajor(options.nodeVersion ?? process.version),
28706
+ cohort: state.cohort,
28707
+ schema: 1,
28708
+ ...fields.errorCategory ? { errorCategory: fields.errorCategory } : {},
28709
+ ...fields.report ? { report: fields.report } : {}
28710
+ };
28711
+ }
28712
+ function dispatchTelemetry(payload, options) {
28713
+ const fetchTelemetry = options.fetch ?? globalThis.fetch;
28714
+ try {
28715
+ fetchTelemetry(options.endpoint ?? "https://seoskill.dev/api/t", {
28716
+ method: "POST",
28717
+ headers: { "content-type": "application/json" },
28718
+ body: JSON.stringify(payload),
28719
+ signal: AbortSignal.timeout(TELEMETRY_TIMEOUT_MS)
28720
+ }).catch(() => void 0);
28721
+ } catch {}
28722
+ }
28723
+ function statusFromState(options) {
28724
+ const stateFile = optionStateFile(options);
28725
+ const envReason = environmentDisableReason(optionEnv(options));
28726
+ const stored = readState(stateFile);
28727
+ if (envReason) return {
28728
+ enabled: false,
28729
+ reason: envReason,
28730
+ stateFile,
28731
+ ...stored.kind === "valid" ? { state: stored.state } : {}
28732
+ };
28733
+ if (stored.kind === "invalid") return {
28734
+ enabled: false,
28735
+ reason: "invalid_state",
28736
+ stateFile
28737
+ };
28738
+ if (stored.kind === "valid" && !stored.state.telemetryEnabled) return {
28739
+ enabled: false,
28740
+ reason: "local_setting",
28741
+ stateFile,
28742
+ state: stored.state
28743
+ };
28744
+ return {
28745
+ enabled: true,
28746
+ stateFile,
28747
+ ...stored.kind === "valid" ? { state: stored.state } : {}
28748
+ };
28749
+ }
28750
+ function getTelemetryStatus(options = {}) {
28751
+ return statusFromState(options);
28752
+ }
28753
+ function setTelemetryEnabled(enabled, options = {}) {
28754
+ const stateFile = optionStateFile(options);
28755
+ const stored = readState(stateFile);
28756
+ const state = stored.kind === "valid" ? stored.state : newState(options, enabled);
28757
+ state.telemetryEnabled = enabled;
28758
+ writeState(stateFile, state);
28759
+ return statusFromState(options);
28760
+ }
28761
+ function enabledState(options) {
28762
+ const status = statusFromState(options);
28763
+ return status.enabled ? status.state : void 0;
28764
+ }
28765
+ function initializeTelemetry(options = {}) {
28766
+ const initialStatus = statusFromState(options);
28767
+ if (!initialStatus.enabled) return initialStatus;
28768
+ const stateFile = initialStatus.stateFile;
28769
+ const state = initialStatus.state ?? newState(options);
28770
+ const events = [];
28771
+ if (!state.sentMilestones.includes("first_run")) {
28772
+ try {
28773
+ (options.notice ?? ((message) => process.stderr.write(message)))(TELEMETRY_NOTICE);
28774
+ } catch {
28775
+ return {
28776
+ enabled: false,
28777
+ reason: "invalid_state",
28778
+ stateFile
28779
+ };
28780
+ }
28781
+ state.sentMilestones.push("first_run");
28782
+ events.push("first_run");
28783
+ }
28784
+ const daysSinceFirstRun = (optionNow(options).getTime() - Date.parse(state.firstRunAt)) / 864e5;
28785
+ for (const milestone of RETENTION_MILESTONES) if (daysSinceFirstRun >= milestone.days && !state.sentMilestones.includes(milestone.event)) {
28786
+ state.sentMilestones.push(milestone.event);
28787
+ events.push(milestone.event);
28788
+ }
28789
+ try {
28790
+ writeState(stateFile, state);
28791
+ } catch {
28792
+ return {
28793
+ enabled: false,
28794
+ reason: "invalid_state",
28795
+ stateFile
28796
+ };
28797
+ }
28798
+ for (const event of events) dispatchTelemetry(buildTelemetryPayload(event, state, {}, options), options);
28799
+ return {
28800
+ enabled: true,
28801
+ stateFile,
28802
+ state
28803
+ };
28804
+ }
28805
+ function sendEvent(event, fields, options) {
28806
+ const state = enabledState(options);
28807
+ if (!state) return;
28808
+ dispatchTelemetry(buildTelemetryPayload(event, state, fields, options), options);
28809
+ }
28810
+ function trackTelemetryReportStart(report, options = {}) {
28811
+ if (!isTelemetryReport(report)) return;
28812
+ sendEvent("audit_start", { report }, options);
28813
+ }
28814
+ function trackTelemetryReportComplete(report, options = {}) {
28815
+ if (!isTelemetryReport(report)) return;
28816
+ const state = enabledState(options);
28817
+ if (!state) return;
28818
+ dispatchTelemetry(buildTelemetryPayload("audit_complete", state, { report }, options), options);
28819
+ if (state.sentMilestones.includes("first_audit_complete")) return;
28820
+ state.sentMilestones.push("first_audit_complete");
28821
+ try {
28822
+ writeState(optionStateFile(options), state);
28823
+ } catch {
28824
+ return;
28825
+ }
28826
+ dispatchTelemetry(buildTelemetryPayload("first_audit_complete", state, { report }, options), options);
28827
+ }
28828
+ function trackTelemetryReportFailed(report, errorCategory, options = {}) {
28829
+ if (!isTelemetryReport(report)) return;
28830
+ sendEvent("audit_failed", {
28831
+ errorCategory,
28832
+ report
28833
+ }, options);
28834
+ }
28835
+ function trackTelemetrySetupComplete(options = {}) {
28836
+ const state = enabledState(options);
28837
+ if (!state || state.sentMilestones.includes("setup_complete")) return;
28838
+ state.sentMilestones.push("setup_complete");
28839
+ try {
28840
+ writeState(optionStateFile(options), state);
28841
+ } catch {
28842
+ return;
28843
+ }
28844
+ dispatchTelemetry(buildTelemetryPayload("setup_complete", state, {}, options), options);
28845
+ }
28846
+ function telemetryErrorCategory(error) {
28847
+ if (error instanceof Error && error.name === "AbortError") return "crawl_timeout";
28848
+ const code = error && typeof error === "object" && "code" in error ? String(error.code) : void 0;
28849
+ if (code === "ACCESS_DENIED" || code === "AUTH_CONFIG_REQUIRED" || code === "AUTH_EXPIRED" || code === "AUTH_REQUIRED") return "auth";
28850
+ if (code === "INVALID_INPUT" || code === "PROPERTY_NOT_FOUND") return "config";
28851
+ if (code === "OPTIONAL_PROVIDER_UNAVAILABLE" || code === "PROVIDER_UNAVAILABLE" || code === "RATE_LIMITED") return "network";
28852
+ return "unknown";
28853
+ }
28854
+ //#endregion
28483
28855
  //#region packages/core/src/utils/time.ts
28484
28856
  function parseOlderThan(input) {
28485
28857
  if (!input) return;
@@ -28514,9 +28886,6 @@ function isoDate(daysAgo = 0) {
28514
28886
  return date.toISOString().slice(0, 10);
28515
28887
  }
28516
28888
  //#endregion
28517
- //#region packages/core/src/version.ts
28518
- const SEO_VERSION = version;
28519
- //#endregion
28520
- export { AI_REFERRAL_SOURCES, AI_REFERRAL_SOURCES_VERSION, AI_SEARCH_SCORECARD_METHODOLOGY_ID, AI_SEARCH_SCORECARD_METHODOLOGY_VERSION, AUDIT_PAGE_RULE_IDS, BROWSER_USER_AGENT, CANNIBAL_MAXIMUM_DOMINANT_SHARE, CANNIBAL_MINIMUM_PAGE_SHARE, CRAWL_REPORT_STORAGE_VERSION, CRAWL_SKIP_REASONS, CTR_DEFAULT_LIMIT, CTR_DEFAULT_MIN_IMPRESSIONS, CTR_MAX_LIMIT, CTR_MAX_MIN_IMPRESSIONS, DataForSeoProvider, GSC_FINAL_DATA_LAG_DAYS, GSC_TIME_ZONE, INTERNAL_LINK_LEXICAL_TARGET_LIMIT, INTERNAL_LINK_MATCH_EVIDENCE_LIMIT, JsonFileStorageAdapter, LocalCredentialsProvider, OKF_DEFAULT_CONCEPTS, OKF_MAX_CONCEPTS, REPORT_BASELINE_MAX_AGE_MS, REPORT_BASELINE_MAX_DEPTH, REPORT_BASELINE_MAX_PAGES, SCORECARD_CHECK_WEIGHTS, SCORECARD_STATUS_CREDIT, SEO_VERSION, SERP_TITLE_REFERENCE_WIDTH_PX, SERP_TITLE_WIDTH_PROFILE, SemrushProvider, SeoError, ServiceAccountAccessTokenClient, SessionLedger, affectedUrls, agentReadiness, aiPromptsForQuery, aiReadiness, aiReferralSourceForValue, aiReferralsReport, aiSearchScorecard, allocateIndexUrlsToProperties, analyticsConnectionsSchema, analyzeAiReferralRows, analyzeCannibalRows, analyzeCtrUnderperformersFromRows, analyzeDecay, analyzeIndexCoverageSignals, analyzeInternalLinksFromRows, analyzePageOpportunitiesFromRows, analyzeQueryClustersFromRows, analyzeQuickWinsFromRows, analyzeSecondPageRows, analyzeSegmentRows, analyzeStrikingDistanceRows, analyzeTrafficAnomalyRows, assertUrlMatchesGscProperty, attachCrawlRecommendations, auditCrawlPages, auditCrawlRequests, auditLlmsTxt, auditPage, authStatus, boundedSitemapInventory, buildOkfBundle, buildPseoAuditReportFromRows, cannibalReport, changeMeasurementCsvRows, classifyCommunityIntent, clearCache, clientProfileSchema, clusterPseoTemplates, clusterQueryRows, collectAgentDiscovery, combineRobotsValues, communityIntentReport, compareCrawlPages, compareCrawlReports, compareSegmentRows, configSchema, contentCoverageRecommendation, contentCoverageType, contentOptimizationFromPageOpportunities, contentOptimizationReport, countLabel, crawlConfigHash, crawlConfigSchema, crawlDefinitionId, crawlDiff, crawlFixToQueueItem, crawlImplementationQueueWorkflow, crawlIssueGroupSchema, crawlIssueSchema, crawlOne, crawlPageSnapshotSchema, crawlReportSchema, crawlReportStore, crawlReportSummarySchema, crawlRequestObservationSchema, crawlRunId, crawlSite, crawlSkipImpact, crawlSkipReasonCountsFromRecord, crawlTopFixSchema, crawlerJsonSchemas, crawlerRuleCategorySchema, crawlerRuleIdSchema, crawlerRuleInfoSchema, crawlerRuleRecommendationSchema, crawlerRuleSeveritySchema, crawlerSchemas, createAuthorizedClient, createContentGroup, createCrawlReport, createCtrBenchmarkContext, createGoogleAccessTokenClient, createLogger, createPageRenderer, ctrUnderperformersReport, decayClusterDrafts, decayComparisonRange, decayingReport, deleteChange, deleteClient, deleteContentGroup, deleteCrawlReport, deleteTokens, deriveBrandTerms, detectBrandTerms, diagnoseCsvFiles, diagnoseProperty, diagnosePropertyWorkflow, effectiveRobotsDirectives, effectiveSnippetControl, ensureSeoCliDirs, entityReadiness, estimateSerpTitleWidth, expectedCtrForPosition, explainOkfValidation, explainRule, fetchCruxFieldData, fetchPage, fetchSearchStatusIncidents, fetchSitemapUrls, fileSize, finalGscDateRange, findOverlappingSearchUpdates, formatRelativeExpiry, ga4MatchReason, ga4PropertyIdFromName, ga4ReportQualityWarnings, ga4RequestCanUseCache, ga4RowsToObjects, generateLlmsTxt, geoGaps, geoGapsReport, getAuthModeStatus, getCacheStats, getChange, getClient, getClientConfig, getContentGroup, getDb, getKeywordProvider, getPreviousRun, getPrivacySnapshot, getRepeatedLinkRecoverUrls, getRunPages, getSeoCliPaths, getServiceAccountConfig, getServiceAccountStatus, getTokenStorageStatus, googleAnalyticsPropertyId, groupCrawlIssues, hasMetaRobotsDirective, hasRule, hasXRobotsDirective, hashKey, indexCoveragePlan, indexCoverageSignals, indexMonitor, indexWatch, inferPseoTemplate, inferTemplateMovement, insertCrawlRun, insertLinkRecoverRun, inspectUrl, internalLinksReport, interpretUpdateCorrelation, isBrandQuery, isCompatibleTechnicalBaseline, isCurrentTechnicalBaseline, isEntityEvidenceSchemaType, isSiteIdentitySchemaType, isSkippableReportError, isoDate, latestCrawlReport, latestCrawlSummaries, latestFinalGscDate, latestIndexWatchSummary, latestLinkRecoverSummary, linkRecover, linkRecoverRecommendation, listChanges, listClients, listContentGroups, listCrawlReports, listGa4AccountSummaries, listGa4DataStreams, listRules, listSearchUpdates, listSites, loadCrawlReport, localCredentialsProvider, loginWithLoopback, makeRunId, matchGa4WebStreams, measureChange, measureCoverage, metaRobotsDirectives, migrateLegacyMacConfig, missingOAuthClientMessage, missingSharedClientLoginMessage, monitoringStatus, monthlyReport, monthlyReportWorkflow, narrativeCsvFiles, normalizeCrawlConfig, normalizeCrawlSkipReasonCounts, normalizeForCoverage, normalizeHttpUrl, normalizeJavaScriptRenderingMode, normalizeLoadedCrawlReport, okfConceptLimit, pageEvidenceRecommendation, pageOpportunitiesReport, parseOlderThan, parsePseoPath, performanceAudit, performanceReportIsCacheable, planDueIndexUrls, planIndexCoverageFromUrls, plural, propertyMatchesUrl, providerPreferenceSchema, pseoAuditOptions, pseoAuditReport, pseoCsvFiles, pseoIndexStatus, pseoPresentation, publicHttpFetch, queryClusterReport, queryClusterTokens, queryContentCoverageFromPage, queryContentFieldsFromPage, queryFieldCoverage, queryOpportunityRecommendation, queryPageMetrics, queryPageTopQuery, queryPagesMetrics, queryPagesMetricsBatch, queryPagesTopQueries, queryPagesTopQueriesBatch, querySearchAnalytics, quickWinsCsvRows, quickWinsReport, readConfig, readOauthClient, readTokens, recommendCrawlDiffItem, recommendationForRule, recordChange, redirectTrace, refreshAuthToken, refreshPrioritiesCsvFiles, refreshPrioritiesWorkflow, renderCrawlCsv, renderCrawlHtml, renderCrawlMarkdownTickets, renderCrawlPagesCsv, renderCrawlPretty, renderCsv, renderPresentationTablesMarkdown, renderPseoMarkdown, renderWorkflowMarkdown, reportNarrative, reportPresentation, requestHeaders, resolveSegmentRanges, resolveSeoCliPaths, resolveTechnicalBaseline, reviewObservations, roundedPosition, runDoctor, runGa4Report, saveClient, saveCrawlReport, secondPage, segmentComparisonRange, segmentImpact, segmentRangeDays, selectAffectedUrls, selectDueIndexUrls, seoErrorEnvelope, seoToAiQueryReport, sessionSourceInListFilter, setDefaultClient, setTokenStorageMode, shiftIsoDate, shouldExcludeBrandQuery, siteSchema, sqliteCrawlReportStore, strikingDistance, summarizeCrawlReport, pageTechnicalSignals as technicalPageSignals, technicalWatchWorkflow, templateForUrl, toSeoError, tokenSchema, topCrawlRecommendations, topFixes, trafficAnomaly, unavailableSegmentImpactReport, unicodeTokens, updateCorrelation, updatePostmortemCsvFiles, updatePostmortemWorkflow, validateOkfFiles, verifyQueryContent, workflowPresentation, writeConfig, writeOauthClient, writeTokens, xRobotsDirectives };
28889
+ export { AI_REFERRAL_SOURCES, AI_REFERRAL_SOURCES_VERSION, AI_SEARCH_SCORECARD_METHODOLOGY_ID, AI_SEARCH_SCORECARD_METHODOLOGY_VERSION, AUDIT_PAGE_RULE_IDS, BROWSER_USER_AGENT, CANNIBAL_MAXIMUM_DOMINANT_SHARE, CANNIBAL_MINIMUM_PAGE_SHARE, CRAWL_REPORT_STORAGE_VERSION, CRAWL_SKIP_REASONS, CTR_DEFAULT_LIMIT, CTR_DEFAULT_MIN_IMPRESSIONS, CTR_MAX_LIMIT, CTR_MAX_MIN_IMPRESSIONS, DataForSeoProvider, GSC_FINAL_DATA_LAG_DAYS, GSC_TIME_ZONE, INTERNAL_LINK_LEXICAL_TARGET_LIMIT, INTERNAL_LINK_MATCH_EVIDENCE_LIMIT, JsonFileStorageAdapter, LocalCredentialsProvider, OKF_DEFAULT_CONCEPTS, OKF_MAX_CONCEPTS, REPORT_BASELINE_MAX_AGE_MS, REPORT_BASELINE_MAX_DEPTH, REPORT_BASELINE_MAX_PAGES, SCORECARD_CHECK_WEIGHTS, SCORECARD_STATUS_CREDIT, SEO_VERSION, SERP_TITLE_REFERENCE_WIDTH_PX, SERP_TITLE_WIDTH_PROFILE, SemrushProvider, SeoError, ServiceAccountAccessTokenClient, SessionLedger, TELEMETRY_AGENTS, TELEMETRY_ENDPOINT, TELEMETRY_ERROR_CATEGORIES, TELEMETRY_EVENTS, TELEMETRY_NOTICE, TELEMETRY_REPORTS, TELEMETRY_SCHEMA_VERSION, TELEMETRY_TIMEOUT_MS, affectedUrls, agentReadiness, aiPromptsForQuery, aiReadiness, aiReferralSourceForValue, aiReferralsReport, aiSearchScorecard, allocateIndexUrlsToProperties, analyticsConnectionsSchema, analyzeAiReferralRows, analyzeCannibalRows, analyzeCtrUnderperformersFromRows, analyzeDecay, analyzeIndexCoverageSignals, analyzeInternalLinksFromRows, analyzePageOpportunitiesFromRows, analyzeQueryClustersFromRows, analyzeQuickWinsFromRows, analyzeSecondPageRows, analyzeSegmentRows, analyzeStrikingDistanceRows, analyzeTrafficAnomalyRows, assertUrlMatchesGscProperty, attachCrawlRecommendations, auditCrawlPages, auditCrawlRequests, auditLlmsTxt, auditPage, authStatus, boundedSitemapInventory, buildOkfBundle, buildPseoAuditReportFromRows, buildTelemetryPayload, cannibalReport, changeMeasurementCsvRows, classifyCommunityIntent, clearCache, clientProfileSchema, clusterPseoTemplates, clusterQueryRows, collectAgentDiscovery, combineRobotsValues, communityIntentReport, compareCrawlPages, compareCrawlReports, compareSegmentRows, configSchema, contentCoverageRecommendation, contentCoverageType, contentOptimizationFromPageOpportunities, contentOptimizationReport, countLabel, crawlConfigHash, crawlConfigSchema, crawlDefinitionId, crawlDiff, crawlFixToQueueItem, crawlImplementationQueueWorkflow, crawlIssueGroupSchema, crawlIssueSchema, crawlOne, crawlPageSnapshotSchema, crawlReportSchema, crawlReportStore, crawlReportSummarySchema, crawlRequestObservationSchema, crawlRunId, crawlSite, crawlSkipImpact, crawlSkipReasonCountsFromRecord, crawlTopFixSchema, crawlerJsonSchemas, crawlerRuleCategorySchema, crawlerRuleIdSchema, crawlerRuleInfoSchema, crawlerRuleRecommendationSchema, crawlerRuleSeveritySchema, crawlerSchemas, createAuthorizedClient, createContentGroup, createCrawlReport, createCtrBenchmarkContext, createGoogleAccessTokenClient, createLogger, createPageRenderer, ctrUnderperformersReport, decayClusterDrafts, decayComparisonRange, decayingReport, deleteChange, deleteClient, deleteContentGroup, deleteCrawlReport, deleteTokens, deriveBrandTerms, detectBrandTerms, detectTelemetryAgent, diagnoseCsvFiles, diagnoseProperty, diagnosePropertyWorkflow, effectiveRobotsDirectives, effectiveSnippetControl, ensureSeoCliDirs, entityReadiness, estimateSerpTitleWidth, expectedCtrForPosition, explainOkfValidation, explainRule, fetchCruxFieldData, fetchPage, fetchSearchStatusIncidents, fetchSitemapUrls, fileSize, finalGscDateRange, findOverlappingSearchUpdates, formatRelativeExpiry, ga4MatchReason, ga4PropertyIdFromName, ga4ReportQualityWarnings, ga4RequestCanUseCache, ga4RowsToObjects, generateLlmsTxt, geoGaps, geoGapsReport, getAuthModeStatus, getCacheStats, getChange, getClient, getClientConfig, getContentGroup, getDb, getKeywordProvider, getPreviousRun, getPrivacySnapshot, getRepeatedLinkRecoverUrls, getRunPages, getSeoCliPaths, getServiceAccountConfig, getServiceAccountStatus, getTelemetryStatus, getTokenStorageStatus, googleAnalyticsPropertyId, groupCrawlIssues, hasMetaRobotsDirective, hasRule, hasXRobotsDirective, hashKey, indexCoveragePlan, indexCoverageSignals, indexMonitor, indexWatch, inferPseoTemplate, inferTemplateMovement, initializeTelemetry, insertCrawlRun, insertLinkRecoverRun, inspectUrl, internalLinksReport, interpretUpdateCorrelation, isBrandQuery, isCompatibleTechnicalBaseline, isCurrentTechnicalBaseline, isEntityEvidenceSchemaType, isSiteIdentitySchemaType, isSkippableReportError, isTelemetryCi, isTelemetryReport, isoDate, isoWeek, latestCrawlReport, latestCrawlSummaries, latestFinalGscDate, latestIndexWatchSummary, latestLinkRecoverSummary, linkRecover, linkRecoverRecommendation, listChanges, listClients, listContentGroups, listCrawlReports, listGa4AccountSummaries, listGa4DataStreams, listRules, listSearchUpdates, listSites, loadCrawlReport, localCredentialsProvider, loginWithLoopback, makeRunId, matchGa4WebStreams, measureChange, measureCoverage, metaRobotsDirectives, migrateLegacyMacConfig, missingOAuthClientMessage, missingSharedClientLoginMessage, monitoringStatus, monthlyReport, monthlyReportWorkflow, narrativeCsvFiles, normalizeCrawlConfig, normalizeCrawlSkipReasonCounts, normalizeForCoverage, normalizeHttpUrl, normalizeJavaScriptRenderingMode, normalizeLoadedCrawlReport, okfConceptLimit, pageEvidenceRecommendation, pageOpportunitiesReport, parseOlderThan, parsePseoPath, performanceAudit, performanceReportIsCacheable, planDueIndexUrls, planIndexCoverageFromUrls, plural, propertyMatchesUrl, providerPreferenceSchema, pseoAuditOptions, pseoAuditReport, pseoCsvFiles, pseoIndexStatus, pseoPresentation, publicHttpFetch, queryClusterReport, queryClusterTokens, queryContentCoverageFromPage, queryContentFieldsFromPage, queryFieldCoverage, queryOpportunityRecommendation, queryPageMetrics, queryPageTopQuery, queryPagesMetrics, queryPagesMetricsBatch, queryPagesTopQueries, queryPagesTopQueriesBatch, querySearchAnalytics, quickWinsCsvRows, quickWinsReport, readConfig, readOauthClient, readTokens, recommendCrawlDiffItem, recommendationForRule, recordChange, redirectTrace, refreshAuthToken, refreshPrioritiesCsvFiles, refreshPrioritiesWorkflow, renderCrawlCsv, renderCrawlHtml, renderCrawlMarkdownTickets, renderCrawlPagesCsv, renderCrawlPretty, renderCsv, renderPresentationTablesMarkdown, renderPseoMarkdown, renderWorkflowMarkdown, reportNarrative, reportPresentation, requestHeaders, resolveSegmentRanges, resolveSeoCliPaths, resolveTechnicalBaseline, reviewObservations, roundedPosition, runDoctor, runGa4Report, saveClient, saveCrawlReport, secondPage, segmentComparisonRange, segmentImpact, segmentRangeDays, selectAffectedUrls, selectDueIndexUrls, seoErrorEnvelope, seoToAiQueryReport, sessionSourceInListFilter, setDefaultClient, setTelemetryEnabled, setTokenStorageMode, shiftIsoDate, shouldExcludeBrandQuery, siteSchema, sqliteCrawlReportStore, strikingDistance, summarizeCrawlReport, pageTechnicalSignals as technicalPageSignals, technicalWatchWorkflow, telemetryErrorCategory, templateForUrl, toSeoError, tokenSchema, topCrawlRecommendations, topFixes, trackTelemetryReportComplete, trackTelemetryReportFailed, trackTelemetryReportStart, trackTelemetrySetupComplete, trafficAnomaly, unavailableSegmentImpactReport, unicodeTokens, updateCorrelation, updatePostmortemCsvFiles, updatePostmortemWorkflow, validateOkfFiles, verifyQueryContent, workflowPresentation, writeConfig, writeOauthClient, writeTokens, xRobotsDirectives };
28521
28890
 
28522
28891
  //# sourceMappingURL=index.js.map