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>
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
/**
|
|
* The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.
|
|
*
|
|
* Specifically:
|
|
* - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js
|
|
* - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts
|
|
*
|
|
* Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
|
|
*/
|
|
|
|
export type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false
|
|
type ClassNameArray = ClassNameValue[]
|
|
|
|
export function twJoin(...classLists: ClassNameValue[]): string
|
|
export function twJoin() {
|
|
let index = 0
|
|
let argument: ClassNameValue
|
|
let resolvedValue: string
|
|
let string = ''
|
|
|
|
while (index < arguments.length) {
|
|
if ((argument = arguments[index++])) {
|
|
if ((resolvedValue = toValue(argument))) {
|
|
string && (string += ' ')
|
|
string += resolvedValue
|
|
}
|
|
}
|
|
}
|
|
return string
|
|
}
|
|
|
|
const toValue = (mix: ClassNameArray | string) => {
|
|
if (typeof mix === 'string') {
|
|
return mix
|
|
}
|
|
|
|
let resolvedValue: string
|
|
let string = ''
|
|
|
|
for (let k = 0; k < mix.length; k++) {
|
|
if (mix[k]) {
|
|
if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {
|
|
string && (string += ' ')
|
|
string += resolvedValue
|
|
}
|
|
}
|
|
}
|
|
|
|
return string
|
|
}
|