/** * GitWand — Politiques de merge et configuration par projet * * Phase 7.4 : stratégies configurables, .gitwandrc, overrides par pattern glob. * * ## Politiques disponibles * * | Politique | Usage typique | * |-----------------|-----------------------------------------------| * | `prefer-ours` | Monorepo — protéger les changements locaux | * | `prefer-theirs` | Intégration continue — accepter l'upstream | * | `prefer-merge` | Développement actif — résoudre le plus possible (défaut) | * | `prefer-safety` | Code sensible — ne résoudre que l'évident | * | `strict` | Release branch — seulement le trivial | * * ## Choix implicites du moteur textuel (documentation des conventions) * * - `whitespace_only` → **ours** (préserver l'indentation locale) * - `value_only_change` → **theirs** (les valeurs volatiles — hash, versions — viennent du merge) * - `generated_file` → **theirs** (le fichier sera régénéré, theirs est plus récent) * - `one_side_change` → la branche modifiée (logique de préservation du changement) * - `non_overlapping` → merge LCS (les deux changements coexistent) * - `complex` → **pas de résolution automatique** (risque trop élevé) * * ## Format .gitwandrc * ```json * { * "policy": "prefer-safety", * "patterns": { * "*.lock": "prefer-theirs", * "package.json": "prefer-theirs", * "src/**\/*.ts": "prefer-ours" * } * } * ``` * Ou dans `package.json` sous la clé `"gitwand"`. */ /** * Niveau de validation post-merge. * * | Niveau | Ce qui est vérifié | * |-------------|---------------------------------------------------------------------------| * | `balanced` | Marqueurs résiduels + syntaxe JSON/YAML/TOML + parse-tree tree-sitter | * | `strict` | Balanced + `tsc --noEmit` et/ou `eslint` (Node.js uniquement, opt-in) | * | `off` | Aucune validation post-merge (performances max, risque accru) | */ export type ValidationLevel = "balanced" | "strict" | "off"; /** * Politique de résolution automatique des conflits. */ export type MergePolicy = "prefer-ours" | "prefer-theirs" | "prefer-merge" | "prefer-safety" | "strict"; /** * Configuration dérivée d'une `MergePolicy`. * Utilisée en interne par `resolveHunk` pour appliquer la politique. */ export interface PolicyConfig { /** Pour les types ambigus (whitespace_only, value_only_change) : prendre ours ou theirs ? */ preferOurs: boolean; /** Résoudre les conflits `whitespace_only` ? */ allowWhitespace: boolean; /** Résoudre les conflits `value_only_change` ? */ allowValueOnly: boolean; /** Résoudre les conflits `non_overlapping` ? */ allowNonOverlapping: boolean; /** Seuil de confiance effectif (override du paramètre global) */ minConfidence: "certain" | "high" | "medium" | "low"; } /** Convertit une `MergePolicy` en `PolicyConfig` exploitable. */ export declare function policyToConfig(policy: MergePolicy): PolicyConfig; /** Politique par défaut (comportement historique du moteur) */ export declare const DEFAULT_POLICY: MergePolicy; /** * Implémentation minimale de pattern glob pour les overrides de fichiers. * * Supporte : * - `*` — n'importe quel caractère sauf `/` * - `**` — n'importe quel caractère (y compris `/`) * - `?` — exactement un caractère sauf `/` * - Correspondance sur le basename si le pattern ne contient pas de `/` * * @param pattern - Motif glob (ex: `*.lock`, `src/**\/*.ts`, `package.json`) * @param filePath - Chemin du fichier (ex: `src/utils/helper.ts`) * @returns `true` si le chemin correspond au motif */ export declare function matchGlob(pattern: string, filePath: string): boolean; /** * Détermine la politique effective pour un fichier donné. * * Priorité : * 1. Pattern override le plus spécifique (par longueur de pattern) * 2. Politique globale * 3. Politique par défaut (`"prefer-theirs"`) * * @param filePath - Chemin du fichier * @param globalPolicy - Politique globale (depuis .gitwandrc ou options) * @param patternOverrides - Map pattern → politique */ export declare function effectivePolicyForFile(filePath: string, globalPolicy?: MergePolicy, patternOverrides?: Record): MergePolicy; /** * Structure du fichier `.gitwandrc` ou de la clé `"gitwand"` dans `package.json`. */ export interface GitWandrcConfig { /** Politique de merge globale */ policy?: MergePolicy; /** Overrides par pattern glob */ patterns?: Record; /** * Patterns glob supplémentaires pour fichiers auto-générés (P2.4). * S'ajoutent aux built-ins (lockfiles, bundles, `dist/`…) sans les remplacer. */ generatedFiles?: string[]; /** * v2.4 — Validation post-merge. * - `level: "balanced"` (défaut) : marqueurs résiduels + syntaxe + parse-tree * - `level: "strict"` : + tsc --noEmit et/ou eslint (Node.js uniquement, opt-in) * - `level: "off"` : désactive toute validation post-merge * * ```json * { "validation": { "level": "strict", "tools": ["tsc", "eslint"] } } * ``` */ validation?: { level?: ValidationLevel; /** Outils externes activés en mode strict. Défaut : ["tsc"]. */ tools?: Array<"tsc" | "eslint">; }; /** * v2.5 — Configuration du fallback LLM (sans le champ `endpoint`, injecté programmatiquement). * * Le champ `endpoint` de `LlmFallbackConfig` ne peut pas être sérialisé dans un fichier JSON. * Il doit être injecté via `GitWandOptions.llmFallback.endpoint` dans le code consommateur. * * ```jsonc * { * "llmFallback": { * "enabled": false, * "model": "claude-sonnet-4-6", * "maxTokens": 4000, * "temperature": 0.0, * "contextLines": 50, * "minPostMergeScore": 80, * "minMode": "strict" * } * } * ``` */ llmFallback?: { enabled?: boolean; model?: string; maxTokens?: number; temperature?: number; contextLines?: number; minPostMergeScore?: number; minMode?: ValidationLevel; }; /** * v2.6 — Moteur RefMerge (expérimental, opt-in). * * ```jsonc * { * "refactoringAware": { * "enabled": true, * "maxRefactoringsPerSide": 10 * } * } * ``` */ refactoringAware?: { /** Activer le moteur RefMerge (défaut: false) */ enabled?: boolean; /** * Nombre maximum de refactorings par branche avant fallback `complex`. Défaut: 10. */ maxRefactoringsPerSide?: number; }; /** * v3.5.0 — Scanner de secrets sur les lignes ajoutées en staging. * * ```jsonc * { * "secrets": { * "enabled": true, * "patterns": [ * { "id": "internal_token", "regex": "itok_[0-9a-f]{32}", "severity": "high" } * ], * "ignore": ["fixtures/**", "/AKIAFAKEFAKEFAKEFAKE/"], * "entropyThreshold": 4.0 * } * } * ``` */ secrets?: { /** Master switch, combiné au setting applicatif `secretsScannerEnabled` (défaut: true). */ enabled?: boolean; /** Patterns supplémentaires, en plus du catalogue built-in. */ patterns?: Array<{ id: string; regex: string; severity: "high" | "medium" | "low"; description: string; }>; /** Glob de chemin OU littéral `/regex/` sur la valeur matchée. */ ignore?: string[]; /** Seuil d'entropie Shannon (bits/char) pour la détection de secrets à haute entropie, [0, 8]. 0 désactive. */ entropyThreshold?: number; }; /** * v3.7.0 — Opt-in per-repo AI review of the staged diff ("Commit Review"). * * ```jsonc * { * "commitReview": { * "enabled": true, * "minConfidence": 70, * "maxFindings": 15, * "maxFiles": 30 * } * } * ``` */ commitReview?: { /** Master switch, combined with the app setting `commitReviewEnabled`. Overrides it either way. */ enabled?: boolean; /** Minimum confidence (0-100) a finding must reach to be shown. */ minConfidence?: number; /** Cap on the number of findings shown (1-200). */ maxFindings?: number; /** Cap on the number of staged files sent through the review pass (1-500). */ maxFiles?: number; }; } /** * Parse une configuration GitWandrc depuis une string JSON. * Retourne `null` en cas d'erreur de parsing. */ export declare function parseGitwandrc(json: string): GitWandrcConfig | null; //# sourceMappingURL=config.d.ts.map