UNPKG

@vfarcic/dot-ai

Version:

Universal Kubernetes application deployment agent with CLI and MCP interfaces

232 lines (231 loc) 8.71 kB
"use strict"; /** * Version tool for MCP server * * Provides comprehensive system status including version information, * Vector DB connection status, and embedding service capabilities */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.VERSION_TOOL_INPUT_SCHEMA = exports.VERSION_TOOL_DESCRIPTION = exports.VERSION_TOOL_NAME = void 0; exports.getVersionInfo = getVersionInfo; exports.handleVersionTool = handleVersionTool; const fs_1 = require("fs"); const path_1 = require("path"); const index_1 = require("../core/index"); exports.VERSION_TOOL_NAME = 'version'; exports.VERSION_TOOL_DESCRIPTION = 'Get comprehensive system status including version information, Vector DB connection status, embedding service capabilities, Anthropic API connectivity, and pattern management health check'; exports.VERSION_TOOL_INPUT_SCHEMA = { type: 'object', properties: {}, required: [], additionalProperties: false }; /** * Test Vector DB connectivity and get status */ async function getVectorDBStatus() { const vectorDB = new index_1.VectorDBService(); const config = vectorDB.getConfig(); try { const isHealthy = await vectorDB.healthCheck(); if (!isHealthy) { return { connected: false, url: config.url || 'unknown', collectionName: config.collectionName || 'patterns', error: 'Health check failed - Vector DB not responding' }; } // Try to get patterns count to verify collection access const embeddingService = new index_1.EmbeddingService(); const patternService = new index_1.PatternVectorService(vectorDB, embeddingService); let patternsCount; try { patternsCount = await patternService.getPatternsCount(); } catch (error) { // Collection might not exist yet - that's okay patternsCount = 0; } return { connected: true, url: config.url || 'unknown', collectionName: config.collectionName || 'patterns', patternsCount }; } catch (error) { return { connected: false, url: config.url || 'unknown', collectionName: config.collectionName || 'patterns', error: error instanceof Error ? error.message : String(error) }; } } /** * Test embedding service status */ async function getEmbeddingStatus() { const embeddingService = new index_1.EmbeddingService(); const status = embeddingService.getStatus(); return { available: status.available, provider: status.provider, model: status.model, dimensions: status.dimensions, reason: status.reason }; } /** * Test Anthropic API connectivity */ async function getAnthropicStatus() { const keyConfigured = !!process.env.ANTHROPIC_API_KEY; if (!keyConfigured) { return { connected: false, keyConfigured: false, error: 'ANTHROPIC_API_KEY environment variable not set' }; } try { // Import Claude integration and test a simple connection const { ClaudeIntegration } = await Promise.resolve().then(() => __importStar(require('../core/claude'))); const claude = new ClaudeIntegration(process.env.ANTHROPIC_API_KEY); // Test with a minimal request to check connectivity await claude.sendMessage('test'); return { connected: true, keyConfigured: true }; } catch (error) { return { connected: false, keyConfigured: true, error: error instanceof Error ? error.message : String(error) }; } } /** * Get version information from package.json */ function getVersionInfo() { // Find package.json relative to this module's location (MCP server's installation) let packageJson; try { // Get the directory where this module is installed // __dirname points to the compiled JS location (dist/tools/), go up two levels to find package.json const mcpServerDir = (0, path_1.join)(__dirname, '..', '..'); const packageJsonPath = (0, path_1.join)(mcpServerDir, 'package.json'); packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf8')); } catch (error) { // If package.json not found, use unknown version packageJson = { version: 'unknown' }; } return { version: packageJson.version, nodeVersion: process.version, platform: process.platform, arch: process.arch }; } /** * Handle version tool request with comprehensive system diagnostics */ async function handleVersionTool(args, logger, requestId) { try { logger.info('Processing version tool request with system diagnostics', { requestId }); // Get version info const version = getVersionInfo(); // Run all diagnostics in parallel for better performance logger.info('Running system diagnostics...', { requestId }); const [vectorDBStatus, embeddingStatus, anthropicStatus] = await Promise.all([ getVectorDBStatus(), getEmbeddingStatus(), getAnthropicStatus() ]); const systemStatus = { version, vectorDB: vectorDBStatus, embedding: embeddingStatus, anthropic: anthropicStatus }; // Log summary of system health logger.info('System diagnostics completed', { requestId, version: version.version, vectorDBConnected: vectorDBStatus.connected, embeddingAvailable: embeddingStatus.available, anthropicConnected: anthropicStatus.connected }); return { content: [{ type: 'text', text: JSON.stringify({ status: 'success', system: systemStatus, summary: { overall: vectorDBStatus.connected && anthropicStatus.connected ? 'healthy' : 'degraded', patternSearch: embeddingStatus.available ? 'semantic+keyword' : 'keyword-only', capabilities: [ vectorDBStatus.connected ? 'pattern-management' : null, embeddingStatus.available ? 'semantic-search' : null, anthropicStatus.connected ? 'ai-recommendations' : null ].filter(Boolean) }, timestamp: new Date().toISOString() }, null, 2) }] }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); logger.error('Version tool request failed', error, { requestId }); return { content: [{ type: 'text', text: JSON.stringify({ status: 'error', error: errorMessage, timestamp: new Date().toISOString() }, null, 2) }] }; } }