@gitwand/core 1.6.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 (219) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +52 -0
  3. package/dist/__tests__/bench.bench.d.ts +14 -0
  4. package/dist/__tests__/bench.bench.d.ts.map +1 -0
  5. package/dist/__tests__/bench.bench.js +137 -0
  6. package/dist/__tests__/bench.bench.js.map +1 -0
  7. package/dist/__tests__/confidence-v14.test.d.ts +13 -0
  8. package/dist/__tests__/confidence-v14.test.d.ts.map +1 -0
  9. package/dist/__tests__/confidence-v14.test.js +284 -0
  10. package/dist/__tests__/confidence-v14.test.js.map +1 -0
  11. package/dist/__tests__/config.test.d.ts +2 -0
  12. package/dist/__tests__/config.test.d.ts.map +1 -0
  13. package/dist/__tests__/config.test.js +317 -0
  14. package/dist/__tests__/config.test.js.map +1 -0
  15. package/dist/__tests__/corpus.d.ts +36 -0
  16. package/dist/__tests__/corpus.d.ts.map +1 -0
  17. package/dist/__tests__/corpus.js +541 -0
  18. package/dist/__tests__/corpus.js.map +1 -0
  19. package/dist/__tests__/corpus.test.d.ts +17 -0
  20. package/dist/__tests__/corpus.test.d.ts.map +1 -0
  21. package/dist/__tests__/corpus.test.js +179 -0
  22. package/dist/__tests__/corpus.test.js.map +1 -0
  23. package/dist/__tests__/diff.test.d.ts +10 -0
  24. package/dist/__tests__/diff.test.d.ts.map +1 -0
  25. package/dist/__tests__/diff.test.js +178 -0
  26. package/dist/__tests__/diff.test.js.map +1 -0
  27. package/dist/__tests__/format-resolvers.test.d.ts +2 -0
  28. package/dist/__tests__/format-resolvers.test.d.ts.map +1 -0
  29. package/dist/__tests__/format-resolvers.test.js +577 -0
  30. package/dist/__tests__/format-resolvers.test.js.map +1 -0
  31. package/dist/__tests__/imports-extended.test.d.ts +2 -0
  32. package/dist/__tests__/imports-extended.test.d.ts.map +1 -0
  33. package/dist/__tests__/imports-extended.test.js +94 -0
  34. package/dist/__tests__/imports-extended.test.js.map +1 -0
  35. package/dist/__tests__/lockfile-resolvers.test.d.ts +2 -0
  36. package/dist/__tests__/lockfile-resolvers.test.d.ts.map +1 -0
  37. package/dist/__tests__/lockfile-resolvers.test.js +200 -0
  38. package/dist/__tests__/lockfile-resolvers.test.js.map +1 -0
  39. package/dist/__tests__/patterns/insertion-at-boundary.test.d.ts +10 -0
  40. package/dist/__tests__/patterns/insertion-at-boundary.test.d.ts.map +1 -0
  41. package/dist/__tests__/patterns/insertion-at-boundary.test.js +185 -0
  42. package/dist/__tests__/patterns/insertion-at-boundary.test.js.map +1 -0
  43. package/dist/__tests__/patterns/reorder-only.test.d.ts +10 -0
  44. package/dist/__tests__/patterns/reorder-only.test.d.ts.map +1 -0
  45. package/dist/__tests__/patterns/reorder-only.test.js +181 -0
  46. package/dist/__tests__/patterns/reorder-only.test.js.map +1 -0
  47. package/dist/__tests__/phase-7-2-3b.test.d.ts +6 -0
  48. package/dist/__tests__/phase-7-2-3b.test.d.ts.map +1 -0
  49. package/dist/__tests__/phase-7-2-3b.test.js +730 -0
  50. package/dist/__tests__/phase-7-2-3b.test.js.map +1 -0
  51. package/dist/__tests__/resolver.test.d.ts +2 -0
  52. package/dist/__tests__/resolver.test.d.ts.map +1 -0
  53. package/dist/__tests__/resolver.test.js +927 -0
  54. package/dist/__tests__/resolver.test.js.map +1 -0
  55. package/dist/__tests__/resolvers/cargo.test.d.ts +10 -0
  56. package/dist/__tests__/resolvers/cargo.test.d.ts.map +1 -0
  57. package/dist/__tests__/resolvers/cargo.test.js +158 -0
  58. package/dist/__tests__/resolvers/cargo.test.js.map +1 -0
  59. package/dist/__tests__/resolvers/dockerfile.test.d.ts +8 -0
  60. package/dist/__tests__/resolvers/dockerfile.test.d.ts.map +1 -0
  61. package/dist/__tests__/resolvers/dockerfile.test.js +120 -0
  62. package/dist/__tests__/resolvers/dockerfile.test.js.map +1 -0
  63. package/dist/__tests__/resolvers/dotenv.test.d.ts +9 -0
  64. package/dist/__tests__/resolvers/dotenv.test.d.ts.map +1 -0
  65. package/dist/__tests__/resolvers/dotenv.test.js +113 -0
  66. package/dist/__tests__/resolvers/dotenv.test.js.map +1 -0
  67. package/dist/__tests__/resolvers/improvements-v14.test.d.ts +8 -0
  68. package/dist/__tests__/resolvers/improvements-v14.test.d.ts.map +1 -0
  69. package/dist/__tests__/resolvers/improvements-v14.test.js +306 -0
  70. package/dist/__tests__/resolvers/improvements-v14.test.js.map +1 -0
  71. package/dist/__tests__/validation.test.d.ts +12 -0
  72. package/dist/__tests__/validation.test.d.ts.map +1 -0
  73. package/dist/__tests__/validation.test.js +136 -0
  74. package/dist/__tests__/validation.test.js.map +1 -0
  75. package/dist/classifier.d.ts +21 -0
  76. package/dist/classifier.d.ts.map +1 -0
  77. package/dist/classifier.js +127 -0
  78. package/dist/classifier.js.map +1 -0
  79. package/dist/config.d.ts +108 -0
  80. package/dist/config.d.ts.map +1 -0
  81. package/dist/config.js +200 -0
  82. package/dist/config.js.map +1 -0
  83. package/dist/diff.d.ts +69 -0
  84. package/dist/diff.d.ts.map +1 -0
  85. package/dist/diff.js +328 -0
  86. package/dist/diff.js.map +1 -0
  87. package/dist/index.d.ts +47 -0
  88. package/dist/index.d.ts.map +1 -0
  89. package/dist/index.js +38 -0
  90. package/dist/index.js.map +1 -0
  91. package/dist/parser.d.ts +39 -0
  92. package/dist/parser.d.ts.map +1 -0
  93. package/dist/parser.js +164 -0
  94. package/dist/parser.js.map +1 -0
  95. package/dist/patterns/complex.d.ts +5 -0
  96. package/dist/patterns/complex.d.ts.map +1 -0
  97. package/dist/patterns/complex.js +27 -0
  98. package/dist/patterns/complex.js.map +1 -0
  99. package/dist/patterns/delete-no-change.d.ts +4 -0
  100. package/dist/patterns/delete-no-change.d.ts.map +1 -0
  101. package/dist/patterns/delete-no-change.js +75 -0
  102. package/dist/patterns/delete-no-change.js.map +1 -0
  103. package/dist/patterns/insertion-at-boundary.d.ts +22 -0
  104. package/dist/patterns/insertion-at-boundary.d.ts.map +1 -0
  105. package/dist/patterns/insertion-at-boundary.js +164 -0
  106. package/dist/patterns/insertion-at-boundary.js.map +1 -0
  107. package/dist/patterns/non-overlapping.d.ts +4 -0
  108. package/dist/patterns/non-overlapping.d.ts.map +1 -0
  109. package/dist/patterns/non-overlapping.js +28 -0
  110. package/dist/patterns/non-overlapping.js.map +1 -0
  111. package/dist/patterns/one-side-change.d.ts +4 -0
  112. package/dist/patterns/one-side-change.d.ts.map +1 -0
  113. package/dist/patterns/one-side-change.js +45 -0
  114. package/dist/patterns/one-side-change.js.map +1 -0
  115. package/dist/patterns/reorder-only.d.ts +14 -0
  116. package/dist/patterns/reorder-only.d.ts.map +1 -0
  117. package/dist/patterns/reorder-only.js +81 -0
  118. package/dist/patterns/reorder-only.js.map +1 -0
  119. package/dist/patterns/same-change.d.ts +4 -0
  120. package/dist/patterns/same-change.d.ts.map +1 -0
  121. package/dist/patterns/same-change.js +25 -0
  122. package/dist/patterns/same-change.js.map +1 -0
  123. package/dist/patterns/utils.d.ts +70 -0
  124. package/dist/patterns/utils.d.ts.map +1 -0
  125. package/dist/patterns/utils.js +206 -0
  126. package/dist/patterns/utils.js.map +1 -0
  127. package/dist/patterns/value-only-change.d.ts +4 -0
  128. package/dist/patterns/value-only-change.d.ts.map +1 -0
  129. package/dist/patterns/value-only-change.js +34 -0
  130. package/dist/patterns/value-only-change.js.map +1 -0
  131. package/dist/patterns/whitespace-only.d.ts +4 -0
  132. package/dist/patterns/whitespace-only.d.ts.map +1 -0
  133. package/dist/patterns/whitespace-only.js +32 -0
  134. package/dist/patterns/whitespace-only.js.map +1 -0
  135. package/dist/resolver/assemble.d.ts +25 -0
  136. package/dist/resolver/assemble.d.ts.map +1 -0
  137. package/dist/resolver/assemble.js +170 -0
  138. package/dist/resolver/assemble.js.map +1 -0
  139. package/dist/resolver/format-dispatch.d.ts +40 -0
  140. package/dist/resolver/format-dispatch.d.ts.map +1 -0
  141. package/dist/resolver/format-dispatch.js +51 -0
  142. package/dist/resolver/format-dispatch.js.map +1 -0
  143. package/dist/resolver/generated-detection.d.ts +48 -0
  144. package/dist/resolver/generated-detection.d.ts.map +1 -0
  145. package/dist/resolver/generated-detection.js +123 -0
  146. package/dist/resolver/generated-detection.js.map +1 -0
  147. package/dist/resolver/index.d.ts +26 -0
  148. package/dist/resolver/index.d.ts.map +1 -0
  149. package/dist/resolver/index.js +147 -0
  150. package/dist/resolver/index.js.map +1 -0
  151. package/dist/resolver/policy.d.ts +53 -0
  152. package/dist/resolver/policy.d.ts.map +1 -0
  153. package/dist/resolver/policy.js +99 -0
  154. package/dist/resolver/policy.js.map +1 -0
  155. package/dist/resolver/validation.d.ts +28 -0
  156. package/dist/resolver/validation.d.ts.map +1 -0
  157. package/dist/resolver/validation.js +96 -0
  158. package/dist/resolver/validation.js.map +1 -0
  159. package/dist/resolver.d.ts +18 -0
  160. package/dist/resolver.d.ts.map +1 -0
  161. package/dist/resolver.js +18 -0
  162. package/dist/resolver.js.map +1 -0
  163. package/dist/resolvers/cargo.d.ts +34 -0
  164. package/dist/resolvers/cargo.d.ts.map +1 -0
  165. package/dist/resolvers/cargo.js +262 -0
  166. package/dist/resolvers/cargo.js.map +1 -0
  167. package/dist/resolvers/css.d.ts +60 -0
  168. package/dist/resolvers/css.d.ts.map +1 -0
  169. package/dist/resolvers/css.js +531 -0
  170. package/dist/resolvers/css.js.map +1 -0
  171. package/dist/resolvers/dispatcher.d.ts +78 -0
  172. package/dist/resolvers/dispatcher.d.ts.map +1 -0
  173. package/dist/resolvers/dispatcher.js +290 -0
  174. package/dist/resolvers/dispatcher.js.map +1 -0
  175. package/dist/resolvers/dockerfile.d.ts +24 -0
  176. package/dist/resolvers/dockerfile.d.ts.map +1 -0
  177. package/dist/resolvers/dockerfile.js +221 -0
  178. package/dist/resolvers/dockerfile.js.map +1 -0
  179. package/dist/resolvers/dotenv.d.ts +27 -0
  180. package/dist/resolvers/dotenv.d.ts.map +1 -0
  181. package/dist/resolvers/dotenv.js +114 -0
  182. package/dist/resolvers/dotenv.js.map +1 -0
  183. package/dist/resolvers/imports.d.ts +63 -0
  184. package/dist/resolvers/imports.d.ts.map +1 -0
  185. package/dist/resolvers/imports.js +513 -0
  186. package/dist/resolvers/imports.js.map +1 -0
  187. package/dist/resolvers/json.d.ts +48 -0
  188. package/dist/resolvers/json.d.ts.map +1 -0
  189. package/dist/resolvers/json.js +363 -0
  190. package/dist/resolvers/json.js.map +1 -0
  191. package/dist/resolvers/lockfile-npm.d.ts +38 -0
  192. package/dist/resolvers/lockfile-npm.d.ts.map +1 -0
  193. package/dist/resolvers/lockfile-npm.js +267 -0
  194. package/dist/resolvers/lockfile-npm.js.map +1 -0
  195. package/dist/resolvers/lockfile-pnpm.d.ts +44 -0
  196. package/dist/resolvers/lockfile-pnpm.d.ts.map +1 -0
  197. package/dist/resolvers/lockfile-pnpm.js +277 -0
  198. package/dist/resolvers/lockfile-pnpm.js.map +1 -0
  199. package/dist/resolvers/lockfile-yarn.d.ts +40 -0
  200. package/dist/resolvers/lockfile-yarn.d.ts.map +1 -0
  201. package/dist/resolvers/lockfile-yarn.js +184 -0
  202. package/dist/resolvers/lockfile-yarn.js.map +1 -0
  203. package/dist/resolvers/markdown.d.ts +64 -0
  204. package/dist/resolvers/markdown.d.ts.map +1 -0
  205. package/dist/resolvers/markdown.js +335 -0
  206. package/dist/resolvers/markdown.js.map +1 -0
  207. package/dist/resolvers/vue.d.ts +65 -0
  208. package/dist/resolvers/vue.d.ts.map +1 -0
  209. package/dist/resolvers/vue.js +258 -0
  210. package/dist/resolvers/vue.js.map +1 -0
  211. package/dist/resolvers/yaml.d.ts +65 -0
  212. package/dist/resolvers/yaml.d.ts.map +1 -0
  213. package/dist/resolvers/yaml.js +405 -0
  214. package/dist/resolvers/yaml.js.map +1 -0
  215. package/dist/types.d.ts +256 -0
  216. package/dist/types.d.ts.map +1 -0
  217. package/dist/types.js +8 -0
  218. package/dist/types.js.map +1 -0
  219. package/package.json +57 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Laurent Guitton
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,52 @@
1
+ # @gitwand/core
2
+
3
+ [![npm](https://img.shields.io/npm/v/@gitwand/core?color=22c55e)](https://www.npmjs.com/package/@gitwand/core)
4
+ [![License](https://img.shields.io/badge/license-MIT-8B5CF6)](../../LICENSE)
5
+
6
+ **The conflict resolution engine that powers [GitWand](https://github.com/devlint/GitWand).**
7
+
8
+ This package is primarily a build-time dependency of [`@gitwand/cli`](https://www.npmjs.com/package/@gitwand/cli) and [`@gitwand/mcp`](https://www.npmjs.com/package/@gitwand/mcp). Most users should install one of those instead.
9
+
10
+ > ⚠️ **Pre-1.0 stability note.** `@gitwand/core` exposes a deliberately small API (`resolve`, `MergeResult`, a handful of types) but is not yet under a formal semver stability commitment. Breaking changes may land in minor versions until the API is declared stable in a future release. If you depend on it directly, pin an exact version.
11
+
12
+ ## Use as a library
13
+
14
+ ```ts
15
+ import { resolve } from "@gitwand/core";
16
+
17
+ const content = readFileSync("src/app.ts", "utf-8");
18
+ const result = resolve(content, "src/app.ts");
19
+
20
+ console.log(`${result.stats.autoResolved}/${result.stats.totalConflicts} resolved`);
21
+
22
+ if (result.mergedContent) {
23
+ writeFileSync("src/app.ts", result.mergedContent);
24
+ }
25
+ ```
26
+
27
+ ### With options
28
+
29
+ ```ts
30
+ const result = resolve(content, "package-lock.json", {
31
+ policy: "prefer-merge",
32
+ minConfidence: "medium",
33
+ patternOverrides: { "*.lock": "prefer-theirs" },
34
+ explainOnly: true, // don't produce a merged output, just analyze
35
+ });
36
+ ```
37
+
38
+ ## What it does
39
+
40
+ Parses a file with Git conflict markers (`<<<<<<<`, `=======`, `>>>>>>>`) and produces a structured merge result: per-hunk classification, composite confidence score, decision trace, and — when possible — a clean merged content string.
41
+
42
+ Pattern detection is priority-ordered: `same_change`, `one_side_change`, `delete_no_change`, `non_overlapping`, `whitespace_only`, `reorder_only`, `insertion_at_boundary`, `value_only_change`, `generated_file`, and `complex` (never auto-resolved).
43
+
44
+ Format-aware resolvers layer on top: JSON / JSONC, Markdown (ATX-heading-aware), YAML, Vue SFC, CSS, and common lockfiles.
45
+
46
+ See the [main README](https://github.com/devlint/GitWand#conflict-resolution-engine) for the full pattern list, confidence scoring details, and `.gitwandrc` configuration.
47
+
48
+ ## Links
49
+
50
+ - 📖 [Documentation](https://github.com/devlint/GitWand#conflict-resolution-engine)
51
+ - 🐛 [Issue tracker](https://github.com/devlint/GitWand/issues)
52
+ - 📜 [License — MIT](../../LICENSE)
@@ -0,0 +1,14 @@
1
+ /**
2
+ * GitWand — Benchmarks de performance (Phase 7.5)
3
+ *
4
+ * Mesure le temps de résolution sur des fichiers de taille variable.
5
+ * Lancé avec : `pnpm test:bench` ou `npx vitest bench`
6
+ *
7
+ * Scénarios :
8
+ * - small : 1 conflit, ~15 lignes
9
+ * - medium : 5 conflits, ~120 lignes
10
+ * - large : 20 conflits, ~500 lignes
11
+ * - huge : 50 conflits, ~1200 lignes (simule un lockfile)
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=bench.bench.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bench.bench.d.ts","sourceRoot":"","sources":["../../src/__tests__/bench.bench.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * GitWand — Benchmarks de performance (Phase 7.5)
3
+ *
4
+ * Mesure le temps de résolution sur des fichiers de taille variable.
5
+ * Lancé avec : `pnpm test:bench` ou `npx vitest bench`
6
+ *
7
+ * Scénarios :
8
+ * - small : 1 conflit, ~15 lignes
9
+ * - medium : 5 conflits, ~120 lignes
10
+ * - large : 20 conflits, ~500 lignes
11
+ * - huge : 50 conflits, ~1200 lignes (simule un lockfile)
12
+ */
13
+ import { describe, bench } from "vitest";
14
+ import { resolve } from "../resolver.js";
15
+ // ─── Générateurs de contenu ───────────────────────────────
16
+ /**
17
+ * Génère un bloc de texte TypeScript neutre (pas de conflit).
18
+ */
19
+ function makeNeutralTs(n) {
20
+ const lines = [];
21
+ for (let i = 0; i < n; i++) {
22
+ lines.push(`const value${i} = compute(${i}, ${i * 2});`);
23
+ }
24
+ return lines.join("\n");
25
+ }
26
+ /**
27
+ * Génère un conflit de type same_change (trivial, résolution certaine).
28
+ */
29
+ function makeSameChangeConflict(index) {
30
+ return [
31
+ `<<<<<<< ours`,
32
+ `function handler${index}(req: Request): Response {`,
33
+ ` const data = process(req.body);`,
34
+ ` return json({ data, status: "ok" });`,
35
+ `}`,
36
+ `||||||| base`,
37
+ `function handler${index}(req: Request): Response {`,
38
+ ` return json({ data: req.body });`,
39
+ `}`,
40
+ `=======`,
41
+ `function handler${index}(req: Request): Response {`,
42
+ ` const data = process(req.body);`,
43
+ ` return json({ data, status: "ok" });`,
44
+ `}`,
45
+ `>>>>>>> theirs`,
46
+ ].join("\n");
47
+ }
48
+ /**
49
+ * Génère un conflit non_overlapping (structurel, résolution haute confiance).
50
+ */
51
+ function makeNonOverlappingConflict(index) {
52
+ return [
53
+ `<<<<<<< ours`,
54
+ `import { feature${index}A } from "./features";`,
55
+ `import { shared } from "./shared";`,
56
+ `||||||| base`,
57
+ `import { shared } from "./shared";`,
58
+ `=======`,
59
+ `import { shared } from "./shared";`,
60
+ `import { feature${index}B } from "./features";`,
61
+ `>>>>>>> theirs`,
62
+ ].join("\n");
63
+ }
64
+ /**
65
+ * Génère un fichier complet avec N conflits entourés de texte neutre.
66
+ */
67
+ function makeFile(conflictCount, neutralLinesPerConflict) {
68
+ const parts = [];
69
+ for (let i = 0; i < conflictCount; i++) {
70
+ // Texte neutre avant
71
+ parts.push(makeNeutralTs(neutralLinesPerConflict));
72
+ // Conflit alternant entre same_change et non_overlapping
73
+ parts.push(i % 2 === 0 ? makeSameChangeConflict(i) : makeNonOverlappingConflict(i));
74
+ }
75
+ // Texte final
76
+ parts.push(makeNeutralTs(neutralLinesPerConflict));
77
+ return parts.join("\n");
78
+ }
79
+ // ─── Fixtures ────────────────────────────────────────────
80
+ const SMALL = makeFile(1, 8); // ~30 lignes
81
+ const MEDIUM = makeFile(5, 15); // ~140 lignes
82
+ const LARGE = makeFile(20, 20); // ~530 lignes
83
+ const HUGE = makeFile(50, 15); // ~1350 lignes
84
+ // ─── Benchmarks ───────────────────────────────────────────
85
+ describe("resolve() — benchmarks de performance", () => {
86
+ bench("small (1 conflit / ~30 lignes)", () => {
87
+ resolve(SMALL, "src/handlers.ts");
88
+ });
89
+ bench("medium (5 conflits / ~140 lignes)", () => {
90
+ resolve(MEDIUM, "src/handlers.ts");
91
+ });
92
+ bench("large (20 conflits / ~530 lignes)", () => {
93
+ resolve(LARGE, "src/handlers.ts");
94
+ });
95
+ bench("huge (50 conflits / ~1350 lignes)", () => {
96
+ resolve(HUGE, "src/handlers.ts");
97
+ });
98
+ bench("JSON sémantique (config.json)", () => {
99
+ const jsonConflict = [
100
+ `<<<<<<< ours`,
101
+ `{ "name": "app", "version": "1.0.0", "debug": true, "port": 3000 }`,
102
+ `||||||| base`,
103
+ `{ "name": "app", "version": "1.0.0", "port": 3000 }`,
104
+ `=======`,
105
+ `{ "name": "app", "version": "1.0.0", "logLevel": "warn", "port": 3000 }`,
106
+ `>>>>>>> theirs`,
107
+ ].join("\n");
108
+ resolve(jsonConflict, "config.json");
109
+ });
110
+ bench("Markdown section-aware (README.md)", () => {
111
+ const mdConflict = [
112
+ `<<<<<<< ours`,
113
+ `# My App`,
114
+ ``,
115
+ `## Installation`,
116
+ ``,
117
+ `Run \`npm install\`.`,
118
+ ``,
119
+ `## Usage`,
120
+ ``,
121
+ `Import and use.`,
122
+ `=======`,
123
+ `# My App`,
124
+ ``,
125
+ `## Installation`,
126
+ ``,
127
+ `Run \`npm install\`.`,
128
+ ``,
129
+ `## Contributing`,
130
+ ``,
131
+ `Open a PR.`,
132
+ `>>>>>>> theirs`,
133
+ ].join("\n");
134
+ resolve(mdConflict, "README.md");
135
+ });
136
+ });
137
+ //# sourceMappingURL=bench.bench.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bench.bench.js","sourceRoot":"","sources":["../../src/__tests__/bench.bench.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Tests de confiance v1.4
3
+ *
4
+ * Fixtures :
5
+ * F31 — zdiff3 : détection et ajustement `baseAvailability`
6
+ * F32 — reorder_only avec lignes dupliquées (pénalité −10)
7
+ *
8
+ * Également :
9
+ * - Vérification des nouvelles dimensions (fileFrequency, baseAvailability)
10
+ * - Pénalité fileFrequency sur les fichiers "zone chaude"
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=confidence-v14.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence-v14.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/confidence-v14.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Tests de confiance v1.4
3
+ *
4
+ * Fixtures :
5
+ * F31 — zdiff3 : détection et ajustement `baseAvailability`
6
+ * F32 — reorder_only avec lignes dupliquées (pénalité −10)
7
+ *
8
+ * Également :
9
+ * - Vérification des nouvelles dimensions (fileFrequency, baseAvailability)
10
+ * - Pénalité fileFrequency sur les fichiers "zone chaude"
11
+ */
12
+ import { describe, it, expect } from "vitest";
13
+ import { resolve } from "../resolver.js";
14
+ import { toConflictHunk } from "../parser.js";
15
+ // ─── F31 — zdiff3 détection ───────────────────────────────────
16
+ describe("F31 — zdiff3 : détection et baseAvailability", () => {
17
+ // En zdiff3, la section base ne montre que les lignes divergentes.
18
+ // Ici, ours a ajouté "REDIS_URL" et theirs a ajouté "SMTP_HOST".
19
+ // La base (zdiff3) ne montre que "APP_NAME" (ligne commune aux deux).
20
+ // → base est un sous-ensemble de ours ET de theirs → zdiff3 détecté.
21
+ const zdiff3Input = [
22
+ `<<<<<<< ours`,
23
+ `APP_NAME=my-app`,
24
+ `DATABASE_URL=postgres://localhost/db`,
25
+ `REDIS_URL=redis://localhost:6379`,
26
+ `||||||| base`,
27
+ `APP_NAME=my-app`,
28
+ `=======`,
29
+ `APP_NAME=my-app`,
30
+ `DATABASE_URL=postgres://localhost/db`,
31
+ `SMTP_HOST=smtp.example.com`,
32
+ `>>>>>>> theirs`,
33
+ ].join("\n");
34
+ it("résout le conflit (insertion_at_boundary ou dotenv)", () => {
35
+ const result = resolve(zdiff3Input, ".env");
36
+ expect(result.stats.autoResolved).toBe(1);
37
+ });
38
+ it("le hunk a zdiff3: true", () => {
39
+ const result = resolve(zdiff3Input, ".env");
40
+ expect(result.hunks[0].zdiff3).toBe(true);
41
+ });
42
+ it("la dimension baseAvailability est 100", () => {
43
+ const result = resolve(zdiff3Input, ".env");
44
+ expect(result.hunks[0].confidence.dimensions.baseAvailability).toBe(100);
45
+ });
46
+ it("le booster mentionne zdiff3", () => {
47
+ const result = resolve(zdiff3Input, ".env");
48
+ const boosters = result.hunks[0].confidence.boosters;
49
+ expect(boosters.some((b) => b.toLowerCase().includes("zdiff3"))).toBe(true);
50
+ });
51
+ it("diff2 n'a pas zdiff3:true", () => {
52
+ const diff2Input = [
53
+ `<<<<<<< ours`,
54
+ `APP_NAME=my-app`,
55
+ `REDIS_URL=redis://localhost:6379`,
56
+ `=======`,
57
+ `APP_NAME=my-app`,
58
+ `SMTP_HOST=smtp.example.com`,
59
+ `>>>>>>> theirs`,
60
+ ].join("\n");
61
+ const result = resolve(diff2Input, ".env");
62
+ expect(result.hunks[0].zdiff3).toBeUndefined();
63
+ });
64
+ it("diff3 complet n'a pas zdiff3:true (base contient des lignes hors ours ET hors theirs)", () => {
65
+ // Base a une ligne qui n'est dans aucun des deux côtés (supprimée des deux)
66
+ const full3Input = [
67
+ `<<<<<<< ours`,
68
+ `A=1`,
69
+ `C=3`,
70
+ `||||||| base`,
71
+ `A=1`,
72
+ `B=2`,
73
+ `C=3`,
74
+ `=======`,
75
+ `A=1`,
76
+ `C=3`,
77
+ `D=4`,
78
+ `>>>>>>> theirs`,
79
+ ].join("\n");
80
+ const result = resolve(full3Input, "config.env");
81
+ // "B=2" est dans la base mais pas dans ours ni theirs → pas un sous-ensemble → pas zdiff3
82
+ expect(result.hunks[0].zdiff3).toBeUndefined();
83
+ });
84
+ });
85
+ // ─── zdiff3 avec toConflictHunk directement ───────────────────
86
+ describe("zdiff3 — toConflictHunk direct", () => {
87
+ it("détecte zdiff3 quand base ⊆ ours", () => {
88
+ const hunk = toConflictHunk({
89
+ oursLines: ["A=1", "B=2", "C=3"],
90
+ baseLines: ["A=1"], // base ⊆ ours
91
+ theirsLines: ["X=9", "Y=8"],
92
+ startLine: 1,
93
+ endLine: 7,
94
+ });
95
+ expect(hunk.zdiff3).toBe(true);
96
+ expect(hunk.confidence.dimensions.baseAvailability).toBe(100);
97
+ });
98
+ it("détecte zdiff3 quand base ⊆ theirs", () => {
99
+ const hunk = toConflictHunk({
100
+ oursLines: ["X=9", "Y=8"],
101
+ baseLines: ["Y=8"], // base ⊆ theirs
102
+ theirsLines: ["X=9", "Y=8", "Z=7"],
103
+ startLine: 1,
104
+ endLine: 7,
105
+ });
106
+ expect(hunk.zdiff3).toBe(true);
107
+ expect(hunk.confidence.dimensions.baseAvailability).toBe(100);
108
+ });
109
+ it("ne détecte pas zdiff3 quand base contient des lignes hors ours et theirs", () => {
110
+ const hunk = toConflictHunk({
111
+ oursLines: ["A=1"],
112
+ baseLines: ["A=1", "DELETED=old"], // DELETED n'est ni dans ours ni dans theirs
113
+ theirsLines: ["A=1", "B=2"],
114
+ startLine: 1,
115
+ endLine: 8,
116
+ });
117
+ expect(hunk.zdiff3).toBeUndefined();
118
+ expect(hunk.confidence.dimensions.baseAvailability).toBe(0);
119
+ });
120
+ it("ne détecte pas zdiff3 quand baseLines est vide (diff2)", () => {
121
+ const hunk = toConflictHunk({
122
+ oursLines: ["A=1"],
123
+ baseLines: [],
124
+ theirsLines: ["B=2"],
125
+ startLine: 1,
126
+ endLine: 5,
127
+ });
128
+ expect(hunk.zdiff3).toBeUndefined();
129
+ });
130
+ });
131
+ // ─── F32 — reorder_only avec lignes dupliquées ────────────────
132
+ describe("F32 — reorder_only : lignes dupliquées (pénalité ordre ambigu)", () => {
133
+ // Ours et theirs ont les mêmes lignes (même multiset) mais dans des ordres différents.
134
+ // La ligne "export { A }" apparaît deux fois → lignes dupliquées → pénalité appliquée.
135
+ const input = [
136
+ `<<<<<<< ours`,
137
+ `export { A } from "./a";`,
138
+ `export { A } from "./a";`,
139
+ `export { B } from "./b";`,
140
+ `export { C } from "./c";`,
141
+ `=======`,
142
+ `export { B } from "./b";`,
143
+ `export { C } from "./c";`,
144
+ `export { A } from "./a";`,
145
+ `export { A } from "./a";`,
146
+ `>>>>>>> theirs`,
147
+ ].join("\n");
148
+ it("classifie en reorder_only", () => {
149
+ const result = resolve(input, "index.ts");
150
+ // Vérifier que c'est bien reorder_only (pas intercepté par imports resolver
151
+ // car c'est des `export` pas des `import`)
152
+ const hunk = result.hunks[0];
153
+ expect(hunk.type).toBe("reorder_only");
154
+ });
155
+ it("auto-résout (malgré les doublons)", () => {
156
+ const result = resolve(input, "index.ts");
157
+ expect(result.stats.autoResolved).toBe(1);
158
+ });
159
+ it("la pénalité de doublons est mentionnée", () => {
160
+ const result = resolve(input, "index.ts");
161
+ const penalties = result.hunks[0].confidence.penalties;
162
+ expect(penalties.some((p) => p.toLowerCase().includes("dupliqu"))).toBe(true);
163
+ });
164
+ it("le score est inférieur à un reorder_only sans doublons", () => {
165
+ // Sans doublons
166
+ const inputClean = [
167
+ `<<<<<<< ours`,
168
+ `export { A } from "./a";`,
169
+ `export { B } from "./b";`,
170
+ `export { C } from "./c";`,
171
+ `=======`,
172
+ `export { B } from "./b";`,
173
+ `export { C } from "./c";`,
174
+ `export { A } from "./a";`,
175
+ `>>>>>>> theirs`,
176
+ ].join("\n");
177
+ const cleanResult = resolve(inputClean, "index.ts");
178
+ const dupResult = resolve(input, "index.ts");
179
+ const cleanScore = cleanResult.hunks[0].confidence.score;
180
+ const dupScore = dupResult.hunks[0].confidence.score;
181
+ expect(dupScore).toBeLessThan(cleanScore);
182
+ });
183
+ });
184
+ // ─── Nouvelles dimensions — vérification structure ────────────
185
+ describe("ConfidenceScore v1.4 — dimensions fileFrequency et baseAvailability", () => {
186
+ it("un hunk normal a fileFrequency = 0 et baseAvailability = 0", () => {
187
+ const simpleInput = [
188
+ `<<<<<<< ours`,
189
+ `const x = 1;`,
190
+ `=======`,
191
+ `const x = 2;`,
192
+ `>>>>>>> theirs`,
193
+ ].join("\n");
194
+ const result = resolve(simpleInput, "foo.ts");
195
+ const dims = result.hunks[0].confidence.dimensions;
196
+ expect(dims.fileFrequency).toBe(0);
197
+ expect(dims.baseAvailability).toBe(0);
198
+ });
199
+ it("un hunk diff3 plein n'est pas zdiff3 (base contient une ligne absente des deux côtés)", () => {
200
+ // La base contient "OLD_KEY=deleted" qui a été supprimé des deux côtés.
201
+ // base n'est pas un sous-ensemble de ours (OLD_KEY absent de ours),
202
+ // ni de theirs (OLD_KEY absent de theirs) → pas zdiff3.
203
+ const diff3Input = [
204
+ `<<<<<<< ours`,
205
+ `FOO=bar`,
206
+ `NEW_KEY=value`,
207
+ `||||||| base`,
208
+ `FOO=bar`,
209
+ `OLD_KEY=deleted`,
210
+ `=======`,
211
+ `FOO=baz`,
212
+ `OTHER=thing`,
213
+ `>>>>>>> theirs`,
214
+ ].join("\n");
215
+ const result = resolve(diff3Input, "config.env");
216
+ const dims = result.hunks[0].confidence.dimensions;
217
+ // "OLD_KEY=deleted" dans la base n'est ni dans ours ni dans theirs → pas zdiff3
218
+ expect(dims.baseAvailability).toBe(0);
219
+ expect(result.hunks[0].zdiff3).toBeUndefined();
220
+ });
221
+ });
222
+ // ─── fileFrequency — pénalité zone chaude ────────────────────
223
+ describe("fileFrequency — pénalité sur les fichiers avec hunks complexes", () => {
224
+ it("le second hunk d'un fichier chaud reçoit une pénalité fileFrequency", () => {
225
+ // Deux conflits dans le même fichier :
226
+ // - hunk 1 : complexe (non résolu)
227
+ // - hunk 2 : whitespace_only (auto-résolu mais dans un fichier "chaud")
228
+ const input = [
229
+ `<<<<<<< ours`,
230
+ `function foo() {`,
231
+ ` return 1;`,
232
+ `}`,
233
+ `=======`,
234
+ `function foo() {`,
235
+ ` return 2; // changed`,
236
+ `}`,
237
+ `>>>>>>> theirs`,
238
+ ``,
239
+ `// between conflicts`,
240
+ ``,
241
+ `<<<<<<< ours`,
242
+ `const bar = 1;`,
243
+ `=======`,
244
+ `const bar = 1;`,
245
+ `>>>>>>> theirs`,
246
+ ].join("\n");
247
+ const result = resolve(input, "example.ts");
248
+ // Le premier hunk est complexe (non résolu)
249
+ expect(result.hunks[0].type).toBe("complex");
250
+ expect(result.resolutions[0].autoResolved).toBe(false);
251
+ // Le second hunk (same_change) devrait avoir fileFrequency > 0
252
+ expect(result.hunks[1].confidence.dimensions.fileFrequency).toBe(20);
253
+ });
254
+ it("la pénalité est mentionnée dans les penalties du hunk chaud", () => {
255
+ const input = [
256
+ `<<<<<<< ours`,
257
+ `function complex() { return 1; }`,
258
+ `=======`,
259
+ `function complex() { return 2; }`,
260
+ `>>>>>>> theirs`,
261
+ ``,
262
+ `<<<<<<< ours`,
263
+ `const x = 1;`,
264
+ `=======`,
265
+ `const x = 1;`,
266
+ `>>>>>>> theirs`,
267
+ ].join("\n");
268
+ const result = resolve(input, "hot.ts");
269
+ const secondHunkPenalties = result.hunks[1].confidence.penalties;
270
+ expect(secondHunkPenalties.some((p) => p.toLowerCase().includes("zone chaude"))).toBe(true);
271
+ });
272
+ it("un seul hunk dans un fichier n'a pas de pénalité fileFrequency", () => {
273
+ const input = [
274
+ `<<<<<<< ours`,
275
+ `const x = 1;`,
276
+ `=======`,
277
+ `const x = 1;`,
278
+ `>>>>>>> theirs`,
279
+ ].join("\n");
280
+ const result = resolve(input, "single.ts");
281
+ expect(result.hunks[0].confidence.dimensions.fileFrequency).toBe(0);
282
+ });
283
+ });
284
+ //# sourceMappingURL=confidence-v14.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confidence-v14.test.js","sourceRoot":"","sources":["../../src/__tests__/confidence-v14.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}