 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>
		
			
				
	
	
		
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import ascending from "./ascending.js";
 | |
| import permute from "./permute.js";
 | |
| 
 | |
| export default function sort(values, ...F) {
 | |
|   if (typeof values[Symbol.iterator] !== "function") throw new TypeError("values is not iterable");
 | |
|   values = Array.from(values);
 | |
|   let [f] = F;
 | |
|   if ((f && f.length !== 2) || F.length > 1) {
 | |
|     const index = Uint32Array.from(values, (d, i) => i);
 | |
|     if (F.length > 1) {
 | |
|       F = F.map(f => values.map(f));
 | |
|       index.sort((i, j) => {
 | |
|         for (const f of F) {
 | |
|           const c = ascendingDefined(f[i], f[j]);
 | |
|           if (c) return c;
 | |
|         }
 | |
|       });
 | |
|     } else {
 | |
|       f = values.map(f);
 | |
|       index.sort((i, j) => ascendingDefined(f[i], f[j]));
 | |
|     }
 | |
|     return permute(values, index);
 | |
|   }
 | |
|   return values.sort(compareDefined(f));
 | |
| }
 | |
| 
 | |
| export function compareDefined(compare = ascending) {
 | |
|   if (compare === ascending) return ascendingDefined;
 | |
|   if (typeof compare !== "function") throw new TypeError("compare is not a function");
 | |
|   return (a, b) => {
 | |
|     const x = compare(a, b);
 | |
|     if (x || x === 0) return x;
 | |
|     return (compare(b, b) === 0) - (compare(a, a) === 0);
 | |
|   };
 | |
| }
 | |
| 
 | |
| export function ascendingDefined(a, b) {
 | |
|   return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);
 | |
| }
 |