Add comprehensive frontend UI and distributed infrastructure

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>
This commit is contained in:
anthonyrawlins
2025-07-10 08:41:59 +10:00
parent fc0eec91ef
commit 85bf1341f3
28348 changed files with 2646896 additions and 69 deletions

View File

@@ -0,0 +1,9 @@
import React from 'react';
import { BackgroundProps } from './types';
declare function Background({ id, variant, gap, size, lineWidth, offset, color, style, className, }: BackgroundProps): JSX.Element;
declare namespace Background {
var displayName: string;
}
declare const _default: React.MemoExoticComponent<typeof Background>;
export default _default;
//# sourceMappingURL=Background.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Background.d.ts","sourceRoot":"","sources":["../../../packages/background/src/Background.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuB,MAAM,OAAO,CAAC;AAK5C,OAAO,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAiB7D,iBAAS,UAAU,CAAC,EAClB,EAAE,EACF,OAAgC,EAEhC,GAAQ,EAER,IAAI,EACJ,SAAa,EACb,MAAU,EACV,KAAK,EACL,KAAK,EACL,SAAS,GACV,EAAE,eAAe,eAiDjB;kBA7DQ,UAAU;;;;AAiEnB,wBAAgC"}

View File

@@ -0,0 +1,14 @@
/// <reference types="react" />
type LinePatternProps = {
dimensions: [number, number];
lineWidth?: number;
color: string;
};
export declare function LinePattern({ color, dimensions, lineWidth }: LinePatternProps): JSX.Element;
type DotPatternProps = {
radius: number;
color: string;
};
export declare function DotPattern({ color, radius }: DotPatternProps): JSX.Element;
export {};
//# sourceMappingURL=Patterns.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Patterns.d.ts","sourceRoot":"","sources":["../../../packages/background/src/Patterns.tsx"],"names":[],"mappings":";AAEA,KAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,gBAAgB,eAQ7E;AAED,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,eAE5D"}

View File

@@ -0,0 +1,3 @@
export { default as Background } from './Background';
export * from './types';
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/background/src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,SAAS,CAAC"}

View File

@@ -0,0 +1,63 @@
import React, { memo, useRef } from 'react';
import cc from 'classcat';
import { useStore } from '@reactflow/core';
import { shallow } from 'zustand/shallow';
var BackgroundVariant;
(function (BackgroundVariant) {
BackgroundVariant["Lines"] = "lines";
BackgroundVariant["Dots"] = "dots";
BackgroundVariant["Cross"] = "cross";
})(BackgroundVariant || (BackgroundVariant = {}));
function LinePattern({ color, dimensions, lineWidth }) {
return (React.createElement("path", { stroke: color, strokeWidth: lineWidth, d: `M${dimensions[0] / 2} 0 V${dimensions[1]} M0 ${dimensions[1] / 2} H${dimensions[0]}` }));
}
function DotPattern({ color, radius }) {
return React.createElement("circle", { cx: radius, cy: radius, r: radius, fill: color });
}
const defaultColor = {
[BackgroundVariant.Dots]: '#91919a',
[BackgroundVariant.Lines]: '#eee',
[BackgroundVariant.Cross]: '#e2e2e2',
};
const defaultSize = {
[BackgroundVariant.Dots]: 1,
[BackgroundVariant.Lines]: 1,
[BackgroundVariant.Cross]: 6,
};
const selector = (s) => ({ transform: s.transform, patternId: `pattern-${s.rfId}` });
function Background({ id, variant = BackgroundVariant.Dots,
// only used for dots and cross
gap = 20,
// only used for lines and cross
size, lineWidth = 1, offset = 2, color, style, className, }) {
const ref = useRef(null);
const { transform, patternId } = useStore(selector, shallow);
const patternColor = color || defaultColor[variant];
const patternSize = size || defaultSize[variant];
const isDots = variant === BackgroundVariant.Dots;
const isCross = variant === BackgroundVariant.Cross;
const gapXY = Array.isArray(gap) ? gap : [gap, gap];
const scaledGap = [gapXY[0] * transform[2] || 1, gapXY[1] * transform[2] || 1];
const scaledSize = patternSize * transform[2];
const patternDimensions = isCross ? [scaledSize, scaledSize] : scaledGap;
const patternOffset = isDots
? [scaledSize / offset, scaledSize / offset]
: [patternDimensions[0] / offset, patternDimensions[1] / offset];
return (React.createElement("svg", { className: cc(['react-flow__background', className]), style: {
...style,
position: 'absolute',
width: '100%',
height: '100%',
top: 0,
left: 0,
}, ref: ref, "data-testid": "rf__background" },
React.createElement("pattern", { id: patternId + id, x: transform[0] % scaledGap[0], y: transform[1] % scaledGap[1], width: scaledGap[0], height: scaledGap[1], patternUnits: "userSpaceOnUse", patternTransform: `translate(-${patternOffset[0]},-${patternOffset[1]})` }, isDots ? (React.createElement(DotPattern, { color: patternColor, radius: scaledSize / offset })) : (React.createElement(LinePattern, { dimensions: patternDimensions, color: patternColor, lineWidth: lineWidth }))),
React.createElement("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: `url(#${patternId + id})` })));
}
Background.displayName = 'Background';
var Background$1 = memo(Background);
export { Background$1 as Background, BackgroundVariant };

View File

@@ -0,0 +1,63 @@
import React, { memo, useRef } from 'react';
import cc from 'classcat';
import { useStore } from '@reactflow/core';
import { shallow } from 'zustand/shallow';
var BackgroundVariant;
(function (BackgroundVariant) {
BackgroundVariant["Lines"] = "lines";
BackgroundVariant["Dots"] = "dots";
BackgroundVariant["Cross"] = "cross";
})(BackgroundVariant || (BackgroundVariant = {}));
function LinePattern({ color, dimensions, lineWidth }) {
return (React.createElement("path", { stroke: color, strokeWidth: lineWidth, d: `M${dimensions[0] / 2} 0 V${dimensions[1]} M0 ${dimensions[1] / 2} H${dimensions[0]}` }));
}
function DotPattern({ color, radius }) {
return React.createElement("circle", { cx: radius, cy: radius, r: radius, fill: color });
}
const defaultColor = {
[BackgroundVariant.Dots]: '#91919a',
[BackgroundVariant.Lines]: '#eee',
[BackgroundVariant.Cross]: '#e2e2e2',
};
const defaultSize = {
[BackgroundVariant.Dots]: 1,
[BackgroundVariant.Lines]: 1,
[BackgroundVariant.Cross]: 6,
};
const selector = (s) => ({ transform: s.transform, patternId: `pattern-${s.rfId}` });
function Background({ id, variant = BackgroundVariant.Dots,
// only used for dots and cross
gap = 20,
// only used for lines and cross
size, lineWidth = 1, offset = 2, color, style, className, }) {
const ref = useRef(null);
const { transform, patternId } = useStore(selector, shallow);
const patternColor = color || defaultColor[variant];
const patternSize = size || defaultSize[variant];
const isDots = variant === BackgroundVariant.Dots;
const isCross = variant === BackgroundVariant.Cross;
const gapXY = Array.isArray(gap) ? gap : [gap, gap];
const scaledGap = [gapXY[0] * transform[2] || 1, gapXY[1] * transform[2] || 1];
const scaledSize = patternSize * transform[2];
const patternDimensions = isCross ? [scaledSize, scaledSize] : scaledGap;
const patternOffset = isDots
? [scaledSize / offset, scaledSize / offset]
: [patternDimensions[0] / offset, patternDimensions[1] / offset];
return (React.createElement("svg", { className: cc(['react-flow__background', className]), style: {
...style,
position: 'absolute',
width: '100%',
height: '100%',
top: 0,
left: 0,
}, ref: ref, "data-testid": "rf__background" },
React.createElement("pattern", { id: patternId + id, x: transform[0] % scaledGap[0], y: transform[1] % scaledGap[1], width: scaledGap[0], height: scaledGap[1], patternUnits: "userSpaceOnUse", patternTransform: `translate(-${patternOffset[0]},-${patternOffset[1]})` }, isDots ? (React.createElement(DotPattern, { color: patternColor, radius: scaledSize / offset })) : (React.createElement(LinePattern, { dimensions: patternDimensions, color: patternColor, lineWidth: lineWidth }))),
React.createElement("rect", { x: "0", y: "0", width: "100%", height: "100%", fill: `url(#${patternId + id})` })));
}
Background.displayName = 'Background';
var Background$1 = memo(Background);
export { Background$1 as Background, BackgroundVariant };

View File

@@ -0,0 +1,18 @@
import { CSSProperties } from 'react';
export declare enum BackgroundVariant {
Lines = "lines",
Dots = "dots",
Cross = "cross"
}
export type BackgroundProps = {
id?: string;
color?: string;
className?: string;
gap?: number | [number, number];
size?: number;
offset?: number;
lineWidth?: number;
variant?: BackgroundVariant;
style?: CSSProperties;
};
//# sourceMappingURL=types.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../packages/background/src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,oBAAY,iBAAiB;IAC3B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC"}

View File

@@ -0,0 +1,9 @@
import React from 'react';
import { BackgroundProps } from './types';
declare function Background({ id, variant, gap, size, lineWidth, offset, color, style, className, }: BackgroundProps): JSX.Element;
declare namespace Background {
var displayName: string;
}
declare const _default: React.MemoExoticComponent<typeof Background>;
export default _default;
//# sourceMappingURL=Background.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Background.d.ts","sourceRoot":"","sources":["../../../packages/background/src/Background.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuB,MAAM,OAAO,CAAC;AAK5C,OAAO,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAiB7D,iBAAS,UAAU,CAAC,EAClB,EAAE,EACF,OAAgC,EAEhC,GAAQ,EAER,IAAI,EACJ,SAAa,EACb,MAAU,EACV,KAAK,EACL,KAAK,EACL,SAAS,GACV,EAAE,eAAe,eAiDjB;kBA7DQ,UAAU;;;;AAiEnB,wBAAgC"}

View File

@@ -0,0 +1,14 @@
/// <reference types="react" />
type LinePatternProps = {
dimensions: [number, number];
lineWidth?: number;
color: string;
};
export declare function LinePattern({ color, dimensions, lineWidth }: LinePatternProps): JSX.Element;
type DotPatternProps = {
radius: number;
color: string;
};
export declare function DotPattern({ color, radius }: DotPatternProps): JSX.Element;
export {};
//# sourceMappingURL=Patterns.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Patterns.d.ts","sourceRoot":"","sources":["../../../packages/background/src/Patterns.tsx"],"names":[],"mappings":";AAEA,KAAK,gBAAgB,GAAG;IACtB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,gBAAgB,eAQ7E;AAED,KAAK,eAAe,GAAG;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,eAE5D"}

View File

@@ -0,0 +1,3 @@
export { default as Background } from './Background';
export * from './types';
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../packages/background/src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,cAAc,SAAS,CAAC"}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,18 @@
import { CSSProperties } from 'react';
export declare enum BackgroundVariant {
Lines = "lines",
Dots = "dots",
Cross = "cross"
}
export type BackgroundProps = {
id?: string;
color?: string;
className?: string;
gap?: number | [number, number];
size?: number;
offset?: number;
lineWidth?: number;
variant?: BackgroundVariant;
style?: CSSProperties;
};
//# sourceMappingURL=types.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../packages/background/src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,oBAAY,iBAAiB;IAC3B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC"}