UNPKG

@versatil/sdlc-framework

Version:

🚀 AI-Native SDLC framework with 11-MCP ecosystem, RAG memory, OPERA orchestration, and 6 specialized agents achieving ZERO CONTEXT LOSS. Features complete CI/CD pipeline with 7 GitHub workflows (MCP testing, security scanning, performance benchmarking),

869 lines (736 loc) 29.1 kB
/** * VERSATIL SDLC Framework - Emergency Response System * Automatic agent cascade for critical development situations * * This system handles emergencies like: * - Build failures that block development * - Router issues that break the entire application * - Dependency conflicts that prevent deployment * - Security vulnerabilities that need immediate attention * - Performance issues that impact user experience */ import { versatilDispatcher } from './agent-dispatcher.js'; import { qualityGateEnforcer } from './quality-gate-enforcer.js'; import { enhancedContextValidator } from './enhanced-context-validator.js'; import { cursorClaudeBridge } from './cursor-claude-bridge.js'; import { spawn, exec } from 'child_process'; import { promises as fs } from 'fs'; import path from 'path'; import { promisify } from 'util'; const execAsync = promisify(exec); interface EmergencyContext { type: EmergencyType; severity: EmergencySeverity; errorMessage: string; affectedSystems: string[]; detectedAt: Date; stackTrace?: string; affectedFiles?: string[]; userImpact: 'none' | 'low' | 'medium' | 'high' | 'critical'; businessImpact: 'none' | 'low' | 'medium' | 'high' | 'critical'; } export type EmergencyType = | 'build_failure' | 'runtime_error' | 'dependency_conflict' | 'security_vulnerability' | 'performance_degradation' | 'data_loss_risk' | 'router_failure' | 'api_failure' | 'deployment_failure' | 'test_failure_cascade' | 'memory_leak' | 'infinite_loop'; export type EmergencySeverity = 'low' | 'medium' | 'high' | 'critical' | 'catastrophic'; interface EmergencyResponse { responseId: string; activatedAgents: string[]; mcpToolsActivated: string[]; timeline: EmergencyAction[]; estimatedResolutionTime: number; escalationRequired: boolean; status: 'responding' | 'investigating' | 'fixing' | 'testing' | 'resolved' | 'escalated'; resolution?: string; } interface EmergencyAction { timestamp: Date; agent: string; action: string; result: 'success' | 'failure' | 'partial' | 'pending'; details: string; nextActions?: string[]; } interface EscalationRule { condition: (context: EmergencyContext) => boolean; escalateTo: string[]; notificationChannels: string[]; maxResponseTime: number; // minutes } /** * Emergency Response Coordination System * Handles critical development situations with automatic agent cascade */ class EmergencyResponseSystem { private activeEmergencies: Map<string, EmergencyResponse> = new Map(); private emergencyRules: Map<EmergencyType, EscalationRule> = new Map(); private responseQueue: EmergencyContext[] = []; private isProcessing: boolean = false; private maxConcurrentEmergencies: number = 3; constructor() { this.initializeEmergencySystem(); } /** * Initialize Emergency Response System */ private async initializeEmergencySystem(): Promise<void> { console.log('🚨 Emergency Response System: Initializing...'); // Setup emergency detection rules this.setupEmergencyRules(); // Setup system monitoring this.setupSystemMonitoring(); // Initialize escalation protocols this.initializeEscalationRules(); // Setup emergency queue processing this.setupEmergencyQueue(); // Connect to other VERSATIL systems this.connectToVERSATILSystems(); console.log('✅ Emergency Response System: ACTIVE'); console.log(`🎯 Monitoring for ${Object.keys(this.emergencyRules).length} emergency types`); } /** * Main Emergency Handler - Entry Point for All Emergencies */ async handleEmergency(errorMessage: string, context: Partial<EmergencyContext> = {}): Promise<EmergencyResponse> { console.log('🚨 EMERGENCY DETECTED:'); console.log(` Error: ${errorMessage}`); // Classify the emergency const emergencyContext = await this.classifyEmergency(errorMessage, context); console.log(` Type: ${emergencyContext.type}`); console.log(` Severity: ${emergencyContext.severity}`); console.log(` User Impact: ${emergencyContext.userImpact}`); // Generate unique response ID const responseId = `EMRG_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; // Create initial response structure const response: EmergencyResponse = { responseId, activatedAgents: [], mcpToolsActivated: [], timeline: [], estimatedResolutionTime: this.estimateResolutionTime(emergencyContext), escalationRequired: this.shouldEscalate(emergencyContext), status: 'responding' }; // Add to active emergencies this.activeEmergencies.set(responseId, response); // Start emergency response process await this.executeEmergencyResponse(emergencyContext, response); return response; } /** * Classify Emergency Type and Severity */ private async classifyEmergency(errorMessage: string, context: Partial<EmergencyContext>): Promise<EmergencyContext> { const errorLower = errorMessage.toLowerCase(); let type: EmergencyType = 'runtime_error'; let severity: EmergencySeverity = 'medium'; let userImpact: 'none' | 'low' | 'medium' | 'high' | 'critical' = 'medium'; let businessImpact: 'none' | 'low' | 'medium' | 'high' | 'critical' = 'low'; // Build failure detection if (/build.*fail|compilation.*error|webpack.*error|vite.*error/.test(errorLower)) { type = 'build_failure'; severity = 'high'; userImpact = 'high'; businessImpact = 'high'; } // Router failure detection (learned from our experience) else if (/no routes matched|router.*error|navigation.*fail/.test(errorLower)) { type = 'router_failure'; severity = 'critical'; userImpact = 'critical'; businessImpact = 'critical'; } // Dependency conflict detection else if (/dependency.*conflict|peer.*dependency|eresolve|module.*not.*found/.test(errorLower)) { type = 'dependency_conflict'; severity = 'high'; userImpact = 'medium'; businessImpact = 'medium'; } // Security vulnerability detection else if (/security.*vulnerability|audit.*fail|cve-|malicious/.test(errorLower)) { type = 'security_vulnerability'; severity = 'critical'; userImpact = 'critical'; businessImpact = 'critical'; } // API failure detection else if (/api.*error|fetch.*fail|network.*error|timeout|502|503|504/.test(errorLower)) { type = 'api_failure'; severity = 'high'; userImpact = 'high'; businessImpact = 'high'; } // Performance degradation detection else if (/performance|slow|timeout|memory.*leak|cpu.*high/.test(errorLower)) { type = 'performance_degradation'; severity = 'medium'; userImpact = 'medium'; businessImpact = 'low'; } // Test failure cascade detection else if (/test.*fail|spec.*fail|assertion.*error/.test(errorLower)) { type = 'test_failure_cascade'; severity = 'medium'; userImpact = 'low'; businessImpact = 'low'; } // Deployment failure detection else if (/deploy.*fail|deployment.*error|vercel.*error|supabase.*error/.test(errorLower)) { type = 'deployment_failure'; severity = 'critical'; userImpact = 'critical'; businessImpact = 'critical'; } return { type, severity, errorMessage, affectedSystems: await this.identifyAffectedSystems(errorMessage), detectedAt: new Date(), userImpact, businessImpact, ...context }; } /** * Execute Emergency Response Protocol */ private async executeEmergencyResponse(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log(`🎯 EXECUTING EMERGENCY RESPONSE: ${context.type}`); response.status = 'investigating'; // Phase 1: Immediate Response - Activate primary agents const primaryAgents = this.getPrimaryAgentsForEmergency(context.type); await this.activatePrimaryAgents(primaryAgents, context, response); // Phase 2: System Analysis - Run diagnostics response.status = 'investigating'; await this.runEmergencyDiagnostics(context, response); // Phase 3: Coordinated Fix - Execute fixes with multiple agents response.status = 'fixing'; await this.executeCoordinatedFix(context, response); // Phase 4: Validation - Test fixes response.status = 'testing'; await this.validateEmergencyFix(context, response); // Phase 5: Resolution or Escalation if (response.status === 'testing') { response.status = 'resolved'; console.log(`✅ Emergency ${response.responseId} RESOLVED`); await this.logEmergencyResolution(context, response); } else { response.status = 'escalated'; await this.escalateEmergency(context, response); } } /** * Get Primary Agents for Emergency Type */ private getPrimaryAgentsForEmergency(type: EmergencyType): string[] { const agentMap: Record<EmergencyType, string[]> = { build_failure: ['Marcus (Backend)', 'James (Frontend)', 'Maria (QA)'], runtime_error: ['James (Frontend)', 'Maria (QA)', 'Marcus (Backend)'], dependency_conflict: ['Marcus (Backend)', 'Maria (QA)'], security_vulnerability: ['Marcus (Backend)', 'Maria (QA)', 'Sarah (PM)'], performance_degradation: ['Dr. AI (ML)', 'Marcus (Backend)', 'Maria (QA)'], data_loss_risk: ['Marcus (Backend)', 'Sarah (PM)', 'Maria (QA)'], router_failure: ['James (Frontend)', 'Marcus (Backend)', 'Maria (QA)'], api_failure: ['Marcus (Backend)', 'Maria (QA)', 'Dr. AI (ML)'], deployment_failure: ['Marcus (Backend)', 'Maria (QA)', 'Sarah (PM)'], test_failure_cascade: ['Maria (QA)', 'James (Frontend)', 'Marcus (Backend)'], memory_leak: ['Dr. AI (ML)', 'Marcus (Backend)', 'Maria (QA)'], infinite_loop: ['Maria (QA)', 'Dr. AI (ML)', 'James (Frontend)'] }; return agentMap[type] || ['Maria (QA)', 'Marcus (Backend)']; } /** * Activate Primary Agents for Emergency */ private async activatePrimaryAgents(agents: string[], context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log(`🤖 ACTIVATING PRIMARY AGENTS: ${agents.join(', ')}`); for (const agentName of agents) { try { // Find agent trigger if (!agentName) continue; const agentKey = agentName.toLowerCase().split('(')[0]!.trim(); const agentTrigger = versatilDispatcher['agents']?.get(agentKey); if (agentTrigger) { const agentResponse = await versatilDispatcher.activateAgent(agentTrigger, { userRequest: `EMERGENCY: ${context.errorMessage}`, emergency: true, emergencyType: context.type, emergencySeverity: context.severity }); response.activatedAgents.push(agentName); response.timeline.push({ timestamp: new Date(), agent: agentName, action: 'Agent activated for emergency response', result: 'success', details: `Activated to handle ${context.type} emergency` }); console.log(`✅ ${agentName} activated for emergency`); // Activate agent-specific MCP tools await this.activateEmergencyMCPTools(agentName, context, response); } else { console.error(`❌ Agent ${agentName} not found in dispatcher`); } } catch (error) { console.error(`❌ Failed to activate agent ${agentName}:`, error); response.timeline.push({ timestamp: new Date(), agent: agentName, action: 'Agent activation failed', result: 'failure', details: error instanceof Error ? error.message : String(error) }); } } } /** * Activate Emergency MCP Tools */ private async activateEmergencyMCPTools(agentName: string, context: EmergencyContext, response: EmergencyResponse): Promise<void> { if (!agentName) return; const emergencyMCPMap: Record<string, string[]> = { 'james': ['chrome', 'shadcn'], // Frontend issues need browser debugging 'marcus': ['github'], // Backend issues need repository analysis 'maria': ['chrome', 'playwright'], // QA needs testing tools 'dr-ai': ['github'] // AI issues need code analysis }; const agentKey = agentName.toLowerCase().split('(')[0]!.trim(); const mcpTools = emergencyMCPMap[agentKey] || []; for (const tool of mcpTools) { try { console.log(`🛠️ EMERGENCY MCP ACTIVATION: ${tool} for ${agentName}`); // This would activate actual MCP tools in Claude Code await this.activateEmergencyMCP(tool, context); response.mcpToolsActivated.push(tool); response.timeline.push({ timestamp: new Date(), agent: agentName, action: `Activated ${tool} MCP for emergency response`, result: 'success', details: `Emergency ${tool} MCP ready for ${context.type} handling` }); } catch (error) { console.error(`❌ Failed to activate ${tool} MCP:`, error); } } } /** * Activate Emergency MCP Tool */ private async activateEmergencyMCP(tool: string, context: EmergencyContext): Promise<void> { switch (tool) { case 'chrome': console.log('🌐 EMERGENCY Chrome MCP: Activated for immediate debugging'); // In Claude Code, this would trigger immediate Chrome MCP with emergency priority break; case 'playwright': console.log('🎭 EMERGENCY Playwright MCP: Activated for automated testing'); // Emergency automated testing to verify fixes break; case 'shadcn': console.log('🎨 EMERGENCY Shadcn MCP: Activated for component library fixes'); // Emergency component library operations break; case 'github': console.log('🐙 EMERGENCY GitHub MCP: Activated for repository analysis'); // Emergency repository analysis and history review break; } } /** * Run Emergency Diagnostics */ private async runEmergencyDiagnostics(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log('🔍 RUNNING EMERGENCY DIAGNOSTICS...'); try { // Run type-specific diagnostics switch (context.type) { case 'build_failure': await this.diagnosticsBuildFailure(context, response); break; case 'router_failure': await this.diagnosticsRouterFailure(context, response); break; case 'dependency_conflict': await this.diagnosticsDependencyConflict(context, response); break; case 'api_failure': await this.diagnosticsAPIFailure(context, response); break; default: await this.diagnosticsGenericError(context, response); } } catch (error) { console.error('❌ Emergency diagnostics failed:', error); response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Diagnostics failed', result: 'failure', details: error instanceof Error ? error.message : String(error) }); } } /** * Build Failure Diagnostics */ private async diagnosticsBuildFailure(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log('🔨 Diagnosing build failure...'); try { // Check package.json for obvious issues const packageJsonPath = path.join(process.cwd(), 'package.json'); const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8')); // Check for missing scripts if (!packageJson.scripts?.build) { response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Build script missing detected', result: 'success', details: 'No build script found in package.json', nextActions: ['Add build script', 'Check configuration'] }); } // Run build with detailed output const { stdout, stderr } = await execAsync('npm run build 2>&1 || true'); response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Build diagnostic completed', result: stderr ? 'failure' : 'success', details: `Build output: ${stdout.substring(0, 500)}${stderr ? ' | Errors: ' + stderr.substring(0, 500) : ''}` }); } catch (error) { response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Build diagnostics failed', result: 'failure', details: error instanceof Error ? error.message : String(error) }); } } /** * Router Failure Diagnostics (learned from our experience) */ private async diagnosticsRouterFailure(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log('🧭 Diagnosing router failure...'); try { // Check App.tsx for route definitions const appTsxPath = path.join(process.cwd(), 'src', 'App.tsx'); let appContent = ''; try { appContent = await fs.readFile(appTsxPath, 'utf-8'); } catch (error) { // Try alternative App files try { const altAppPath = path.join(process.cwd(), 'src', 'App-simple-uniform.tsx'); appContent = await fs.readFile(altAppPath, 'utf-8'); } catch {} } if (appContent) { const hasRouter = appContent.includes('BrowserRouter') || appContent.includes('Router'); const hasRoutes = appContent.includes('<Route'); const routeCount = (appContent.match(/<Route/g) || []).length; response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Router configuration analysis', result: hasRouter && hasRoutes ? 'success' : 'failure', details: `Router: ${hasRouter}, Routes: ${hasRoutes}, Count: ${routeCount}`, nextActions: hasRouter && hasRoutes ? ['Check route paths'] : ['Fix router configuration'] }); // Check index.tsx for correct App import try { const indexPath = path.join(process.cwd(), 'src', 'index.tsx'); const indexContent = await fs.readFile(indexPath, 'utf-8'); const appImport = indexContent.match(/import.*from.*['"](.*App.*)['"]/); response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'App import analysis', result: 'success', details: `App imported from: ${appImport ? appImport[1] : 'not found'}`, nextActions: appImport ? [] : ['Fix App import'] }); } catch (error) { response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Index.tsx analysis failed', result: 'failure', details: error instanceof Error ? error.message : String(error) }); } } } catch (error) { response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Router diagnostics failed', result: 'failure', details: error instanceof Error ? error.message : String(error) }); } } /** * Dependency Conflict Diagnostics */ private async diagnosticsDependencyConflict(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log('📦 Diagnosing dependency conflicts...'); try { const { stdout, stderr } = await execAsync('npm ls --depth=0 2>&1 || true'); const hasConflicts = stderr && stderr.includes('ERESOLVE'); const conflictDetails = hasConflicts ? stderr.substring(0, 1000) : 'No conflicts detected'; response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Dependency conflict analysis', result: hasConflicts ? 'failure' : 'success', details: conflictDetails, nextActions: hasConflicts ? ['Resolve dependency conflicts', 'Update package versions'] : [] }); } catch (error) { response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Dependency diagnostics failed', result: 'failure', details: error instanceof Error ? error.message : String(error) }); } } /** * API Failure Diagnostics */ private async diagnosticsAPIFailure(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log('🌐 Diagnosing API failure...'); // This would check API endpoints, network connectivity, etc. response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'API diagnostics placeholder', result: 'success', details: 'API diagnostics would check endpoint health, network connectivity, and service status' }); } /** * Generic Error Diagnostics */ private async diagnosticsGenericError(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log('🔍 Running generic error diagnostics...'); response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Generic error analysis', result: 'success', details: `Error pattern analysis completed for: ${context.errorMessage}` }); } /** * Execute Coordinated Fix */ private async executeCoordinatedFix(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log('🔧 EXECUTING COORDINATED FIX...'); // This would coordinate the actual fix execution between agents // For now, we simulate the coordination response.timeline.push({ timestamp: new Date(), agent: 'Emergency Coordinator', action: 'Coordinated fix initiated', result: 'success', details: `Fix coordination started for ${context.type} emergency` }); // Simulate agent collaboration for (const agent of response.activatedAgents) { response.timeline.push({ timestamp: new Date(), agent, action: 'Emergency fix contribution', result: 'success', details: `${agent} contributed to emergency fix resolution` }); } } /** * Validate Emergency Fix */ private async validateEmergencyFix(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log('✅ VALIDATING EMERGENCY FIX...'); try { // Run basic validation based on emergency type let validationPassed = false; switch (context.type) { case 'build_failure': const { stdout, stderr } = await execAsync('npm run build 2>&1 || true'); validationPassed = !stderr && stdout.includes('build'); break; case 'router_failure': // This would test router functionality with Chrome MCP validationPassed = true; // Placeholder break; default: validationPassed = true; // Placeholder for other types } response.timeline.push({ timestamp: new Date(), agent: 'Emergency Validator', action: 'Emergency fix validation', result: validationPassed ? 'success' : 'failure', details: `Fix validation ${validationPassed ? 'passed' : 'failed'} for ${context.type}` }); if (!validationPassed) { response.escalationRequired = true; } } catch (error) { response.timeline.push({ timestamp: new Date(), agent: 'Emergency Validator', action: 'Fix validation failed', result: 'failure', details: error instanceof Error ? error.message : String(error) }); response.escalationRequired = true; } } /** * Helper Methods */ private async identifyAffectedSystems(errorMessage: string): Promise<string[]> { const systems = []; const errorLower = errorMessage.toLowerCase(); if (/frontend|ui|component|react/.test(errorLower)) systems.push('Frontend'); if (/backend|api|server|supabase/.test(errorLower)) systems.push('Backend'); if (/database|sql|db/.test(errorLower)) systems.push('Database'); if (/build|webpack|vite/.test(errorLower)) systems.push('Build System'); if (/router|navigation/.test(errorLower)) systems.push('Routing'); if (/test|spec/.test(errorLower)) systems.push('Testing'); return systems.length > 0 ? systems : ['Unknown']; } private estimateResolutionTime(context: EmergencyContext): number { const baseTime: Record<EmergencyType, number> = { build_failure: 30, runtime_error: 20, dependency_conflict: 45, security_vulnerability: 60, performance_degradation: 90, data_loss_risk: 120, router_failure: 25, api_failure: 40, deployment_failure: 60, test_failure_cascade: 30, memory_leak: 120, infinite_loop: 15 }; const base = baseTime[context.type] || 30; const multiplier = { low: 0.5, medium: 1, high: 1.5, critical: 2, catastrophic: 3 }[context.severity]; return Math.round(base * multiplier); } private shouldEscalate(context: EmergencyContext): boolean { return ( context.severity === 'catastrophic' || (context.severity === 'critical' && context.businessImpact === 'critical') || context.type === 'data_loss_risk' || context.type === 'security_vulnerability' ); } private setupEmergencyRules(): void { // This would setup classification rules console.log('📋 Emergency classification rules initialized'); } private setupSystemMonitoring(): void { // This would setup real-time monitoring console.log('👁️ System monitoring initialized'); } private initializeEscalationRules(): void { // This would setup escalation protocols console.log('📈 Escalation rules initialized'); } private setupEmergencyQueue(): void { // This would setup queue processing console.log('📬 Emergency queue processing initialized'); } private connectToVERSATILSystems(): void { // Connect to other VERSATIL components console.log('🔗 Connected to VERSATIL systems'); } private async escalateEmergency(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log(`🚨 ESCALATING EMERGENCY: ${response.responseId}`); response.timeline.push({ timestamp: new Date(), agent: 'Emergency System', action: 'Emergency escalated', result: 'success', details: `Escalated due to ${context.severity} severity and ${context.businessImpact} business impact` }); } private async logEmergencyResolution(context: EmergencyContext, response: EmergencyResponse): Promise<void> { console.log(`📋 LOGGING EMERGENCY RESOLUTION: ${response.responseId}`); const logEntry = { timestamp: new Date().toISOString(), responseId: response.responseId, emergencyType: context.type, severity: context.severity, resolutionTime: Date.now() - context.detectedAt.getTime(), activatedAgents: response.activatedAgents, mcpToolsUsed: response.mcpToolsActivated, timeline: response.timeline }; try { const logPath = path.join(process.cwd(), '.versatil', 'emergency-log.json'); await fs.appendFile(logPath, JSON.stringify(logEntry, null, 2) + '\n'); } catch (error) { console.error('❌ Failed to log emergency resolution:', error); } } /** * Public API Methods */ getActiveEmergencies(): EmergencyResponse[] { return Array.from(this.activeEmergencies.values()); } async getEmergencyStatus(responseId: string): Promise<EmergencyResponse | null> { return this.activeEmergencies.get(responseId) || null; } getSystemStatus() { return { activeEmergencies: this.activeEmergencies.size, queuedEmergencies: this.responseQueue.length, maxConcurrentEmergencies: this.maxConcurrentEmergencies, isProcessing: this.isProcessing, emergencyRules: this.emergencyRules.size, status: 'operational' }; } } // Export singleton instance export const emergencyResponseSystem = new EmergencyResponseSystem(); // Public API functions export async function handleEmergencyResponse(errorMessage: string, context?: Partial<EmergencyContext>): Promise<EmergencyResponse> { return await emergencyResponseSystem.handleEmergency(errorMessage, context); } export function getActiveEmergencies(): EmergencyResponse[] { return emergencyResponseSystem.getActiveEmergencies(); } export function getEmergencySystemStatus() { return emergencyResponseSystem.getSystemStatus(); } console.log('🚨 Emergency Response System: LOADED');