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,49 @@
import commonjs from '@rollup/plugin-commonjs';
import { nodeResolve } from '@rollup/plugin-node-resolve';
import replace from '@rollup/plugin-replace';
import typescript from '@rollup/plugin-typescript';
import fs from 'fs';
import path from 'path';
import tsc from 'typescript';
import { fileURLToPath } from 'url';
const ROOT = fileURLToPath(new URL('../..', import.meta.url));
export const PACKAGE_JSON = JSON.parse(
fs.readFileSync(path.resolve(ROOT, 'package.json')),
);
const external = [
...Object.keys(PACKAGE_JSON.dependencies || {}),
...Object.keys(PACKAGE_JSON.peerDependencies || {}),
];
const globals = external.reduce((globals, name) => {
globals[name] = name;
return globals;
}, {});
export const BASE_CONFIG = {
external,
input: path.resolve(ROOT, 'src', 'index.ts'),
output: {
exports: 'named',
globals,
name: 'fast-equals',
sourcemap: true,
},
plugins: [
replace({
'process.env.NODE_ENV': JSON.stringify('production'),
preventAssignment: true,
}),
nodeResolve({
mainFields: ['module', 'browser', 'main'],
}),
commonjs({ include: /use-sync-external-store/ }),
typescript({
tsconfig: path.resolve(ROOT, 'config', 'tsconfig', 'base.json'),
typescript: tsc,
}),
],
};

View File

@@ -0,0 +1,10 @@
import { BASE_CONFIG, PACKAGE_JSON } from './config.base.js';
export default {
...BASE_CONFIG,
output: {
...BASE_CONFIG.output,
file: PACKAGE_JSON.main,
format: 'cjs',
},
};

View File

@@ -0,0 +1,10 @@
import { BASE_CONFIG, PACKAGE_JSON } from './config.base.js';
export default {
...BASE_CONFIG,
output: {
...BASE_CONFIG.output,
file: PACKAGE_JSON.module,
format: 'es',
},
};

View File

@@ -0,0 +1,13 @@
import { BASE_CONFIG, PACKAGE_JSON } from './config.base.js';
import terser from '@rollup/plugin-terser';
export default {
...BASE_CONFIG,
output: {
...BASE_CONFIG.output,
file: PACKAGE_JSON.browser.replace('umd', 'min'),
format: 'umd',
sourcemap: false,
},
plugins: [...BASE_CONFIG.plugins, terser()],
};

View File

@@ -0,0 +1,10 @@
import { BASE_CONFIG, PACKAGE_JSON } from './config.base.js';
export default {
...BASE_CONFIG,
output: {
...BASE_CONFIG.output,
file: PACKAGE_JSON.browser,
format: 'umd',
},
};

View File

@@ -0,0 +1,32 @@
{
"compilerOptions": {
"allowJs": true,
"allowUnreachableCode": false,
"baseUrl": "../../src",
"esModuleInterop": true,
"jsx": "react-jsx",
"lib": ["DOM", "ESNext"],
"module": "ESNext",
"moduleResolution": "Node",
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUncheckedIndexedAccess": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"outDir": "../../../dist",
"resolveJsonModule": true,
"skipLibCheck": true,
"sourceMap": true,
"strict": true,
"strictBindCallApply": true,
"strictNullChecks": true,
"inlineSources": true,
"target": "es5",
"types": ["jest", "node", "react"]
},
"exclude": ["../../node_modules"],
"include": ["../../src/**/*", "../../__tests__/**/*", "../../DEV_ONLY/**/*"],
"files": ["../../node_modules/jest-expect-message/types/index.d.ts"]
}

View File

@@ -0,0 +1,8 @@
{
"extends": "./declarations.json",
"compilerOptions": {
"declarationDir": "../../dist/cjs/types",
"module": "CommonJS",
"outDir": "../../dist/cjs"
}
}

View File

@@ -0,0 +1,9 @@
{
"extends": "./base.json",
"compilerOptions": {
"declaration": true,
"emitDeclarationOnly": true,
"resolveJsonModule": false
},
"include": ["../../src/*"]
}

View File

@@ -0,0 +1,8 @@
{
"extends": "./declarations.json",
"compilerOptions": {
"declarationDir": "../../dist/esm/types",
"module": "ESNext",
"outDir": "../../dist/esm"
}
}

View File

@@ -0,0 +1,8 @@
{
"extends": "./declarations.json",
"compilerOptions": {
"declarationDir": "../../dist/min/types",
"module": "UMD",
"outDir": "../../dist/min"
}
}

View File

@@ -0,0 +1,8 @@
{
"extends": "./declarations.json",
"compilerOptions": {
"declarationDir": "../../dist/umd/types",
"module": "UMD",
"outDir": "../../dist/umd"
}
}

View File

@@ -0,0 +1,57 @@
/* eslint-disable @typescript-eslint/no-var-requires */
import ESLintWebpackPlugin from 'eslint-webpack-plugin';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import path from 'path';
import { fileURLToPath } from 'url';
import webpack from 'webpack';
const ROOT = fileURLToPath(new URL('..', import.meta.url));
const PORT = 3000;
export default {
cache: true,
devServer: {
host: 'localhost',
port: PORT,
},
devtool: 'source-map',
entry: [path.resolve(ROOT, 'DEV_ONLY', 'index.tsx')],
mode: 'development',
module: {
rules: [
{
include: [path.resolve(ROOT, 'src'), path.resolve(ROOT, 'DEV_ONLY')],
loader: 'ts-loader',
options: {
reportFiles: ['src/*.{ts|tsx}'],
},
test: /\.(ts|tsx)$/,
},
],
},
output: {
filename: 'fast-equals.js',
library: 'fastEquals',
libraryTarget: 'umd',
path: path.resolve(ROOT, 'dist'),
publicPath: `http://localhost:${PORT}/`,
umdNamedDefine: true,
},
plugins: [
new ESLintWebpackPlugin(),
new webpack.EnvironmentPlugin(['NODE_ENV']),
new HtmlWebpackPlugin(),
],
resolve: {
extensions: ['.tsx', '.ts', '.js'],
},
};