refactor: Remove semantic search and vector embedding functionality

Removes @xenova/transformers dependency, vector storage tables, embedding generation, and semantic search APIs. Simplifies context building to use only FTS search. Eliminates visualizer server, postinstall model download, and related CLI commands. Reduces package size and complexity while maintaining core static analysis capabilities.
This commit is contained in:
Colby McHenry
2026-04-07 14:59:48 -05:00
parent 7507605be5
commit 453c39d774
16 changed files with 12 additions and 4424 deletions
-68
View File
@@ -1,68 +0,0 @@
#!/usr/bin/env node
/**
* Postinstall script - downloads the embedding model to ~/.codegraph/models
* This runs after `npm install` or `npx @colbymchenry/codegraph`
*/
const { existsSync, mkdirSync } = require('fs');
const { join } = require('path');
const { homedir } = require('os');
const CODEGRAPH_DIR = join(homedir(), '.codegraph');
const MODELS_DIR = join(CODEGRAPH_DIR, 'models');
const MODEL_ID = 'nomic-ai/nomic-embed-text-v1.5';
async function downloadModel() {
// Ensure directories exist
if (!existsSync(CODEGRAPH_DIR)) {
mkdirSync(CODEGRAPH_DIR, { recursive: true });
}
if (!existsSync(MODELS_DIR)) {
mkdirSync(MODELS_DIR, { recursive: true });
}
// Check if model is already cached
const modelCachePath = join(MODELS_DIR, MODEL_ID.replace('/', '/'));
if (existsSync(modelCachePath)) {
console.log('Embedding model already downloaded.');
return;
}
console.log('Downloading embedding model (~130MB)...');
console.log('This is a one-time download for semantic code search.\n');
try {
// Dynamic import for @xenova/transformers (ESM-only package)
const { pipeline, env } = await import('@xenova/transformers');
// Configure cache directory
env.cacheDir = MODELS_DIR;
// Download with progress
await pipeline('feature-extraction', MODEL_ID, {
progress_callback: (progress) => {
if (progress.status === 'progress' && progress.file && progress.progress !== undefined) {
const fileName = progress.file.split('/').pop();
const percent = Math.round(progress.progress);
process.stdout.write(`\rDownloading ${fileName}... ${percent}% `);
} else if (progress.status === 'done') {
process.stdout.write('\n');
}
},
});
console.log('\nEmbedding model ready!');
} catch (error) {
// Don't fail the install if model download fails
// User can still use codegraph without semantic search
console.log('\nNote: Could not download embedding model.');
console.log('Semantic search will download it on first use.');
if (process.env.DEBUG) {
console.error(error);
}
}
}
downloadModel().catch(() => {
// Silent exit - don't break npm install
process.exit(0);
});