mega-minds
Version:
Enhanced multi-agent workflow system for Claude Code projects with automated handoff management and Claude Code hooks integration
634 lines (522 loc) • 24.2 kB
JavaScript
// lib/commands/enterprise-admin.js
// CLI commands for enterprise administration and management
// Phase 3.3: Enterprise Features - Administrative commands
const TeamCollaboration = require('../enterprise/TeamCollaboration');
const EnterpriseMonitoring = require('../enterprise/EnterpriseMonitoring');
const StructuredLogger = require('../enterprise/StructuredLogger');
/**
* Enable team collaboration mode
* Command: mega-minds enable-team-collaboration
*/
async function enableTeamCollaboration() {
try {
console.log('👥 Enabling team collaboration...');
const teamCollaboration = new TeamCollaboration(process.cwd());
await teamCollaboration.initialize(true); // Enable team mode
console.log('✅ Team collaboration enabled successfully!');
console.log('');
console.log('💡 Available team commands:');
console.log(' mega-minds team add <userId> <userName> [role] - Add team member');
console.log(' mega-minds team list - List team members');
console.log(' mega-minds team remove <userId> - Remove team member');
console.log(' mega-minds team role <userId> <newRole> - Change user role');
console.log(' mega-minds team status - Show team status');
console.log(' mega-minds team activity [options] - View activity log');
console.log('');
console.log('🔒 Available roles: owner, collaborator, viewer');
console.log('📋 Team members can now coordinate agent usage and avoid conflicts');
await teamCollaboration.shutdown();
} catch (error) {
console.error('❌ Failed to enable team collaboration:', error.message);
process.exit(1);
}
}
/**
* Add team member
* Command: mega-minds team add <userId> <userName> [role]
*/
async function addTeamMember(userId, userName, role = 'collaborator') {
try {
const teamCollaboration = new TeamCollaboration(process.cwd());
await teamCollaboration.initialize(true);
console.log(`👥 Adding team member: ${userName} (${userId})`);
const member = await teamCollaboration.addTeamMember(userId, userName, role);
console.log('✅ Team member added successfully!');
console.log(` Name: ${member.name}`);
console.log(` ID: ${member.id}`);
console.log(` Role: ${member.role}`);
console.log(` Permissions: ${member.permissions.join(', ')}`);
await teamCollaboration.shutdown();
} catch (error) {
console.error('❌ Failed to add team member:', error.message);
process.exit(1);
}
}
/**
* Remove team member
* Command: mega-minds team remove <userId>
*/
async function removeTeamMember(userId) {
try {
const teamCollaboration = new TeamCollaboration(process.cwd());
await teamCollaboration.initialize(true);
console.log(`👥 Removing team member: ${userId}`);
const member = await teamCollaboration.removeTeamMember(userId);
console.log('✅ Team member removed successfully!');
console.log(` Removed: ${member.name} (${member.role})`);
await teamCollaboration.shutdown();
} catch (error) {
console.error('❌ Failed to remove team member:', error.message);
process.exit(1);
}
}
/**
* Change team member role
* Command: mega-minds team role <userId> <newRole>
*/
async function changeTeamMemberRole(userId, newRole) {
try {
const teamCollaboration = new TeamCollaboration(process.cwd());
await teamCollaboration.initialize(true);
console.log(`👥 Changing role for user ${userId} to ${newRole}`);
const member = await teamCollaboration.changeUserRole(userId, newRole);
console.log('✅ Role changed successfully!');
console.log(` User: ${member.name}`);
console.log(` New role: ${member.role}`);
console.log(` New permissions: ${member.permissions.join(', ')}`);
await teamCollaboration.shutdown();
} catch (error) {
console.error('❌ Failed to change user role:', error.message);
process.exit(1);
}
}
/**
* List team members
* Command: mega-minds team list
*/
async function listTeamMembers() {
try {
const teamCollaboration = new TeamCollaboration(process.cwd());
await teamCollaboration.initialize();
const status = await teamCollaboration.getTeamStatus();
if (!status.teamMode) {
console.log('👥 Team collaboration not enabled');
console.log('💡 Enable it with: mega-minds enable-team-collaboration');
return;
}
console.log('👥 Team Members:');
console.log('================');
if (status.members && status.members.length > 0) {
for (const member of status.members) {
const isOwner = member.role === 'owner';
const isActive = status.activeUsers.some(u => u.id === member.id);
const statusIcon = isActive ? '🟢' : '⚫';
const ownerIndicator = isOwner ? ' (OWNER)' : '';
console.log(`${statusIcon} ${member.name}${ownerIndicator}`);
console.log(` ID: ${member.id}`);
console.log(` Role: ${member.role}`);
console.log(` Status: ${member.status}`);
console.log(` Joined: ${new Date(member.joinedAt).toLocaleDateString()}`);
if (isActive) {
const activeUser = status.activeUsers.find(u => u.id === member.id);
console.log(` Last active: ${new Date(activeUser.lastActivity).toLocaleString()}`);
}
console.log('');
}
} else {
console.log('No team members found');
}
// Show active collaboration info
if (status.agentLocks.length > 0) {
console.log('🔒 Active Agent Locks:');
for (const lock of status.agentLocks) {
console.log(` ${lock.agentName}: locked by ${lock.userName}`);
console.log(` Task: ${lock.taskDescription || 'No description'}`);
console.log(` Since: ${new Date(lock.timestamp).toLocaleString()}`);
console.log('');
}
}
console.log('📊 Team Statistics:');
console.log(` Total members: ${status.teamSize}`);
console.log(` Active users: ${status.activeUsers.length}`);
console.log(` Agent locks: ${status.agentLocks.length}`);
await teamCollaboration.shutdown();
} catch (error) {
console.error('❌ Failed to list team members:', error.message);
process.exit(1);
}
}
/**
* Show team status
* Command: mega-minds team status
*/
async function showTeamStatus() {
try {
const teamCollaboration = new TeamCollaboration(process.cwd());
await teamCollaboration.initialize();
const status = await teamCollaboration.getTeamStatus();
console.log('👥 Team Collaboration Status:');
console.log('==============================');
console.log(`Team mode: ${status.teamMode ? 'Enabled' : 'Disabled'}`);
console.log(`Current user: ${status.currentUser.name} (${status.currentUser.role})`);
if (status.teamMode) {
console.log(`Team size: ${status.teamSize}`);
console.log(`Active users: ${status.activeUsers.length}`);
console.log(`Agent locks: ${status.agentLocks.length}`);
console.log(`Conflicts in queue: ${status.conflictQueue}`);
if (status.owner) {
console.log(`Project owner: ${status.owner.name}`);
}
} else {
console.log('💡 Enable team collaboration with: mega-minds enable-team-collaboration');
}
await teamCollaboration.shutdown();
} catch (error) {
console.error('❌ Failed to get team status:', error.message);
process.exit(1);
}
}
/**
* View team activity log
* Command: mega-minds team activity [--user=<userId>] [--type=<type>] [--limit=<limit>]
*/
async function viewTeamActivity(options = {}) {
try {
const teamCollaboration = new TeamCollaboration(process.cwd());
await teamCollaboration.initialize();
console.log('📋 Team Activity Log:');
console.log('=====================');
const activities = await teamCollaboration.getActivityLog({
userId: options.user,
activityType: options.type,
limit: options.limit || 20
});
if (activities.length === 0) {
console.log('No activities found');
return;
}
for (const activity of activities) {
const time = new Date(activity.timestamp).toLocaleString();
const user = activity.userName || activity.userId;
console.log(`[${time}] ${activity.activityType}`);
console.log(` User: ${user} (${activity.userRole})`);
if (activity.details && Object.keys(activity.details).length > 0) {
console.log(` Details: ${JSON.stringify(activity.details, null, 2)}`);
}
console.log('');
}
await teamCollaboration.shutdown();
} catch (error) {
console.error('❌ Failed to get activity log:', error.message);
process.exit(1);
}
}
/**
* Enable enterprise monitoring
* Command: mega-minds enable-monitoring
*/
async function enableEnterpriseMonitoring() {
try {
console.log('📊 Enabling enterprise monitoring...');
const monitoring = new EnterpriseMonitoring(process.cwd());
await monitoring.initialize(true); // Enable advanced monitoring
console.log('✅ Enterprise monitoring enabled successfully!');
console.log('');
console.log('💡 Available monitoring commands:');
console.log(' mega-minds monitoring status - Show monitoring status');
console.log(' mega-minds monitoring metrics - View current metrics');
console.log(' mega-minds monitoring alerts - View recent alerts');
console.log(' mega-minds monitoring health - System health check');
console.log(' mega-minds monitoring report [days] - Generate analytics report');
console.log('');
console.log('📊 Monitoring features:');
console.log(' • Real-time performance metrics (<500ms collection)');
console.log(' • Automated alerting for memory, performance, and errors');
console.log(' • Enterprise analytics and reporting');
console.log(' • Historical data retention and trending');
await monitoring.shutdown();
} catch (error) {
console.error('❌ Failed to enable enterprise monitoring:', error.message);
process.exit(1);
}
}
/**
* Show monitoring status
* Command: mega-minds monitoring status
*/
async function showMonitoringStatus() {
try {
const monitoring = new EnterpriseMonitoring(process.cwd());
await monitoring.initialize();
const health = monitoring.getHealthStatus();
const metrics = monitoring.getCurrentMetrics();
console.log('📊 Enterprise Monitoring Status:');
console.log('=================================');
console.log(`Status: ${health.status.toUpperCase()}`);
console.log(`Monitoring active: ${health.monitoring}`);
console.log(`Uptime: ${Math.round(health.uptime / 60)} minutes`);
console.log(`Memory usage: ${health.memoryUsage}MB`);
console.log(`Quality score: ${health.qualityScore}`);
if (health.issues.length > 0) {
console.log('');
console.log('⚠️ Issues:');
health.issues.forEach(issue => {
console.log(` • ${issue}`);
});
}
if (metrics.timestamp) {
console.log(`Last update: ${new Date(metrics.timestamp).toLocaleString()}`);
console.log(`Collection time: ${metrics.collectionTime}ms`);
}
await monitoring.shutdown();
} catch (error) {
console.error('❌ Failed to get monitoring status:', error.message);
process.exit(1);
}
}
/**
* Show current metrics
* Command: mega-minds monitoring metrics
*/
async function showCurrentMetrics() {
try {
const monitoring = new EnterpriseMonitoring(process.cwd());
await monitoring.initialize();
const metrics = monitoring.getCurrentMetrics();
console.log('📊 Current System Metrics:');
console.log('===========================');
if (metrics.system) {
console.log('💾 Memory:');
console.log(` Heap used: ${metrics.system.memory.heapUsed}MB`);
console.log(` Heap total: ${metrics.system.memory.heapTotal}MB`);
console.log(` Usage: ${metrics.system.memory.usagePercent}%`);
console.log('');
}
if (metrics.agents) {
console.log('🤖 Agents:');
console.log(` Active agents: ${metrics.agents.activeCount}`);
if (metrics.agents.lastUpdate) {
console.log(` Last update: ${new Date(metrics.agents.lastUpdate).toLocaleString()}`);
}
console.log('');
}
if (metrics.quality) {
console.log('🛡️ Quality:');
console.log(` Overall score: ${metrics.quality.overallScore}`);
console.log(` Status: ${metrics.quality.passed ? 'PASS' : 'FAIL'}`);
console.log(` Gates: ${metrics.quality.gatesCount}`);
console.log('');
}
if (metrics.application) {
console.log('📁 Application:');
console.log(` State files: ${metrics.application.stateFiles}`);
console.log(` Session files: ${metrics.application.sessionFiles}`);
console.log('');
}
console.log(`Collected: ${new Date(metrics.timestamp).toLocaleString()}`);
console.log(`Collection time: ${metrics.collectionTime}ms (target: <500ms)`);
await monitoring.shutdown();
} catch (error) {
console.error('❌ Failed to get current metrics:', error.message);
process.exit(1);
}
}
/**
* Show recent alerts
* Command: mega-minds monitoring alerts [limit]
*/
async function showRecentAlerts(limit = 10) {
try {
const monitoring = new EnterpriseMonitoring(process.cwd());
await monitoring.initialize();
const alerts = monitoring.getRecentAlerts(limit);
console.log('🚨 Recent Alerts:');
console.log('==================');
if (alerts.length === 0) {
console.log('No alerts found');
return;
}
for (const alert of alerts) {
const time = new Date(alert.timestamp).toLocaleString();
const emoji = alert.level === 'critical' ? '🚨' : '⚠️';
console.log(`${emoji} [${alert.level.toUpperCase()}] ${time}`);
console.log(` Type: ${alert.type}`);
console.log(` Message: ${alert.message}`);
console.log(` Value: ${alert.value} (threshold: ${alert.threshold})`);
console.log('');
}
await monitoring.shutdown();
} catch (error) {
console.error('❌ Failed to get alerts:', error.message);
process.exit(1);
}
}
/**
* Generate analytics report
* Command: mega-minds monitoring report [days]
*/
async function generateAnalyticsReport(days = 7) {
try {
console.log(`📊 Generating ${days}-day analytics report...`);
const monitoring = new EnterpriseMonitoring(process.cwd(), { analyticsEnabled: true });
await monitoring.initialize(true);
const report = await monitoring.generateAnalyticsReport(days);
console.log('📊 Analytics Report:');
console.log('====================');
console.log(`Period: ${new Date(report.period.start).toLocaleDateString()} - ${new Date(report.period.end).toLocaleDateString()}`);
console.log('');
console.log('📈 Summary:');
console.log(` Average memory usage: ${report.summary.averageMemoryUsage}MB`);
console.log(` Peak memory usage: ${report.summary.peakMemoryUsage}MB`);
console.log(` Average quality score: ${report.summary.averageQualityScore}`);
console.log(` Total alerts: ${report.summary.totalAlerts}`);
console.log('');
if (report.trends.memory.length > 0) {
console.log('📊 Memory Trend (daily averages):');
report.trends.memory.forEach(point => {
console.log(` ${point.date}: ${point.value}MB`);
});
console.log('');
}
if (report.trends.alerts.length > 0) {
console.log('🚨 Alert Trend (daily counts):');
report.trends.alerts.forEach(point => {
console.log(` ${point.date}: ${point.value} alerts`);
});
console.log('');
}
console.log(`Report generated: ${new Date(report.generated).toLocaleString()}`);
await monitoring.shutdown();
} catch (error) {
console.error('❌ Failed to generate analytics report:', error.message);
process.exit(1);
}
}
/**
* Enable structured logging
* Command: mega-minds enable-logging
*/
async function enableStructuredLogging() {
try {
console.log('📝 Enabling structured logging...');
const logger = new StructuredLogger(process.cwd());
await logger.initialize(true); // Enable structured logging
console.log('✅ Structured logging enabled successfully!');
console.log('');
console.log('💡 Available logging commands:');
console.log(' mega-minds logging status - Show logging status');
console.log(' mega-minds logging level <level> - Set log level');
console.log(' mega-minds logging stats - View logging statistics');
console.log('');
console.log('📝 Logging features:');
console.log(' • Structured JSON output for log aggregation');
console.log(' • Configurable log levels (debug, info, warning, error, critical)');
console.log(' • Automatic log rotation and retention');
console.log(' • Enterprise audit trails for compliance');
console.log(' • Performance-optimized with buffering');
await logger.shutdown();
} catch (error) {
console.error('❌ Failed to enable structured logging:', error.message);
process.exit(1);
}
}
/**
* Show logging status
* Command: mega-minds logging status
*/
async function showLoggingStatus() {
try {
const logger = new StructuredLogger(process.cwd());
await logger.initialize();
const stats = logger.getLogStats();
console.log('📝 Structured Logging Status:');
console.log('==============================');
console.log(`Structured logging: ${stats.structuredLogging ? 'Enabled' : 'Disabled'}`);
console.log(`Current log level: ${stats.currentLogLevel}`);
console.log(`Total logs: ${stats.totalLogs}`);
console.log(`Error logs: ${stats.errorLogs}`);
console.log(`Warning logs: ${stats.warningLogs}`);
console.log(`Buffer size: ${stats.bufferSize}`);
console.log(`Average log time: ${stats.avgLogTime.toFixed(2)}ms`);
if (stats.lastFlush) {
console.log(`Last flush: ${new Date(stats.lastFlush).toLocaleString()}`);
}
await logger.shutdown();
} catch (error) {
console.error('❌ Failed to get logging status:', error.message);
process.exit(1);
}
}
/**
* Set log level
* Command: mega-minds logging level <level>
*/
async function setLogLevel(level) {
try {
const logger = new StructuredLogger(process.cwd());
await logger.initialize(true);
console.log(`📝 Setting log level to: ${level}`);
logger.setLogLevel(level);
console.log('✅ Log level updated successfully!');
console.log(`New log level: ${level}`);
await logger.shutdown();
} catch (error) {
console.error('❌ Failed to set log level:', error.message);
process.exit(1);
}
}
/**
* Show enterprise administration help
*/
function showEnterpriseHelp() {
console.log('🏢 Mega-Minds Enterprise Administration');
console.log('=======================================');
console.log('');
console.log('Team Collaboration:');
console.log(' mega-minds enable-team-collaboration - Enable team mode');
console.log(' mega-minds team add <id> <name> [role] - Add team member');
console.log(' mega-minds team list - List team members');
console.log(' mega-minds team remove <id> - Remove team member');
console.log(' mega-minds team role <id> <role> - Change user role');
console.log(' mega-minds team status - Show team status');
console.log(' mega-minds team activity [--user=] [--type=] - View activity log');
console.log('');
console.log('Enterprise Monitoring:');
console.log(' mega-minds enable-monitoring - Enable advanced monitoring');
console.log(' mega-minds monitoring status - Show monitoring status');
console.log(' mega-minds monitoring metrics - View current metrics');
console.log(' mega-minds monitoring alerts [limit] - View recent alerts');
console.log(' mega-minds monitoring health - System health check');
console.log(' mega-minds monitoring report [days] - Generate analytics report');
console.log('');
console.log('Structured Logging:');
console.log(' mega-minds enable-logging - Enable structured logging');
console.log(' mega-minds logging status - Show logging status');
console.log(' mega-minds logging level <level> - Set log level');
console.log(' mega-minds logging stats - View logging statistics');
console.log('');
console.log('💡 Enterprise Features:');
console.log(' • Multi-user collaboration with role-based permissions');
console.log(' • Real-time performance monitoring and alerting');
console.log(' • Structured logging with audit trails');
console.log(' • Advanced analytics and reporting');
console.log(' • Production-grade error handling and recovery');
}
module.exports = {
enableTeamCollaboration,
addTeamMember,
removeTeamMember,
changeTeamMemberRole,
listTeamMembers,
showTeamStatus,
viewTeamActivity,
enableEnterpriseMonitoring,
showMonitoringStatus,
showCurrentMetrics,
showRecentAlerts,
generateAnalyticsReport,
enableStructuredLogging,
showLoggingStatus,
setLogLevel,
showEnterpriseHelp
};