UNPKG

@aaswe/codebase-ai

Version:

AI-Assisted Software Engineering (AASWE) - Rich codebase context for IDE LLMs

168 lines 7.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.configManager = void 0; const dotenv_1 = require("dotenv"); const fs_1 = require("fs"); const path_1 = require("path"); // Load environment variables (0, dotenv_1.config)(); class ConfigManager { static instance; config; constructor() { this.config = this.loadConfiguration(); } static getInstance() { if (!ConfigManager.instance) { ConfigManager.instance = new ConfigManager(); } return ConfigManager.instance; } loadConfiguration() { // Default configuration const defaultConfig = { project: { name: process.env.PROJECT_NAME || 'aide-project', description: process.env.PROJECT_DESCRIPTION || 'AI-Assisted Software Engineering Project', mainLanguage: process.env.MAIN_LANGUAGE || 'typescript', version: '1.0.0' }, database: { neo4j: { uri: process.env.NEO4J_URI || 'bolt://localhost:7687', user: process.env.NEO4J_USER || 'neo4j', password: process.env.NEO4J_PASSWORD || 'dev123' }, redis: { url: process.env.REDIS_URL || 'redis://localhost:6379' } }, llm: { providers: { ...(process.env.OPENAI_API_KEY && { openai: { apiKey: process.env.OPENAI_API_KEY, model: process.env.OPENAI_MODEL || 'gpt-4' } }), ...(process.env.ANTHROPIC_API_KEY && { anthropic: { apiKey: process.env.ANTHROPIC_API_KEY, model: process.env.ANTHROPIC_MODEL || 'claude-3-sonnet-20240229' } }) }, defaultProvider: process.env.DEFAULT_LLM_PROVIDER || 'openai', temperature: parseFloat(process.env.LLM_TEMPERATURE || '0.1'), maxTokens: parseInt(process.env.LLM_MAX_TOKENS || '4000') }, analysis: { enabled: process.env.ANALYSIS_ENABLED !== 'false', incremental: process.env.ANALYSIS_INCREMENTAL !== 'false', excludePaths: (process.env.ANALYSIS_EXCLUDE_PATHS || 'node_modules,dist,build,.git,.aaswe/cache').split(','), includePaths: (process.env.ANALYSIS_INCLUDE_PATHS || '**/*.ts,**/*.js,**/*.py,**/*.java').split(','), supportedLanguages: (process.env.SUPPORTED_LANGUAGES || 'typescript,javascript,python,java').split(','), complexityThreshold: parseInt(process.env.COMPLEXITY_THRESHOLD || '10') }, integrations: { ...(process.env.JIRA_URL && { jira: { enabled: process.env.JIRA_ENABLED === 'true', url: process.env.JIRA_URL, username: process.env.JIRA_USERNAME || '', apiToken: process.env.JIRA_API_TOKEN || '', projectKey: process.env.JIRA_PROJECT_KEY || '' } }), ...(process.env.CONFLUENCE_URL && { confluence: { enabled: process.env.CONFLUENCE_ENABLED === 'true', url: process.env.CONFLUENCE_URL, username: process.env.CONFLUENCE_USERNAME || '', apiToken: process.env.CONFLUENCE_API_TOKEN || '', spaceKey: process.env.CONFLUENCE_SPACE_KEY || '' } }) }, rdf: { format: process.env.RDF_FORMAT || 'turtle', versioning: process.env.RDF_VERSIONING || 'git-aligned', storagePath: process.env.RDF_STORAGE_PATH || '.aaswe/rdf' }, mcp: { port: parseInt(process.env.MCP_PORT || '8000'), contextSizeLimit: parseInt(process.env.MCP_CONTEXT_SIZE_LIMIT || '100000'), relevanceThreshold: parseFloat(process.env.MCP_RELEVANCE_THRESHOLD || '0.7') } }; // Try to load project-specific configuration const configPath = (0, path_1.join)(process.cwd(), '.aaswe', 'config.json'); if ((0, fs_1.existsSync)(configPath)) { try { const projectConfig = JSON.parse((0, fs_1.readFileSync)(configPath, 'utf-8')); return this.mergeConfigs(defaultConfig, projectConfig); } catch (error) { console.warn(`Failed to load project configuration from ${configPath}:`, error); } } return defaultConfig; } mergeConfigs(defaultConfig, projectConfig) { return { project: { ...defaultConfig.project, ...projectConfig.project }, database: { neo4j: { ...defaultConfig.database.neo4j, ...projectConfig.database?.neo4j }, redis: { ...defaultConfig.database.redis, ...projectConfig.database?.redis } }, llm: { providers: { ...defaultConfig.llm.providers, ...projectConfig.llm?.providers }, defaultProvider: projectConfig.llm?.defaultProvider || defaultConfig.llm.defaultProvider, temperature: projectConfig.llm?.temperature ?? defaultConfig.llm.temperature, maxTokens: projectConfig.llm?.maxTokens ?? defaultConfig.llm.maxTokens }, analysis: { ...defaultConfig.analysis, ...projectConfig.analysis }, integrations: { ...(defaultConfig.integrations.jira && { jira: { ...defaultConfig.integrations.jira, ...projectConfig.integrations?.jira } }), ...(defaultConfig.integrations.confluence && { confluence: { ...defaultConfig.integrations.confluence, ...projectConfig.integrations?.confluence } }), ...(projectConfig.integrations?.jira && !defaultConfig.integrations.jira && { jira: projectConfig.integrations.jira }), ...(projectConfig.integrations?.confluence && !defaultConfig.integrations.confluence && { confluence: projectConfig.integrations.confluence }) }, rdf: { ...defaultConfig.rdf, ...projectConfig.rdf }, mcp: { ...defaultConfig.mcp, ...projectConfig.mcp } }; } getConfig() { return this.config; } updateConfig(updates) { this.config = this.mergeConfigs(this.config, updates); } getDatabaseConfig() { return this.config.database; } getLLMConfig() { return this.config.llm; } getAnalysisConfig() { return this.config.analysis; } getMCPConfig() { return this.config.mcp; } getRDFConfig() { return this.config.rdf; } } // Export singleton instance exports.configManager = ConfigManager.getInstance(); exports.default = exports.configManager; //# sourceMappingURL=index.js.map