UNPKG

git-contextor

Version:

A code context tool with vector search and real-time monitoring, with optional Git integration.

84 lines (66 loc) 2.72 kB
const ConfigManager = require('../../core/ConfigManager'); const ServiceManager = require('../../core/ServiceManager'); const logger = require('../utils/logger'); const simpleGit = require('simple-git'); // Import all necessary services const Indexer = require('../../core/Indexer'); const VectorStore = require('../../core/VectorStore'); const MemoryVectorStore = require('../../core/MemoryVectorStore'); const ContextOptimizer = require('../../core/ContextOptimizer'); const FileWatcher = require('../../core/FileWatcher'); async function serve() { const repoPath = process.cwd(); const configManager = new ConfigManager(repoPath); try { await configManager.load(); const config = configManager.config; // Environment validation let isGitRepo = false; try { await simpleGit(repoPath).status(); isGitRepo = true; logger.info('Git repository detected.'); } catch (error) { logger.warn('No Git repository detected. Operating in non-Git mode.'); } // Initialize services const vectorStoreProvider = config.vectorStore.provider; const qdrantHost = config.vectorStore.qdrant?.host; let vectorStore; if (vectorStoreProvider === 'qdrant' || (vectorStoreProvider === 'auto' && qdrantHost)) { vectorStore = new VectorStore(config); } else { vectorStore = new MemoryVectorStore(config); } const indexer = new Indexer(repoPath, vectorStore, config); indexer.isGitRepo = isGitRepo; const contextOptimizer = new ContextOptimizer(vectorStore, config); const fileWatcher = new FileWatcher(repoPath, indexer, config); fileWatcher.isGitRepo = isGitRepo; const services = { indexer, vectorStore, contextOptimizer, fileWatcher }; // Initialize ServiceManager const serviceManager = new ServiceManager(repoPath, config, services); // Initialize sharing service through ServiceManager await serviceManager.sharingService.init(); // Start all services (ServiceManager handles initial indexing) await serviceManager.start(); // Keep the process running process.on('SIGTERM', async () => { logger.info('Received SIGTERM, shutting down gracefully...'); await serviceManager.stop({ silent: true }); process.exit(0); }); process.on('SIGINT', async () => { logger.info('Received SIGINT, shutting down gracefully...'); await serviceManager.stop({ silent: true }); process.exit(0); }); // Keep the process alive process.stdin.resume(); } catch (error) { logger.error('Failed to start Git Contextor service:', error.message); logger.debug(error.stack); process.exit(1); } } module.exports = serve;