UNPKG

bc-code-intelligence-mcp

Version:

BC Code Intelligence MCP Server - Complete Specialist Bundle with AI-driven expert consultation, seamless handoffs, and context-preserving workflows

135 lines โ€ข 6.68 kB
/** * Test Configuration Loader and Validation System * Run with: npm run dev -- --test-config */ import { ConfigurationLoader } from './config-loader.js'; import { ConfigurationValidator } from './config-validator.js'; import { LayerSourceType, AuthType } from '../types/index.js'; async function testConfigurationSystem() { console.log('๐Ÿ”ง Testing Configuration System...'); try { // 1. Load configuration console.log('\n๐Ÿ“‹ Loading configuration...'); const configLoader = new ConfigurationLoader(); const configResult = await configLoader.loadConfiguration(); console.log(`โœ… Configuration loaded from: ${configResult.sources.join(', ')}`); console.log(` Layers: ${configResult.config.layers.length}`); console.log(` Warnings: ${configResult.warnings.length}`); if (configResult.warnings.length > 0) { console.log('\nโš ๏ธ Configuration Warnings:'); configResult.warnings.forEach(warning => { console.log(` - ${warning.type}: ${warning.message}`); }); } // 2. Validate configuration console.log('\n๐Ÿ” Validating configuration...'); const validator = new ConfigurationValidator(); const validation = await validator.validate(configResult.config); console.log(` Validation result: ${validation.valid ? 'โœ… VALID' : 'โŒ INVALID'}`); console.log(` Quality score: ${validation.score}/100`); if (validation.errors.length > 0) { console.log('\nโŒ Validation Errors:'); validation.errors.forEach(error => { console.log(` - ${error.field}: ${error.message}`); if (error.suggestion) { console.log(` ๐Ÿ’ก Suggestion: ${error.suggestion}`); } }); } if (validation.warnings.length > 0) { console.log('\nโš ๏ธ Validation Warnings:'); validation.warnings.forEach(warning => { console.log(` - ${warning.type}: ${warning.message}`); if (warning.suggestion) { console.log(` ๐Ÿ’ก Suggestion: ${warning.suggestion}`); } }); } // 3. Test with enhanced configuration console.log('\n๐Ÿงช Testing with enhanced configuration...'); // Add a test git layer if environment var is set if (process.env['BCKB_COMPANY_KNOWLEDGE_URL']) { configResult.config.layers.push({ name: 'company-standards', priority: 200, source: { type: LayerSourceType.GIT, url: process.env['BCKB_COMPANY_KNOWLEDGE_URL'], branch: 'main' }, auth: { type: AuthType.TOKEN, token: process.env['GITHUB_TOKEN'] || 'test-token' }, enabled: true }); console.log('๐Ÿ“ฆ Added company knowledge layer from environment'); } // Add a local override layer configResult.config.layers.push({ name: 'local-overrides', priority: 400, source: { type: LayerSourceType.LOCAL, path: './bckb-overrides' }, enabled: true }); console.log('๐Ÿ“ Added local override layer'); // 4. Re-validate enhanced configuration console.log('\n๐Ÿ” Validating enhanced configuration...'); const enhancedValidation = await validator.validate(configResult.config); console.log(` Enhanced validation: ${enhancedValidation.valid ? 'โœ… VALID' : 'โŒ INVALID'}`); console.log(` Enhanced quality score: ${enhancedValidation.score}/100`); console.log(` Total layers: ${configResult.config.layers.length}`); // 5. Display layer priority order console.log('\n๐Ÿ“Š Layer Priority Order (lowest to highest):'); console.log('โ”€'.repeat(60)); const sortedLayers = [...configResult.config.layers] .filter(layer => layer.enabled) .sort((a, b) => a.priority - b.priority); sortedLayers.forEach((layer, index) => { const typeIcon = { [LayerSourceType.EMBEDDED]: '๐Ÿ“ฆ', [LayerSourceType.GIT]: '๐ŸŒ', [LayerSourceType.LOCAL]: '๐Ÿ“', [LayerSourceType.HTTP]: '๐Ÿ”—', [LayerSourceType.NPM]: '๐Ÿ“‹' }[layer.source.type] || 'โ“'; console.log(` ${index + 1}. ${typeIcon} ${layer.name} (Priority: ${layer.priority})`); console.log(` Type: ${layer.source.type}`); if (layer.source.type === LayerSourceType.GIT && 'url' in layer.source) { console.log(` URL: ${layer.source.url}`); } else if (layer.source.type === LayerSourceType.LOCAL && 'path' in layer.source) { console.log(` Path: ${layer.source.path}`); } else if (layer.source.type === LayerSourceType.EMBEDDED && 'path' in layer.source) { console.log(` Path: ${layer.source.path || 'default'}`); } if (layer.auth) { console.log(` Auth: ${layer.auth.type}`); } console.log(); }); // 6. Configuration diagnostics console.log('๐Ÿ”ง Configuration Diagnostics:'); console.log(` Cache settings: ${JSON.stringify(configResult.config.cache.ttl, null, 2)}`); console.log(` Performance limits: ${configResult.config.performance.max_layers} layers, ${configResult.config.performance.max_concurrent_loads} concurrent`); console.log(` Security: Sources validation ${configResult.config.security.validate_sources ? 'enabled' : 'disabled'}`); console.log(` Developer mode: Debug ${configResult.config.developer.debug_layers ? 'ON' : 'OFF'}, Hot reload ${configResult.config.developer.hot_reload ? 'ON' : 'OFF'}`); console.log('\nโœ… Configuration system test completed successfully!'); return { configResult, validation: enhancedValidation }; } catch (error) { console.error('โŒ Configuration system test failed:', error instanceof Error ? error.message : String(error)); throw error; } } // Export for use in other tests export { testConfigurationSystem }; // Run if called directly if (process.argv.includes('--test-config')) { testConfigurationSystem().catch(console.error); } //# sourceMappingURL=test-config-loader.js.map