 85bf1341f3
			
		
	
	85bf1341f3
	
	
	
		
			
			Frontend Enhancements: - Complete React TypeScript frontend with modern UI components - Distributed workflows management interface with real-time updates - Socket.IO integration for live agent status monitoring - Agent management dashboard with cluster visualization - Project management interface with metrics and task tracking - Responsive design with proper error handling and loading states Backend Infrastructure: - Distributed coordinator for multi-agent workflow orchestration - Cluster management API with comprehensive agent operations - Enhanced database models for agents and projects - Project service for filesystem-based project discovery - Performance monitoring and metrics collection - Comprehensive API documentation and error handling Documentation: - Complete distributed development guide (README_DISTRIBUTED.md) - Comprehensive development report with architecture insights - System configuration templates and deployment guides The platform now provides a complete web interface for managing the distributed AI cluster with real-time monitoring, workflow orchestration, and agent coordination capabilities. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var minus = "-".charCodeAt(0);
 | |
| var plus = "+".charCodeAt(0);
 | |
| var dot = ".".charCodeAt(0);
 | |
| var exp = "e".charCodeAt(0);
 | |
| var EXP = "E".charCodeAt(0);
 | |
| 
 | |
| // Check if three code points would start a number
 | |
| // https://www.w3.org/TR/css-syntax-3/#starts-with-a-number
 | |
| function likeNumber(value) {
 | |
|   var code = value.charCodeAt(0);
 | |
|   var nextCode;
 | |
| 
 | |
|   if (code === plus || code === minus) {
 | |
|     nextCode = value.charCodeAt(1);
 | |
| 
 | |
|     if (nextCode >= 48 && nextCode <= 57) {
 | |
|       return true;
 | |
|     }
 | |
| 
 | |
|     var nextNextCode = value.charCodeAt(2);
 | |
| 
 | |
|     if (nextCode === dot && nextNextCode >= 48 && nextNextCode <= 57) {
 | |
|       return true;
 | |
|     }
 | |
| 
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   if (code === dot) {
 | |
|     nextCode = value.charCodeAt(1);
 | |
| 
 | |
|     if (nextCode >= 48 && nextCode <= 57) {
 | |
|       return true;
 | |
|     }
 | |
| 
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   if (code >= 48 && code <= 57) {
 | |
|     return true;
 | |
|   }
 | |
| 
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| // Consume a number
 | |
| // https://www.w3.org/TR/css-syntax-3/#consume-number
 | |
| module.exports = function(value) {
 | |
|   var pos = 0;
 | |
|   var length = value.length;
 | |
|   var code;
 | |
|   var nextCode;
 | |
|   var nextNextCode;
 | |
| 
 | |
|   if (length === 0 || !likeNumber(value)) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   code = value.charCodeAt(pos);
 | |
| 
 | |
|   if (code === plus || code === minus) {
 | |
|     pos++;
 | |
|   }
 | |
| 
 | |
|   while (pos < length) {
 | |
|     code = value.charCodeAt(pos);
 | |
| 
 | |
|     if (code < 48 || code > 57) {
 | |
|       break;
 | |
|     }
 | |
| 
 | |
|     pos += 1;
 | |
|   }
 | |
| 
 | |
|   code = value.charCodeAt(pos);
 | |
|   nextCode = value.charCodeAt(pos + 1);
 | |
| 
 | |
|   if (code === dot && nextCode >= 48 && nextCode <= 57) {
 | |
|     pos += 2;
 | |
| 
 | |
|     while (pos < length) {
 | |
|       code = value.charCodeAt(pos);
 | |
| 
 | |
|       if (code < 48 || code > 57) {
 | |
|         break;
 | |
|       }
 | |
| 
 | |
|       pos += 1;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   code = value.charCodeAt(pos);
 | |
|   nextCode = value.charCodeAt(pos + 1);
 | |
|   nextNextCode = value.charCodeAt(pos + 2);
 | |
| 
 | |
|   if (
 | |
|     (code === exp || code === EXP) &&
 | |
|     ((nextCode >= 48 && nextCode <= 57) ||
 | |
|       ((nextCode === plus || nextCode === minus) &&
 | |
|         nextNextCode >= 48 &&
 | |
|         nextNextCode <= 57))
 | |
|   ) {
 | |
|     pos += nextCode === plus || nextCode === minus ? 3 : 2;
 | |
| 
 | |
|     while (pos < length) {
 | |
|       code = value.charCodeAt(pos);
 | |
| 
 | |
|       if (code < 48 || code > 57) {
 | |
|         break;
 | |
|       }
 | |
| 
 | |
|       pos += 1;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     number: value.slice(0, pos),
 | |
|     unit: value.slice(pos)
 | |
|   };
 | |
| };
 |