@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.
- package/LICENSE +663 -0
- package/README.md +15 -0
- package/dist/__tests__/context-manager.test.d.ts +6 -0
- package/dist/__tests__/context-manager.test.d.ts.map +1 -0
- package/dist/__tests__/context-manager.test.js +220 -0
- package/dist/__tests__/context-manager.test.js.map +1 -0
- package/dist/__tests__/governor.test.d.ts +6 -0
- package/dist/__tests__/governor.test.d.ts.map +1 -0
- package/dist/__tests__/governor.test.js +210 -0
- package/dist/__tests__/governor.test.js.map +1 -0
- package/dist/__tests__/model-router.test.d.ts +6 -0
- package/dist/__tests__/model-router.test.d.ts.map +1 -0
- package/dist/__tests__/model-router.test.js +329 -0
- package/dist/__tests__/model-router.test.js.map +1 -0
- package/dist/agent-logger.d.ts +384 -0
- package/dist/agent-logger.d.ts.map +1 -0
- package/dist/agent-logger.js +820 -0
- package/dist/agent-logger.js.map +1 -0
- package/dist/agent-loop.d.ts +163 -0
- package/dist/agent-loop.d.ts.map +1 -0
- package/dist/agent-loop.js +609 -0
- package/dist/agent-loop.js.map +1 -0
- package/dist/agent-modes.d.ts +85 -0
- package/dist/agent-modes.d.ts.map +1 -0
- package/dist/agent-modes.js +418 -0
- package/dist/agent-modes.js.map +1 -0
- package/dist/approval.d.ts +137 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +299 -0
- package/dist/approval.js.map +1 -0
- package/dist/async-completion-queue.d.ts +56 -0
- package/dist/async-completion-queue.d.ts.map +1 -0
- package/dist/async-completion-queue.js +77 -0
- package/dist/async-completion-queue.js.map +1 -0
- package/dist/auto-fix.d.ts +174 -0
- package/dist/auto-fix.d.ts.map +1 -0
- package/dist/auto-fix.js +319 -0
- package/dist/auto-fix.js.map +1 -0
- package/dist/codebase-context.d.ts +396 -0
- package/dist/codebase-context.d.ts.map +1 -0
- package/dist/codebase-context.js +1260 -0
- package/dist/codebase-context.js.map +1 -0
- package/dist/conflict-resolver.d.ts +191 -0
- package/dist/conflict-resolver.d.ts.map +1 -0
- package/dist/conflict-resolver.js +524 -0
- package/dist/conflict-resolver.js.map +1 -0
- package/dist/constants.d.ts +52 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +141 -0
- package/dist/constants.js.map +1 -0
- package/dist/context-budget.d.ts +435 -0
- package/dist/context-budget.d.ts.map +1 -0
- package/dist/context-budget.js +903 -0
- package/dist/context-budget.js.map +1 -0
- package/dist/context-compressor.d.ts +143 -0
- package/dist/context-compressor.d.ts.map +1 -0
- package/dist/context-compressor.js +511 -0
- package/dist/context-compressor.js.map +1 -0
- package/dist/context-manager.d.ts +112 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +247 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/continuous-reflection.d.ts +267 -0
- package/dist/continuous-reflection.d.ts.map +1 -0
- package/dist/continuous-reflection.js +338 -0
- package/dist/continuous-reflection.js.map +1 -0
- package/dist/cross-file-refactor.d.ts +352 -0
- package/dist/cross-file-refactor.d.ts.map +1 -0
- package/dist/cross-file-refactor.js +1544 -0
- package/dist/cross-file-refactor.js.map +1 -0
- package/dist/dag-orchestrator.d.ts +138 -0
- package/dist/dag-orchestrator.d.ts.map +1 -0
- package/dist/dag-orchestrator.js +379 -0
- package/dist/dag-orchestrator.js.map +1 -0
- package/dist/debate-orchestrator.d.ts +301 -0
- package/dist/debate-orchestrator.d.ts.map +1 -0
- package/dist/debate-orchestrator.js +719 -0
- package/dist/debate-orchestrator.js.map +1 -0
- package/dist/dependency-analyzer.d.ts +113 -0
- package/dist/dependency-analyzer.d.ts.map +1 -0
- package/dist/dependency-analyzer.js +444 -0
- package/dist/dependency-analyzer.js.map +1 -0
- package/dist/design-loop.d.ts +59 -0
- package/dist/design-loop.d.ts.map +1 -0
- package/dist/design-loop.js +344 -0
- package/dist/design-loop.js.map +1 -0
- package/dist/doc-intelligence.d.ts +383 -0
- package/dist/doc-intelligence.d.ts.map +1 -0
- package/dist/doc-intelligence.js +1307 -0
- package/dist/doc-intelligence.js.map +1 -0
- package/dist/dynamic-role-generator.d.ts +76 -0
- package/dist/dynamic-role-generator.d.ts.map +1 -0
- package/dist/dynamic-role-generator.js +194 -0
- package/dist/dynamic-role-generator.js.map +1 -0
- package/dist/errors.d.ts +69 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +102 -0
- package/dist/errors.js.map +1 -0
- package/dist/event-bus.d.ts +159 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +305 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/execution-engine.d.ts +425 -0
- package/dist/execution-engine.d.ts.map +1 -0
- package/dist/execution-engine.js +1555 -0
- package/dist/execution-engine.js.map +1 -0
- package/dist/git-intelligence.d.ts +306 -0
- package/dist/git-intelligence.d.ts.map +1 -0
- package/dist/git-intelligence.js +1099 -0
- package/dist/git-intelligence.js.map +1 -0
- package/dist/governor.d.ts +77 -0
- package/dist/governor.d.ts.map +1 -0
- package/dist/governor.js +161 -0
- package/dist/governor.js.map +1 -0
- package/dist/hierarchical-planner.d.ts +313 -0
- package/dist/hierarchical-planner.d.ts.map +1 -0
- package/dist/hierarchical-planner.js +981 -0
- package/dist/hierarchical-planner.js.map +1 -0
- package/dist/index.d.ts +121 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +123 -0
- package/dist/index.js.map +1 -0
- package/dist/intent-inference.d.ts +103 -0
- package/dist/intent-inference.d.ts.map +1 -0
- package/dist/intent-inference.js +605 -0
- package/dist/intent-inference.js.map +1 -0
- package/dist/interrupt-manager.d.ts +143 -0
- package/dist/interrupt-manager.d.ts.map +1 -0
- package/dist/interrupt-manager.js +196 -0
- package/dist/interrupt-manager.js.map +1 -0
- package/dist/kernel.d.ts +564 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +1419 -0
- package/dist/kernel.js.map +1 -0
- package/dist/language-support.d.ts +232 -0
- package/dist/language-support.d.ts.map +1 -0
- package/dist/language-support.js +1134 -0
- package/dist/language-support.js.map +1 -0
- package/dist/llm-client.d.ts +82 -0
- package/dist/llm-client.d.ts.map +1 -0
- package/dist/llm-client.js +475 -0
- package/dist/llm-client.js.map +1 -0
- package/dist/mcp-client.d.ts +232 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +718 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/memory-manager.d.ts +200 -0
- package/dist/memory-manager.d.ts.map +1 -0
- package/dist/memory-manager.js +568 -0
- package/dist/memory-manager.js.map +1 -0
- package/dist/memory.d.ts +87 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +341 -0
- package/dist/memory.js.map +1 -0
- package/dist/model-router.d.ts +245 -0
- package/dist/model-router.d.ts.map +1 -0
- package/dist/model-router.js +632 -0
- package/dist/model-router.js.map +1 -0
- package/dist/parallel-executor.d.ts +125 -0
- package/dist/parallel-executor.d.ts.map +1 -0
- package/dist/parallel-executor.js +201 -0
- package/dist/parallel-executor.js.map +1 -0
- package/dist/perf-optimizer.d.ts +212 -0
- package/dist/perf-optimizer.d.ts.map +1 -0
- package/dist/perf-optimizer.js +721 -0
- package/dist/perf-optimizer.js.map +1 -0
- package/dist/persona.d.ts +305 -0
- package/dist/persona.d.ts.map +1 -0
- package/dist/persona.js +887 -0
- package/dist/persona.js.map +1 -0
- package/dist/planner.d.ts +70 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +264 -0
- package/dist/planner.js.map +1 -0
- package/dist/qa-pipeline.d.ts +365 -0
- package/dist/qa-pipeline.d.ts.map +1 -0
- package/dist/qa-pipeline.js +1352 -0
- package/dist/qa-pipeline.js.map +1 -0
- package/dist/reasoning-adapter.d.ts +116 -0
- package/dist/reasoning-adapter.d.ts.map +1 -0
- package/dist/reasoning-adapter.js +187 -0
- package/dist/reasoning-adapter.js.map +1 -0
- package/dist/role-registry.d.ts +55 -0
- package/dist/role-registry.d.ts.map +1 -0
- package/dist/role-registry.js +192 -0
- package/dist/role-registry.js.map +1 -0
- package/dist/sandbox-tiers.d.ts +327 -0
- package/dist/sandbox-tiers.d.ts.map +1 -0
- package/dist/sandbox-tiers.js +928 -0
- package/dist/sandbox-tiers.js.map +1 -0
- package/dist/security-scanner.d.ts +222 -0
- package/dist/security-scanner.d.ts.map +1 -0
- package/dist/security-scanner.js +1129 -0
- package/dist/security-scanner.js.map +1 -0
- package/dist/security.d.ts +93 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +393 -0
- package/dist/security.js.map +1 -0
- package/dist/self-reflection.d.ts +397 -0
- package/dist/self-reflection.d.ts.map +1 -0
- package/dist/self-reflection.js +908 -0
- package/dist/self-reflection.js.map +1 -0
- package/dist/session-persistence.d.ts +191 -0
- package/dist/session-persistence.d.ts.map +1 -0
- package/dist/session-persistence.js +395 -0
- package/dist/session-persistence.js.map +1 -0
- package/dist/speculative-executor.d.ts +210 -0
- package/dist/speculative-executor.d.ts.map +1 -0
- package/dist/speculative-executor.js +618 -0
- package/dist/speculative-executor.js.map +1 -0
- package/dist/state-machine.d.ts +289 -0
- package/dist/state-machine.d.ts.map +1 -0
- package/dist/state-machine.js +695 -0
- package/dist/state-machine.js.map +1 -0
- package/dist/sub-agent.d.ts +177 -0
- package/dist/sub-agent.d.ts.map +1 -0
- package/dist/sub-agent.js +303 -0
- package/dist/sub-agent.js.map +1 -0
- package/dist/system-prompt.d.ts +26 -0
- package/dist/system-prompt.d.ts.map +1 -0
- package/dist/system-prompt.js +84 -0
- package/dist/system-prompt.js.map +1 -0
- package/dist/test-intelligence.d.ts +439 -0
- package/dist/test-intelligence.d.ts.map +1 -0
- package/dist/test-intelligence.js +1165 -0
- package/dist/test-intelligence.js.map +1 -0
- package/dist/types.d.ts +632 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/vector-index.d.ts +314 -0
- package/dist/vector-index.d.ts.map +1 -0
- package/dist/vector-index.js +618 -0
- package/dist/vector-index.js.map +1 -0
- 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"}
|