import type { AuditEntityInput } from './audit-engine.js';
import type { AiFixDeps } from './issue-fix-ai.js';
export declare const RESEARCH_ISSUE_TYPES: Set<string>;
export declare const MAX_COMPETITOR_URLS = 3;
export interface SeoContentResearchCompetitor {
    url: string;
    title: string;
    note: string;
}
export interface SeoContentResearch {
    issueType: string;
    entityId: string;
    fingerprint: string;
    generatedAt: string;
    focusKeyword: string | null;
    suggestedWordCount: number | null;
    outline: string[];
    faqCandidates: string[];
    entitiesToMention: string[];
    competitorInsights: SeoContentResearchCompetitor[];
    summary: string;
}
export interface ContentResearchIssueInput {
    id: string;
    type: string;
    title: string;
    description?: string | null;
    recommendation?: string | null;
    entityId?: string | null;
}
export interface ContentResearchContext {
    entity: AuditEntityInput;
    updatedAt: string | Date;
}
export type ContentResearchResult = {
    ok: true;
    research: SeoContentResearch;
} | {
    ok: false;
    code: 'unsupported' | 'unavailable' | 'rate_limited' | 'budget_exceeded' | 'feature_disabled' | 'error';
    message: string;
};
export declare function supportsContentResearch(issueType: string): boolean;
export declare function contentResearchFromMetadata(metadata: unknown, issueType: string, entityId: string, updatedAt: string | Date): SeoContentResearch | null;
export declare function contentResearchToMetadata(research: SeoContentResearch): Record<string, unknown>;
export declare function generateContentResearch(issue: ContentResearchIssueInput, ctx: ContentResearchContext, deps: AiFixDeps, options?: {
    competitorUrls?: string[];
}): Promise<ContentResearchResult>;
/** Render topic research as markdown for export handoff docs. */
export declare function renderContentResearchMarkdown(research: SeoContentResearch): string;
//# sourceMappingURL=issue-content-research.d.ts.map