 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>
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| module.exports = {
 | |
|   wrap: wrapRange,
 | |
|   limit: limitRange,
 | |
|   validate: validateRange,
 | |
|   test: testRange,
 | |
|   curry: curry,
 | |
|   name: name
 | |
| };
 | |
| 
 | |
| function wrapRange(min, max, value) {
 | |
|   var maxLessMin = max - min;
 | |
|   return ((value - min) % maxLessMin + maxLessMin) % maxLessMin + min;
 | |
| }
 | |
| 
 | |
| function limitRange(min, max, value) {
 | |
|   return Math.max(min, Math.min(max, value));
 | |
| }
 | |
| 
 | |
| function validateRange(min, max, value, minExclusive, maxExclusive) {
 | |
|   if (!testRange(min, max, value, minExclusive, maxExclusive)) {
 | |
|     throw new Error(value + ' is outside of range [' + min + ',' + max + ')');
 | |
|   }
 | |
|   return value;
 | |
| }
 | |
| 
 | |
| function testRange(min, max, value, minExclusive, maxExclusive) {
 | |
|   return !(
 | |
|        value < min ||
 | |
|        value > max ||
 | |
|        (maxExclusive && (value === max)) ||
 | |
|        (minExclusive && (value === min))
 | |
|   );
 | |
| }
 | |
| 
 | |
| function name(min, max, minExcl, maxExcl) {
 | |
|   return (minExcl ? '(' : '[') + min + ',' + max + (maxExcl ? ')' : ']');
 | |
| }
 | |
| 
 | |
| function curry(min, max, minExclusive, maxExclusive) {
 | |
|   var boundNameFn = name.bind(null, min, max, minExclusive, maxExclusive);
 | |
|   return {
 | |
|     wrap: wrapRange.bind(null, min, max),
 | |
|     limit: limitRange.bind(null, min, max),
 | |
|     validate: function(value) {
 | |
|       return validateRange(min, max, value, minExclusive, maxExclusive);
 | |
|     },
 | |
|     test: function(value) {
 | |
|       return testRange(min, max, value, minExclusive, maxExclusive);
 | |
|     },
 | |
|     toString: boundNameFn,
 | |
|     name: boundNameFn
 | |
|   };
 | |
| }
 |