 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>
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|   value: true
 | |
| });
 | |
| exports.dayPeriodEnumToHours = dayPeriodEnumToHours;
 | |
| exports.isLeapYearIndex = isLeapYearIndex;
 | |
| exports.mapValue = mapValue;
 | |
| exports.normalizeTwoDigitYear = normalizeTwoDigitYear;
 | |
| exports.parseAnyDigitsSigned = parseAnyDigitsSigned;
 | |
| exports.parseNDigits = parseNDigits;
 | |
| exports.parseNDigitsSigned = parseNDigitsSigned;
 | |
| exports.parseNumericPattern = parseNumericPattern;
 | |
| exports.parseTimezonePattern = parseTimezonePattern;
 | |
| var _index = require("../../constants/index.js");
 | |
| var _constants = require("./constants.js");
 | |
| function mapValue(parseFnResult, mapFn) {
 | |
|   if (!parseFnResult) {
 | |
|     return parseFnResult;
 | |
|   }
 | |
|   return {
 | |
|     value: mapFn(parseFnResult.value),
 | |
|     rest: parseFnResult.rest
 | |
|   };
 | |
| }
 | |
| function parseNumericPattern(pattern, dateString) {
 | |
|   var matchResult = dateString.match(pattern);
 | |
|   if (!matchResult) {
 | |
|     return null;
 | |
|   }
 | |
|   return {
 | |
|     value: parseInt(matchResult[0], 10),
 | |
|     rest: dateString.slice(matchResult[0].length)
 | |
|   };
 | |
| }
 | |
| function parseTimezonePattern(pattern, dateString) {
 | |
|   var matchResult = dateString.match(pattern);
 | |
|   if (!matchResult) {
 | |
|     return null;
 | |
|   }
 | |
| 
 | |
|   // Input is 'Z'
 | |
|   if (matchResult[0] === 'Z') {
 | |
|     return {
 | |
|       value: 0,
 | |
|       rest: dateString.slice(1)
 | |
|     };
 | |
|   }
 | |
|   var sign = matchResult[1] === '+' ? 1 : -1;
 | |
|   var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0;
 | |
|   var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0;
 | |
|   var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0;
 | |
|   return {
 | |
|     value: sign * (hours * _index.millisecondsInHour + minutes * _index.millisecondsInMinute + seconds * _index.millisecondsInSecond),
 | |
|     rest: dateString.slice(matchResult[0].length)
 | |
|   };
 | |
| }
 | |
| function parseAnyDigitsSigned(dateString) {
 | |
|   return parseNumericPattern(_constants.numericPatterns.anyDigitsSigned, dateString);
 | |
| }
 | |
| function parseNDigits(n, dateString) {
 | |
|   switch (n) {
 | |
|     case 1:
 | |
|       return parseNumericPattern(_constants.numericPatterns.singleDigit, dateString);
 | |
|     case 2:
 | |
|       return parseNumericPattern(_constants.numericPatterns.twoDigits, dateString);
 | |
|     case 3:
 | |
|       return parseNumericPattern(_constants.numericPatterns.threeDigits, dateString);
 | |
|     case 4:
 | |
|       return parseNumericPattern(_constants.numericPatterns.fourDigits, dateString);
 | |
|     default:
 | |
|       return parseNumericPattern(new RegExp('^\\d{1,' + n + '}'), dateString);
 | |
|   }
 | |
| }
 | |
| function parseNDigitsSigned(n, dateString) {
 | |
|   switch (n) {
 | |
|     case 1:
 | |
|       return parseNumericPattern(_constants.numericPatterns.singleDigitSigned, dateString);
 | |
|     case 2:
 | |
|       return parseNumericPattern(_constants.numericPatterns.twoDigitsSigned, dateString);
 | |
|     case 3:
 | |
|       return parseNumericPattern(_constants.numericPatterns.threeDigitsSigned, dateString);
 | |
|     case 4:
 | |
|       return parseNumericPattern(_constants.numericPatterns.fourDigitsSigned, dateString);
 | |
|     default:
 | |
|       return parseNumericPattern(new RegExp('^-?\\d{1,' + n + '}'), dateString);
 | |
|   }
 | |
| }
 | |
| function dayPeriodEnumToHours(dayPeriod) {
 | |
|   switch (dayPeriod) {
 | |
|     case 'morning':
 | |
|       return 4;
 | |
|     case 'evening':
 | |
|       return 17;
 | |
|     case 'pm':
 | |
|     case 'noon':
 | |
|     case 'afternoon':
 | |
|       return 12;
 | |
|     case 'am':
 | |
|     case 'midnight':
 | |
|     case 'night':
 | |
|     default:
 | |
|       return 0;
 | |
|   }
 | |
| }
 | |
| function normalizeTwoDigitYear(twoDigitYear, currentYear) {
 | |
|   var isCommonEra = currentYear > 0;
 | |
|   // Absolute number of the current year:
 | |
|   // 1 -> 1 AC
 | |
|   // 0 -> 1 BC
 | |
|   // -1 -> 2 BC
 | |
|   var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear;
 | |
|   var result;
 | |
|   if (absCurrentYear <= 50) {
 | |
|     result = twoDigitYear || 100;
 | |
|   } else {
 | |
|     var rangeEnd = absCurrentYear + 50;
 | |
|     var rangeEndCentury = Math.floor(rangeEnd / 100) * 100;
 | |
|     var isPreviousCentury = twoDigitYear >= rangeEnd % 100;
 | |
|     result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0);
 | |
|   }
 | |
|   return isCommonEra ? result : 1 - result;
 | |
| }
 | |
| function isLeapYearIndex(year) {
 | |
|   return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0;
 | |
| } |