interface LLMXMLOptions {
    /** Default threshold for fuzzy matching (0-1, default: 0.7) */
    defaultFuzzyThreshold?: number;
    /** Warning emission level (default: 'all') */
    warningLevel?: 'all' | 'none' | 'ambiguous-only';
    /** Include hlevel attribute in XML output (default: false) */
    includeHlevel?: boolean;
    /** Include title attribute in XML output (default: false) */
    includeTitle?: boolean;
    /** Include both hlevel and title attributes (default: false) */
    verbose?: boolean;
    /** Tag name format (default: 'PascalCase') */
    tagFormat?: 'snake_case' | 'SCREAMING_SNAKE' | 'camelCase' | 'PascalCase' | 'UPPERCASE';
}
interface Warning {
    /** Warning code */
    code: string;
    /** Human-readable message */
    message: string;
    /** Additional context */
    details?: any;
}
type ErrorCode = 'SECTION_NOT_FOUND' | 'PARSE_ERROR' | 'INVALID_FORMAT' | 'INVALID_LEVEL' | 'INVALID_SECTION_OPTIONS';

/**
 * Custom error class for LLMXML-specific errors
 */
declare class LLMXMLError extends Error {
    code: ErrorCode;
    details?: unknown | undefined;
    /**
     * Creates a new LLMXMLError
     *
     * @param message - Human-readable error message
     * @param code - Error code identifying the type of error
     * @param details - Optional additional error context
     */
    constructor(message: string, code: ErrorCode, details?: unknown | undefined);
}

/**
 * Options for section extraction
 */
interface GetSectionOptions {
    /** Only match headers at this level */
    level?: number;
    /** Require exact matches */
    exact?: boolean;
    /** Include subsections in result */
    includeNested?: boolean;
    /** Minimum fuzzy match score (0-1) */
    fuzzyThreshold?: number;
}
/**
 * Heading information from document
 */
interface HeadingInfo {
    /** Heading title */
    title: string;
    /** Heading level (1-6) */
    level: number;
    /** Hierarchical path to this heading */
    path: string[];
}
/**
 * Main LLMXML class for converting between Markdown and LLM-friendly pseudo-XML
 */
declare class LLMXML {
    private options;
    private llmSerializer;
    private warningHandlers;
    /**
     * Creates a new LLMXML instance
     *
     * @param options - Configuration options
     */
    constructor(options?: LLMXMLOptions);
    /**
     * Convert Markdown to LLM-XML format
     */
    toXML(markdown: string): Promise<string>;
    /**
     * Convert LLM-XML to Markdown format
     */
    toMarkdown(xml: string): Promise<string>;
    /**
     * Extract a single section from the document
     */
    getSection(content: string, title: string, options?: GetSectionOptions): Promise<string>;
    /**
     * Extract multiple matching sections from the document
     */
    getSections(content: string, title: string, options?: GetSectionOptions): Promise<string[]>;
    /**
     * Extract all headings from the document
     *
     * @param content - Markdown or LLM-XML content
     * @returns Array of heading information
     */
    getHeadings(content: string): Promise<HeadingInfo[]>;
    /**
     * Extract headings from AST
     *
     * @private
     * @param ast - Document AST
     * @returns Array of heading information
     */
    private extractHeadingsFromAST;
    /**
     * Register a warning handler
     */
    onWarning(handler: (warning: Warning) => void): void;
    /**
     * Remove a previously registered warning handler
     *
     * @param event - The event type ('warning')
     * @param handler - The handler to remove
     */
    off(_event: 'warning', handler: (warning: Warning) => void): void;
    /**
     * Emit a warning to all registered handlers
     *
     * @param warning - The warning to emit
     */
    protected emitWarning(warning: Warning): void;
    /**
     * Convert Markdown to XML and back to Markdown, preserving all structure
     */
    roundTrip(markdown: string): Promise<string>;
    /**
     * Normalize markdown formatting with consistent spacing
     *
     * @param markdown - The markdown content to normalize
     * @returns Normalized markdown with consistent spacing
     */
    normalizeMarkdown(markdown: string): Promise<string>;
}
/**
 * Create a new LLMXML instance with the given options
 *
 * @param options - Configuration options
 * @returns A new LLMXML instance
 */
declare function createLLMXML(options?: LLMXMLOptions): LLMXML;

export { type ErrorCode, type GetSectionOptions, type HeadingInfo, LLMXML, LLMXMLError, type LLMXMLOptions, type Warning, createLLMXML };
