@vfarcic/dot-ai
Version:
Universal Kubernetes application deployment agent with CLI and MCP interfaces
152 lines (151 loc) • 8.35 kB
JavaScript
;
/**
* 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;