/**
 * Brand voice — turns a stored {@link BrandVoiceProfile} into a system-prompt
 * fragment that the governed runtime injects into content-generation features
 * so every AI surface (co-author, SEO copy, etc.) writes in one consistent,
 * on-brand voice.
 *
 * The builder is deterministic and bounded: each field is length-clamped so a
 * large `sampleText` can't blow up token cost or crowd out the task prompt.
 */
import type { AIConfigDocument, BrandVoiceProfile } from './types.js';
/** Per-field caps so the voice fragment stays small relative to the task. */
declare const LIMITS: {
    readonly name: 120;
    readonly tone: 400;
    readonly audience: 400;
    readonly guidelines: 2000;
    readonly sampleText: 2000;
};
/** The active brand voice, or null when none is configured/enabled. */
export declare function getActiveBrandVoice(config: AIConfigDocument): BrandVoiceProfile | null;
/**
 * Build the system-prompt fragment for a brand voice profile. Returns null when
 * the profile is disabled or has no usable content. The sample text is fenced
 * as data (never instructions) to limit prompt-injection leverage from copy an
 * editor pasted in.
 */
export declare function buildBrandVoiceSystemPrompt(profile: BrandVoiceProfile | null | undefined): string | null;
/**
 * Compose a feature's own system prompt with the brand voice fragment. The
 * brand voice goes first so the task-specific instructions that follow can
 * still override format/length requirements.
 */
export declare function applyBrandVoice(system: string | undefined, profile: BrandVoiceProfile | null | undefined): string | undefined;
/** Clamp a profile to safe bounds before persisting (defense against bloat). */
export declare function normalizeBrandVoice(input: Partial<BrandVoiceProfile>): BrandVoiceProfile;
export { LIMITS as BRAND_VOICE_LIMITS };
//# sourceMappingURL=brand-voice.d.ts.map