@gitwand/core 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/__tests__/corpus.d.ts.map +1 -1
  2. package/dist/__tests__/corpus.js +377 -0
  3. package/dist/__tests__/corpus.js.map +1 -1
  4. package/dist/__tests__/patterns/complex.test.d.ts +9 -0
  5. package/dist/__tests__/patterns/complex.test.d.ts.map +1 -0
  6. package/dist/__tests__/patterns/complex.test.js +198 -0
  7. package/dist/__tests__/patterns/complex.test.js.map +1 -0
  8. package/dist/__tests__/patterns/delete-no-change.test.d.ts +11 -0
  9. package/dist/__tests__/patterns/delete-no-change.test.d.ts.map +1 -0
  10. package/dist/__tests__/patterns/delete-no-change.test.js +178 -0
  11. package/dist/__tests__/patterns/delete-no-change.test.js.map +1 -0
  12. package/dist/__tests__/patterns/llm-proposed.test.d.ts +10 -0
  13. package/dist/__tests__/patterns/llm-proposed.test.d.ts.map +1 -0
  14. package/dist/__tests__/patterns/llm-proposed.test.js +306 -0
  15. package/dist/__tests__/patterns/llm-proposed.test.js.map +1 -0
  16. package/dist/__tests__/patterns/non-overlapping.test.d.ts +11 -0
  17. package/dist/__tests__/patterns/non-overlapping.test.d.ts.map +1 -0
  18. package/dist/__tests__/patterns/non-overlapping.test.js +240 -0
  19. package/dist/__tests__/patterns/non-overlapping.test.js.map +1 -0
  20. package/dist/__tests__/patterns/one-side-change.test.d.ts +10 -0
  21. package/dist/__tests__/patterns/one-side-change.test.d.ts.map +1 -0
  22. package/dist/__tests__/patterns/one-side-change.test.js +191 -0
  23. package/dist/__tests__/patterns/one-side-change.test.js.map +1 -0
  24. package/dist/__tests__/patterns/same-change.test.d.ts +9 -0
  25. package/dist/__tests__/patterns/same-change.test.d.ts.map +1 -0
  26. package/dist/__tests__/patterns/same-change.test.js +173 -0
  27. package/dist/__tests__/patterns/same-change.test.js.map +1 -0
  28. package/dist/__tests__/patterns/value-only-change.test.d.ts +11 -0
  29. package/dist/__tests__/patterns/value-only-change.test.d.ts.map +1 -0
  30. package/dist/__tests__/patterns/value-only-change.test.js +159 -0
  31. package/dist/__tests__/patterns/value-only-change.test.js.map +1 -0
  32. package/dist/__tests__/patterns/whitespace-only.test.d.ts +10 -0
  33. package/dist/__tests__/patterns/whitespace-only.test.d.ts.map +1 -0
  34. package/dist/__tests__/patterns/whitespace-only.test.js +177 -0
  35. package/dist/__tests__/patterns/whitespace-only.test.js.map +1 -0
  36. package/dist/__tests__/resolvers/css.test.d.ts +12 -0
  37. package/dist/__tests__/resolvers/css.test.d.ts.map +1 -0
  38. package/dist/__tests__/resolvers/css.test.js +171 -0
  39. package/dist/__tests__/resolvers/css.test.js.map +1 -0
  40. package/dist/__tests__/resolvers/imports.test.d.ts +12 -0
  41. package/dist/__tests__/resolvers/imports.test.d.ts.map +1 -0
  42. package/dist/__tests__/resolvers/imports.test.js +135 -0
  43. package/dist/__tests__/resolvers/imports.test.js.map +1 -0
  44. package/dist/__tests__/resolvers/json.test.d.ts +12 -0
  45. package/dist/__tests__/resolvers/json.test.d.ts.map +1 -0
  46. package/dist/__tests__/resolvers/json.test.js +184 -0
  47. package/dist/__tests__/resolvers/json.test.js.map +1 -0
  48. package/dist/__tests__/resolvers/lockfile-npm.test.d.ts +12 -0
  49. package/dist/__tests__/resolvers/lockfile-npm.test.d.ts.map +1 -0
  50. package/dist/__tests__/resolvers/lockfile-npm.test.js +187 -0
  51. package/dist/__tests__/resolvers/lockfile-npm.test.js.map +1 -0
  52. package/dist/__tests__/resolvers/lockfile-pnpm.test.d.ts +12 -0
  53. package/dist/__tests__/resolvers/lockfile-pnpm.test.d.ts.map +1 -0
  54. package/dist/__tests__/resolvers/lockfile-pnpm.test.js +175 -0
  55. package/dist/__tests__/resolvers/lockfile-pnpm.test.js.map +1 -0
  56. package/dist/__tests__/resolvers/lockfile-yarn.test.d.ts +12 -0
  57. package/dist/__tests__/resolvers/lockfile-yarn.test.d.ts.map +1 -0
  58. package/dist/__tests__/resolvers/lockfile-yarn.test.js +165 -0
  59. package/dist/__tests__/resolvers/lockfile-yarn.test.js.map +1 -0
  60. package/dist/__tests__/resolvers/markdown.test.d.ts +12 -0
  61. package/dist/__tests__/resolvers/markdown.test.d.ts.map +1 -0
  62. package/dist/__tests__/resolvers/markdown.test.js +188 -0
  63. package/dist/__tests__/resolvers/markdown.test.js.map +1 -0
  64. package/dist/__tests__/resolvers/vue.test.d.ts +12 -0
  65. package/dist/__tests__/resolvers/vue.test.d.ts.map +1 -0
  66. package/dist/__tests__/resolvers/vue.test.js +225 -0
  67. package/dist/__tests__/resolvers/vue.test.js.map +1 -0
  68. package/dist/__tests__/resolvers/yaml.test.d.ts +12 -0
  69. package/dist/__tests__/resolvers/yaml.test.d.ts.map +1 -0
  70. package/dist/__tests__/resolvers/yaml.test.js +203 -0
  71. package/dist/__tests__/resolvers/yaml.test.js.map +1 -0
  72. package/dist/__tests__/v2-core-scenarios.test.d.ts +35 -0
  73. package/dist/__tests__/v2-core-scenarios.test.d.ts.map +1 -0
  74. package/dist/__tests__/v2-core-scenarios.test.js +692 -0
  75. package/dist/__tests__/v2-core-scenarios.test.js.map +1 -0
  76. package/dist/__tests__/validation-parse-tree.test.d.ts +15 -0
  77. package/dist/__tests__/validation-parse-tree.test.d.ts.map +1 -0
  78. package/dist/__tests__/validation-parse-tree.test.js +243 -0
  79. package/dist/__tests__/validation-parse-tree.test.js.map +1 -0
  80. package/dist/classifier.d.ts.map +1 -1
  81. package/dist/classifier.js +3 -0
  82. package/dist/classifier.js.map +1 -1
  83. package/dist/config.d.ts +54 -0
  84. package/dist/config.d.ts.map +1 -1
  85. package/dist/config.js +42 -0
  86. package/dist/config.js.map +1 -1
  87. package/dist/diff/index.d.ts.map +1 -1
  88. package/dist/diff/index.js +1 -3
  89. package/dist/diff/index.js.map +1 -1
  90. package/dist/index.d.ts +3 -1
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +2 -0
  93. package/dist/index.js.map +1 -1
  94. package/dist/patterns/llm-proposed.d.ts +8 -0
  95. package/dist/patterns/llm-proposed.d.ts.map +1 -0
  96. package/dist/patterns/llm-proposed.js +66 -0
  97. package/dist/patterns/llm-proposed.js.map +1 -0
  98. package/dist/patterns/utils.d.ts +8 -7
  99. package/dist/patterns/utils.d.ts.map +1 -1
  100. package/dist/patterns/utils.js +13 -12
  101. package/dist/patterns/utils.js.map +1 -1
  102. package/dist/resolver/adapters/strict-node.d.ts +32 -0
  103. package/dist/resolver/adapters/strict-node.d.ts.map +1 -0
  104. package/dist/resolver/adapters/strict-node.js +117 -0
  105. package/dist/resolver/adapters/strict-node.js.map +1 -0
  106. package/dist/resolver/index.d.ts +20 -1
  107. package/dist/resolver/index.d.ts.map +1 -1
  108. package/dist/resolver/index.js +106 -5
  109. package/dist/resolver/index.js.map +1 -1
  110. package/dist/resolver/llm-pipeline.d.ts +33 -0
  111. package/dist/resolver/llm-pipeline.d.ts.map +1 -0
  112. package/dist/resolver/llm-pipeline.js +218 -0
  113. package/dist/resolver/llm-pipeline.js.map +1 -0
  114. package/dist/resolver/policy.d.ts.map +1 -1
  115. package/dist/resolver/policy.js +5 -0
  116. package/dist/resolver/policy.js.map +1 -1
  117. package/dist/resolver/validate-parse-tree.d.ts +52 -0
  118. package/dist/resolver/validate-parse-tree.d.ts.map +1 -0
  119. package/dist/resolver/validate-parse-tree.js +87 -0
  120. package/dist/resolver/validate-parse-tree.js.map +1 -0
  121. package/dist/resolver/validate-strict.d.ts +27 -0
  122. package/dist/resolver/validate-strict.d.ts.map +1 -0
  123. package/dist/resolver/validate-strict.js +41 -0
  124. package/dist/resolver/validate-strict.js.map +1 -0
  125. package/dist/resolver/validation.d.ts.map +1 -1
  126. package/dist/resolver/validation.js +15 -1
  127. package/dist/resolver/validation.js.map +1 -1
  128. package/dist/resolvers/dispatcher.d.ts.map +1 -1
  129. package/dist/resolvers/dispatcher.js.map +1 -1
  130. package/dist/resolvers/llm-fallback.d.ts +41 -0
  131. package/dist/resolvers/llm-fallback.d.ts.map +1 -0
  132. package/dist/resolvers/llm-fallback.js +231 -0
  133. package/dist/resolvers/llm-fallback.js.map +1 -0
  134. package/dist/types.d.ts +183 -4
  135. package/dist/types.d.ts.map +1 -1
  136. package/package.json +1 -1
@@ -0,0 +1,231 @@
1
+ /**
2
+ * v2.5 — LLM fallback resolver.
3
+ *
4
+ * Sérialise un hunk de conflit + son contexte, envoie le prompt à l'endpoint
5
+ * LLM injecté par le consommateur, valide le résultat proposé, et retourne
6
+ * la résolution avec une trace d'audit complète.
7
+ *
8
+ * ### Contrainte browser
9
+ * Ce module n'utilise aucun module Node.js natif (`fs`, `crypto`, `child_process`…).
10
+ * Le hash SHA-256 est calculé via l'API Web Crypto (`globalThis.crypto.subtle`),
11
+ * disponible en browser, Node.js ≥ 18, et Tauri.
12
+ */
13
+ import { validateMergedContent } from "../resolver/validation.js";
14
+ // ─── Helpers internes ──────────────────────────────────────
15
+ /**
16
+ * Calcule le hash SHA-256 d'une chaîne en hexadécimal.
17
+ * Utilise Web Crypto (browser + Node.js ≥ 18 + Tauri) — pas de `node:crypto`.
18
+ */
19
+ async function sha256Hex(text) {
20
+ const encoder = new TextEncoder();
21
+ const data = encoder.encode(text);
22
+ const hashBuffer = await globalThis.crypto.subtle.digest("SHA-256", data);
23
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
24
+ return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
25
+ }
26
+ /**
27
+ * Calcule un score de validation (0–100) à partir d'un `ValidationResult`.
28
+ *
29
+ * | Condition | Score |
30
+ * |----------------------------------------|-------|
31
+ * | Marqueurs résiduels détectés | 0 |
32
+ * | Erreur de syntaxe structurée | 0 |
33
+ * | Parse-tree invalide | 0 |
34
+ * | Validation externe échouée (tsc/eslint)| 50 |
35
+ * | Tout OK | 100 |
36
+ */
37
+ function computeValidationScore(validation, parseTreeValid, externalValidationPassed) {
38
+ if (validation.hasResidualMarkers)
39
+ return 0;
40
+ if (validation.syntaxError !== null)
41
+ return 0;
42
+ if (parseTreeValid === false)
43
+ return 0;
44
+ if (externalValidationPassed === false)
45
+ return 50;
46
+ return 100;
47
+ }
48
+ /**
49
+ * Construit le prompt structuré envoyé au LLM.
50
+ *
51
+ * Format :
52
+ * - Contexte autour du hunk (±contextLines lignes)
53
+ * - Sérialisation complète du hunk (base/ours/theirs)
54
+ * - Résumé de la DecisionTrace partielle
55
+ * - Instructions explicites (output uniquement en code block)
56
+ */
57
+ function buildPrompt(hunk, filePath, fileContext, config) {
58
+ const contextLines = config.contextLines ?? 50;
59
+ const base = hunk.baseLines.join("\n");
60
+ const ours = hunk.oursLines.join("\n");
61
+ const theirs = hunk.theirsLines.join("\n");
62
+ const traceSteps = hunk.trace.steps
63
+ .map((s) => ` [${s.passed ? "✓" : "✗"}] ${s.type}: ${s.reason}`)
64
+ .join("\n");
65
+ const hasBase = hunk.baseLines.length > 0;
66
+ const conflictBlock = hasBase
67
+ ? `<<<<<<< ours\n${ours}\n||||||| base\n${base}\n=======\n${theirs}\n>>>>>>> theirs`
68
+ : `<<<<<<< ours\n${ours}\n=======\n${theirs}\n>>>>>>> theirs`;
69
+ return `You are an expert Git merge conflict resolver. Your task is to resolve the conflict below.
70
+
71
+ ## File: ${filePath}
72
+
73
+ ## Context (±${contextLines} lines around the conflict):
74
+ \`\`\`
75
+ ${fileContext}
76
+ \`\`\`
77
+
78
+ ## Conflict hunk to resolve (line ${hunk.startLine}):
79
+ \`\`\`
80
+ ${conflictBlock}
81
+ \`\`\`
82
+
83
+ ## Analysis (partial decision trace):
84
+ ${traceSteps || " No patterns matched — conflict is complex."}
85
+
86
+ ## Instructions:
87
+ - Output ONLY the resolved lines inside a single fenced code block (\`\`\`)
88
+ - Do NOT include conflict markers (<<<<<<<, =======, >>>>>>>, |||||||)
89
+ - Preserve indentation, coding style, and surrounding context
90
+ - If you cannot resolve this conflict safely, output exactly: CANNOT_RESOLVE
91
+ - Do not explain your reasoning — only output the code block or CANNOT_RESOLVE
92
+
93
+ ## Resolution:`.trim();
94
+ }
95
+ /**
96
+ * Extrait les lignes résolues depuis la réponse brute du LLM.
97
+ *
98
+ * Accepte :
99
+ * - Une réponse contenant un bloc de code fencé (\`\`\`...\`\`\`)
100
+ * - Une réponse contenant "CANNOT_RESOLVE"
101
+ * - Une réponse brute (fallback : toutes les lignes sauf la première si vide)
102
+ *
103
+ * @returns Les lignes résolues, ou `null` si le LLM a refusé ou si la réponse est vide.
104
+ */
105
+ function parseResponse(raw) {
106
+ const trimmed = raw.trim();
107
+ if (!trimmed || trimmed === "CANNOT_RESOLVE" || trimmed.includes("CANNOT_RESOLVE")) {
108
+ return null;
109
+ }
110
+ // Extraire le contenu du premier bloc fencé
111
+ const fenceMatch = trimmed.match(/```(?:\w+)?\n?([\s\S]*?)```/);
112
+ if (fenceMatch) {
113
+ const content = fenceMatch[1];
114
+ // Retirer le trailing newline du bloc mais garder les lignes internes
115
+ return content.replace(/\n$/, "").split("\n");
116
+ }
117
+ // Fallback : retourner les lignes brutes (sans la première ligne si elle est vide)
118
+ const lines = trimmed.split("\n");
119
+ return lines.length > 0 ? lines : null;
120
+ }
121
+ // ─── Résolveur principal ───────────────────────────────────
122
+ /**
123
+ * Tente de résoudre un hunk de conflit via le fallback LLM.
124
+ *
125
+ * Pipeline :
126
+ * 1. Construit le prompt (sérialisation hunk + contexte + trace partielle)
127
+ * 2. Calcule le hash SHA-256 du prompt (audit de reproductibilité)
128
+ * 3. Appelle `config.endpoint.call(prompt)` (fourni par le consommateur)
129
+ * 4. Parse la réponse (extrait les lignes résolues)
130
+ * 5. Valide le résultat (`validateMergedContent`)
131
+ * 6. Accepte si `score ≥ minPostMergeScore`, refuse sinon
132
+ * 7. Retourne `LlmResolveResult` avec la trace complète
133
+ *
134
+ * @param hunk - Hunk de conflit à résoudre
135
+ * @param filePath - Chemin du fichier (pour validation post-merge)
136
+ * @param fileContext - ±N lignes autour du hunk (fournies par l'appelant)
137
+ * @param config - Configuration LLM fallback (avec endpoint injecté)
138
+ */
139
+ export async function tryLlmFallbackResolve(hunk, filePath, fileContext, config) {
140
+ const calledAt = new Date().toISOString();
141
+ const model = config.model ?? "claude-sonnet-4-6";
142
+ const minPostMergeScore = config.minPostMergeScore ?? 80;
143
+ // Vérification de l'endpoint (requis pour que le fallback fonctionne)
144
+ if (!config.endpoint) {
145
+ const trace = {
146
+ calledAt,
147
+ model,
148
+ latencyMs: 0,
149
+ promptHash: "",
150
+ rawResponseTruncated: "",
151
+ validationScore: 0,
152
+ accepted: false,
153
+ };
154
+ return {
155
+ lines: null,
156
+ reason: "LLM fallback ignoré : aucun endpoint injecté (config.endpoint manquant).",
157
+ llmTrace: trace,
158
+ };
159
+ }
160
+ const prompt = buildPrompt(hunk, filePath, fileContext, config);
161
+ const promptHash = await sha256Hex(prompt);
162
+ const t0 = Date.now();
163
+ let rawResponse;
164
+ try {
165
+ rawResponse = await config.endpoint.call(prompt);
166
+ }
167
+ catch (err) {
168
+ const latencyMs = Date.now() - t0;
169
+ const errMsg = err instanceof Error ? err.message : String(err);
170
+ const trace = {
171
+ calledAt,
172
+ model,
173
+ latencyMs,
174
+ promptHash,
175
+ rawResponseTruncated: "",
176
+ validationScore: 0,
177
+ accepted: false,
178
+ };
179
+ return {
180
+ lines: null,
181
+ reason: `LLM endpoint erreur : ${errMsg}`,
182
+ llmTrace: trace,
183
+ };
184
+ }
185
+ const latencyMs = Date.now() - t0;
186
+ const rawResponseTruncated = rawResponse.slice(0, 500);
187
+ // Parse la réponse brute
188
+ const proposedLines = parseResponse(rawResponse);
189
+ if (proposedLines === null) {
190
+ const trace = {
191
+ calledAt,
192
+ model,
193
+ latencyMs,
194
+ promptHash,
195
+ rawResponseTruncated,
196
+ validationScore: 0,
197
+ accepted: false,
198
+ };
199
+ return {
200
+ lines: null,
201
+ reason: "LLM a refusé de résoudre ce conflit (CANNOT_RESOLVE ou réponse vide).",
202
+ llmTrace: trace,
203
+ };
204
+ }
205
+ // Validation post-merge du contenu proposé
206
+ const candidateContent = proposedLines.join("\n");
207
+ const validation = validateMergedContent(candidateContent, filePath);
208
+ const validationScore = computeValidationScore(validation);
209
+ const accepted = validation.isValid && validationScore >= minPostMergeScore;
210
+ const trace = {
211
+ calledAt,
212
+ model,
213
+ latencyMs,
214
+ promptHash,
215
+ rawResponseTruncated,
216
+ validationScore,
217
+ accepted,
218
+ };
219
+ if (!accepted) {
220
+ const reason = !validation.isValid
221
+ ? `LLM résolution refusée : validation échouée (marqueurs résiduels: ${validation.hasResidualMarkers}, syntaxe: ${validation.syntaxError ?? "ok"}).`
222
+ : `LLM résolution refusée : score de validation ${validationScore} < minimum requis ${minPostMergeScore}.`;
223
+ return { lines: null, reason, llmTrace: trace };
224
+ }
225
+ return {
226
+ lines: proposedLines,
227
+ reason: `LLM résolution acceptée (score: ${validationScore}/100, latence: ${latencyMs}ms, modèle: ${model}).`,
228
+ llmTrace: trace,
229
+ };
230
+ }
231
+ //# sourceMappingURL=llm-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-fallback.js","sourceRoot":"","sources":["../../src/resolvers/llm-fallback.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -16,7 +16,7 @@ export interface MergeInput {
16
16
  filePath: string;
17
17
  }
18
18
  /** Classification du type de conflit */
19
- export type ConflictType = "one_side_change" | "same_change" | "non_overlapping" | "whitespace_only" | "delete_no_change" | "generated_file" | "value_only_change" | "reorder_only" | "insertion_at_boundary" | "complex";
19
+ export type ConflictType = "one_side_change" | "same_change" | "non_overlapping" | "whitespace_only" | "delete_no_change" | "generated_file" | "value_only_change" | "reorder_only" | "insertion_at_boundary" | "llm_proposed" | "complex";
20
20
  /** Niveau de confiance discret (label seuil, utilisé dans les options) */
21
21
  export type Confidence = "certain" | "high" | "medium" | "low";
22
22
  /**
@@ -29,12 +29,14 @@ export type Confidence = "certain" | "high" | "medium" | "low";
29
29
  * - `fileFrequency` : v1.4 — pénalité si le fichier a déjà des hunks complexes (0–100)
30
30
  * - `baseAvailability` : v1.4 — bonus si la base diff3/zdiff3 est disponible (0 ou 100)
31
31
  *
32
- * Formule v1.4 :
32
+ * Formule v2.4 :
33
33
  * `score = typeClassification
34
34
  * − dataRisk × 0.40
35
35
  * − scopeImpact × 0.15
36
36
  * − fileFrequency × 0.10
37
- * + baseAvailability × 0.05`
37
+ * + baseAvailability × 0.05
38
+ * − algorithmStability × 0.10
39
+ * − postMergeRisk × 0.20`
38
40
  *
39
41
  * Label dérivé :
40
42
  * - score ≥ 92 → `"certain"`
@@ -79,6 +81,13 @@ export interface ConfidenceScore {
79
81
  * pour la rétro-compat stricte.
80
82
  */
81
83
  algorithmStability?: number;
84
+ /**
85
+ * v2.4 — Risque post-merge détecté par validation parse-tree (tree-sitter).
86
+ * 0 = parse tree valide, 100 = erreurs de syntaxe détectées après résolution.
87
+ * Optionnel — uniquement set quand la validation parse-tree est exécutée et échoue.
88
+ * Lorsque non nul, la résolution est rétractée (hunk remis en marqueurs de conflit).
89
+ */
90
+ postMergeRisk?: number;
82
91
  };
83
92
  /** Facteurs ayant augmenté le score (justifications de haute confiance) */
84
93
  boosters: string[];
@@ -94,6 +103,103 @@ export interface TraceStep {
94
103
  /** Raison lisible — pourquoi ce type a été accepté ou rejeté */
95
104
  reason: string;
96
105
  }
106
+ /**
107
+ * v2.5 — Endpoint LLM injecté par le consommateur.
108
+ *
109
+ * `@gitwand/core` n'effectue jamais de requête HTTP directe.
110
+ * C'est le consommateur (CLI, desktop, extension) qui fournit
111
+ * cette interface et décide du transport (API, MCP, Ollama local…).
112
+ *
113
+ * Exemple d'implémentation dans le CLI :
114
+ * ```ts
115
+ * const endpoint: LlmEndpoint = {
116
+ * async call(prompt) {
117
+ * return myAnthropicClient.complete(prompt);
118
+ * }
119
+ * };
120
+ * ```
121
+ */
122
+ export interface LlmEndpoint {
123
+ /**
124
+ * Appelle le LLM avec un prompt structuré et retourne la réponse textuelle.
125
+ * @param prompt - Prompt complet (hunk sérialisé + contexte + instructions)
126
+ * @returns Résolution proposée par le LLM (texte brut, lignes de code)
127
+ */
128
+ call(prompt: string): Promise<string>;
129
+ }
130
+ /**
131
+ * v2.5 — Configuration du fallback LLM.
132
+ *
133
+ * Placée dans `GitWandOptions.llmFallback` ou parsée depuis `.gitwandrc`.
134
+ * Le champ `endpoint` est injecté programmatiquement (non sérialisable).
135
+ */
136
+ export interface LlmFallbackConfig {
137
+ /**
138
+ * Active le fallback LLM pour les hunks complexes non résolus.
139
+ * Défaut : `false`. Doit être explicitement opté.
140
+ */
141
+ enabled: boolean;
142
+ /**
143
+ * Endpoint LLM injecté par le consommateur.
144
+ * Requis si `enabled: true` — sans lui, le fallback est silencieusement skippé.
145
+ * Non présent dans `.gitwandrc` (injecté programmatiquement).
146
+ */
147
+ endpoint?: LlmEndpoint;
148
+ /**
149
+ * Nom du modèle (hint informatif, passé à l'endpoint par le consommateur).
150
+ * Défaut : `"claude-sonnet-4-6"`.
151
+ */
152
+ model?: string;
153
+ /**
154
+ * Nombre maximum de tokens dans la réponse LLM.
155
+ * Défaut : `4000`.
156
+ */
157
+ maxTokens?: number;
158
+ /**
159
+ * Température pour l'appel LLM (0.0 = déterministe).
160
+ * Défaut : `0.0` — reproductibilité recommandée.
161
+ */
162
+ temperature?: number;
163
+ /**
164
+ * Nombre de lignes de contexte autour du hunk incluses dans le prompt.
165
+ * Défaut : `50`.
166
+ */
167
+ contextLines?: number;
168
+ /**
169
+ * Score de validation post-merge minimum (0–100) pour accepter la résolution LLM.
170
+ * Sous ce seuil, la résolution est refusée et le hunk reste `complex`.
171
+ * Défaut : `80`.
172
+ */
173
+ minPostMergeScore?: number;
174
+ /**
175
+ * Niveau de validation imposé pour les résolutions LLM.
176
+ * Recommandation forte : garder `"strict"` (tsc + eslint) pour limiter les hallucinations.
177
+ * Défaut : `"strict"`.
178
+ */
179
+ minMode?: import("./config.js").ValidationLevel;
180
+ }
181
+ /**
182
+ * v2.5 — Trace d'un appel LLM dans la DecisionTrace.
183
+ * Produite uniquement quand `llm_proposed` est le type sélectionné.
184
+ *
185
+ * Audit trail complet pour la traçabilité et la reproductibilité.
186
+ */
187
+ export interface LlmTrace {
188
+ /** Horodatage ISO 8601 de l'appel LLM */
189
+ calledAt: string;
190
+ /** Modèle invoqué (tel que renvoyé par l'endpoint ou fourni dans la config) */
191
+ model: string;
192
+ /** Latence en millisecondes (temps entre envoi du prompt et réception de la réponse) */
193
+ latencyMs: number;
194
+ /** Hash SHA-256 du prompt (hex, pour audit de reproductibilité) */
195
+ promptHash: string;
196
+ /** Réponse brute tronquée (500 premiers caractères, pour debug sans exposer le code) */
197
+ rawResponseTruncated: string;
198
+ /** Score de validation post-merge obtenu (0–100) */
199
+ validationScore: number;
200
+ /** La résolution LLM a-t-elle été acceptée ? (`false` = fallback sur `complex`) */
201
+ accepted: boolean;
202
+ }
97
203
  /**
98
204
  * Trace complète du raisonnement de classification d'un hunk.
99
205
  *
@@ -111,6 +217,11 @@ export interface DecisionTrace {
111
217
  summary: string;
112
218
  /** La base (diff3) était-elle disponible ? Conditionne les vérifications fines */
113
219
  hasBase: boolean;
220
+ /**
221
+ * v2.5 — Trace de l'appel LLM (uniquement si `selected === "llm_proposed"`).
222
+ * `undefined` pour tous les autres types de conflit.
223
+ */
224
+ llmTrace?: LlmTrace;
114
225
  }
115
226
  /**
116
227
  * Input canonique pour la classification d'un hunk.
@@ -187,6 +298,17 @@ export interface HunkResolution {
187
298
  /** Raison lisible de la résolution (ou du refus de résolution) */
188
299
  resolutionReason: string;
189
300
  }
301
+ /**
302
+ * v2.4 — Résultat d'une validation externe (tsc --noEmit / eslint).
303
+ */
304
+ export interface ExternalValidationResult {
305
+ /** Outil de validation utilisé */
306
+ tool: "tsc" | "eslint";
307
+ /** Messages d'erreur remontés par l'outil */
308
+ errors: string[];
309
+ /** `true` si aucune erreur remontée */
310
+ passed: boolean;
311
+ }
190
312
  /**
191
313
  * Résultat de la validation du contenu fusionné.
192
314
  * Détecte les problèmes résiduels après résolution.
@@ -196,10 +318,35 @@ export interface ValidationResult {
196
318
  hasResidualMarkers: boolean;
197
319
  /** Marqueurs trouvés (exemples, pas la liste exhaustive) */
198
320
  residualMarkerLines: number[];
199
- /** Erreur de syntaxe pour les fichiers structurés (JSON) — null si valide ou non applicable */
321
+ /** Erreur de syntaxe pour les fichiers structurés (JSON/YAML/TOML) — null si valide ou non applicable */
200
322
  syntaxError: string | null;
201
323
  /** Le contenu fusionné est-il valide ? */
202
324
  isValid: boolean;
325
+ /**
326
+ * v2.4 — Résultat de la validation parse-tree via tree-sitter.
327
+ * - `true` : l'arbre syntaxique ne contient aucun nœud d'erreur
328
+ * - `false` : des erreurs syntaxiques ont été détectées → rétraction activée
329
+ * - `null` : non évalué (sync, langage non supporté, ou web-tree-sitter absent)
330
+ */
331
+ parseTreeValid?: boolean | null;
332
+ /**
333
+ * v2.4 — Nombre de nœuds ERROR dans l'arbre syntaxique (0 si aucun ou non évalué).
334
+ */
335
+ parseTreeErrors?: number;
336
+ /**
337
+ * v2.4 — Positions des nœuds ERROR dans le contenu fusionné.
338
+ * Vide si aucune erreur ou si la validation parse-tree n'a pas été exécutée.
339
+ */
340
+ parseTreeErrorRanges?: Array<{
341
+ start: number;
342
+ end: number;
343
+ }>;
344
+ /**
345
+ * v2.4 — Résultat de la validation stricte (tsc --noEmit / eslint).
346
+ * `null` si la validation stricte n'a pas été activée.
347
+ * Opt-in via `.gitwandrc` `validation.level: "strict"`.
348
+ */
349
+ externalValidation?: ExternalValidationResult | null;
203
350
  }
204
351
  /** Résultat complet de l'analyse et résolution d'un fichier */
205
352
  export interface MergeResult {
@@ -265,6 +412,18 @@ export interface GitWandOptions {
265
412
  * Exemple : `["src/**\/*.generated.ts", "*.pb.go", "api/openapi-client/**"]`.
266
413
  */
267
414
  generatedFiles?: string[];
415
+ /**
416
+ * v2.4 — Niveau de validation post-merge.
417
+ * - `"balanced"` (défaut) : marqueurs résiduels + syntaxe JSON/YAML/TOML + parse-tree tree-sitter (async)
418
+ * - `"strict"` : + tsc --noEmit et/ou eslint (opt-in, Node.js uniquement)
419
+ * - `"off"` : désactive toute validation post-merge
420
+ */
421
+ validationLevel?: import("./config.js").ValidationLevel;
422
+ /**
423
+ * v2.4 — Outils externes utilisés en mode `validationLevel: "strict"`.
424
+ * Défaut : `["tsc"]`. Ignoré si `validationLevel !== "strict"`.
425
+ */
426
+ validationTools?: Array<"tsc" | "eslint">;
268
427
  /**
269
428
  * v2.2 — Désactive globalement les FormatProfile.
270
429
  *
@@ -277,5 +436,25 @@ export interface GitWandOptions {
277
436
  * Défaut: `false` (profils actifs).
278
437
  */
279
438
  disableFormatProfiles?: boolean;
439
+ /**
440
+ * v2.5 — Configuration du fallback LLM pour les hunks `complex` non résolus.
441
+ *
442
+ * Désactivé par défaut (`enabled: false`). Pour activer, fournir également
443
+ * un `endpoint` qui implémente `LlmEndpoint.call(prompt)`.
444
+ *
445
+ * N'a d'effet qu'avec `resolveAsync()` — `resolve()` synchrone ignore cette option
446
+ * (avec un warning si `verbose: true`).
447
+ *
448
+ * ```ts
449
+ * await resolveAsync(content, filePath, {
450
+ * llmFallback: {
451
+ * enabled: true,
452
+ * endpoint: { call: async (p) => myLlmClient.complete(p) },
453
+ * minPostMergeScore: 80,
454
+ * }
455
+ * });
456
+ * ```
457
+ */
458
+ llmFallback?: LlmFallbackConfig;
280
459
  }
281
460
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gitwand/core",
3
- "version": "2.3.0",
3
+ "version": "2.5.0",
4
4
  "description": "GitWand core — automatic Git conflict resolution engine (powers @gitwand/cli, @gitwand/mcp, and the GitWand desktop app)",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",