 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>
		
			
				
	
	
		
			166 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			166 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.Polling = 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 debug_1 = __importDefault(require("debug")); // debug()
 | |
| const debug = (0, debug_1.default)("engine.io-client:polling"); // debug()
 | |
| class Polling extends transport_js_1.Transport {
 | |
|     constructor() {
 | |
|         super(...arguments);
 | |
|         this._polling = false;
 | |
|     }
 | |
|     get name() {
 | |
|         return "polling";
 | |
|     }
 | |
|     /**
 | |
|      * Opens the socket (triggers polling). We write a PING message to determine
 | |
|      * when the transport is open.
 | |
|      *
 | |
|      * @protected
 | |
|      */
 | |
|     doOpen() {
 | |
|         this._poll();
 | |
|     }
 | |
|     /**
 | |
|      * Pauses polling.
 | |
|      *
 | |
|      * @param {Function} onPause - callback upon buffers are flushed and transport is paused
 | |
|      * @package
 | |
|      */
 | |
|     pause(onPause) {
 | |
|         this.readyState = "pausing";
 | |
|         const pause = () => {
 | |
|             debug("paused");
 | |
|             this.readyState = "paused";
 | |
|             onPause();
 | |
|         };
 | |
|         if (this._polling || !this.writable) {
 | |
|             let total = 0;
 | |
|             if (this._polling) {
 | |
|                 debug("we are currently polling - waiting to pause");
 | |
|                 total++;
 | |
|                 this.once("pollComplete", function () {
 | |
|                     debug("pre-pause polling complete");
 | |
|                     --total || pause();
 | |
|                 });
 | |
|             }
 | |
|             if (!this.writable) {
 | |
|                 debug("we are currently writing - waiting to pause");
 | |
|                 total++;
 | |
|                 this.once("drain", function () {
 | |
|                     debug("pre-pause writing complete");
 | |
|                     --total || pause();
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
|         else {
 | |
|             pause();
 | |
|         }
 | |
|     }
 | |
|     /**
 | |
|      * Starts polling cycle.
 | |
|      *
 | |
|      * @private
 | |
|      */
 | |
|     _poll() {
 | |
|         debug("polling");
 | |
|         this._polling = true;
 | |
|         this.doPoll();
 | |
|         this.emitReserved("poll");
 | |
|     }
 | |
|     /**
 | |
|      * Overloads onData to detect payloads.
 | |
|      *
 | |
|      * @protected
 | |
|      */
 | |
|     onData(data) {
 | |
|         debug("polling got data %s", data);
 | |
|         const callback = (packet) => {
 | |
|             // if its the first message we consider the transport open
 | |
|             if ("opening" === this.readyState && packet.type === "open") {
 | |
|                 this.onOpen();
 | |
|             }
 | |
|             // if its a close packet, we close the ongoing requests
 | |
|             if ("close" === packet.type) {
 | |
|                 this.onClose({ description: "transport closed by the server" });
 | |
|                 return false;
 | |
|             }
 | |
|             // otherwise bypass onData and handle the message
 | |
|             this.onPacket(packet);
 | |
|         };
 | |
|         // decode payload
 | |
|         (0, engine_io_parser_1.decodePayload)(data, this.socket.binaryType).forEach(callback);
 | |
|         // if an event did not trigger closing
 | |
|         if ("closed" !== this.readyState) {
 | |
|             // if we got data we're not polling
 | |
|             this._polling = false;
 | |
|             this.emitReserved("pollComplete");
 | |
|             if ("open" === this.readyState) {
 | |
|                 this._poll();
 | |
|             }
 | |
|             else {
 | |
|                 debug('ignoring poll - transport state "%s"', this.readyState);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     /**
 | |
|      * For polling, send a close packet.
 | |
|      *
 | |
|      * @protected
 | |
|      */
 | |
|     doClose() {
 | |
|         const close = () => {
 | |
|             debug("writing close packet");
 | |
|             this.write([{ type: "close" }]);
 | |
|         };
 | |
|         if ("open" === this.readyState) {
 | |
|             debug("transport open - closing");
 | |
|             close();
 | |
|         }
 | |
|         else {
 | |
|             // in case we're trying to close while
 | |
|             // handshaking is in progress (GH-164)
 | |
|             debug("transport not open - deferring close");
 | |
|             this.once("open", close);
 | |
|         }
 | |
|     }
 | |
|     /**
 | |
|      * Writes a packets payload.
 | |
|      *
 | |
|      * @param {Array} packets - data packets
 | |
|      * @protected
 | |
|      */
 | |
|     write(packets) {
 | |
|         this.writable = false;
 | |
|         (0, engine_io_parser_1.encodePayload)(packets, (data) => {
 | |
|             this.doWrite(data, () => {
 | |
|                 this.writable = true;
 | |
|                 this.emitReserved("drain");
 | |
|             });
 | |
|         });
 | |
|     }
 | |
|     /**
 | |
|      * Generates uri for connection.
 | |
|      *
 | |
|      * @private
 | |
|      */
 | |
|     uri() {
 | |
|         const schema = this.opts.secure ? "https" : "http";
 | |
|         const query = this.query || {};
 | |
|         // cache busting is forced
 | |
|         if (false !== this.opts.timestampRequests) {
 | |
|             query[this.opts.timestampParam] = (0, util_js_1.randomString)();
 | |
|         }
 | |
|         if (!this.supportsBinary && !query.sid) {
 | |
|             query.b64 = 1;
 | |
|         }
 | |
|         return this.createUri(schema, query);
 | |
|     }
 | |
| }
 | |
| exports.Polling = Polling;
 |