 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>
		
			
				
	
	
		
			137 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.WS = exports.BaseWS = void 0;
 | |
| const transport_js_1 = require("../transport.js");
 | |
| const util_js_1 = require("../util.js");
 | |
| const engine_io_parser_1 = require("engine.io-parser");
 | |
| const globals_node_js_1 = require("../globals.node.js");
 | |
| const debug_1 = __importDefault(require("debug")); // debug()
 | |
| const debug = (0, debug_1.default)("engine.io-client:websocket"); // debug()
 | |
| // detect ReactNative environment
 | |
| const isReactNative = typeof navigator !== "undefined" &&
 | |
|     typeof navigator.product === "string" &&
 | |
|     navigator.product.toLowerCase() === "reactnative";
 | |
| class BaseWS extends transport_js_1.Transport {
 | |
|     get name() {
 | |
|         return "websocket";
 | |
|     }
 | |
|     doOpen() {
 | |
|         const uri = this.uri();
 | |
|         const protocols = this.opts.protocols;
 | |
|         // React Native only supports the 'headers' option, and will print a warning if anything else is passed
 | |
|         const opts = isReactNative
 | |
|             ? {}
 | |
|             : (0, util_js_1.pick)(this.opts, "agent", "perMessageDeflate", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "localAddress", "protocolVersion", "origin", "maxPayload", "family", "checkServerIdentity");
 | |
|         if (this.opts.extraHeaders) {
 | |
|             opts.headers = this.opts.extraHeaders;
 | |
|         }
 | |
|         try {
 | |
|             this.ws = this.createSocket(uri, protocols, opts);
 | |
|         }
 | |
|         catch (err) {
 | |
|             return this.emitReserved("error", err);
 | |
|         }
 | |
|         this.ws.binaryType = this.socket.binaryType;
 | |
|         this.addEventListeners();
 | |
|     }
 | |
|     /**
 | |
|      * Adds event listeners to the socket
 | |
|      *
 | |
|      * @private
 | |
|      */
 | |
|     addEventListeners() {
 | |
|         this.ws.onopen = () => {
 | |
|             if (this.opts.autoUnref) {
 | |
|                 this.ws._socket.unref();
 | |
|             }
 | |
|             this.onOpen();
 | |
|         };
 | |
|         this.ws.onclose = (closeEvent) => this.onClose({
 | |
|             description: "websocket connection closed",
 | |
|             context: closeEvent,
 | |
|         });
 | |
|         this.ws.onmessage = (ev) => this.onData(ev.data);
 | |
|         this.ws.onerror = (e) => this.onError("websocket error", e);
 | |
|     }
 | |
|     write(packets) {
 | |
|         this.writable = false;
 | |
|         // encodePacket efficient as it uses WS framing
 | |
|         // no need for encodePayload
 | |
|         for (let i = 0; i < packets.length; i++) {
 | |
|             const packet = packets[i];
 | |
|             const lastPacket = i === packets.length - 1;
 | |
|             (0, engine_io_parser_1.encodePacket)(packet, this.supportsBinary, (data) => {
 | |
|                 // Sometimes the websocket has already been closed but the browser didn't
 | |
|                 // have a chance of informing us about it yet, in that case send will
 | |
|                 // throw an error
 | |
|                 try {
 | |
|                     this.doWrite(packet, data);
 | |
|                 }
 | |
|                 catch (e) {
 | |
|                     debug("websocket closed before onclose event");
 | |
|                 }
 | |
|                 if (lastPacket) {
 | |
|                     // fake drain
 | |
|                     // defer to next tick to allow Socket to clear writeBuffer
 | |
|                     (0, globals_node_js_1.nextTick)(() => {
 | |
|                         this.writable = true;
 | |
|                         this.emitReserved("drain");
 | |
|                     }, this.setTimeoutFn);
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|     }
 | |
|     doClose() {
 | |
|         if (typeof this.ws !== "undefined") {
 | |
|             this.ws.onerror = () => { };
 | |
|             this.ws.close();
 | |
|             this.ws = null;
 | |
|         }
 | |
|     }
 | |
|     /**
 | |
|      * Generates uri for connection.
 | |
|      *
 | |
|      * @private
 | |
|      */
 | |
|     uri() {
 | |
|         const schema = this.opts.secure ? "wss" : "ws";
 | |
|         const query = this.query || {};
 | |
|         // append timestamp to URI
 | |
|         if (this.opts.timestampRequests) {
 | |
|             query[this.opts.timestampParam] = (0, util_js_1.randomString)();
 | |
|         }
 | |
|         // communicate binary support capabilities
 | |
|         if (!this.supportsBinary) {
 | |
|             query.b64 = 1;
 | |
|         }
 | |
|         return this.createUri(schema, query);
 | |
|     }
 | |
| }
 | |
| exports.BaseWS = BaseWS;
 | |
| const WebSocketCtor = globals_node_js_1.globalThisShim.WebSocket || globals_node_js_1.globalThisShim.MozWebSocket;
 | |
| /**
 | |
|  * WebSocket transport based on the built-in `WebSocket` object.
 | |
|  *
 | |
|  * Usage: browser, Node.js (since v21), Deno, Bun
 | |
|  *
 | |
|  * @see https://developer.mozilla.org/en-US/docs/Web/API/WebSocket
 | |
|  * @see https://caniuse.com/mdn-api_websocket
 | |
|  * @see https://nodejs.org/api/globals.html#websocket
 | |
|  */
 | |
| class WS extends BaseWS {
 | |
|     createSocket(uri, protocols, opts) {
 | |
|         return !isReactNative
 | |
|             ? protocols
 | |
|                 ? new WebSocketCtor(uri, protocols)
 | |
|                 : new WebSocketCtor(uri)
 | |
|             : new WebSocketCtor(uri, protocols, opts);
 | |
|     }
 | |
|     doWrite(_packet, data) {
 | |
|         this.ws.send(data);
 | |
|     }
 | |
| }
 | |
| exports.WS = WS;
 |