UNPKG

@vfarcic/dot-ai

Version:

Universal Kubernetes application deployment agent with CLI and MCP interfaces

152 lines (151 loc) 8.35 kB
"use strict"; /** * Core Intelligence Module * * Shared intelligence for both CLI and MCP interfaces */ Object.defineProperty(exports, "__esModule", { value: true }); exports.OpenAIEmbeddingProvider = exports.EmbeddingService = exports.PatternVectorService = exports.BaseVectorService = exports.VectorDBService = exports.PatternCreationSessionManager = exports.deserializePattern = exports.serializePattern = exports.createPattern = exports.validatePattern = exports.ResourceRecommender = exports.ManifestValidator = exports.SchemaParser = exports.ClaudeIntegration = exports.WorkflowEngine = exports.MemorySystem = exports.KubernetesDiscovery = exports.DotAI = void 0; const discovery_1 = require("./discovery"); const memory_1 = require("./memory"); const workflow_1 = require("./workflow"); const claude_1 = require("./claude"); const schema_1 = require("./schema"); class DotAI { config; initialized = false; discovery; memory; workflow; claude; schema; constructor(config = {}) { this.validateConfig(config); // Centralize environment variable reading this.config = { kubernetesConfig: config.kubernetesConfig || process.env.KUBECONFIG, anthropicApiKey: config.anthropicApiKey || process.env.ANTHROPIC_API_KEY }; // Initialize modules this.discovery = new discovery_1.KubernetesDiscovery({ kubeconfigPath: this.config.kubernetesConfig }); this.memory = new memory_1.MemorySystem(); this.workflow = new workflow_1.WorkflowEngine(); this.claude = new claude_1.ClaudeIntegration(this.config.anthropicApiKey || 'test-key'); // Initialize schema components const parser = new schema_1.SchemaParser(); const validator = new schema_1.ManifestValidator(); const ranker = this.config.anthropicApiKey ? new schema_1.ResourceRecommender({ claudeApiKey: this.config.anthropicApiKey }) : null; this.schema = { parser, validator, ranker, parseResource: async (resourceName) => { // Get raw resource explanation from discovery const explanation = await this.discovery.explainResource(resourceName); // Parse GROUP, KIND, VERSION from kubectl explain output const lines = explanation.split('\n'); const groupLine = lines.find((line) => line.startsWith('GROUP:')); const kindLine = lines.find((line) => line.startsWith('KIND:')); const versionLine = lines.find((line) => line.startsWith('VERSION:')); const group = groupLine ? groupLine.replace('GROUP:', '').trim() : ''; const kind = kindLine ? kindLine.replace('KIND:', '').trim() : resourceName; const version = versionLine ? versionLine.replace('VERSION:', '').trim() : 'v1'; // Build apiVersion from group and version const apiVersion = group ? `${group}/${version}` : version; // Return raw explanation for AI processing return { kind: kind, rawExplanation: explanation, apiVersion: apiVersion, group: group, description: explanation.split('\n').find((line) => line.startsWith('DESCRIPTION:'))?.replace('DESCRIPTION:', '').trim() || '', properties: new Map() // Raw explanation contains all field info for AI }; }, rankResources: async (intent) => { if (!ranker) { throw new Error('ResourceRanker not available. ANTHROPIC_API_KEY is required for AI-powered ranking.'); } // Create discovery functions with proper binding const discoverResourcesFn = async () => await this.discovery.discoverResources(); const explainResourceFn = async (resource) => await this.discovery.explainResource(resource); return await ranker.findBestSolutions(intent, discoverResourcesFn, explainResourceFn); } }; } validateConfig(config) { if (config.anthropicApiKey === '') { throw new Error('Invalid configuration: Empty API key provided'); } } async initialize() { try { // Initialize all modules await this.discovery.connect(); await this.memory.initialize(); await this.workflow.initialize(); this.initialized = true; } catch (error) { this.initialized = false; throw error; } } async initializeWithoutCluster() { try { // Initialize non-cluster modules only await this.memory.initialize(); await this.workflow.initialize(); this.initialized = true; } catch (error) { this.initialized = false; throw error; } } isInitialized() { return this.initialized; } getVersion() { return '0.1.0'; } getAnthropicApiKey() { return this.config.anthropicApiKey; } } exports.DotAI = DotAI; // Re-export all modules for convenience var discovery_2 = require("./discovery"); Object.defineProperty(exports, "KubernetesDiscovery", { enumerable: true, get: function () { return discovery_2.KubernetesDiscovery; } }); var memory_2 = require("./memory"); Object.defineProperty(exports, "MemorySystem", { enumerable: true, get: function () { return memory_2.MemorySystem; } }); var workflow_2 = require("./workflow"); Object.defineProperty(exports, "WorkflowEngine", { enumerable: true, get: function () { return workflow_2.WorkflowEngine; } }); var claude_2 = require("./claude"); Object.defineProperty(exports, "ClaudeIntegration", { enumerable: true, get: function () { return claude_2.ClaudeIntegration; } }); var schema_2 = require("./schema"); Object.defineProperty(exports, "SchemaParser", { enumerable: true, get: function () { return schema_2.SchemaParser; } }); Object.defineProperty(exports, "ManifestValidator", { enumerable: true, get: function () { return schema_2.ManifestValidator; } }); Object.defineProperty(exports, "ResourceRecommender", { enumerable: true, get: function () { return schema_2.ResourceRecommender; } }); var pattern_operations_1 = require("./pattern-operations"); Object.defineProperty(exports, "validatePattern", { enumerable: true, get: function () { return pattern_operations_1.validatePattern; } }); Object.defineProperty(exports, "createPattern", { enumerable: true, get: function () { return pattern_operations_1.createPattern; } }); Object.defineProperty(exports, "serializePattern", { enumerable: true, get: function () { return pattern_operations_1.serializePattern; } }); Object.defineProperty(exports, "deserializePattern", { enumerable: true, get: function () { return pattern_operations_1.deserializePattern; } }); var pattern_creation_session_1 = require("./pattern-creation-session"); Object.defineProperty(exports, "PatternCreationSessionManager", { enumerable: true, get: function () { return pattern_creation_session_1.PatternCreationSessionManager; } }); var vector_db_service_1 = require("./vector-db-service"); Object.defineProperty(exports, "VectorDBService", { enumerable: true, get: function () { return vector_db_service_1.VectorDBService; } }); var base_vector_service_1 = require("./base-vector-service"); Object.defineProperty(exports, "BaseVectorService", { enumerable: true, get: function () { return base_vector_service_1.BaseVectorService; } }); var pattern_vector_service_1 = require("./pattern-vector-service"); Object.defineProperty(exports, "PatternVectorService", { enumerable: true, get: function () { return pattern_vector_service_1.PatternVectorService; } }); var embedding_service_1 = require("./embedding-service"); Object.defineProperty(exports, "EmbeddingService", { enumerable: true, get: function () { return embedding_service_1.EmbeddingService; } }); Object.defineProperty(exports, "OpenAIEmbeddingProvider", { enumerable: true, get: function () { return embedding_service_1.OpenAIEmbeddingProvider; } }); // Default export exports.default = DotAI;