#!/usr/bin/env node
/**
* Integration Verification Script
*
* Verifies that all 60 tools are properly integrated across 6 modules
*/
import { registry } from '../dist/registry.js';
import { integrationManager, DependencyValidator } from '../dist/integration/index.js';
import { errorHandler } from '../dist/integration/error-handling.js';
console.log('=== Komodo MCP Integration Verification ===\n');
// 1. Registry Stats
console.log('1. Registry Statistics:');
const stats = registry.getStats();
console.log(` - Total Modules: ${stats.totalModules}`);
console.log(` - Total Tools: ${stats.totalTools}`);
console.log(` - Auth Required Tools: ${stats.authRequiredTools}`);
console.log('');
// 2. Module Breakdown
console.log('2. Module Tool Counts:');
const modules = ['auth', 'user', 'read', 'write', 'execute', 'terminal'];
for (const module of modules) {
const toolCount = registry.getModuleTools(module).length;
const moduleInfo = registry.getModule(module);
const authReq = moduleInfo?.requiredAuth ? 'Yes' : 'No';
console.log(` - ${module.padEnd(10)}: ${String(toolCount).padStart(2)} tools (Auth: ${authReq})`);
}
console.log('');
// 3. Registry Validation
console.log('3. Registry Validation:');
const validation = registry.validate();
if (validation.valid) {
console.log(' ✓ Registry validation PASSED');
} else {
console.log(' ✗ Registry validation FAILED');
validation.errors.forEach(err => console.log(` - ${err}`));
}
console.log('');
// 4. Dependency Order
console.log('4. Module Dependencies:');
const initOrder = DependencyValidator.getInitOrder();
console.log(' Init Order:', initOrder.join(' → '));
const cleanupOrder = DependencyValidator.getCleanupOrder();
console.log(' Cleanup Order:', cleanupOrder.join(' → '));
console.log('');
// 5. Tool Naming Convention
console.log('5. Tool Naming Convention:');
const allTools = registry.getAllTools();
const invalidNames = allTools.filter(t => !t.name.startsWith('komodo_'));
if (invalidNames.length === 0) {
console.log(' ✓ All tools follow naming convention (komodo_*)');
} else {
console.log(` ✗ ${invalidNames.length} tools have invalid names:`);
invalidNames.forEach(t => console.log(` - ${t.name}`));
}
console.log('');
// 6. Tool Schemas
console.log('6. Tool Input Schemas:');
const missingSchemas = allTools.filter(t => !t.inputSchema);
if (missingSchemas.length === 0) {
console.log(' ✓ All tools have inputSchema defined');
} else {
console.log(` ✗ ${missingSchemas.length} tools missing inputSchema:`);
missingSchemas.forEach(t => console.log(` - ${t.name}`));
}
console.log('');
// 7. Integration Manager
console.log('7. Integration Manager:');
console.log(` - Available: ${integrationManager !== undefined ? 'Yes' : 'No'}`);
console.log(` - Initialized: ${integrationManager.isInitialized() ? 'Yes' : 'No'}`);
console.log('');
// 8. Error Handler
console.log('8. Error Handler:');
console.log(` - Available: ${errorHandler !== undefined ? 'Yes' : 'No'}`);
console.log(` - Has handle method: ${typeof errorHandler.handle === 'function' ? 'Yes' : 'No'}`);
console.log(` - Has handleWithRetry: ${typeof errorHandler.handleWithRetry === 'function' ? 'Yes' : 'No'}`);
console.log('');
// 9. Module Categories
console.log('9. Tools by Category:');
const categories = ['auth', 'user', 'read', 'write', 'execute', 'terminal'];
for (const category of categories) {
const tools = registry.getToolsByCategory(category);
console.log(` - ${category}: ${tools.length} tools`);
}
console.log('');
// 10. Summary
console.log('=== Verification Summary ===');
const expectedModules = 6;
const expectedTools = 60;
const expectedCounts = {
auth: 8,
user: 10,
read: 16,
write: 8,
execute: 9,
terminal: 9
};
let allPassed = true;
if (stats.totalModules !== expectedModules) {
console.log(`✗ Module count mismatch: expected ${expectedModules}, got ${stats.totalModules}`);
allPassed = false;
}
if (stats.totalTools !== expectedTools) {
console.log(`✗ Tool count mismatch: expected ${expectedTools}, got ${stats.totalTools}`);
allPassed = false;
}
for (const [module, expectedCount] of Object.entries(expectedCounts)) {
const actualCount = registry.getModuleTools(module).length;
if (actualCount !== expectedCount) {
console.log(`✗ ${module} tool count mismatch: expected ${expectedCount}, got ${actualCount}`);
allPassed = false;
}
}
if (!validation.valid) {
console.log('✗ Registry validation failed');
allPassed = false;
}
if (allPassed) {
console.log('\n✓ All integration checks PASSED!');
console.log('\nIntegration Status: ✅ READY');
process.exit(0);
} else {
console.log('\n✗ Some integration checks FAILED');
console.log('\nIntegration Status: ❌ NOT READY');
process.exit(1);
}