UNPKG

@clduab11/gemini-flow

Version:

Revolutionary AI agent swarm coordination platform with Google Services integration, multimedia processing, and production-ready monitoring. Features 8 Google AI services, quantum computing capabilities, and enterprise-grade security.

561 lines (493 loc) 14.8 kB
/** * Lightweight Core System * * Minimal core implementation that only loads essential features * Dynamically loads enterprise features based on feature flags */ import { Logger } from "../utils/logger.js"; import { featureFlags, FeatureFlags } from "./feature-flags.js"; import { SimpleAuth } from "./simple-auth.js"; import { EventEmitter } from "events"; export interface CoreConfig { mode: "minimal" | "enhanced" | "enterprise"; autoLoad: boolean; maxMemory?: number; logLevel?: string; } export interface AdapterLoader { name: string; load: () => Promise<any>; dependencies: string[]; optional: boolean; } export class LightweightCore extends EventEmitter { private logger: Logger; private config: CoreConfig; private loadedAdapters: Map<string, any> = new Map(); private adapterLoaders: Map<string, AdapterLoader> = new Map(); private auth: SimpleAuth; private initialized = false; // Core statistics private stats = { startTime: Date.now(), memoryUsage: 0, loadedFeatures: 0, adaptersLoaded: 0, requestCount: 0, }; constructor(config: CoreConfig = { mode: "minimal", autoLoad: true }) { super(); this.config = config; this.logger = new Logger("LightweightCore"); this.auth = new SimpleAuth(); this.setupAdapterLoaders(); this.updateStats(); if (config.autoLoad) { this.initialize(); } } /** * Initialize the core system */ async initialize(): Promise<void> { if (this.initialized) { return; } const startTime = performance.now(); this.logger.info("Initializing Gemini-Flow core system..."); try { // 1. Initialize authentication await this.initializeAuth(); // 2. Load adapters based on feature flags await this.loadEnabledAdapters(); // 3. Setup monitoring this.setupMonitoring(); // 4. Emit initialization complete const initTime = performance.now() - startTime; this.stats.loadedFeatures = featureFlags.getEnabledFeatures().length; this.stats.adaptersLoaded = this.loadedAdapters.size; this.logger.info("Core system initialized", { mode: this.determineMode(), initTime: `${initTime.toFixed(2)}ms`, featuresEnabled: this.stats.loadedFeatures, adaptersLoaded: this.stats.adaptersLoaded, memoryUsage: `${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)}MB`, }); this.initialized = true; this.emit("initialized", this.getStatus()); } catch (error) { this.logger.error("Core initialization failed", error); throw error; } } /** * Setup adapter loaders for conditional loading */ private setupAdapterLoaders(): void { // SQLite adapters this.adapterLoaders.set("sqlite", { name: "SQLite Memory Adapters", dependencies: ["sqlite3", "better-sqlite3"], optional: true, load: async () => { const { SQLiteMemoryManager } = await import( "../memory/sqlite-manager.js" ); const { SQLiteConnectionPool } = await import( "./sqlite-connection-pool.js" ); return { SQLiteMemoryManager, SQLiteConnectionPool }; }, }); // Vertex AI adapter this.adapterLoaders.set("vertexai", { name: "Vertex AI Connector", dependencies: ["@google-cloud/vertexai", "@google-cloud/aiplatform"], optional: true, load: async () => { const { VertexAIConnector } = await import("./vertex-ai-connector.js"); return { VertexAIConnector }; }, }); // Google Workspace integration this.adapterLoaders.set("workspace", { name: "Google Workspace Integration", dependencies: ["googleapis", "google-auth-library"], optional: true, load: async () => { const { GoogleWorkspaceIntegration } = await import( "../workspace/google-integration.js" ); return { GoogleWorkspaceIntegration }; }, }); // DeepMind adapter this.adapterLoaders.set("deepmind", { name: "DeepMind Adapter", dependencies: ["@deepmind/api"], optional: true, load: async () => { const { DeepMindAdapter } = await import( "../adapters/deepmind-adapter.js" ); return { DeepMindAdapter }; }, }); // A2A Protocol this.adapterLoaders.set("a2a", { name: "A2A Protocol Manager", dependencies: [], optional: true, load: async () => { const { A2AProtocolManager } = await import( "../protocols/a2a/core/a2a-protocol-manager.js" ); const { A2AMCPBridge } = await import( "../protocols/a2a/core/a2a-mcp-bridge.js" ); return { A2AProtocolManager, A2AMCPBridge }; }, }); // MCP Protocol this.adapterLoaders.set("mcp", { name: "MCP Adapter", dependencies: [], optional: true, load: async () => { const { MCPToGeminiAdapter } = await import("./mcp-adapter.js"); return { MCPToGeminiAdapter }; }, }); // Performance optimization this.adapterLoaders.set("performance", { name: "Performance Monitor", dependencies: [], optional: false, load: async () => { const { PerformanceMonitor } = await import("./performance-monitor.js"); const { CacheManager } = await import("./cache-manager.js"); return { PerformanceMonitor, CacheManager }; }, }); } /** * Initialize authentication */ private async initializeAuth(): Promise<void> { // SimpleAuth is initialized in constructor, no separate initialize needed this.logger.debug("Authentication ready"); } /** * Load adapters based on enabled features */ private async loadEnabledAdapters(): Promise<void> { const enabledFeatures = featureFlags.getEnabledFeatures(); const adapterMap: Record<string, string> = { sqliteAdapters: "sqlite", vertexAi: "vertexai", googleWorkspace: "workspace", deepmind: "deepmind", a2aProtocol: "a2a", mcpProtocol: "mcp", }; // Always load performance monitoring await this.loadAdapter("performance"); // Load feature-specific adapters for (const feature of enabledFeatures) { const adapterKey = adapterMap[feature]; if (adapterKey) { await this.loadAdapter(adapterKey); } } } /** * Load a specific adapter */ private async loadAdapter(adapterKey: string): Promise<boolean> { const loader = this.adapterLoaders.get(adapterKey); if (!loader) { this.logger.warn(`Unknown adapter: ${adapterKey}`); return false; } if (this.loadedAdapters.has(adapterKey)) { this.logger.debug(`Adapter already loaded: ${loader.name}`); return true; } try { const startTime = performance.now(); this.logger.debug(`Loading adapter: ${loader.name}...`); const adapter = await loader.load(); this.loadedAdapters.set(adapterKey, adapter); const loadTime = performance.now() - startTime; this.logger.info(`Adapter loaded: ${loader.name}`, { loadTime: `${loadTime.toFixed(2)}ms`, memoryIncrease: `${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)}MB`, }); this.emit("adapter_loaded", { name: loader.name, key: adapterKey, loadTime, }); return true; } catch (error) { if (!loader.optional) { this.logger.error( `Failed to load required adapter: ${loader.name}`, error, ); throw error; } else { this.logger.warn( `Failed to load optional adapter: ${loader.name}`, error.message, ); return false; } } } /** * Get a loaded adapter */ getAdapter<T = any>(adapterKey: string): T | null { return this.loadedAdapters.get(adapterKey) || null; } /** * Check if an adapter is loaded */ hasAdapter(adapterKey: string): boolean { return this.loadedAdapters.has(adapterKey); } /** * Load an adapter on demand */ async loadAdapterOnDemand(adapterKey: string): Promise<boolean> { if (this.hasAdapter(adapterKey)) { return true; } // Check if feature is enabled const allConfigs = featureFlags.getAllFeatureConfigs(); const featureMap: Record<string, keyof typeof allConfigs> = { sqlite: "sqliteAdapters", vertexai: "vertexAi", workspace: "googleWorkspace", deepmind: "deepmind", a2a: "a2aProtocol", mcp: "mcpProtocol", }; const feature = featureMap[adapterKey]; if (feature && !featureFlags.isEnabled(feature)) { this.logger.warn( `Cannot load adapter ${adapterKey}: feature ${feature} is disabled`, ); return false; } return await this.loadAdapter(adapterKey); } /** * Setup system monitoring */ private setupMonitoring(): void { // Memory monitoring if (this.config.maxMemory) { setInterval(() => { const memUsage = process.memoryUsage().heapUsed / 1024 / 1024; if (memUsage > this.config.maxMemory!) { this.logger.warn( `Memory usage high: ${memUsage.toFixed(2)}MB (limit: ${this.config.maxMemory}MB)`, ); this.emit("memory_warning", { usage: memUsage, limit: this.config.maxMemory, }); } }, 30000); // Check every 30 seconds } // Update stats periodically setInterval(() => { this.updateStats(); }, 10000); // Update every 10 seconds } /** * Update system statistics */ private updateStats(): void { const memUsage = process.memoryUsage(); this.stats.memoryUsage = memUsage.heapUsed / 1024 / 1024; this.stats.loadedFeatures = featureFlags.getEnabledFeatures().length; this.stats.adaptersLoaded = this.loadedAdapters.size; } /** * Determine current mode */ private determineMode(): string { if (featureFlags.isEnterpriseMode()) { return "enterprise"; } else if (featureFlags.isEnhancedMode()) { return "enhanced"; } else { return "minimal"; } } /** * Get system status */ getStatus(): any { this.updateStats(); return { mode: this.determineMode(), initialized: this.initialized, uptime: Date.now() - this.stats.startTime, memory: { used: `${this.stats.memoryUsage.toFixed(2)}MB`, limit: this.config.maxMemory ? `${this.config.maxMemory}MB` : "unlimited", }, features: { enabled: featureFlags.getEnabledFeatures(), total: Object.keys(featureFlags.getAllFeatureConfigs()).length, }, adapters: { loaded: Array.from(this.loadedAdapters.keys()), available: Array.from(this.adapterLoaders.keys()), count: this.loadedAdapters.size, }, requests: this.stats.requestCount, auth: this.auth.isAuthenticated(), }; } /** * Get lightweight status (minimal info) */ getLightweightStatus(): any { return { mode: this.determineMode(), uptime: Date.now() - this.stats.startTime, memory: `${this.stats.memoryUsage.toFixed(2)}MB`, features: this.stats.loadedFeatures, adapters: this.stats.adaptersLoaded, auth: this.auth.isAuthenticated(), }; } /** * Enable a feature dynamically */ async enableFeature( feature: keyof ReturnType<typeof featureFlags.getAllFeatureConfigs>, ): Promise<boolean> { if (featureFlags.isEnabled(feature)) { this.logger.debug(`Feature already enabled: ${feature}`); return true; } try { featureFlags.enable(feature); // Load associated adapter if available const adapterMap: Record<string, string> = { sqliteAdapters: "sqlite", vertexAi: "vertexai", googleWorkspace: "workspace", deepmind: "deepmind", a2aProtocol: "a2a", mcpProtocol: "mcp", }; const adapterKey = adapterMap[feature]; if (adapterKey) { await this.loadAdapter(adapterKey); } this.logger.info(`Feature enabled: ${feature}`); this.emit("feature_enabled", { feature, hasAdapter: !!adapterKey }); return true; } catch (error) { this.logger.error(`Failed to enable feature: ${feature}`, error); return false; } } /** * Disable a feature dynamically */ disableFeature( feature: keyof ReturnType<typeof featureFlags.getAllFeatureConfigs>, ): void { featureFlags.disable(feature); this.logger.info(`Feature disabled: ${feature}`); this.emit("feature_disabled", { feature }); } /** * Get authentication instance */ getAuth(): SimpleAuth { return this.auth; } /** * Increment request counter */ incrementRequestCount(): void { this.stats.requestCount++; } /** * Health check */ async healthCheck(): Promise<any> { const health = { status: "healthy", timestamp: new Date().toISOString(), core: this.getLightweightStatus(), issues: [] as string[], }; // Check memory usage if ( this.config.maxMemory && this.stats.memoryUsage > this.config.maxMemory * 0.9 ) { health.issues.push("High memory usage"); health.status = "warning"; } // Check adapters for (const [key, loader] of this.adapterLoaders) { if (!loader.optional && !this.hasAdapter(key)) { health.issues.push(`Required adapter not loaded: ${loader.name}`); health.status = "unhealthy"; } } // Check authentication if (!this.auth.isAuthenticated()) { health.issues.push("Authentication not configured"); health.status = "warning"; } return health; } /** * Shutdown the core system */ async shutdown(): Promise<void> { this.logger.info("Shutting down core system..."); // Shutdown adapters for (const [key, adapter] of this.loadedAdapters) { try { if (adapter.shutdown) { await adapter.shutdown(); } } catch (error) { this.logger.warn(`Error shutting down adapter ${key}:`, error.message); } } this.loadedAdapters.clear(); this.initialized = false; this.emit("shutdown"); this.logger.info("Core system shutdown complete"); } } // Export singleton instance let coreInstance: LightweightCore | null = null; export function getCore(config?: CoreConfig): LightweightCore { if (!coreInstance) { coreInstance = new LightweightCore(config); } return coreInstance; } export function resetCore(): void { if (coreInstance) { coreInstance.shutdown(); coreInstance = null; } }