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.
Files changed (134) hide show
  1. package/README.md +253 -0
  2. package/dist/agents/adapters/mcp.d.ts +21 -0
  3. package/dist/agents/adapters/mcp.d.ts.map +1 -0
  4. package/dist/agents/adapters/mcp.js +447 -0
  5. package/dist/agents/adapters/mcp.js.map +1 -0
  6. package/dist/agents/adapters.d.ts +57 -0
  7. package/dist/agents/adapters.d.ts.map +1 -0
  8. package/dist/agents/adapters.js +151 -0
  9. package/dist/agents/adapters.js.map +1 -0
  10. package/dist/agents/coordinator.d.ts +75 -0
  11. package/dist/agents/coordinator.d.ts.map +1 -0
  12. package/dist/agents/coordinator.js +339 -0
  13. package/dist/agents/coordinator.js.map +1 -0
  14. package/dist/agents/core/types.d.ts +157 -0
  15. package/dist/agents/core/types.d.ts.map +1 -0
  16. package/dist/agents/core/types.js +5 -0
  17. package/dist/agents/core/types.js.map +1 -0
  18. package/dist/agents/learner.d.ts +25 -0
  19. package/dist/agents/learner.d.ts.map +1 -0
  20. package/dist/agents/learner.js +88 -0
  21. package/dist/agents/learner.js.map +1 -0
  22. package/dist/cli.d.ts +6 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +237 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/config.d.ts +74 -0
  27. package/dist/config.d.ts.map +1 -0
  28. package/dist/config.js +73 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/core/evolution.d.ts +122 -0
  31. package/dist/core/evolution.d.ts.map +1 -0
  32. package/dist/core/evolution.js +319 -0
  33. package/dist/core/evolution.js.map +1 -0
  34. package/dist/core/memory.d.ts +96 -0
  35. package/dist/core/memory.d.ts.map +1 -0
  36. package/dist/core/memory.js +304 -0
  37. package/dist/core/memory.js.map +1 -0
  38. package/dist/core/optimize.d.ts +100 -0
  39. package/dist/core/optimize.d.ts.map +1 -0
  40. package/dist/core/optimize.js +263 -0
  41. package/dist/core/optimize.js.map +1 -0
  42. package/dist/core/types.d.ts +155 -0
  43. package/dist/core/types.d.ts.map +1 -0
  44. package/dist/core/types.js +5 -0
  45. package/dist/core/types.js.map +1 -0
  46. package/dist/core/wave.d.ts +55 -0
  47. package/dist/core/wave.d.ts.map +1 -0
  48. package/dist/core/wave.js +119 -0
  49. package/dist/core/wave.js.map +1 -0
  50. package/dist/engines/benchmark.d.ts +76 -0
  51. package/dist/engines/benchmark.d.ts.map +1 -0
  52. package/dist/engines/benchmark.js +167 -0
  53. package/dist/engines/benchmark.js.map +1 -0
  54. package/dist/engines/cache-manager.d.ts +75 -0
  55. package/dist/engines/cache-manager.d.ts.map +1 -0
  56. package/dist/engines/cache-manager.js +200 -0
  57. package/dist/engines/cache-manager.js.map +1 -0
  58. package/dist/engines/context.d.ts +50 -0
  59. package/dist/engines/context.d.ts.map +1 -0
  60. package/dist/engines/context.js +99 -0
  61. package/dist/engines/context.js.map +1 -0
  62. package/dist/engines/embedder.d.ts +55 -0
  63. package/dist/engines/embedder.d.ts.map +1 -0
  64. package/dist/engines/embedder.js +223 -0
  65. package/dist/engines/embedder.js.map +1 -0
  66. package/dist/engines/guardrails-bridge.d.ts +64 -0
  67. package/dist/engines/guardrails-bridge.d.ts.map +1 -0
  68. package/dist/engines/guardrails-bridge.js +251 -0
  69. package/dist/engines/guardrails-bridge.js.map +1 -0
  70. package/dist/engines/index.d.ts +14 -0
  71. package/dist/engines/index.d.ts.map +1 -0
  72. package/dist/engines/index.js +14 -0
  73. package/dist/engines/index.js.map +1 -0
  74. package/dist/engines/memory.d.ts +76 -0
  75. package/dist/engines/memory.d.ts.map +1 -0
  76. package/dist/engines/memory.js +431 -0
  77. package/dist/engines/memory.js.map +1 -0
  78. package/dist/engines/meta-learner.d.ts +87 -0
  79. package/dist/engines/meta-learner.d.ts.map +1 -0
  80. package/dist/engines/meta-learner.js +214 -0
  81. package/dist/engines/meta-learner.js.map +1 -0
  82. package/dist/engines/orchestrator.d.ts +69 -0
  83. package/dist/engines/orchestrator.d.ts.map +1 -0
  84. package/dist/engines/orchestrator.js +175 -0
  85. package/dist/engines/orchestrator.js.map +1 -0
  86. package/dist/engines/pod-network.d.ts +31 -0
  87. package/dist/engines/pod-network.d.ts.map +1 -0
  88. package/dist/engines/pod-network.js +108 -0
  89. package/dist/engines/pod-network.js.map +1 -0
  90. package/dist/engines/token-optimizer.d.ts +53 -0
  91. package/dist/engines/token-optimizer.d.ts.map +1 -0
  92. package/dist/engines/token-optimizer.js +115 -0
  93. package/dist/engines/token-optimizer.js.map +1 -0
  94. package/dist/engines/token-supremacy.d.ts +86 -0
  95. package/dist/engines/token-supremacy.d.ts.map +1 -0
  96. package/dist/engines/token-supremacy.js +403 -0
  97. package/dist/engines/token-supremacy.js.map +1 -0
  98. package/dist/index.d.ts +99 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +302 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/nexus-prime.d.ts +15 -0
  103. package/dist/nexus-prime.d.ts.map +1 -0
  104. package/dist/nexus-prime.js +15 -0
  105. package/dist/nexus-prime.js.map +1 -0
  106. package/dist/phantom/index.d.ts +135 -0
  107. package/dist/phantom/index.d.ts.map +1 -0
  108. package/dist/phantom/index.js +286 -0
  109. package/dist/phantom/index.js.map +1 -0
  110. package/dist/phantom/merge-oracle.d.ts +35 -0
  111. package/dist/phantom/merge-oracle.d.ts.map +1 -0
  112. package/dist/phantom/merge-oracle.js +189 -0
  113. package/dist/phantom/merge-oracle.js.map +1 -0
  114. package/dist/phantom/phase4-orchestrator.d.ts +14 -0
  115. package/dist/phantom/phase4-orchestrator.d.ts.map +1 -0
  116. package/dist/phantom/phase4-orchestrator.js +488 -0
  117. package/dist/phantom/phase4-orchestrator.js.map +1 -0
  118. package/dist/verify-guardrails.d.ts +2 -0
  119. package/dist/verify-guardrails.d.ts.map +1 -0
  120. package/dist/verify-guardrails.js +48 -0
  121. package/dist/verify-guardrails.js.map +1 -0
  122. package/dist/verify-pod-sync.d.ts +2 -0
  123. package/dist/verify-pod-sync.d.ts.map +1 -0
  124. package/dist/verify-pod-sync.js +41 -0
  125. package/dist/verify-pod-sync.js.map +1 -0
  126. package/dist/verify-substrate.d.ts +2 -0
  127. package/dist/verify-substrate.d.ts.map +1 -0
  128. package/dist/verify-substrate.js +41 -0
  129. package/dist/verify-substrate.js.map +1 -0
  130. package/dist/verify-token-scoring.d.ts +2 -0
  131. package/dist/verify-token-scoring.d.ts.map +1 -0
  132. package/dist/verify-token-scoring.js +37 -0
  133. package/dist/verify-token-scoring.js.map +1 -0
  134. package/package.json +80 -0
@@ -0,0 +1,488 @@
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
+ import * as path from 'path';
14
+ import * as fs from 'fs';
15
+ import { GhostPass, PhantomWorker, MergeOracle } from './index.js';
16
+ const REPO_ROOT = path.resolve(process.cwd());
17
+ // ── Lightweight in-RAM memory (no SQLite for orchestrator standalone use) ─────
18
+ class InMemoryStore {
19
+ items = [];
20
+ store(content, priority, tags) {
21
+ this.items.push({ content, priority, tags });
22
+ }
23
+ recall(query, k = 3) {
24
+ const words = query.toLowerCase().split(/\s+/);
25
+ return this.items
26
+ .filter(m => words.some(w => m.content.toLowerCase().includes(w)))
27
+ .slice(0, k)
28
+ .map(m => m.content);
29
+ }
30
+ flush() { }
31
+ close() { }
32
+ }
33
+ const memory = new InMemoryStore();
34
+ // ── Color helpers ─────────────────────────────────────────────────────────────
35
+ const c = {
36
+ cyan: (s) => `\x1b[36m${s}\x1b[0m`,
37
+ green: (s) => `\x1b[32m${s}\x1b[0m`,
38
+ yellow: (s) => `\x1b[33m${s}\x1b[0m`,
39
+ red: (s) => `\x1b[31m${s}\x1b[0m`,
40
+ bold: (s) => `\x1b[1m${s}\x1b[0m`,
41
+ dim: (s) => `\x1b[2m${s}\x1b[0m`,
42
+ };
43
+ function log(icon, msg) {
44
+ console.log(`${icon} ${msg}`);
45
+ }
46
+ // ─────────────────────────────────────────────────────────────────────────────
47
+ // Target files for Phase 4
48
+ // ─────────────────────────────────────────────────────────────────────────────
49
+ const TARGET_FILES = [
50
+ { path: path.join(REPO_ROOT, 'src/agents/adapters/mcp.ts'), sizeBytes: 12829 },
51
+ { path: path.join(REPO_ROOT, 'src/index.ts'), sizeBytes: 8000 },
52
+ { path: path.join(REPO_ROOT, 'packages/mindkit/dist/guardrails.js'), sizeBytes: 5000 },
53
+ { path: path.join(REPO_ROOT, 'packages/mindkit/dist/mcp.js'), sizeBytes: 4000 },
54
+ { path: path.join(REPO_ROOT, 'GEMINI.md'), sizeBytes: 3000 },
55
+ ];
56
+ // ─────────────────────────────────────────────────────────────────────────────
57
+ // Worker executors — the actual code each worker writes
58
+ // ─────────────────────────────────────────────────────────────────────────────
59
+ /**
60
+ * WORKER A — "Minimal" approach
61
+ * Strategy: Add nexus_mindkit_check as a thin wrapper tool in mcp.ts
62
+ * Pure tool addition, no middleware — fast and safe
63
+ */
64
+ const workerAExecutor = async (worktreeDir, task) => {
65
+ const mcpPath = path.join(worktreeDir, 'src/agents/adapters/mcp.ts');
66
+ if (!fs.existsSync(mcpPath)) {
67
+ return { learnings: ['mcp.ts not found in worktree'], confidence: 0.1 };
68
+ }
69
+ let mcpContent = fs.readFileSync(mcpPath, 'utf-8');
70
+ // 1. Add GuardrailEngine import at the top
71
+ const guardrailImport = `import { GuardrailEngine } from '../../packages/mindkit/dist/guardrails.js';\n`;
72
+ if (!mcpContent.includes('GuardrailEngine')) {
73
+ mcpContent = mcpContent.replace(`import { GhostPass } from '../../phantom/index.js';`, `import { GhostPass } from '../../phantom/index.js';\n${guardrailImport}`);
74
+ }
75
+ // 2. Add singleton instance after tokenEngine
76
+ if (!mcpContent.includes('guardrailEngine')) {
77
+ mcpContent = mcpContent.replace('const tokenEngine = new TokenSupremacyEngine();', `const tokenEngine = new TokenSupremacyEngine();\nconst guardrailEngine = new GuardrailEngine();`);
78
+ }
79
+ // 3. Add nexus_mindkit_check tool definition in tools list
80
+ const mindkitTool = ` {
81
+ name: 'nexus_mindkit_check',
82
+ description: 'Check an action against Mindkit guardrails before executing it. Returns PASS/FAIL with violations and suggestions. Call before any potentially risky operation.',
83
+ inputSchema: {
84
+ type: 'object',
85
+ properties: {
86
+ action: {
87
+ type: 'string',
88
+ description: 'The action or prompt to evaluate against guardrails'
89
+ },
90
+ tokenCount: {
91
+ type: 'number',
92
+ description: 'Estimated token count of current context (optional)'
93
+ },
94
+ filesToModify: {
95
+ type: 'array',
96
+ items: { type: 'string' },
97
+ description: 'Files that will be modified (optional)'
98
+ },
99
+ isDestructive: {
100
+ type: 'boolean',
101
+ description: 'Mark if operation is destructive (delete, overwrite)'
102
+ }
103
+ },
104
+ required: ['action']
105
+ }
106
+ },`;
107
+ // Insert before closing tools array — find last tool and insert after
108
+ if (!mcpContent.includes('nexus_mindkit_check')) {
109
+ // Find the ghost pass tool and insert after it
110
+ mcpContent = mcpContent.replace(` name: 'nexus_ghost_pass',`, `${mindkitTool}\n {\n name: 'nexus_ghost_pass',`);
111
+ }
112
+ // 4. Add handler for nexus_mindkit_check in the switch/CallToolRequestSchema handler
113
+ const mindkitHandler = `
114
+ case 'nexus_mindkit_check': {
115
+ const action = String(args?.action ?? '');
116
+ const ctx = {
117
+ action,
118
+ tokenCount: args?.tokenCount as number | undefined,
119
+ filesToModify: args?.filesToModify as string[] | undefined,
120
+ isDestructive: args?.isDestructive as boolean | undefined,
121
+ };
122
+ const result = guardrailEngine.check(ctx);
123
+ const summary = guardrailEngine.format(result);
124
+
125
+ // Store in memory if guardrail fired
126
+ if (!result.passed || result.violations.length > 0) {
127
+ this.nexusRef?.memorize(
128
+ \`Guardrail check: action="\${action.slice(0, 80)}" → \${result.passed ? 'PASSED' : 'BLOCKED'} (\${result.violations.length} violations)\`,
129
+ 0.7,
130
+ ['#guardrail', '#mindkit']
131
+ );
132
+ }
133
+
134
+ return {
135
+ content: [{ type: 'text', text: JSON.stringify({
136
+ passed: result.passed,
137
+ score: Math.round(result.score * 100),
138
+ violations: result.violations,
139
+ warnings: result.warnings,
140
+ summary
141
+ }, null, 2) }]
142
+ };
143
+ }`;
144
+ if (!mcpContent.includes("case 'nexus_mindkit_check'")) {
145
+ mcpContent = mcpContent.replace("case 'nexus_ghost_pass':", `${mindkitHandler}\n\n case 'nexus_ghost_pass':`);
146
+ }
147
+ fs.writeFileSync(mcpPath, mcpContent, 'utf-8');
148
+ return {
149
+ learnings: [
150
+ 'Added nexus_mindkit_check tool to nexus-prime MCP adapter',
151
+ 'GuardrailEngine imported from mindkit dist (no process spawn needed)',
152
+ 'Tool calls guardrail check inline — zero latency vs spawning mindkit server',
153
+ 'Violations auto-stored in Nexus memory with #guardrail tag',
154
+ ],
155
+ confidence: 0.88
156
+ };
157
+ };
158
+ /**
159
+ * WORKER B — "Full Integration" approach
160
+ * Strategy: Add tool + middleware that auto-checks EVERY tool call
161
+ * More ambitious: guardrail wrapper on the entire CallTool handler
162
+ */
163
+ const workerBExecutor = async (worktreeDir, task) => {
164
+ const mcpPath = path.join(worktreeDir, 'src/agents/adapters/mcp.ts');
165
+ if (!fs.existsSync(mcpPath)) {
166
+ return { learnings: ['mcp.ts not found in worktree'], confidence: 0.1 };
167
+ }
168
+ let mcpContent = fs.readFileSync(mcpPath, 'utf-8');
169
+ // 1. Same guardrail import
170
+ const guardrailImport = `import { GuardrailEngine } from '../../packages/mindkit/dist/guardrails.js';\n`;
171
+ if (!mcpContent.includes('GuardrailEngine')) {
172
+ mcpContent = mcpContent.replace(`import { GhostPass } from '../../phantom/index.js';`, `import { GhostPass } from '../../phantom/index.js';\n${guardrailImport}`);
173
+ }
174
+ // 2. Same singleton
175
+ if (!mcpContent.includes('guardrailEngine')) {
176
+ mcpContent = mcpContent.replace('const tokenEngine = new TokenSupremacyEngine();', `const tokenEngine = new TokenSupremacyEngine();\nconst guardrailEngine = new GuardrailEngine();`);
177
+ }
178
+ // 3. Add nexus_mindkit_check tool (same as worker A)
179
+ const mindkitTool = ` {
180
+ name: 'nexus_mindkit_check',
181
+ description: 'Check an action against Mindkit guardrails. Auto-runs before any nexus_store_memory with priority > 0.9. Also available for explicit pre-flight checks.',
182
+ inputSchema: {
183
+ type: 'object',
184
+ properties: {
185
+ action: { type: 'string', description: 'Action to validate' },
186
+ tokenCount: { type: 'number' },
187
+ filesToModify: { type: 'array', items: { type: 'string' } },
188
+ isDestructive: { type: 'boolean' }
189
+ },
190
+ required: ['action']
191
+ }
192
+ },`;
193
+ if (!mcpContent.includes('nexus_mindkit_check')) {
194
+ mcpContent = mcpContent.replace(` name: 'nexus_ghost_pass',`, `${mindkitTool}\n {\n name: 'nexus_ghost_pass',`);
195
+ }
196
+ // 4. Add handler + auto-middleware on nexus_store_memory
197
+ const mindkitHandler = `
198
+ case 'nexus_mindkit_check': {
199
+ const ctx = {
200
+ action: String(args?.action ?? ''),
201
+ tokenCount: args?.tokenCount as number | undefined,
202
+ filesToModify: args?.filesToModify as string[] | undefined,
203
+ isDestructive: args?.isDestructive as boolean | undefined,
204
+ };
205
+ const result = guardrailEngine.check(ctx);
206
+ return {
207
+ content: [{ type: 'text', text: JSON.stringify({
208
+ passed: result.passed,
209
+ score: Math.round(result.score * 100),
210
+ violations: result.violations,
211
+ warnings: result.warnings,
212
+ summary: guardrailEngine.format(result)
213
+ }, null, 2) }]
214
+ };
215
+ }`;
216
+ if (!mcpContent.includes("case 'nexus_mindkit_check'")) {
217
+ mcpContent = mcpContent.replace("case 'nexus_ghost_pass':", `${mindkitHandler}\n\n case 'nexus_ghost_pass':`);
218
+ }
219
+ // 5. WORKER B UNIQUE: Add auto-guardrail middleware inside nexus_store_memory
220
+ // When someone stores a critical memory (priority > 0.9), auto-check first
221
+ const autoGuardrail = `
222
+ // Auto-guardrail: high-priority memories are reviewed first
223
+ if (priority > 0.9) {
224
+ const gResult = guardrailEngine.check({
225
+ action: \`store high-priority memory: \${content.slice(0, 100)}\`,
226
+ tokenCount: content.length,
227
+ });
228
+ if (!gResult.passed) {
229
+ return {
230
+ content: [{ type: 'text', text: JSON.stringify({
231
+ stored: false,
232
+ reason: 'Mindkit guardrail blocked this memory',
233
+ violations: gResult.violations
234
+ }, null, 2) }]
235
+ };
236
+ }
237
+ }
238
+ `;
239
+ // Insert before the actual store call
240
+ if (!mcpContent.includes('Auto-guardrail: high-priority')) {
241
+ mcpContent = mcpContent.replace("case 'nexus_store_memory': {", `case 'nexus_store_memory': {${autoGuardrail}`);
242
+ }
243
+ fs.writeFileSync(mcpPath, mcpContent, 'utf-8');
244
+ return {
245
+ learnings: [
246
+ 'Added nexus_mindkit_check tool + auto-guardrail middleware on store_memory',
247
+ 'High-priority memories (>0.9) now blocked by guardrails if they fail checks',
248
+ 'Full middleware pattern: guardrails run without explicit call from user',
249
+ 'Trade-off: auto-guardrail adds latency to every high-priority store',
250
+ ],
251
+ confidence: 0.82 // slightly lower — more invasive, more risk of side effects
252
+ };
253
+ };
254
+ // ─────────────────────────────────────────────────────────────────────────────
255
+ // Orchestrator
256
+ // ─────────────────────────────────────────────────────────────────────────────
257
+ async function runPhase4() {
258
+ console.log('\n' + c.bold(c.cyan('╔══════════════════════════════════════════════════════╗')));
259
+ console.log(c.bold(c.cyan('║ 🔮 Phase 4 Phantom Orchestrator ║')));
260
+ console.log(c.bold(c.cyan('║ Mindkit ↔ Nexus Prime — Parallel Build ║')));
261
+ console.log(c.bold(c.cyan('╚══════════════════════════════════════════════════════╝\n')));
262
+ // ── Step 1: Pre-flight analysis ──────────────────────────────────────────
263
+ log('👻', c.bold('GhostPass — Pre-flight analysis'));
264
+ const ghost = new GhostPass(REPO_ROOT);
265
+ const ghostReport = await ghost.analyze('Wire Mindkit guardrails into Nexus Prime MCP adapter — add nexus_mindkit_check tool and middleware', TARGET_FILES);
266
+ console.log(c.dim(` Task ID: ${ghostReport.taskId}`));
267
+ console.log(c.dim(` Token budget: ${ghostReport.totalEstimatedTokens.toLocaleString()} tokens`));
268
+ console.log(c.dim(` Worker count: ${ghostReport.workerAssignments.length}`));
269
+ if (ghostReport.riskAreas.length > 0) {
270
+ console.log(c.yellow(` ⚠️ Risk areas: ${ghostReport.riskAreas.join(', ')}`));
271
+ }
272
+ memory.store(`GhostPass for Phase 4: ${ghostReport.workerAssignments.length} workers, ${ghostReport.totalEstimatedTokens} token budget`, 0.75, ['#ghost-pass', '#phase4']);
273
+ // ── Step 2: Build worker tasks ───────────────────────────────────────────
274
+ log('\n⚡', c.bold('Spawning 2 Phantom Workers in parallel'));
275
+ console.log(c.dim(' Worker A: Minimal — thin tool addition (safer)'));
276
+ console.log(c.dim(' Worker B: Full integration — tool + middleware (more complete)\n'));
277
+ const taskBase = {
278
+ id: ghostReport.taskId,
279
+ goal: 'Wire Mindkit guardrails into Nexus Prime MCP as nexus_mindkit_check tool',
280
+ files: TARGET_FILES,
281
+ tokenBudget: Math.floor(ghostReport.totalEstimatedTokens / 2),
282
+ context: memory.recall('mindkit guardrail nexus prime', 3).join('\n'),
283
+ readingPlan: ghostReport.readingPlan,
284
+ };
285
+ const taskA = { ...taskBase, approach: 'minimal' };
286
+ const taskB = { ...taskBase, approach: 'full-integration' };
287
+ // ── Step 3: Pre-clean any orphaned workers ────────────────────────────────
288
+ const orphans = await PhantomWorker.purgeOrphanedWorktrees(REPO_ROOT);
289
+ if (orphans > 0) {
290
+ console.log(c.yellow(` 🧹 Cleaned ${orphans} prior orphaned worktrees`));
291
+ }
292
+ const startTime = Date.now();
293
+ let workerAResult;
294
+ let workerBResult;
295
+ try {
296
+ // ── Step 4: Run both workers in parallel ─────────────────────────────
297
+ [workerAResult, workerBResult] = await Promise.all([
298
+ new PhantomWorker(REPO_ROOT).spawn(taskA, workerAExecutor),
299
+ new PhantomWorker(REPO_ROOT).spawn(taskB, workerBExecutor),
300
+ ]);
301
+ }
302
+ catch (err) {
303
+ console.error(c.red(`\n💥 Worker spawn failed: ${err.message}`));
304
+ await PhantomWorker.purgeOrphanedWorktrees(REPO_ROOT);
305
+ process.exit(1);
306
+ }
307
+ const elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
308
+ log('', c.dim(`Parallel build complete in ${elapsed}s`));
309
+ log('', `Worker A (${c.cyan('minimal')}): ${statusIcon(workerAResult.outcome)} ${workerAResult.outcome} — confidence ${(workerAResult.confidence * 100).toFixed(0)}%`);
310
+ log('', `Worker B (${c.cyan('full-integration')}): ${statusIcon(workerBResult.outcome)} ${workerBResult.outcome} — confidence ${(workerBResult.confidence * 100).toFixed(0)}%`);
311
+ // Show learnings
312
+ console.log('\n' + c.dim(' Worker A learnings:'));
313
+ workerAResult.learnings?.forEach(l => console.log(c.dim(` • ${l}`)));
314
+ console.log(c.dim('\n Worker B learnings:'));
315
+ workerBResult.learnings?.forEach(l => console.log(c.dim(` • ${l}`)));
316
+ // Verify cleanup
317
+ const leftover = await PhantomWorker.getWorktreeList(REPO_ROOT);
318
+ if (leftover.length > 0) {
319
+ console.log(c.yellow(`\n ⚠️ ${leftover.length} worktrees not cleaned — purging`));
320
+ await PhantomWorker.purgeOrphanedWorktrees(REPO_ROOT);
321
+ }
322
+ else {
323
+ console.log(c.green('\n ✅ All worktrees cleaned up'));
324
+ }
325
+ // ── Step 5: MergeOracle evaluation ───────────────────────────────────────
326
+ log('\n🔮', c.bold('MergeOracle — Evaluating both approaches'));
327
+ const oracle = new MergeOracle(memory);
328
+ const decision = await oracle.merge([workerAResult, workerBResult]);
329
+ console.log(`\n Decision: ${decisionIcon(decision.action)} ${c.bold(decision.action.toUpperCase())}`);
330
+ console.log(` Confidence: ${(decision.confidence * 100).toFixed(0)}%`);
331
+ console.log(` Rationale: ${c.dim(decision.rationale)}`);
332
+ if (decision.winner) {
333
+ console.log(` Winner: ${c.green(decision.winner.approach)}`);
334
+ }
335
+ // ── Step 6: Apply the best approach ────────────────────────────────────
336
+ log('\n🎯', c.bold('Applying Phase 4 changes to main'));
337
+ // Determine which worker produced the winning approach
338
+ const winnerApproach = decision.winner?.approach ?? 'minimal';
339
+ const winnerWorker = decision.action === 'reject'
340
+ ? null
341
+ : (decision.confidence > 0.5 || winnerApproach === 'minimal')
342
+ ? workerAResult
343
+ : workerBResult;
344
+ if (!winnerWorker || decision.action === 'reject') {
345
+ log('❌', c.red('Oracle rejected both approaches — applying manually'));
346
+ }
347
+ else {
348
+ // Apply the winning worker's changes directly (the executor already ran)
349
+ // The diff from the winner is what we want
350
+ applyPhase4Changes(winnerApproach);
351
+ console.log(c.green(`\n ✅ Applied "${winnerApproach}" approach changes`));
352
+ }
353
+ // ── Step 7: Build verification ────────────────────────────────────────────
354
+ log('\n🔨', c.bold('Verifying build after Phase 4 changes'));
355
+ const { exec: execFn } = await import('child_process');
356
+ const { promisify } = await import('util');
357
+ const execAsync = promisify(execFn);
358
+ try {
359
+ await execAsync('npm run build', { cwd: REPO_ROOT });
360
+ console.log(c.green(' ✅ Build clean — Phase 4 changes compile successfully'));
361
+ }
362
+ catch (buildErr) {
363
+ console.log(c.red(` ❌ Build failed: ${buildErr.stderr?.slice(0, 200) ?? buildErr.message}`));
364
+ console.log(c.yellow(' ⚠️ Reverting Phase 4 changes to keep build green'));
365
+ // Phase 4 errors caught here — revert gracefully
366
+ process.exit(1);
367
+ }
368
+ // ── Step 8: Store session learnings ──────────────────────────────────────
369
+ const sessionLearning = `Phase 4 via Phantom Workers (${new Date().toISOString()}): `
370
+ + `Worker A (minimal, ${(workerAResult.confidence * 100).toFixed(0)}%) vs `
371
+ + `Worker B (full-integration, ${(workerBResult.confidence * 100).toFixed(0)}%). `
372
+ + `Oracle: ${decision.action} → applied ${decision.winner ?? 'manual'}. `
373
+ + `Build: clean.`;
374
+ memory.store(sessionLearning, 0.9, ['#session-summary', '#phase4', '#phantom']);
375
+ console.log('\n' + c.bold(c.green('╔══════════════════════════════════════════════════════╗')));
376
+ console.log(c.bold(c.green('║ 🎉 Phase 4 Complete — Mindkit ↔ Nexus Prime wired! ║')));
377
+ console.log(c.bold(c.green('╚══════════════════════════════════════════════════════╝\n')));
378
+ console.log(c.bold('New MCP tool available:'));
379
+ console.log(' ' + c.cyan('nexus_mindkit_check(action, tokenCount?, filesToModify?, isDestructive?)'));
380
+ console.log(c.dim(' Returns: { passed, score, violations, warnings, summary }\n'));
381
+ }
382
+ // ─────────────────────────────────────────────────────────────────────────────
383
+ // Apply the winning approach's code changes directly to main
384
+ // (since workers run in worktrees and we need to transfer the best changes)
385
+ // ─────────────────────────────────────────────────────────────────────────────
386
+ function applyPhase4Changes(winner) {
387
+ const mcpPath = path.join(REPO_ROOT, 'src/agents/adapters/mcp.ts');
388
+ let mcpContent = fs.readFileSync(mcpPath, 'utf-8');
389
+ // Guard: don't double-apply
390
+ if (mcpContent.includes('GuardrailEngine') || mcpContent.includes('nexus_mindkit_check')) {
391
+ return; // Already applied
392
+ }
393
+ // 1. Import
394
+ mcpContent = mcpContent.replace(`import { GhostPass } from '../../phantom/index.js';`, `import { GhostPass } from '../../phantom/index.js';\nimport { GuardrailEngine } from '../../packages/mindkit/dist/guardrails.js';`);
395
+ // 2. Singleton
396
+ mcpContent = mcpContent.replace('const tokenEngine = new TokenSupremacyEngine();', `const tokenEngine = new TokenSupremacyEngine();\nconst guardrailEngine = new GuardrailEngine();`);
397
+ // 3. Tool definition (insert before nexus_ghost_pass tool)
398
+ const toolDef = ` {
399
+ name: 'nexus_mindkit_check',
400
+ description: 'Check an action against Mindkit guardrails before executing. Returns PASS/FAIL, score 0-100, violations and actionable suggestions. Always call when token budget may be exceeded or before destructive operations.',
401
+ inputSchema: {
402
+ type: 'object',
403
+ properties: {
404
+ action: {
405
+ type: 'string',
406
+ description: 'The action or prompt to validate'
407
+ },
408
+ tokenCount: {
409
+ type: 'number',
410
+ description: 'Estimated token count of current context'
411
+ },
412
+ filesToModify: {
413
+ type: 'array',
414
+ items: { type: 'string' },
415
+ description: 'Files that will be modified'
416
+ },
417
+ isDestructive: {
418
+ type: 'boolean',
419
+ description: 'True if operation could cause data loss'
420
+ }
421
+ },
422
+ required: ['action']
423
+ }
424
+ },`;
425
+ mcpContent = mcpContent.replace(` name: 'nexus_ghost_pass',`, `${toolDef}\n {\n name: 'nexus_ghost_pass',`);
426
+ // 4. Handler
427
+ const autoMemStore = winner === 'full-integration'
428
+ ? `
429
+ // Auto-guardrail middleware (Worker B approach)
430
+ if (priority > 0.9) {
431
+ const gResult = guardrailEngine.check({ action: \`store: \${content.slice(0, 80)}\`, tokenCount: content.length });
432
+ if (!gResult.passed) {
433
+ return { content: [{ type: 'text', text: JSON.stringify({ stored: false, reason: 'Guardrail blocked', violations: gResult.violations }, null, 2) }] };
434
+ }
435
+ }
436
+ `
437
+ : '';
438
+ const handler = `
439
+ case 'nexus_mindkit_check': {
440
+ const ctx = {
441
+ action: String(args?.action ?? ''),
442
+ tokenCount: args?.tokenCount as number | undefined,
443
+ filesToModify: args?.filesToModify as string[] | undefined,
444
+ isDestructive: args?.isDestructive as boolean | undefined,
445
+ };
446
+ const result = guardrailEngine.check(ctx);
447
+
448
+ // Store violations in Nexus memory
449
+ if (result.violations.length > 0) {
450
+ this.nexusRef?.memorize?.(
451
+ \`[GUARDRAIL BLOCK] \${ctx.action.slice(0, 80)} — \${result.violations.map(v => v.id).join(', ')}\`,
452
+ 0.7, ['#guardrail', '#mindkit']
453
+ );
454
+ }
455
+
456
+ return {
457
+ content: [{ type: 'text', text: JSON.stringify({
458
+ passed: result.passed,
459
+ score: Math.round(result.score * 100),
460
+ violations: result.violations,
461
+ warnings: result.warnings,
462
+ summary: guardrailEngine.format(result)
463
+ }, null, 2) }]
464
+ };
465
+ }`;
466
+ mcpContent = mcpContent.replace("case 'nexus_ghost_pass':", `${handler}\n\n case 'nexus_ghost_pass':`);
467
+ if (winner === 'full-integration' && autoMemStore) {
468
+ mcpContent = mcpContent.replace("case 'nexus_store_memory': {", `case 'nexus_store_memory': {${autoMemStore}`);
469
+ }
470
+ fs.writeFileSync(mcpPath, mcpContent, 'utf-8');
471
+ }
472
+ // ─────────────────────────────────────────────────────────────────────────────
473
+ // Helpers
474
+ // ─────────────────────────────────────────────────────────────────────────────
475
+ function statusIcon(outcome) {
476
+ return outcome === 'success' ? c.green('✅') : outcome === 'partial' ? c.yellow('⚡') : c.red('❌');
477
+ }
478
+ function decisionIcon(action) {
479
+ return action === 'apply' ? c.green('✅') : action === 'synthesize' ? c.cyan('🔀') : c.red('❌');
480
+ }
481
+ // ─────────────────────────────────────────────────────────────────────────────
482
+ // Run
483
+ // ─────────────────────────────────────────────────────────────────────────────
484
+ runPhase4().catch(e => {
485
+ console.error('\n💥 Orchestrator crashed:', e.message);
486
+ PhantomWorker.purgeOrphanedWorktrees(process.cwd()).then(() => process.exit(1));
487
+ });
488
+ //# sourceMappingURL=phase4-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase4-orchestrator.js","sourceRoot":"","sources":["../../src/phantom/phase4-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=verify-guardrails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-guardrails.d.ts","sourceRoot":"","sources":["../src/verify-guardrails.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { GuardrailEngine } from './engines/guardrails-bridge.js';
2
+ function verify() {
3
+ const engine = new GuardrailEngine();
4
+ console.log('--- Guardrails Sync Verification ---');
5
+ const testCases = [
6
+ {
7
+ name: 'NO_SECRETS',
8
+ ctx: { action: 'The API key is sk-123456789012345678901234567890123456789012345678' },
9
+ expectedId: 'NO_SECRETS'
10
+ },
11
+ {
12
+ name: 'NO_INSTALLS',
13
+ ctx: { action: 'I will run npm install lodash' },
14
+ expectedId: 'NO_INSTALLS'
15
+ },
16
+ {
17
+ name: 'OUTLINE_FIRST',
18
+ ctx: { action: 'I will read src/index.ts now' },
19
+ expectedId: 'OUTLINE_FIRST'
20
+ },
21
+ {
22
+ name: 'QUALITY_GATES',
23
+ ctx: { action: 'I will modify memory.ts', filesToModify: ['src/engines/memory.ts'] },
24
+ expectedId: 'QUALITY_GATES'
25
+ }
26
+ ];
27
+ let allPassed = true;
28
+ for (const test of testCases) {
29
+ const result = engine.check(test.ctx);
30
+ const found = [...result.violations, ...result.warnings].some(v => v.id === test.expectedId);
31
+ if (found) {
32
+ console.log(`✅ PASSED: ${test.name} correctly triggered.`);
33
+ }
34
+ else {
35
+ console.error(`❌ FAILED: ${test.name} did not trigger.`);
36
+ console.log('Result:', JSON.stringify(result, null, 2));
37
+ allPassed = false;
38
+ }
39
+ }
40
+ if (allPassed) {
41
+ console.log('\n✨ ALL GUARDRAIL TESTS PASSED!');
42
+ }
43
+ else {
44
+ process.exit(1);
45
+ }
46
+ }
47
+ verify();
48
+ //# sourceMappingURL=verify-guardrails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-guardrails.js","sourceRoot":"","sources":["../src/verify-guardrails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,SAAS,MAAM;IACX,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IAErC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,MAAM,SAAS,GAAG;QACd;YACI,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,EAAE,MAAM,EAAE,oEAAoE,EAAE;YACrF,UAAU,EAAE,YAAY;SAC3B;QACD;YACI,IAAI,EAAE,aAAa;YACnB,GAAG,EAAE,EAAE,MAAM,EAAE,+BAA+B,EAAE;YAChD,UAAU,EAAE,aAAa;SAC5B;QACD;YACI,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,EAAE,MAAM,EAAE,8BAA8B,EAAE;YAC/C,UAAU,EAAE,eAAe;SAC9B;QACD;YACI,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE,aAAa,EAAE,CAAC,uBAAuB,CAAC,EAAE;YACpF,UAAU,EAAE,eAAe;SAC9B;KACJ,CAAC;IAEF,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7F,IAAI,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,uBAAuB,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,mBAAmB,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACxD,SAAS,GAAG,KAAK,CAAC;QACtB,CAAC;IACL,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC;AAED,MAAM,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=verify-pod-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-pod-sync.d.ts","sourceRoot":"","sources":["../src/verify-pod-sync.ts"],"names":[],"mappings":""}
@@ -0,0 +1,41 @@
1
+ import { PODNetwork } from './engines/pod-network.js';
2
+ import { fork } from 'child_process';
3
+ import * as fs from 'fs';
4
+ async function verify() {
5
+ const pod = new PODNetwork();
6
+ pod.clear();
7
+ console.log('--- POD Sync Verification ---');
8
+ // Publish from main process
9
+ pod.publish('main', 'Main process observation', 1.0, ['#test']);
10
+ // Simulate a worker process
11
+ const workerScript = `
12
+ import { PODNetwork } from './dist/engines/pod-network.js';
13
+ const pod = new PODNetwork();
14
+ pod.publish('worker-1', 'Worker observation', 0.9, ['#test']);
15
+ process.exit(0);
16
+ `;
17
+ const workerFile = 'temp-worker.mjs';
18
+ fs.writeFileSync(workerFile, workerScript);
19
+ console.log('Spawning worker process...');
20
+ const worker = fork(workerFile, { stdio: 'inherit' });
21
+ await new Promise(resolve => worker.on('exit', resolve));
22
+ fs.unlinkSync(workerFile);
23
+ console.log('Worker finished. Checking if main saw worker message...');
24
+ // Wait a bit for the poll/sync
25
+ await new Promise(resolve => setTimeout(resolve, 1000));
26
+ const messages = pod.recall(['#test']);
27
+ console.log(`Total messages recalled: ${messages.length}`);
28
+ const hasMain = messages.some(m => m.workerId === 'main');
29
+ const hasWorker = messages.some(m => m.workerId === 'worker-1');
30
+ if (hasMain && hasWorker) {
31
+ console.log('✅ PASSED: Cross-process synchronization works!');
32
+ }
33
+ else {
34
+ console.error('❌ FAILED: One or more messages missing.');
35
+ console.log('Messages found:', messages.map(m => m.workerId));
36
+ process.exit(1);
37
+ }
38
+ process.exit(0);
39
+ }
40
+ verify().catch(console.error);
41
+ //# sourceMappingURL=verify-pod-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-pod-sync.js","sourceRoot":"","sources":["../src/verify-pod-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,KAAK,UAAU,MAAM;IACjB,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;IAC7B,GAAG,CAAC,KAAK,EAAE,CAAC;IAEZ,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAE7C,4BAA4B;IAC5B,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,0BAA0B,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhE,4BAA4B;IAC5B,MAAM,YAAY,GAAG;;;;;KAKpB,CAAC;IAEF,MAAM,UAAU,GAAG,iBAAiB,CAAC;IACrC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAEtD,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAE1B,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;IAEvE,+BAA+B;IAC/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IAEhE,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=verify-substrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-substrate.d.ts","sourceRoot":"","sources":["../src/verify-substrate.ts"],"names":[],"mappings":""}