@vfarcic/dot-ai
Version:
Universal Kubernetes application deployment agent with CLI and MCP interfaces
232 lines (231 loc) • 8.71 kB
JavaScript
;
/**
* 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)
}]
};
}
}