 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>
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| var fs = require('fs')
 | |
| var core
 | |
| if (process.platform === 'win32' || global.TESTING_WINDOWS) {
 | |
|   core = require('./windows.js')
 | |
| } else {
 | |
|   core = require('./mode.js')
 | |
| }
 | |
| 
 | |
| module.exports = isexe
 | |
| isexe.sync = sync
 | |
| 
 | |
| function isexe (path, options, cb) {
 | |
|   if (typeof options === 'function') {
 | |
|     cb = options
 | |
|     options = {}
 | |
|   }
 | |
| 
 | |
|   if (!cb) {
 | |
|     if (typeof Promise !== 'function') {
 | |
|       throw new TypeError('callback not provided')
 | |
|     }
 | |
| 
 | |
|     return new Promise(function (resolve, reject) {
 | |
|       isexe(path, options || {}, function (er, is) {
 | |
|         if (er) {
 | |
|           reject(er)
 | |
|         } else {
 | |
|           resolve(is)
 | |
|         }
 | |
|       })
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   core(path, options || {}, function (er, is) {
 | |
|     // ignore EACCES because that just means we aren't allowed to run it
 | |
|     if (er) {
 | |
|       if (er.code === 'EACCES' || options && options.ignoreErrors) {
 | |
|         er = null
 | |
|         is = false
 | |
|       }
 | |
|     }
 | |
|     cb(er, is)
 | |
|   })
 | |
| }
 | |
| 
 | |
| function sync (path, options) {
 | |
|   // my kingdom for a filtered catch
 | |
|   try {
 | |
|     return core.sync(path, options || {})
 | |
|   } catch (er) {
 | |
|     if (options && options.ignoreErrors || er.code === 'EACCES') {
 | |
|       return false
 | |
|     } else {
 | |
|       throw er
 | |
|     }
 | |
|   }
 | |
| }
 |