 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>
		
			
				
	
	
		
			231 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| #!/usr/bin/env node
 | |
| "use strict";
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|     value: true
 | |
| });
 | |
| const _path = /*#__PURE__*/ _interop_require_default(require("path"));
 | |
| const _arg = /*#__PURE__*/ _interop_require_default(require("arg"));
 | |
| const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
 | |
| const _build = require("./build");
 | |
| const _help = require("./help");
 | |
| const _init = require("./init");
 | |
| function _interop_require_default(obj) {
 | |
|     return obj && obj.__esModule ? obj : {
 | |
|         default: obj
 | |
|     };
 | |
| }
 | |
| function oneOf(...options) {
 | |
|     return Object.assign((value = true)=>{
 | |
|         for (let option of options){
 | |
|             let parsed = option(value);
 | |
|             if (parsed === value) {
 | |
|                 return parsed;
 | |
|             }
 | |
|         }
 | |
|         throw new Error("...");
 | |
|     }, {
 | |
|         manualParsing: true
 | |
|     });
 | |
| }
 | |
| let commands = {
 | |
|     init: {
 | |
|         run: _init.init,
 | |
|         args: {
 | |
|             "--esm": {
 | |
|                 type: Boolean,
 | |
|                 description: `Initialize configuration file as ESM`
 | |
|             },
 | |
|             "--ts": {
 | |
|                 type: Boolean,
 | |
|                 description: `Initialize configuration file as TypeScript`
 | |
|             },
 | |
|             "--postcss": {
 | |
|                 type: Boolean,
 | |
|                 description: `Initialize a \`postcss.config.js\` file`
 | |
|             },
 | |
|             "--full": {
 | |
|                 type: Boolean,
 | |
|                 description: `Include the default values for all options in the generated configuration file`
 | |
|             },
 | |
|             "-f": "--full",
 | |
|             "-p": "--postcss"
 | |
|         }
 | |
|     },
 | |
|     build: {
 | |
|         run: _build.build,
 | |
|         args: {
 | |
|             "--input": {
 | |
|                 type: String,
 | |
|                 description: "Input file"
 | |
|             },
 | |
|             "--output": {
 | |
|                 type: String,
 | |
|                 description: "Output file"
 | |
|             },
 | |
|             "--watch": {
 | |
|                 type: oneOf(String, Boolean),
 | |
|                 description: "Watch for changes and rebuild as needed"
 | |
|             },
 | |
|             "--poll": {
 | |
|                 type: Boolean,
 | |
|                 description: "Use polling instead of filesystem events when watching"
 | |
|             },
 | |
|             "--content": {
 | |
|                 type: String,
 | |
|                 description: "Content paths to use for removing unused classes"
 | |
|             },
 | |
|             "--purge": {
 | |
|                 type: String,
 | |
|                 deprecated: true
 | |
|             },
 | |
|             "--postcss": {
 | |
|                 type: oneOf(String, Boolean),
 | |
|                 description: "Load custom PostCSS configuration"
 | |
|             },
 | |
|             "--minify": {
 | |
|                 type: Boolean,
 | |
|                 description: "Minify the output"
 | |
|             },
 | |
|             "--config": {
 | |
|                 type: String,
 | |
|                 description: "Path to a custom config file"
 | |
|             },
 | |
|             "--no-autoprefixer": {
 | |
|                 type: Boolean,
 | |
|                 description: "Disable autoprefixer"
 | |
|             },
 | |
|             "-c": "--config",
 | |
|             "-i": "--input",
 | |
|             "-o": "--output",
 | |
|             "-m": "--minify",
 | |
|             "-w": "--watch",
 | |
|             "-p": "--poll"
 | |
|         }
 | |
|     }
 | |
| };
 | |
| let sharedFlags = {
 | |
|     "--help": {
 | |
|         type: Boolean,
 | |
|         description: "Display usage information"
 | |
|     },
 | |
|     "-h": "--help"
 | |
| };
 | |
| if (process.stdout.isTTY /* Detect redirecting output to a file */  && (process.argv[2] === undefined || process.argv.slice(2).every((flag)=>sharedFlags[flag] !== undefined))) {
 | |
|     (0, _help.help)({
 | |
|         usage: [
 | |
|             "tailwindcss [--input input.css] [--output output.css] [--watch] [options...]",
 | |
|             "tailwindcss init [--full] [--postcss] [options...]"
 | |
|         ],
 | |
|         commands: Object.keys(commands).filter((command)=>command !== "build").map((command)=>`${command} [options]`),
 | |
|         options: {
 | |
|             ...commands.build.args,
 | |
|             ...sharedFlags
 | |
|         }
 | |
|     });
 | |
|     process.exit(0);
 | |
| }
 | |
| let command = ((arg = "")=>arg.startsWith("-") ? undefined : arg)(process.argv[2]) || "build";
 | |
| if (commands[command] === undefined) {
 | |
|     if (_fs.default.existsSync(_path.default.resolve(command))) {
 | |
|         // TODO: Deprecate this in future versions
 | |
|         // Check if non-existing command, might be a file.
 | |
|         command = "build";
 | |
|     } else {
 | |
|         (0, _help.help)({
 | |
|             message: `Invalid command: ${command}`,
 | |
|             usage: [
 | |
|                 "tailwindcss <command> [options]"
 | |
|             ],
 | |
|             commands: Object.keys(commands).filter((command)=>command !== "build").map((command)=>`${command} [options]`),
 | |
|             options: sharedFlags
 | |
|         });
 | |
|         process.exit(1);
 | |
|     }
 | |
| }
 | |
| // Execute command
 | |
| let { args: flags , run  } = commands[command];
 | |
| let args = (()=>{
 | |
|     try {
 | |
|         let result = (0, _arg.default)(Object.fromEntries(Object.entries({
 | |
|             ...flags,
 | |
|             ...sharedFlags
 | |
|         }).filter(([_key, value])=>{
 | |
|             var _value_type;
 | |
|             return !(value === null || value === void 0 ? void 0 : (_value_type = value.type) === null || _value_type === void 0 ? void 0 : _value_type.manualParsing);
 | |
|         }).map(([key, value])=>[
 | |
|                 key,
 | |
|                 typeof value === "object" ? value.type : value
 | |
|             ])), {
 | |
|             permissive: true
 | |
|         });
 | |
|         // Manual parsing of flags to allow for special flags like oneOf(Boolean, String)
 | |
|         for(let i = result["_"].length - 1; i >= 0; --i){
 | |
|             let flag = result["_"][i];
 | |
|             if (!flag.startsWith("-")) continue;
 | |
|             let [flagName, flagValue] = flag.split("=");
 | |
|             let handler = flags[flagName];
 | |
|             // Resolve flagName & handler
 | |
|             while(typeof handler === "string"){
 | |
|                 flagName = handler;
 | |
|                 handler = flags[handler];
 | |
|             }
 | |
|             if (!handler) continue;
 | |
|             let args = [];
 | |
|             let offset = i + 1;
 | |
|             // --flag value syntax was used so we need to pull `value` from `args`
 | |
|             if (flagValue === undefined) {
 | |
|                 // Parse args for current flag
 | |
|                 while(result["_"][offset] && !result["_"][offset].startsWith("-")){
 | |
|                     args.push(result["_"][offset++]);
 | |
|                 }
 | |
|                 // Cleanup manually parsed flags + args
 | |
|                 result["_"].splice(i, 1 + args.length);
 | |
|                 // No args were provided, use default value defined in handler
 | |
|                 // One arg was provided, use that directly
 | |
|                 // Multiple args were provided so pass them all in an array
 | |
|                 flagValue = args.length === 0 ? undefined : args.length === 1 ? args[0] : args;
 | |
|             } else {
 | |
|                 // Remove the whole flag from the args array
 | |
|                 result["_"].splice(i, 1);
 | |
|             }
 | |
|             // Set the resolved value in the `result` object
 | |
|             result[flagName] = handler.type(flagValue, flagName);
 | |
|         }
 | |
|         // Ensure that the `command` is always the first argument in the `args`.
 | |
|         // This is important so that we don't have to check if a default command
 | |
|         // (build) was used or not from within each plugin.
 | |
|         //
 | |
|         // E.g.: tailwindcss input.css -> _: ['build', 'input.css']
 | |
|         // E.g.: tailwindcss build input.css -> _: ['build', 'input.css']
 | |
|         if (result["_"][0] !== command) {
 | |
|             result["_"].unshift(command);
 | |
|         }
 | |
|         return result;
 | |
|     } catch (err) {
 | |
|         if (err.code === "ARG_UNKNOWN_OPTION") {
 | |
|             (0, _help.help)({
 | |
|                 message: err.message,
 | |
|                 usage: [
 | |
|                     "tailwindcss <command> [options]"
 | |
|                 ],
 | |
|                 options: sharedFlags
 | |
|             });
 | |
|             process.exit(1);
 | |
|         }
 | |
|         throw err;
 | |
|     }
 | |
| })();
 | |
| if (args["--help"]) {
 | |
|     (0, _help.help)({
 | |
|         options: {
 | |
|             ...flags,
 | |
|             ...sharedFlags
 | |
|         },
 | |
|         usage: [
 | |
|             `tailwindcss ${command} [options]`
 | |
|         ]
 | |
|     });
 | |
|     process.exit(0);
 | |
| }
 | |
| run(args);
 |