@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.
- package/dist/__tests__/corpus.d.ts.map +1 -1
- package/dist/__tests__/corpus.js +377 -0
- package/dist/__tests__/corpus.js.map +1 -1
- package/dist/__tests__/patterns/complex.test.d.ts +9 -0
- package/dist/__tests__/patterns/complex.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/complex.test.js +198 -0
- package/dist/__tests__/patterns/complex.test.js.map +1 -0
- package/dist/__tests__/patterns/delete-no-change.test.d.ts +11 -0
- package/dist/__tests__/patterns/delete-no-change.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/delete-no-change.test.js +178 -0
- package/dist/__tests__/patterns/delete-no-change.test.js.map +1 -0
- package/dist/__tests__/patterns/llm-proposed.test.d.ts +10 -0
- package/dist/__tests__/patterns/llm-proposed.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/llm-proposed.test.js +306 -0
- package/dist/__tests__/patterns/llm-proposed.test.js.map +1 -0
- package/dist/__tests__/patterns/non-overlapping.test.d.ts +11 -0
- package/dist/__tests__/patterns/non-overlapping.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/non-overlapping.test.js +240 -0
- package/dist/__tests__/patterns/non-overlapping.test.js.map +1 -0
- package/dist/__tests__/patterns/one-side-change.test.d.ts +10 -0
- package/dist/__tests__/patterns/one-side-change.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/one-side-change.test.js +191 -0
- package/dist/__tests__/patterns/one-side-change.test.js.map +1 -0
- package/dist/__tests__/patterns/same-change.test.d.ts +9 -0
- package/dist/__tests__/patterns/same-change.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/same-change.test.js +173 -0
- package/dist/__tests__/patterns/same-change.test.js.map +1 -0
- package/dist/__tests__/patterns/value-only-change.test.d.ts +11 -0
- package/dist/__tests__/patterns/value-only-change.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/value-only-change.test.js +159 -0
- package/dist/__tests__/patterns/value-only-change.test.js.map +1 -0
- package/dist/__tests__/patterns/whitespace-only.test.d.ts +10 -0
- package/dist/__tests__/patterns/whitespace-only.test.d.ts.map +1 -0
- package/dist/__tests__/patterns/whitespace-only.test.js +177 -0
- package/dist/__tests__/patterns/whitespace-only.test.js.map +1 -0
- package/dist/__tests__/resolvers/css.test.d.ts +12 -0
- package/dist/__tests__/resolvers/css.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/css.test.js +171 -0
- package/dist/__tests__/resolvers/css.test.js.map +1 -0
- package/dist/__tests__/resolvers/imports.test.d.ts +12 -0
- package/dist/__tests__/resolvers/imports.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/imports.test.js +135 -0
- package/dist/__tests__/resolvers/imports.test.js.map +1 -0
- package/dist/__tests__/resolvers/json.test.d.ts +12 -0
- package/dist/__tests__/resolvers/json.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/json.test.js +184 -0
- package/dist/__tests__/resolvers/json.test.js.map +1 -0
- package/dist/__tests__/resolvers/lockfile-npm.test.d.ts +12 -0
- package/dist/__tests__/resolvers/lockfile-npm.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/lockfile-npm.test.js +187 -0
- package/dist/__tests__/resolvers/lockfile-npm.test.js.map +1 -0
- package/dist/__tests__/resolvers/lockfile-pnpm.test.d.ts +12 -0
- package/dist/__tests__/resolvers/lockfile-pnpm.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/lockfile-pnpm.test.js +175 -0
- package/dist/__tests__/resolvers/lockfile-pnpm.test.js.map +1 -0
- package/dist/__tests__/resolvers/lockfile-yarn.test.d.ts +12 -0
- package/dist/__tests__/resolvers/lockfile-yarn.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/lockfile-yarn.test.js +165 -0
- package/dist/__tests__/resolvers/lockfile-yarn.test.js.map +1 -0
- package/dist/__tests__/resolvers/markdown.test.d.ts +12 -0
- package/dist/__tests__/resolvers/markdown.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/markdown.test.js +188 -0
- package/dist/__tests__/resolvers/markdown.test.js.map +1 -0
- package/dist/__tests__/resolvers/vue.test.d.ts +12 -0
- package/dist/__tests__/resolvers/vue.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/vue.test.js +225 -0
- package/dist/__tests__/resolvers/vue.test.js.map +1 -0
- package/dist/__tests__/resolvers/yaml.test.d.ts +12 -0
- package/dist/__tests__/resolvers/yaml.test.d.ts.map +1 -0
- package/dist/__tests__/resolvers/yaml.test.js +203 -0
- package/dist/__tests__/resolvers/yaml.test.js.map +1 -0
- package/dist/__tests__/v2-core-scenarios.test.d.ts +35 -0
- package/dist/__tests__/v2-core-scenarios.test.d.ts.map +1 -0
- package/dist/__tests__/v2-core-scenarios.test.js +692 -0
- package/dist/__tests__/v2-core-scenarios.test.js.map +1 -0
- package/dist/__tests__/validation-parse-tree.test.d.ts +15 -0
- package/dist/__tests__/validation-parse-tree.test.d.ts.map +1 -0
- package/dist/__tests__/validation-parse-tree.test.js +243 -0
- package/dist/__tests__/validation-parse-tree.test.js.map +1 -0
- package/dist/classifier.d.ts.map +1 -1
- package/dist/classifier.js +3 -0
- package/dist/classifier.js.map +1 -1
- package/dist/config.d.ts +54 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -1
- package/dist/diff/index.d.ts.map +1 -1
- package/dist/diff/index.js +1 -3
- package/dist/diff/index.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/patterns/llm-proposed.d.ts +8 -0
- package/dist/patterns/llm-proposed.d.ts.map +1 -0
- package/dist/patterns/llm-proposed.js +66 -0
- package/dist/patterns/llm-proposed.js.map +1 -0
- package/dist/patterns/utils.d.ts +8 -7
- package/dist/patterns/utils.d.ts.map +1 -1
- package/dist/patterns/utils.js +13 -12
- package/dist/patterns/utils.js.map +1 -1
- package/dist/resolver/adapters/strict-node.d.ts +32 -0
- package/dist/resolver/adapters/strict-node.d.ts.map +1 -0
- package/dist/resolver/adapters/strict-node.js +117 -0
- package/dist/resolver/adapters/strict-node.js.map +1 -0
- package/dist/resolver/index.d.ts +20 -1
- package/dist/resolver/index.d.ts.map +1 -1
- package/dist/resolver/index.js +106 -5
- package/dist/resolver/index.js.map +1 -1
- package/dist/resolver/llm-pipeline.d.ts +33 -0
- package/dist/resolver/llm-pipeline.d.ts.map +1 -0
- package/dist/resolver/llm-pipeline.js +218 -0
- package/dist/resolver/llm-pipeline.js.map +1 -0
- package/dist/resolver/policy.d.ts.map +1 -1
- package/dist/resolver/policy.js +5 -0
- package/dist/resolver/policy.js.map +1 -1
- package/dist/resolver/validate-parse-tree.d.ts +52 -0
- package/dist/resolver/validate-parse-tree.d.ts.map +1 -0
- package/dist/resolver/validate-parse-tree.js +87 -0
- package/dist/resolver/validate-parse-tree.js.map +1 -0
- package/dist/resolver/validate-strict.d.ts +27 -0
- package/dist/resolver/validate-strict.d.ts.map +1 -0
- package/dist/resolver/validate-strict.js +41 -0
- package/dist/resolver/validate-strict.js.map +1 -0
- package/dist/resolver/validation.d.ts.map +1 -1
- package/dist/resolver/validation.js +15 -1
- package/dist/resolver/validation.js.map +1 -1
- package/dist/resolvers/dispatcher.d.ts.map +1 -1
- package/dist/resolvers/dispatcher.js.map +1 -1
- package/dist/resolvers/llm-fallback.d.ts +41 -0
- package/dist/resolvers/llm-fallback.d.ts.map +1 -0
- package/dist/resolvers/llm-fallback.js +231 -0
- package/dist/resolvers/llm-fallback.js.map +1 -0
- package/dist/types.d.ts +183 -4
- package/dist/types.d.ts.map +1 -1
- 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
|
|
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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iDAAiD;AACjD,MAAM,WAAW,UAAU;IACzB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wCAAwC;AACxC,MAAM,MAAM,YAAY,GACpB,iBAAiB,GACjB,aAAa,GACb,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,mBAAmB,GACnB,cAAc,GACd,uBAAuB,GACvB,SAAS,CAAC;AAEd,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAQ/D
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED