 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>
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { noop } from '../utils/noop.mjs';
 | |
| 
 | |
| /*
 | |
|   Bezier function generator
 | |
|   This has been modified from Gaëtan Renaudeau's BezierEasing
 | |
|   https://github.com/gre/bezier-easing/blob/master/src/index.js
 | |
|   https://github.com/gre/bezier-easing/blob/master/LICENSE
 | |
|   
 | |
|   I've removed the newtonRaphsonIterate algo because in benchmarking it
 | |
|   wasn't noticiably faster than binarySubdivision, indeed removing it
 | |
|   usually improved times, depending on the curve.
 | |
|   I also removed the lookup table, as for the added bundle size and loop we're
 | |
|   only cutting ~4 or so subdivision iterations. I bumped the max iterations up
 | |
|   to 12 to compensate and this still tended to be faster for no perceivable
 | |
|   loss in accuracy.
 | |
|   Usage
 | |
|     const easeOut = cubicBezier(.17,.67,.83,.67);
 | |
|     const x = easeOut(0.5); // returns 0.627...
 | |
| */
 | |
| // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
 | |
| const calcBezier = (t, a1, a2) => (((1.0 - 3.0 * a2 + 3.0 * a1) * t + (3.0 * a2 - 6.0 * a1)) * t + 3.0 * a1) *
 | |
|     t;
 | |
| const subdivisionPrecision = 0.0000001;
 | |
| const subdivisionMaxIterations = 12;
 | |
| function binarySubdivide(x, lowerBound, upperBound, mX1, mX2) {
 | |
|     let currentX;
 | |
|     let currentT;
 | |
|     let i = 0;
 | |
|     do {
 | |
|         currentT = lowerBound + (upperBound - lowerBound) / 2.0;
 | |
|         currentX = calcBezier(currentT, mX1, mX2) - x;
 | |
|         if (currentX > 0.0) {
 | |
|             upperBound = currentT;
 | |
|         }
 | |
|         else {
 | |
|             lowerBound = currentT;
 | |
|         }
 | |
|     } while (Math.abs(currentX) > subdivisionPrecision &&
 | |
|         ++i < subdivisionMaxIterations);
 | |
|     return currentT;
 | |
| }
 | |
| function cubicBezier(mX1, mY1, mX2, mY2) {
 | |
|     // If this is a linear gradient, return linear easing
 | |
|     if (mX1 === mY1 && mX2 === mY2)
 | |
|         return noop;
 | |
|     const getTForX = (aX) => binarySubdivide(aX, 0, 1, mX1, mX2);
 | |
|     // If animation is at start/end, return t without easing
 | |
|     return (t) => t === 0 || t === 1 ? t : calcBezier(getTForX(t), mY1, mY2);
 | |
| }
 | |
| 
 | |
| export { cubicBezier };
 |