Squashed 'vendor/ruvector/' content from commit b64c2172

git-subtree-dir: vendor/ruvector
git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
This commit is contained in:
ruv
2026-02-28 14:39:40 -05:00
commit d803bfe2b1
7854 changed files with 3522914 additions and 0 deletions

131
examples/edge-net/sim/dist/simulator.js vendored Normal file
View File

@@ -0,0 +1,131 @@
#!/usr/bin/env node
/**
* Main Simulation Engine
* Orchestrates the complete edge-net lifecycle simulation
*/
import { Network, NetworkPhase } from './network.js';
import { MetricsCollector } from './metrics.js';
import { PhaseManager } from './phases.js';
import { ReportGenerator } from './report.js';
class EdgeNetSimulator {
network;
metrics;
phaseManager;
reportGenerator;
config;
progressInterval;
constructor(config) {
this.config = config;
this.progressInterval = config.fast ? 1000 : 100;
// Initialize components
this.network = new Network({
genesisNodeCount: 100,
targetNodeCount: 120000,
nodesPerTick: config.fast ? 100 : 10, // Faster node spawning in fast mode
taskGenerationRate: 5,
baseTaskReward: 1.0,
connectionCost: 0.5,
maxConnectionsPerNode: 50,
});
this.metrics = new MetricsCollector(this.network);
this.phaseManager = new PhaseManager(this.network, this.metrics);
this.reportGenerator = new ReportGenerator(this.network, this.metrics);
}
/**
* Run the complete simulation
*/
async run() {
console.log('╔════════════════════════════════════════════════════════════╗');
console.log('║ EDGE-NET LIFECYCLE SIMULATION - Starting... ║');
console.log('╚════════════════════════════════════════════════════════════╝\n');
console.log('⚙️ Configuration:');
console.log(` Genesis Nodes: ${this.network.config.genesisNodeCount}`);
console.log(` Target Nodes: ${this.network.config.targetNodeCount.toLocaleString()}`);
console.log(` Nodes/Tick: ${this.network.config.nodesPerTick}`);
console.log(` Mode: ${this.config.fast ? 'FAST' : 'NORMAL'}`);
console.log('');
// Initialize network with genesis nodes
this.network.initialize();
this.metrics.initialize();
console.log('🌱 Genesis nodes deployed. Starting simulation...\n');
let lastProgressUpdate = 0;
const startTime = Date.now();
// Main simulation loop
while (this.network.currentPhase !== NetworkPhase.INDEPENDENCE ||
this.network.cells.size < this.network.config.targetNodeCount) {
// Simulate one tick
this.network.tick();
this.metrics.collect();
this.phaseManager.checkTransition();
// Progress updates
if (this.network.currentTick - lastProgressUpdate >= this.progressInterval) {
this.printProgress();
lastProgressUpdate = this.network.currentTick;
}
// Safety check - don't run forever
if (this.network.currentTick > 50000) {
console.log('\n⚠ Simulation timeout reached (50,000 ticks)');
break;
}
}
const endTime = Date.now();
const duration = (endTime - startTime) / 1000;
console.log('\n✨ Simulation complete!\n');
console.log(` Total Ticks: ${this.network.currentTick.toLocaleString()}`);
console.log(` Duration: ${duration.toFixed(2)}s`);
console.log(` Final Nodes: ${this.network.cells.size.toLocaleString()}`);
console.log(` Final Phase: ${this.network.currentPhase.toUpperCase()}\n`);
// Finalize metrics
this.metrics.finalizeCurrent();
// Generate and save report
this.reportGenerator.printSummary();
this.reportGenerator.saveReport(this.config.outputFile);
// Exit with appropriate code
const report = this.reportGenerator.generateReport();
process.exit(report.summary.totalPassed ? 0 : 1);
}
/**
* Print simulation progress
*/
printProgress() {
const stats = this.network.getStats();
const progress = this.phaseManager.getPhaseProgress();
const ticksToNext = this.phaseManager.getTicksToNextPhase();
if (this.config.verbose) {
console.log(`[Tick ${this.network.currentTick}] ${this.network.currentPhase.toUpperCase()}`);
console.log(` Nodes: ${stats.nodeCount.toLocaleString()} | Energy: ${stats.economy.totalEnergy.toFixed(2)} rUv`);
console.log(` Tasks: ${stats.tasks.completed.toLocaleString()} | Success: ${(stats.network.avgSuccessRate * 100).toFixed(1)}%`);
console.log(` Genesis: ${stats.genesisNodes.active} active, ${stats.genesisNodes.readOnly} read-only, ${stats.genesisNodes.retired} retired`);
console.log(` Progress: ${(progress * 100).toFixed(1)}% | Next phase: ${ticksToNext >= 0 ? `~${ticksToNext} ticks` : 'N/A'}`);
console.log('');
}
else {
// Compact progress bar
const barLength = 40;
const filled = Math.floor(progress * barLength);
const bar = '█'.repeat(filled) + '░'.repeat(barLength - filled);
process.stdout.write(`\r[${bar}] ${this.network.currentPhase.padEnd(12)} | ` +
`${stats.nodeCount.toLocaleString().padStart(7)} nodes | ` +
`${stats.tasks.completed.toLocaleString().padStart(8)} tasks | ` +
`Genesis: ${stats.genesisNodes.retired}/${stats.genesisNodes.count} retired`);
}
}
}
// Parse command line arguments
function parseArgs() {
const args = process.argv.slice(2);
return {
verbose: args.includes('--verbose') || args.includes('-v'),
fast: args.includes('--fast') || args.includes('-f'),
outputFile: args.find(arg => arg.startsWith('--output='))?.split('=')[1] ||
'/workspaces/ruvector/examples/edge-net/sim/simulation-report.json',
};
}
// Run simulation
const config = parseArgs();
const simulator = new EdgeNetSimulator(config);
simulator.run().catch(error => {
console.error('❌ Simulation failed:', error);
process.exit(1);
});
//# sourceMappingURL=simulator.js.map