@yuaone/core 0.1.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 (235) hide show
  1. package/LICENSE +663 -0
  2. package/README.md +15 -0
  3. package/dist/__tests__/context-manager.test.d.ts +6 -0
  4. package/dist/__tests__/context-manager.test.d.ts.map +1 -0
  5. package/dist/__tests__/context-manager.test.js +220 -0
  6. package/dist/__tests__/context-manager.test.js.map +1 -0
  7. package/dist/__tests__/governor.test.d.ts +6 -0
  8. package/dist/__tests__/governor.test.d.ts.map +1 -0
  9. package/dist/__tests__/governor.test.js +210 -0
  10. package/dist/__tests__/governor.test.js.map +1 -0
  11. package/dist/__tests__/model-router.test.d.ts +6 -0
  12. package/dist/__tests__/model-router.test.d.ts.map +1 -0
  13. package/dist/__tests__/model-router.test.js +329 -0
  14. package/dist/__tests__/model-router.test.js.map +1 -0
  15. package/dist/agent-logger.d.ts +384 -0
  16. package/dist/agent-logger.d.ts.map +1 -0
  17. package/dist/agent-logger.js +820 -0
  18. package/dist/agent-logger.js.map +1 -0
  19. package/dist/agent-loop.d.ts +163 -0
  20. package/dist/agent-loop.d.ts.map +1 -0
  21. package/dist/agent-loop.js +609 -0
  22. package/dist/agent-loop.js.map +1 -0
  23. package/dist/agent-modes.d.ts +85 -0
  24. package/dist/agent-modes.d.ts.map +1 -0
  25. package/dist/agent-modes.js +418 -0
  26. package/dist/agent-modes.js.map +1 -0
  27. package/dist/approval.d.ts +137 -0
  28. package/dist/approval.d.ts.map +1 -0
  29. package/dist/approval.js +299 -0
  30. package/dist/approval.js.map +1 -0
  31. package/dist/async-completion-queue.d.ts +56 -0
  32. package/dist/async-completion-queue.d.ts.map +1 -0
  33. package/dist/async-completion-queue.js +77 -0
  34. package/dist/async-completion-queue.js.map +1 -0
  35. package/dist/auto-fix.d.ts +174 -0
  36. package/dist/auto-fix.d.ts.map +1 -0
  37. package/dist/auto-fix.js +319 -0
  38. package/dist/auto-fix.js.map +1 -0
  39. package/dist/codebase-context.d.ts +396 -0
  40. package/dist/codebase-context.d.ts.map +1 -0
  41. package/dist/codebase-context.js +1260 -0
  42. package/dist/codebase-context.js.map +1 -0
  43. package/dist/conflict-resolver.d.ts +191 -0
  44. package/dist/conflict-resolver.d.ts.map +1 -0
  45. package/dist/conflict-resolver.js +524 -0
  46. package/dist/conflict-resolver.js.map +1 -0
  47. package/dist/constants.d.ts +52 -0
  48. package/dist/constants.d.ts.map +1 -0
  49. package/dist/constants.js +141 -0
  50. package/dist/constants.js.map +1 -0
  51. package/dist/context-budget.d.ts +435 -0
  52. package/dist/context-budget.d.ts.map +1 -0
  53. package/dist/context-budget.js +903 -0
  54. package/dist/context-budget.js.map +1 -0
  55. package/dist/context-compressor.d.ts +143 -0
  56. package/dist/context-compressor.d.ts.map +1 -0
  57. package/dist/context-compressor.js +511 -0
  58. package/dist/context-compressor.js.map +1 -0
  59. package/dist/context-manager.d.ts +112 -0
  60. package/dist/context-manager.d.ts.map +1 -0
  61. package/dist/context-manager.js +247 -0
  62. package/dist/context-manager.js.map +1 -0
  63. package/dist/continuous-reflection.d.ts +267 -0
  64. package/dist/continuous-reflection.d.ts.map +1 -0
  65. package/dist/continuous-reflection.js +338 -0
  66. package/dist/continuous-reflection.js.map +1 -0
  67. package/dist/cross-file-refactor.d.ts +352 -0
  68. package/dist/cross-file-refactor.d.ts.map +1 -0
  69. package/dist/cross-file-refactor.js +1544 -0
  70. package/dist/cross-file-refactor.js.map +1 -0
  71. package/dist/dag-orchestrator.d.ts +138 -0
  72. package/dist/dag-orchestrator.d.ts.map +1 -0
  73. package/dist/dag-orchestrator.js +379 -0
  74. package/dist/dag-orchestrator.js.map +1 -0
  75. package/dist/debate-orchestrator.d.ts +301 -0
  76. package/dist/debate-orchestrator.d.ts.map +1 -0
  77. package/dist/debate-orchestrator.js +719 -0
  78. package/dist/debate-orchestrator.js.map +1 -0
  79. package/dist/dependency-analyzer.d.ts +113 -0
  80. package/dist/dependency-analyzer.d.ts.map +1 -0
  81. package/dist/dependency-analyzer.js +444 -0
  82. package/dist/dependency-analyzer.js.map +1 -0
  83. package/dist/design-loop.d.ts +59 -0
  84. package/dist/design-loop.d.ts.map +1 -0
  85. package/dist/design-loop.js +344 -0
  86. package/dist/design-loop.js.map +1 -0
  87. package/dist/doc-intelligence.d.ts +383 -0
  88. package/dist/doc-intelligence.d.ts.map +1 -0
  89. package/dist/doc-intelligence.js +1307 -0
  90. package/dist/doc-intelligence.js.map +1 -0
  91. package/dist/dynamic-role-generator.d.ts +76 -0
  92. package/dist/dynamic-role-generator.d.ts.map +1 -0
  93. package/dist/dynamic-role-generator.js +194 -0
  94. package/dist/dynamic-role-generator.js.map +1 -0
  95. package/dist/errors.d.ts +69 -0
  96. package/dist/errors.d.ts.map +1 -0
  97. package/dist/errors.js +102 -0
  98. package/dist/errors.js.map +1 -0
  99. package/dist/event-bus.d.ts +159 -0
  100. package/dist/event-bus.d.ts.map +1 -0
  101. package/dist/event-bus.js +305 -0
  102. package/dist/event-bus.js.map +1 -0
  103. package/dist/execution-engine.d.ts +425 -0
  104. package/dist/execution-engine.d.ts.map +1 -0
  105. package/dist/execution-engine.js +1555 -0
  106. package/dist/execution-engine.js.map +1 -0
  107. package/dist/git-intelligence.d.ts +306 -0
  108. package/dist/git-intelligence.d.ts.map +1 -0
  109. package/dist/git-intelligence.js +1099 -0
  110. package/dist/git-intelligence.js.map +1 -0
  111. package/dist/governor.d.ts +77 -0
  112. package/dist/governor.d.ts.map +1 -0
  113. package/dist/governor.js +161 -0
  114. package/dist/governor.js.map +1 -0
  115. package/dist/hierarchical-planner.d.ts +313 -0
  116. package/dist/hierarchical-planner.d.ts.map +1 -0
  117. package/dist/hierarchical-planner.js +981 -0
  118. package/dist/hierarchical-planner.js.map +1 -0
  119. package/dist/index.d.ts +121 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +123 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/intent-inference.d.ts +103 -0
  124. package/dist/intent-inference.d.ts.map +1 -0
  125. package/dist/intent-inference.js +605 -0
  126. package/dist/intent-inference.js.map +1 -0
  127. package/dist/interrupt-manager.d.ts +143 -0
  128. package/dist/interrupt-manager.d.ts.map +1 -0
  129. package/dist/interrupt-manager.js +196 -0
  130. package/dist/interrupt-manager.js.map +1 -0
  131. package/dist/kernel.d.ts +564 -0
  132. package/dist/kernel.d.ts.map +1 -0
  133. package/dist/kernel.js +1419 -0
  134. package/dist/kernel.js.map +1 -0
  135. package/dist/language-support.d.ts +232 -0
  136. package/dist/language-support.d.ts.map +1 -0
  137. package/dist/language-support.js +1134 -0
  138. package/dist/language-support.js.map +1 -0
  139. package/dist/llm-client.d.ts +82 -0
  140. package/dist/llm-client.d.ts.map +1 -0
  141. package/dist/llm-client.js +475 -0
  142. package/dist/llm-client.js.map +1 -0
  143. package/dist/mcp-client.d.ts +232 -0
  144. package/dist/mcp-client.d.ts.map +1 -0
  145. package/dist/mcp-client.js +718 -0
  146. package/dist/mcp-client.js.map +1 -0
  147. package/dist/memory-manager.d.ts +200 -0
  148. package/dist/memory-manager.d.ts.map +1 -0
  149. package/dist/memory-manager.js +568 -0
  150. package/dist/memory-manager.js.map +1 -0
  151. package/dist/memory.d.ts +87 -0
  152. package/dist/memory.d.ts.map +1 -0
  153. package/dist/memory.js +341 -0
  154. package/dist/memory.js.map +1 -0
  155. package/dist/model-router.d.ts +245 -0
  156. package/dist/model-router.d.ts.map +1 -0
  157. package/dist/model-router.js +632 -0
  158. package/dist/model-router.js.map +1 -0
  159. package/dist/parallel-executor.d.ts +125 -0
  160. package/dist/parallel-executor.d.ts.map +1 -0
  161. package/dist/parallel-executor.js +201 -0
  162. package/dist/parallel-executor.js.map +1 -0
  163. package/dist/perf-optimizer.d.ts +212 -0
  164. package/dist/perf-optimizer.d.ts.map +1 -0
  165. package/dist/perf-optimizer.js +721 -0
  166. package/dist/perf-optimizer.js.map +1 -0
  167. package/dist/persona.d.ts +305 -0
  168. package/dist/persona.d.ts.map +1 -0
  169. package/dist/persona.js +887 -0
  170. package/dist/persona.js.map +1 -0
  171. package/dist/planner.d.ts +70 -0
  172. package/dist/planner.d.ts.map +1 -0
  173. package/dist/planner.js +264 -0
  174. package/dist/planner.js.map +1 -0
  175. package/dist/qa-pipeline.d.ts +365 -0
  176. package/dist/qa-pipeline.d.ts.map +1 -0
  177. package/dist/qa-pipeline.js +1352 -0
  178. package/dist/qa-pipeline.js.map +1 -0
  179. package/dist/reasoning-adapter.d.ts +116 -0
  180. package/dist/reasoning-adapter.d.ts.map +1 -0
  181. package/dist/reasoning-adapter.js +187 -0
  182. package/dist/reasoning-adapter.js.map +1 -0
  183. package/dist/role-registry.d.ts +55 -0
  184. package/dist/role-registry.d.ts.map +1 -0
  185. package/dist/role-registry.js +192 -0
  186. package/dist/role-registry.js.map +1 -0
  187. package/dist/sandbox-tiers.d.ts +327 -0
  188. package/dist/sandbox-tiers.d.ts.map +1 -0
  189. package/dist/sandbox-tiers.js +928 -0
  190. package/dist/sandbox-tiers.js.map +1 -0
  191. package/dist/security-scanner.d.ts +222 -0
  192. package/dist/security-scanner.d.ts.map +1 -0
  193. package/dist/security-scanner.js +1129 -0
  194. package/dist/security-scanner.js.map +1 -0
  195. package/dist/security.d.ts +93 -0
  196. package/dist/security.d.ts.map +1 -0
  197. package/dist/security.js +393 -0
  198. package/dist/security.js.map +1 -0
  199. package/dist/self-reflection.d.ts +397 -0
  200. package/dist/self-reflection.d.ts.map +1 -0
  201. package/dist/self-reflection.js +908 -0
  202. package/dist/self-reflection.js.map +1 -0
  203. package/dist/session-persistence.d.ts +191 -0
  204. package/dist/session-persistence.d.ts.map +1 -0
  205. package/dist/session-persistence.js +395 -0
  206. package/dist/session-persistence.js.map +1 -0
  207. package/dist/speculative-executor.d.ts +210 -0
  208. package/dist/speculative-executor.d.ts.map +1 -0
  209. package/dist/speculative-executor.js +618 -0
  210. package/dist/speculative-executor.js.map +1 -0
  211. package/dist/state-machine.d.ts +289 -0
  212. package/dist/state-machine.d.ts.map +1 -0
  213. package/dist/state-machine.js +695 -0
  214. package/dist/state-machine.js.map +1 -0
  215. package/dist/sub-agent.d.ts +177 -0
  216. package/dist/sub-agent.d.ts.map +1 -0
  217. package/dist/sub-agent.js +303 -0
  218. package/dist/sub-agent.js.map +1 -0
  219. package/dist/system-prompt.d.ts +26 -0
  220. package/dist/system-prompt.d.ts.map +1 -0
  221. package/dist/system-prompt.js +84 -0
  222. package/dist/system-prompt.js.map +1 -0
  223. package/dist/test-intelligence.d.ts +439 -0
  224. package/dist/test-intelligence.d.ts.map +1 -0
  225. package/dist/test-intelligence.js +1165 -0
  226. package/dist/test-intelligence.js.map +1 -0
  227. package/dist/types.d.ts +632 -0
  228. package/dist/types.d.ts.map +1 -0
  229. package/dist/types.js +6 -0
  230. package/dist/types.js.map +1 -0
  231. package/dist/vector-index.d.ts +314 -0
  232. package/dist/vector-index.d.ts.map +1 -0
  233. package/dist/vector-index.js +618 -0
  234. package/dist/vector-index.js.map +1 -0
  235. package/package.json +41 -0
@@ -0,0 +1,524 @@
1
+ /**
2
+ * @module conflict-resolver
3
+ * @description Detects and resolves conflicts when multiple agents modify related files.
4
+ * Supports same-file edits, import breaks, type mismatches, and test regressions.
5
+ *
6
+ * Includes a pure-TypeScript LCS-based 3-way merge algorithm (no external deps).
7
+ */
8
+ // ─── Regex for detecting export changes ───
9
+ const EXPORT_CHANGE_RE = /^[+-]\s*export\s+(?:declare\s+)?(?:abstract\s+)?(?:async\s+)?(?:function\s*\*?|class|const|let|var|interface|type|enum)\s+(\w+)/gm;
10
+ const EXPORT_LIST_CHANGE_RE = /^[+-]\s*export\s+\{([^}]*)\}/gm;
11
+ const IMPORT_RE = /^[+-]\s*import\s+(?:type\s+)?(?:\{([^}]*)\}|(\w+)|\*\s+as\s+(\w+))\s+from\s+["']([^"']+)["']/gm;
12
+ // ─── LCS-based Diff Algorithm (pure TypeScript, no deps) ───
13
+ /**
14
+ * Compute the Longest Common Subsequence table for two string arrays.
15
+ *
16
+ * Returns a 2D table where `table[i][j]` is the length of the LCS
17
+ * of `a[0..i-1]` and `b[0..j-1]`.
18
+ *
19
+ * @param a - First array of lines
20
+ * @param b - Second array of lines
21
+ * @returns LCS length table (dimensions: (a.length+1) x (b.length+1))
22
+ */
23
+ export function lcs(a, b) {
24
+ const m = a.length;
25
+ const n = b.length;
26
+ const table = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
27
+ for (let i = 1; i <= m; i++) {
28
+ for (let j = 1; j <= n; j++) {
29
+ if (a[i - 1] === b[j - 1]) {
30
+ table[i][j] = table[i - 1][j - 1] + 1;
31
+ }
32
+ else {
33
+ table[i][j] = Math.max(table[i - 1][j], table[i][j - 1]);
34
+ }
35
+ }
36
+ }
37
+ return table;
38
+ }
39
+ /**
40
+ * Compute a line-level diff between base and modified text using LCS.
41
+ *
42
+ * Produces a sequence of DiffHunks representing equal, insert, and delete operations
43
+ * that transform `base` into `modified`.
44
+ *
45
+ * @param base - Original lines
46
+ * @param modified - Modified lines
47
+ * @returns Array of DiffHunks in order
48
+ */
49
+ export function diff(base, modified) {
50
+ const table = lcs(base, modified);
51
+ const hunks = [];
52
+ // Backtrack through LCS table to build diff
53
+ let i = base.length;
54
+ let j = modified.length;
55
+ const ops = [];
56
+ while (i > 0 || j > 0) {
57
+ if (i > 0 && j > 0 && base[i - 1] === modified[j - 1]) {
58
+ ops.push({ type: "equal", baseLine: base[i - 1], modLine: modified[j - 1], bi: i - 1, mi: j - 1 });
59
+ i--;
60
+ j--;
61
+ }
62
+ else if (j > 0 && (i === 0 || table[i][j - 1] >= table[i - 1][j])) {
63
+ ops.push({ type: "insert", baseLine: "", modLine: modified[j - 1], bi: i, mi: j - 1 });
64
+ j--;
65
+ }
66
+ else {
67
+ ops.push({ type: "delete", baseLine: base[i - 1], modLine: "", bi: i - 1, mi: j });
68
+ i--;
69
+ }
70
+ }
71
+ ops.reverse();
72
+ // Group consecutive operations of the same type into hunks
73
+ let current = null;
74
+ for (const op of ops) {
75
+ if (current && current.type === op.type) {
76
+ current.lines.push(op.type === "insert" ? op.modLine : op.baseLine);
77
+ }
78
+ else {
79
+ if (current)
80
+ hunks.push(current);
81
+ current = {
82
+ type: op.type,
83
+ lines: [op.type === "insert" ? op.modLine : op.baseLine],
84
+ baseStart: op.bi,
85
+ modifiedStart: op.mi,
86
+ };
87
+ }
88
+ }
89
+ if (current)
90
+ hunks.push(current);
91
+ return hunks;
92
+ }
93
+ /**
94
+ * Perform a 3-way merge of two modifications against a common base.
95
+ *
96
+ * Algorithm:
97
+ * 1. Split base, ours, theirs into lines
98
+ * 2. Compute diff(base, ours) and diff(base, theirs)
99
+ * 3. Walk through base lines, applying changes from both sides:
100
+ * - If only one side changed a region: take that change
101
+ * - If both sides made identical changes: take either
102
+ * - If both sides changed differently: mark as CONFLICT
103
+ * 4. Return merged result or conflict markers
104
+ *
105
+ * @param base - Original file content
106
+ * @param ours - Content after agent A's modifications
107
+ * @param theirs - Content after agent B's modifications
108
+ * @returns MergeResult with merged content and conflict details
109
+ */
110
+ export function merge3way(base, ours, theirs) {
111
+ const baseLines = base.split("\n");
112
+ const oursLines = ours.split("\n");
113
+ const theirsLines = theirs.split("\n");
114
+ // Build change maps: for each base line index, what did each side do?
115
+ const oursChanges = buildChangeMap(baseLines, oursLines);
116
+ const theirsChanges = buildChangeMap(baseLines, theirsLines);
117
+ const mergedLines = [];
118
+ const conflicts = [];
119
+ let stats = { added: 0, removed: 0, conflicted: 0 };
120
+ let baseIdx = 0;
121
+ while (baseIdx <= baseLines.length) {
122
+ const oursEntry = oursChanges.get(baseIdx);
123
+ const theirsEntry = theirsChanges.get(baseIdx);
124
+ const oursChanged = oursEntry !== undefined;
125
+ const theirsChanged = theirsEntry !== undefined;
126
+ if (!oursChanged && !theirsChanged) {
127
+ // Neither side changed this line — keep base
128
+ if (baseIdx < baseLines.length) {
129
+ mergedLines.push(baseLines[baseIdx]);
130
+ }
131
+ baseIdx++;
132
+ continue;
133
+ }
134
+ if (oursChanged && !theirsChanged) {
135
+ // Only ours changed — take ours
136
+ applyChange(oursEntry, mergedLines, stats);
137
+ baseIdx = oursEntry.newBaseIdx;
138
+ continue;
139
+ }
140
+ if (!oursChanged && theirsChanged) {
141
+ // Only theirs changed — take theirs
142
+ applyChange(theirsEntry, mergedLines, stats);
143
+ baseIdx = theirsEntry.newBaseIdx;
144
+ continue;
145
+ }
146
+ // Both sides changed — check if identical
147
+ if (oursEntry.removedLines.join("\n") === theirsEntry.removedLines.join("\n") &&
148
+ oursEntry.insertedLines.join("\n") === theirsEntry.insertedLines.join("\n")) {
149
+ // Identical changes — take either
150
+ applyChange(oursEntry, mergedLines, stats);
151
+ baseIdx = Math.max(oursEntry.newBaseIdx, theirsEntry.newBaseIdx);
152
+ continue;
153
+ }
154
+ // Conflict — both sides changed differently
155
+ const conflictBase = oursEntry.removedLines.length > 0
156
+ ? oursEntry.removedLines
157
+ : theirsEntry.removedLines;
158
+ const conflict = {
159
+ lineStart: mergedLines.length,
160
+ ours: oursEntry.insertedLines,
161
+ theirs: theirsEntry.insertedLines,
162
+ base: conflictBase,
163
+ };
164
+ conflicts.push(conflict);
165
+ stats.conflicted++;
166
+ // Add conflict markers to merged output
167
+ mergedLines.push("<<<<<<< ours");
168
+ mergedLines.push(...oursEntry.insertedLines);
169
+ mergedLines.push("=======");
170
+ mergedLines.push(...theirsEntry.insertedLines);
171
+ mergedLines.push(">>>>>>> theirs");
172
+ baseIdx = Math.max(oursEntry.newBaseIdx, theirsEntry.newBaseIdx);
173
+ }
174
+ return {
175
+ success: conflicts.length === 0,
176
+ merged: mergedLines.join("\n"),
177
+ conflicts,
178
+ stats,
179
+ };
180
+ }
181
+ /**
182
+ * Build a map of base line indices to change regions.
183
+ *
184
+ * Compares base to modified using the LCS diff, then groups consecutive
185
+ * non-equal operations into ChangeEntry objects keyed by their starting
186
+ * base index.
187
+ *
188
+ * @param baseLines - Original lines
189
+ * @param modifiedLines - Modified lines
190
+ * @returns Map from base line index to ChangeEntry
191
+ */
192
+ function buildChangeMap(baseLines, modifiedLines) {
193
+ const hunks = diff(baseLines, modifiedLines);
194
+ const changeMap = new Map();
195
+ // Group consecutive non-equal hunks into change entries
196
+ let i = 0;
197
+ while (i < hunks.length) {
198
+ const hunk = hunks[i];
199
+ if (hunk.type === "equal") {
200
+ i++;
201
+ continue;
202
+ }
203
+ // Start of a change region — collect consecutive non-equal hunks
204
+ const startBaseIdx = hunk.baseStart;
205
+ const removed = [];
206
+ const inserted = [];
207
+ let endBaseIdx = startBaseIdx;
208
+ while (i < hunks.length && hunks[i].type !== "equal") {
209
+ const h = hunks[i];
210
+ if (h.type === "delete") {
211
+ removed.push(...h.lines);
212
+ endBaseIdx = h.baseStart + h.lines.length;
213
+ }
214
+ else if (h.type === "insert") {
215
+ inserted.push(...h.lines);
216
+ }
217
+ i++;
218
+ }
219
+ changeMap.set(startBaseIdx, {
220
+ baseIdx: startBaseIdx,
221
+ removedLines: removed,
222
+ insertedLines: inserted,
223
+ newBaseIdx: endBaseIdx,
224
+ });
225
+ }
226
+ return changeMap;
227
+ }
228
+ /**
229
+ * Apply a ChangeEntry to the merged output lines.
230
+ *
231
+ * @param entry - The change to apply
232
+ * @param mergedLines - Output array to append to
233
+ * @param stats - Stats object to update
234
+ */
235
+ function applyChange(entry, mergedLines, stats) {
236
+ stats.removed += entry.removedLines.length;
237
+ stats.added += entry.insertedLines.length;
238
+ mergedLines.push(...entry.insertedLines);
239
+ }
240
+ // ─── ConflictResolver ───
241
+ /**
242
+ * Detects and resolves conflicts when multiple agents modify related files.
243
+ *
244
+ * Supports automatic three-way merging for non-overlapping edits
245
+ * using a pure-TypeScript LCS-based diff algorithm,
246
+ * and escalates to user approval when automatic resolution fails.
247
+ */
248
+ export class ConflictResolver {
249
+ /**
250
+ * Detect conflicts between completed task results.
251
+ *
252
+ * Checks for:
253
+ * - SAME_FILE_EDIT: Two agents modified the same file
254
+ * - IMPORT_BREAK: One agent changed exports that another agent imports
255
+ *
256
+ * @param results - Array of task results from different agents
257
+ * @returns Array of detected conflicts
258
+ */
259
+ detectConflicts(results) {
260
+ const conflicts = [];
261
+ // Index: path → list of { taskId, agentId, diff }
262
+ const fileIndex = new Map();
263
+ for (const result of results) {
264
+ for (const changed of result.changedFiles) {
265
+ let list = fileIndex.get(changed.path);
266
+ if (!list) {
267
+ list = [];
268
+ fileIndex.set(changed.path, list);
269
+ }
270
+ list.push({
271
+ taskId: result.taskId,
272
+ agentId: result.agentId,
273
+ diff: changed.diff,
274
+ });
275
+ }
276
+ }
277
+ // 1. Detect SAME_FILE_EDIT conflicts
278
+ for (const [path, editors] of fileIndex) {
279
+ if (editors.length < 2)
280
+ continue;
281
+ for (let i = 0; i < editors.length; i++) {
282
+ for (let j = i + 1; j < editors.length; j++) {
283
+ const a = editors[i];
284
+ const b = editors[j];
285
+ const severity = this.assessSameFileSeverity(a.diff, b.diff);
286
+ conflicts.push({
287
+ type: "SAME_FILE_EDIT",
288
+ fileA: { path, agentId: a.agentId, diff: a.diff },
289
+ fileB: { path, agentId: b.agentId, diff: b.diff },
290
+ severity,
291
+ });
292
+ }
293
+ }
294
+ }
295
+ // 2. Detect IMPORT_BREAK conflicts
296
+ for (let i = 0; i < results.length; i++) {
297
+ const exporterResult = results[i];
298
+ const changedExports = this.extractChangedExports(exporterResult);
299
+ if (changedExports.length === 0)
300
+ continue;
301
+ for (let j = 0; j < results.length; j++) {
302
+ if (i === j)
303
+ continue;
304
+ const importerResult = results[j];
305
+ const importedSymbols = this.extractImportedSymbols(importerResult);
306
+ for (const exp of changedExports) {
307
+ for (const imp of importedSymbols) {
308
+ if (imp.symbols.some((s) => exp.symbols.includes(s)) &&
309
+ imp.fromPath.includes(exp.filePath.replace(/\.[tj]sx?$/, ""))) {
310
+ const exportFile = exporterResult.changedFiles.find((f) => f.path === exp.filePath);
311
+ const importFile = importerResult.changedFiles[0];
312
+ if (exportFile && importFile) {
313
+ conflicts.push({
314
+ type: "IMPORT_BREAK",
315
+ fileA: {
316
+ path: exp.filePath,
317
+ agentId: exporterResult.agentId,
318
+ diff: exportFile.diff,
319
+ },
320
+ fileB: {
321
+ path: importFile.path,
322
+ agentId: importerResult.agentId,
323
+ diff: importFile.diff,
324
+ },
325
+ severity: "high",
326
+ });
327
+ }
328
+ }
329
+ }
330
+ }
331
+ }
332
+ }
333
+ return conflicts;
334
+ }
335
+ /**
336
+ * Resolve detected conflicts using automatic strategies.
337
+ *
338
+ * Strategy per conflict type:
339
+ * - SAME_FILE_EDIT: attempt 3-way merge via LCS diff; auto-resolve if clean, escalate if conflicts
340
+ * - IMPORT_BREAK: RE_RUN the dependent (importing) task
341
+ * - TYPE_MISMATCH: RE_RUN the dependent task
342
+ * - TEST_REGRESSION: RE_RUN the causing task
343
+ *
344
+ * @param conflicts - Array of detected conflicts
345
+ * @param baseContents - Optional map of file path to base (original) content for 3-way merge
346
+ * @returns Resolution for each conflict
347
+ */
348
+ async resolveConflicts(conflicts, baseContents) {
349
+ const resolutions = [];
350
+ for (const conflict of conflicts) {
351
+ switch (conflict.type) {
352
+ case "SAME_FILE_EDIT": {
353
+ const base = baseContents?.get(conflict.fileA.path) ?? "";
354
+ const mergeResult = merge3way(base, conflict.fileA.diff, conflict.fileB.diff);
355
+ if (mergeResult.success) {
356
+ resolutions.push({
357
+ strategy: "AUTO_MERGE",
358
+ mergedDiff: mergeResult.merged,
359
+ });
360
+ }
361
+ else {
362
+ resolutions.push({
363
+ strategy: "USER_APPROVAL",
364
+ options: [
365
+ `Accept changes from agent ${conflict.fileA.agentId}`,
366
+ `Accept changes from agent ${conflict.fileB.agentId}`,
367
+ "Manually merge both changes",
368
+ ...mergeResult.conflicts.map((c) => `Conflict at line ${c.lineStart}: ${c.ours.length} ours vs ${c.theirs.length} theirs lines`),
369
+ ],
370
+ });
371
+ }
372
+ break;
373
+ }
374
+ case "IMPORT_BREAK":
375
+ case "TYPE_MISMATCH": {
376
+ resolutions.push({
377
+ strategy: "RE_RUN",
378
+ taskId: conflict.fileB.agentId,
379
+ });
380
+ break;
381
+ }
382
+ case "TEST_REGRESSION": {
383
+ resolutions.push({
384
+ strategy: "RE_RUN",
385
+ taskId: conflict.fileA.agentId,
386
+ });
387
+ break;
388
+ }
389
+ default: {
390
+ resolutions.push({
391
+ strategy: "USER_APPROVAL",
392
+ options: ["Review conflict manually"],
393
+ });
394
+ }
395
+ }
396
+ }
397
+ return resolutions;
398
+ }
399
+ /**
400
+ * Perform a standalone 3-way merge for external callers.
401
+ *
402
+ * @param base - Original file content
403
+ * @param ours - Agent A's modified content
404
+ * @param theirs - Agent B's modified content
405
+ * @returns MergeResult with merged content, conflict details, and stats
406
+ */
407
+ merge(base, ours, theirs) {
408
+ return merge3way(base, ours, theirs);
409
+ }
410
+ // ─── Private helpers ───
411
+ /**
412
+ * Assess severity of a same-file edit conflict by checking
413
+ * whether the two diffs touch the same lines.
414
+ */
415
+ assessSameFileSeverity(diffA, diffB) {
416
+ const aLines = diffA.split("\n");
417
+ const bLines = diffB.split("\n");
418
+ // Quick heuristic: compute which base line indices each diff touches
419
+ const touchedA = this.extractTouchedLines(aLines);
420
+ const touchedB = this.extractTouchedLines(bLines);
421
+ if (touchedA.size === 0 || touchedB.size === 0) {
422
+ return "low";
423
+ }
424
+ let overlapping = 0;
425
+ for (const line of touchedA) {
426
+ if (touchedB.has(line))
427
+ overlapping++;
428
+ }
429
+ if (overlapping === 0)
430
+ return "low";
431
+ if (overlapping < 3)
432
+ return "medium";
433
+ if (overlapping < 10)
434
+ return "high";
435
+ return "critical";
436
+ }
437
+ /**
438
+ * Extract base line indices touched by a diff (from unified diff format).
439
+ */
440
+ extractTouchedLines(lines) {
441
+ const touched = new Set();
442
+ let currentLine = 0;
443
+ const hunkHeaderRe = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/;
444
+ for (const line of lines) {
445
+ const hunkMatch = hunkHeaderRe.exec(line);
446
+ if (hunkMatch) {
447
+ currentLine = parseInt(hunkMatch[1], 10) - 1;
448
+ continue;
449
+ }
450
+ if (line.startsWith("-") && !line.startsWith("---")) {
451
+ touched.add(currentLine);
452
+ currentLine++;
453
+ }
454
+ else if (line.startsWith("+") && !line.startsWith("+++")) {
455
+ touched.add(currentLine);
456
+ }
457
+ else if (!line.startsWith("\\")) {
458
+ currentLine++;
459
+ }
460
+ }
461
+ return touched;
462
+ }
463
+ /**
464
+ * Extract symbols that were added/removed from export statements
465
+ * across all changed files in a result.
466
+ */
467
+ extractChangedExports(result) {
468
+ const exports = [];
469
+ for (const changed of result.changedFiles) {
470
+ const symbols = [];
471
+ let match;
472
+ // Named export changes
473
+ const namedRe = new RegExp(EXPORT_CHANGE_RE.source, "gm");
474
+ while ((match = namedRe.exec(changed.diff)) !== null) {
475
+ symbols.push(match[1]);
476
+ }
477
+ // Export list changes
478
+ const listRe = new RegExp(EXPORT_LIST_CHANGE_RE.source, "gm");
479
+ while ((match = listRe.exec(changed.diff)) !== null) {
480
+ const names = match[1]
481
+ .split(",")
482
+ .map((s) => s.trim().split(/\s+as\s+/)[0])
483
+ .filter(Boolean);
484
+ symbols.push(...names);
485
+ }
486
+ if (symbols.length > 0) {
487
+ exports.push({ filePath: changed.path, symbols: [...new Set(symbols)] });
488
+ }
489
+ }
490
+ return exports;
491
+ }
492
+ /**
493
+ * Extract symbols imported by changed files in a result.
494
+ */
495
+ extractImportedSymbols(result) {
496
+ const imports = [];
497
+ for (const changed of result.changedFiles) {
498
+ let match;
499
+ const importRe = new RegExp(IMPORT_RE.source, "gm");
500
+ while ((match = importRe.exec(changed.diff)) !== null) {
501
+ const namedGroup = match[1];
502
+ const defaultImport = match[2];
503
+ const namespaceImport = match[3];
504
+ const fromPath = match[4];
505
+ const symbols = [];
506
+ if (namedGroup) {
507
+ symbols.push(...namedGroup
508
+ .split(",")
509
+ .map((s) => s.trim().split(/\s+as\s+/)[0])
510
+ .filter(Boolean));
511
+ }
512
+ if (defaultImport)
513
+ symbols.push(defaultImport);
514
+ if (namespaceImport)
515
+ symbols.push(namespaceImport);
516
+ if (symbols.length > 0) {
517
+ imports.push({ symbols, fromPath });
518
+ }
519
+ }
520
+ }
521
+ return imports;
522
+ }
523
+ }
524
+ //# sourceMappingURL=conflict-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-resolver.js","sourceRoot":"","sources":["../src/conflict-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @module constants
3
+ * @description YUAN Agent 상수 정의.
4
+ *
5
+ * 보안 관련 패턴(DANGEROUS_PATTERNS, SENSITIVE_FILE_PATTERNS, ALLOWED_EXECUTABLES)은
6
+ * security.ts가 SSOT이며, 여기서는 re-export만 한다.
7
+ */
8
+ import type { PlanLimits, PlanTier, LLMProvider } from "./types.js";
9
+ /**
10
+ * 플랜별 리소스 제한 (SSOT — 설계 문서 11.2 기준)
11
+ */
12
+ export declare const PLAN_LIMITS: Record<PlanTier, PlanLimits>;
13
+ /**
14
+ * 프로바이더별 기본 모델
15
+ */
16
+ export declare const MODEL_DEFAULTS: Record<LLMProvider, string>;
17
+ /**
18
+ * 프로바이더별 API Base URL
19
+ */
20
+ export declare const PROVIDER_BASE_URLS: Record<LLMProvider, string>;
21
+ /**
22
+ * 도구 결과 크기 제한 (바이트)
23
+ */
24
+ export declare const TOOL_RESULT_LIMITS: Record<string, number>;
25
+ /**
26
+ * 히스토리 압축 설정
27
+ */
28
+ export declare const HISTORY_COMPACTION: {
29
+ /** 원본 유지하는 최근 iteration 수 */
30
+ readonly recentWindow: 5;
31
+ /** 도구 결과만 요약으로 교체하는 범위 */
32
+ readonly summaryWindow: 10;
33
+ };
34
+ /**
35
+ * YUAN.md 탐색 경로 (우선순위 순)
36
+ */
37
+ export declare const YUAN_MD_SEARCH_PATHS: string[];
38
+ /**
39
+ * 기본 AgentLoop 설정값
40
+ */
41
+ export declare const DEFAULT_LOOP_CONFIG: {
42
+ readonly maxIterations: 25;
43
+ readonly maxTokensPerIteration: 8000;
44
+ readonly totalTokenBudget: 200000;
45
+ };
46
+ /** Design Mode: allowed edit paths (Governor enforced) */
47
+ export declare const DESIGN_ALLOWED_PATHS: string[];
48
+ /** Design Mode: blocked edit paths */
49
+ export declare const DESIGN_BLOCKED_PATHS: string[];
50
+ /** Design Mode: security scan patterns */
51
+ export declare const DESIGN_SECURITY_PATTERNS: Record<string, RegExp[]>;
52
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMpE;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAiCpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAMtD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAM1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMrD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,6BAA6B;;IAE7B,0BAA0B;;CAElB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,EAKxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,UAQhC,CAAC;AAEF,sCAAsC;AACtC,eAAO,MAAM,oBAAoB,UAQhC,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAe7D,CAAC"}