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>
64 lines
1.9 KiB
JavaScript
64 lines
1.9 KiB
JavaScript
import { parse } from "engine.io-client";
|
|
import debugModule from "debug"; // debug()
|
|
const debug = debugModule("socket.io-client:url"); // debug()
|
|
/**
|
|
* URL parser.
|
|
*
|
|
* @param uri - url
|
|
* @param path - the request path of the connection
|
|
* @param loc - An object meant to mimic window.location.
|
|
* Defaults to window.location.
|
|
* @public
|
|
*/
|
|
export function url(uri, path = "", loc) {
|
|
let obj = uri;
|
|
// default to window.location
|
|
loc = loc || (typeof location !== "undefined" && location);
|
|
if (null == uri)
|
|
uri = loc.protocol + "//" + loc.host;
|
|
// relative path support
|
|
if (typeof uri === "string") {
|
|
if ("/" === uri.charAt(0)) {
|
|
if ("/" === uri.charAt(1)) {
|
|
uri = loc.protocol + uri;
|
|
}
|
|
else {
|
|
uri = loc.host + uri;
|
|
}
|
|
}
|
|
if (!/^(https?|wss?):\/\//.test(uri)) {
|
|
debug("protocol-less url %s", uri);
|
|
if ("undefined" !== typeof loc) {
|
|
uri = loc.protocol + "//" + uri;
|
|
}
|
|
else {
|
|
uri = "https://" + uri;
|
|
}
|
|
}
|
|
// parse
|
|
debug("parse %s", uri);
|
|
obj = parse(uri);
|
|
}
|
|
// make sure we treat `localhost:80` and `localhost` equally
|
|
if (!obj.port) {
|
|
if (/^(http|ws)$/.test(obj.protocol)) {
|
|
obj.port = "80";
|
|
}
|
|
else if (/^(http|ws)s$/.test(obj.protocol)) {
|
|
obj.port = "443";
|
|
}
|
|
}
|
|
obj.path = obj.path || "/";
|
|
const ipv6 = obj.host.indexOf(":") !== -1;
|
|
const host = ipv6 ? "[" + obj.host + "]" : obj.host;
|
|
// define unique id
|
|
obj.id = obj.protocol + "://" + host + ":" + obj.port + path;
|
|
// define href
|
|
obj.href =
|
|
obj.protocol +
|
|
"://" +
|
|
host +
|
|
(loc && loc.port === obj.port ? "" : ":" + obj.port);
|
|
return obj;
|
|
}
|