nexus-prime 0.2.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/README.md +253 -0
- package/dist/agents/adapters/mcp.d.ts +21 -0
- package/dist/agents/adapters/mcp.d.ts.map +1 -0
- package/dist/agents/adapters/mcp.js +447 -0
- package/dist/agents/adapters/mcp.js.map +1 -0
- package/dist/agents/adapters.d.ts +57 -0
- package/dist/agents/adapters.d.ts.map +1 -0
- package/dist/agents/adapters.js +151 -0
- package/dist/agents/adapters.js.map +1 -0
- package/dist/agents/coordinator.d.ts +75 -0
- package/dist/agents/coordinator.d.ts.map +1 -0
- package/dist/agents/coordinator.js +339 -0
- package/dist/agents/coordinator.js.map +1 -0
- package/dist/agents/core/types.d.ts +157 -0
- package/dist/agents/core/types.d.ts.map +1 -0
- package/dist/agents/core/types.js +5 -0
- package/dist/agents/core/types.js.map +1 -0
- package/dist/agents/learner.d.ts +25 -0
- package/dist/agents/learner.d.ts.map +1 -0
- package/dist/agents/learner.js +88 -0
- package/dist/agents/learner.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +237 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +74 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +73 -0
- package/dist/config.js.map +1 -0
- package/dist/core/evolution.d.ts +122 -0
- package/dist/core/evolution.d.ts.map +1 -0
- package/dist/core/evolution.js +319 -0
- package/dist/core/evolution.js.map +1 -0
- package/dist/core/memory.d.ts +96 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +304 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/optimize.d.ts +100 -0
- package/dist/core/optimize.d.ts.map +1 -0
- package/dist/core/optimize.js +263 -0
- package/dist/core/optimize.js.map +1 -0
- package/dist/core/types.d.ts +155 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/wave.d.ts +55 -0
- package/dist/core/wave.d.ts.map +1 -0
- package/dist/core/wave.js +119 -0
- package/dist/core/wave.js.map +1 -0
- package/dist/engines/benchmark.d.ts +76 -0
- package/dist/engines/benchmark.d.ts.map +1 -0
- package/dist/engines/benchmark.js +167 -0
- package/dist/engines/benchmark.js.map +1 -0
- package/dist/engines/cache-manager.d.ts +75 -0
- package/dist/engines/cache-manager.d.ts.map +1 -0
- package/dist/engines/cache-manager.js +200 -0
- package/dist/engines/cache-manager.js.map +1 -0
- package/dist/engines/context.d.ts +50 -0
- package/dist/engines/context.d.ts.map +1 -0
- package/dist/engines/context.js +99 -0
- package/dist/engines/context.js.map +1 -0
- package/dist/engines/embedder.d.ts +55 -0
- package/dist/engines/embedder.d.ts.map +1 -0
- package/dist/engines/embedder.js +223 -0
- package/dist/engines/embedder.js.map +1 -0
- package/dist/engines/guardrails-bridge.d.ts +64 -0
- package/dist/engines/guardrails-bridge.d.ts.map +1 -0
- package/dist/engines/guardrails-bridge.js +251 -0
- package/dist/engines/guardrails-bridge.js.map +1 -0
- package/dist/engines/index.d.ts +14 -0
- package/dist/engines/index.d.ts.map +1 -0
- package/dist/engines/index.js +14 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/memory.d.ts +76 -0
- package/dist/engines/memory.d.ts.map +1 -0
- package/dist/engines/memory.js +431 -0
- package/dist/engines/memory.js.map +1 -0
- package/dist/engines/meta-learner.d.ts +87 -0
- package/dist/engines/meta-learner.d.ts.map +1 -0
- package/dist/engines/meta-learner.js +214 -0
- package/dist/engines/meta-learner.js.map +1 -0
- package/dist/engines/orchestrator.d.ts +69 -0
- package/dist/engines/orchestrator.d.ts.map +1 -0
- package/dist/engines/orchestrator.js +175 -0
- package/dist/engines/orchestrator.js.map +1 -0
- package/dist/engines/pod-network.d.ts +31 -0
- package/dist/engines/pod-network.d.ts.map +1 -0
- package/dist/engines/pod-network.js +108 -0
- package/dist/engines/pod-network.js.map +1 -0
- package/dist/engines/token-optimizer.d.ts +53 -0
- package/dist/engines/token-optimizer.d.ts.map +1 -0
- package/dist/engines/token-optimizer.js +115 -0
- package/dist/engines/token-optimizer.js.map +1 -0
- package/dist/engines/token-supremacy.d.ts +86 -0
- package/dist/engines/token-supremacy.d.ts.map +1 -0
- package/dist/engines/token-supremacy.js +403 -0
- package/dist/engines/token-supremacy.js.map +1 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +302 -0
- package/dist/index.js.map +1 -0
- package/dist/nexus-prime.d.ts +15 -0
- package/dist/nexus-prime.d.ts.map +1 -0
- package/dist/nexus-prime.js +15 -0
- package/dist/nexus-prime.js.map +1 -0
- package/dist/phantom/index.d.ts +135 -0
- package/dist/phantom/index.d.ts.map +1 -0
- package/dist/phantom/index.js +286 -0
- package/dist/phantom/index.js.map +1 -0
- package/dist/phantom/merge-oracle.d.ts +35 -0
- package/dist/phantom/merge-oracle.d.ts.map +1 -0
- package/dist/phantom/merge-oracle.js +189 -0
- package/dist/phantom/merge-oracle.js.map +1 -0
- package/dist/phantom/phase4-orchestrator.d.ts +14 -0
- package/dist/phantom/phase4-orchestrator.d.ts.map +1 -0
- package/dist/phantom/phase4-orchestrator.js +488 -0
- package/dist/phantom/phase4-orchestrator.js.map +1 -0
- package/dist/verify-guardrails.d.ts +2 -0
- package/dist/verify-guardrails.d.ts.map +1 -0
- package/dist/verify-guardrails.js +48 -0
- package/dist/verify-guardrails.js.map +1 -0
- package/dist/verify-pod-sync.d.ts +2 -0
- package/dist/verify-pod-sync.d.ts.map +1 -0
- package/dist/verify-pod-sync.js +41 -0
- package/dist/verify-pod-sync.js.map +1 -0
- package/dist/verify-substrate.d.ts +2 -0
- package/dist/verify-substrate.d.ts.map +1 -0
- package/dist/verify-substrate.js +41 -0
- package/dist/verify-substrate.js.map +1 -0
- package/dist/verify-token-scoring.d.ts +2 -0
- package/dist/verify-token-scoring.d.ts.map +1 -0
- package/dist/verify-token-scoring.js +37 -0
- package/dist/verify-token-scoring.js.map +1 -0
- package/package.json +80 -0
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phantom Workers — Parallel Git Worktree Agents
|
|
3
|
+
*
|
|
4
|
+
* Beyond sub-agents: each Phantom Worker gets an isolated git worktree,
|
|
5
|
+
* works in parallel, and the Merge Oracle picks the best result.
|
|
6
|
+
*
|
|
7
|
+
* Pattern:
|
|
8
|
+
* GhostPass (read-only analysis)
|
|
9
|
+
* → N PhantomWorkers (parallel, git worktrees)
|
|
10
|
+
* → MergeOracle (Byzantine vote, synthesize best)
|
|
11
|
+
* → LiveNexus (self-improvement trigger)
|
|
12
|
+
*/
|
|
13
|
+
import { exec as execCallback } from 'child_process';
|
|
14
|
+
import { promisify } from 'util';
|
|
15
|
+
import * as path from 'path';
|
|
16
|
+
import * as fs from 'fs';
|
|
17
|
+
import * as os from 'os';
|
|
18
|
+
import { randomUUID } from 'crypto';
|
|
19
|
+
import { MergeOracle } from './merge-oracle.js';
|
|
20
|
+
export { MergeOracle };
|
|
21
|
+
import { TokenSupremacyEngine } from '../engines/token-supremacy.js';
|
|
22
|
+
import { podNetwork } from '../engines/pod-network.js';
|
|
23
|
+
const exec = promisify(execCallback);
|
|
24
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
25
|
+
// Ghost Pass — Read-Only Pre-Flight Analysis
|
|
26
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
27
|
+
export class GhostPass {
|
|
28
|
+
tokenEngine;
|
|
29
|
+
repoRoot;
|
|
30
|
+
constructor(repoRoot) {
|
|
31
|
+
this.tokenEngine = new TokenSupremacyEngine();
|
|
32
|
+
this.repoRoot = repoRoot ?? process.cwd();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Analyze the codebase WITHOUT touching anything.
|
|
36
|
+
* Returns a reading plan + worker assignments.
|
|
37
|
+
*/
|
|
38
|
+
async analyze(goal, targetFiles) {
|
|
39
|
+
const taskId = randomUUID();
|
|
40
|
+
// Generate token-efficient reading plan
|
|
41
|
+
const readingPlan = this.tokenEngine.plan(goal, targetFiles);
|
|
42
|
+
// Identify risk areas from goal keywords
|
|
43
|
+
const riskAreas = this.detectRiskAreas(goal, targetFiles);
|
|
44
|
+
// Generate 2-3 different approach assignments
|
|
45
|
+
const workerAssignments = this.generateApproaches(goal, targetFiles, readingPlan, taskId);
|
|
46
|
+
return {
|
|
47
|
+
taskId,
|
|
48
|
+
riskAreas,
|
|
49
|
+
workerAssignments,
|
|
50
|
+
totalEstimatedTokens: readingPlan.totalEstimatedTokens,
|
|
51
|
+
readingPlan
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
detectRiskAreas(goal, files) {
|
|
55
|
+
const risks = [];
|
|
56
|
+
const goalLower = goal.toLowerCase();
|
|
57
|
+
if (goalLower.includes('auth') || goalLower.includes('security')) {
|
|
58
|
+
risks.push('Security-sensitive area: validate all changes carefully');
|
|
59
|
+
}
|
|
60
|
+
if (goalLower.includes('database') || goalLower.includes('schema')) {
|
|
61
|
+
risks.push('Schema change: ensure migration exists, check backward compat');
|
|
62
|
+
}
|
|
63
|
+
if (goalLower.includes('delete') || goalLower.includes('remove')) {
|
|
64
|
+
risks.push('Destructive operation: verify no dependents before removing');
|
|
65
|
+
}
|
|
66
|
+
if (files.some(f => f.path.includes('package.json'))) {
|
|
67
|
+
risks.push('Dependency change: run npm install after, check for version conflicts');
|
|
68
|
+
}
|
|
69
|
+
return risks;
|
|
70
|
+
}
|
|
71
|
+
generateApproaches(goal, files, readingPlan, taskId) {
|
|
72
|
+
const approaches = ['minimal', 'standard', 'thorough'];
|
|
73
|
+
const budgetPerWorker = Math.floor(readingPlan.totalEstimatedTokens * 1.5 / approaches.length);
|
|
74
|
+
return approaches.map((approach, i) => ({
|
|
75
|
+
id: `${taskId}-worker-${i}`,
|
|
76
|
+
goal,
|
|
77
|
+
files,
|
|
78
|
+
approach,
|
|
79
|
+
tokenBudget: budgetPerWorker,
|
|
80
|
+
readingPlan
|
|
81
|
+
}));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
85
|
+
// Phantom Worker — Isolated Git Worktree
|
|
86
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
87
|
+
export class PhantomWorker {
|
|
88
|
+
workerId;
|
|
89
|
+
repoRoot;
|
|
90
|
+
worktreeDir;
|
|
91
|
+
branch;
|
|
92
|
+
constructor(repoRoot) {
|
|
93
|
+
this.workerId = `phantom-${randomUUID().slice(0, 8)}`;
|
|
94
|
+
this.repoRoot = repoRoot ?? process.cwd();
|
|
95
|
+
this.worktreeDir = path.join(os.tmpdir(), 'nexus-phantom', this.workerId);
|
|
96
|
+
this.branch = `phantom/${this.workerId}`;
|
|
97
|
+
}
|
|
98
|
+
get id() { return this.workerId; }
|
|
99
|
+
/** Sync a finding to the POD Network mid-execution */
|
|
100
|
+
broadcast(content, confidence = 0.8, tags = []) {
|
|
101
|
+
return podNetwork.publish(this.workerId, content, confidence, [...tags, `#worker-${this.workerId}`]);
|
|
102
|
+
}
|
|
103
|
+
/** Receive relevant findings from other workers from the POD */
|
|
104
|
+
receive(tags = []) {
|
|
105
|
+
return podNetwork.recall(tags);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Spawn this worker in an isolated git worktree.
|
|
109
|
+
* The executor function receives the worktree path and operates within it.
|
|
110
|
+
*/
|
|
111
|
+
async spawn(task, executor) {
|
|
112
|
+
const startTime = Date.now();
|
|
113
|
+
try {
|
|
114
|
+
// Create isolated worktree
|
|
115
|
+
await this.createWorktree();
|
|
116
|
+
// Execute the task in isolation
|
|
117
|
+
// Pass the worker instance itself so the executor can call .broadcast()
|
|
118
|
+
const { learnings, confidence } = await executor(this.worktreeDir, task, this);
|
|
119
|
+
// Capture the diff (what changed vs main)
|
|
120
|
+
const diff = await this.captureDiff();
|
|
121
|
+
return {
|
|
122
|
+
workerId: this.workerId,
|
|
123
|
+
taskId: task.id,
|
|
124
|
+
approach: task.approach,
|
|
125
|
+
diff,
|
|
126
|
+
outcome: diff.trim().length > 0 ? 'success' : 'partial',
|
|
127
|
+
confidence,
|
|
128
|
+
tokensUsed: Math.round((Date.now() - startTime) / 100), // approx
|
|
129
|
+
learnings
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
return {
|
|
134
|
+
workerId: this.workerId,
|
|
135
|
+
taskId: task.id,
|
|
136
|
+
approach: task.approach,
|
|
137
|
+
diff: '',
|
|
138
|
+
outcome: 'failed',
|
|
139
|
+
confidence: 0,
|
|
140
|
+
tokensUsed: 0,
|
|
141
|
+
learnings: [`Worker ${this.workerId} failed: ${String(err)}`]
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
await this.cleanup();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async createWorktree() {
|
|
149
|
+
fs.mkdirSync(path.dirname(this.worktreeDir), { recursive: true });
|
|
150
|
+
// Create a new branch and worktree from current HEAD
|
|
151
|
+
await exec(`git worktree add -b "${this.branch}" "${this.worktreeDir}"`, { cwd: this.repoRoot });
|
|
152
|
+
}
|
|
153
|
+
async captureDiff() {
|
|
154
|
+
try {
|
|
155
|
+
const { stdout } = await exec(`git diff HEAD`, { cwd: this.worktreeDir });
|
|
156
|
+
return stdout;
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return '';
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
async cleanup() {
|
|
163
|
+
try {
|
|
164
|
+
await exec(`git worktree remove "${this.worktreeDir}" --force`, { cwd: this.repoRoot });
|
|
165
|
+
await exec(`git branch -D "${this.branch}"`, { cwd: this.repoRoot });
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Best effort cleanup
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/** List all active phantom worktrees (for test/debug verification) */
|
|
172
|
+
static async getWorktreeList(repoRoot = process.cwd()) {
|
|
173
|
+
try {
|
|
174
|
+
const { stdout } = await exec('git worktree list --porcelain', { cwd: repoRoot });
|
|
175
|
+
return stdout
|
|
176
|
+
.split('\n')
|
|
177
|
+
.filter(line => line.startsWith('worktree '))
|
|
178
|
+
.map(line => line.replace('worktree ', '').trim())
|
|
179
|
+
.filter(p => p.includes('nexus-phantom'));
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/** Force-remove any leftover phantom worktrees (emergency cleanup) */
|
|
186
|
+
static async purgeOrphanedWorktrees(repoRoot = process.cwd()) {
|
|
187
|
+
const list = await PhantomWorker.getWorktreeList(repoRoot);
|
|
188
|
+
let removed = 0;
|
|
189
|
+
for (const dir of list) {
|
|
190
|
+
try {
|
|
191
|
+
await exec(`git worktree remove "${dir}" --force`, { cwd: repoRoot });
|
|
192
|
+
removed++;
|
|
193
|
+
}
|
|
194
|
+
catch { /* skip */ }
|
|
195
|
+
}
|
|
196
|
+
return removed;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
200
|
+
// PhantomOrchestrator — High-level entry point
|
|
201
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
202
|
+
export class PhantomOrchestrator {
|
|
203
|
+
ghost;
|
|
204
|
+
oracle;
|
|
205
|
+
repoRoot;
|
|
206
|
+
constructor(memory, repoRoot) {
|
|
207
|
+
this.repoRoot = repoRoot ?? process.cwd();
|
|
208
|
+
this.ghost = new GhostPass(this.repoRoot);
|
|
209
|
+
this.oracle = new MergeOracle(memory);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Full phantom run: Ghost → Workers → Oracle → Decision
|
|
213
|
+
*
|
|
214
|
+
* @param goal What to accomplish
|
|
215
|
+
* @param files Files relevant to the task
|
|
216
|
+
* @param executor Function that executes in a worker's isolated worktree
|
|
217
|
+
* @param nWorkers Number of parallel workers (default 3)
|
|
218
|
+
*/
|
|
219
|
+
async run(goal, files, executor, nWorkers = 2) {
|
|
220
|
+
// Phase 1: Ghost Pass
|
|
221
|
+
const report = await this.ghost.analyze(goal, files);
|
|
222
|
+
// Phase 2: Parallel Phantom Workers
|
|
223
|
+
const tasks = report.workerAssignments.slice(0, nWorkers);
|
|
224
|
+
const workerPromises = tasks.map(task => {
|
|
225
|
+
const worker = new PhantomWorker(this.repoRoot);
|
|
226
|
+
return worker.spawn(task, executor);
|
|
227
|
+
});
|
|
228
|
+
const results = await Promise.allSettled(workerPromises);
|
|
229
|
+
const workerResults = results
|
|
230
|
+
.filter((r) => r.status === 'fulfilled')
|
|
231
|
+
.map(r => r.value);
|
|
232
|
+
// Phase 3: Merge Oracle
|
|
233
|
+
const decision = await this.oracle.merge(workerResults);
|
|
234
|
+
return { report, decision };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
export class LiveNexus {
|
|
238
|
+
hotFunctions = new Map();
|
|
239
|
+
memory;
|
|
240
|
+
orchestrator;
|
|
241
|
+
repoRoot;
|
|
242
|
+
constructor(memory, repoRoot) {
|
|
243
|
+
this.memory = memory;
|
|
244
|
+
this.repoRoot = repoRoot ?? process.cwd();
|
|
245
|
+
this.orchestrator = new PhantomOrchestrator(memory, repoRoot);
|
|
246
|
+
}
|
|
247
|
+
/** Record a function call outcome for monitoring */
|
|
248
|
+
record(fnName, sourceFile, success, tokensWasted = 0) {
|
|
249
|
+
const existing = this.hotFunctions.get(fnName) ?? {
|
|
250
|
+
name: fnName,
|
|
251
|
+
sourceFile,
|
|
252
|
+
callCount: 0,
|
|
253
|
+
failureRate: 0,
|
|
254
|
+
avgTokensWasted: 0
|
|
255
|
+
};
|
|
256
|
+
const newCallCount = existing.callCount + 1;
|
|
257
|
+
const newFailureRate = (existing.failureRate * existing.callCount + (success ? 0 : 1)) / newCallCount;
|
|
258
|
+
const newTokensWasted = (existing.avgTokensWasted * existing.callCount + tokensWasted) / newCallCount;
|
|
259
|
+
this.hotFunctions.set(fnName, {
|
|
260
|
+
...existing,
|
|
261
|
+
callCount: newCallCount,
|
|
262
|
+
failureRate: newFailureRate,
|
|
263
|
+
avgTokensWasted: newTokensWasted
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
/** Get functions that need improvement */
|
|
267
|
+
getCandidatesForEvolution() {
|
|
268
|
+
return [...this.hotFunctions.values()].filter(fn => fn.failureRate > 0.15 || fn.avgTokensWasted > 2000);
|
|
269
|
+
}
|
|
270
|
+
/** Check if evolution should trigger, store report to memory */
|
|
271
|
+
async checkAndEvolve() {
|
|
272
|
+
const candidates = this.getCandidatesForEvolution();
|
|
273
|
+
for (const fn of candidates) {
|
|
274
|
+
const summary = `Evolution candidate: ${fn.name} in ${fn.sourceFile} — ` +
|
|
275
|
+
`failure rate: ${(fn.failureRate * 100).toFixed(1)}%, ` +
|
|
276
|
+
`avg tokens wasted: ${fn.avgTokensWasted.toFixed(0)}`;
|
|
277
|
+
this.memory.store(summary, 0.85, ['#evolution-candidate', '#live-nexus']);
|
|
278
|
+
}
|
|
279
|
+
if (candidates.length > 0) {
|
|
280
|
+
const report = candidates.map(c => `${c.name}: ${(c.failureRate * 100).toFixed(1)}% failure, ${c.avgTokensWasted.toFixed(0)} tokens wasted`).join('\n');
|
|
281
|
+
this.memory.store(`Live Nexus evolution report:\n${report}`, 0.9, ['#live-nexus', '#evolution']);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
// All classes exported inline above via `export class`.
|
|
286
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/phantom/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,OAAO,EACH,oBAAoB,EAGvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,UAAU,EAAmB,MAAM,2BAA2B,CAAC;AAExE,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AA+CrC,gFAAgF;AAChF,6CAA6C;AAC7C,gFAAgF;AAEhF,MAAM,OAAO,SAAS;IACV,WAAW,CAAuB;IAClC,QAAQ,CAAS;IAEzB,YAAY,QAAiB;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,WAAsB;QAC9C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAE5B,wCAAwC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE7D,yCAAyC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE1D,8CAA8C;QAC9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QAE1F,OAAO;YACH,MAAM;YACN,SAAS;YACT,iBAAiB;YACjB,oBAAoB,EAAE,WAAW,CAAC,oBAAoB;YACtD,WAAW;SACd,CAAC;IACN,CAAC;IAEO,eAAe,CAAC,IAAY,EAAE,KAAgB;QAClD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAErC,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACxF,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,kBAAkB,CACtB,IAAY,EACZ,KAAgB,EAChB,WAAwB,EACxB,MAAc;QAEd,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,GAAG,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAE/F,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACpC,EAAE,EAAE,GAAG,MAAM,WAAW,CAAC,EAAE;YAC3B,IAAI;YACJ,KAAK;YACL,QAAQ;YACR,WAAW,EAAE,eAAe;YAC5B,WAAW;SACd,CAAC,CAAC,CAAC;IACR,CAAC;CACJ;AAED,gFAAgF;AAChF,yCAAyC;AACzC,gFAAgF;AAEhF,MAAM,OAAO,aAAa;IACd,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,WAAW,CAAS;IACpB,MAAM,CAAS;IAEvB,YAAY,QAAiB;QACzB,IAAI,CAAC,QAAQ,GAAG,WAAW,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,GAAG,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,EAAE,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1C,sDAAsD;IACtD,SAAS,CAAC,OAAe,EAAE,aAAqB,GAAG,EAAE,OAAiB,EAAE;QACpE,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,WAAW,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACzG,CAAC;IAED,gEAAgE;IAChE,OAAO,CAAC,OAAiB,EAAE;QACvB,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,CACP,IAAgB,EAChB,QAAgI;QAEhI,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACD,2BAA2B;YAC3B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE5B,gCAAgC;YAChC,wEAAwE;YACxE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAE/E,0CAA0C;YAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAEtC,OAAO;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI;gBACJ,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;gBACvD,UAAU;gBACV,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,EAAE,SAAS;gBACjE,SAAS;aACZ,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO;gBACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,QAAQ;gBACjB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,CAAC;gBACb,SAAS,EAAE,CAAC,UAAU,IAAI,CAAC,QAAQ,YAAY,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;aAChE,CAAC;QACN,CAAC;gBAAS,CAAC;YACP,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAElE,qDAAqD;QACrD,MAAM,IAAI,CACN,wBAAwB,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,WAAW,GAAG,EAC5D,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CACzB,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,WAAW;QACrB,IAAI,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CACzB,eAAe,EACf,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,CAC5B,CAAC;YACF,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAO;QACjB,IAAI,CAAC;YACD,MAAM,IAAI,CACN,wBAAwB,IAAI,CAAC,WAAW,WAAW,EACnD,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CACzB,CAAC;YACF,MAAM,IAAI,CACN,kBAAkB,IAAI,CAAC,MAAM,GAAG,EAChC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE,CACzB,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,sBAAsB;QAC1B,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;QACzD,IAAI,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,+BAA+B,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YAClF,OAAO,MAAM;iBACR,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;iBAC5C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;iBACjD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,WAAmB,OAAO,CAAC,GAAG,EAAE;QAChE,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,wBAAwB,GAAG,WAAW,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACtE,OAAO,EAAE,CAAC;YACd,CAAC;YAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AAED,gFAAgF;AAChF,+CAA+C;AAC/C,gFAAgF;AAEhF,MAAM,OAAO,mBAAmB;IACpB,KAAK,CAAY;IACjB,MAAM,CAAc;IACpB,QAAQ,CAAS;IAEzB,YAAY,MAAoB,EAAE,QAAiB;QAC/C,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,GAAG,CACL,IAAY,EACZ,KAAgB,EAChB,QAAgI,EAChI,WAAmB,CAAC;QAEpB,sBAAsB;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAErD,oCAAoC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACpC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,OAAO;aACxB,MAAM,CAAC,CAAC,CAAC,EAA6C,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;aAClF,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEvB,wBAAwB;QACxB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAExD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;CACJ;AAcD,MAAM,OAAO,SAAS;IACV,YAAY,GAA6B,IAAI,GAAG,EAAE,CAAC;IACnD,MAAM,CAAe;IACrB,YAAY,CAAsB;IAClC,QAAQ,CAAS;IAEzB,YAAY,MAAoB,EAAE,QAAiB;QAC/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED,oDAAoD;IACpD,MAAM,CAAC,MAAc,EAAE,UAAkB,EAAE,OAAgB,EAAE,eAAuB,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI;YAC9C,IAAI,EAAE,MAAM;YACZ,UAAU;YACV,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,eAAe,EAAE,CAAC;SACrB,CAAC;QAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;QAC5C,MAAM,cAAc,GAAG,CAAC,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;QACtG,MAAM,eAAe,GAAG,CAAC,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC;QAEtG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE;YAC1B,GAAG,QAAQ;YACX,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,cAAc;YAC3B,eAAe,EAAE,eAAe;SACnC,CAAC,CAAC;IACP,CAAC;IAED,0CAA0C;IAC1C,yBAAyB;QACrB,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACzC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,eAAe,GAAG,IAAI,CAC3D,CAAC;IACN,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,cAAc;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAEpD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK;gBACpE,iBAAiB,CAAC,EAAE,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACvD,sBAAsB,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAE1D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC9B,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAC3G,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEb,IAAI,CAAC,MAAM,CAAC,KAAK,CACb,iCAAiC,MAAM,EAAE,EACzC,GAAG,EACH,CAAC,aAAa,EAAE,YAAY,CAAC,CAChC,CAAC;QACN,CAAC;IACL,CAAC;CACJ;AAED,wDAAwD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge Oracle — Byzantine Consensus & Hierarchical Synthesis
|
|
3
|
+
*
|
|
4
|
+
* Beyond simple voting: the Oracle analyzes code hierarchy and
|
|
5
|
+
* resolves conflicts by favoring structurally consistent changes.
|
|
6
|
+
*/
|
|
7
|
+
import type { WorkerResult, MergeDecision } from './index.js';
|
|
8
|
+
import type { MemoryEngine } from '../engines/memory.js';
|
|
9
|
+
export declare class MergeOracle {
|
|
10
|
+
private memory;
|
|
11
|
+
constructor(memory: MemoryEngine);
|
|
12
|
+
/**
|
|
13
|
+
* Evaluate all worker results and produce a merge decision.
|
|
14
|
+
* Uses Byzantine-inspired voting: 2/3 agreement = high confidence.
|
|
15
|
+
*/
|
|
16
|
+
merge(workers: WorkerResult[]): Promise<MergeDecision>;
|
|
17
|
+
private scoreWorker;
|
|
18
|
+
/**
|
|
19
|
+
* Parse a unified diff string into individual hunks.
|
|
20
|
+
* Each hunk has: file, startLine, endLine, content.
|
|
21
|
+
*/
|
|
22
|
+
private parseHunks;
|
|
23
|
+
/**
|
|
24
|
+
* Detect overlapping hunks between two sets.
|
|
25
|
+
* Returns: { overlapping: string[], nonOverlapping: string[] }
|
|
26
|
+
*/
|
|
27
|
+
private detectOverlaps;
|
|
28
|
+
/**
|
|
29
|
+
* Synthesize diffs by respecting hierarchy.
|
|
30
|
+
* Parses unified diff hunks, detects file/line overlaps,
|
|
31
|
+
* and favors the higher-scored worker on conflicts.
|
|
32
|
+
*/
|
|
33
|
+
private hierarchicalSynthesize;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=merge-oracle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-oracle.d.ts","sourceRoot":"","sources":["../../src/phantom/merge-oracle.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBAAa,WAAW;IACpB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAIhC;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IA2E5D,OAAO,CAAC,WAAW;IAKnB;;;OAGG;IACH,OAAO,CAAC,UAAU;IA0ClB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAoCtB;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;CAwBjC"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge Oracle — Byzantine Consensus & Hierarchical Synthesis
|
|
3
|
+
*
|
|
4
|
+
* Beyond simple voting: the Oracle analyzes code hierarchy and
|
|
5
|
+
* resolves conflicts by favoring structurally consistent changes.
|
|
6
|
+
*/
|
|
7
|
+
export class MergeOracle {
|
|
8
|
+
memory;
|
|
9
|
+
constructor(memory) {
|
|
10
|
+
this.memory = memory;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Evaluate all worker results and produce a merge decision.
|
|
14
|
+
* Uses Byzantine-inspired voting: 2/3 agreement = high confidence.
|
|
15
|
+
*/
|
|
16
|
+
async merge(workers) {
|
|
17
|
+
if (workers.length === 0) {
|
|
18
|
+
return {
|
|
19
|
+
action: 'reject',
|
|
20
|
+
rationale: 'No worker results to merge',
|
|
21
|
+
confidence: 0,
|
|
22
|
+
learnings: [],
|
|
23
|
+
conflicts: [],
|
|
24
|
+
recommendedStrategy: 'Retry with different approach'
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// Score each worker based on outcome, confidence, and internal metrics
|
|
28
|
+
const scored = workers.map(w => ({
|
|
29
|
+
worker: w,
|
|
30
|
+
score: this.scoreWorker(w)
|
|
31
|
+
})).sort((a, b) => b.score - a.score);
|
|
32
|
+
const best = scored[0];
|
|
33
|
+
const allLearnings = workers.flatMap(w => w.learnings);
|
|
34
|
+
// Byzantine check: do a majority of workers agree on the core logic?
|
|
35
|
+
// We use approach as a proxy for the 'logic path' taken.
|
|
36
|
+
const approachCounts = new Map();
|
|
37
|
+
for (const w of workers) {
|
|
38
|
+
approachCounts.set(w.approach, (approachCounts.get(w.approach) ?? 0) + 1);
|
|
39
|
+
}
|
|
40
|
+
const majorityApproach = [...approachCounts.entries()].sort((a, b) => b[1] - a[1])[0];
|
|
41
|
+
const consensusRatio = majorityApproach[1] / workers.length;
|
|
42
|
+
// Perform Hierarchical Diff Analysis (Pseudo-logic for MVP)
|
|
43
|
+
// If workers disagree, try to synthesize changes that affect different AST levels
|
|
44
|
+
let action = 'reject';
|
|
45
|
+
let synthesized;
|
|
46
|
+
let rationale = '';
|
|
47
|
+
if (best.score > 0.8 && (consensusRatio >= 0.6 || workers.length === 1)) {
|
|
48
|
+
action = 'apply';
|
|
49
|
+
rationale = `High confidence consensus on "${best.worker.approach}" (${(consensusRatio * 100).toFixed(0)}%)`;
|
|
50
|
+
}
|
|
51
|
+
else if (workers.length >= 2 && scored[0].score > 0.6 && scored[1].score > 0.6) {
|
|
52
|
+
action = 'synthesize';
|
|
53
|
+
synthesized = this.hierarchicalSynthesize(scored[0].worker, scored[1].worker);
|
|
54
|
+
rationale = `Consensus low (${(consensusRatio * 100).toFixed(0)}%). Performing hierarchical synthesis of top approaches.`;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
action = 'reject';
|
|
58
|
+
rationale = `Insufficient consensus or score (Best score: ${best.score.toFixed(2)}, Consensus: ${(consensusRatio * 100).toFixed(0)}%)`;
|
|
59
|
+
}
|
|
60
|
+
// Tiered learning storage
|
|
61
|
+
for (const learning of allLearnings) {
|
|
62
|
+
await this.memory.store(learning, 0.7, ['#phantom-learning', '#swarm']);
|
|
63
|
+
}
|
|
64
|
+
// Extract conflicts from synthesis if it occurred
|
|
65
|
+
const conflicts = [];
|
|
66
|
+
if (action === 'synthesize' && scored.length >= 2) {
|
|
67
|
+
const hunksA = this.parseHunks(scored[0].worker.diff);
|
|
68
|
+
const hunksB = this.parseHunks(scored[1].worker.diff);
|
|
69
|
+
const overlap = this.detectOverlaps(hunksA, hunksB);
|
|
70
|
+
conflicts.push(...overlap.conflicts);
|
|
71
|
+
}
|
|
72
|
+
return {
|
|
73
|
+
action,
|
|
74
|
+
winner: best.worker,
|
|
75
|
+
synthesized,
|
|
76
|
+
rationale,
|
|
77
|
+
confidence: best.score,
|
|
78
|
+
learnings: allLearnings,
|
|
79
|
+
conflicts,
|
|
80
|
+
recommendedStrategy: action === 'apply' ? 'Direct apply of best result' : (conflicts.length > 0 ? 'Conflict-aware synthesis (primary approach favored)' : 'Clean AST-level synthesis')
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
scoreWorker(worker) {
|
|
84
|
+
const outcomeScore = worker.outcome === 'success' ? 1.0 : (worker.outcome === 'partial' ? 0.5 : 0.0);
|
|
85
|
+
return (worker.confidence * 0.5) + (outcomeScore * 0.5);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Parse a unified diff string into individual hunks.
|
|
89
|
+
* Each hunk has: file, startLine, endLine, content.
|
|
90
|
+
*/
|
|
91
|
+
parseHunks(diff) {
|
|
92
|
+
if (!diff || diff.trim().length === 0)
|
|
93
|
+
return [];
|
|
94
|
+
const hunks = [];
|
|
95
|
+
const lines = diff.split('\n');
|
|
96
|
+
let currentFile = 'unknown';
|
|
97
|
+
let currentHunkStart = 0;
|
|
98
|
+
let currentHunkEnd = 0;
|
|
99
|
+
let currentContent = [];
|
|
100
|
+
for (const line of lines) {
|
|
101
|
+
// Detect file header: +++ b/path/to/file.ts
|
|
102
|
+
if (line.startsWith('+++ b/') || line.startsWith('+++ ')) {
|
|
103
|
+
currentFile = line.replace(/^\+\+\+ [ab]\//, '').trim();
|
|
104
|
+
}
|
|
105
|
+
// Detect hunk header: @@ -10,5 +10,7 @@
|
|
106
|
+
else if (line.startsWith('@@')) {
|
|
107
|
+
// Save previous hunk if exists
|
|
108
|
+
if (currentContent.length > 0) {
|
|
109
|
+
hunks.push({ file: currentFile, startLine: currentHunkStart, endLine: currentHunkEnd, content: currentContent.join('\n') });
|
|
110
|
+
}
|
|
111
|
+
// Parse new hunk range
|
|
112
|
+
const match = line.match(/@@ -(\d+),?\d* \+(\d+),?(\d*) @@/);
|
|
113
|
+
if (match) {
|
|
114
|
+
currentHunkStart = parseInt(match[2], 10);
|
|
115
|
+
currentHunkEnd = currentHunkStart + parseInt(match[3] || '1', 10);
|
|
116
|
+
}
|
|
117
|
+
currentContent = [line];
|
|
118
|
+
}
|
|
119
|
+
else if (currentContent.length > 0) {
|
|
120
|
+
currentContent.push(line);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Push last hunk
|
|
124
|
+
if (currentContent.length > 0) {
|
|
125
|
+
hunks.push({ file: currentFile, startLine: currentHunkStart, endLine: currentHunkEnd, content: currentContent.join('\n') });
|
|
126
|
+
}
|
|
127
|
+
return hunks;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Detect overlapping hunks between two sets.
|
|
131
|
+
* Returns: { overlapping: string[], nonOverlapping: string[] }
|
|
132
|
+
*/
|
|
133
|
+
detectOverlaps(hunksA, hunksB) {
|
|
134
|
+
const conflicts = [];
|
|
135
|
+
const usedB = new Set();
|
|
136
|
+
const resultParts = [];
|
|
137
|
+
for (const hunkA of hunksA) {
|
|
138
|
+
let hasConflict = false;
|
|
139
|
+
for (let i = 0; i < hunksB.length; i++) {
|
|
140
|
+
const hunkB = hunksB[i];
|
|
141
|
+
// Same file + overlapping line range = conflict
|
|
142
|
+
if (hunkA.file === hunkB.file &&
|
|
143
|
+
hunkA.startLine <= hunkB.endLine &&
|
|
144
|
+
hunkA.endLine >= hunkB.startLine) {
|
|
145
|
+
conflicts.push(`${hunkA.file}:${hunkA.startLine}-${hunkA.endLine} (both approaches modify)`);
|
|
146
|
+
// Favor hunkA (higher-scored worker) for conflicts
|
|
147
|
+
hasConflict = true;
|
|
148
|
+
usedB.add(i);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
resultParts.push(hunkA.content);
|
|
152
|
+
}
|
|
153
|
+
// Add non-overlapping hunks from B
|
|
154
|
+
for (let i = 0; i < hunksB.length; i++) {
|
|
155
|
+
if (!usedB.has(i)) {
|
|
156
|
+
resultParts.push(hunksB[i].content);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return { conflicts, merged: resultParts.join('\n\n') };
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Synthesize diffs by respecting hierarchy.
|
|
163
|
+
* Parses unified diff hunks, detects file/line overlaps,
|
|
164
|
+
* and favors the higher-scored worker on conflicts.
|
|
165
|
+
*/
|
|
166
|
+
hierarchicalSynthesize(a, b) {
|
|
167
|
+
if (a.diff === b.diff)
|
|
168
|
+
return a.diff;
|
|
169
|
+
if (!a.diff || a.diff.trim().length === 0)
|
|
170
|
+
return b.diff;
|
|
171
|
+
if (!b.diff || b.diff.trim().length === 0)
|
|
172
|
+
return a.diff;
|
|
173
|
+
const hunksA = this.parseHunks(a.diff);
|
|
174
|
+
const hunksB = this.parseHunks(b.diff);
|
|
175
|
+
// If parsing fails (non-standard diff format), fall back to concatenation
|
|
176
|
+
if (hunksA.length === 0 && hunksB.length === 0) {
|
|
177
|
+
return `// SYNTHESIZED BY NEXUS ORACLE\n// Approach A: ${a.approach}\n// Approach B: ${b.approach}\n\n${a.diff}\n\n${b.diff}`;
|
|
178
|
+
}
|
|
179
|
+
const { conflicts, merged } = this.detectOverlaps(hunksA, hunksB);
|
|
180
|
+
const header = [
|
|
181
|
+
'// SYNTHESIZED BY NEXUS ORACLE',
|
|
182
|
+
`// Approach A (primary): ${a.approach}`,
|
|
183
|
+
`// Approach B (secondary): ${b.approach}`,
|
|
184
|
+
conflicts.length > 0 ? `// ⚠️ ${conflicts.length} conflict(s) resolved — favored Approach A` : '// ✅ No conflicts detected',
|
|
185
|
+
].join('\n');
|
|
186
|
+
return `${header}\n\n${merged}`;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=merge-oracle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-oracle.js","sourceRoot":"","sources":["../../src/phantom/merge-oracle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Phase 4 Phantom Orchestrator
|
|
4
|
+
*
|
|
5
|
+
* Uses the Phantom Workers system to build Phase 4 in parallel:
|
|
6
|
+
* - Wire Mindkit guardrails into Nexus Prime MCP adapter
|
|
7
|
+
* - Two workers implement different strategies simultaneously
|
|
8
|
+
* - MergeOracle picks the winner
|
|
9
|
+
* - Winning diff gets applied back to main
|
|
10
|
+
*
|
|
11
|
+
* Run: node dist/phantom/phase4-orchestrator.js
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=phase4-orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase4-orchestrator.d.ts","sourceRoot":"","sources":["../../src/phantom/phase4-orchestrator.ts"],"names":[],"mappings":";AACA;;;;;;;;;;GAUG"}
|