 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>
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const path = require('path');
 | |
| const which = require('which');
 | |
| const getPathKey = require('path-key');
 | |
| 
 | |
| function resolveCommandAttempt(parsed, withoutPathExt) {
 | |
|     const env = parsed.options.env || process.env;
 | |
|     const cwd = process.cwd();
 | |
|     const hasCustomCwd = parsed.options.cwd != null;
 | |
|     // Worker threads do not have process.chdir()
 | |
|     const shouldSwitchCwd = hasCustomCwd && process.chdir !== undefined && !process.chdir.disabled;
 | |
| 
 | |
|     // If a custom `cwd` was specified, we need to change the process cwd
 | |
|     // because `which` will do stat calls but does not support a custom cwd
 | |
|     if (shouldSwitchCwd) {
 | |
|         try {
 | |
|             process.chdir(parsed.options.cwd);
 | |
|         } catch (err) {
 | |
|             /* Empty */
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     let resolved;
 | |
| 
 | |
|     try {
 | |
|         resolved = which.sync(parsed.command, {
 | |
|             path: env[getPathKey({ env })],
 | |
|             pathExt: withoutPathExt ? path.delimiter : undefined,
 | |
|         });
 | |
|     } catch (e) {
 | |
|         /* Empty */
 | |
|     } finally {
 | |
|         if (shouldSwitchCwd) {
 | |
|             process.chdir(cwd);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // If we successfully resolved, ensure that an absolute path is returned
 | |
|     // Note that when a custom `cwd` was used, we need to resolve to an absolute path based on it
 | |
|     if (resolved) {
 | |
|         resolved = path.resolve(hasCustomCwd ? parsed.options.cwd : '', resolved);
 | |
|     }
 | |
| 
 | |
|     return resolved;
 | |
| }
 | |
| 
 | |
| function resolveCommand(parsed) {
 | |
|     return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
 | |
| }
 | |
| 
 | |
| module.exports = resolveCommand;
 |