export declare const XML_TAG_KINDS: readonly ["inline_mention", "single_element", "element_list", "tagged_list", "tagged_list_mixed", "todo"];
export type XmlTagKind = (typeof XML_TAG_KINDS)[number];
export interface XmlTag {
    kind: XmlTagKind | string;
    source: 'core' | 'extension';
    attrs: Record<string, string>;
    raw: string;
    start: number;
    end: number;
    line: number;
}
export declare const XML_TAG_REGEX: RegExp;
export declare function parseXmlTags(md: string): XmlTag[];
/**
 * Like {@link parseXmlTags}, but drops tags that sit inside fenced code blocks
 * or inline code spans — i.e. documentation syntax examples, not real
 * references. Server reference operations (resolve, slug/anchor rename,
 * indexers, consistency, find_references, MCP) use this so they stay consistent
 * with the markdown-it editor, which already renders tags-in-code as literal
 * code rather than chips.
 *
 * Retained tags keep their original absolute `start`/`end`/`line`, so callers
 * that splice the body by offset (e.g. roundtrip-safe rewriters) are unaffected:
 * omitting a code tag is exactly equivalent to leaving it verbatim.
 */
export declare function parseXmlTagsExcludingCode(md: string): XmlTag[];
export declare function serializeXmlTag(kind: XmlTagKind | string, attrs: Record<string, string | null | undefined>): string;
export declare function extractSlugs(tag: XmlTag): string[];
export declare function extractTags(tag: XmlTag): string[];
/**
 * Matched tag slugs ("via") when a tagged_list / tagged_list_mixed node references an
 * entity of `entityType` carrying `entityTags`; [] when it does not match.
 * Single source of truth for tag-driven reference matching — used by both
 * find_references(includeTagMatches) and check_consistency rule 3.
 */
export declare function taggedListVia(tag: XmlTag, entityType: string, entityTags: ReadonlySet<string>): string[];
