/** * GitWand — Résolveur Markdown section-aware * * Résout les conflits dans les fichiers Markdown en identifiant * la structure de sections (headings H1..H6) et en fusionnant * section par section lorsque les modifications sont non-overlapping. * * Stratégie : * 1. Détecter les headings dans les trois versions * 2. Découper chaque version en sections (heading + contenu jusqu'au prochain heading de niveau ≤) * 3. Pour chaque section : * a. Si identique dans ours et theirs → garder * b. Si modifiée d'un seul côté → accepter la modification * c. Si section ajoutée d'un côté → ajouter * d. Si modifiée des deux côtés différemment → conflit partiel (insert les deux versions) * 4. Gestion du frontmatter YAML (entre --- au début du fichier) : traité séparément * * Limites : * - Ne pas résoudre les conflits intra-section (renvoyés au moteur textuel) * - Pas de merge sémantique du contenu riche (listes, tableaux, code) */ export interface MarkdownSection { /** Heading complet (ex: "## Mon titre") ou null pour le bloc avant le 1er heading */ heading: string | null; /** Niveau du heading (1..6) ou 0 pour le prologue */ level: number; /** Lignes du contenu (sans le heading) */ lines: string[]; /** Index de début dans le tableau de lignes source */ startIdx: number; } /** * Détecte et extrait le frontmatter YAML si présent (--- au début). * Retourne { frontmatter: string[], rest: string[] }. */ export declare function extractFrontmatter(lines: string[]): { frontmatter: string[]; rest: string[]; }; /** * Découpe un tableau de lignes en sections Markdown. * Chaque section commence par un heading ATX. * Le contenu avant le premier heading forme une section "prologue" (level 0). */ export declare function parseSections(lines: string[]): MarkdownSection[]; export interface MarkdownMergeResult { /** Lignes fusionnées (null si conflit non résolvable) */ mergedLines: string[] | null; /** Sections avec conflit non résolu */ conflictedSections: string[]; /** Nombre de sections fusionnées automatiquement */ resolvedSections: number; /** Description de la fusion */ reason: string; } /** * Fusionne deux versions Markdown section par section avec une base commune. * * @param baseLines - Lignes de la version base * @param oursLines - Lignes de la version ours * @param theirsLines - Lignes de la version theirs */ export declare function tryResolveMarkdownConflict(baseLines: string[], oursLines: string[], theirsLines: string[]): MarkdownMergeResult; //# sourceMappingURL=markdown.d.ts.map