@vfarcic/dot-ai
Version:
AI-powered development productivity platform that enhances software development workflows through intelligent automation and AI-driven assistance
168 lines (167 loc) • 11.3 kB
JavaScript
;
/**
* Core Intelligence Module
*
* Shared intelligence for both CLI and MCP interfaces
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.invokePluginTool = exports.isPluginInitialized = exports.getPluginManager = exports.initializePluginRegistry = exports.PluginClientError = exports.PluginClient = exports.PluginDiscoveryError = exports.PluginManager = exports.CircuitOpenError = exports.CircuitState = exports.CircuitBreakerFactory = exports.CircuitBreaker = exports.buildAgentDisplayBlock = exports.VercelEmbeddingProvider = exports.EmbeddingService = exports.CapabilityVectorService = exports.PolicyVectorService = exports.PatternVectorService = exports.BaseVectorService = exports.deserializePattern = exports.serializePattern = exports.createPattern = exports.validatePattern = exports.ResourceRecommender = exports.ManifestValidator = exports.SchemaParser = exports.AIProviderFactory = exports.createAIProvider = 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 ai_provider_factory_1 = require("./ai-provider-factory");
const schema_1 = require("./schema");
const constants_1 = require("./constants");
class DotAI {
config;
initialized = false;
discovery;
memory;
workflow;
ai;
schema;
constructor() {
this.config = {};
// Initialize modules
// PRD #343: KubernetesDiscovery no longer needs kubeconfig - all K8s ops go through plugin
this.discovery = new discovery_1.KubernetesDiscovery();
this.memory = new memory_1.MemorySystem();
this.workflow = new workflow_1.WorkflowEngine();
this.ai = (0, ai_provider_factory_1.createAIProvider)();
// Initialize schema components
const parser = new schema_1.SchemaParser();
const validator = new schema_1.ManifestValidator();
// ResourceRecommender uses the AI provider directly
const ranker = new schema_1.ResourceRecommender(this.ai);
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(constants_1.AI_SERVICE_ERROR_TEMPLATES.RESOURCE_RANKER_UNAVAILABLE('AI-powered ranking'));
}
// Create discovery function with proper binding
const explainResourceFn = async (resource) => await this.discovery.explainResource(resource);
return await ranker.findBestSolutions(intent, explainResourceFn);
},
generateQuestionsForHelmChart: async (intent, chart, description, interaction_id) => {
if (!ranker) {
throw new Error(constants_1.AI_SERVICE_ERROR_TEMPLATES.RESOURCE_RANKER_UNAVAILABLE('question generation'));
}
return await ranker.generateQuestionsForHelmChart(intent, chart, description, interaction_id);
},
fetchHelmChartContent: async (chart) => {
if (!ranker) {
throw new Error(constants_1.AI_SERVICE_ERROR_TEMPLATES.RESOURCE_RANKER_UNAVAILABLE('fetching Helm chart content'));
}
return await ranker.fetchHelmChartContent(chart);
}
};
}
async initialize() {
try {
// Initialize all modules
// PRD #343: K8s access via plugin - no connect() needed
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;
}
}
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 ai_provider_factory_2 = require("./ai-provider-factory");
Object.defineProperty(exports, "createAIProvider", { enumerable: true, get: function () { return ai_provider_factory_2.createAIProvider; } });
Object.defineProperty(exports, "AIProviderFactory", { enumerable: true, get: function () { return ai_provider_factory_2.AIProviderFactory; } });
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; } });
// Removed obsolete pattern creation types - now using unified creation system
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 policy_vector_service_1 = require("./policy-vector-service");
Object.defineProperty(exports, "PolicyVectorService", { enumerable: true, get: function () { return policy_vector_service_1.PolicyVectorService; } });
var capability_vector_service_1 = require("./capability-vector-service");
Object.defineProperty(exports, "CapabilityVectorService", { enumerable: true, get: function () { return capability_vector_service_1.CapabilityVectorService; } });
var embedding_service_1 = require("./embedding-service");
Object.defineProperty(exports, "EmbeddingService", { enumerable: true, get: function () { return embedding_service_1.EmbeddingService; } });
Object.defineProperty(exports, "VercelEmbeddingProvider", { enumerable: true, get: function () { return embedding_service_1.VercelEmbeddingProvider; } });
var agent_display_1 = require("./agent-display");
Object.defineProperty(exports, "buildAgentDisplayBlock", { enumerable: true, get: function () { return agent_display_1.buildAgentDisplayBlock; } });
var circuit_breaker_1 = require("./circuit-breaker");
Object.defineProperty(exports, "CircuitBreaker", { enumerable: true, get: function () { return circuit_breaker_1.CircuitBreaker; } });
Object.defineProperty(exports, "CircuitBreakerFactory", { enumerable: true, get: function () { return circuit_breaker_1.CircuitBreakerFactory; } });
Object.defineProperty(exports, "CircuitState", { enumerable: true, get: function () { return circuit_breaker_1.CircuitState; } });
Object.defineProperty(exports, "CircuitOpenError", { enumerable: true, get: function () { return circuit_breaker_1.CircuitOpenError; } });
// Plugin system (PRD #343, #359)
var plugin_manager_1 = require("./plugin-manager");
Object.defineProperty(exports, "PluginManager", { enumerable: true, get: function () { return plugin_manager_1.PluginManager; } });
Object.defineProperty(exports, "PluginDiscoveryError", { enumerable: true, get: function () { return plugin_manager_1.PluginDiscoveryError; } });
var plugin_client_1 = require("./plugin-client");
Object.defineProperty(exports, "PluginClient", { enumerable: true, get: function () { return plugin_client_1.PluginClient; } });
Object.defineProperty(exports, "PluginClientError", { enumerable: true, get: function () { return plugin_client_1.PluginClientError; } });
// Unified plugin registry (PRD #359)
var plugin_registry_1 = require("./plugin-registry");
Object.defineProperty(exports, "initializePluginRegistry", { enumerable: true, get: function () { return plugin_registry_1.initializePluginRegistry; } });
Object.defineProperty(exports, "getPluginManager", { enumerable: true, get: function () { return plugin_registry_1.getPluginManager; } });
Object.defineProperty(exports, "isPluginInitialized", { enumerable: true, get: function () { return plugin_registry_1.isPluginInitialized; } });
Object.defineProperty(exports, "invokePluginTool", { enumerable: true, get: function () { return plugin_registry_1.invokePluginTool; } });
// Default export
exports.default = DotAI;