 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>
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from "d3-time";
 | |
| import {timeFormat} from "d3-time-format";
 | |
| import continuous, {copy} from "./continuous.js";
 | |
| import {initRange} from "./init.js";
 | |
| import nice from "./nice.js";
 | |
| 
 | |
| function date(t) {
 | |
|   return new Date(t);
 | |
| }
 | |
| 
 | |
| function number(t) {
 | |
|   return t instanceof Date ? +t : +new Date(+t);
 | |
| }
 | |
| 
 | |
| export function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {
 | |
|   var scale = continuous(),
 | |
|       invert = scale.invert,
 | |
|       domain = scale.domain;
 | |
| 
 | |
|   var formatMillisecond = format(".%L"),
 | |
|       formatSecond = format(":%S"),
 | |
|       formatMinute = format("%I:%M"),
 | |
|       formatHour = format("%I %p"),
 | |
|       formatDay = format("%a %d"),
 | |
|       formatWeek = format("%b %d"),
 | |
|       formatMonth = format("%B"),
 | |
|       formatYear = format("%Y");
 | |
| 
 | |
|   function tickFormat(date) {
 | |
|     return (second(date) < date ? formatMillisecond
 | |
|         : minute(date) < date ? formatSecond
 | |
|         : hour(date) < date ? formatMinute
 | |
|         : day(date) < date ? formatHour
 | |
|         : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
 | |
|         : year(date) < date ? formatMonth
 | |
|         : formatYear)(date);
 | |
|   }
 | |
| 
 | |
|   scale.invert = function(y) {
 | |
|     return new Date(invert(y));
 | |
|   };
 | |
| 
 | |
|   scale.domain = function(_) {
 | |
|     return arguments.length ? domain(Array.from(_, number)) : domain().map(date);
 | |
|   };
 | |
| 
 | |
|   scale.ticks = function(interval) {
 | |
|     var d = domain();
 | |
|     return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);
 | |
|   };
 | |
| 
 | |
|   scale.tickFormat = function(count, specifier) {
 | |
|     return specifier == null ? tickFormat : format(specifier);
 | |
|   };
 | |
| 
 | |
|   scale.nice = function(interval) {
 | |
|     var d = domain();
 | |
|     if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);
 | |
|     return interval ? domain(nice(d, interval)) : scale;
 | |
|   };
 | |
| 
 | |
|   scale.copy = function() {
 | |
|     return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));
 | |
|   };
 | |
| 
 | |
|   return scale;
 | |
| }
 | |
| 
 | |
| export default function time() {
 | |
|   return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
 | |
| }
 |