@stackmemoryai/stackmemory 0.3.26 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/integrations/ralph/bridge/ralph-stackmemory-bridge.ts"],
4
- "sourcesContent": ["/**\n * Ralph-StackMemory Bridge\n * Main integration point connecting Ralph Wiggum loops with StackMemory persistence\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { FrameManager } from '../../../core/context/frame-manager.js';\nimport { SessionManager } from '../../../core/session/session-manager.js';\nimport { SQLiteAdapter } from '../../../core/database/sqlite-adapter.js';\nimport { ContextBudgetManager } from '../context/context-budget-manager.js';\nimport { StateReconciler } from '../state/state-reconciler.js';\nimport { IterationLifecycle, LifecycleHooks } from '../lifecycle/iteration-lifecycle.js';\nimport { PerformanceOptimizer } from '../performance/performance-optimizer.js';\nimport {\n RalphLoopState,\n RalphIteration,\n BridgeState,\n BridgeOptions,\n RalphStackMemoryConfig,\n IterationContext,\n Frame,\n FrameType,\n RecoveryState,\n Checkpoint,\n StateSource,\n} from '../types.js';\n\nexport class RalphStackMemoryBridge {\n private state: BridgeState;\n private config: RalphStackMemoryConfig;\n private frameManager?: FrameManager;\n private sessionManager: SessionManager;\n private recoveryState?: RecoveryState;\n private readonly ralphDir = '.ralph';\n\n constructor(options?: BridgeOptions) {\n // Initialize configuration\n this.config = this.mergeConfig(options?.config);\n\n // Initialize managers\n this.state = {\n initialized: false,\n contextManager: new ContextBudgetManager(this.config.contextBudget),\n stateReconciler: new StateReconciler(this.config.stateReconciliation),\n performanceOptimizer: new PerformanceOptimizer(this.config.performance),\n };\n\n this.sessionManager = SessionManager.getInstance();\n\n // Setup lifecycle hooks\n this.setupLifecycleHooks(options);\n\n logger.info('Ralph-StackMemory Bridge initialized', {\n config: {\n maxTokens: this.config.contextBudget.maxTokens,\n asyncSaves: this.config.performance.asyncSaves,\n checkpoints: this.config.lifecycle.checkpoints.enabled,\n },\n });\n }\n\n /**\n * Initialize bridge with session\n */\n async initialize(options?: {\n sessionId?: string;\n loopId?: string;\n task?: string;\n criteria?: string;\n }): Promise<void> {\n logger.info('Initializing bridge', options);\n\n try {\n // Initialize session manager\n await this.sessionManager.initialize();\n\n // Get or create session\n const session = await this.sessionManager.getOrCreateSession({\n sessionId: options?.sessionId,\n });\n\n this.state.currentSession = session;\n\n // Initialize frame manager with database\n const dbAdapter = await this.getDatabaseAdapter();\n await dbAdapter.connect();\n const db = (dbAdapter as any).db; // Get the actual Database instance\n const projectId = path.basename(this.ralphDir);\n this.frameManager = new FrameManager(db, projectId, { skipContextBridge: true });\n\n // Check for existing loop or create new\n if (options?.loopId) {\n await this.resumeLoop(options.loopId);\n } else if (options?.task && options?.criteria) {\n await this.createNewLoop(options.task, options.criteria);\n } else {\n // Try to recover from crash\n await this.attemptRecovery();\n }\n\n this.state.initialized = true;\n logger.info('Bridge initialized successfully');\n } catch (error: any) {\n logger.error('Bridge initialization failed', { error: error.message });\n throw error;\n }\n }\n\n /**\n * Create new Ralph loop with StackMemory integration\n */\n async createNewLoop(task: string, criteria: string): Promise<RalphLoopState> {\n logger.info('Creating new Ralph loop', { task: task.substring(0, 100) });\n\n const loopId = uuidv4();\n const startTime = Date.now();\n\n // Create Ralph loop state\n const loopState: RalphLoopState = {\n loopId,\n task,\n criteria,\n iteration: 0,\n status: 'initialized',\n startTime,\n lastUpdateTime: startTime,\n startCommit: await this.getCurrentGitCommit(),\n };\n\n // Initialize Ralph directory structure\n await this.initializeRalphDirectory(loopState);\n\n // Create root frame in StackMemory\n const rootFrame = await this.createRootFrame(loopState);\n\n // Save initial state\n await this.saveLoopState(loopState);\n\n this.state.activeLoop = loopState;\n\n logger.info('Ralph loop created', {\n loopId,\n frameId: rootFrame.frame_id,\n });\n\n return loopState;\n }\n\n /**\n * Resume existing loop\n */\n async resumeLoop(loopId: string): Promise<RalphLoopState> {\n logger.info('Resuming loop', { loopId });\n\n // Get state from all sources\n const sources = await this.gatherStateSources(loopId);\n\n // Reconcile state\n const reconciledState = await this.state.stateReconciler!.reconcile(sources);\n\n // Validate consistency\n if (this.config.stateReconciliation.validateConsistency) {\n const validation = await this.state.stateReconciler!.validateConsistency(reconciledState);\n \n if (validation.errors.length > 0) {\n logger.error('State validation failed', { errors: validation.errors });\n throw new Error(`Invalid state: ${validation.errors.join(', ')}`);\n }\n }\n\n this.state.activeLoop = reconciledState;\n\n // Load context from StackMemory\n const context = await this.loadIterationContext(reconciledState);\n\n logger.info('Loop resumed', {\n loopId,\n iteration: reconciledState.iteration,\n status: reconciledState.status,\n });\n\n return reconciledState;\n }\n\n /**\n * Run worker iteration\n */\n async runWorkerIteration(): Promise<RalphIteration> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n const iterationNumber = this.state.activeLoop.iteration + 1;\n logger.info('Starting worker iteration', { iteration: iterationNumber });\n\n // Load and prepare context\n let context = await this.loadIterationContext(this.state.activeLoop);\n \n // Apply context budget management\n context = this.state.contextManager!.allocateBudget(context);\n \n if (this.config.contextBudget.compressionEnabled) {\n context = this.state.contextManager!.compressContext(context);\n }\n\n // Start iteration with lifecycle\n const lifecycle = this.getLifecycle();\n context = await lifecycle.startIteration(iterationNumber, context);\n\n // Execute iteration work\n const iteration = await this.executeWorkerIteration(context);\n\n // Save iteration results\n await this.saveIterationResults(iteration);\n\n // Complete iteration with lifecycle\n await lifecycle.completeIteration(iteration);\n\n // Update loop state\n this.state.activeLoop.iteration = iterationNumber;\n this.state.activeLoop.lastUpdateTime = Date.now();\n await this.saveLoopState(this.state.activeLoop);\n\n logger.info('Worker iteration completed', {\n iteration: iterationNumber,\n changes: iteration.changes.length,\n success: iteration.validation.testsPass,\n });\n\n return iteration;\n }\n\n /**\n * Run reviewer iteration\n */\n async runReviewerIteration(): Promise<{ complete: boolean; feedback?: string }> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n logger.info('Starting reviewer iteration', {\n iteration: this.state.activeLoop.iteration,\n });\n\n // Evaluate against criteria\n const evaluation = await this.evaluateCompletion();\n\n if (evaluation.complete) {\n // Mark as complete\n this.state.activeLoop.status = 'completed';\n this.state.activeLoop.completionData = evaluation;\n await this.saveLoopState(this.state.activeLoop);\n\n // Handle completion\n const lifecycle = this.getLifecycle();\n await lifecycle.handleCompletion(this.state.activeLoop);\n\n logger.info('Task completed successfully');\n return { complete: true };\n }\n\n // Generate feedback for next iteration\n const feedback = this.generateFeedback(evaluation);\n this.state.activeLoop.feedback = feedback;\n \n await this.saveLoopState(this.state.activeLoop);\n\n logger.info('Reviewer iteration completed', {\n complete: false,\n feedbackLength: feedback.length,\n });\n\n return { complete: false, feedback };\n }\n\n /**\n * Rehydrate session from StackMemory\n */\n async rehydrateSession(sessionId: string): Promise<IterationContext> {\n logger.info('Rehydrating session', { sessionId });\n\n // Get session from StackMemory\n const session = await this.sessionManager.getSession(sessionId);\n \n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n // Load frames from session\n const frames = await this.loadSessionFrames(sessionId);\n\n // Extract Ralph loop information\n const ralphFrames = frames.filter(f => f.type === 'task' && f.name.startsWith('ralph-'));\n \n if (ralphFrames.length === 0) {\n throw new Error('No Ralph loops found in session');\n }\n\n // Get most recent Ralph loop\n const latestLoop = ralphFrames[ralphFrames.length - 1];\n\n // Reconstruct loop state\n const loopState = await this.reconstructLoopState(latestLoop);\n\n // Build context from frames\n const context = await this.buildContextFromFrames(frames, loopState);\n\n this.state.activeLoop = loopState;\n\n logger.info('Session rehydrated', {\n loopId: loopState.loopId,\n iteration: loopState.iteration,\n frameCount: frames.length,\n });\n\n return context;\n }\n\n /**\n * Create checkpoint\n */\n async createCheckpoint(): Promise<Checkpoint> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n const lifecycle = this.getLifecycle();\n \n // Create dummy iteration for checkpoint\n const iteration: RalphIteration = {\n number: this.state.activeLoop.iteration,\n timestamp: Date.now(),\n analysis: {\n filesCount: 0,\n testsPass: true,\n testsFail: 0,\n lastChange: await this.getCurrentGitCommit(),\n },\n plan: {\n summary: 'Checkpoint',\n steps: [],\n priority: 'low',\n },\n changes: [],\n validation: {\n testsPass: true,\n lintClean: true,\n buildSuccess: true,\n errors: [],\n warnings: [],\n },\n };\n\n const checkpoint = await lifecycle.createCheckpoint(iteration);\n\n logger.info('Checkpoint created', {\n id: checkpoint.id,\n iteration: checkpoint.iteration,\n });\n\n return checkpoint;\n }\n\n /**\n * Restore from checkpoint\n */\n async restoreFromCheckpoint(checkpointId: string): Promise<void> {\n const lifecycle = this.getLifecycle();\n await lifecycle.restoreFromCheckpoint(checkpointId);\n\n // Reload loop state\n const sources = await this.gatherStateSources(this.state.activeLoop?.loopId || '');\n const reconciledState = await this.state.stateReconciler!.reconcile(sources);\n \n this.state.activeLoop = reconciledState;\n\n logger.info('Restored from checkpoint', {\n checkpointId,\n iteration: reconciledState.iteration,\n });\n }\n\n /**\n * Get performance metrics\n */\n getPerformanceMetrics() {\n return this.state.performanceOptimizer!.getMetrics();\n }\n\n /**\n * Cleanup resources\n */\n async cleanup(): Promise<void> {\n logger.info('Cleaning up bridge resources');\n\n // Flush any pending saves\n await this.state.performanceOptimizer!.flushBatch();\n\n // Clean up lifecycle\n this.getLifecycle().cleanup();\n\n // Clean up optimizer\n this.state.performanceOptimizer!.cleanup();\n\n logger.info('Bridge cleanup completed');\n }\n\n /**\n * Merge configuration with defaults\n */\n private mergeConfig(config?: Partial<RalphStackMemoryConfig>): RalphStackMemoryConfig {\n return {\n contextBudget: {\n maxTokens: 4000,\n priorityWeights: {\n task: 0.3,\n recentWork: 0.25,\n feedback: 0.2,\n gitHistory: 0.15,\n dependencies: 0.1,\n },\n compressionEnabled: true,\n adaptiveBudgeting: true,\n ...config?.contextBudget,\n },\n stateReconciliation: {\n precedence: ['git', 'files', 'memory'],\n conflictResolution: 'automatic',\n syncInterval: 5000,\n validateConsistency: true,\n ...config?.stateReconciliation,\n },\n lifecycle: {\n hooks: {\n preIteration: true,\n postIteration: true,\n onStateChange: true,\n onError: true,\n onComplete: true,\n },\n checkpoints: {\n enabled: true,\n frequency: 5,\n retentionDays: 7,\n },\n ...config?.lifecycle,\n },\n performance: {\n asyncSaves: true,\n batchSize: 10,\n compressionLevel: 2,\n cacheEnabled: true,\n parallelOperations: true,\n ...config?.performance,\n },\n };\n }\n\n /**\n * Setup lifecycle hooks\n */\n private setupLifecycleHooks(options?: BridgeOptions): void {\n const hooks: LifecycleHooks = {\n preIteration: async (context) => {\n logger.debug('Pre-iteration hook', {\n iteration: context.task.currentIteration,\n });\n return context;\n },\n postIteration: async (iteration) => {\n // Save to StackMemory\n await this.saveIterationFrame(iteration);\n },\n onStateChange: async (oldState, newState) => {\n // Update StackMemory with state change\n await this.updateStateFrame(oldState, newState);\n },\n onError: async (error, context) => {\n logger.error('Iteration error', { error: error.message, context });\n // Save error frame\n await this.saveErrorFrame(error, context);\n },\n onComplete: async (state) => {\n // Close root frame\n await this.closeRootFrame(state);\n },\n };\n\n const lifecycle = new IterationLifecycle(this.config.lifecycle, hooks);\n (this.state as any).lifecycle = lifecycle;\n }\n\n /**\n * Get lifecycle instance\n */\n private getLifecycle(): IterationLifecycle {\n return (this.state as any).lifecycle;\n }\n\n /**\n * Initialize Ralph directory structure\n */\n private async initializeRalphDirectory(state: RalphLoopState): Promise<void> {\n await fs.mkdir(this.ralphDir, { recursive: true });\n await fs.mkdir(path.join(this.ralphDir, 'history'), { recursive: true });\n\n // Write initial files\n await fs.writeFile(path.join(this.ralphDir, 'task.md'), state.task);\n await fs.writeFile(path.join(this.ralphDir, 'completion-criteria.md'), state.criteria);\n await fs.writeFile(path.join(this.ralphDir, 'iteration.txt'), '0');\n await fs.writeFile(path.join(this.ralphDir, 'feedback.txt'), '');\n await fs.writeFile(\n path.join(this.ralphDir, 'state.json'),\n JSON.stringify(state, null, 2)\n );\n }\n\n /**\n * Create root frame for Ralph loop\n */\n private async createRootFrame(state: RalphLoopState): Promise<Frame> {\n if (!this.frameManager) {\n throw new Error('Frame manager not initialized');\n }\n\n const frame: Partial<Frame> = {\n type: 'task' as FrameType,\n name: `ralph-${state.loopId}`,\n inputs: {\n task: state.task,\n criteria: state.criteria,\n loopId: state.loopId,\n },\n digest_json: {\n type: 'ralph_loop',\n status: 'started',\n },\n };\n\n return await this.frameManager.createFrame({\n name: frame.name,\n type: frame.type,\n content: frame.content || '',\n metadata: frame.metadata\n });\n }\n\n /**\n * Load iteration context from StackMemory\n */\n private async loadIterationContext(state: RalphLoopState): Promise<IterationContext> {\n const frames = await this.loadRelevantFrames(state.loopId);\n \n return {\n task: {\n description: state.task,\n criteria: state.criteria.split('\\n').filter(Boolean),\n currentIteration: state.iteration,\n feedback: state.feedback,\n priority: 'medium',\n },\n history: {\n recentIterations: await this.loadRecentIterations(state.loopId),\n gitCommits: await this.loadGitCommits(),\n changedFiles: await this.loadChangedFiles(),\n testResults: [],\n },\n environment: {\n projectPath: process.cwd(),\n branch: await this.getCurrentBranch(),\n dependencies: {},\n configuration: {},\n },\n memory: {\n relevantFrames: frames,\n decisions: [],\n patterns: [],\n blockers: [],\n },\n tokenCount: 0,\n };\n }\n\n /**\n * Execute worker iteration\n */\n private async executeWorkerIteration(context: IterationContext): Promise<RalphIteration> {\n // This would integrate with the actual Ralph loop implementation\n // For now, returning a mock iteration\n return {\n number: context.task.currentIteration + 1,\n timestamp: Date.now(),\n analysis: {\n filesCount: 10,\n testsPass: true,\n testsFail: 0,\n lastChange: 'Mock change',\n },\n plan: {\n summary: 'Mock iteration plan',\n steps: ['Step 1', 'Step 2'],\n priority: 'medium',\n },\n changes: [],\n validation: {\n testsPass: true,\n lintClean: true,\n buildSuccess: true,\n errors: [],\n warnings: [],\n },\n };\n }\n\n /**\n * Save iteration results\n */\n private async saveIterationResults(iteration: RalphIteration): Promise<void> {\n // Save with performance optimization\n await this.state.performanceOptimizer!.saveIteration(iteration);\n\n // Save iteration artifacts to Ralph directory\n const iterDir = path.join(\n this.ralphDir,\n 'history',\n `iteration-${String(iteration.number).padStart(3, '0')}`\n );\n \n await fs.mkdir(iterDir, { recursive: true });\n await fs.writeFile(\n path.join(iterDir, 'artifacts.json'),\n JSON.stringify(iteration, null, 2)\n );\n }\n\n /**\n * Save iteration frame to StackMemory\n */\n private async saveIterationFrame(iteration: RalphIteration): Promise<void> {\n if (!this.frameManager || !this.state.activeLoop) return;\n\n const frame: Partial<Frame> = {\n type: 'subtask' as FrameType,\n name: `iteration-${iteration.number}`,\n inputs: {\n iterationNumber: iteration.number,\n loopId: this.state.activeLoop.loopId,\n },\n outputs: {\n changes: iteration.changes.length,\n success: iteration.validation.testsPass,\n },\n digest_json: iteration,\n };\n\n await this.state.performanceOptimizer!.saveFrame(frame as Frame);\n }\n\n /**\n * Get database adapter for FrameManager\n */\n private async getDatabaseAdapter(): Promise<SQLiteAdapter> {\n const dbPath = path.join(this.ralphDir, 'stackmemory.db');\n const projectId = path.basename(this.ralphDir);\n return new SQLiteAdapter(projectId, { dbPath });\n }\n\n /**\n * Additional helper methods\n */\n private async getCurrentGitCommit(): Promise<string> {\n try {\n // execSync already imported at top\n return execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();\n } catch {\n return '';\n }\n }\n\n private async getCurrentBranch(): Promise<string> {\n try {\n // execSync already imported at top\n return execSync('git branch --show-current', { encoding: 'utf8' }).trim();\n } catch {\n return 'main';\n }\n }\n\n private async saveLoopState(state: RalphLoopState): Promise<void> {\n await fs.writeFile(\n path.join(this.ralphDir, 'state.json'),\n JSON.stringify(state, null, 2)\n );\n }\n\n private async gatherStateSources(loopId: string): Promise<StateSource[]> {\n const sources: StateSource[] = [];\n\n // Get git state\n sources.push(await this.state.stateReconciler!.getGitState());\n\n // Get file state\n sources.push(await this.state.stateReconciler!.getFileState());\n\n // Get memory state\n sources.push(await this.state.stateReconciler!.getMemoryState(loopId));\n\n return sources;\n }\n\n private async attemptRecovery(): Promise<void> {\n logger.info('Attempting crash recovery');\n\n try {\n // Check for incomplete loops in file system\n const stateFile = path.join(this.ralphDir, 'state.json');\n const exists = await fs.stat(stateFile).then(() => true).catch(() => false);\n\n if (exists) {\n const stateData = await fs.readFile(stateFile, 'utf8');\n const state = JSON.parse(stateData) as RalphLoopState;\n\n if (state.status !== 'completed') {\n logger.info('Found incomplete loop', { loopId: state.loopId });\n await this.resumeLoop(state.loopId);\n }\n }\n } catch (error: any) {\n logger.error('Recovery failed', { error: error.message });\n }\n }\n\n private async evaluateCompletion(): Promise<any> {\n // This would evaluate completion criteria\n // Placeholder implementation\n return {\n complete: false,\n criteria: {},\n unmet: ['criteria1', 'criteria2'],\n };\n }\n\n private generateFeedback(evaluation: any): string {\n if (evaluation.unmet.length === 0) {\n return 'All criteria met';\n }\n return `Still need to address:\\n${evaluation.unmet.map((c: string) => `- ${c}`).join('\\n')}`;\n }\n\n private async loadRelevantFrames(loopId: string): Promise<Frame[]> {\n // This would load frames from StackMemory\n // Placeholder implementation\n return [];\n }\n\n private async loadRecentIterations(loopId: string): Promise<any[]> {\n // Load recent iteration summaries\n return [];\n }\n\n private async loadGitCommits(): Promise<any[]> {\n // Load recent git commits\n return [];\n }\n\n private async loadChangedFiles(): Promise<string[]> {\n // Load recently changed files\n return [];\n }\n\n private async loadSessionFrames(sessionId: string): Promise<Frame[]> {\n // Load frames from session\n return [];\n }\n\n private async reconstructLoopState(frame: Frame): Promise<RalphLoopState> {\n // Reconstruct loop state from frame\n return {\n loopId: frame.inputs.loopId || '',\n task: frame.inputs.task || '',\n criteria: frame.inputs.criteria || '',\n iteration: 0,\n status: 'running',\n startTime: frame.created_at,\n lastUpdateTime: Date.now(),\n };\n }\n\n private async buildContextFromFrames(\n frames: Frame[],\n state: RalphLoopState\n ): Promise<IterationContext> {\n // Build context from frames\n return await this.loadIterationContext(state);\n }\n\n private async updateStateFrame(\n oldState: RalphLoopState,\n newState: RalphLoopState\n ): Promise<void> {\n // Update state in StackMemory\n logger.debug('State frame updated');\n }\n\n private async saveErrorFrame(error: Error, context: any): Promise<void> {\n // Save error as frame\n logger.debug('Error frame saved');\n }\n\n private async closeRootFrame(state: RalphLoopState): Promise<void> {\n // Close the root frame\n logger.debug('Root frame closed');\n }\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Ralph-StackMemory Bridge\n * Main integration point connecting Ralph Wiggum loops with StackMemory persistence\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { execSync } from 'child_process';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { FrameManager } from '../../../core/context/frame-manager.js';\nimport { SessionManager } from '../../../core/session/session-manager.js';\nimport { ContextBudgetManager } from '../context/context-budget-manager.js';\nimport { StateReconciler } from '../state/state-reconciler.js';\nimport { IterationLifecycle, LifecycleHooks } from '../lifecycle/iteration-lifecycle.js';\nimport { PerformanceOptimizer } from '../performance/performance-optimizer.js';\nimport {\n RalphLoopState,\n RalphIteration,\n BridgeState,\n BridgeOptions,\n RalphStackMemoryConfig,\n IterationContext,\n Frame,\n FrameType,\n RecoveryState,\n Checkpoint,\n StateSource,\n} from '../types.js';\n\nexport class RalphStackMemoryBridge {\n private state: BridgeState;\n private config: RalphStackMemoryConfig;\n private frameManager?: FrameManager;\n private sessionManager: SessionManager;\n private recoveryState?: RecoveryState;\n private readonly ralphDir = '.ralph';\n\n constructor(options?: BridgeOptions) {\n // Initialize configuration\n this.config = this.mergeConfig(options?.config);\n\n // Initialize managers\n this.state = {\n initialized: false,\n contextManager: new ContextBudgetManager(this.config.contextBudget),\n stateReconciler: new StateReconciler(this.config.stateReconciliation),\n performanceOptimizer: new PerformanceOptimizer(this.config.performance),\n };\n\n this.sessionManager = SessionManager.getInstance();\n\n // Setup lifecycle hooks\n this.setupLifecycleHooks(options);\n\n logger.info('Ralph-StackMemory Bridge initialized', {\n config: {\n maxTokens: this.config.contextBudget.maxTokens,\n asyncSaves: this.config.performance.asyncSaves,\n checkpoints: this.config.lifecycle.checkpoints.enabled,\n },\n });\n }\n\n /**\n * Initialize bridge with session\n */\n async initialize(options?: {\n sessionId?: string;\n loopId?: string;\n task?: string;\n criteria?: string;\n }): Promise<void> {\n logger.info('Initializing bridge', options);\n\n try {\n // Initialize session manager\n await this.sessionManager.initialize();\n\n // Get or create session\n const session = await this.sessionManager.getOrCreateSession({\n sessionId: options?.sessionId,\n });\n\n this.state.currentSession = session;\n\n // Initialize frame manager\n this.frameManager = new FrameManager();\n\n // Check for existing loop or create new\n if (options?.loopId) {\n await this.resumeLoop(options.loopId);\n } else if (options?.task && options?.criteria) {\n await this.createNewLoop(options.task, options.criteria);\n } else {\n // Try to recover from crash\n await this.attemptRecovery();\n }\n\n this.state.initialized = true;\n logger.info('Bridge initialized successfully');\n } catch (error: any) {\n logger.error('Bridge initialization failed', { error: error.message });\n throw error;\n }\n }\n\n /**\n * Create new Ralph loop with StackMemory integration\n */\n async createNewLoop(task: string, criteria: string): Promise<RalphLoopState> {\n logger.info('Creating new Ralph loop', { task: task.substring(0, 100) });\n\n const loopId = uuidv4();\n const startTime = Date.now();\n\n // Create Ralph loop state\n const loopState: RalphLoopState = {\n loopId,\n task,\n criteria,\n iteration: 0,\n status: 'initialized',\n startTime,\n lastUpdateTime: startTime,\n startCommit: await this.getCurrentGitCommit(),\n };\n\n // Initialize Ralph directory structure\n await this.initializeRalphDirectory(loopState);\n\n // Create root frame in StackMemory\n const rootFrame = await this.createRootFrame(loopState);\n\n // Save initial state\n await this.saveLoopState(loopState);\n\n this.state.activeLoop = loopState;\n\n logger.info('Ralph loop created', {\n loopId,\n frameId: rootFrame.frame_id,\n });\n\n return loopState;\n }\n\n /**\n * Resume existing loop\n */\n async resumeLoop(loopId: string): Promise<RalphLoopState> {\n logger.info('Resuming loop', { loopId });\n\n // Get state from all sources\n const sources = await this.gatherStateSources(loopId);\n\n // Reconcile state\n const reconciledState = await this.state.stateReconciler!.reconcile(sources);\n\n // Validate consistency\n if (this.config.stateReconciliation.validateConsistency) {\n const validation = await this.state.stateReconciler!.validateConsistency(reconciledState);\n \n if (validation.errors.length > 0) {\n logger.error('State validation failed', { errors: validation.errors });\n throw new Error(`Invalid state: ${validation.errors.join(', ')}`);\n }\n }\n\n this.state.activeLoop = reconciledState;\n\n // Load context from StackMemory\n const context = await this.loadIterationContext(reconciledState);\n\n logger.info('Loop resumed', {\n loopId,\n iteration: reconciledState.iteration,\n status: reconciledState.status,\n });\n\n return reconciledState;\n }\n\n /**\n * Run worker iteration\n */\n async runWorkerIteration(): Promise<RalphIteration> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n const iterationNumber = this.state.activeLoop.iteration + 1;\n logger.info('Starting worker iteration', { iteration: iterationNumber });\n\n // Load and prepare context\n let context = await this.loadIterationContext(this.state.activeLoop);\n \n // Apply context budget management\n context = this.state.contextManager!.allocateBudget(context);\n \n if (this.config.contextBudget.compressionEnabled) {\n context = this.state.contextManager!.compressContext(context);\n }\n\n // Start iteration with lifecycle\n const lifecycle = this.getLifecycle();\n context = await lifecycle.startIteration(iterationNumber, context);\n\n // Execute iteration work\n const iteration = await this.executeWorkerIteration(context);\n\n // Save iteration results\n await this.saveIterationResults(iteration);\n\n // Complete iteration with lifecycle\n await lifecycle.completeIteration(iteration);\n\n // Update loop state\n this.state.activeLoop.iteration = iterationNumber;\n this.state.activeLoop.lastUpdateTime = Date.now();\n await this.saveLoopState(this.state.activeLoop);\n\n logger.info('Worker iteration completed', {\n iteration: iterationNumber,\n changes: iteration.changes.length,\n success: iteration.validation.testsPass,\n });\n\n return iteration;\n }\n\n /**\n * Run reviewer iteration\n */\n async runReviewerIteration(): Promise<{ complete: boolean; feedback?: string }> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n logger.info('Starting reviewer iteration', {\n iteration: this.state.activeLoop.iteration,\n });\n\n // Evaluate against criteria\n const evaluation = await this.evaluateCompletion();\n\n if (evaluation.complete) {\n // Mark as complete\n this.state.activeLoop.status = 'completed';\n this.state.activeLoop.completionData = evaluation;\n await this.saveLoopState(this.state.activeLoop);\n\n // Handle completion\n const lifecycle = this.getLifecycle();\n await lifecycle.handleCompletion(this.state.activeLoop);\n\n logger.info('Task completed successfully');\n return { complete: true };\n }\n\n // Generate feedback for next iteration\n const feedback = this.generateFeedback(evaluation);\n this.state.activeLoop.feedback = feedback;\n \n await this.saveLoopState(this.state.activeLoop);\n\n logger.info('Reviewer iteration completed', {\n complete: false,\n feedbackLength: feedback.length,\n });\n\n return { complete: false, feedback };\n }\n\n /**\n * Rehydrate session from StackMemory\n */\n async rehydrateSession(sessionId: string): Promise<IterationContext> {\n logger.info('Rehydrating session', { sessionId });\n\n // Get session from StackMemory\n const session = await this.sessionManager.getSession(sessionId);\n \n if (!session) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n // Load frames from session\n const frames = await this.loadSessionFrames(sessionId);\n\n // Extract Ralph loop information\n const ralphFrames = frames.filter(f => f.type === 'task' && f.name.startsWith('ralph-'));\n \n if (ralphFrames.length === 0) {\n throw new Error('No Ralph loops found in session');\n }\n\n // Get most recent Ralph loop\n const latestLoop = ralphFrames[ralphFrames.length - 1];\n\n // Reconstruct loop state\n const loopState = await this.reconstructLoopState(latestLoop);\n\n // Build context from frames\n const context = await this.buildContextFromFrames(frames, loopState);\n\n this.state.activeLoop = loopState;\n\n logger.info('Session rehydrated', {\n loopId: loopState.loopId,\n iteration: loopState.iteration,\n frameCount: frames.length,\n });\n\n return context;\n }\n\n /**\n * Create checkpoint\n */\n async createCheckpoint(): Promise<Checkpoint> {\n if (!this.state.activeLoop) {\n throw new Error('No active loop');\n }\n\n const lifecycle = this.getLifecycle();\n \n // Create dummy iteration for checkpoint\n const iteration: RalphIteration = {\n number: this.state.activeLoop.iteration,\n timestamp: Date.now(),\n analysis: {\n filesCount: 0,\n testsPass: true,\n testsFail: 0,\n lastChange: await this.getCurrentGitCommit(),\n },\n plan: {\n summary: 'Checkpoint',\n steps: [],\n priority: 'low',\n },\n changes: [],\n validation: {\n testsPass: true,\n lintClean: true,\n buildSuccess: true,\n errors: [],\n warnings: [],\n },\n };\n\n const checkpoint = await lifecycle.createCheckpoint(iteration);\n\n logger.info('Checkpoint created', {\n id: checkpoint.id,\n iteration: checkpoint.iteration,\n });\n\n return checkpoint;\n }\n\n /**\n * Restore from checkpoint\n */\n async restoreFromCheckpoint(checkpointId: string): Promise<void> {\n const lifecycle = this.getLifecycle();\n await lifecycle.restoreFromCheckpoint(checkpointId);\n\n // Reload loop state\n const sources = await this.gatherStateSources(this.state.activeLoop?.loopId || '');\n const reconciledState = await this.state.stateReconciler!.reconcile(sources);\n \n this.state.activeLoop = reconciledState;\n\n logger.info('Restored from checkpoint', {\n checkpointId,\n iteration: reconciledState.iteration,\n });\n }\n\n /**\n * Get performance metrics\n */\n getPerformanceMetrics() {\n return this.state.performanceOptimizer!.getMetrics();\n }\n\n /**\n * Cleanup resources\n */\n async cleanup(): Promise<void> {\n logger.info('Cleaning up bridge resources');\n\n // Flush any pending saves\n await this.state.performanceOptimizer!.flushBatch();\n\n // Clean up lifecycle\n this.getLifecycle().cleanup();\n\n // Clean up optimizer\n this.state.performanceOptimizer!.cleanup();\n\n logger.info('Bridge cleanup completed');\n }\n\n /**\n * Merge configuration with defaults\n */\n private mergeConfig(config?: Partial<RalphStackMemoryConfig>): RalphStackMemoryConfig {\n return {\n contextBudget: {\n maxTokens: 4000,\n priorityWeights: {\n task: 0.3,\n recentWork: 0.25,\n feedback: 0.2,\n gitHistory: 0.15,\n dependencies: 0.1,\n },\n compressionEnabled: true,\n adaptiveBudgeting: true,\n ...config?.contextBudget,\n },\n stateReconciliation: {\n precedence: ['git', 'files', 'memory'],\n conflictResolution: 'automatic',\n syncInterval: 5000,\n validateConsistency: true,\n ...config?.stateReconciliation,\n },\n lifecycle: {\n hooks: {\n preIteration: true,\n postIteration: true,\n onStateChange: true,\n onError: true,\n onComplete: true,\n },\n checkpoints: {\n enabled: true,\n frequency: 5,\n retentionDays: 7,\n },\n ...config?.lifecycle,\n },\n performance: {\n asyncSaves: true,\n batchSize: 10,\n compressionLevel: 2,\n cacheEnabled: true,\n parallelOperations: true,\n ...config?.performance,\n },\n };\n }\n\n /**\n * Setup lifecycle hooks\n */\n private setupLifecycleHooks(options?: BridgeOptions): void {\n const hooks: LifecycleHooks = {\n preIteration: async (context) => {\n logger.debug('Pre-iteration hook', {\n iteration: context.task.currentIteration,\n });\n return context;\n },\n postIteration: async (iteration) => {\n // Save to StackMemory\n await this.saveIterationFrame(iteration);\n },\n onStateChange: async (oldState, newState) => {\n // Update StackMemory with state change\n await this.updateStateFrame(oldState, newState);\n },\n onError: async (error, context) => {\n logger.error('Iteration error', { error: error.message, context });\n // Save error frame\n await this.saveErrorFrame(error, context);\n },\n onComplete: async (state) => {\n // Close root frame\n await this.closeRootFrame(state);\n },\n };\n\n const lifecycle = new IterationLifecycle(this.config.lifecycle, hooks);\n (this.state as any).lifecycle = lifecycle;\n }\n\n /**\n * Get lifecycle instance\n */\n private getLifecycle(): IterationLifecycle {\n return (this.state as any).lifecycle;\n }\n\n /**\n * Initialize Ralph directory structure\n */\n private async initializeRalphDirectory(state: RalphLoopState): Promise<void> {\n await fs.mkdir(this.ralphDir, { recursive: true });\n await fs.mkdir(path.join(this.ralphDir, 'history'), { recursive: true });\n\n // Write initial files\n await fs.writeFile(path.join(this.ralphDir, 'task.md'), state.task);\n await fs.writeFile(path.join(this.ralphDir, 'completion-criteria.md'), state.criteria);\n await fs.writeFile(path.join(this.ralphDir, 'iteration.txt'), '0');\n await fs.writeFile(path.join(this.ralphDir, 'feedback.txt'), '');\n await fs.writeFile(\n path.join(this.ralphDir, 'state.json'),\n JSON.stringify(state, null, 2)\n );\n }\n\n /**\n * Create root frame for Ralph loop\n */\n private async createRootFrame(state: RalphLoopState): Promise<Frame> {\n if (!this.frameManager) {\n throw new Error('Frame manager not initialized');\n }\n\n const frame: Partial<Frame> = {\n type: 'task' as FrameType,\n name: `ralph-${state.loopId}`,\n inputs: {\n task: state.task,\n criteria: state.criteria,\n loopId: state.loopId,\n },\n digest_json: {\n type: 'ralph_loop',\n status: 'started',\n },\n };\n\n return await this.frameManager.pushFrame(frame as any);\n }\n\n /**\n * Load iteration context from StackMemory\n */\n private async loadIterationContext(state: RalphLoopState): Promise<IterationContext> {\n const frames = await this.loadRelevantFrames(state.loopId);\n \n return {\n task: {\n description: state.task,\n criteria: state.criteria.split('\\n').filter(Boolean),\n currentIteration: state.iteration,\n feedback: state.feedback,\n priority: 'medium',\n },\n history: {\n recentIterations: await this.loadRecentIterations(state.loopId),\n gitCommits: await this.loadGitCommits(),\n changedFiles: await this.loadChangedFiles(),\n testResults: [],\n },\n environment: {\n projectPath: process.cwd(),\n branch: await this.getCurrentBranch(),\n dependencies: {},\n configuration: {},\n },\n memory: {\n relevantFrames: frames,\n decisions: [],\n patterns: [],\n blockers: [],\n },\n tokenCount: 0,\n };\n }\n\n /**\n * Execute worker iteration\n */\n private async executeWorkerIteration(context: IterationContext): Promise<RalphIteration> {\n // This would integrate with the actual Ralph loop implementation\n // For now, returning a mock iteration\n return {\n number: context.task.currentIteration + 1,\n timestamp: Date.now(),\n analysis: {\n filesCount: 10,\n testsPass: true,\n testsFail: 0,\n lastChange: 'Mock change',\n },\n plan: {\n summary: 'Mock iteration plan',\n steps: ['Step 1', 'Step 2'],\n priority: 'medium',\n },\n changes: [],\n validation: {\n testsPass: true,\n lintClean: true,\n buildSuccess: true,\n errors: [],\n warnings: [],\n },\n };\n }\n\n /**\n * Save iteration results\n */\n private async saveIterationResults(iteration: RalphIteration): Promise<void> {\n // Save with performance optimization\n await this.state.performanceOptimizer!.saveIteration(iteration);\n\n // Save iteration artifacts to Ralph directory\n const iterDir = path.join(\n this.ralphDir,\n 'history',\n `iteration-${String(iteration.number).padStart(3, '0')}`\n );\n \n await fs.mkdir(iterDir, { recursive: true });\n await fs.writeFile(\n path.join(iterDir, 'artifacts.json'),\n JSON.stringify(iteration, null, 2)\n );\n }\n\n /**\n * Save iteration frame to StackMemory\n */\n private async saveIterationFrame(iteration: RalphIteration): Promise<void> {\n if (!this.frameManager || !this.state.activeLoop) return;\n\n const frame: Partial<Frame> = {\n type: 'subtask' as FrameType,\n name: `iteration-${iteration.number}`,\n inputs: {\n iterationNumber: iteration.number,\n loopId: this.state.activeLoop.loopId,\n },\n outputs: {\n changes: iteration.changes.length,\n success: iteration.validation.testsPass,\n },\n digest_json: iteration,\n };\n\n await this.state.performanceOptimizer!.saveFrame(frame as Frame);\n }\n\n /**\n * Additional helper methods\n */\n private async getCurrentGitCommit(): Promise<string> {\n try {\n // execSync already imported at top\n return execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();\n } catch {\n return '';\n }\n }\n\n private async getCurrentBranch(): Promise<string> {\n try {\n // execSync already imported at top\n return execSync('git branch --show-current', { encoding: 'utf8' }).trim();\n } catch {\n return 'main';\n }\n }\n\n private async saveLoopState(state: RalphLoopState): Promise<void> {\n await fs.writeFile(\n path.join(this.ralphDir, 'state.json'),\n JSON.stringify(state, null, 2)\n );\n }\n\n private async gatherStateSources(loopId: string): Promise<StateSource[]> {\n const sources: StateSource[] = [];\n\n // Get git state\n sources.push(await this.state.stateReconciler!.getGitState());\n\n // Get file state\n sources.push(await this.state.stateReconciler!.getFileState());\n\n // Get memory state\n sources.push(await this.state.stateReconciler!.getMemoryState(loopId));\n\n return sources;\n }\n\n private async attemptRecovery(): Promise<void> {\n logger.info('Attempting crash recovery');\n\n try {\n // Check for incomplete loops in file system\n const stateFile = path.join(this.ralphDir, 'state.json');\n const exists = await fs.stat(stateFile).then(() => true).catch(() => false);\n\n if (exists) {\n const stateData = await fs.readFile(stateFile, 'utf8');\n const state = JSON.parse(stateData) as RalphLoopState;\n\n if (state.status !== 'completed') {\n logger.info('Found incomplete loop', { loopId: state.loopId });\n await this.resumeLoop(state.loopId);\n }\n }\n } catch (error: any) {\n logger.error('Recovery failed', { error: error.message });\n }\n }\n\n private async evaluateCompletion(): Promise<any> {\n // This would evaluate completion criteria\n // Placeholder implementation\n return {\n complete: false,\n criteria: {},\n unmet: ['criteria1', 'criteria2'],\n };\n }\n\n private generateFeedback(evaluation: any): string {\n if (evaluation.unmet.length === 0) {\n return 'All criteria met';\n }\n return `Still need to address:\\n${evaluation.unmet.map((c: string) => `- ${c}`).join('\\n')}`;\n }\n\n private async loadRelevantFrames(loopId: string): Promise<Frame[]> {\n // This would load frames from StackMemory\n // Placeholder implementation\n return [];\n }\n\n private async loadRecentIterations(loopId: string): Promise<any[]> {\n // Load recent iteration summaries\n return [];\n }\n\n private async loadGitCommits(): Promise<any[]> {\n // Load recent git commits\n return [];\n }\n\n private async loadChangedFiles(): Promise<string[]> {\n // Load recently changed files\n return [];\n }\n\n private async loadSessionFrames(sessionId: string): Promise<Frame[]> {\n // Load frames from session\n return [];\n }\n\n private async reconstructLoopState(frame: Frame): Promise<RalphLoopState> {\n // Reconstruct loop state from frame\n return {\n loopId: frame.inputs.loopId || '',\n task: frame.inputs.task || '',\n criteria: frame.inputs.criteria || '',\n iteration: 0,\n status: 'running',\n startTime: frame.created_at,\n lastUpdateTime: Date.now(),\n };\n }\n\n private async buildContextFromFrames(\n frames: Frame[],\n state: RalphLoopState\n ): Promise<IterationContext> {\n // Build context from frames\n return await this.loadIterationContext(state);\n }\n\n private async updateStateFrame(\n oldState: RalphLoopState,\n newState: RalphLoopState\n ): Promise<void> {\n // Update state in StackMemory\n logger.debug('State frame updated');\n }\n\n private async saveErrorFrame(error: Error, context: any): Promise<void> {\n // Save error as frame\n logger.debug('Error frame saved');\n }\n\n private async closeRootFrame(state: RalphLoopState): Promise<void> {\n // Close the root frame\n logger.debug('Root frame closed');\n }\n}"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,406 @@
1
+ import { EventEmitter } from "events";
2
+ import { logger } from "../../../core/monitoring/logger.js";
3
+ class EnhancedCoordinationSystem extends EventEmitter {
4
+ agents = /* @__PURE__ */ new Map();
5
+ messageQueue = [];
6
+ dependencies = /* @__PURE__ */ new Map();
7
+ conflicts = /* @__PURE__ */ new Map();
8
+ coordinationRules = [];
9
+ constructor() {
10
+ super();
11
+ this.setupDefaultRules();
12
+ }
13
+ /**
14
+ * Register an agent with the coordination system
15
+ */
16
+ registerAgent(agent) {
17
+ this.agents.set(agent.id, agent);
18
+ logger.info(`Agent ${agent.role} registered for coordination`);
19
+ this.broadcastMessage({
20
+ id: this.generateId(),
21
+ from: "system",
22
+ to: "broadcast",
23
+ type: "status_update",
24
+ content: { type: "agent_joined", agent: agent.role },
25
+ timestamp: Date.now(),
26
+ priority: "normal"
27
+ });
28
+ }
29
+ /**
30
+ * Send message between agents
31
+ */
32
+ sendMessage(message) {
33
+ const fullMessage = {
34
+ ...message,
35
+ id: this.generateId(),
36
+ timestamp: Date.now()
37
+ };
38
+ this.messageQueue.push(fullMessage);
39
+ this.routeMessage(fullMessage);
40
+ this.emit("messageReceived", fullMessage);
41
+ }
42
+ /**
43
+ * Broadcast message to all agents
44
+ */
45
+ broadcastMessage(message) {
46
+ this.sendMessage({
47
+ ...message,
48
+ to: "broadcast"
49
+ });
50
+ }
51
+ /**
52
+ * Request help from other agents
53
+ */
54
+ requestHelp(fromAgent, helpType, context) {
55
+ const suitableAgents = this.findSuitableHelpers(helpType);
56
+ this.sendMessage({
57
+ from: fromAgent,
58
+ to: suitableAgents,
59
+ type: "help_request",
60
+ content: {
61
+ helpType,
62
+ context,
63
+ requesterCapabilities: this.agents.get(fromAgent)?.capabilities || []
64
+ },
65
+ priority: "high"
66
+ });
67
+ }
68
+ /**
69
+ * Add task dependency
70
+ */
71
+ addDependency(dependency) {
72
+ this.dependencies.set(dependency.taskId, dependency);
73
+ this.updateCriticalPath();
74
+ logger.info(
75
+ `Added dependency: ${dependency.taskId} depends on ${dependency.dependsOn.join(", ")}`
76
+ );
77
+ }
78
+ /**
79
+ * Resolve conflicts automatically
80
+ */
81
+ async resolveConflict(conflictId) {
82
+ const conflict = this.conflicts.get(conflictId);
83
+ if (!conflict) return false;
84
+ try {
85
+ switch (conflict.resolutionStrategy) {
86
+ case "voting":
87
+ conflict.resolution = await this.resolveByVoting(conflict);
88
+ break;
89
+ case "expertise_based":
90
+ conflict.resolution = await this.resolveByExpertise(conflict);
91
+ break;
92
+ case "random":
93
+ conflict.resolution = await this.resolveRandomly(conflict);
94
+ break;
95
+ case "manager_override":
96
+ conflict.resolution = await this.resolveByManagerOverride(conflict);
97
+ break;
98
+ }
99
+ conflict.status = "resolved";
100
+ this.conflicts.set(conflictId, conflict);
101
+ this.broadcastMessage({
102
+ from: "system",
103
+ to: conflict.involvedAgents,
104
+ type: "status_update",
105
+ content: {
106
+ type: "conflict_resolved",
107
+ conflictId,
108
+ resolution: conflict.resolution
109
+ },
110
+ priority: "high"
111
+ });
112
+ return true;
113
+ } catch (error) {
114
+ conflict.status = "escalated";
115
+ logger.error(`Failed to resolve conflict ${conflictId}:`, error);
116
+ return false;
117
+ }
118
+ }
119
+ /**
120
+ * Get optimal task execution order considering dependencies
121
+ */
122
+ getOptimalExecutionOrder(tasks) {
123
+ const graph = this.buildDependencyGraph(tasks);
124
+ return this.topologicalSort(graph, tasks);
125
+ }
126
+ /**
127
+ * Detect and report coordination patterns
128
+ */
129
+ analyzeCoordinationPatterns() {
130
+ const patterns = {
131
+ communicationFrequency: /* @__PURE__ */ new Map(),
132
+ helpRequestPatterns: [],
133
+ conflictFrequency: /* @__PURE__ */ new Map(),
134
+ bottlenecks: this.identifyBottlenecks()
135
+ };
136
+ for (const message of this.messageQueue) {
137
+ const key = `${message.from}-${message.type}`;
138
+ patterns.communicationFrequency.set(
139
+ key,
140
+ (patterns.communicationFrequency.get(key) || 0) + 1
141
+ );
142
+ }
143
+ for (const conflict of this.conflicts.values()) {
144
+ patterns.conflictFrequency.set(
145
+ conflict.type,
146
+ (patterns.conflictFrequency.get(conflict.type) || 0) + 1
147
+ );
148
+ }
149
+ return patterns;
150
+ }
151
+ /**
152
+ * Load balancing recommendations
153
+ */
154
+ getLoadBalancingRecommendations() {
155
+ const recommendations = {
156
+ overloadedAgents: [],
157
+ underutilizedAgents: [],
158
+ suggestedReassignments: []
159
+ };
160
+ for (const agent of this.agents.values()) {
161
+ const workload = this.calculateAgentWorkload(agent);
162
+ if (workload > 0.8) {
163
+ recommendations.overloadedAgents.push(agent.id);
164
+ } else if (workload < 0.3) {
165
+ recommendations.underutilizedAgents.push(agent.id);
166
+ }
167
+ }
168
+ for (const overloaded of recommendations.overloadedAgents) {
169
+ for (const underutilized of recommendations.underutilizedAgents) {
170
+ const compatibility = this.checkAgentCompatibility(
171
+ overloaded,
172
+ underutilized
173
+ );
174
+ if (compatibility.score > 0.7) {
175
+ recommendations.suggestedReassignments.push({
176
+ fromAgent: overloaded,
177
+ toAgent: underutilized,
178
+ taskType: compatibility.bestTaskType,
179
+ reason: `Load balancing: ${compatibility.reason}`
180
+ });
181
+ }
182
+ }
183
+ }
184
+ return recommendations;
185
+ }
186
+ routeMessage(message) {
187
+ if (message.to === "broadcast") {
188
+ for (const agentId of this.agents.keys()) {
189
+ if (agentId !== message.from) {
190
+ this.deliverMessage(agentId, message);
191
+ }
192
+ }
193
+ } else {
194
+ for (const agentId of message.to) {
195
+ this.deliverMessage(agentId, message);
196
+ }
197
+ }
198
+ this.applyCoordinationRules(message);
199
+ }
200
+ deliverMessage(agentId, message) {
201
+ const agent = this.agents.get(agentId);
202
+ if (agent) {
203
+ logger.debug(`Message delivered to ${agent.role}: ${message.type}`);
204
+ }
205
+ }
206
+ findSuitableHelpers(helpType) {
207
+ const helpers = [];
208
+ for (const agent of this.agents.values()) {
209
+ if (this.canProvideHelp(agent, helpType)) {
210
+ helpers.push(agent.id);
211
+ }
212
+ }
213
+ return helpers;
214
+ }
215
+ canProvideHelp(agent, helpType) {
216
+ const capabilities = agent.capabilities || [];
217
+ switch (helpType) {
218
+ case "code_review":
219
+ return capabilities.includes("code_review") || agent.role === "reviewer";
220
+ case "debugging":
221
+ return capabilities.includes("debugging") || agent.role === "developer";
222
+ case "testing":
223
+ return capabilities.includes("testing") || agent.role === "tester";
224
+ case "optimization":
225
+ return capabilities.includes("optimization") || agent.role === "optimizer";
226
+ default:
227
+ return false;
228
+ }
229
+ }
230
+ async resolveByVoting(conflict) {
231
+ const votes = /* @__PURE__ */ new Map();
232
+ for (const agentId of conflict.involvedAgents) {
233
+ const agent = this.agents.get(agentId);
234
+ if (agent) {
235
+ votes.set(agentId, Math.random() > 0.5 ? "option_a" : "option_b");
236
+ }
237
+ }
238
+ const results = /* @__PURE__ */ new Map();
239
+ for (const vote of votes.values()) {
240
+ results.set(vote, (results.get(vote) || 0) + 1);
241
+ }
242
+ return Array.from(results.entries()).reduce(
243
+ (a, b) => a[1] > b[1] ? a : b
244
+ )[0];
245
+ }
246
+ async resolveByExpertise(conflict) {
247
+ let bestAgent = null;
248
+ let bestExpertise = 0;
249
+ for (const agentId of conflict.involvedAgents) {
250
+ const agent = this.agents.get(agentId);
251
+ if (agent) {
252
+ const expertise = this.calculateExpertise(agent, conflict.type);
253
+ if (expertise > bestExpertise) {
254
+ bestExpertise = expertise;
255
+ bestAgent = agent;
256
+ }
257
+ }
258
+ }
259
+ return {
260
+ resolutionSource: bestAgent?.id,
261
+ method: "expertise_based",
262
+ expertiseScore: bestExpertise
263
+ };
264
+ }
265
+ async resolveRandomly(conflict) {
266
+ const options = ["option_a", "option_b", "compromise"];
267
+ return options[Math.floor(Math.random() * options.length)];
268
+ }
269
+ async resolveByManagerOverride(conflict) {
270
+ const manager = Array.from(this.agents.values()).find(
271
+ (agent) => agent.role === "coordinator" || agent.role === "architect"
272
+ );
273
+ return {
274
+ resolutionSource: manager?.id || "system",
275
+ method: "manager_override"
276
+ };
277
+ }
278
+ calculateExpertise(agent, conflictType) {
279
+ const capabilities = agent.capabilities || [];
280
+ const performance = agent.performance;
281
+ let expertise = 0;
282
+ switch (conflictType) {
283
+ case "resource":
284
+ expertise += capabilities.includes("resource_optimization") ? 0.5 : 0;
285
+ break;
286
+ case "task_overlap":
287
+ expertise += capabilities.includes("coordination") ? 0.5 : 0;
288
+ break;
289
+ }
290
+ if (performance) {
291
+ expertise += performance.successRate * 0.3;
292
+ expertise += Math.min(performance.tasksCompleted / 10, 0.2);
293
+ }
294
+ return Math.min(expertise, 1);
295
+ }
296
+ buildDependencyGraph(tasks) {
297
+ const graph = /* @__PURE__ */ new Map();
298
+ for (const task of tasks) {
299
+ const deps = this.dependencies.get(task.id);
300
+ graph.set(task.id, deps?.dependsOn || []);
301
+ }
302
+ return graph;
303
+ }
304
+ topologicalSort(graph, tasks) {
305
+ const result = [];
306
+ const visited = /* @__PURE__ */ new Set();
307
+ const visiting = /* @__PURE__ */ new Set();
308
+ const visit = (taskId) => {
309
+ if (visited.has(taskId)) return;
310
+ if (visiting.has(taskId)) {
311
+ logger.warn(`Circular dependency detected involving task: ${taskId}`);
312
+ return;
313
+ }
314
+ visiting.add(taskId);
315
+ const deps = graph.get(taskId) || [];
316
+ for (const dep of deps) {
317
+ visit(dep);
318
+ }
319
+ visiting.delete(taskId);
320
+ visited.add(taskId);
321
+ const task = tasks.find((t) => t.id === taskId);
322
+ if (task) result.push(task);
323
+ };
324
+ for (const task of tasks) {
325
+ visit(task.id);
326
+ }
327
+ return result;
328
+ }
329
+ updateCriticalPath() {
330
+ logger.debug("Critical path updated");
331
+ }
332
+ identifyBottlenecks() {
333
+ const bottlenecks = [];
334
+ for (const [taskId, dep] of this.dependencies) {
335
+ if (dep.blockingFor.length > 2) {
336
+ bottlenecks.push(taskId);
337
+ }
338
+ }
339
+ return bottlenecks;
340
+ }
341
+ calculateAgentWorkload(agent) {
342
+ let workload = 0;
343
+ if (agent.status === "active") workload += 0.5;
344
+ if (agent.currentTask) workload += 0.3;
345
+ const recentMessages = this.messageQueue.filter(
346
+ (m) => (m.from === agent.id || Array.isArray(m.to) && m.to.includes(agent.id)) && Date.now() - m.timestamp < 3e5
347
+ // 5 minutes
348
+ );
349
+ workload += Math.min(recentMessages.length * 0.05, 0.2);
350
+ return Math.min(workload, 1);
351
+ }
352
+ checkAgentCompatibility(agent1Id, agent2Id) {
353
+ const agent1 = this.agents.get(agent1Id);
354
+ const agent2 = this.agents.get(agent2Id);
355
+ if (!agent1 || !agent2) {
356
+ return { score: 0, bestTaskType: "", reason: "Agent not found" };
357
+ }
358
+ const caps1 = new Set(agent1.capabilities || []);
359
+ const caps2 = new Set(agent2.capabilities || []);
360
+ const overlap = new Set([...caps1].filter((x) => caps2.has(x)));
361
+ const score = overlap.size / Math.max(caps1.size, caps2.size, 1);
362
+ return {
363
+ score,
364
+ bestTaskType: Array.from(overlap)[0] || "general",
365
+ reason: `Capability overlap: ${overlap.size} common skills`
366
+ };
367
+ }
368
+ applyCoordinationRules(message) {
369
+ for (const rule of this.coordinationRules) {
370
+ if (rule.condition(message)) {
371
+ rule.action(message, this);
372
+ }
373
+ }
374
+ }
375
+ setupDefaultRules() {
376
+ this.coordinationRules = [
377
+ {
378
+ id: "help_request_timeout",
379
+ condition: (msg) => msg.type === "help_request",
380
+ action: (msg, system) => {
381
+ setTimeout(() => {
382
+ system.broadcastMessage({
383
+ from: "system",
384
+ to: "broadcast",
385
+ type: "status_update",
386
+ content: {
387
+ type: "help_request_timeout",
388
+ originalRequest: msg.id
389
+ },
390
+ priority: "urgent"
391
+ });
392
+ }, 3e5);
393
+ }
394
+ }
395
+ ];
396
+ }
397
+ generateId() {
398
+ return `coord_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
399
+ }
400
+ }
401
+ var enhanced_coordination_default = EnhancedCoordinationSystem;
402
+ export {
403
+ EnhancedCoordinationSystem,
404
+ enhanced_coordination_default as default
405
+ };
406
+ //# sourceMappingURL=enhanced-coordination.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/integrations/ralph/coordination/enhanced-coordination.ts"],
4
+ "sourcesContent": ["/**\n * Enhanced Agent Coordination System\n * Provides advanced coordination patterns, conflict resolution, and inter-agent communication\n */\n\nimport { EventEmitter } from 'events';\nimport { logger } from '../../../core/monitoring/logger.js';\nimport { Agent, SwarmTask, CoordinationEvent } from '../types.js';\n\nexport interface CoordinationMessage {\n id: string;\n from: string; // agent ID\n to: string[] | 'broadcast'; // agent IDs or broadcast\n type:\n | 'status_update'\n | 'help_request'\n | 'resource_conflict'\n | 'task_handoff'\n | 'knowledge_share';\n content: any;\n timestamp: number;\n priority: 'low' | 'normal' | 'high' | 'urgent';\n}\n\nexport interface TaskDependency {\n taskId: string;\n dependsOn: string[];\n blockingFor: string[];\n estimatedCompletionTime: number;\n criticalPath: boolean;\n}\n\nexport interface ConflictResolution {\n id: string;\n type: 'resource' | 'task_overlap' | 'knowledge_conflict' | 'priority_dispute';\n involvedAgents: string[];\n description: string;\n resolutionStrategy:\n | 'voting'\n | 'expertise_based'\n | 'random'\n | 'manager_override';\n resolution: any;\n timestamp: number;\n status: 'pending' | 'resolved' | 'escalated';\n}\n\nexport class EnhancedCoordinationSystem extends EventEmitter {\n private agents: Map<string, Agent> = new Map();\n private messageQueue: CoordinationMessage[] = [];\n private dependencies: Map<string, TaskDependency> = new Map();\n private conflicts: Map<string, ConflictResolution> = new Map();\n private coordinationRules: CoordinationRule[] = [];\n\n constructor() {\n super();\n this.setupDefaultRules();\n }\n\n /**\n * Register an agent with the coordination system\n */\n registerAgent(agent: Agent): void {\n this.agents.set(agent.id, agent);\n logger.info(`Agent ${agent.role} registered for coordination`);\n\n // Notify other agents\n this.broadcastMessage({\n id: this.generateId(),\n from: 'system',\n to: 'broadcast',\n type: 'status_update',\n content: { type: 'agent_joined', agent: agent.role },\n timestamp: Date.now(),\n priority: 'normal',\n });\n }\n\n /**\n * Send message between agents\n */\n sendMessage(message: Omit<CoordinationMessage, 'id' | 'timestamp'>): void {\n const fullMessage: CoordinationMessage = {\n ...message,\n id: this.generateId(),\n timestamp: Date.now(),\n };\n\n this.messageQueue.push(fullMessage);\n this.routeMessage(fullMessage);\n this.emit('messageReceived', fullMessage);\n }\n\n /**\n * Broadcast message to all agents\n */\n broadcastMessage(\n message: Omit<CoordinationMessage, 'id' | 'timestamp'>\n ): void {\n this.sendMessage({\n ...message,\n to: 'broadcast',\n });\n }\n\n /**\n * Request help from other agents\n */\n requestHelp(fromAgent: string, helpType: string, context: any): void {\n const suitableAgents = this.findSuitableHelpers(helpType);\n\n this.sendMessage({\n from: fromAgent,\n to: suitableAgents,\n type: 'help_request',\n content: {\n helpType,\n context,\n requesterCapabilities: this.agents.get(fromAgent)?.capabilities || [],\n },\n priority: 'high',\n });\n }\n\n /**\n * Add task dependency\n */\n addDependency(dependency: TaskDependency): void {\n this.dependencies.set(dependency.taskId, dependency);\n this.updateCriticalPath();\n logger.info(\n `Added dependency: ${dependency.taskId} depends on ${dependency.dependsOn.join(', ')}`\n );\n }\n\n /**\n * Resolve conflicts automatically\n */\n async resolveConflict(conflictId: string): Promise<boolean> {\n const conflict = this.conflicts.get(conflictId);\n if (!conflict) return false;\n\n try {\n switch (conflict.resolutionStrategy) {\n case 'voting':\n conflict.resolution = await this.resolveByVoting(conflict);\n break;\n case 'expertise_based':\n conflict.resolution = await this.resolveByExpertise(conflict);\n break;\n case 'random':\n conflict.resolution = await this.resolveRandomly(conflict);\n break;\n case 'manager_override':\n conflict.resolution = await this.resolveByManagerOverride(conflict);\n break;\n }\n\n conflict.status = 'resolved';\n this.conflicts.set(conflictId, conflict);\n\n // Notify agents of resolution\n this.broadcastMessage({\n from: 'system',\n to: conflict.involvedAgents,\n type: 'status_update',\n content: {\n type: 'conflict_resolved',\n conflictId,\n resolution: conflict.resolution,\n },\n priority: 'high',\n });\n\n return true;\n } catch (error) {\n conflict.status = 'escalated';\n logger.error(`Failed to resolve conflict ${conflictId}:`, error as Error);\n return false;\n }\n }\n\n /**\n * Get optimal task execution order considering dependencies\n */\n getOptimalExecutionOrder(tasks: SwarmTask[]): SwarmTask[] {\n const graph = this.buildDependencyGraph(tasks);\n return this.topologicalSort(graph, tasks);\n }\n\n /**\n * Detect and report coordination patterns\n */\n analyzeCoordinationPatterns(): {\n communicationFrequency: Map<string, number>;\n helpRequestPatterns: any[];\n conflictFrequency: Map<string, number>;\n bottlenecks: string[];\n } {\n const patterns = {\n communicationFrequency: new Map<string, number>(),\n helpRequestPatterns: [],\n conflictFrequency: new Map<string, number>(),\n bottlenecks: this.identifyBottlenecks(),\n };\n\n // Analyze message patterns\n for (const message of this.messageQueue) {\n const key = `${message.from}-${message.type}`;\n patterns.communicationFrequency.set(\n key,\n (patterns.communicationFrequency.get(key) || 0) + 1\n );\n }\n\n // Analyze conflicts\n for (const conflict of this.conflicts.values()) {\n patterns.conflictFrequency.set(\n conflict.type,\n (patterns.conflictFrequency.get(conflict.type) || 0) + 1\n );\n }\n\n return patterns;\n }\n\n /**\n * Load balancing recommendations\n */\n getLoadBalancingRecommendations(): {\n overloadedAgents: string[];\n underutilizedAgents: string[];\n suggestedReassignments: Array<{\n fromAgent: string;\n toAgent: string;\n taskType: string;\n reason: string;\n }>;\n } {\n const recommendations = {\n overloadedAgents: [],\n underutilizedAgents: [],\n suggestedReassignments: [],\n };\n\n // Analyze agent workloads\n for (const agent of this.agents.values()) {\n const workload = this.calculateAgentWorkload(agent);\n\n if (workload > 0.8) {\n recommendations.overloadedAgents.push(agent.id);\n } else if (workload < 0.3) {\n recommendations.underutilizedAgents.push(agent.id);\n }\n }\n\n // Generate reassignment suggestions\n for (const overloaded of recommendations.overloadedAgents) {\n for (const underutilized of recommendations.underutilizedAgents) {\n const compatibility = this.checkAgentCompatibility(\n overloaded,\n underutilized\n );\n if (compatibility.score > 0.7) {\n recommendations.suggestedReassignments.push({\n fromAgent: overloaded,\n toAgent: underutilized,\n taskType: compatibility.bestTaskType,\n reason: `Load balancing: ${compatibility.reason}`,\n });\n }\n }\n }\n\n return recommendations;\n }\n\n private routeMessage(message: CoordinationMessage): void {\n if (message.to === 'broadcast') {\n // Route to all agents except sender\n for (const agentId of this.agents.keys()) {\n if (agentId !== message.from) {\n this.deliverMessage(agentId, message);\n }\n }\n } else {\n // Route to specific agents\n for (const agentId of message.to as string[]) {\n this.deliverMessage(agentId, message);\n }\n }\n\n // Apply coordination rules\n this.applyCoordinationRules(message);\n }\n\n private deliverMessage(agentId: string, message: CoordinationMessage): void {\n const agent = this.agents.get(agentId);\n if (agent) {\n // Store message for agent (in real implementation, would integrate with agent's message handler)\n logger.debug(`Message delivered to ${agent.role}: ${message.type}`);\n }\n }\n\n private findSuitableHelpers(helpType: string): string[] {\n const helpers: string[] = [];\n\n for (const agent of this.agents.values()) {\n if (this.canProvideHelp(agent, helpType)) {\n helpers.push(agent.id);\n }\n }\n\n return helpers;\n }\n\n private canProvideHelp(agent: Agent, helpType: string): boolean {\n // Check if agent has relevant capabilities\n const capabilities = agent.capabilities || [];\n\n switch (helpType) {\n case 'code_review':\n return (\n capabilities.includes('code_review') || agent.role === 'reviewer'\n );\n case 'debugging':\n return capabilities.includes('debugging') || agent.role === 'developer';\n case 'testing':\n return capabilities.includes('testing') || agent.role === 'tester';\n case 'optimization':\n return (\n capabilities.includes('optimization') || agent.role === 'optimizer'\n );\n default:\n return false;\n }\n }\n\n private async resolveByVoting(conflict: ConflictResolution): Promise<any> {\n // Simulate voting resolution\n const votes = new Map();\n for (const agentId of conflict.involvedAgents) {\n const agent = this.agents.get(agentId);\n if (agent) {\n // In real implementation, would request vote from agent\n votes.set(agentId, Math.random() > 0.5 ? 'option_a' : 'option_b');\n }\n }\n\n // Count votes\n const results = new Map();\n for (const vote of votes.values()) {\n results.set(vote, (results.get(vote) || 0) + 1);\n }\n\n // Return winning option\n return Array.from(results.entries()).reduce((a, b) =>\n a[1] > b[1] ? a : b\n )[0];\n }\n\n private async resolveByExpertise(conflict: ConflictResolution): Promise<any> {\n // Find most expert agent for the conflict type\n let bestAgent = null;\n let bestExpertise = 0;\n\n for (const agentId of conflict.involvedAgents) {\n const agent = this.agents.get(agentId);\n if (agent) {\n const expertise = this.calculateExpertise(agent, conflict.type);\n if (expertise > bestExpertise) {\n bestExpertise = expertise;\n bestAgent = agent;\n }\n }\n }\n\n return {\n resolutionSource: bestAgent?.id,\n method: 'expertise_based',\n expertiseScore: bestExpertise,\n };\n }\n\n private async resolveRandomly(conflict: ConflictResolution): Promise<any> {\n const options = ['option_a', 'option_b', 'compromise'];\n return options[Math.floor(Math.random() * options.length)];\n }\n\n private async resolveByManagerOverride(\n conflict: ConflictResolution\n ): Promise<any> {\n // Find coordinator or architect agent\n const manager = Array.from(this.agents.values()).find(\n (agent) => agent.role === 'coordinator' || agent.role === 'architect'\n );\n\n return {\n resolutionSource: manager?.id || 'system',\n method: 'manager_override',\n };\n }\n\n private calculateExpertise(agent: Agent, conflictType: string): number {\n // Calculate agent expertise for specific conflict type\n const capabilities = agent.capabilities || [];\n const performance = agent.performance;\n\n let expertise = 0;\n\n // Base expertise from capabilities\n switch (conflictType) {\n case 'resource':\n expertise += capabilities.includes('resource_optimization') ? 0.5 : 0;\n break;\n case 'task_overlap':\n expertise += capabilities.includes('coordination') ? 0.5 : 0;\n break;\n }\n\n // Add performance-based expertise\n if (performance) {\n expertise += performance.successRate * 0.3;\n expertise += Math.min(performance.tasksCompleted / 10, 0.2);\n }\n\n return Math.min(expertise, 1.0);\n }\n\n private buildDependencyGraph(tasks: SwarmTask[]): Map<string, string[]> {\n const graph = new Map<string, string[]>();\n\n for (const task of tasks) {\n const deps = this.dependencies.get(task.id);\n graph.set(task.id, deps?.dependsOn || []);\n }\n\n return graph;\n }\n\n private topologicalSort(\n graph: Map<string, string[]>,\n tasks: SwarmTask[]\n ): SwarmTask[] {\n const result: SwarmTask[] = [];\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const visit = (taskId: string) => {\n if (visited.has(taskId)) return;\n if (visiting.has(taskId)) {\n logger.warn(`Circular dependency detected involving task: ${taskId}`);\n return;\n }\n\n visiting.add(taskId);\n const deps = graph.get(taskId) || [];\n\n for (const dep of deps) {\n visit(dep);\n }\n\n visiting.delete(taskId);\n visited.add(taskId);\n\n const task = tasks.find((t) => t.id === taskId);\n if (task) result.push(task);\n };\n\n for (const task of tasks) {\n visit(task.id);\n }\n\n return result;\n }\n\n private updateCriticalPath(): void {\n // Identify critical path through dependencies\n // Implementation would use network analysis algorithms\n logger.debug('Critical path updated');\n }\n\n private identifyBottlenecks(): string[] {\n const bottlenecks: string[] = [];\n\n // Find tasks with many dependencies\n for (const [taskId, dep] of this.dependencies) {\n if (dep.blockingFor.length > 2) {\n bottlenecks.push(taskId);\n }\n }\n\n return bottlenecks;\n }\n\n private calculateAgentWorkload(agent: Agent): number {\n // Calculate workload based on current tasks, message frequency, etc.\n let workload = 0;\n\n if (agent.status === 'active') workload += 0.5;\n if (agent.currentTask) workload += 0.3;\n\n // Add message handling workload\n const recentMessages = this.messageQueue.filter(\n (m) =>\n (m.from === agent.id ||\n (Array.isArray(m.to) && m.to.includes(agent.id))) &&\n Date.now() - m.timestamp < 300000 // 5 minutes\n );\n\n workload += Math.min(recentMessages.length * 0.05, 0.2);\n\n return Math.min(workload, 1.0);\n }\n\n private checkAgentCompatibility(\n agent1Id: string,\n agent2Id: string\n ): {\n score: number;\n bestTaskType: string;\n reason: string;\n } {\n const agent1 = this.agents.get(agent1Id);\n const agent2 = this.agents.get(agent2Id);\n\n if (!agent1 || !agent2) {\n return { score: 0, bestTaskType: '', reason: 'Agent not found' };\n }\n\n // Check capability overlap\n const caps1 = new Set(agent1.capabilities || []);\n const caps2 = new Set(agent2.capabilities || []);\n const overlap = new Set([...caps1].filter((x) => caps2.has(x)));\n\n const score = overlap.size / Math.max(caps1.size, caps2.size, 1);\n\n return {\n score,\n bestTaskType: Array.from(overlap)[0] || 'general',\n reason: `Capability overlap: ${overlap.size} common skills`,\n };\n }\n\n private applyCoordinationRules(message: CoordinationMessage): void {\n for (const rule of this.coordinationRules) {\n if (rule.condition(message)) {\n rule.action(message, this);\n }\n }\n }\n\n private setupDefaultRules(): void {\n this.coordinationRules = [\n {\n id: 'help_request_timeout',\n condition: (msg) => msg.type === 'help_request',\n action: (msg, system) => {\n // Auto-escalate help requests after timeout\n setTimeout(() => {\n system.broadcastMessage({\n from: 'system',\n to: 'broadcast',\n type: 'status_update',\n content: {\n type: 'help_request_timeout',\n originalRequest: msg.id,\n },\n priority: 'urgent',\n });\n }, 300000); // 5 minutes\n },\n },\n ];\n }\n\n private generateId(): string {\n return `coord_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n\ninterface CoordinationRule {\n id: string;\n condition: (message: CoordinationMessage) => boolean;\n action: (\n message: CoordinationMessage,\n system: EnhancedCoordinationSystem\n ) => void;\n}\n\nexport default EnhancedCoordinationSystem;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }