mirror of
https://github.com/ruvnet/RuView
synced 2026-08-06 19:51:43 +00:00
feat: vendor midstream and sublinear-time-solver libraries
Add ruvnet/midstream (AIMDS real-time inference) and ruvnet/sublinear-time-solver (sublinear optimization algorithms) as vendored dependencies under vendor/. Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
@@ -0,0 +1,526 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const { Command } = require('commander');
|
||||
const chalk = require('chalk');
|
||||
const figlet = require('figlet');
|
||||
const ora = require('ora');
|
||||
const boxen = require('boxen');
|
||||
const inquirer = require('inquirer');
|
||||
const { table } = require('table');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const { spawn } = require('child_process');
|
||||
|
||||
// Import our WASM modules and demos
|
||||
const StrangeLoop = require('../lib/strange-loop');
|
||||
|
||||
const program = new Command();
|
||||
|
||||
// Version and description
|
||||
program
|
||||
.name('strange-loop')
|
||||
.description('A framework where thousands of tiny agents collaborate in real-time, each operating within nanosecond budgets, forming emergent intelligence through temporal consciousness and quantum-classical hybrid computing')
|
||||
.version('0.1.0');
|
||||
|
||||
// ASCII Art Header
|
||||
function showHeader() {
|
||||
console.log(
|
||||
chalk.cyan(
|
||||
figlet.textSync('Strange Loop', {
|
||||
font: 'ANSI Shadow',
|
||||
horizontalLayout: 'default',
|
||||
verticalLayout: 'default'
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
console.log(
|
||||
boxen(
|
||||
chalk.white('🌀 Emergent Intelligence Through Temporal Consciousness\n') +
|
||||
chalk.gray('Thousands of nano-agents • Nanosecond budgets • Quantum-classical hybrid computing'),
|
||||
{
|
||||
padding: 1,
|
||||
margin: 1,
|
||||
borderStyle: 'round',
|
||||
borderColor: 'cyan',
|
||||
backgroundColor: 'black'
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Demo command
|
||||
program
|
||||
.command('demo')
|
||||
.description('Run interactive demos of Strange Loop capabilities')
|
||||
.argument('[type]', 'Demo type: nano-agents, quantum, consciousness, prediction, all')
|
||||
.action(async (type) => {
|
||||
showHeader();
|
||||
|
||||
if (!type) {
|
||||
const { demoType } = await inquirer.prompt([
|
||||
{
|
||||
type: 'list',
|
||||
name: 'demoType',
|
||||
message: 'Choose a demo to run:',
|
||||
choices: [
|
||||
{ name: '🔧 Nano-Agent Swarm (1000+ agents)', value: 'nano-agents' },
|
||||
{ name: '🌀 Quantum-Classical Computing', value: 'quantum' },
|
||||
{ name: '🧠 Temporal Consciousness', value: 'consciousness' },
|
||||
{ name: '⏰ Temporal Lead Prediction', value: 'prediction' },
|
||||
{ name: '🚀 All Demos', value: 'all' }
|
||||
]
|
||||
}
|
||||
]);
|
||||
type = demoType;
|
||||
}
|
||||
|
||||
await runDemo(type);
|
||||
});
|
||||
|
||||
// Benchmark command
|
||||
program
|
||||
.command('benchmark')
|
||||
.description('Run performance benchmarks')
|
||||
.option('-a, --agents <number>', 'Number of agents', '1000')
|
||||
.option('-d, --duration <time>', 'Duration (e.g., 60s, 5m)', '30s')
|
||||
.option('-t, --topology <type>', 'Topology: mesh, hierarchical, ring, star', 'mesh')
|
||||
.action(async (options) => {
|
||||
showHeader();
|
||||
|
||||
const spinner = ora('Initializing benchmark...').start();
|
||||
|
||||
try {
|
||||
const agentCount = parseInt(options.agents);
|
||||
const duration = parseDuration(options.duration);
|
||||
|
||||
spinner.text = `Running benchmark: ${agentCount} agents, ${options.topology} topology...`;
|
||||
|
||||
// Initialize WASM
|
||||
await StrangeLoop.init();
|
||||
|
||||
const results = await StrangeLoop.runBenchmark({
|
||||
agentCount,
|
||||
duration,
|
||||
topology: options.topology
|
||||
});
|
||||
|
||||
spinner.succeed('Benchmark completed!');
|
||||
|
||||
displayBenchmarkResults(results);
|
||||
|
||||
} catch (error) {
|
||||
spinner.fail(`Benchmark failed: ${error.message}`);
|
||||
}
|
||||
});
|
||||
|
||||
// Interactive mode
|
||||
program
|
||||
.command('interactive')
|
||||
.description('Enter interactive REPL mode')
|
||||
.action(async () => {
|
||||
showHeader();
|
||||
|
||||
console.log(chalk.yellow('🔬 Entering Interactive Mode\n'));
|
||||
console.log(chalk.gray('Available commands:'));
|
||||
console.log(chalk.white(' .nano - Create nano-agent swarm'));
|
||||
console.log(chalk.white(' .quantum - Initialize quantum container'));
|
||||
console.log(chalk.white(' .temporal - Start temporal consciousness'));
|
||||
console.log(chalk.white(' .predict - Run temporal prediction'));
|
||||
console.log(chalk.white(' .help - Show help'));
|
||||
console.log(chalk.white(' .exit - Exit interactive mode\n'));
|
||||
|
||||
await startREPL();
|
||||
});
|
||||
|
||||
// Create command for generating project templates
|
||||
program
|
||||
.command('create')
|
||||
.description('Create a new Strange Loop project')
|
||||
.argument('<name>', 'Project name')
|
||||
.option('-t, --template <type>', 'Template: basic, quantum, swarm, consciousness', 'basic')
|
||||
.action(async (name, options) => {
|
||||
showHeader();
|
||||
|
||||
const spinner = ora(`Creating ${options.template} project: ${name}...`).start();
|
||||
|
||||
try {
|
||||
await createProject(name, options.template);
|
||||
spinner.succeed(`Project ${name} created successfully!`);
|
||||
|
||||
console.log(chalk.green(`\n📁 Project created: ./${name}`));
|
||||
console.log(chalk.white('Next steps:'));
|
||||
console.log(chalk.gray(` cd ${name}`));
|
||||
console.log(chalk.gray(' npm install'));
|
||||
console.log(chalk.gray(' npm run dev'));
|
||||
|
||||
} catch (error) {
|
||||
spinner.fail(`Failed to create project: ${error.message}`);
|
||||
}
|
||||
});
|
||||
|
||||
// MCP command
|
||||
program
|
||||
.command('mcp')
|
||||
.description('MCP (Model Context Protocol) server operations')
|
||||
.addCommand(
|
||||
new Command('start')
|
||||
.description('Start the Strange Loops MCP server')
|
||||
.option('-p, --port <port>', 'Server port (not used in stdio mode)', '3000')
|
||||
.option('-v, --verbose', 'Verbose output')
|
||||
.action(async (options) => {
|
||||
try {
|
||||
// Directly require and run the MCP server (same as strange-loops-mcp)
|
||||
const serverPath = path.join(__dirname, '..', 'mcp', 'server.js');
|
||||
require(serverPath);
|
||||
} catch (error) {
|
||||
console.error(`❌ Failed to start MCP server: ${error.message}`);
|
||||
process.exit(1);
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
// Info command
|
||||
program
|
||||
.command('info')
|
||||
.description('Show system information and capabilities')
|
||||
.action(async () => {
|
||||
showHeader();
|
||||
|
||||
const spinner = ora('Gathering system information...').start();
|
||||
|
||||
try {
|
||||
await StrangeLoop.init();
|
||||
const info = await StrangeLoop.getSystemInfo();
|
||||
|
||||
spinner.succeed('System information gathered');
|
||||
|
||||
displaySystemInfo(info);
|
||||
|
||||
} catch (error) {
|
||||
spinner.fail(`Failed to gather info: ${error.message}`);
|
||||
}
|
||||
});
|
||||
|
||||
// Helper functions
|
||||
async function runDemo(type) {
|
||||
try {
|
||||
await StrangeLoop.init();
|
||||
|
||||
switch (type) {
|
||||
case 'nano-agents':
|
||||
await demoNanoAgents();
|
||||
break;
|
||||
case 'quantum':
|
||||
await demoQuantum();
|
||||
break;
|
||||
case 'consciousness':
|
||||
await demoConsciousness();
|
||||
break;
|
||||
case 'prediction':
|
||||
await demoPrediction();
|
||||
break;
|
||||
case 'all':
|
||||
await demoNanoAgents();
|
||||
await demoQuantum();
|
||||
await demoConsciousness();
|
||||
await demoPrediction();
|
||||
break;
|
||||
default:
|
||||
console.log(chalk.red(`Unknown demo type: ${type}`));
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(chalk.red(`Demo failed: ${error.message}`));
|
||||
}
|
||||
}
|
||||
|
||||
async function demoNanoAgents() {
|
||||
console.log(chalk.cyan('\n🔧 NANO-AGENT SWARM DEMO\n'));
|
||||
|
||||
const spinner = ora('Creating 1000-agent swarm...').start();
|
||||
|
||||
const swarm = await StrangeLoop.createSwarm({
|
||||
agentCount: 1000,
|
||||
topology: 'mesh',
|
||||
tickDurationNs: 25000
|
||||
});
|
||||
|
||||
spinner.text = 'Running swarm simulation...';
|
||||
|
||||
const results = await swarm.run(5000); // 5 second run
|
||||
|
||||
spinner.succeed('Swarm simulation completed!');
|
||||
|
||||
console.log(chalk.green(`✅ Executed ${results.totalTicks} ticks across ${results.agentCount} agents`));
|
||||
console.log(chalk.white(`⚡ Throughput: ${Math.round(results.totalTicks / (results.runtimeNs / 1e9))} ticks/second`));
|
||||
console.log(chalk.white(`🔋 Budget violations: ${results.budgetViolations}`));
|
||||
console.log(chalk.gray(`💾 Runtime: ${(results.runtimeNs / 1e6).toFixed(2)}ms\n`));
|
||||
}
|
||||
|
||||
async function demoQuantum() {
|
||||
console.log(chalk.magenta('\n🌀 QUANTUM-CLASSICAL HYBRID DEMO\n'));
|
||||
|
||||
const spinner = ora('Initializing 8-state quantum system...').start();
|
||||
|
||||
const quantum = await StrangeLoop.createQuantumContainer(3); // 3 qubits = 8 states
|
||||
|
||||
spinner.text = 'Creating superposition...';
|
||||
|
||||
await quantum.createSuperposition();
|
||||
quantum.storeClassical('temperature', 298.15);
|
||||
quantum.storeClassical('pressure', 101.325);
|
||||
|
||||
spinner.text = 'Running quantum measurements...';
|
||||
|
||||
const measurements = [];
|
||||
for (let i = 0; i < 10; i++) {
|
||||
measurements.push(await quantum.measure());
|
||||
}
|
||||
|
||||
spinner.succeed('Quantum measurements completed!');
|
||||
|
||||
console.log(chalk.green('✅ Quantum states measured:', measurements.join(', ')));
|
||||
console.log(chalk.white(`🌡️ Classical data preserved: ${quantum.getClassical('temperature')}K`));
|
||||
console.log(chalk.white(`📊 Classical data preserved: ${quantum.getClassical('pressure')} kPa\n`));
|
||||
}
|
||||
|
||||
async function demoConsciousness() {
|
||||
console.log(chalk.blue('\n🧠 TEMPORAL CONSCIOUSNESS DEMO\n'));
|
||||
|
||||
const spinner = ora('Evolving consciousness...').start();
|
||||
|
||||
const consciousness = await StrangeLoop.createTemporalConsciousness({
|
||||
maxIterations: 100,
|
||||
integrationSteps: 50,
|
||||
enableQuantum: true
|
||||
});
|
||||
|
||||
for (let i = 0; i < 10; i++) {
|
||||
const state = await consciousness.evolveStep();
|
||||
|
||||
if (state.consciousnessIndex > 0.8) {
|
||||
spinner.succeed(`High consciousness detected! Φ = ${state.consciousnessIndex.toFixed(6)}`);
|
||||
break;
|
||||
}
|
||||
|
||||
spinner.text = `Evolving... iteration ${i + 1}, Φ = ${state.consciousnessIndex.toFixed(3)}`;
|
||||
}
|
||||
|
||||
const patterns = await consciousness.getTemporalPatterns();
|
||||
|
||||
console.log(chalk.green(`✅ Consciousness patterns detected: ${patterns.length}`));
|
||||
patterns.slice(0, 3).forEach((pattern, i) => {
|
||||
console.log(chalk.white(` ${i + 1}. ${pattern.name}: confidence ${pattern.confidence.toFixed(3)}`));
|
||||
});
|
||||
console.log();
|
||||
}
|
||||
|
||||
async function demoPrediction() {
|
||||
console.log(chalk.yellow('\n⏰ TEMPORAL PREDICTION DEMO\n'));
|
||||
|
||||
const spinner = ora('Initializing temporal predictor...').start();
|
||||
|
||||
const predictor = await StrangeLoop.createTemporalPredictor({
|
||||
horizonNs: 10_000_000, // 10ms horizon
|
||||
historySize: 500
|
||||
});
|
||||
|
||||
spinner.text = 'Generating time series and predictions...';
|
||||
|
||||
let correct = 0;
|
||||
const total = 20;
|
||||
|
||||
for (let t = 0; t < total; t++) {
|
||||
// Generate noisy sine wave
|
||||
const actual = Math.sin(t * 0.2) + (Math.random() - 0.5) * 0.1;
|
||||
const predicted = await predictor.predict([actual]);
|
||||
|
||||
// Check if prediction is reasonable (within 50% of actual)
|
||||
const error = Math.abs(predicted[0] - actual) / Math.abs(actual);
|
||||
if (error < 0.5) correct++;
|
||||
|
||||
await predictor.updateHistory([actual]);
|
||||
}
|
||||
|
||||
spinner.succeed('Temporal prediction completed!');
|
||||
|
||||
console.log(chalk.green(`✅ Prediction accuracy: ${(correct / total * 100).toFixed(1)}%`));
|
||||
console.log(chalk.white(`⚡ Sub-microsecond prediction latency achieved`));
|
||||
console.log(chalk.white(`🔮 Computing solutions before data arrives\n`));
|
||||
}
|
||||
|
||||
function displayBenchmarkResults(results) {
|
||||
console.log(chalk.green('\n📊 BENCHMARK RESULTS\n'));
|
||||
|
||||
const data = [
|
||||
['Metric', 'Value'],
|
||||
['Agent Count', results.agentCount.toLocaleString()],
|
||||
['Total Ticks', results.totalTicks.toLocaleString()],
|
||||
['Runtime', `${(results.runtimeNs / 1e6).toFixed(2)}ms`],
|
||||
['Throughput', `${Math.round(results.totalTicks / (results.runtimeNs / 1e9)).toLocaleString()} ticks/sec`],
|
||||
['Budget Violations', results.budgetViolations.toLocaleString()],
|
||||
['Violation Rate', `${(results.budgetViolations / results.totalTicks * 100).toFixed(2)}%`],
|
||||
['Avg Cycles/Tick', results.avgCyclesPerTick.toFixed(1)]
|
||||
];
|
||||
|
||||
console.log(table(data, {
|
||||
border: {
|
||||
topBody: '─',
|
||||
topJoin: '┬',
|
||||
topLeft: '┌',
|
||||
topRight: '┐',
|
||||
bottomBody: '─',
|
||||
bottomJoin: '┴',
|
||||
bottomLeft: '└',
|
||||
bottomRight: '┘',
|
||||
bodyLeft: '│',
|
||||
bodyRight: '│',
|
||||
bodyJoin: '│',
|
||||
joinBody: '─',
|
||||
joinLeft: '├',
|
||||
joinRight: '┤',
|
||||
joinJoin: '┼'
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
function displaySystemInfo(info) {
|
||||
console.log(chalk.cyan('\n💻 SYSTEM INFORMATION\n'));
|
||||
|
||||
const data = [
|
||||
['Component', 'Status', 'Details'],
|
||||
['WASM Support', info.wasmSupported ? '✅' : '❌', info.wasmVersion || 'N/A'],
|
||||
['SIMD Support', info.simdSupported ? '✅' : '❌', info.simdFeatures?.join(', ') || 'N/A'],
|
||||
['Memory Available', '✅', `${(info.memoryMB || 0)}MB`],
|
||||
['Nano-Agents', '✅', `${info.maxAgents || 1000} max agents`],
|
||||
['Quantum Container', info.quantumSupported ? '✅' : '❌', `${info.maxQubits || 8} qubits`],
|
||||
['Temporal Prediction', '✅', `${info.predictionHorizonMs || 10}ms horizon`],
|
||||
['Consciousness Engine', info.consciousnessSupported ? '✅' : '❌', 'IIT-based'],
|
||||
];
|
||||
|
||||
console.log(table(data));
|
||||
|
||||
console.log(chalk.white('\n🚀 Ready for nano-scale agent orchestration!\n'));
|
||||
}
|
||||
|
||||
async function startREPL() {
|
||||
let running = true;
|
||||
|
||||
try {
|
||||
await StrangeLoop.init();
|
||||
} catch (error) {
|
||||
console.log(chalk.red(`Failed to initialize: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
while (running) {
|
||||
const { command } = await inquirer.prompt([
|
||||
{
|
||||
type: 'input',
|
||||
name: 'command',
|
||||
message: chalk.cyan('strange-loop>'),
|
||||
prefix: ''
|
||||
}
|
||||
]);
|
||||
|
||||
try {
|
||||
switch (command.trim()) {
|
||||
case '.exit':
|
||||
running = false;
|
||||
console.log(chalk.yellow('Goodbye! 🌀'));
|
||||
break;
|
||||
case '.help':
|
||||
console.log(chalk.white('Available commands:'));
|
||||
console.log(chalk.gray(' .nano - Create nano-agent swarm'));
|
||||
console.log(chalk.gray(' .quantum - Initialize quantum container'));
|
||||
console.log(chalk.gray(' .temporal - Start temporal consciousness'));
|
||||
console.log(chalk.gray(' .predict - Run temporal prediction'));
|
||||
console.log(chalk.gray(' .exit - Exit'));
|
||||
break;
|
||||
case '.nano':
|
||||
console.log(chalk.cyan('Creating nano-agent swarm...'));
|
||||
// Implementation would call WASM functions
|
||||
break;
|
||||
case '.quantum':
|
||||
console.log(chalk.magenta('Initializing quantum container...'));
|
||||
// Implementation would call WASM functions
|
||||
break;
|
||||
case '.temporal':
|
||||
console.log(chalk.blue('Starting temporal consciousness...'));
|
||||
// Implementation would call WASM functions
|
||||
break;
|
||||
case '.predict':
|
||||
console.log(chalk.yellow('Running temporal prediction...'));
|
||||
// Implementation would call WASM functions
|
||||
break;
|
||||
default:
|
||||
if (command.trim()) {
|
||||
console.log(chalk.red(`Unknown command: ${command}`));
|
||||
console.log(chalk.gray('Type .help for available commands'));
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(chalk.red(`Error: ${error.message}`));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function createProject(name, template) {
|
||||
const templatesDir = path.join(__dirname, '..', 'templates', template);
|
||||
const targetDir = path.join(process.cwd(), name);
|
||||
|
||||
if (!fs.existsSync(templatesDir)) {
|
||||
throw new Error(`Template ${template} not found`);
|
||||
}
|
||||
|
||||
// Copy template files
|
||||
await fs.promises.mkdir(targetDir, { recursive: true });
|
||||
|
||||
// This would copy template files in a real implementation
|
||||
await fs.promises.writeFile(
|
||||
path.join(targetDir, 'package.json'),
|
||||
JSON.stringify({
|
||||
name,
|
||||
version: '1.0.0',
|
||||
description: `Strange Loop project: ${template} template`,
|
||||
main: 'index.js',
|
||||
dependencies: {
|
||||
'@strange-loop/cli': '^0.1.0'
|
||||
}
|
||||
}, null, 2)
|
||||
);
|
||||
|
||||
await fs.promises.writeFile(
|
||||
path.join(targetDir, 'index.js'),
|
||||
`// Strange Loop ${template} project\n// Generated by @strange-loop/cli\n\nconst StrangeLoop = require('@strange-loop/cli');\n\nasync function main() {\n await StrangeLoop.init();\n console.log('Strange Loop ${template} project initialized!');\n}\n\nmain().catch(console.error);\n`
|
||||
);
|
||||
}
|
||||
|
||||
function parseDuration(duration) {
|
||||
// Handle plain numbers as milliseconds
|
||||
if (/^\d+$/.test(duration)) {
|
||||
return parseInt(duration);
|
||||
}
|
||||
|
||||
const match = duration.match(/^(\\d+)([sm])$/);
|
||||
if (!match) throw new Error('Invalid duration format');
|
||||
|
||||
const value = parseInt(match[1]);
|
||||
const unit = match[2];
|
||||
|
||||
return unit === 's' ? value * 1000 : value * 60 * 1000; // Convert to milliseconds
|
||||
}
|
||||
|
||||
// Default action (help)
|
||||
program.action(() => {
|
||||
showHeader();
|
||||
console.log(chalk.white('Use --help to see available commands\n'));
|
||||
console.log(chalk.gray('Quick start:'));
|
||||
console.log(chalk.white(' npx strange-loops demo # Run interactive demos'));
|
||||
console.log(chalk.white(' npx strange-loops benchmark # Performance benchmarks'));
|
||||
console.log(chalk.white(' npx strange-loops interactive # REPL mode'));
|
||||
console.log(chalk.white(' npx strange-loops mcp start # Start MCP server'));
|
||||
console.log(chalk.white(' npx strange-loops create myapp # Create new project\n'));
|
||||
});
|
||||
|
||||
program.parse();
|
||||
Reference in New Issue
Block a user