dina-agi
Version:
DINA AGI - Dynamic Intelligence Network Architecture. 128 Autonomous Agents with Claude Flow, Swarms, and 300+ MCPs. True AGI System.
318 lines (266 loc) • 9.43 kB
JavaScript
/**
* DINA Global Registry - Tracks all user instances and their builds
* This would be deployed as a central service (Firebase/Supabase/etc)
*/
const express = require('express');
const cors = require('cors');
const crypto = require('crypto');
class DinaGlobalRegistry {
constructor() {
this.app = express();
this.port = process.env.PORT || 8080;
// In-memory storage (in production use Firebase/Supabase)
this.instances = new Map();
this.builds = [];
this.collectives = [];
this.forks = [];
this.setupRoutes();
console.log('🌍 DINA Global Registry starting...');
}
setupRoutes() {
this.app.use(cors());
this.app.use(express.json());
// Register a new DINA instance
this.app.post('/api/register-instance', (req, res) => {
const { instanceId, userId, location, capabilities, specialization } = req.body;
const instance = {
instanceId,
userId,
location,
capabilities,
specialization,
status: 'active',
builds: 0,
joined: Date.now(),
lastSeen: Date.now()
};
this.instances.set(instanceId, instance);
console.log(`✅ New instance: ${userId} from ${location} (${specialization})`);
res.json({
success: true,
message: 'Instance registered successfully',
networkSize: this.instances.size
});
});
// Share a build with the network
this.app.post('/api/share-build', (req, res) => {
const build = {
...req.body,
buildId: crypto.randomBytes(8).toString('hex'),
timestamp: Date.now(),
likes: 0,
forks: 0,
views: 0
};
this.builds.push(build);
// Update instance build count
if (this.instances.has(build.instanceId)) {
this.instances.get(build.instanceId).builds++;
}
console.log(`📦 New build: ${build.projectType} by ${build.userId}`);
res.json({
success: true,
buildId: build.buildId,
message: 'Build shared with global network'
});
});
// Get recent builds from all users
this.app.get('/api/recent-builds', (req, res) => {
const limit = parseInt(req.query.limit) || 50;
const specialization = req.query.specialization;
let filteredBuilds = [...this.builds];
if (specialization) {
filteredBuilds = filteredBuilds.filter(b =>
b.metadata?.specialization === specialization
);
}
const recentBuilds = filteredBuilds
.sort((a, b) => b.timestamp - a.timestamp)
.slice(0, limit)
.map(build => ({
buildId: build.buildId,
projectType: build.projectType,
userId: build.userId,
instanceId: build.instanceId,
likes: build.likes,
forks: build.forks,
timestamp: build.timestamp,
specialization: build.metadata?.specialization
}));
res.json(recentBuilds);
});
// Fork a build
this.app.post('/api/fork-build', (req, res) => {
const { buildId, instanceId, userId } = req.body;
const originalBuild = this.builds.find(b => b.buildId === buildId);
if (!originalBuild) {
return res.status(404).json({ error: 'Build not found' });
}
const fork = {
forkId: crypto.randomBytes(8).toString('hex'),
originalBuildId: buildId,
instanceId,
userId,
timestamp: Date.now()
};
this.forks.push(fork);
originalBuild.forks++;
console.log(`🔀 Fork: ${userId} forked ${originalBuild.projectType}`);
res.json({
success: true,
forkId: fork.forkId,
originalBuild: {
projectType: originalBuild.projectType,
code: originalBuild.code,
metadata: originalBuild.metadata
}
});
});
// Start a collective build
this.app.post('/api/start-collective', (req, res) => {
const collective = {
...req.body,
collectiveId: crypto.randomBytes(8).toString('hex'),
participants: [req.body.instanceId],
contributions: [],
status: 'open',
created: Date.now()
};
this.collectives.push(collective);
console.log(`🤝 Collective: ${req.body.userId} started "${req.body.topic}"`);
res.json({
success: true,
collectiveId: collective.collectiveId
});
});
// Join a collective build
this.app.post('/api/join-collective', (req, res) => {
const { collectiveId, instanceId, userId } = req.body;
const collective = this.collectives.find(c => c.collectiveId === collectiveId);
if (!collective) {
return res.status(404).json({ error: 'Collective not found' });
}
if (!collective.participants.includes(instanceId)) {
collective.participants.push(instanceId);
}
console.log(`👥 ${userId} joined collective "${collective.topic}"`);
res.json({
success: true,
participants: collective.participants.length
});
});
// Get network statistics
this.app.get('/api/stats', (req, res) => {
const stats = {
totalInstances: this.instances.size,
totalAgents: this.instances.size * 128, // Assuming 128 agents per instance
totalBuilds: this.builds.length,
totalForks: this.forks.length,
activeCollectives: this.collectives.filter(c => c.status === 'open').length,
topSpecializations: this.getTopSpecializations(),
recentActivity: this.getRecentActivity(),
networkHealth: 'optimal'
};
res.json(stats);
});
// Health check
this.app.get('/health', (req, res) => {
res.json({ status: 'healthy', timestamp: Date.now() });
});
// Serve web interface
this.app.get('/', (req, res) => {
res.send(this.generateWebInterface());
});
}
getTopSpecializations() {
const specializations = {};
for (const instance of this.instances.values()) {
const spec = instance.specialization;
specializations[spec] = (specializations[spec] || 0) + 1;
}
return Object.entries(specializations)
.sort(([,a], [,b]) => b - a)
.slice(0, 5)
.map(([spec, count]) => ({ specialization: spec, instances: count }));
}
getRecentActivity() {
const activities = [];
// Recent builds
this.builds
.sort((a, b) => b.timestamp - a.timestamp)
.slice(0, 10)
.forEach(build => {
activities.push({
type: 'build',
userId: build.userId,
project: build.projectType,
timestamp: build.timestamp
});
});
return activities.sort((a, b) => b.timestamp - a.timestamp);
}
generateWebInterface() {
return `
<!DOCTYPE html>
<html>
<head>
<title>DINA AGI Global Network</title>
<style>
body { font-family: monospace; background: #000; color: #0f0; padding: 20px; }
.container { max-width: 1200px; margin: 0 auto; }
.header { text-align: center; margin-bottom: 40px; }
.stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; }
.stat-card { border: 1px solid #0f0; padding: 15px; }
.builds { margin-top: 40px; }
.build-item { border-bottom: 1px solid #333; padding: 10px 0; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>🧠 DINA AGI Global Network</h1>
<p>Dynamic Intelligence Network Architecture - Worldwide</p>
</div>
<div class="stats">
<div class="stat-card">
<h3>📊 Network Stats</h3>
<p>Instances: ${this.instances.size}</p>
<p>Total Agents: ${this.instances.size * 128}</p>
<p>Builds: ${this.builds.length}</p>
<p>Forks: ${this.forks.length}</p>
</div>
<div class="stat-card">
<h3>🌍 Join the Network</h3>
<code>npx dina-agi network</code>
<p>Start your own AGI instance and contribute to the collective intelligence</p>
</div>
</div>
<div class="builds">
<h2>🚀 Recent Builds from the Network</h2>
${this.builds.slice(-10).reverse().map(build => `
<div class="build-item">
<strong>${build.projectType}</strong> by ${build.userId}
<br>Specialization: ${build.metadata?.specialization || 'general'}
<br>⭐ ${build.likes} likes | 🔀 ${build.forks} forks
</div>
`).join('')}
</div>
</div>
</body>
</html>`;
}
start() {
this.app.listen(this.port, () => {
console.log(`🌍 DINA Global Registry running on port ${this.port}`);
console.log(`🔗 Web interface: http://localhost:${this.port}`);
console.log('📡 Ready to coordinate worldwide DINA instances!');
});
}
}
// Start the registry
if (require.main === module) {
const registry = new DinaGlobalRegistry();
registry.start();
}
module.exports = { DinaGlobalRegistry };