 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>
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import {IS_IDENTIFIER_CHAR, IS_IDENTIFIER_START} from "../parser/util/identifier";
 | |
| 
 | |
| // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar
 | |
| // Hard-code a list of reserved words rather than trying to use keywords or contextual keywords
 | |
| // from the parser, since currently there are various exceptions, like `package` being reserved
 | |
| // but unused and various contextual keywords being reserved. Note that we assume that all code
 | |
| // compiled by Sucrase is in a module, so strict mode words and await are all considered reserved
 | |
| // here.
 | |
| const RESERVED_WORDS = new Set([
 | |
|   // Reserved keywords as of ECMAScript 2015
 | |
|   "break",
 | |
|   "case",
 | |
|   "catch",
 | |
|   "class",
 | |
|   "const",
 | |
|   "continue",
 | |
|   "debugger",
 | |
|   "default",
 | |
|   "delete",
 | |
|   "do",
 | |
|   "else",
 | |
|   "export",
 | |
|   "extends",
 | |
|   "finally",
 | |
|   "for",
 | |
|   "function",
 | |
|   "if",
 | |
|   "import",
 | |
|   "in",
 | |
|   "instanceof",
 | |
|   "new",
 | |
|   "return",
 | |
|   "super",
 | |
|   "switch",
 | |
|   "this",
 | |
|   "throw",
 | |
|   "try",
 | |
|   "typeof",
 | |
|   "var",
 | |
|   "void",
 | |
|   "while",
 | |
|   "with",
 | |
|   "yield",
 | |
|   // Future reserved keywords
 | |
|   "enum",
 | |
|   "implements",
 | |
|   "interface",
 | |
|   "let",
 | |
|   "package",
 | |
|   "private",
 | |
|   "protected",
 | |
|   "public",
 | |
|   "static",
 | |
|   "await",
 | |
|   // Literals that cannot be used as identifiers
 | |
|   "false",
 | |
|   "null",
 | |
|   "true",
 | |
| ]);
 | |
| 
 | |
| /**
 | |
|  * Determine if the given name is a legal variable name.
 | |
|  *
 | |
|  * This is needed when transforming TypeScript enums; if an enum key is a valid
 | |
|  * variable name, it might be referenced later in the enum, so we need to
 | |
|  * declare a variable.
 | |
|  */
 | |
| export default function isIdentifier(name) {
 | |
|   if (name.length === 0) {
 | |
|     return false;
 | |
|   }
 | |
|   if (!IS_IDENTIFIER_START[name.charCodeAt(0)]) {
 | |
|     return false;
 | |
|   }
 | |
|   for (let i = 1; i < name.length; i++) {
 | |
|     if (!IS_IDENTIFIER_CHAR[name.charCodeAt(i)]) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
|   return !RESERVED_WORDS.has(name);
 | |
| }
 |