@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,66 @@
|
|
|
1
|
+
import { makeScore } from "./utils.js";
|
|
2
|
+
/**
|
|
3
|
+
* v2.5 — Pattern de fallback LLM (priority 998, juste avant `complex` à 999).
|
|
4
|
+
*
|
|
5
|
+
* Ce plugin est désactivé par défaut : `detect()` retourne toujours `false`
|
|
6
|
+
* sauf quand le flag interne `_llmFallbackEnabled` est activé par `resolveAsync()`
|
|
7
|
+
* avant de lancer la classification.
|
|
8
|
+
*
|
|
9
|
+
* ## Design
|
|
10
|
+
*
|
|
11
|
+
* Le `PatternPlugin.detect()` ne reçoit pas les options (contrainte du registre).
|
|
12
|
+
* L'activation se fait via un flag module-level positionné par `resolveAsync()` :
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Dans resolveAsync() :
|
|
16
|
+
* setLlmFallbackEnabled(true);
|
|
17
|
+
* const result = classifyConflict(hunk);
|
|
18
|
+
* setLlmFallbackEnabled(false);
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* La résolution effective (appel LLM) a lieu en phase 5 de `resolveAsync()`,
|
|
22
|
+
* après la classification. Le score initial (`dataRisk: 60, typeClassification: 50`)
|
|
23
|
+
* est volontairement médiocre — la décision finale dépend de la validation post-merge.
|
|
24
|
+
*/
|
|
25
|
+
/** Flag interne — positionné par `resolveAsync()` avant classification */
|
|
26
|
+
let _llmFallbackEnabled = false;
|
|
27
|
+
/** Active ou désactive le pattern llm_proposed pour la prochaine classification. */
|
|
28
|
+
export function setLlmFallbackEnabled(enabled) {
|
|
29
|
+
_llmFallbackEnabled = enabled;
|
|
30
|
+
}
|
|
31
|
+
/** Retourne l'état actuel du flag (utile pour les tests). */
|
|
32
|
+
export function isLlmFallbackEnabled() {
|
|
33
|
+
return _llmFallbackEnabled;
|
|
34
|
+
}
|
|
35
|
+
const llmProposed = {
|
|
36
|
+
type: "llm_proposed",
|
|
37
|
+
priority: 998,
|
|
38
|
+
requires: "both",
|
|
39
|
+
detect(_h) {
|
|
40
|
+
// OFF par défaut. Activé uniquement par resolveAsync() via setLlmFallbackEnabled(true).
|
|
41
|
+
return _llmFallbackEnabled;
|
|
42
|
+
},
|
|
43
|
+
confidence(_h) {
|
|
44
|
+
// Score initial volontairement médiocre (dataRisk élevé, typeClassification moyen).
|
|
45
|
+
// La résolution sera acceptée ou rejetée selon la validation post-merge stricte.
|
|
46
|
+
return makeScore(50, // typeClassification : incertitude sur la qualité de la résolution LLM
|
|
47
|
+
60, // dataRisk : risque non nul d'hallucination
|
|
48
|
+
0, // scopeImpact : inconnu à ce stade
|
|
49
|
+
[], // boosters
|
|
50
|
+
[
|
|
51
|
+
"Résolution non déterministe (LLM)",
|
|
52
|
+
"Validation post-merge stricte requise avant acceptation",
|
|
53
|
+
]);
|
|
54
|
+
},
|
|
55
|
+
explanation(_h) {
|
|
56
|
+
return "Résolution proposée par LLM fallback. Le hunk sera envoyé à l'endpoint LLM configuré pour une résolution assistée. La résolution sera validée (parse-tree + tsc/eslint) avant acceptation.";
|
|
57
|
+
},
|
|
58
|
+
passReason(_h) {
|
|
59
|
+
return "Aucun pattern déterministe applicable — délégation au LLM fallback (opt-in).";
|
|
60
|
+
},
|
|
61
|
+
failReason(_h) {
|
|
62
|
+
return "LLM fallback désactivé (options.llmFallback.enabled !== true).";
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
export default llmProposed;
|
|
66
|
+
//# sourceMappingURL=llm-proposed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-proposed.js","sourceRoot":"","sources":["../../src/patterns/llm-proposed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,0EAA0E;AAC1E,IAAI,mBAAmB,GAAG,KAAK,CAAC;AAEhC,oFAAoF;AACpF,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,mBAAmB,GAAG,OAAO,CAAC;AAChC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,oBAAoB;IAClC,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,MAAM,WAAW,GAAkB;IACjC,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,MAAM;IAEhB,MAAM,CAAC,EAAiB;QACtB,wFAAwF;QACxF,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,UAAU,CAAC,EAAiB;QAC1B,oFAAoF;QACpF,iFAAiF;QACjF,OAAO,SAAS,CACd,EAAE,EAAI,uEAAuE;QAC7E,EAAE,EAAI,4CAA4C;QAClD,CAAC,EAAK,mCAAmC;QACzC,EAAE,EAAI,WAAW;QACjB;YACE,mCAAmC;YACnC,yDAAyD;SAC1D,CACF,CAAC;IACJ,CAAC;IAED,WAAW,CAAC,EAAiB;QAC3B,OAAO,4LAA4L,CAAC;IACtM,CAAC;IAED,UAAU,CAAC,EAAiB;QAC1B,OAAO,8EAA8E,CAAC;IACxF,CAAC;IAED,UAAU,CAAC,EAAiB;QAC1B,OAAO,gEAAgE,CAAC;IAC1E,CAAC;CACF,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
package/dist/patterns/utils.d.ts
CHANGED
|
@@ -21,20 +21,21 @@ export declare function labelFromScore(score: number): Confidence;
|
|
|
21
21
|
/**
|
|
22
22
|
* Construit un ConfidenceScore à partir des dimensions et des justifications.
|
|
23
23
|
*
|
|
24
|
-
* Formule v2.
|
|
24
|
+
* Formule v2.4 :
|
|
25
25
|
* `score = typeClassification
|
|
26
26
|
* − dataRisk × 0.40
|
|
27
27
|
* − scopeImpact × 0.15
|
|
28
28
|
* − fileFrequency × 0.10
|
|
29
29
|
* + baseAvailability × 0.05
|
|
30
|
-
* − algorithmStability × 0.10
|
|
30
|
+
* − algorithmStability × 0.10
|
|
31
|
+
* − postMergeRisk × 0.20`
|
|
31
32
|
*
|
|
32
|
-
* Tous les paramètres après `penalties` sont optionnels (défaut 0).
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
33
|
+
* Tous les paramètres après `penalties` sont optionnels (défaut 0). Les
|
|
34
|
+
* dimensions optionnelles (`algorithmStability`, `postMergeRisk`) ne sont
|
|
35
|
+
* poussées dans l'objet `dimensions` que lorsqu'elles sont non-nulles, pour
|
|
36
|
+
* que les snapshots de tests existants restent verts.
|
|
36
37
|
*/
|
|
37
|
-
export declare function makeScore(typeClassification: number, dataRisk: number, si: number, boosters: string[], penalties: string[], fileFrequency?: number, baseAvailability?: number, algorithmStability?: number): ConfidenceScore;
|
|
38
|
+
export declare function makeScore(typeClassification: number, dataRisk: number, si: number, boosters: string[], penalties: string[], fileFrequency?: number, baseAvailability?: number, algorithmStability?: number, postMergeRisk?: number): ConfidenceScore;
|
|
38
39
|
/**
|
|
39
40
|
* Normalise les lignes d'un bloc pour la comparaison whitespace-only.
|
|
40
41
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI/D;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAKxD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CACvB,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,aAAa,SAAI,EACjB,gBAAgB,SAAI,EACpB,kBAAkB,SAAI,EACtB,aAAa,SAAI,GAChB,eAAe,CA8BjB;AAID;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAOnE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAID,wFAAwF;AACxF,eAAO,MAAM,iBAAiB,UAQ7B,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAqChE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEnD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB;IAAE,eAAe,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAiEvF"}
|
package/dist/patterns/utils.js
CHANGED
|
@@ -37,31 +37,29 @@ export function labelFromScore(score) {
|
|
|
37
37
|
/**
|
|
38
38
|
* Construit un ConfidenceScore à partir des dimensions et des justifications.
|
|
39
39
|
*
|
|
40
|
-
* Formule v2.
|
|
40
|
+
* Formule v2.4 :
|
|
41
41
|
* `score = typeClassification
|
|
42
42
|
* − dataRisk × 0.40
|
|
43
43
|
* − scopeImpact × 0.15
|
|
44
44
|
* − fileFrequency × 0.10
|
|
45
45
|
* + baseAvailability × 0.05
|
|
46
|
-
* − algorithmStability × 0.10
|
|
46
|
+
* − algorithmStability × 0.10
|
|
47
|
+
* − postMergeRisk × 0.20`
|
|
47
48
|
*
|
|
48
|
-
* Tous les paramètres après `penalties` sont optionnels (défaut 0).
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
49
|
+
* Tous les paramètres après `penalties` sont optionnels (défaut 0). Les
|
|
50
|
+
* dimensions optionnelles (`algorithmStability`, `postMergeRisk`) ne sont
|
|
51
|
+
* poussées dans l'objet `dimensions` que lorsqu'elles sont non-nulles, pour
|
|
52
|
+
* que les snapshots de tests existants restent verts.
|
|
52
53
|
*/
|
|
53
|
-
export function makeScore(typeClassification, dataRisk, si, boosters, penalties, fileFrequency = 0, baseAvailability = 0, algorithmStability = 0) {
|
|
54
|
+
export function makeScore(typeClassification, dataRisk, si, boosters, penalties, fileFrequency = 0, baseAvailability = 0, algorithmStability = 0, postMergeRisk = 0) {
|
|
54
55
|
const raw = typeClassification
|
|
55
56
|
- dataRisk * 0.40
|
|
56
57
|
- si * 0.15
|
|
57
58
|
- fileFrequency * 0.10
|
|
58
59
|
+ baseAvailability * 0.05
|
|
59
|
-
- algorithmStability * 0.10
|
|
60
|
+
- algorithmStability * 0.10
|
|
61
|
+
- postMergeRisk * 0.20;
|
|
60
62
|
const score = Math.round(Math.max(0, Math.min(100, raw)));
|
|
61
|
-
// On ne pousse `algorithmStability` dans `dimensions` que s'il est non-zéro,
|
|
62
|
-
// pour que les snapshots de tests existants (qui asserent l'objet exact)
|
|
63
|
-
// restent verts. Les nouveaux consommateurs peuvent toujours le lire (le
|
|
64
|
-
// type le marque optionnel).
|
|
65
63
|
const dimensions = {
|
|
66
64
|
typeClassification,
|
|
67
65
|
dataRisk,
|
|
@@ -72,6 +70,9 @@ export function makeScore(typeClassification, dataRisk, si, boosters, penalties,
|
|
|
72
70
|
if (algorithmStability !== 0) {
|
|
73
71
|
dimensions.algorithmStability = algorithmStability;
|
|
74
72
|
}
|
|
73
|
+
if (postMergeRisk !== 0) {
|
|
74
|
+
dimensions.postMergeRisk = postMergeRisk;
|
|
75
|
+
}
|
|
75
76
|
return {
|
|
76
77
|
score,
|
|
77
78
|
label: labelFromScore(score),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,gEAAgE;AAEhE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/patterns/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,gEAAgE;AAEhE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAC3B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,SAAS,CACvB,kBAA0B,EAC1B,QAAgB,EAChB,EAAU,EACV,QAAkB,EAClB,SAAmB,EACnB,aAAa,GAAG,CAAC,EACjB,gBAAgB,GAAG,CAAC,EACpB,kBAAkB,GAAG,CAAC,EACtB,aAAa,GAAG,CAAC;IAEjB,MAAM,GAAG,GACP,kBAAkB;UAChB,QAAQ,GAAc,IAAI;UAC1B,EAAE,GAAoB,IAAI;UAC1B,aAAa,GAAS,IAAI;UAC1B,gBAAgB,GAAM,IAAI;UAC1B,kBAAkB,GAAI,IAAI;UAC1B,aAAa,GAAS,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAkC;QAChD,kBAAkB;QAClB,QAAQ;QACR,WAAW,EAAE,EAAE;QACf,aAAa;QACb,gBAAgB;KACjB,CAAC;IACF,IAAI,kBAAkB,KAAK,CAAC,EAAE,CAAC;QAC7B,UAAU,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IACrD,CAAC;IACD,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,UAAU,CAAC,aAAa,GAAG,aAAa,CAAC;IAC3C,CAAC;IACD,OAAO;QACL,KAAK;QACL,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC;QAC5B,UAAU;QACV,QAAQ;QACR,SAAS;KACV,CAAC;AACJ,CAAC;AAED,iEAAiE;AAEjE;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CAAC,KAAe;IACzD,IAAI,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC1D,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IACzE,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE;QAAE,UAAU,CAAC,GAAG,EAAE,CAAC;IAC3F,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,gEAAgE;AAEhE,wFAAwF;AACxF,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,kBAAkB;IAClB,+EAA+E;IAC/E,kDAAkD;IAClD,8CAA8C;IAC9C,0DAA0D;IAC1D,qBAAqB;IACrB,yCAAyC;CAC1C,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,CAAS,EAAE,CAAS;IACrD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE1B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,OAAO,SAAS,GAAG,CAAC,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;QACrF,SAAS,EAAE,CAAC;IACd,CAAC;IAED,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC;IAClC,OACE,SAAS,GAAG,IAAI;QAChB,SAAS,GAAG,IAAI;QAChB,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,EAC3D,CAAC;QACD,SAAS,EAAE,CAAC;IACd,CAAC;IAED,IAAI,SAAS,GAAG,SAAS,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE9C,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAElF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEzD,MAAM,aAAa,GAAG,CAAC,CAAS,EAAW,EAAE;QAC3C,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1D,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;YAC/C,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC5C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAmB,EACnB,WAAqB;IAErB,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,mBAAmB,GAAG,IAAI,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAElD,IAAI,UAAU,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;YAC9C,mBAAmB,GAAG,KAAK,CAAC;YAC5B,MAAM;QACR,CAAC;QAED,WAAW,IAAI,UAAU,CAAC,MAAM,CAAC;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,SAAS,EAAE,CAAC;gBACZ,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChF,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACzC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACxD,mBAAmB,GAAG,KAAK,CAAC;wBAC5B,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,mBAAmB;YAAE,MAAM;IAClC,CAAC;IAED,IAAI,CAAC,mBAAmB,IAAI,SAAS,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzD,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACvD,MAAM,kBAAkB,GACtB,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;QACtB,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;YACxB,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE;gBACxB,CAAC,CAAC,CAAC,CAAC;IAEN,IAAI,kBAAkB,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAEzC,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,eAAe,GAAG,SAAS,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE;QAC5D,GAAG,SAAS,SAAS,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,kBAAkB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,8BAA8B;QAC1J,0BAA0B;KAC3B,EAAE;QACD,0BAA0B,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QACzD,iEAAiE;KAClE,CAAC,CAAC;IAEH,IAAI,eAAe,CAAC,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,WAAW,GACf,uBAAuB,SAAS,UAAU,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,YAAY,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,cAAc,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,mGAAmG,CAAC;IAElP,MAAM,WAAW,GACf,GAAG,SAAS,SAAS,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,aAAa,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,WAAW,2EAA2E,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,eAAe,CAAC,KAAK,KAAK,eAAe,CAAC,KAAK,IAAI,CAAC;IAE/Q,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @gitwand/core v2.4 — Strict validation adapter (Node.js only)
|
|
3
|
+
*
|
|
4
|
+
* Exécute les outils de validation externes (tsc, eslint) sur le contenu
|
|
5
|
+
* fusionné en écrivant un fichier temporaire. Ce module utilise des APIs
|
|
6
|
+
* Node.js natives (node:fs/promises, node:os, node:child_process) et ne
|
|
7
|
+
* doit JAMAIS être importé statiquement depuis du code partagé browser/Tauri.
|
|
8
|
+
*
|
|
9
|
+
* Pattern d'utilisation (depuis validate-strict.ts) :
|
|
10
|
+
* const { runStrictValidationNode } = await import(
|
|
11
|
+
* /* @vite-ignore *\/ "./adapters/strict-node.js"
|
|
12
|
+
* );
|
|
13
|
+
*/
|
|
14
|
+
export interface StrictValidationResult {
|
|
15
|
+
/** Erreurs détectées (vide = tout est OK) */
|
|
16
|
+
errors: string[];
|
|
17
|
+
/** Outils qui ont pu être exécutés */
|
|
18
|
+
toolsRun: string[];
|
|
19
|
+
/** Outils qui ont échoué à s'exécuter (non installés, timeout…) */
|
|
20
|
+
toolsFailed: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Valide le contenu avec tsc et/ou eslint.
|
|
24
|
+
* Écrit le contenu dans un fichier temporaire, exécute les outils, puis supprime le fichier.
|
|
25
|
+
*
|
|
26
|
+
* @param content - Contenu fusionné à valider
|
|
27
|
+
* @param filePath - Chemin original (pour l'extension et l'identification)
|
|
28
|
+
* @param tools - Outils à exécuter
|
|
29
|
+
* @returns Résultat de validation strict
|
|
30
|
+
*/
|
|
31
|
+
export declare function runStrictValidationNode(content: string, filePath: string, tools: Array<"tsc" | "eslint">): Promise<StrictValidationResult>;
|
|
32
|
+
//# sourceMappingURL=strict-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-node.d.ts","sourceRoot":"","sources":["../../../src/resolver/adapters/strict-node.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAUH,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,mEAAmE;IACnE,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,GAC7B,OAAO,CAAC,sBAAsB,CAAC,CAoFjC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @gitwand/core v2.4 — Strict validation adapter (Node.js only)
|
|
3
|
+
*
|
|
4
|
+
* Exécute les outils de validation externes (tsc, eslint) sur le contenu
|
|
5
|
+
* fusionné en écrivant un fichier temporaire. Ce module utilise des APIs
|
|
6
|
+
* Node.js natives (node:fs/promises, node:os, node:child_process) et ne
|
|
7
|
+
* doit JAMAIS être importé statiquement depuis du code partagé browser/Tauri.
|
|
8
|
+
*
|
|
9
|
+
* Pattern d'utilisation (depuis validate-strict.ts) :
|
|
10
|
+
* const { runStrictValidationNode } = await import(
|
|
11
|
+
* /* @vite-ignore *\/ "./adapters/strict-node.js"
|
|
12
|
+
* );
|
|
13
|
+
*/
|
|
14
|
+
import { writeFile, unlink, mkdtemp } from "node:fs/promises";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { tmpdir } from "node:os";
|
|
17
|
+
import { execFile } from "node:child_process";
|
|
18
|
+
import { promisify } from "node:util";
|
|
19
|
+
const execFileAsync = promisify(execFile);
|
|
20
|
+
/**
|
|
21
|
+
* Valide le contenu avec tsc et/ou eslint.
|
|
22
|
+
* Écrit le contenu dans un fichier temporaire, exécute les outils, puis supprime le fichier.
|
|
23
|
+
*
|
|
24
|
+
* @param content - Contenu fusionné à valider
|
|
25
|
+
* @param filePath - Chemin original (pour l'extension et l'identification)
|
|
26
|
+
* @param tools - Outils à exécuter
|
|
27
|
+
* @returns Résultat de validation strict
|
|
28
|
+
*/
|
|
29
|
+
export async function runStrictValidationNode(content, filePath, tools) {
|
|
30
|
+
const errors = [];
|
|
31
|
+
const toolsRun = [];
|
|
32
|
+
const toolsFailed = [];
|
|
33
|
+
// Extraire l'extension pour le fichier temporaire
|
|
34
|
+
const ext = filePath.includes(".") ? filePath.slice(filePath.lastIndexOf(".")) : ".ts";
|
|
35
|
+
// Créer un répertoire temporaire et y écrire le contenu
|
|
36
|
+
let tmpDir = null;
|
|
37
|
+
let tmpFile = null;
|
|
38
|
+
try {
|
|
39
|
+
tmpDir = await mkdtemp(join(tmpdir(), "gitwand-validate-"));
|
|
40
|
+
tmpFile = join(tmpDir, `merged${ext}`);
|
|
41
|
+
await writeFile(tmpFile, content, "utf8");
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return { errors: [], toolsRun: [], toolsFailed: ["setup"] };
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
// ─── tsc ──────────────────────────────────────────────────────
|
|
48
|
+
if (tools.includes("tsc")) {
|
|
49
|
+
try {
|
|
50
|
+
await execFileAsync("tsc", [
|
|
51
|
+
"--noEmit",
|
|
52
|
+
"--noResolve", // pas besoin de résoudre les imports pour la syntaxe
|
|
53
|
+
"--noLib", // pas de lib.d.ts requis pour un check syntaxique rapide
|
|
54
|
+
"--allowJs", // traiter aussi les .js/.jsx
|
|
55
|
+
"--checkJs",
|
|
56
|
+
"--strict", "false", // on ne vérifie que la syntaxe, pas les types stricts
|
|
57
|
+
"--target", "esnext",
|
|
58
|
+
"--moduleResolution", "bundler",
|
|
59
|
+
tmpFile,
|
|
60
|
+
], { timeout: 10_000 });
|
|
61
|
+
toolsRun.push("tsc");
|
|
62
|
+
// Si tsc sort sans erreur, aucune erreur syntaxique
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
// tsc exit code != 0 → des erreurs
|
|
66
|
+
toolsRun.push("tsc");
|
|
67
|
+
const output = err.stdout ?? "";
|
|
68
|
+
const stderr = err.stderr ?? "";
|
|
69
|
+
const combined = [output, stderr].filter(Boolean).join("\n");
|
|
70
|
+
// Nettoyer le chemin temporaire pour ne pas exposer les internals
|
|
71
|
+
const cleaned = combined.replace(new RegExp(tmpFile.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), filePath);
|
|
72
|
+
if (cleaned.trim()) {
|
|
73
|
+
errors.push(...cleaned.split("\n").filter((l) => l.trim()));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// ─── eslint ───────────────────────────────────────────────────
|
|
78
|
+
if (tools.includes("eslint")) {
|
|
79
|
+
try {
|
|
80
|
+
await execFileAsync("eslint", [
|
|
81
|
+
"--no-eslintrc", // ignorer la config du projet
|
|
82
|
+
"--rule", '{"no-undef": 0}', // désactiver les règles de type (syntaxe only)
|
|
83
|
+
"--parser-options", "ecmaVersion:latest",
|
|
84
|
+
"--format", "compact",
|
|
85
|
+
tmpFile,
|
|
86
|
+
], { timeout: 10_000 });
|
|
87
|
+
toolsRun.push("eslint");
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
toolsRun.push("eslint");
|
|
91
|
+
const output = err.stdout ?? "";
|
|
92
|
+
const cleaned = output.replace(new RegExp(tmpFile.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "g"), filePath);
|
|
93
|
+
if (cleaned.trim()) {
|
|
94
|
+
errors.push(...cleaned.split("\n").filter((l) => l.trim()));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
// Nettoyage du fichier temporaire
|
|
101
|
+
if (tmpFile) {
|
|
102
|
+
try {
|
|
103
|
+
await unlink(tmpFile);
|
|
104
|
+
}
|
|
105
|
+
catch { /* ignore */ }
|
|
106
|
+
}
|
|
107
|
+
if (tmpDir) {
|
|
108
|
+
try {
|
|
109
|
+
const { rmdir } = await import("node:fs/promises");
|
|
110
|
+
await rmdir(tmpDir);
|
|
111
|
+
}
|
|
112
|
+
catch { /* ignore */ }
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return { errors, toolsRun, toolsFailed };
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=strict-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strict-node.js","sourceRoot":"","sources":["../../../src/resolver/adapters/strict-node.ts"],"names":[],"mappings":"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"}
|
package/dist/resolver/index.d.ts
CHANGED
|
@@ -27,9 +27,28 @@ export declare function resolve(conflictedContent: string, filePath: string, use
|
|
|
27
27
|
/**
|
|
28
28
|
* Async variant of `resolve()` — attempts structural (AST-based) merge for
|
|
29
29
|
* TypeScript/TSX files before falling back to the standard hunk-by-hunk engine.
|
|
30
|
+
* Additionally runs parse-tree validation (v2.4) and optionally strict validation
|
|
31
|
+
* (tsc/eslint) when `validationLevel: "strict"` is configured.
|
|
30
32
|
*
|
|
31
33
|
* Structural merge requires `web-tree-sitter` as an **optional** peer dependency.
|
|
32
|
-
* If it is not installed, `resolveAsync()` behaves identically to `resolve()
|
|
34
|
+
* If it is not installed, `resolveAsync()` behaves identically to `resolve()` with
|
|
35
|
+
* the addition of the parse-tree validation pass.
|
|
36
|
+
*
|
|
37
|
+
* ### v2.4 — Parse-tree validation & retraction
|
|
38
|
+
*
|
|
39
|
+
* After hunk-based resolution produces a `mergedContent`, `resolveAsync()` re-parses
|
|
40
|
+
* it with tree-sitter. If the tree contains ERROR nodes (indicating the merged code is
|
|
41
|
+
* syntactically broken), every auto-resolved hunk is **retracted**:
|
|
42
|
+
*
|
|
43
|
+
* - `resolution.autoResolved` → `false`
|
|
44
|
+
* - `resolution.resolvedLines` → `null`
|
|
45
|
+
* - `hunk.confidence.dimensions.postMergeRisk` → `100`
|
|
46
|
+
* - `validation.parseTreeValid` → `false`
|
|
47
|
+
* - `mergedContent` → `null` (conflicts restored as markers)
|
|
48
|
+
*
|
|
49
|
+
* This eliminates the class of false-positives where the resolver auto-merged code
|
|
50
|
+
* that compiles/runs fine locally but is syntactically invalid (e.g. from two hunks
|
|
51
|
+
* interacting unexpectedly).
|
|
33
52
|
*
|
|
34
53
|
* @param conflictedContent - File content with Git conflict markers
|
|
35
54
|
* @param filePath - File path (format detection + grammar selection)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAIV,cAAc,EAEd,WAAW,EAGZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAoEhC;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,cAAmB,GAC/B,WAAW,CAgGb;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,YAAY,CAChC,iBAAiB,EAAE,MAAM,EACzB,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,cAAmB,EAChC,cAAc,GAAE,uBAA4B,GAC3C,OAAO,CAAC,WAAW,CAAC,CAyGtB"}
|
package/dist/resolver/index.js
CHANGED
|
@@ -16,10 +16,14 @@
|
|
|
16
16
|
import { tryStructuralMergeResolve, wrapStructuralResult, isStructuralLanguage, } from "../structural/index.js";
|
|
17
17
|
import { parseConflictMarkers, toConflictHunk } from "../parser.js";
|
|
18
18
|
import { EMPTY_VALIDATION, validateMergedContent } from "./validation.js";
|
|
19
|
+
import { checkParseTreeValid, applyPostMergeRiskPenalty } from "./validate-parse-tree.js";
|
|
20
|
+
import { runStrictValidation } from "./validate-strict.js";
|
|
19
21
|
import { isGeneratedFile, reclassifyIfGenerated } from "./generated-detection.js";
|
|
20
22
|
import { CONFIDENCE_ORDER, DEFAULT_OPTIONS, applyFileFrequencyPenalty, computeEffectiveMinConfidence, computeEffectivePolicy, } from "./policy.js";
|
|
21
23
|
import { dispatchFormatAware } from "./format-dispatch.js";
|
|
22
24
|
import { assembleResolution } from "./assemble.js";
|
|
25
|
+
import { setLlmFallbackEnabled } from "../patterns/llm-proposed.js";
|
|
26
|
+
import { runLlmFallbackPhase } from "./llm-pipeline.js";
|
|
23
27
|
/**
|
|
24
28
|
* Résout automatiquement un hunk de conflit.
|
|
25
29
|
*
|
|
@@ -148,9 +152,28 @@ export function resolve(conflictedContent, filePath, userOptions = {}) {
|
|
|
148
152
|
/**
|
|
149
153
|
* Async variant of `resolve()` — attempts structural (AST-based) merge for
|
|
150
154
|
* TypeScript/TSX files before falling back to the standard hunk-by-hunk engine.
|
|
155
|
+
* Additionally runs parse-tree validation (v2.4) and optionally strict validation
|
|
156
|
+
* (tsc/eslint) when `validationLevel: "strict"` is configured.
|
|
151
157
|
*
|
|
152
158
|
* Structural merge requires `web-tree-sitter` as an **optional** peer dependency.
|
|
153
|
-
* If it is not installed, `resolveAsync()` behaves identically to `resolve()
|
|
159
|
+
* If it is not installed, `resolveAsync()` behaves identically to `resolve()` with
|
|
160
|
+
* the addition of the parse-tree validation pass.
|
|
161
|
+
*
|
|
162
|
+
* ### v2.4 — Parse-tree validation & retraction
|
|
163
|
+
*
|
|
164
|
+
* After hunk-based resolution produces a `mergedContent`, `resolveAsync()` re-parses
|
|
165
|
+
* it with tree-sitter. If the tree contains ERROR nodes (indicating the merged code is
|
|
166
|
+
* syntactically broken), every auto-resolved hunk is **retracted**:
|
|
167
|
+
*
|
|
168
|
+
* - `resolution.autoResolved` → `false`
|
|
169
|
+
* - `resolution.resolvedLines` → `null`
|
|
170
|
+
* - `hunk.confidence.dimensions.postMergeRisk` → `100`
|
|
171
|
+
* - `validation.parseTreeValid` → `false`
|
|
172
|
+
* - `mergedContent` → `null` (conflicts restored as markers)
|
|
173
|
+
*
|
|
174
|
+
* This eliminates the class of false-positives where the resolver auto-merged code
|
|
175
|
+
* that compiles/runs fine locally but is syntactically invalid (e.g. from two hunks
|
|
176
|
+
* interacting unexpectedly).
|
|
154
177
|
*
|
|
155
178
|
* @param conflictedContent - File content with Git conflict markers
|
|
156
179
|
* @param filePath - File path (format detection + grammar selection)
|
|
@@ -158,19 +181,97 @@ export function resolve(conflictedContent, filePath, userOptions = {}) {
|
|
|
158
181
|
* @param structuralOpts - Optional tree-sitter loader overrides
|
|
159
182
|
*/
|
|
160
183
|
export async function resolveAsync(conflictedContent, filePath, userOptions = {}, structuralOpts = {}) {
|
|
161
|
-
|
|
184
|
+
const options = { ...DEFAULT_OPTIONS, ...userOptions };
|
|
185
|
+
// ─── 1. Tentative de merge structurel (v2.3) ──────────────────────────────
|
|
162
186
|
if (isStructuralLanguage(filePath)) {
|
|
163
187
|
try {
|
|
164
188
|
const merged = await tryStructuralMergeResolve(conflictedContent, filePath, structuralOpts);
|
|
165
189
|
if (merged !== null) {
|
|
166
|
-
|
|
190
|
+
const result = wrapStructuralResult(conflictedContent, merged, filePath);
|
|
191
|
+
// Validation parse-tree sur le résultat structurel (devrait toujours passer,
|
|
192
|
+
// mais on vérifie quand même par cohérence).
|
|
193
|
+
const parseTreeValid = await checkParseTreeValid(result.mergedContent ?? "", filePath, structuralOpts);
|
|
194
|
+
return {
|
|
195
|
+
...result,
|
|
196
|
+
validation: { ...result.validation, parseTreeValid, externalValidation: null },
|
|
197
|
+
};
|
|
167
198
|
}
|
|
168
199
|
}
|
|
169
200
|
catch {
|
|
170
201
|
// Structural merge failed unexpectedly — fall through to hunk-based resolver
|
|
171
202
|
}
|
|
172
203
|
}
|
|
173
|
-
//
|
|
174
|
-
|
|
204
|
+
// ─── 2. Résolution hunk-par-hunk (synchrone) ─────────────────────────────
|
|
205
|
+
// Si le LLM fallback est activé, on positionne le flag avant la classification
|
|
206
|
+
// pour que `llmProposed.detect()` retourne true sur les hunks complex.
|
|
207
|
+
// Le flag est réinitialisé immédiatement après `resolve()` — il ne doit pas
|
|
208
|
+
// persister entre appels (module-level state, potentiellement partagé).
|
|
209
|
+
const llmEnabled = !!(options.llmFallback?.enabled && options.llmFallback?.endpoint);
|
|
210
|
+
if (llmEnabled)
|
|
211
|
+
setLlmFallbackEnabled(true);
|
|
212
|
+
const result = resolve(conflictedContent, filePath, userOptions);
|
|
213
|
+
if (llmEnabled)
|
|
214
|
+
setLlmFallbackEnabled(false);
|
|
215
|
+
if (options.verbose && llmEnabled && result.resolutions.some((r) => !r.autoResolved && r.hunk.type === "llm_proposed")) {
|
|
216
|
+
console.error("[GitWand] LLM fallback activé — phase 5 en attente des hunks llm_proposed non résolus.");
|
|
217
|
+
}
|
|
218
|
+
// Rien à valider si la résolution n'est pas complète et pas de LLM fallback
|
|
219
|
+
if (result.mergedContent === null) {
|
|
220
|
+
if (!llmEnabled)
|
|
221
|
+
return result;
|
|
222
|
+
// Phase 5 — LLM fallback pour les hunks llm_proposed non résolus
|
|
223
|
+
return runLlmFallbackPhase(conflictedContent, result, filePath, options, structuralOpts);
|
|
224
|
+
}
|
|
225
|
+
// ─── 3. v2.4 — Validation parse-tree ─────────────────────────────────────
|
|
226
|
+
// Skipped when validationLevel === "off" (performance mode).
|
|
227
|
+
if (options.validationLevel === "off") {
|
|
228
|
+
return { ...result, validation: { ...result.validation, parseTreeValid: null, externalValidation: null } };
|
|
229
|
+
}
|
|
230
|
+
const parseTreeValid = await checkParseTreeValid(result.mergedContent, filePath, structuralOpts);
|
|
231
|
+
if (parseTreeValid === false) {
|
|
232
|
+
// Parse-tree invalide → rétraction de toutes les résolutions automatiques.
|
|
233
|
+
// On ne peut pas savoir quel hunk a cassé la syntaxe sans une analyse fine,
|
|
234
|
+
// donc on est conservatif : tout remettre en conflits manuels.
|
|
235
|
+
const retractedResolutions = result.resolutions.map((r) => r.autoResolved ? applyPostMergeRiskPenalty(r) : r);
|
|
236
|
+
return {
|
|
237
|
+
...result,
|
|
238
|
+
// mergedContent = null indique aux consommateurs que des conflits subsistent.
|
|
239
|
+
// Le contenu original (avec marqueurs) est conservé dans conflictedContent
|
|
240
|
+
// par l'appelant — ici on expose uniquement la MergeResult enrichie.
|
|
241
|
+
mergedContent: null,
|
|
242
|
+
resolutions: retractedResolutions,
|
|
243
|
+
stats: {
|
|
244
|
+
...result.stats,
|
|
245
|
+
autoResolved: 0,
|
|
246
|
+
remaining: result.stats.totalConflicts,
|
|
247
|
+
},
|
|
248
|
+
validation: {
|
|
249
|
+
...result.validation,
|
|
250
|
+
isValid: false,
|
|
251
|
+
parseTreeValid: false,
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
// ─── 4. v2.4 — Validation stricte opt-in (tsc / eslint) ─────────────────
|
|
256
|
+
let externalValidation = null;
|
|
257
|
+
if (options.validationLevel === "strict") {
|
|
258
|
+
const tools = options.validationTools ?? ["tsc"];
|
|
259
|
+
const strictResult = await runStrictValidation(result.mergedContent, filePath, tools);
|
|
260
|
+
const failedTool = (strictResult.toolsFailed[0] ?? strictResult.toolsRun[0] ?? "tsc");
|
|
261
|
+
externalValidation = {
|
|
262
|
+
tool: failedTool,
|
|
263
|
+
errors: strictResult.errors,
|
|
264
|
+
passed: strictResult.errors.length === 0,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
...result,
|
|
269
|
+
validation: {
|
|
270
|
+
...result.validation,
|
|
271
|
+
parseTreeValid,
|
|
272
|
+
externalValidation,
|
|
273
|
+
...(externalValidation && !externalValidation.passed ? { isValid: false } : {}),
|
|
274
|
+
},
|
|
275
|
+
};
|
|
175
276
|
}
|
|
176
277
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.5 — LLM fallback pipeline (phase 5 de resolveAsync).
|
|
3
|
+
*
|
|
4
|
+
* Après la résolution hunk-par-hunk et la validation parse-tree, cette phase
|
|
5
|
+
* tente de résoudre les hunks `complex` restants via le fallback LLM.
|
|
6
|
+
*
|
|
7
|
+
* ## Intégration dans resolveAsync
|
|
8
|
+
*
|
|
9
|
+
* La fonction `runLlmFallbackPhase` est appelée par `resolveAsync()` uniquement si :
|
|
10
|
+
* - `options.llmFallback.enabled === true`
|
|
11
|
+
* - `options.llmFallback.endpoint` est injecté
|
|
12
|
+
* - Il reste des hunks `complex` non résolus dans `result.resolutions`
|
|
13
|
+
*
|
|
14
|
+
* ## Reconstruction du mergedContent
|
|
15
|
+
*
|
|
16
|
+
* Les `HunkResolution` sont mises à jour en place. Le `mergedContent` est
|
|
17
|
+
* reconstruit à partir des segments parsés de `conflictedContent` en appliquant
|
|
18
|
+
* les nouvelles résolutions.
|
|
19
|
+
*/
|
|
20
|
+
import type { GitWandOptions, MergeResult } from "../types.js";
|
|
21
|
+
import type { StructuralLoaderOptions } from "../structural/index.js";
|
|
22
|
+
/**
|
|
23
|
+
* Applique le fallback LLM sur les hunks `complex` non résolus.
|
|
24
|
+
*
|
|
25
|
+
* Retourne le `MergeResult` mis à jour avec :
|
|
26
|
+
* - Les `HunkResolution` patchées (llm_proposed ou toujours complex)
|
|
27
|
+
* - La `DecisionTrace` enrichie avec `llmTrace` pour chaque résolution LLM
|
|
28
|
+
* - Le `mergedContent` reconstruit
|
|
29
|
+
* - Les stats mises à jour
|
|
30
|
+
* - La validation post-merge re-exécutée si toutes les résolutions passent
|
|
31
|
+
*/
|
|
32
|
+
export declare function runLlmFallbackPhase(conflictedContent: string, result: MergeResult, filePath: string, options: Required<GitWandOptions>, structuralOpts?: StructuralLoaderOptions): Promise<MergeResult>;
|
|
33
|
+
//# sourceMappingURL=llm-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-pipeline.d.ts","sourceRoot":"","sources":["../../src/resolver/llm-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAEV,cAAc,EAGd,WAAW,EAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AA0EtE;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EACjC,cAAc,GAAE,uBAA4B,GAC3C,OAAO,CAAC,WAAW,CAAC,CAmJtB"}
|