raggrep 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/main.js +50 -2
- package/dist/cli/main.js.map +5 -5
- package/dist/index.js +49 -1
- package/dist/index.js.map +5 -5
- package/dist/infrastructure/storage/literalIndex.d.ts +8 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
"/**\n * TypeScript/JavaScript Code Parser\n *\n * Uses the TypeScript Compiler API for accurate AST-based parsing.\n * Extracts semantic chunks: functions, classes, interfaces, types, enums.\n *\n * This parser is specifically for TypeScript/JavaScript files.\n * For other file types, use the generic chunking in domain/services/chunking.\n */\n\nimport * as ts from \"typescript\";\nimport type { ChunkType } from \"../../../domain/entities\";\n\n/**\n * Represents a parsed chunk of code with location information\n */\nexport interface ParsedChunk {\n /** The source code content */\n content: string;\n /** 1-based start line number */\n startLine: number;\n /** 1-based end line number */\n endLine: number;\n /** The type of code construct */\n type: ChunkType;\n /** Name of the construct (function name, class name, etc.) */\n name?: string;\n /** Whether this is exported */\n isExported?: boolean;\n /** JSDoc comment if present */\n jsDoc?: string;\n}\n\n/**\n * Parse TypeScript/JavaScript code into semantic chunks.\n *\n * Uses the TypeScript Compiler API for accurate AST-based parsing.\n * Returns chunks for functions, classes, interfaces, types, enums, and exported variables.\n *\n * @param content - The source code content\n * @param filepath - The file path (used for JSX detection)\n * @returns Array of parsed chunks\n */\nexport function parseTypeScriptCode(\n content: string,\n filepath: string\n): ParsedChunk[] {\n return parseTypeScript(content, filepath);\n}\n\n/**\n * Parse TypeScript/JavaScript code using the TypeScript Compiler API\n * @param content - The source code content\n * @param filepath - The file path\n * @returns Array of parsed chunks\n */\nfunction parseTypeScript(content: string, filepath: string): ParsedChunk[] {\n const chunks: ParsedChunk[] = [];\n const lines = content.split(\"\\n\");\n\n // Create a source file from the content\n const sourceFile = ts.createSourceFile(\n filepath,\n content,\n ts.ScriptTarget.Latest,\n true, // setParentNodes\n filepath.endsWith(\".tsx\") || filepath.endsWith(\".jsx\")\n ? ts.ScriptKind.TSX\n : ts.ScriptKind.TS\n );\n\n /**\n * Get line numbers for a node (1-based)\n */\n function getLineNumbers(node: ts.Node): {\n startLine: number;\n endLine: number;\n } {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart());\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());\n return {\n startLine: start.line + 1,\n endLine: end.line + 1,\n };\n }\n\n /**\n * Get the source text for a node\n */\n function getNodeText(node: ts.Node): string {\n return node.getText(sourceFile);\n }\n\n /**\n * Check if a node has export modifier\n */\n function isExported(node: ts.Node): boolean {\n if (!ts.canHaveModifiers(node)) return false;\n const modifiers = ts.getModifiers(node);\n return (\n modifiers?.some((m) => m.kind === ts.SyntaxKind.ExportKeyword) ?? false\n );\n }\n\n /**\n * Get JSDoc comment for a node\n */\n function getJSDoc(node: ts.Node): string | undefined {\n const jsDocNodes = ts.getJSDocCommentsAndTags(node);\n if (jsDocNodes.length === 0) return undefined;\n\n return jsDocNodes.map((doc) => doc.getText(sourceFile)).join(\"\\n\");\n }\n\n /**\n * Get function name from various function declarations\n */\n function getFunctionName(node: ts.Node): string | undefined {\n if (ts.isFunctionDeclaration(node) && node.name) {\n return node.name.text;\n }\n if (ts.isMethodDeclaration(node) && ts.isIdentifier(node.name)) {\n return node.name.text;\n }\n if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {\n return node.name.text;\n }\n return undefined;\n }\n\n /**\n * Visit nodes recursively to extract chunks\n */\n function visit(node: ts.Node): void {\n const { startLine, endLine } = getLineNumbers(node);\n\n // Function declarations (including async)\n if (ts.isFunctionDeclaration(node) && node.name) {\n chunks.push({\n content: getNodeText(node),\n startLine,\n endLine,\n type: \"function\",\n name: node.name.text,\n isExported: isExported(node),\n jsDoc: getJSDoc(node),\n });\n return; // Don't recurse into function body\n }\n\n // Arrow functions and function expressions assigned to variables\n if (ts.isVariableStatement(node)) {\n for (const decl of node.declarationList.declarations) {\n if (\n decl.initializer &&\n (ts.isArrowFunction(decl.initializer) ||\n ts.isFunctionExpression(decl.initializer))\n ) {\n const name = ts.isIdentifier(decl.name) ? decl.name.text : undefined;\n chunks.push({\n content: getNodeText(node),\n startLine,\n endLine,\n type: \"function\",\n name,\n isExported: isExported(node),\n jsDoc: getJSDoc(node),\n });\n return;\n }\n }\n }\n\n // Class declarations\n if (ts.isClassDeclaration(node) && node.name) {\n chunks.push({\n content: getNodeText(node),\n startLine,\n endLine,\n type: \"class\",\n name: node.name.text,\n isExported: isExported(node),\n jsDoc: getJSDoc(node),\n });\n return; // Don't recurse into class body (it's included in the chunk)\n }\n\n // Interface declarations\n if (ts.isInterfaceDeclaration(node)) {\n chunks.push({\n content: getNodeText(node),\n startLine,\n endLine,\n type: \"interface\",\n name: node.name.text,\n isExported: isExported(node),\n jsDoc: getJSDoc(node),\n });\n return;\n }\n\n // Type alias declarations\n if (ts.isTypeAliasDeclaration(node)) {\n chunks.push({\n content: getNodeText(node),\n startLine,\n endLine,\n type: \"type\",\n name: node.name.text,\n isExported: isExported(node),\n jsDoc: getJSDoc(node),\n });\n return;\n }\n\n // Enum declarations\n if (ts.isEnumDeclaration(node)) {\n chunks.push({\n content: getNodeText(node),\n startLine,\n endLine,\n type: \"enum\",\n name: node.name.text,\n isExported: isExported(node),\n jsDoc: getJSDoc(node),\n });\n return;\n }\n\n // Exported variable declarations (constants)\n if (ts.isVariableStatement(node) && isExported(node)) {\n for (const decl of node.declarationList.declarations) {\n // Skip if it's a function (already handled above)\n if (\n decl.initializer &&\n (ts.isArrowFunction(decl.initializer) ||\n ts.isFunctionExpression(decl.initializer))\n ) {\n continue;\n }\n const name = ts.isIdentifier(decl.name) ? decl.name.text : undefined;\n chunks.push({\n content: getNodeText(node),\n startLine,\n endLine,\n type: \"variable\",\n name,\n isExported: true,\n jsDoc: getJSDoc(node),\n });\n }\n return;\n }\n\n // Recurse into children\n ts.forEachChild(node, visit);\n }\n\n // Start visiting from the root\n ts.forEachChild(sourceFile, visit);\n\n // If no semantic chunks found, create a single file chunk\n // (This can happen for files with only top-level statements or imports)\n if (chunks.length === 0) {\n const lines = content.split(\"\\n\");\n return [\n {\n content,\n startLine: 1,\n endLine: lines.length,\n type: \"file\",\n },\n ];\n }\n\n return chunks;\n}\n\n/**\n * Generate a unique chunk ID from filepath and line numbers\n * @param filepath - The source file path\n * @param startLine - Start line number\n * @param endLine - End line number\n * @returns Unique chunk identifier\n */\nexport function generateChunkId(\n filepath: string,\n startLine: number,\n endLine: number\n): string {\n const safePath = filepath.replace(/[/\\\\]/g, \"-\").replace(/\\./g, \"_\");\n return `${safePath}-${startLine}-${endLine}`;\n}\n",
|
|
31
31
|
"/**\n * File-based Index Storage Adapter\n * \n * Implements the IndexStorage port using the filesystem.\n * Index data is stored as JSON files in the .raggrep directory.\n */\n\nimport type { IndexStorage } from '../../domain/ports';\nimport type { FileSystem } from '../../domain/ports';\nimport type { \n Config, \n FileIndex, \n ModuleManifest, \n GlobalManifest,\n FileSummary,\n SymbolicIndexMeta,\n Tier1Manifest \n} from '../../domain/entities';\nimport { createDefaultConfig } from '../../domain/entities';\n\n/**\n * Filesystem-based index storage.\n * \n * Structure:\n * .raggrep/\n * ├── config.json\n * ├── manifest.json (global)\n * └── index/\n * └── <moduleId>/\n * ├── manifest.json (module)\n * ├── symbolic/\n * │ ├── _meta.json (BM25 statistics)\n * │ └── <filepath>.json (per-file summaries)\n * └── <filepath>.json (file indexes with embeddings)\n */\nexport class FileIndexStorage implements IndexStorage {\n private fs: FileSystem;\n private rootDir: string;\n private indexDir: string;\n\n constructor(fs: FileSystem, rootDir: string, indexDir: string = '.raggrep') {\n this.fs = fs;\n this.rootDir = fs.resolve(rootDir);\n this.indexDir = indexDir;\n }\n\n // ============================================================================\n // Path Helpers\n // ============================================================================\n\n private getIndexPath(): string {\n return this.fs.join(this.rootDir, this.indexDir);\n }\n\n private getConfigPath(): string {\n return this.fs.join(this.getIndexPath(), 'config.json');\n }\n\n private getGlobalManifestPath(): string {\n return this.fs.join(this.getIndexPath(), 'manifest.json');\n }\n\n private getModuleIndexPath(moduleId: string): string {\n return this.fs.join(this.getIndexPath(), 'index', moduleId);\n }\n\n private getModuleManifestPath(moduleId: string): string {\n return this.fs.join(this.getModuleIndexPath(moduleId), 'manifest.json');\n }\n\n // Symbolic index paths\n private getSymbolicPath(moduleId: string): string {\n return this.fs.join(this.getModuleIndexPath(moduleId), 'symbolic');\n }\n\n private getSymbolicMetaPath(moduleId: string): string {\n return this.fs.join(this.getSymbolicPath(moduleId), '_meta.json');\n }\n\n private getSymbolicFilePath(moduleId: string, filepath: string): string {\n const jsonPath = filepath.replace(/\\.[^.]+$/, '.json');\n return this.fs.join(this.getSymbolicPath(moduleId), jsonPath);\n }\n\n // File index paths (embeddings)\n private getFileIndexPath(moduleId: string, filepath: string): string {\n const jsonPath = filepath.replace(/\\.[^.]+$/, '.json');\n return this.fs.join(this.getModuleIndexPath(moduleId), jsonPath);\n }\n\n /** @deprecated Use getSymbolicMetaPath instead */\n private getTier1Path(moduleId: string): string {\n return this.fs.join(this.getModuleIndexPath(moduleId), 'tier1.json');\n }\n\n // ============================================================================\n // Configuration\n // ============================================================================\n\n async loadConfig(): Promise<Config> {\n try {\n const content = await this.fs.readFile(this.getConfigPath());\n const savedConfig = JSON.parse(content) as Partial<Config>;\n return { ...createDefaultConfig(), ...savedConfig };\n } catch {\n return createDefaultConfig();\n }\n }\n\n async saveConfig(config: Config): Promise<void> {\n await this.fs.writeFile(this.getConfigPath(), JSON.stringify(config, null, 2));\n }\n\n // ============================================================================\n // Global Manifest\n // ============================================================================\n\n async loadGlobalManifest(): Promise<GlobalManifest | null> {\n try {\n const content = await this.fs.readFile(this.getGlobalManifestPath());\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n async saveGlobalManifest(manifest: GlobalManifest): Promise<void> {\n await this.fs.writeFile(this.getGlobalManifestPath(), JSON.stringify(manifest, null, 2));\n }\n\n // ============================================================================\n // Module Manifest\n // ============================================================================\n\n async loadModuleManifest(moduleId: string): Promise<ModuleManifest | null> {\n try {\n const content = await this.fs.readFile(this.getModuleManifestPath(moduleId));\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n async saveModuleManifest(moduleId: string, manifest: ModuleManifest): Promise<void> {\n await this.fs.writeFile(this.getModuleManifestPath(moduleId), JSON.stringify(manifest, null, 2));\n }\n\n // ============================================================================\n // Symbolic Index (lightweight file summaries for keyword search)\n // ============================================================================\n\n async loadSymbolicMeta(moduleId: string): Promise<SymbolicIndexMeta | null> {\n try {\n const content = await this.fs.readFile(this.getSymbolicMetaPath(moduleId));\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n async saveSymbolicMeta(moduleId: string, meta: SymbolicIndexMeta): Promise<void> {\n await this.fs.writeFile(this.getSymbolicMetaPath(moduleId), JSON.stringify(meta, null, 2));\n }\n\n async loadFileSummary(moduleId: string, filepath: string): Promise<FileSummary | null> {\n try {\n const content = await this.fs.readFile(this.getSymbolicFilePath(moduleId, filepath));\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n async saveFileSummary(moduleId: string, filepath: string, summary: FileSummary): Promise<void> {\n await this.fs.writeFile(this.getSymbolicFilePath(moduleId, filepath), JSON.stringify(summary, null, 2));\n }\n\n async deleteFileSummary(moduleId: string, filepath: string): Promise<void> {\n try {\n await this.fs.deleteFile(this.getSymbolicFilePath(moduleId, filepath));\n } catch {\n // Ignore if file doesn't exist\n }\n }\n\n /**\n * List all file summaries by reading the module manifest.\n * Returns filepaths relative to the project root.\n */\n async listFileSummaries(moduleId: string): Promise<string[]> {\n const manifest = await this.loadModuleManifest(moduleId);\n if (!manifest) {\n return [];\n }\n return Object.keys(manifest.files);\n }\n\n // ============================================================================\n // Tier 1 Index (deprecated - use Symbolic Index instead)\n // ============================================================================\n\n /** @deprecated Use loadSymbolicMeta and loadFileSummary instead */\n async loadTier1Index(moduleId: string): Promise<Tier1Manifest | null> {\n try {\n const content = await this.fs.readFile(this.getTier1Path(moduleId));\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n /** @deprecated Use saveSymbolicMeta and saveFileSummary instead */\n async saveTier1Index(moduleId: string, manifest: Tier1Manifest): Promise<void> {\n await this.fs.writeFile(this.getTier1Path(moduleId), JSON.stringify(manifest, null, 2));\n }\n\n // ============================================================================\n // File Indexes (full index with embeddings)\n // ============================================================================\n\n async loadFileIndex(moduleId: string, filepath: string): Promise<FileIndex | null> {\n try {\n const content = await this.fs.readFile(this.getFileIndexPath(moduleId, filepath));\n return JSON.parse(content);\n } catch {\n return null;\n }\n }\n\n async saveFileIndex(moduleId: string, filepath: string, index: FileIndex): Promise<void> {\n await this.fs.writeFile(this.getFileIndexPath(moduleId, filepath), JSON.stringify(index, null, 2));\n }\n\n async deleteFileIndex(moduleId: string, filepath: string): Promise<void> {\n await this.fs.deleteFile(this.getFileIndexPath(moduleId, filepath));\n }\n\n async listIndexedFiles(moduleId: string): Promise<string[]> {\n const manifest = await this.loadModuleManifest(moduleId);\n if (!manifest) {\n return [];\n }\n return Object.keys(manifest.files);\n }\n\n // ============================================================================\n // Utilities\n // ============================================================================\n\n async indexExists(): Promise<boolean> {\n return this.fs.exists(this.getIndexPath());\n }\n\n async deleteIndex(): Promise<void> {\n // Note: This is a simplified implementation\n // A full implementation would recursively delete the directory\n const indexPath = this.getIndexPath();\n if (await this.fs.exists(indexPath)) {\n // For safety, we don't implement recursive delete here\n throw new Error('deleteIndex not fully implemented - please delete .raggrep manually');\n }\n }\n\n getRootDir(): string {\n return this.rootDir;\n }\n}\n\n",
|
|
32
32
|
"/**\n * Symbolic Index Storage\n *\n * Manages the keyword-based index for fast file filtering.\n * Handles file I/O for persisting index data.\n *\n * Structure:\n * .raggrep/index/<module>/symbolic/\n * ├── _meta.json (BM25 statistics)\n * └── <filepath>.json (per-file summaries)\n */\n\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport { BM25Index } from \"../../domain/services/bm25\";\nimport { extractPathKeywords } from \"../../domain/services/keywords\";\nimport type { FileSummary, SymbolicIndexMeta } from \"../../domain/entities\";\n\n/**\n * Symbolic Index Manager\n *\n * Manages the keyword-based index for fast file filtering.\n */\nexport class SymbolicIndex {\n private meta: SymbolicIndexMeta | null = null;\n private fileSummaries: Map<string, FileSummary> = new Map();\n private bm25Index: BM25Index | null = null;\n private symbolicPath: string;\n private moduleId: string;\n\n constructor(indexDir: string, moduleId: string) {\n this.symbolicPath = path.join(indexDir, \"index\", moduleId, \"symbolic\");\n this.moduleId = moduleId;\n }\n\n /**\n * Initialize or load the symbolic index\n */\n async initialize(): Promise<void> {\n try {\n await this.load();\n } catch {\n // Create empty metadata\n this.meta = {\n version: \"1.0.0\",\n lastUpdated: new Date().toISOString(),\n moduleId: this.moduleId,\n fileCount: 0,\n bm25Data: {\n avgDocLength: 0,\n documentFrequencies: {},\n totalDocs: 0,\n },\n };\n this.bm25Index = new BM25Index();\n }\n }\n\n /**\n * Add or update a file summary\n */\n addFile(summary: FileSummary): void {\n this.fileSummaries.set(summary.filepath, summary);\n }\n\n /**\n * Remove a file from the index\n */\n removeFile(filepath: string): boolean {\n return this.fileSummaries.delete(filepath);\n }\n\n /**\n * Build BM25 index from file summaries\n */\n buildBM25Index(): void {\n this.bm25Index = new BM25Index();\n\n // Add each file's keywords as a document\n for (const [filepath, summary] of this.fileSummaries) {\n const content = [\n ...summary.keywords,\n ...summary.exports,\n ...extractPathKeywords(filepath),\n ].join(\" \");\n\n this.bm25Index.addDocuments([{ id: filepath, content }]);\n }\n\n // Update metadata\n if (this.meta) {\n this.meta.fileCount = this.fileSummaries.size;\n this.meta.bm25Data.totalDocs = this.fileSummaries.size;\n }\n }\n\n /**\n * Find candidate files using BM25 keyword search\n */\n findCandidates(query: string, maxCandidates: number = 20): string[] {\n if (!this.bm25Index) {\n return Array.from(this.fileSummaries.keys());\n }\n\n const results = this.bm25Index.search(query, maxCandidates);\n return results.map((r) => r.id);\n }\n\n /**\n * Get all file paths in the index\n */\n getAllFiles(): string[] {\n return Array.from(this.fileSummaries.keys());\n }\n\n /**\n * Get summary for a specific file\n */\n getFileSummary(filepath: string): FileSummary | undefined {\n return this.fileSummaries.get(filepath);\n }\n\n /**\n * Save the index to disk (per-file structure)\n */\n async save(): Promise<void> {\n if (!this.meta) throw new Error(\"Index not initialized\");\n\n // Update metadata\n this.meta.lastUpdated = new Date().toISOString();\n this.meta.fileCount = this.fileSummaries.size;\n\n // Ensure symbolic directory exists\n await fs.mkdir(this.symbolicPath, { recursive: true });\n\n // Save metadata\n const metaPath = path.join(this.symbolicPath, \"_meta.json\");\n await fs.writeFile(metaPath, JSON.stringify(this.meta, null, 2));\n\n // Save each file summary\n for (const [filepath, summary] of this.fileSummaries) {\n const summaryPath = this.getFileSummaryPath(filepath);\n await fs.mkdir(path.dirname(summaryPath), { recursive: true });\n await fs.writeFile(summaryPath, JSON.stringify(summary, null, 2));\n }\n }\n\n /**\n * Load the index from disk\n */\n async load(): Promise<void> {\n // Load metadata\n const metaPath = path.join(this.symbolicPath, \"_meta.json\");\n const metaContent = await fs.readFile(metaPath, \"utf-8\");\n this.meta = JSON.parse(metaContent);\n\n // Load all file summaries by walking the symbolic directory\n this.fileSummaries.clear();\n await this.loadFileSummariesRecursive(this.symbolicPath);\n\n // Rebuild BM25 index\n this.buildBM25Index();\n }\n\n /**\n * Recursively load file summaries from the symbolic directory\n */\n private async loadFileSummariesRecursive(dir: string): Promise<void> {\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n\n if (entry.isDirectory()) {\n await this.loadFileSummariesRecursive(fullPath);\n } else if (entry.name.endsWith(\".json\") && entry.name !== \"_meta.json\") {\n try {\n const content = await fs.readFile(fullPath, \"utf-8\");\n const summary = JSON.parse(content) as FileSummary;\n if (summary.filepath) {\n this.fileSummaries.set(summary.filepath, summary);\n }\n } catch {\n // Skip invalid files\n }\n }\n }\n } catch {\n // Directory doesn't exist yet\n }\n }\n\n /**\n * Get the path for a file summary\n */\n private getFileSummaryPath(filepath: string): string {\n const jsonPath = filepath.replace(/\\.[^.]+$/, \".json\");\n return path.join(this.symbolicPath, jsonPath);\n }\n\n /**\n * Delete a file summary from disk\n */\n async deleteFileSummary(filepath: string): Promise<void> {\n try {\n await fs.unlink(this.getFileSummaryPath(filepath));\n } catch {\n // Ignore if file doesn't exist\n }\n this.fileSummaries.delete(filepath);\n }\n\n /**\n * Check if the index exists on disk\n */\n async exists(): Promise<boolean> {\n try {\n const metaPath = path.join(this.symbolicPath, \"_meta.json\");\n await fs.access(metaPath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Get the number of indexed files\n */\n get size(): number {\n return this.fileSummaries.size;\n }\n\n /**\n * Clear the index\n */\n clear(): void {\n this.fileSummaries.clear();\n if (this.meta) {\n this.meta.fileCount = 0;\n this.meta.bm25Data = {\n avgDocLength: 0,\n documentFrequencies: {},\n totalDocs: 0,\n };\n }\n this.bm25Index = new BM25Index();\n }\n}\n\n/**\n * Get the symbolic index path for a module\n */\nexport function getSymbolicPath(\n rootDir: string,\n moduleId: string,\n indexDir: string = \".raggrep\"\n): string {\n return path.join(rootDir, indexDir, \"index\", moduleId, \"symbolic\");\n}\n\n",
|
|
33
|
-
"/**\n * Literal Index Storage\n *\n * Manages the literal index for exact-match boosting.\n * Handles file I/O for persisting literal data.\n *\n * Structure:\n * .raggrep/index/<module>/literals/\n * └── _index.json (literal → chunk mappings)\n */\n\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport type {\n ExtractedLiteral,\n DetectedLiteral,\n LiteralMatch,\n LiteralIndexData,\n LiteralIndexEntry,\n LiteralType,\n LiteralMatchType,\n} from \"../../domain/entities/literal\";\n\n/**\n * Literal Index Manager\n *\n * Manages the literal index for exact-match boosting.\n * Provides O(1) lookup for literal matches.\n */\nexport class LiteralIndex {\n private indexPath: string;\n private moduleId: string;\n\n /**\n * In-memory index: lowercase literal value → entries\n */\n private entries: Map<string, LiteralIndexEntry[]> = new Map();\n\n /**\n * Schema version for compatibility checking.\n */\n private static readonly VERSION = \"1.0.0\";\n\n constructor(indexDir: string, moduleId: string) {\n this.indexPath = path.join(indexDir, \"index\", moduleId, \"literals\");\n this.moduleId = moduleId;\n }\n\n /**\n * Initialize the literal index.\n * Attempts to load from disk, creates empty index if not found.\n */\n async initialize(): Promise<void> {\n try {\n await this.load();\n } catch {\n // Create empty index\n this.entries = new Map();\n }\n }\n\n /**\n * Add literals from a chunk to the index.\n *\n * @param chunkId - Unique identifier for the chunk\n * @param filepath - Path to the file containing the chunk\n * @param literals - Extracted literals from the chunk\n */\n addLiterals(\n chunkId: string,\n filepath: string,\n literals: ExtractedLiteral[]\n ): void {\n for (const literal of literals) {\n const key = literal.value.toLowerCase();\n const existingEntries = this.entries.get(key) || [];\n\n // Check if this chunk already has an entry for this literal\n const existingIndex = existingEntries.findIndex(\n (e) => e.chunkId === chunkId\n );\n\n const newEntry: LiteralIndexEntry = {\n chunkId,\n filepath,\n originalCasing: literal.value,\n type: literal.type,\n matchType: literal.matchType,\n };\n\n if (existingIndex >= 0) {\n // Update existing entry (prefer definition over reference)\n const existing = existingEntries[existingIndex];\n if (shouldReplaceMatchType(existing.matchType, literal.matchType)) {\n existingEntries[existingIndex] = newEntry;\n }\n } else {\n existingEntries.push(newEntry);\n }\n\n this.entries.set(key, existingEntries);\n }\n }\n\n /**\n * Remove all literals for a chunk.\n *\n * @param chunkId - Chunk ID to remove\n */\n removeChunk(chunkId: string): void {\n for (const [key, entries] of this.entries) {\n const filtered = entries.filter((e) => e.chunkId !== chunkId);\n if (filtered.length === 0) {\n this.entries.delete(key);\n } else if (filtered.length !== entries.length) {\n this.entries.set(key, filtered);\n }\n }\n }\n\n /**\n * Find matches for query literals.\n *\n * @param queryLiterals - Literals detected in the query\n * @returns Array of matches with chunk IDs and filepaths\n */\n findMatches(queryLiterals: DetectedLiteral[]): LiteralMatch[] {\n const matches: LiteralMatch[] = [];\n\n for (const queryLiteral of queryLiterals) {\n const key = queryLiteral.value.toLowerCase();\n const entries = this.entries.get(key);\n\n if (!entries) {\n continue;\n }\n\n for (const entry of entries) {\n const exactMatch = entry.originalCasing === queryLiteral.value;\n\n matches.push({\n queryLiteral,\n indexedLiteral: {\n value: entry.originalCasing,\n type: entry.type,\n matchType: entry.matchType,\n },\n chunkId: entry.chunkId,\n filepath: entry.filepath,\n exactMatch,\n });\n }\n }\n\n return matches;\n }\n\n /**\n * Get all chunk IDs that contain a specific literal.\n *\n * @param literal - The literal value to search for\n * @returns Array of chunk IDs\n */\n getChunksForLiteral(literal: string): string[] {\n const key = literal.toLowerCase();\n const entries = this.entries.get(key);\n return entries ? entries.map((e) => e.chunkId) : [];\n }\n\n /**\n * Save the index to disk.\n */\n async save(): Promise<void> {\n // Ensure directory exists\n await fs.mkdir(this.indexPath, { recursive: true });\n\n // Convert Map to serializable format\n const data: LiteralIndexData = {\n version: LiteralIndex.VERSION,\n entries: Object.fromEntries(this.entries),\n };\n\n const indexFile = path.join(this.indexPath, \"_index.json\");\n await fs.writeFile(indexFile, JSON.stringify(data, null, 2));\n }\n\n /**\n * Load the index from disk.\n */\n async load(): Promise<void> {\n const indexFile = path.join(this.indexPath, \"_index.json\");\n const content = await fs.readFile(indexFile, \"utf-8\");\n const data: LiteralIndexData = JSON.parse(content);\n\n // Version check\n if (data.version !== LiteralIndex.VERSION) {\n console.warn(\n `Literal index version mismatch: expected ${LiteralIndex.VERSION}, got ${data.version}`\n );\n }\n\n // Convert back to Map\n this.entries = new Map(Object.entries(data.entries));\n }\n\n /**\n * Check if the index exists on disk.\n */\n async exists(): Promise<boolean> {\n try {\n const indexFile = path.join(this.indexPath, \"_index.json\");\n await fs.access(indexFile);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Clear the index.\n */\n clear(): void {\n this.entries.clear();\n }\n\n /**\n * Get the number of unique literals in the index.\n */\n get size(): number {\n return this.entries.size;\n }\n\n /**\n * Get the total number of literal-to-chunk mappings.\n */\n get totalMappings(): number {\n let count = 0;\n for (const entries of this.entries.values()) {\n count += entries.length;\n }\n return count;\n }\n\n /**\n * Get all unique literals in the index.\n */\n getAllLiterals(): string[] {\n return Array.from(this.entries.keys());\n }\n\n /**\n * Build a map from chunk ID to literal matches for a set of query literals.\n * Convenience method for search integration.\n *\n * @param queryLiterals - Literals detected in the query\n * @returns Map from chunk ID to array of matches\n */\n buildMatchMap(queryLiterals: DetectedLiteral[]): Map<string, LiteralMatch[]> {\n const matches = this.findMatches(queryLiterals);\n const matchMap = new Map<string, LiteralMatch[]>();\n\n for (const match of matches) {\n const existing = matchMap.get(match.chunkId) || [];\n existing.push(match);\n matchMap.set(match.chunkId, existing);\n }\n\n return matchMap;\n }\n}\n\n/**\n * Determine if we should replace an existing match type with a new one.\n * Priority: definition > reference > import\n */\nfunction shouldReplaceMatchType(\n existing: LiteralMatchType,\n incoming: LiteralMatchType\n): boolean {\n const priority: Record<LiteralMatchType, number> = {\n definition: 3,\n reference: 2,\n import: 1,\n };\n return priority[incoming] > priority[existing];\n}\n\n/**\n * Get the literal index path for a module.\n */\nexport function getLiteralIndexPath(\n rootDir: string,\n moduleId: string,\n indexDir: string = \".raggrep\"\n): string {\n return path.join(rootDir, indexDir, \"index\", moduleId, \"literals\");\n}\n",
|
|
33
|
+
"/**\n * Literal Index Storage\n *\n * Manages the literal index for exact-match boosting.\n * Handles file I/O for persisting literal data.\n *\n * Structure:\n * .raggrep/index/<module>/literals/\n * └── _index.json (literal → chunk mappings)\n */\n\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport type {\n ExtractedLiteral,\n DetectedLiteral,\n LiteralMatch,\n LiteralIndexData,\n LiteralIndexEntry,\n LiteralType,\n LiteralMatchType,\n} from \"../../domain/entities/literal\";\n\n/**\n * Literal Index Manager\n *\n * Manages the literal index for exact-match boosting.\n * Provides O(1) lookup for literal matches.\n */\nexport class LiteralIndex {\n private indexPath: string;\n private moduleId: string;\n\n /**\n * In-memory index: lowercase literal value → entries\n */\n private entries: Map<string, LiteralIndexEntry[]> = new Map();\n\n /**\n * Schema version for compatibility checking.\n */\n private static readonly VERSION = \"1.0.0\";\n\n constructor(indexDir: string, moduleId: string) {\n this.indexPath = path.join(indexDir, \"index\", moduleId, \"literals\");\n this.moduleId = moduleId;\n }\n\n /**\n * Initialize the literal index.\n * Attempts to load from disk, creates empty index if not found.\n */\n async initialize(): Promise<void> {\n try {\n await this.load();\n } catch {\n // Create empty index\n this.entries = new Map();\n }\n }\n\n /**\n * Add literals from a chunk to the index.\n *\n * @param chunkId - Unique identifier for the chunk\n * @param filepath - Path to the file containing the chunk\n * @param literals - Extracted literals from the chunk\n */\n addLiterals(\n chunkId: string,\n filepath: string,\n literals: ExtractedLiteral[]\n ): void {\n for (const literal of literals) {\n const key = literal.value.toLowerCase();\n const existingEntries = this.entries.get(key) || [];\n\n // Check if this chunk already has an entry for this literal\n const existingIndex = existingEntries.findIndex(\n (e) => e.chunkId === chunkId\n );\n\n const newEntry: LiteralIndexEntry = {\n chunkId,\n filepath,\n originalCasing: literal.value,\n type: literal.type,\n matchType: literal.matchType,\n };\n\n if (existingIndex >= 0) {\n // Update existing entry (prefer definition over reference)\n const existing = existingEntries[existingIndex];\n if (shouldReplaceMatchType(existing.matchType, literal.matchType)) {\n existingEntries[existingIndex] = newEntry;\n }\n } else {\n existingEntries.push(newEntry);\n }\n\n this.entries.set(key, existingEntries);\n }\n }\n\n /**\n * Remove all literals for a chunk.\n *\n * @param chunkId - Chunk ID to remove\n */\n removeChunk(chunkId: string): void {\n for (const [key, entries] of this.entries) {\n const filtered = entries.filter((e) => e.chunkId !== chunkId);\n if (filtered.length === 0) {\n this.entries.delete(key);\n } else if (filtered.length !== entries.length) {\n this.entries.set(key, filtered);\n }\n }\n }\n\n /**\n * Remove all literals for a file.\n * Used when a file is re-indexed or deleted.\n *\n * @param filepath - Filepath to remove all literals for\n * @returns Number of literals removed\n */\n removeFile(filepath: string): number {\n let removed = 0;\n for (const [key, entries] of this.entries) {\n const filtered = entries.filter((e) => e.filepath !== filepath);\n const removedCount = entries.length - filtered.length;\n if (removedCount > 0) {\n removed += removedCount;\n if (filtered.length === 0) {\n this.entries.delete(key);\n } else {\n this.entries.set(key, filtered);\n }\n }\n }\n return removed;\n }\n\n /**\n * Find matches for query literals.\n *\n * @param queryLiterals - Literals detected in the query\n * @returns Array of matches with chunk IDs and filepaths\n */\n findMatches(queryLiterals: DetectedLiteral[]): LiteralMatch[] {\n const matches: LiteralMatch[] = [];\n\n for (const queryLiteral of queryLiterals) {\n const key = queryLiteral.value.toLowerCase();\n const entries = this.entries.get(key);\n\n if (!entries) {\n continue;\n }\n\n for (const entry of entries) {\n const exactMatch = entry.originalCasing === queryLiteral.value;\n\n matches.push({\n queryLiteral,\n indexedLiteral: {\n value: entry.originalCasing,\n type: entry.type,\n matchType: entry.matchType,\n },\n chunkId: entry.chunkId,\n filepath: entry.filepath,\n exactMatch,\n });\n }\n }\n\n return matches;\n }\n\n /**\n * Get all chunk IDs that contain a specific literal.\n *\n * @param literal - The literal value to search for\n * @returns Array of chunk IDs\n */\n getChunksForLiteral(literal: string): string[] {\n const key = literal.toLowerCase();\n const entries = this.entries.get(key);\n return entries ? entries.map((e) => e.chunkId) : [];\n }\n\n /**\n * Save the index to disk.\n */\n async save(): Promise<void> {\n // Ensure directory exists\n await fs.mkdir(this.indexPath, { recursive: true });\n\n // Convert Map to serializable format\n const data: LiteralIndexData = {\n version: LiteralIndex.VERSION,\n entries: Object.fromEntries(this.entries),\n };\n\n const indexFile = path.join(this.indexPath, \"_index.json\");\n await fs.writeFile(indexFile, JSON.stringify(data, null, 2));\n }\n\n /**\n * Load the index from disk.\n */\n async load(): Promise<void> {\n const indexFile = path.join(this.indexPath, \"_index.json\");\n const content = await fs.readFile(indexFile, \"utf-8\");\n const data: LiteralIndexData = JSON.parse(content);\n\n // Version check\n if (data.version !== LiteralIndex.VERSION) {\n console.warn(\n `Literal index version mismatch: expected ${LiteralIndex.VERSION}, got ${data.version}`\n );\n }\n\n // Convert back to Map\n this.entries = new Map(Object.entries(data.entries));\n }\n\n /**\n * Check if the index exists on disk.\n */\n async exists(): Promise<boolean> {\n try {\n const indexFile = path.join(this.indexPath, \"_index.json\");\n await fs.access(indexFile);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Clear the index.\n */\n clear(): void {\n this.entries.clear();\n }\n\n /**\n * Get the number of unique literals in the index.\n */\n get size(): number {\n return this.entries.size;\n }\n\n /**\n * Get the total number of literal-to-chunk mappings.\n */\n get totalMappings(): number {\n let count = 0;\n for (const entries of this.entries.values()) {\n count += entries.length;\n }\n return count;\n }\n\n /**\n * Get all unique literals in the index.\n */\n getAllLiterals(): string[] {\n return Array.from(this.entries.keys());\n }\n\n /**\n * Build a map from chunk ID to literal matches for a set of query literals.\n * Convenience method for search integration.\n *\n * @param queryLiterals - Literals detected in the query\n * @returns Map from chunk ID to array of matches\n */\n buildMatchMap(queryLiterals: DetectedLiteral[]): Map<string, LiteralMatch[]> {\n const matches = this.findMatches(queryLiterals);\n const matchMap = new Map<string, LiteralMatch[]>();\n\n for (const match of matches) {\n const existing = matchMap.get(match.chunkId) || [];\n existing.push(match);\n matchMap.set(match.chunkId, existing);\n }\n\n return matchMap;\n }\n}\n\n/**\n * Determine if we should replace an existing match type with a new one.\n * Priority: definition > reference > import\n */\nfunction shouldReplaceMatchType(\n existing: LiteralMatchType,\n incoming: LiteralMatchType\n): boolean {\n const priority: Record<LiteralMatchType, number> = {\n definition: 3,\n reference: 2,\n import: 1,\n };\n return priority[incoming] > priority[existing];\n}\n\n/**\n * Get the literal index path for a module.\n */\nexport function getLiteralIndexPath(\n rootDir: string,\n moduleId: string,\n indexDir: string = \".raggrep\"\n): string {\n return path.join(rootDir, indexDir, \"index\", moduleId, \"literals\");\n}\n",
|
|
34
34
|
"/**\n * Storage Infrastructure\n *\n * Handles persistence of index data to the filesystem.\n */\n\nexport { FileIndexStorage } from \"./fileIndexStorage\";\nexport { SymbolicIndex, getSymbolicPath } from \"./symbolicIndex\";\nexport { LiteralIndex, getLiteralIndexPath } from \"./literalIndex\";\n",
|
|
35
|
-
"/**\n * TypeScript/JavaScript Language Index Module\n *\n * Provides TypeScript/JavaScript-aware code search using:\n * - AST parsing via TypeScript Compiler API\n * - Local text embeddings for semantic similarity\n * - BM25 keyword matching for fast filtering\n *\n * Supported file types: .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts\n *\n * Index location: .raggrep/index/language/typescript/\n */\n\nimport * as path from \"path\";\nimport {\n IndexModule,\n IndexContext,\n SearchContext,\n SearchOptions,\n FileIndex,\n SearchResult,\n Chunk,\n ModuleConfig,\n ChunkType,\n} from \"../../../types\";\nimport {\n getEmbeddings,\n getEmbedding,\n configureEmbeddings,\n getEmbeddingConfig,\n} from \"../../../infrastructure/embeddings\";\nimport {\n cosineSimilarity,\n BM25Index,\n normalizeScore,\n extractKeywords,\n parsePathContext,\n formatPathContextForEmbedding,\n calculateFileTypeBoost,\n extractQueryTerms,\n // Literal boosting\n parseQueryLiterals,\n extractLiterals,\n calculateLiteralContribution,\n applyLiteralBoost,\n LITERAL_SCORING_CONSTANTS,\n} from \"../../../domain/services\";\nimport {\n getEmbeddingConfigFromModule,\n getRaggrepDir,\n} from \"../../../infrastructure/config\";\nimport { parseTypeScriptCode, generateChunkId } from \"./parseCode\";\nimport { SymbolicIndex, LiteralIndex } from \"../../../infrastructure/storage\";\nimport type { EmbeddingConfig, Logger } from \"../../../domain/ports\";\nimport type {\n FileSummary,\n ExtractedLiteral,\n LiteralMatch,\n} from \"../../../domain/entities\";\n\n/** Default minimum similarity score for search results */\nexport const DEFAULT_MIN_SCORE = 0.15;\n\n/** Default number of results to return */\nexport const DEFAULT_TOP_K = 10;\n\n/** Weight for semantic similarity in hybrid scoring (0-1) */\nconst SEMANTIC_WEIGHT = 0.7;\n\n/** Weight for BM25 keyword matching in hybrid scoring (0-1) */\nconst BM25_WEIGHT = 0.3;\n\n/** File extensions supported by this module */\nexport const TYPESCRIPT_EXTENSIONS = [\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n];\n\n/**\n * Check if a file is supported by this module.\n */\nexport function isTypeScriptFile(filepath: string): boolean {\n const ext = path.extname(filepath).toLowerCase();\n return TYPESCRIPT_EXTENSIONS.includes(ext);\n}\n\n// Re-export for module interface\nexport const supportsFile = isTypeScriptFile;\n\n/**\n * Calculate boost based on chunk type.\n * Function/class/interface chunks rank higher than generic blocks.\n */\nfunction calculateChunkTypeBoost(chunk: Chunk): number {\n switch (chunk.type) {\n case \"function\":\n return 0.05;\n case \"class\":\n case \"interface\":\n return 0.04;\n case \"type\":\n case \"enum\":\n return 0.03;\n case \"variable\":\n return 0.02;\n case \"file\":\n case \"block\":\n default:\n return 0;\n }\n}\n\n/**\n * Calculate boost for exported symbols.\n * Public APIs are more likely to be what users are searching for.\n */\nfunction calculateExportBoost(chunk: Chunk): number {\n return chunk.isExported ? 0.03 : 0;\n}\n\n/**\n * Module-specific data stored alongside file index\n */\nexport interface SemanticModuleData {\n embeddings: number[][];\n /** Store the model used for these embeddings for compatibility checking */\n embeddingModel: string;\n [key: string]: unknown; // Index signature for compatibility with Record<string, unknown>\n}\n\nexport class TypeScriptModule implements IndexModule {\n readonly id = \"language/typescript\";\n readonly name = \"TypeScript Search\";\n readonly description =\n \"TypeScript-aware code search with AST parsing and semantic embeddings\";\n readonly version = \"1.0.0\";\n\n supportsFile(filepath: string): boolean {\n return isTypeScriptFile(filepath);\n }\n\n private embeddingConfig: EmbeddingConfig | null = null;\n private symbolicIndex: SymbolicIndex | null = null;\n private literalIndex: LiteralIndex | null = null;\n private pendingSummaries: Map<string, FileSummary> = new Map();\n /** Map from chunkId → { filepath, literals } for building literal index */\n private pendingLiterals: Map<\n string,\n { filepath: string; literals: ExtractedLiteral[] }\n > = new Map();\n private rootDir: string = \"\";\n private logger: Logger | undefined = undefined;\n\n async initialize(config: ModuleConfig): Promise<void> {\n // Extract embedding config from module options\n this.embeddingConfig = getEmbeddingConfigFromModule(config);\n\n // Extract logger from module options (passed from indexer)\n this.logger = config.options?.logger as Logger | undefined;\n\n // Add logger to embedding config\n if (this.logger) {\n this.embeddingConfig = {\n ...this.embeddingConfig,\n logger: this.logger,\n };\n }\n\n // Configure the embedding provider\n configureEmbeddings(this.embeddingConfig);\n\n // Clear pending data for fresh indexing\n this.pendingSummaries.clear();\n this.pendingLiterals.clear();\n }\n\n async indexFile(\n filepath: string,\n content: string,\n ctx: IndexContext\n ): Promise<FileIndex | null> {\n // Only process TypeScript/JavaScript files\n if (!isTypeScriptFile(filepath)) {\n return null;\n }\n\n // Store rootDir for finalize\n this.rootDir = ctx.rootDir;\n\n // Parse code into chunks using TypeScript AST\n const parsedChunks = parseTypeScriptCode(content, filepath);\n\n if (parsedChunks.length === 0) {\n return null;\n }\n\n // Parse path context for structural awareness\n const pathContext = parsePathContext(filepath);\n const pathPrefix = formatPathContextForEmbedding(pathContext);\n\n // Generate embeddings for all chunks with path context\n // Prepending path context helps the embedding model understand file structure\n const chunkContents = parsedChunks.map((c) => {\n // For named chunks, include the name for better embedding\n const namePrefix = c.name ? `${c.name}: ` : \"\";\n return `${pathPrefix} ${namePrefix}${c.content}`;\n });\n const embeddings = await getEmbeddings(chunkContents);\n\n // Create chunks with all metadata\n const chunks: Chunk[] = parsedChunks.map((pc) => ({\n id: generateChunkId(filepath, pc.startLine, pc.endLine),\n content: pc.content,\n startLine: pc.startLine,\n endLine: pc.endLine,\n type: pc.type,\n name: pc.name,\n isExported: pc.isExported,\n jsDoc: pc.jsDoc,\n }));\n\n // Extract references (imports)\n const references = this.extractReferences(content, filepath);\n\n const stats = await ctx.getFileStats(filepath);\n const currentConfig = getEmbeddingConfig();\n\n const moduleData: SemanticModuleData = {\n embeddings,\n embeddingModel: currentConfig.model,\n };\n\n // Build Tier 1 summary for this file\n const chunkTypes = [\n ...new Set(parsedChunks.map((pc) => pc.type)),\n ] as ChunkType[];\n const exports = parsedChunks\n .filter((pc) => pc.isExported && pc.name)\n .map((pc) => pc.name!);\n\n // Extract keywords from all chunks + path keywords\n const allKeywords = new Set<string>();\n for (const pc of parsedChunks) {\n const keywords = extractKeywords(pc.content, pc.name);\n keywords.forEach((k) => allKeywords.add(k));\n }\n // Add path keywords\n pathContext.keywords.forEach((k) => allKeywords.add(k));\n\n const fileSummary: FileSummary = {\n filepath,\n chunkCount: chunks.length,\n chunkTypes,\n keywords: Array.from(allKeywords),\n exports,\n lastModified: stats.lastModified,\n // Include parsed path context for search boosting\n pathContext: {\n segments: pathContext.segments,\n layer: pathContext.layer,\n domain: pathContext.domain,\n depth: pathContext.depth,\n },\n };\n\n // Store summary for finalize\n this.pendingSummaries.set(filepath, fileSummary);\n\n // Extract literals from each chunk for literal boosting\n for (const chunk of chunks) {\n const literals = extractLiterals(chunk);\n if (literals.length > 0) {\n const existing = this.pendingLiterals.get(chunk.id);\n if (existing) {\n existing.literals.push(...literals);\n } else {\n this.pendingLiterals.set(chunk.id, { filepath, literals });\n }\n }\n }\n\n return {\n filepath,\n lastModified: stats.lastModified,\n chunks,\n moduleData,\n references,\n };\n }\n\n /**\n * Finalize indexing by building and saving the symbolic and literal indexes\n */\n async finalize(ctx: IndexContext): Promise<void> {\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n\n // Initialize symbolic index\n this.symbolicIndex = new SymbolicIndex(indexDir, this.id);\n await this.symbolicIndex.initialize();\n\n // Add all pending summaries\n for (const [filepath, summary] of this.pendingSummaries) {\n this.symbolicIndex.addFile(summary);\n }\n\n // Build BM25 index from summaries\n this.symbolicIndex.buildBM25Index();\n\n // Save to disk (creates symbolic/ folder with per-file summaries)\n await this.symbolicIndex.save();\n\n // Initialize and build literal index\n this.literalIndex = new LiteralIndex(indexDir, this.id);\n await this.literalIndex.initialize();\n\n // Add all pending literals\n for (const [chunkId, { filepath, literals }] of this.pendingLiterals) {\n this.literalIndex.addLiterals(chunkId, filepath, literals);\n }\n\n // Save literal index to disk\n await this.literalIndex.save();\n\n // Clear pending data\n this.pendingSummaries.clear();\n this.pendingLiterals.clear();\n }\n\n /**\n * Search the semantic index for chunks matching the query.\n *\n * Uses a three-source approach:\n * 1. Semantic search with embeddings\n * 2. BM25 keyword search\n * 3. Literal index for exact-match boosting\n *\n * @param query - Natural language search query\n * @param ctx - Search context with index access\n * @param options - Search options (topK, minScore, filePatterns)\n * @returns Array of search results sorted by relevance\n */\n async search(\n query: string,\n ctx: SearchContext,\n options: SearchOptions = {}\n ): Promise<SearchResult[]> {\n const {\n topK = DEFAULT_TOP_K,\n minScore = DEFAULT_MIN_SCORE,\n filePatterns,\n } = options;\n\n // Parse query for literals (explicit backticks/quotes and implicit casing)\n const { literals: queryLiterals, remainingQuery } =\n parseQueryLiterals(query);\n\n // Load symbolic index for BM25 scoring (not filtering)\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n const symbolicIndex = new SymbolicIndex(indexDir, this.id);\n\n // Load literal index for exact-match boosting\n const literalIndex = new LiteralIndex(indexDir, this.id);\n let literalMatchMap = new Map<string, LiteralMatch[]>();\n\n try {\n await literalIndex.initialize();\n literalMatchMap = literalIndex.buildMatchMap(queryLiterals);\n } catch {\n // Literal index doesn't exist yet, continue without it\n }\n\n // Get ALL indexed files - semantic search needs to check all embeddings\n // BM25 contributes to the hybrid score but doesn't filter candidates\n let allFiles: string[];\n\n try {\n await symbolicIndex.initialize();\n allFiles = symbolicIndex.getAllFiles();\n } catch {\n // Symbolic index doesn't exist, fall back to loading all files\n allFiles = await ctx.listIndexedFiles();\n }\n\n // Apply file pattern filter if specified\n let filesToSearch = allFiles;\n if (filePatterns && filePatterns.length > 0) {\n filesToSearch = allFiles.filter((filepath) => {\n return filePatterns.some((pattern) => {\n if (pattern.startsWith(\"*.\")) {\n const ext = pattern.slice(1);\n return filepath.endsWith(ext);\n }\n return filepath.includes(pattern);\n });\n });\n }\n\n // Get query embedding for semantic search\n // Use remaining query (without explicit literals) for semantic search\n const semanticQuery = remainingQuery.trim() || query; // Fall back to full query if empty\n const queryEmbedding = await getEmbedding(semanticQuery);\n\n // Load all indexed files and compute scores\n // BM25 is used for keyword scoring, not filtering\n const bm25Index = new BM25Index();\n const allChunksData: Array<{\n filepath: string;\n chunk: Chunk;\n embedding: number[];\n }> = [];\n\n for (const filepath of filesToSearch) {\n const fileIndex = await ctx.loadFileIndex(filepath);\n if (!fileIndex) continue;\n\n const moduleData = fileIndex.moduleData as unknown as SemanticModuleData;\n if (!moduleData?.embeddings) continue;\n\n for (let i = 0; i < fileIndex.chunks.length; i++) {\n const chunk = fileIndex.chunks[i];\n const embedding = moduleData.embeddings[i];\n\n if (!embedding) continue;\n\n allChunksData.push({\n filepath: fileIndex.filepath,\n chunk,\n embedding,\n });\n\n // Add to BM25 index for chunk-level keyword matching\n bm25Index.addDocuments([{ id: chunk.id, content: chunk.content }]);\n }\n }\n\n // Perform BM25 search at chunk level (use full query for BM25)\n const bm25Results = bm25Index.search(query, topK * 3);\n const bm25Scores = new Map<string, number>();\n\n for (const result of bm25Results) {\n bm25Scores.set(result.id, normalizeScore(result.score, 3));\n }\n\n // Extract query terms for path matching and intent detection\n const queryTerms = extractQueryTerms(query);\n\n // Build path boost map from file summaries\n const pathBoosts = new Map<string, number>();\n for (const filepath of filesToSearch) {\n const summary = symbolicIndex.getFileSummary(filepath);\n if (summary?.pathContext) {\n let boost = 0;\n const pathCtx = summary.pathContext;\n\n // Check if query terms match domain\n if (\n pathCtx.domain &&\n queryTerms.some(\n (t) => pathCtx.domain!.includes(t) || t.includes(pathCtx.domain!)\n )\n ) {\n boost += 0.1;\n }\n\n // Check if query terms match layer\n if (\n pathCtx.layer &&\n queryTerms.some(\n (t) => pathCtx.layer!.includes(t) || t.includes(pathCtx.layer!)\n )\n ) {\n boost += 0.05;\n }\n\n // Check if query terms match path segments\n const segmentMatch = pathCtx.segments.some((seg) =>\n queryTerms.some(\n (t) =>\n seg.toLowerCase().includes(t) || t.includes(seg.toLowerCase())\n )\n );\n if (segmentMatch) {\n boost += 0.05;\n }\n\n pathBoosts.set(filepath, boost);\n }\n }\n\n // Calculate hybrid scores for all chunks\n const results: SearchResult[] = [];\n const processedChunkIds = new Set<string>();\n\n for (const { filepath, chunk, embedding } of allChunksData) {\n const semanticScore = cosineSimilarity(queryEmbedding, embedding);\n const bm25Score = bm25Scores.get(chunk.id) || 0;\n const pathBoost = pathBoosts.get(filepath) || 0;\n\n // Additional boosts for ranking improvement\n const fileTypeBoost = calculateFileTypeBoost(filepath, queryTerms);\n const chunkTypeBoost = calculateChunkTypeBoost(chunk);\n const exportBoost = calculateExportBoost(chunk);\n const additiveBoost =\n pathBoost + fileTypeBoost + chunkTypeBoost + exportBoost;\n\n // Base hybrid score: weighted combination of semantic and BM25\n const baseScore =\n SEMANTIC_WEIGHT * semanticScore + BM25_WEIGHT * bm25Score;\n\n // Apply literal boosting (multiplicative)\n const literalMatches = literalMatchMap.get(chunk.id) || [];\n const literalContribution = calculateLiteralContribution(\n literalMatches,\n true // hasSemanticOrBm25\n );\n const boostedScore = applyLiteralBoost(baseScore, literalMatches, true);\n\n // Final score = boosted base score + additive boosts\n const finalScore = boostedScore + additiveBoost;\n\n processedChunkIds.add(chunk.id);\n\n if (\n finalScore >= minScore ||\n bm25Score > 0.3 ||\n literalMatches.length > 0\n ) {\n results.push({\n filepath,\n chunk,\n score: finalScore,\n moduleId: this.id,\n context: {\n semanticScore,\n bm25Score,\n pathBoost,\n fileTypeBoost,\n chunkTypeBoost,\n exportBoost,\n // Literal boosting context\n literalMultiplier: literalContribution.multiplier,\n literalMatchType: literalContribution.bestMatchType,\n literalConfidence: literalContribution.bestConfidence,\n literalMatchCount: literalContribution.matchCount,\n },\n });\n }\n }\n\n // Add literal-only results (chunks found by literal index but not loaded above)\n // This ensures exact matches always surface even if they weren't in the search scope\n const literalOnlyFiles = new Map<string, LiteralMatch[]>();\n\n // Group unprocessed literal matches by filepath\n for (const [chunkId, matches] of literalMatchMap) {\n if (processedChunkIds.has(chunkId)) {\n continue;\n }\n\n // Get filepath from the first match (all matches for same chunkId have same filepath)\n const filepath = matches[0]?.filepath;\n if (!filepath) continue;\n\n const existing = literalOnlyFiles.get(filepath) || [];\n existing.push(...matches);\n literalOnlyFiles.set(filepath, existing);\n }\n\n // Load and score literal-only chunks\n for (const [filepath, matches] of literalOnlyFiles) {\n const fileIndex = await ctx.loadFileIndex(filepath);\n if (!fileIndex) continue;\n\n const moduleData = fileIndex.moduleData as unknown as SemanticModuleData;\n\n // Group matches by chunkId for this file\n const chunkMatches = new Map<string, LiteralMatch[]>();\n for (const match of matches) {\n const existing = chunkMatches.get(match.chunkId) || [];\n existing.push(match);\n chunkMatches.set(match.chunkId, existing);\n }\n\n // Find and score each matched chunk\n for (const [chunkId, chunkLiteralMatches] of chunkMatches) {\n if (processedChunkIds.has(chunkId)) continue;\n\n const chunkIndex = fileIndex.chunks.findIndex((c) => c.id === chunkId);\n if (chunkIndex === -1) continue;\n\n const chunk = fileIndex.chunks[chunkIndex];\n const embedding = moduleData?.embeddings?.[chunkIndex];\n\n // Calculate semantic score if embedding available\n let semanticScore = 0;\n if (embedding) {\n semanticScore = cosineSimilarity(queryEmbedding, embedding);\n }\n\n // BM25 score (chunk wasn't in our search, so typically 0)\n const bm25Score = bm25Scores.get(chunkId) || 0;\n\n // Additional boosts\n const pathBoost = pathBoosts.get(filepath) || 0;\n const fileTypeBoost = calculateFileTypeBoost(filepath, queryTerms);\n const chunkTypeBoost = calculateChunkTypeBoost(chunk);\n const exportBoost = calculateExportBoost(chunk);\n const additiveBoost =\n pathBoost + fileTypeBoost + chunkTypeBoost + exportBoost;\n\n // For literal-only results, use literal scoring\n const literalContribution = calculateLiteralContribution(\n chunkLiteralMatches,\n false // hasSemanticOrBm25 = false (literal-only)\n );\n\n // Use LITERAL_SCORING_CONSTANTS.BASE_SCORE as base for literal-only\n const baseScore =\n semanticScore > 0\n ? SEMANTIC_WEIGHT * semanticScore + BM25_WEIGHT * bm25Score\n : LITERAL_SCORING_CONSTANTS.BASE_SCORE;\n\n const boostedScore = applyLiteralBoost(\n baseScore,\n chunkLiteralMatches,\n semanticScore > 0\n );\n const finalScore = boostedScore + additiveBoost;\n\n processedChunkIds.add(chunkId);\n\n results.push({\n filepath,\n chunk,\n score: finalScore,\n moduleId: this.id,\n context: {\n semanticScore,\n bm25Score,\n pathBoost,\n fileTypeBoost,\n chunkTypeBoost,\n exportBoost,\n literalMultiplier: literalContribution.multiplier,\n literalMatchType: literalContribution.bestMatchType,\n literalConfidence: literalContribution.bestConfidence,\n literalMatchCount: literalContribution.matchCount,\n literalOnly: true, // Mark as literal-only result\n },\n });\n }\n }\n\n // Sort by score descending and take top K\n results.sort((a, b) => b.score - a.score);\n return results.slice(0, topK);\n }\n\n private extractReferences(content: string, filepath: string): string[] {\n const references: string[] = [];\n\n // Extract import statements\n const importRegex = /import\\s+.*?\\s+from\\s+['\"]([^'\"]+)['\"]/g;\n const requireRegex = /require\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const importPath = match[1];\n if (importPath.startsWith(\".\")) {\n const dir = path.dirname(filepath);\n const resolved = path.normalize(path.join(dir, importPath));\n references.push(resolved);\n }\n }\n\n while ((match = requireRegex.exec(content)) !== null) {\n const importPath = match[1];\n if (importPath.startsWith(\".\")) {\n const dir = path.dirname(filepath);\n const resolved = path.normalize(path.join(dir, importPath));\n references.push(resolved);\n }\n }\n\n return references;\n }\n}\n",
|
|
35
|
+
"/**\n * TypeScript/JavaScript Language Index Module\n *\n * Provides TypeScript/JavaScript-aware code search using:\n * - AST parsing via TypeScript Compiler API\n * - Local text embeddings for semantic similarity\n * - BM25 keyword matching for fast filtering\n *\n * Supported file types: .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts\n *\n * Index location: .raggrep/index/language/typescript/\n */\n\nimport * as path from \"path\";\nimport {\n IndexModule,\n IndexContext,\n SearchContext,\n SearchOptions,\n FileIndex,\n SearchResult,\n Chunk,\n ModuleConfig,\n ChunkType,\n} from \"../../../types\";\nimport {\n getEmbeddings,\n getEmbedding,\n configureEmbeddings,\n getEmbeddingConfig,\n} from \"../../../infrastructure/embeddings\";\nimport {\n cosineSimilarity,\n BM25Index,\n normalizeScore,\n extractKeywords,\n parsePathContext,\n formatPathContextForEmbedding,\n calculateFileTypeBoost,\n extractQueryTerms,\n // Literal boosting\n parseQueryLiterals,\n extractLiterals,\n calculateLiteralContribution,\n applyLiteralBoost,\n LITERAL_SCORING_CONSTANTS,\n} from \"../../../domain/services\";\nimport {\n getEmbeddingConfigFromModule,\n getRaggrepDir,\n} from \"../../../infrastructure/config\";\nimport { parseTypeScriptCode, generateChunkId } from \"./parseCode\";\nimport { SymbolicIndex, LiteralIndex } from \"../../../infrastructure/storage\";\nimport type { EmbeddingConfig, Logger } from \"../../../domain/ports\";\nimport type {\n FileSummary,\n ExtractedLiteral,\n LiteralMatch,\n} from \"../../../domain/entities\";\n\n/** Default minimum similarity score for search results */\nexport const DEFAULT_MIN_SCORE = 0.15;\n\n/** Default number of results to return */\nexport const DEFAULT_TOP_K = 10;\n\n/** Weight for semantic similarity in hybrid scoring (0-1) */\nconst SEMANTIC_WEIGHT = 0.7;\n\n/** Weight for BM25 keyword matching in hybrid scoring (0-1) */\nconst BM25_WEIGHT = 0.3;\n\n/** File extensions supported by this module */\nexport const TYPESCRIPT_EXTENSIONS = [\n \".ts\",\n \".tsx\",\n \".js\",\n \".jsx\",\n \".mjs\",\n \".cjs\",\n \".mts\",\n \".cts\",\n];\n\n/**\n * Check if a file is supported by this module.\n */\nexport function isTypeScriptFile(filepath: string): boolean {\n const ext = path.extname(filepath).toLowerCase();\n return TYPESCRIPT_EXTENSIONS.includes(ext);\n}\n\n// Re-export for module interface\nexport const supportsFile = isTypeScriptFile;\n\n/**\n * Calculate boost based on chunk type.\n * Function/class/interface chunks rank higher than generic blocks.\n */\nfunction calculateChunkTypeBoost(chunk: Chunk): number {\n switch (chunk.type) {\n case \"function\":\n return 0.05;\n case \"class\":\n case \"interface\":\n return 0.04;\n case \"type\":\n case \"enum\":\n return 0.03;\n case \"variable\":\n return 0.02;\n case \"file\":\n case \"block\":\n default:\n return 0;\n }\n}\n\n/**\n * Calculate boost for exported symbols.\n * Public APIs are more likely to be what users are searching for.\n */\nfunction calculateExportBoost(chunk: Chunk): number {\n return chunk.isExported ? 0.03 : 0;\n}\n\n/**\n * Module-specific data stored alongside file index\n */\nexport interface SemanticModuleData {\n embeddings: number[][];\n /** Store the model used for these embeddings for compatibility checking */\n embeddingModel: string;\n [key: string]: unknown; // Index signature for compatibility with Record<string, unknown>\n}\n\nexport class TypeScriptModule implements IndexModule {\n readonly id = \"language/typescript\";\n readonly name = \"TypeScript Search\";\n readonly description =\n \"TypeScript-aware code search with AST parsing and semantic embeddings\";\n readonly version = \"1.0.0\";\n\n supportsFile(filepath: string): boolean {\n return isTypeScriptFile(filepath);\n }\n\n private embeddingConfig: EmbeddingConfig | null = null;\n private symbolicIndex: SymbolicIndex | null = null;\n private literalIndex: LiteralIndex | null = null;\n private pendingSummaries: Map<string, FileSummary> = new Map();\n /** Map from chunkId → { filepath, literals } for building literal index */\n private pendingLiterals: Map<\n string,\n { filepath: string; literals: ExtractedLiteral[] }\n > = new Map();\n private rootDir: string = \"\";\n private logger: Logger | undefined = undefined;\n\n async initialize(config: ModuleConfig): Promise<void> {\n // Extract embedding config from module options\n this.embeddingConfig = getEmbeddingConfigFromModule(config);\n\n // Extract logger from module options (passed from indexer)\n this.logger = config.options?.logger as Logger | undefined;\n\n // Add logger to embedding config\n if (this.logger) {\n this.embeddingConfig = {\n ...this.embeddingConfig,\n logger: this.logger,\n };\n }\n\n // Configure the embedding provider\n configureEmbeddings(this.embeddingConfig);\n\n // Clear pending data for fresh indexing\n this.pendingSummaries.clear();\n this.pendingLiterals.clear();\n }\n\n async indexFile(\n filepath: string,\n content: string,\n ctx: IndexContext\n ): Promise<FileIndex | null> {\n // Only process TypeScript/JavaScript files\n if (!isTypeScriptFile(filepath)) {\n return null;\n }\n\n // Store rootDir for finalize\n this.rootDir = ctx.rootDir;\n\n // Parse code into chunks using TypeScript AST\n const parsedChunks = parseTypeScriptCode(content, filepath);\n\n if (parsedChunks.length === 0) {\n return null;\n }\n\n // Parse path context for structural awareness\n const pathContext = parsePathContext(filepath);\n const pathPrefix = formatPathContextForEmbedding(pathContext);\n\n // Generate embeddings for all chunks with path context\n // Prepending path context helps the embedding model understand file structure\n const chunkContents = parsedChunks.map((c) => {\n // For named chunks, include the name for better embedding\n const namePrefix = c.name ? `${c.name}: ` : \"\";\n return `${pathPrefix} ${namePrefix}${c.content}`;\n });\n const embeddings = await getEmbeddings(chunkContents);\n\n // Create chunks with all metadata\n const chunks: Chunk[] = parsedChunks.map((pc) => ({\n id: generateChunkId(filepath, pc.startLine, pc.endLine),\n content: pc.content,\n startLine: pc.startLine,\n endLine: pc.endLine,\n type: pc.type,\n name: pc.name,\n isExported: pc.isExported,\n jsDoc: pc.jsDoc,\n }));\n\n // Extract references (imports)\n const references = this.extractReferences(content, filepath);\n\n const stats = await ctx.getFileStats(filepath);\n const currentConfig = getEmbeddingConfig();\n\n const moduleData: SemanticModuleData = {\n embeddings,\n embeddingModel: currentConfig.model,\n };\n\n // Build Tier 1 summary for this file\n const chunkTypes = [\n ...new Set(parsedChunks.map((pc) => pc.type)),\n ] as ChunkType[];\n const exports = parsedChunks\n .filter((pc) => pc.isExported && pc.name)\n .map((pc) => pc.name!);\n\n // Extract keywords from all chunks + path keywords\n const allKeywords = new Set<string>();\n for (const pc of parsedChunks) {\n const keywords = extractKeywords(pc.content, pc.name);\n keywords.forEach((k) => allKeywords.add(k));\n }\n // Add path keywords\n pathContext.keywords.forEach((k) => allKeywords.add(k));\n\n const fileSummary: FileSummary = {\n filepath,\n chunkCount: chunks.length,\n chunkTypes,\n keywords: Array.from(allKeywords),\n exports,\n lastModified: stats.lastModified,\n // Include parsed path context for search boosting\n pathContext: {\n segments: pathContext.segments,\n layer: pathContext.layer,\n domain: pathContext.domain,\n depth: pathContext.depth,\n },\n };\n\n // Store summary for finalize\n this.pendingSummaries.set(filepath, fileSummary);\n\n // Extract literals from each chunk for literal boosting\n for (const chunk of chunks) {\n const literals = extractLiterals(chunk);\n if (literals.length > 0) {\n const existing = this.pendingLiterals.get(chunk.id);\n if (existing) {\n existing.literals.push(...literals);\n } else {\n this.pendingLiterals.set(chunk.id, { filepath, literals });\n }\n }\n }\n\n return {\n filepath,\n lastModified: stats.lastModified,\n chunks,\n moduleData,\n references,\n };\n }\n\n /**\n * Finalize indexing by building and saving the symbolic and literal indexes\n */\n async finalize(ctx: IndexContext): Promise<void> {\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n\n // Initialize symbolic index\n this.symbolicIndex = new SymbolicIndex(indexDir, this.id);\n await this.symbolicIndex.initialize();\n\n // Add all pending summaries\n for (const [filepath, summary] of this.pendingSummaries) {\n this.symbolicIndex.addFile(summary);\n }\n\n // Build BM25 index from summaries\n this.symbolicIndex.buildBM25Index();\n\n // Save to disk (creates symbolic/ folder with per-file summaries)\n await this.symbolicIndex.save();\n\n // Initialize and build literal index\n this.literalIndex = new LiteralIndex(indexDir, this.id);\n await this.literalIndex.initialize();\n\n // Get all filepaths that were indexed in this run\n // (both from summaries for any indexed files and from literals for chunks with names)\n const indexedFilepaths = new Set<string>();\n for (const filepath of this.pendingSummaries.keys()) {\n indexedFilepaths.add(filepath);\n }\n for (const { filepath } of this.pendingLiterals.values()) {\n indexedFilepaths.add(filepath);\n }\n\n // Remove old literals for all files that were re-indexed\n // This ensures stale literals (from renamed/deleted functions) are removed\n for (const filepath of indexedFilepaths) {\n this.literalIndex.removeFile(filepath);\n }\n\n // Add all pending literals (fresh data from this indexing run)\n for (const [chunkId, { filepath, literals }] of this.pendingLiterals) {\n this.literalIndex.addLiterals(chunkId, filepath, literals);\n }\n\n // Save literal index to disk\n await this.literalIndex.save();\n\n // Clear pending data\n this.pendingSummaries.clear();\n this.pendingLiterals.clear();\n }\n\n /**\n * Search the semantic index for chunks matching the query.\n *\n * Uses a three-source approach:\n * 1. Semantic search with embeddings\n * 2. BM25 keyword search\n * 3. Literal index for exact-match boosting\n *\n * @param query - Natural language search query\n * @param ctx - Search context with index access\n * @param options - Search options (topK, minScore, filePatterns)\n * @returns Array of search results sorted by relevance\n */\n async search(\n query: string,\n ctx: SearchContext,\n options: SearchOptions = {}\n ): Promise<SearchResult[]> {\n const {\n topK = DEFAULT_TOP_K,\n minScore = DEFAULT_MIN_SCORE,\n filePatterns,\n } = options;\n\n // Parse query for literals (explicit backticks/quotes and implicit casing)\n const { literals: queryLiterals, remainingQuery } =\n parseQueryLiterals(query);\n\n // Load symbolic index for BM25 scoring (not filtering)\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n const symbolicIndex = new SymbolicIndex(indexDir, this.id);\n\n // Load literal index for exact-match boosting\n const literalIndex = new LiteralIndex(indexDir, this.id);\n let literalMatchMap = new Map<string, LiteralMatch[]>();\n\n try {\n await literalIndex.initialize();\n literalMatchMap = literalIndex.buildMatchMap(queryLiterals);\n } catch {\n // Literal index doesn't exist yet, continue without it\n }\n\n // Get ALL indexed files - semantic search needs to check all embeddings\n // BM25 contributes to the hybrid score but doesn't filter candidates\n let allFiles: string[];\n\n try {\n await symbolicIndex.initialize();\n allFiles = symbolicIndex.getAllFiles();\n } catch {\n // Symbolic index doesn't exist, fall back to loading all files\n allFiles = await ctx.listIndexedFiles();\n }\n\n // Apply file pattern filter if specified\n let filesToSearch = allFiles;\n if (filePatterns && filePatterns.length > 0) {\n filesToSearch = allFiles.filter((filepath) => {\n return filePatterns.some((pattern) => {\n if (pattern.startsWith(\"*.\")) {\n const ext = pattern.slice(1);\n return filepath.endsWith(ext);\n }\n return filepath.includes(pattern);\n });\n });\n }\n\n // Get query embedding for semantic search\n // Use remaining query (without explicit literals) for semantic search\n const semanticQuery = remainingQuery.trim() || query; // Fall back to full query if empty\n const queryEmbedding = await getEmbedding(semanticQuery);\n\n // Load all indexed files and compute scores\n // BM25 is used for keyword scoring, not filtering\n const bm25Index = new BM25Index();\n const allChunksData: Array<{\n filepath: string;\n chunk: Chunk;\n embedding: number[];\n }> = [];\n\n for (const filepath of filesToSearch) {\n const fileIndex = await ctx.loadFileIndex(filepath);\n if (!fileIndex) continue;\n\n const moduleData = fileIndex.moduleData as unknown as SemanticModuleData;\n if (!moduleData?.embeddings) continue;\n\n for (let i = 0; i < fileIndex.chunks.length; i++) {\n const chunk = fileIndex.chunks[i];\n const embedding = moduleData.embeddings[i];\n\n if (!embedding) continue;\n\n allChunksData.push({\n filepath: fileIndex.filepath,\n chunk,\n embedding,\n });\n\n // Add to BM25 index for chunk-level keyword matching\n bm25Index.addDocuments([{ id: chunk.id, content: chunk.content }]);\n }\n }\n\n // Perform BM25 search at chunk level (use full query for BM25)\n const bm25Results = bm25Index.search(query, topK * 3);\n const bm25Scores = new Map<string, number>();\n\n for (const result of bm25Results) {\n bm25Scores.set(result.id, normalizeScore(result.score, 3));\n }\n\n // Extract query terms for path matching and intent detection\n const queryTerms = extractQueryTerms(query);\n\n // Build path boost map from file summaries\n const pathBoosts = new Map<string, number>();\n for (const filepath of filesToSearch) {\n const summary = symbolicIndex.getFileSummary(filepath);\n if (summary?.pathContext) {\n let boost = 0;\n const pathCtx = summary.pathContext;\n\n // Check if query terms match domain\n if (\n pathCtx.domain &&\n queryTerms.some(\n (t) => pathCtx.domain!.includes(t) || t.includes(pathCtx.domain!)\n )\n ) {\n boost += 0.1;\n }\n\n // Check if query terms match layer\n if (\n pathCtx.layer &&\n queryTerms.some(\n (t) => pathCtx.layer!.includes(t) || t.includes(pathCtx.layer!)\n )\n ) {\n boost += 0.05;\n }\n\n // Check if query terms match path segments\n const segmentMatch = pathCtx.segments.some((seg) =>\n queryTerms.some(\n (t) =>\n seg.toLowerCase().includes(t) || t.includes(seg.toLowerCase())\n )\n );\n if (segmentMatch) {\n boost += 0.05;\n }\n\n pathBoosts.set(filepath, boost);\n }\n }\n\n // Calculate hybrid scores for all chunks\n const results: SearchResult[] = [];\n const processedChunkIds = new Set<string>();\n\n for (const { filepath, chunk, embedding } of allChunksData) {\n const semanticScore = cosineSimilarity(queryEmbedding, embedding);\n const bm25Score = bm25Scores.get(chunk.id) || 0;\n const pathBoost = pathBoosts.get(filepath) || 0;\n\n // Additional boosts for ranking improvement\n const fileTypeBoost = calculateFileTypeBoost(filepath, queryTerms);\n const chunkTypeBoost = calculateChunkTypeBoost(chunk);\n const exportBoost = calculateExportBoost(chunk);\n const additiveBoost =\n pathBoost + fileTypeBoost + chunkTypeBoost + exportBoost;\n\n // Base hybrid score: weighted combination of semantic and BM25\n const baseScore =\n SEMANTIC_WEIGHT * semanticScore + BM25_WEIGHT * bm25Score;\n\n // Apply literal boosting (multiplicative)\n const literalMatches = literalMatchMap.get(chunk.id) || [];\n const literalContribution = calculateLiteralContribution(\n literalMatches,\n true // hasSemanticOrBm25\n );\n const boostedScore = applyLiteralBoost(baseScore, literalMatches, true);\n\n // Final score = boosted base score + additive boosts\n const finalScore = boostedScore + additiveBoost;\n\n processedChunkIds.add(chunk.id);\n\n if (\n finalScore >= minScore ||\n bm25Score > 0.3 ||\n literalMatches.length > 0\n ) {\n results.push({\n filepath,\n chunk,\n score: finalScore,\n moduleId: this.id,\n context: {\n semanticScore,\n bm25Score,\n pathBoost,\n fileTypeBoost,\n chunkTypeBoost,\n exportBoost,\n // Literal boosting context\n literalMultiplier: literalContribution.multiplier,\n literalMatchType: literalContribution.bestMatchType,\n literalConfidence: literalContribution.bestConfidence,\n literalMatchCount: literalContribution.matchCount,\n },\n });\n }\n }\n\n // Add literal-only results (chunks found by literal index but not loaded above)\n // This ensures exact matches always surface even if they weren't in the search scope\n const literalOnlyFiles = new Map<string, LiteralMatch[]>();\n\n // Group unprocessed literal matches by filepath\n for (const [chunkId, matches] of literalMatchMap) {\n if (processedChunkIds.has(chunkId)) {\n continue;\n }\n\n // Get filepath from the first match (all matches for same chunkId have same filepath)\n const filepath = matches[0]?.filepath;\n if (!filepath) continue;\n\n const existing = literalOnlyFiles.get(filepath) || [];\n existing.push(...matches);\n literalOnlyFiles.set(filepath, existing);\n }\n\n // Load and score literal-only chunks\n for (const [filepath, matches] of literalOnlyFiles) {\n const fileIndex = await ctx.loadFileIndex(filepath);\n if (!fileIndex) continue;\n\n const moduleData = fileIndex.moduleData as unknown as SemanticModuleData;\n\n // Group matches by chunkId for this file\n const chunkMatches = new Map<string, LiteralMatch[]>();\n for (const match of matches) {\n const existing = chunkMatches.get(match.chunkId) || [];\n existing.push(match);\n chunkMatches.set(match.chunkId, existing);\n }\n\n // Find and score each matched chunk\n for (const [chunkId, chunkLiteralMatches] of chunkMatches) {\n if (processedChunkIds.has(chunkId)) continue;\n\n const chunkIndex = fileIndex.chunks.findIndex((c) => c.id === chunkId);\n if (chunkIndex === -1) continue;\n\n const chunk = fileIndex.chunks[chunkIndex];\n const embedding = moduleData?.embeddings?.[chunkIndex];\n\n // Calculate semantic score if embedding available\n let semanticScore = 0;\n if (embedding) {\n semanticScore = cosineSimilarity(queryEmbedding, embedding);\n }\n\n // BM25 score (chunk wasn't in our search, so typically 0)\n const bm25Score = bm25Scores.get(chunkId) || 0;\n\n // Additional boosts\n const pathBoost = pathBoosts.get(filepath) || 0;\n const fileTypeBoost = calculateFileTypeBoost(filepath, queryTerms);\n const chunkTypeBoost = calculateChunkTypeBoost(chunk);\n const exportBoost = calculateExportBoost(chunk);\n const additiveBoost =\n pathBoost + fileTypeBoost + chunkTypeBoost + exportBoost;\n\n // For literal-only results, use literal scoring\n const literalContribution = calculateLiteralContribution(\n chunkLiteralMatches,\n false // hasSemanticOrBm25 = false (literal-only)\n );\n\n // Use LITERAL_SCORING_CONSTANTS.BASE_SCORE as base for literal-only\n const baseScore =\n semanticScore > 0\n ? SEMANTIC_WEIGHT * semanticScore + BM25_WEIGHT * bm25Score\n : LITERAL_SCORING_CONSTANTS.BASE_SCORE;\n\n const boostedScore = applyLiteralBoost(\n baseScore,\n chunkLiteralMatches,\n semanticScore > 0\n );\n const finalScore = boostedScore + additiveBoost;\n\n processedChunkIds.add(chunkId);\n\n results.push({\n filepath,\n chunk,\n score: finalScore,\n moduleId: this.id,\n context: {\n semanticScore,\n bm25Score,\n pathBoost,\n fileTypeBoost,\n chunkTypeBoost,\n exportBoost,\n literalMultiplier: literalContribution.multiplier,\n literalMatchType: literalContribution.bestMatchType,\n literalConfidence: literalContribution.bestConfidence,\n literalMatchCount: literalContribution.matchCount,\n literalOnly: true, // Mark as literal-only result\n },\n });\n }\n }\n\n // Sort by score descending and take top K\n results.sort((a, b) => b.score - a.score);\n return results.slice(0, topK);\n }\n\n private extractReferences(content: string, filepath: string): string[] {\n const references: string[] = [];\n\n // Extract import statements\n const importRegex = /import\\s+.*?\\s+from\\s+['\"]([^'\"]+)['\"]/g;\n const requireRegex = /require\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g;\n\n let match;\n while ((match = importRegex.exec(content)) !== null) {\n const importPath = match[1];\n if (importPath.startsWith(\".\")) {\n const dir = path.dirname(filepath);\n const resolved = path.normalize(path.join(dir, importPath));\n references.push(resolved);\n }\n }\n\n while ((match = requireRegex.exec(content)) !== null) {\n const importPath = match[1];\n if (importPath.startsWith(\".\")) {\n const dir = path.dirname(filepath);\n const resolved = path.normalize(path.join(dir, importPath));\n references.push(resolved);\n }\n }\n\n return references;\n }\n}\n",
|
|
36
36
|
"/**\n * JSON Data Index Module\n *\n * Provides JSON file search using:\n * - JSON structure parsing\n * - Local text embeddings for semantic similarity\n * - Key/value extraction for better search\n *\n * Supported file types: .json\n *\n * Index location: .raggrep/index/data/json/\n */\n\nimport * as path from \"path\";\nimport {\n IndexModule,\n IndexContext,\n SearchContext,\n SearchOptions,\n FileIndex,\n SearchResult,\n Chunk,\n ModuleConfig,\n} from \"../../../types\";\nimport {\n getEmbeddings,\n getEmbedding,\n configureEmbeddings,\n getEmbeddingConfig,\n} from \"../../../infrastructure/embeddings\";\nimport {\n cosineSimilarity,\n BM25Index,\n normalizeScore,\n extractQueryTerms,\n createLineBasedChunks,\n generateChunkId,\n} from \"../../../domain/services\";\nimport {\n getEmbeddingConfigFromModule,\n getRaggrepDir,\n} from \"../../../infrastructure/config\";\nimport { SymbolicIndex } from \"../../../infrastructure/storage\";\nimport type { EmbeddingConfig, Logger } from \"../../../domain/ports\";\nimport type { FileSummary } from \"../../../domain/entities\";\n\n/** Default minimum similarity score for search results */\nexport const DEFAULT_MIN_SCORE = 0.15;\n\n/** Default number of results to return */\nexport const DEFAULT_TOP_K = 10;\n\n/** Weight for semantic similarity in hybrid scoring (0-1) */\nconst SEMANTIC_WEIGHT = 0.7;\n\n/** Weight for BM25 keyword matching in hybrid scoring (0-1) */\nconst BM25_WEIGHT = 0.3;\n\n/** File extensions supported by this module */\nexport const JSON_EXTENSIONS = [\".json\"];\n\n/**\n * Check if a file is supported by this module.\n */\nexport function isJsonFile(filepath: string): boolean {\n const ext = path.extname(filepath).toLowerCase();\n return JSON_EXTENSIONS.includes(ext);\n}\n\n// Re-export for module interface\nexport const supportsFile = isJsonFile;\n\n/**\n * Extract all keys from a JSON object recursively.\n */\nfunction extractJsonKeys(obj: unknown, prefix = \"\"): string[] {\n const keys: string[] = [];\n\n if (obj === null || obj === undefined) {\n return keys;\n }\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n keys.push(...extractJsonKeys(item, `${prefix}[${index}]`));\n });\n } else if (typeof obj === \"object\") {\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n keys.push(key);\n keys.push(...extractJsonKeys(value, fullKey));\n }\n }\n\n return keys;\n}\n\n/**\n * Extract keywords from JSON content for BM25 search.\n */\nfunction extractJsonKeywords(content: string): string[] {\n try {\n const parsed = JSON.parse(content);\n const keys = extractJsonKeys(parsed);\n\n // Also extract string values\n const stringValues: string[] = [];\n const extractStrings = (obj: unknown): void => {\n if (typeof obj === \"string\") {\n // Split camelCase and extract words\n const words = obj\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .toLowerCase()\n .split(/\\s+/)\n .filter((w) => w.length > 2);\n stringValues.push(...words);\n } else if (Array.isArray(obj)) {\n obj.forEach(extractStrings);\n } else if (obj && typeof obj === \"object\") {\n Object.values(obj as Record<string, unknown>).forEach(extractStrings);\n }\n };\n extractStrings(parsed);\n\n return [...new Set([...keys, ...stringValues])];\n } catch {\n // If JSON parsing fails, return empty keywords\n return [];\n }\n}\n\n/**\n * Module-specific data stored alongside file index\n */\nexport interface JsonModuleData {\n embeddings: number[][];\n embeddingModel: string;\n jsonKeys: string[];\n [key: string]: unknown;\n}\n\nexport class JsonModule implements IndexModule {\n readonly id = \"data/json\";\n readonly name = \"JSON Search\";\n readonly description = \"JSON file search with structure-aware indexing\";\n readonly version = \"1.0.0\";\n\n supportsFile(filepath: string): boolean {\n return isJsonFile(filepath);\n }\n\n private embeddingConfig: EmbeddingConfig | null = null;\n private symbolicIndex: SymbolicIndex | null = null;\n private pendingSummaries: Map<string, FileSummary> = new Map();\n private rootDir: string = \"\";\n private logger: Logger | undefined = undefined;\n\n async initialize(config: ModuleConfig): Promise<void> {\n this.embeddingConfig = getEmbeddingConfigFromModule(config);\n this.logger = config.options?.logger as Logger | undefined;\n\n if (this.logger) {\n this.embeddingConfig = {\n ...this.embeddingConfig,\n logger: this.logger,\n };\n }\n\n configureEmbeddings(this.embeddingConfig);\n this.pendingSummaries.clear();\n }\n\n async indexFile(\n filepath: string,\n content: string,\n ctx: IndexContext\n ): Promise<FileIndex | null> {\n // Only process JSON files\n if (!isJsonFile(filepath)) {\n return null;\n }\n\n this.rootDir = ctx.rootDir;\n\n // Create chunks from JSON content\n const textChunks = createLineBasedChunks(content, {\n chunkSize: 50,\n overlap: 10,\n });\n\n if (textChunks.length === 0) {\n return null;\n }\n\n // Generate embeddings for chunks\n const chunkContents = textChunks.map((c) => {\n // Include file context in embedding\n const filename = path.basename(filepath);\n return `${filename}: ${c.content}`;\n });\n const embeddings = await getEmbeddings(chunkContents);\n\n // Create chunks with metadata\n const chunks: Chunk[] = textChunks.map((tc, i) => ({\n id: generateChunkId(filepath, tc.startLine, tc.endLine),\n content: tc.content,\n startLine: tc.startLine,\n endLine: tc.endLine,\n type: tc.type,\n }));\n\n // Extract JSON keys for metadata\n const jsonKeys = extractJsonKeys(\n (() => {\n try {\n return JSON.parse(content);\n } catch {\n return {};\n }\n })()\n );\n\n const stats = await ctx.getFileStats(filepath);\n const currentConfig = getEmbeddingConfig();\n\n const moduleData: JsonModuleData = {\n embeddings,\n embeddingModel: currentConfig.model,\n jsonKeys,\n };\n\n // Build file summary\n const keywords = extractJsonKeywords(content);\n\n const fileSummary: FileSummary = {\n filepath,\n chunkCount: chunks.length,\n chunkTypes: [\"file\"],\n keywords,\n exports: [], // JSON files don't have exports\n lastModified: stats.lastModified,\n };\n\n this.pendingSummaries.set(filepath, fileSummary);\n\n return {\n filepath,\n lastModified: stats.lastModified,\n chunks,\n moduleData,\n };\n }\n\n async finalize(ctx: IndexContext): Promise<void> {\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n\n this.symbolicIndex = new SymbolicIndex(indexDir, this.id);\n await this.symbolicIndex.initialize();\n\n for (const [filepath, summary] of this.pendingSummaries) {\n this.symbolicIndex.addFile(summary);\n }\n\n this.symbolicIndex.buildBM25Index();\n await this.symbolicIndex.save();\n this.pendingSummaries.clear();\n }\n\n async search(\n query: string,\n ctx: SearchContext,\n options: SearchOptions = {}\n ): Promise<SearchResult[]> {\n const {\n topK = DEFAULT_TOP_K,\n minScore = DEFAULT_MIN_SCORE,\n filePatterns,\n } = options;\n\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n const symbolicIndex = new SymbolicIndex(indexDir, this.id);\n\n let allFiles: string[];\n\n try {\n await symbolicIndex.initialize();\n allFiles = symbolicIndex.getAllFiles();\n } catch {\n allFiles = await ctx.listIndexedFiles();\n }\n\n // Filter to JSON files only\n let filesToSearch = allFiles.filter((f) => isJsonFile(f));\n\n if (filePatterns && filePatterns.length > 0) {\n filesToSearch = filesToSearch.filter((filepath) => {\n return filePatterns.some((pattern) => {\n if (pattern.startsWith(\"*.\")) {\n const ext = pattern.slice(1);\n return filepath.endsWith(ext);\n }\n return filepath.includes(pattern);\n });\n });\n }\n\n const queryEmbedding = await getEmbedding(query);\n const bm25Index = new BM25Index();\n const allChunksData: Array<{\n filepath: string;\n chunk: Chunk;\n embedding: number[];\n }> = [];\n\n for (const filepath of filesToSearch) {\n const fileIndex = await ctx.loadFileIndex(filepath);\n if (!fileIndex) continue;\n\n const moduleData = fileIndex.moduleData as unknown as JsonModuleData;\n if (!moduleData?.embeddings) continue;\n\n for (let i = 0; i < fileIndex.chunks.length; i++) {\n const chunk = fileIndex.chunks[i];\n const embedding = moduleData.embeddings[i];\n\n if (!embedding) continue;\n\n allChunksData.push({\n filepath: fileIndex.filepath,\n chunk,\n embedding,\n });\n\n bm25Index.addDocuments([{ id: chunk.id, content: chunk.content }]);\n }\n }\n\n const bm25Results = bm25Index.search(query, topK * 3);\n const bm25Scores = new Map<string, number>();\n\n for (const result of bm25Results) {\n bm25Scores.set(result.id, normalizeScore(result.score, 3));\n }\n\n const queryTerms = extractQueryTerms(query);\n const results: SearchResult[] = [];\n\n for (const { filepath, chunk, embedding } of allChunksData) {\n const semanticScore = cosineSimilarity(queryEmbedding, embedding);\n const bm25Score = bm25Scores.get(chunk.id) || 0;\n\n const hybridScore =\n SEMANTIC_WEIGHT * semanticScore + BM25_WEIGHT * bm25Score;\n\n if (hybridScore >= minScore || bm25Score > 0.3) {\n results.push({\n filepath,\n chunk,\n score: hybridScore,\n moduleId: this.id,\n context: {\n semanticScore,\n bm25Score,\n },\n });\n }\n }\n\n results.sort((a, b) => b.score - a.score);\n return results.slice(0, topK);\n }\n}\n",
|
|
37
37
|
"/**\n * Markdown Documentation Index Module\n *\n * Provides Markdown file search using:\n * - Heading-based section parsing\n * - Local text embeddings for semantic similarity\n * - Structure-aware chunking\n *\n * Supported file types: .md\n *\n * Index location: .raggrep/index/docs/markdown/\n */\n\nimport * as path from \"path\";\nimport {\n IndexModule,\n IndexContext,\n SearchContext,\n SearchOptions,\n FileIndex,\n SearchResult,\n Chunk,\n ModuleConfig,\n} from \"../../../types\";\nimport {\n getEmbeddings,\n getEmbedding,\n configureEmbeddings,\n getEmbeddingConfig,\n} from \"../../../infrastructure/embeddings\";\nimport {\n cosineSimilarity,\n BM25Index,\n normalizeScore,\n extractQueryTerms,\n generateChunkId,\n} from \"../../../domain/services\";\nimport {\n getEmbeddingConfigFromModule,\n getRaggrepDir,\n} from \"../../../infrastructure/config\";\nimport { SymbolicIndex } from \"../../../infrastructure/storage\";\nimport type { EmbeddingConfig, Logger } from \"../../../domain/ports\";\nimport type { FileSummary, ChunkType } from \"../../../domain/entities\";\n\n/** Default minimum similarity score for search results */\nexport const DEFAULT_MIN_SCORE = 0.15;\n\n/** Default number of results to return */\nexport const DEFAULT_TOP_K = 10;\n\n/** Weight for semantic similarity in hybrid scoring (0-1) */\nconst SEMANTIC_WEIGHT = 0.7;\n\n/** Weight for BM25 keyword matching in hybrid scoring (0-1) */\nconst BM25_WEIGHT = 0.3;\n\n/** File extensions supported by this module */\nexport const MARKDOWN_EXTENSIONS = [\".md\", \".txt\"];\n\n/**\n * Check if a file is supported by this module.\n */\nexport function isMarkdownFile(filepath: string): boolean {\n const ext = path.extname(filepath).toLowerCase();\n return MARKDOWN_EXTENSIONS.includes(ext);\n}\n\n// Re-export for module interface\nexport const supportsFile = isMarkdownFile;\n\n/**\n * Represents a parsed section from a Markdown document.\n */\ninterface MarkdownSection {\n /** The heading text (without #) */\n heading: string;\n /** The heading level (1-6) */\n level: number;\n /** The content under this heading */\n content: string;\n /** 1-based start line number */\n startLine: number;\n /** 1-based end line number */\n endLine: number;\n}\n\n/**\n * Parse Markdown content into sections based on headings.\n */\nfunction parseMarkdownSections(content: string): MarkdownSection[] {\n const lines = content.split(\"\\n\");\n const sections: MarkdownSection[] = [];\n\n let currentSection: MarkdownSection | null = null;\n let currentContent: string[] = [];\n let startLine = 1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const headingMatch = line.match(/^(#{1,6})\\s+(.+)$/);\n\n if (headingMatch) {\n // Save previous section\n if (currentSection) {\n currentSection.content = currentContent.join(\"\\n\").trim();\n currentSection.endLine = i; // Previous line\n if (currentSection.content || currentSection.heading) {\n sections.push(currentSection);\n }\n } else if (currentContent.length > 0) {\n // Content before first heading\n sections.push({\n heading: \"\",\n level: 0,\n content: currentContent.join(\"\\n\").trim(),\n startLine: 1,\n endLine: i,\n });\n }\n\n // Start new section\n currentSection = {\n heading: headingMatch[2],\n level: headingMatch[1].length,\n content: \"\",\n startLine: i + 1,\n endLine: lines.length,\n };\n currentContent = [];\n } else {\n currentContent.push(line);\n }\n }\n\n // Save final section\n if (currentSection) {\n currentSection.content = currentContent.join(\"\\n\").trim();\n currentSection.endLine = lines.length;\n if (currentSection.content || currentSection.heading) {\n sections.push(currentSection);\n }\n } else if (currentContent.length > 0) {\n // No headings at all\n sections.push({\n heading: \"\",\n level: 0,\n content: currentContent.join(\"\\n\").trim(),\n startLine: 1,\n endLine: lines.length,\n });\n }\n\n return sections;\n}\n\n/**\n * Extract keywords from Markdown content.\n */\nfunction extractMarkdownKeywords(content: string): string[] {\n const keywords: string[] = [];\n\n // Extract headings\n const headingMatches = content.matchAll(/^#{1,6}\\s+(.+)$/gm);\n for (const match of headingMatches) {\n const heading = match[1].toLowerCase();\n const words = heading.split(/\\s+/).filter((w) => w.length > 2);\n keywords.push(...words);\n }\n\n // Extract bold/emphasized text\n const emphasisMatches = content.matchAll(/\\*\\*(.+?)\\*\\*|\\*(.+?)\\*/g);\n for (const match of emphasisMatches) {\n const text = (match[1] || match[2] || \"\").toLowerCase();\n const words = text.split(/\\s+/).filter((w) => w.length > 2);\n keywords.push(...words);\n }\n\n // Extract code blocks (inline)\n const codeMatches = content.matchAll(/`([^`]+)`/g);\n for (const match of codeMatches) {\n const code = match[1].toLowerCase();\n if (code.length > 2 && code.length < 50) {\n keywords.push(code);\n }\n }\n\n // Extract links\n const linkMatches = content.matchAll(/\\[([^\\]]+)\\]/g);\n for (const match of linkMatches) {\n const text = match[1].toLowerCase();\n const words = text.split(/\\s+/).filter((w) => w.length > 2);\n keywords.push(...words);\n }\n\n return [...new Set(keywords)];\n}\n\n/**\n * Module-specific data stored alongside file index\n */\nexport interface MarkdownModuleData {\n embeddings: number[][];\n embeddingModel: string;\n headings: string[];\n [key: string]: unknown;\n}\n\nexport class MarkdownModule implements IndexModule {\n readonly id = \"docs/markdown\";\n readonly name = \"Markdown Search\";\n readonly description =\n \"Markdown documentation search with section-aware indexing\";\n readonly version = \"1.0.0\";\n\n supportsFile(filepath: string): boolean {\n return isMarkdownFile(filepath);\n }\n\n private embeddingConfig: EmbeddingConfig | null = null;\n private symbolicIndex: SymbolicIndex | null = null;\n private pendingSummaries: Map<string, FileSummary> = new Map();\n private rootDir: string = \"\";\n private logger: Logger | undefined = undefined;\n\n async initialize(config: ModuleConfig): Promise<void> {\n this.embeddingConfig = getEmbeddingConfigFromModule(config);\n this.logger = config.options?.logger as Logger | undefined;\n\n if (this.logger) {\n this.embeddingConfig = {\n ...this.embeddingConfig,\n logger: this.logger,\n };\n }\n\n configureEmbeddings(this.embeddingConfig);\n this.pendingSummaries.clear();\n }\n\n async indexFile(\n filepath: string,\n content: string,\n ctx: IndexContext\n ): Promise<FileIndex | null> {\n // Only process Markdown files\n if (!isMarkdownFile(filepath)) {\n return null;\n }\n\n this.rootDir = ctx.rootDir;\n\n // Parse Markdown into sections\n const sections = parseMarkdownSections(content);\n\n if (sections.length === 0) {\n return null;\n }\n\n // Generate embeddings for sections\n const chunkContents = sections.map((s) => {\n const filename = path.basename(filepath);\n const headingContext = s.heading ? `${s.heading}: ` : \"\";\n return `${filename} ${headingContext}${s.content}`;\n });\n const embeddings = await getEmbeddings(chunkContents);\n\n // Create chunks from sections\n const chunks: Chunk[] = sections.map((section, i) => ({\n id: generateChunkId(filepath, section.startLine, section.endLine),\n content: section.heading\n ? `## ${section.heading}\\n\\n${section.content}`\n : section.content,\n startLine: section.startLine,\n endLine: section.endLine,\n type: \"block\" as ChunkType,\n name: section.heading || undefined,\n }));\n\n // Extract headings for metadata\n const headings = sections.filter((s) => s.heading).map((s) => s.heading);\n\n const stats = await ctx.getFileStats(filepath);\n const currentConfig = getEmbeddingConfig();\n\n const moduleData: MarkdownModuleData = {\n embeddings,\n embeddingModel: currentConfig.model,\n headings,\n };\n\n // Build file summary\n const keywords = extractMarkdownKeywords(content);\n\n const fileSummary: FileSummary = {\n filepath,\n chunkCount: chunks.length,\n chunkTypes: [\"block\"],\n keywords,\n exports: headings, // Use headings as \"exports\" for searchability\n lastModified: stats.lastModified,\n };\n\n this.pendingSummaries.set(filepath, fileSummary);\n\n return {\n filepath,\n lastModified: stats.lastModified,\n chunks,\n moduleData,\n };\n }\n\n async finalize(ctx: IndexContext): Promise<void> {\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n\n this.symbolicIndex = new SymbolicIndex(indexDir, this.id);\n await this.symbolicIndex.initialize();\n\n for (const [filepath, summary] of this.pendingSummaries) {\n this.symbolicIndex.addFile(summary);\n }\n\n this.symbolicIndex.buildBM25Index();\n await this.symbolicIndex.save();\n this.pendingSummaries.clear();\n }\n\n async search(\n query: string,\n ctx: SearchContext,\n options: SearchOptions = {}\n ): Promise<SearchResult[]> {\n const {\n topK = DEFAULT_TOP_K,\n minScore = DEFAULT_MIN_SCORE,\n filePatterns,\n } = options;\n\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n const symbolicIndex = new SymbolicIndex(indexDir, this.id);\n\n let allFiles: string[];\n\n try {\n await symbolicIndex.initialize();\n allFiles = symbolicIndex.getAllFiles();\n } catch {\n allFiles = await ctx.listIndexedFiles();\n }\n\n // Filter to Markdown files only\n let filesToSearch = allFiles.filter((f) => isMarkdownFile(f));\n\n if (filePatterns && filePatterns.length > 0) {\n filesToSearch = filesToSearch.filter((filepath) => {\n return filePatterns.some((pattern) => {\n if (pattern.startsWith(\"*.\")) {\n const ext = pattern.slice(1);\n return filepath.endsWith(ext);\n }\n return filepath.includes(pattern);\n });\n });\n }\n\n const queryEmbedding = await getEmbedding(query);\n const bm25Index = new BM25Index();\n const allChunksData: Array<{\n filepath: string;\n chunk: Chunk;\n embedding: number[];\n }> = [];\n\n for (const filepath of filesToSearch) {\n const fileIndex = await ctx.loadFileIndex(filepath);\n if (!fileIndex) continue;\n\n const moduleData = fileIndex.moduleData as unknown as MarkdownModuleData;\n if (!moduleData?.embeddings) continue;\n\n for (let i = 0; i < fileIndex.chunks.length; i++) {\n const chunk = fileIndex.chunks[i];\n const embedding = moduleData.embeddings[i];\n\n if (!embedding) continue;\n\n allChunksData.push({\n filepath: fileIndex.filepath,\n chunk,\n embedding,\n });\n\n bm25Index.addDocuments([{ id: chunk.id, content: chunk.content }]);\n }\n }\n\n const bm25Results = bm25Index.search(query, topK * 3);\n const bm25Scores = new Map<string, number>();\n\n for (const result of bm25Results) {\n bm25Scores.set(result.id, normalizeScore(result.score, 3));\n }\n\n const queryTerms = extractQueryTerms(query);\n const results: SearchResult[] = [];\n\n for (const { filepath, chunk, embedding } of allChunksData) {\n const semanticScore = cosineSimilarity(queryEmbedding, embedding);\n const bm25Score = bm25Scores.get(chunk.id) || 0;\n\n // Documentation files get a small boost for documentation-intent queries\n let docBoost = 0;\n if (\n queryTerms.some((t) =>\n [\n \"docs\",\n \"documentation\",\n \"readme\",\n \"guide\",\n \"how\",\n \"what\",\n \"explain\",\n ].includes(t)\n )\n ) {\n docBoost = 0.05;\n }\n\n const hybridScore =\n SEMANTIC_WEIGHT * semanticScore + BM25_WEIGHT * bm25Score + docBoost;\n\n if (hybridScore >= minScore || bm25Score > 0.3) {\n results.push({\n filepath,\n chunk,\n score: hybridScore,\n moduleId: this.id,\n context: {\n semanticScore,\n bm25Score,\n docBoost,\n },\n });\n }\n }\n\n results.sort((a, b) => b.score - a.score);\n return results.slice(0, topK);\n }\n}\n",
|
|
38
|
-
"// Main indexer - coordinates modules for indexing files\nimport { glob } from \"glob\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport {\n Config,\n IndexContext,\n IndexModule,\n ModuleManifest,\n GlobalManifest,\n FileIndex,\n} from \"../../types\";\nimport {\n DEFAULT_CONFIG,\n loadConfig,\n getModuleIndexPath,\n getModuleManifestPath,\n getGlobalManifestPath,\n getModuleConfig,\n getIndexLocation,\n getRaggrepDir,\n} from \"../../infrastructure/config\";\nimport { registry, registerBuiltInModules } from \"../../modules/registry\";\nimport type { EmbeddingModelName, Logger } from \"../../domain/ports\";\nimport { IntrospectionIndex } from \"../../infrastructure/introspection\";\nimport { createLogger, createSilentLogger } from \"../../infrastructure/logger\";\n\n// ============================================================================\n// Parallel Processing Utilities\n// ============================================================================\n\n/**\n * Process items in parallel with controlled concurrency.\n * Returns results in the same order as input items.\n *\n * @param items - Items to process\n * @param processor - Async function to process each item\n * @param concurrency - Maximum number of concurrent operations\n * @returns Array of results (or errors) in input order\n */\nasync function parallelMap<T, R>(\n items: T[],\n processor: (item: T, index: number) => Promise<R>,\n concurrency: number\n): Promise<\n Array<{ success: true; value: R } | { success: false; error: unknown }>\n> {\n const results: Array<\n { success: true; value: R } | { success: false; error: unknown }\n > = new Array(items.length);\n let nextIndex = 0;\n\n async function worker(): Promise<void> {\n while (nextIndex < items.length) {\n const index = nextIndex++;\n const item = items[index];\n try {\n const value = await processor(item, index);\n results[index] = { success: true, value };\n } catch (error) {\n results[index] = { success: false, error };\n }\n }\n }\n\n // Start workers up to concurrency limit\n const workers = Array(Math.min(concurrency, items.length))\n .fill(null)\n .map(() => worker());\n\n await Promise.all(workers);\n return results;\n}\n\n/**\n * Current index schema version.\n * Increment this when making breaking changes to the index format.\n * This is separate from the package version to allow non-breaking updates.\n *\n * History:\n * - 1.0.0: Initial version\n * - 1.1.0: Changed default embedding model to bge-small-en-v1.5, added nomic-embed-text-v1.5\n */\nconst INDEX_SCHEMA_VERSION = \"1.1.0\";\n\nexport interface IndexResult {\n moduleId: string;\n indexed: number;\n skipped: number;\n errors: number;\n /** Time taken in milliseconds */\n durationMs?: number;\n}\n\n/**\n * Format duration in human-readable format\n */\nfunction formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n }\n const seconds = ms / 1000;\n if (seconds < 60) {\n return `${seconds.toFixed(1)}s`;\n }\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes}m ${remainingSeconds.toFixed(1)}s`;\n}\n\n/**\n * Get optimal concurrency based on CPU specs.\n *\n * Uses the number of CPU cores with some considerations:\n * - Minimum: 2 (ensure some parallelism)\n * - Maximum: 16 (avoid diminishing returns / memory pressure)\n * - For embedding generation, we leave 1-2 cores free for the system\n *\n * @returns Optimal concurrency value\n */\nfunction getOptimalConcurrency(): number {\n const cpuCount = os.cpus().length;\n\n // Leave some cores for system/other processes\n // For 4 cores: use 3\n // For 8 cores: use 6\n // For 16+ cores: use 12-14\n const optimal = Math.max(2, Math.min(16, Math.floor(cpuCount * 0.75)));\n\n return optimal;\n}\n\n/** Default concurrency for parallel file processing (dynamic based on CPU) */\nconst DEFAULT_CONCURRENCY = getOptimalConcurrency();\n\nexport interface IndexOptions {\n /** Override the embedding model (semantic module) */\n model?: EmbeddingModelName;\n /** Show detailed progress */\n verbose?: boolean;\n /** Suppress most output (for use during query) */\n quiet?: boolean;\n /** Logger for progress reporting. If not provided, uses console by default (quiet mode uses silent logger) */\n logger?: Logger;\n /** Number of files to process in parallel (default: auto based on CPU cores) */\n concurrency?: number;\n}\n\nexport interface EnsureFreshResult {\n /** Number of files indexed (new or modified) */\n indexed: number;\n /** Number of stale entries removed (deleted files) */\n removed: number;\n /** Number of files unchanged (used cache) */\n unchanged: number;\n}\n\nexport interface CleanupResult {\n moduleId: string;\n /** Number of stale entries removed */\n removed: number;\n /** Number of valid entries kept */\n kept: number;\n}\n\nexport interface IndexStatus {\n /** Whether an index exists */\n exists: boolean;\n /** Root directory path */\n rootDir: string;\n /** Index directory path */\n indexDir: string;\n /** Last time the index was updated */\n lastUpdated?: string;\n /** Active modules and their file counts */\n modules: Array<{\n id: string;\n fileCount: number;\n lastUpdated: string;\n }>;\n /** Total number of indexed files */\n totalFiles: number;\n}\n\n/**\n * Index a directory using all enabled modules\n */\nexport async function indexDirectory(\n rootDir: string,\n options: IndexOptions = {}\n): Promise<IndexResult[]> {\n const verbose = options.verbose ?? false;\n const quiet = options.quiet ?? false;\n const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;\n\n // Create logger based on options\n const logger: Logger = options.logger\n ? options.logger\n : quiet\n ? createSilentLogger()\n : createLogger({ verbose });\n\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Show index location\n const location = getIndexLocation(rootDir);\n logger.info(`Indexing directory: ${rootDir}`);\n logger.info(`Index location: ${location.indexDir}`);\n logger.debug(`Concurrency: ${concurrency}`);\n\n // Load config\n const config = await loadConfig(rootDir);\n\n // Initialize introspection\n const introspection = new IntrospectionIndex(rootDir);\n await introspection.initialize();\n const structure = introspection.getStructure();\n if (structure?.isMonorepo) {\n logger.debug(\n `Detected monorepo with ${structure.projects.length} projects`\n );\n }\n\n // Register built-in modules\n await registerBuiltInModules();\n\n // Get enabled modules\n const enabledModules = registry.getEnabled(config);\n\n if (enabledModules.length === 0) {\n logger.info(\"No modules enabled. Check your configuration.\");\n return [];\n }\n\n logger.info(`Enabled modules: ${enabledModules.map((m) => m.id).join(\", \")}`);\n\n // Get all files matching extensions\n const files = await findFiles(rootDir, config);\n logger.info(`Found ${files.length} files to index`);\n\n // Track overall timing\n const overallStart = Date.now();\n\n // Index with each module\n const results: IndexResult[] = [];\n\n for (const module of enabledModules) {\n const moduleStart = Date.now();\n logger.info(`\\n[${module.name}] Starting indexing...`);\n\n // Initialize module if needed\n const moduleConfig = getModuleConfig(config, module.id);\n if (module.initialize && moduleConfig) {\n // Apply CLI overrides to module config, including logger\n const configWithOverrides = { ...moduleConfig };\n if (options.model && module.id === \"language/typescript\") {\n configWithOverrides.options = {\n ...configWithOverrides.options,\n embeddingModel: options.model,\n };\n }\n // Pass logger to module via options\n configWithOverrides.options = {\n ...configWithOverrides.options,\n logger,\n };\n await module.initialize(configWithOverrides);\n }\n\n // Pre-filter files that this module supports\n const moduleFiles = module.supportsFile\n ? files.filter((f) => module.supportsFile!(f))\n : files;\n\n logger.info(` Processing ${moduleFiles.length} files...`);\n\n const result = await indexWithModule(\n rootDir,\n moduleFiles,\n module,\n config,\n verbose,\n introspection,\n logger,\n concurrency\n );\n results.push(result);\n\n // Call finalize to build secondary indexes (Tier 1, BM25, etc.)\n if (module.finalize) {\n logger.info(`[${module.name}] Building secondary indexes...`);\n const ctx: IndexContext = {\n rootDir,\n config,\n readFile: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n return fs.readFile(fullPath, \"utf-8\");\n },\n getFileStats: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n const stats = await fs.stat(fullPath);\n return { lastModified: stats.mtime.toISOString() };\n },\n };\n await module.finalize(ctx);\n }\n\n const moduleDuration = Date.now() - moduleStart;\n result.durationMs = moduleDuration;\n\n logger.info(\n `[${module.name}] Complete: ${result.indexed} indexed, ${\n result.skipped\n } skipped, ${result.errors} errors (${formatDuration(moduleDuration)})`\n );\n }\n\n // Save introspection data\n await introspection.save(config);\n\n // Log overall timing\n const overallDuration = Date.now() - overallStart;\n logger.info(`\\nIndexing complete in ${formatDuration(overallDuration)}`);\n\n // Log summary\n const totalIndexed = results.reduce((sum, r) => sum + r.indexed, 0);\n const totalSkipped = results.reduce((sum, r) => sum + r.skipped, 0);\n const totalErrors = results.reduce((sum, r) => sum + r.errors, 0);\n logger.info(\n `Total: ${totalIndexed} indexed, ${totalSkipped} skipped, ${totalErrors} errors`\n );\n\n // Update global manifest\n await updateGlobalManifest(rootDir, enabledModules, config);\n\n return results;\n}\n\n/**\n * Check if the existing index version is compatible with the current schema.\n * Returns true if compatible, false if needs rebuild.\n */\nasync function isIndexVersionCompatible(rootDir: string): Promise<boolean> {\n const config = await loadConfig(rootDir);\n const globalManifestPath = getGlobalManifestPath(rootDir, config);\n\n try {\n const content = await fs.readFile(globalManifestPath, \"utf-8\");\n const manifest: GlobalManifest = JSON.parse(content);\n\n // Check if version matches current schema version\n return manifest.version === INDEX_SCHEMA_VERSION;\n } catch {\n // Can't read manifest - treat as incompatible\n return false;\n }\n}\n\n/**\n * Delete the entire index directory to allow a clean rebuild.\n */\nasync function deleteIndex(rootDir: string): Promise<void> {\n const indexDir = getRaggrepDir(rootDir);\n\n try {\n await fs.rm(indexDir, { recursive: true, force: true });\n } catch {\n // Directory may not exist, that's okay\n }\n}\n\n/**\n * Result of a reset operation\n */\nexport interface ResetResult {\n /** Whether the reset was successful */\n success: boolean;\n /** The index directory that was removed */\n indexDir: string;\n}\n\n/**\n * Reset (delete) the index for a directory.\n *\n * @param rootDir - Root directory of the project\n * @returns ResetResult with success status\n * @throws Error if no index exists\n */\nexport async function resetIndex(rootDir: string): Promise<ResetResult> {\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Check if index exists\n const status = await getIndexStatus(rootDir);\n\n if (!status.exists) {\n throw new Error(`No index found for ${rootDir}`);\n }\n\n // Delete the index\n await deleteIndex(rootDir);\n\n return {\n success: true,\n indexDir: status.indexDir,\n };\n}\n\n/**\n * Ensure the index is fresh by checking for changes and updating incrementally.\n * This function is designed to be called before search to transparently manage the index.\n *\n * - If no index exists, creates a full index\n * - If index version is incompatible, rebuilds from scratch\n * - If files have changed, re-indexes only the modified files\n * - If files have been deleted, removes stale entries\n * - If nothing changed, returns immediately (uses cache)\n *\n * @param rootDir - Root directory of the project\n * @param options - Index options\n * @returns Statistics about what was updated\n */\nexport async function ensureIndexFresh(\n rootDir: string,\n options: IndexOptions = {}\n): Promise<EnsureFreshResult> {\n const verbose = options.verbose ?? false;\n const quiet = options.quiet ?? false;\n\n // Create logger based on options\n const logger: Logger = options.logger\n ? options.logger\n : quiet\n ? createSilentLogger()\n : createLogger({ verbose });\n\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Check if index exists\n const status = await getIndexStatus(rootDir);\n\n if (!status.exists) {\n // No index exists - do full indexing\n logger.info(\"No index found. Creating index...\\n\");\n const results = await indexDirectory(rootDir, { ...options, logger });\n const totalIndexed = results.reduce((sum, r) => sum + r.indexed, 0);\n return { indexed: totalIndexed, removed: 0, unchanged: 0 };\n }\n\n // Index exists - check if version is compatible\n const versionCompatible = await isIndexVersionCompatible(rootDir);\n if (!versionCompatible) {\n // Incompatible index version - delete and rebuild\n logger.info(\"Index version incompatible. Rebuilding...\\n\");\n await deleteIndex(rootDir);\n const results = await indexDirectory(rootDir, { ...options, logger });\n const totalIndexed = results.reduce((sum, r) => sum + r.indexed, 0);\n return { indexed: totalIndexed, removed: 0, unchanged: 0 };\n }\n\n // Index exists and is compatible - check for changes incrementally\n const config = await loadConfig(rootDir);\n\n // Register built-in modules\n await registerBuiltInModules();\n\n // Get enabled modules\n const enabledModules = registry.getEnabled(config);\n\n if (enabledModules.length === 0) {\n return { indexed: 0, removed: 0, unchanged: 0 };\n }\n\n // Initialize introspection\n const introspection = new IntrospectionIndex(rootDir);\n await introspection.initialize();\n\n // Get all current files\n const currentFiles = await findFiles(rootDir, config);\n const currentFileSet = new Set(\n currentFiles.map((f) => path.relative(rootDir, f))\n );\n\n let totalIndexed = 0;\n let totalRemoved = 0;\n let totalUnchanged = 0;\n\n for (const module of enabledModules) {\n // Initialize module if needed\n const moduleConfig = getModuleConfig(config, module.id);\n if (module.initialize && moduleConfig) {\n const configWithOverrides = { ...moduleConfig };\n if (options.model && module.id === \"language/typescript\") {\n configWithOverrides.options = {\n ...configWithOverrides.options,\n embeddingModel: options.model,\n };\n }\n // Pass logger to module\n configWithOverrides.options = {\n ...configWithOverrides.options,\n logger,\n };\n await module.initialize(configWithOverrides);\n }\n\n // Load manifest\n const manifest = await loadModuleManifest(rootDir, module.id, config);\n const indexPath = getModuleIndexPath(rootDir, module.id, config);\n\n // Find files to remove (in manifest but not on disk)\n const filesToRemove: string[] = [];\n for (const filepath of Object.keys(manifest.files)) {\n if (!currentFileSet.has(filepath)) {\n filesToRemove.push(filepath);\n }\n }\n\n // Remove stale entries\n for (const filepath of filesToRemove) {\n logger.debug(` Removing stale: ${filepath}`);\n // Remove main index file\n const indexFilePath = path.join(\n indexPath,\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(indexFilePath);\n } catch {\n // Index file may not exist\n }\n // Remove symbolic index file\n const symbolicFilePath = path.join(\n indexPath,\n \"symbolic\",\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(symbolicFilePath);\n } catch {\n // Symbolic file may not exist\n }\n delete manifest.files[filepath];\n totalRemoved++;\n }\n\n // Index new/modified files\n const ctx: IndexContext = {\n rootDir,\n config,\n readFile: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n return fs.readFile(fullPath, \"utf-8\");\n },\n getFileStats: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n const stats = await fs.stat(fullPath);\n return { lastModified: stats.mtime.toISOString() };\n },\n getIntrospection: (filepath: string) => introspection.getFile(filepath),\n };\n\n const totalFiles = currentFiles.length;\n for (let i = 0; i < currentFiles.length; i++) {\n const filepath = currentFiles[i];\n const relativePath = path.relative(rootDir, filepath);\n const progress = `[${i + 1}/${totalFiles}]`;\n\n try {\n const stats = await fs.stat(filepath);\n const lastModified = stats.mtime.toISOString();\n\n // Check if file needs re-indexing\n const existingEntry = manifest.files[relativePath];\n if (existingEntry && existingEntry.lastModified === lastModified) {\n totalUnchanged++;\n continue;\n }\n\n // File is new or modified - index it\n logger.progress(` ${progress} Indexing: ${relativePath}`);\n\n const content = await fs.readFile(filepath, \"utf-8\");\n introspection.addFile(relativePath, content);\n\n const fileIndex = await module.indexFile(relativePath, content, ctx);\n\n if (fileIndex) {\n await writeFileIndex(\n rootDir,\n module.id,\n relativePath,\n fileIndex,\n config\n );\n manifest.files[relativePath] = {\n lastModified,\n chunkCount: fileIndex.chunks.length,\n };\n totalIndexed++;\n }\n } catch (error) {\n logger.clearProgress();\n logger.error(` ${progress} Error indexing ${relativePath}: ${error}`);\n }\n }\n\n // Clear progress line\n logger.clearProgress();\n\n // Update manifest if there were changes\n if (totalIndexed > 0 || totalRemoved > 0) {\n manifest.lastUpdated = new Date().toISOString();\n await writeModuleManifest(rootDir, module.id, manifest, config);\n\n // Call finalize to rebuild secondary indexes\n if (module.finalize) {\n await module.finalize(ctx);\n }\n }\n\n // Clean up empty directories\n if (totalRemoved > 0) {\n await cleanupEmptyDirectories(indexPath);\n }\n }\n\n // Save introspection if there were changes\n if (totalIndexed > 0) {\n await introspection.save(config);\n }\n\n // Update global manifest if needed\n if (totalIndexed > 0 || totalRemoved > 0) {\n await updateGlobalManifest(rootDir, enabledModules, config);\n }\n\n return {\n indexed: totalIndexed,\n removed: totalRemoved,\n unchanged: totalUnchanged,\n };\n}\n\n/**\n * Result of processing a single file\n */\ninterface FileProcessResult {\n relativePath: string;\n status: \"indexed\" | \"skipped\" | \"error\";\n lastModified?: string;\n chunkCount?: number;\n error?: unknown;\n}\n\n/**\n * Index files with a specific module using parallel processing\n */\nasync function indexWithModule(\n rootDir: string,\n files: string[],\n module: IndexModule,\n config: Config,\n verbose: boolean,\n introspection: IntrospectionIndex,\n logger: Logger,\n concurrency: number = DEFAULT_CONCURRENCY\n): Promise<IndexResult> {\n const result: IndexResult = {\n moduleId: module.id,\n indexed: 0,\n skipped: 0,\n errors: 0,\n };\n\n // Load existing manifest for this module\n const manifest = await loadModuleManifest(rootDir, module.id, config);\n const indexPath = getModuleIndexPath(rootDir, module.id, config);\n\n // Build set of current files for quick lookup\n const currentFileSet = new Set(files.map((f) => path.relative(rootDir, f)));\n\n // Clean up stale entries (files in manifest but no longer on disk)\n const filesToRemove: string[] = [];\n for (const filepath of Object.keys(manifest.files)) {\n if (!currentFileSet.has(filepath)) {\n filesToRemove.push(filepath);\n }\n }\n\n if (filesToRemove.length > 0) {\n logger.info(` Removing ${filesToRemove.length} stale entries...`);\n for (const filepath of filesToRemove) {\n logger.debug(` Removing: ${filepath}`);\n // Remove main index file\n const indexFilePath = path.join(\n indexPath,\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(indexFilePath);\n } catch {\n // Index file may not exist\n }\n // Remove symbolic index file\n const symbolicFilePath = path.join(\n indexPath,\n \"symbolic\",\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(symbolicFilePath);\n } catch {\n // Symbolic file may not exist\n }\n delete manifest.files[filepath];\n }\n // Clean up empty directories\n await cleanupEmptyDirectories(indexPath);\n }\n\n // Create index context\n const ctx: IndexContext = {\n rootDir,\n config,\n readFile: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n return fs.readFile(fullPath, \"utf-8\");\n },\n getFileStats: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n const stats = await fs.stat(fullPath);\n return { lastModified: stats.mtime.toISOString() };\n },\n getIntrospection: (filepath: string) => introspection.getFile(filepath),\n };\n\n const totalFiles = files.length;\n\n // Track progress across parallel operations\n let completedCount = 0;\n\n // Process files in parallel with concurrency control\n const processFile = async (\n filepath: string,\n _index: number\n ): Promise<FileProcessResult> => {\n const relativePath = path.relative(rootDir, filepath);\n\n try {\n const stats = await fs.stat(filepath);\n const lastModified = stats.mtime.toISOString();\n\n // Check if file needs re-indexing\n const existingEntry = manifest.files[relativePath];\n if (existingEntry && existingEntry.lastModified === lastModified) {\n completedCount++;\n logger.debug(\n ` [${completedCount}/${totalFiles}] Skipped ${relativePath} (unchanged)`\n );\n return { relativePath, status: \"skipped\" };\n }\n\n // Read and index file\n const content = await fs.readFile(filepath, \"utf-8\");\n\n // Add introspection for this file (thread-safe - just adds to a Map)\n introspection.addFile(relativePath, content);\n\n // Update progress\n completedCount++;\n logger.progress(\n ` [${completedCount}/${totalFiles}] Processing: ${relativePath}`\n );\n\n const fileIndex = await module.indexFile(relativePath, content, ctx);\n\n if (!fileIndex) {\n logger.debug(\n ` [${completedCount}/${totalFiles}] Skipped ${relativePath} (no chunks)`\n );\n return { relativePath, status: \"skipped\" };\n }\n\n // Write index file\n await writeFileIndex(rootDir, module.id, relativePath, fileIndex, config);\n\n return {\n relativePath,\n status: \"indexed\",\n lastModified,\n chunkCount: fileIndex.chunks.length,\n };\n } catch (error) {\n completedCount++;\n return { relativePath, status: \"error\", error };\n }\n };\n\n // Run parallel processing\n logger.debug(` Using concurrency: ${concurrency}`);\n const results = await parallelMap(files, processFile, concurrency);\n\n // Clear progress line\n logger.clearProgress();\n\n // Process results and update manifest\n for (const item of results) {\n if (!item.success) {\n // This shouldn't happen as we catch errors in processFile\n result.errors++;\n continue;\n }\n\n const fileResult = item.value;\n switch (fileResult.status) {\n case \"indexed\":\n manifest.files[fileResult.relativePath] = {\n lastModified: fileResult.lastModified!,\n chunkCount: fileResult.chunkCount!,\n };\n result.indexed++;\n break;\n case \"skipped\":\n result.skipped++;\n break;\n case \"error\":\n logger.error(\n ` Error indexing ${fileResult.relativePath}: ${fileResult.error}`\n );\n result.errors++;\n break;\n }\n }\n\n // Update manifest\n manifest.lastUpdated = new Date().toISOString();\n await writeModuleManifest(rootDir, module.id, manifest, config);\n\n return result;\n}\n\nasync function findFiles(rootDir: string, config: Config): Promise<string[]> {\n const patterns = config.extensions.map((ext) => `**/*${ext}`);\n const ignorePatterns = config.ignorePaths.map((p) => `**/${p}/**`);\n\n const files: string[] = [];\n for (const pattern of patterns) {\n const matches = await glob(pattern, {\n cwd: rootDir,\n absolute: true,\n ignore: ignorePatterns,\n });\n files.push(...matches);\n }\n\n return [...new Set(files)]; // Remove duplicates\n}\n\nasync function loadModuleManifest(\n rootDir: string,\n moduleId: string,\n config: Config\n): Promise<ModuleManifest> {\n const manifestPath = getModuleManifestPath(rootDir, moduleId, config);\n\n try {\n const content = await fs.readFile(manifestPath, \"utf-8\");\n return JSON.parse(content);\n } catch {\n return {\n moduleId,\n version: \"1.0.0\",\n lastUpdated: new Date().toISOString(),\n files: {},\n };\n }\n}\n\nasync function writeModuleManifest(\n rootDir: string,\n moduleId: string,\n manifest: ModuleManifest,\n config: Config\n): Promise<void> {\n const manifestPath = getModuleManifestPath(rootDir, moduleId, config);\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));\n}\n\nasync function writeFileIndex(\n rootDir: string,\n moduleId: string,\n filepath: string,\n fileIndex: FileIndex,\n config: Config\n): Promise<void> {\n const indexPath = getModuleIndexPath(rootDir, moduleId, config);\n const indexFilePath = path.join(\n indexPath,\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n\n await fs.mkdir(path.dirname(indexFilePath), { recursive: true });\n await fs.writeFile(indexFilePath, JSON.stringify(fileIndex, null, 2));\n}\n\nasync function updateGlobalManifest(\n rootDir: string,\n modules: IndexModule[],\n config: Config\n): Promise<void> {\n const manifestPath = getGlobalManifestPath(rootDir, config);\n\n const manifest: GlobalManifest = {\n version: INDEX_SCHEMA_VERSION,\n lastUpdated: new Date().toISOString(),\n modules: modules.map((m) => m.id),\n };\n\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));\n}\n\n/**\n * Options for cleanup operation\n */\nexport interface CleanupOptions {\n /** Show detailed progress */\n verbose?: boolean;\n /** Logger for progress reporting */\n logger?: Logger;\n}\n\n/**\n * Clean up stale index entries for files that no longer exist\n * @param rootDir - Root directory of the project\n * @param options - Cleanup options\n * @returns Array of cleanup results per module\n */\nexport async function cleanupIndex(\n rootDir: string,\n options: CleanupOptions = {}\n): Promise<CleanupResult[]> {\n const verbose = options.verbose ?? false;\n\n // Create logger\n const logger: Logger = options.logger ?? createLogger({ verbose });\n\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n logger.info(`Cleaning up index in: ${rootDir}`);\n\n // Load config\n const config = await loadConfig(rootDir);\n\n // Register built-in modules\n await registerBuiltInModules();\n\n // Get enabled modules\n const enabledModules = registry.getEnabled(config);\n\n if (enabledModules.length === 0) {\n logger.info(\"No modules enabled.\");\n return [];\n }\n\n const results: CleanupResult[] = [];\n\n for (const module of enabledModules) {\n logger.info(`\\n[${module.name}] Checking for stale entries...`);\n\n const result = await cleanupModuleIndex(rootDir, module.id, config, logger);\n results.push(result);\n\n logger.info(\n `[${module.name}] Removed ${result.removed} stale entries, kept ${result.kept} valid entries`\n );\n }\n\n return results;\n}\n\n/**\n * Clean up stale index entries for a specific module\n */\nasync function cleanupModuleIndex(\n rootDir: string,\n moduleId: string,\n config: Config,\n logger: Logger\n): Promise<CleanupResult> {\n const result: CleanupResult = {\n moduleId,\n removed: 0,\n kept: 0,\n };\n\n // Load manifest\n const manifest = await loadModuleManifest(rootDir, moduleId, config);\n const indexPath = getModuleIndexPath(rootDir, moduleId, config);\n\n const filesToRemove: string[] = [];\n const updatedFiles: ModuleManifest[\"files\"] = {};\n\n // Check each indexed file\n for (const [filepath, entry] of Object.entries(manifest.files)) {\n const fullPath = path.join(rootDir, filepath);\n\n try {\n await fs.access(fullPath);\n // File exists, keep it\n updatedFiles[filepath] = entry;\n result.kept++;\n } catch {\n // File doesn't exist, mark for removal\n filesToRemove.push(filepath);\n result.removed++;\n logger.debug(` Removing stale entry: ${filepath}`);\n }\n }\n\n // Remove stale index files\n for (const filepath of filesToRemove) {\n const indexFilePath = path.join(\n indexPath,\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(indexFilePath);\n } catch {\n // Index file may not exist, that's okay\n }\n }\n\n // Update manifest with only valid files\n manifest.files = updatedFiles;\n manifest.lastUpdated = new Date().toISOString();\n await writeModuleManifest(rootDir, moduleId, manifest, config);\n\n // Clean up empty directories in the index\n await cleanupEmptyDirectories(indexPath);\n\n return result;\n}\n\n/**\n * Recursively remove empty directories\n */\nasync function cleanupEmptyDirectories(dir: string): Promise<boolean> {\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n\n // Process subdirectories first\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const subDir = path.join(dir, entry.name);\n await cleanupEmptyDirectories(subDir);\n }\n }\n\n // Check if directory is now empty (re-read after potential subdirectory removal)\n const remainingEntries = await fs.readdir(dir);\n\n // Don't remove the root index directory or manifest files\n if (remainingEntries.length === 0) {\n await fs.rmdir(dir);\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the current status of the index\n * @param rootDir - Root directory of the project\n * @returns Index status information\n */\nexport async function getIndexStatus(rootDir: string): Promise<IndexStatus> {\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Load config\n const config = await loadConfig(rootDir);\n\n // Get index location (now in temp directory)\n const location = getIndexLocation(rootDir);\n const indexDir = location.indexDir;\n\n const status: IndexStatus = {\n exists: false,\n rootDir,\n indexDir,\n modules: [],\n totalFiles: 0,\n };\n\n // Check if index directory exists\n try {\n await fs.access(indexDir);\n } catch {\n return status;\n }\n\n // Try to load global manifest\n try {\n const globalManifestPath = getGlobalManifestPath(rootDir, config);\n const content = await fs.readFile(globalManifestPath, \"utf-8\");\n const globalManifest: GlobalManifest = JSON.parse(content);\n\n status.exists = true;\n status.lastUpdated = globalManifest.lastUpdated;\n\n // Load each module's manifest\n for (const moduleId of globalManifest.modules) {\n try {\n const manifest = await loadModuleManifest(rootDir, moduleId, config);\n const fileCount = Object.keys(manifest.files).length;\n\n status.modules.push({\n id: moduleId,\n fileCount,\n lastUpdated: manifest.lastUpdated,\n });\n\n status.totalFiles += fileCount;\n } catch {\n // Module manifest doesn't exist or is corrupt\n }\n }\n } catch {\n // Global manifest doesn't exist - check if there's any index data\n try {\n const entries = await fs.readdir(path.join(indexDir, \"index\"));\n if (entries.length > 0) {\n status.exists = true;\n // Try to load manifests for known modules\n for (const entry of entries) {\n try {\n const manifest = await loadModuleManifest(rootDir, entry, config);\n const fileCount = Object.keys(manifest.files).length;\n\n status.modules.push({\n id: entry,\n fileCount,\n lastUpdated: manifest.lastUpdated,\n });\n\n status.totalFiles += fileCount;\n } catch {\n // Skip\n }\n }\n }\n } catch {\n // No index directory\n }\n }\n\n return status;\n}\n\n// Re-export watcher\nexport { watchDirectory, type WatchOptions, type FileWatcher } from \"./watcher\";\n",
|
|
38
|
+
"// Main indexer - coordinates modules for indexing files\nimport { glob } from \"glob\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\nimport * as os from \"os\";\nimport {\n Config,\n IndexContext,\n IndexModule,\n ModuleManifest,\n GlobalManifest,\n FileIndex,\n} from \"../../types\";\nimport {\n DEFAULT_CONFIG,\n loadConfig,\n getModuleIndexPath,\n getModuleManifestPath,\n getGlobalManifestPath,\n getModuleConfig,\n getIndexLocation,\n getRaggrepDir,\n} from \"../../infrastructure/config\";\nimport { registry, registerBuiltInModules } from \"../../modules/registry\";\nimport type { EmbeddingModelName, Logger } from \"../../domain/ports\";\nimport { IntrospectionIndex } from \"../../infrastructure/introspection\";\nimport { createLogger, createSilentLogger } from \"../../infrastructure/logger\";\n\n// ============================================================================\n// Parallel Processing Utilities\n// ============================================================================\n\n/**\n * Process items in parallel with controlled concurrency.\n * Returns results in the same order as input items.\n *\n * @param items - Items to process\n * @param processor - Async function to process each item\n * @param concurrency - Maximum number of concurrent operations\n * @returns Array of results (or errors) in input order\n */\nasync function parallelMap<T, R>(\n items: T[],\n processor: (item: T, index: number) => Promise<R>,\n concurrency: number\n): Promise<\n Array<{ success: true; value: R } | { success: false; error: unknown }>\n> {\n const results: Array<\n { success: true; value: R } | { success: false; error: unknown }\n > = new Array(items.length);\n let nextIndex = 0;\n\n async function worker(): Promise<void> {\n while (nextIndex < items.length) {\n const index = nextIndex++;\n const item = items[index];\n try {\n const value = await processor(item, index);\n results[index] = { success: true, value };\n } catch (error) {\n results[index] = { success: false, error };\n }\n }\n }\n\n // Start workers up to concurrency limit\n const workers = Array(Math.min(concurrency, items.length))\n .fill(null)\n .map(() => worker());\n\n await Promise.all(workers);\n return results;\n}\n\n/**\n * Current index schema version.\n * Increment this when making breaking changes to the index format.\n * This is separate from the package version to allow non-breaking updates.\n *\n * History:\n * - 1.0.0: Initial version\n * - 1.1.0: Changed default embedding model to bge-small-en-v1.5, added nomic-embed-text-v1.5\n */\nconst INDEX_SCHEMA_VERSION = \"1.1.0\";\n\nexport interface IndexResult {\n moduleId: string;\n indexed: number;\n skipped: number;\n errors: number;\n /** Time taken in milliseconds */\n durationMs?: number;\n}\n\n/**\n * Format duration in human-readable format\n */\nfunction formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n }\n const seconds = ms / 1000;\n if (seconds < 60) {\n return `${seconds.toFixed(1)}s`;\n }\n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = seconds % 60;\n return `${minutes}m ${remainingSeconds.toFixed(1)}s`;\n}\n\n/**\n * Get optimal concurrency based on CPU specs.\n *\n * Uses the number of CPU cores with some considerations:\n * - Minimum: 2 (ensure some parallelism)\n * - Maximum: 16 (avoid diminishing returns / memory pressure)\n * - For embedding generation, we leave 1-2 cores free for the system\n *\n * @returns Optimal concurrency value\n */\nfunction getOptimalConcurrency(): number {\n const cpuCount = os.cpus().length;\n\n // Leave some cores for system/other processes\n // For 4 cores: use 3\n // For 8 cores: use 6\n // For 16+ cores: use 12-14\n const optimal = Math.max(2, Math.min(16, Math.floor(cpuCount * 0.75)));\n\n return optimal;\n}\n\n/** Default concurrency for parallel file processing (dynamic based on CPU) */\nconst DEFAULT_CONCURRENCY = getOptimalConcurrency();\n\nexport interface IndexOptions {\n /** Override the embedding model (semantic module) */\n model?: EmbeddingModelName;\n /** Show detailed progress */\n verbose?: boolean;\n /** Suppress most output (for use during query) */\n quiet?: boolean;\n /** Logger for progress reporting. If not provided, uses console by default (quiet mode uses silent logger) */\n logger?: Logger;\n /** Number of files to process in parallel (default: auto based on CPU cores) */\n concurrency?: number;\n}\n\nexport interface EnsureFreshResult {\n /** Number of files indexed (new or modified) */\n indexed: number;\n /** Number of stale entries removed (deleted files) */\n removed: number;\n /** Number of files unchanged (used cache) */\n unchanged: number;\n}\n\nexport interface CleanupResult {\n moduleId: string;\n /** Number of stale entries removed */\n removed: number;\n /** Number of valid entries kept */\n kept: number;\n}\n\nexport interface IndexStatus {\n /** Whether an index exists */\n exists: boolean;\n /** Root directory path */\n rootDir: string;\n /** Index directory path */\n indexDir: string;\n /** Last time the index was updated */\n lastUpdated?: string;\n /** Active modules and their file counts */\n modules: Array<{\n id: string;\n fileCount: number;\n lastUpdated: string;\n }>;\n /** Total number of indexed files */\n totalFiles: number;\n}\n\n/**\n * Index a directory using all enabled modules\n */\nexport async function indexDirectory(\n rootDir: string,\n options: IndexOptions = {}\n): Promise<IndexResult[]> {\n const verbose = options.verbose ?? false;\n const quiet = options.quiet ?? false;\n const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;\n\n // Create logger based on options\n const logger: Logger = options.logger\n ? options.logger\n : quiet\n ? createSilentLogger()\n : createLogger({ verbose });\n\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Show index location\n const location = getIndexLocation(rootDir);\n logger.info(`Indexing directory: ${rootDir}`);\n logger.info(`Index location: ${location.indexDir}`);\n logger.debug(`Concurrency: ${concurrency}`);\n\n // Load config\n const config = await loadConfig(rootDir);\n\n // Initialize introspection\n const introspection = new IntrospectionIndex(rootDir);\n await introspection.initialize();\n const structure = introspection.getStructure();\n if (structure?.isMonorepo) {\n logger.debug(\n `Detected monorepo with ${structure.projects.length} projects`\n );\n }\n\n // Register built-in modules\n await registerBuiltInModules();\n\n // Get enabled modules\n const enabledModules = registry.getEnabled(config);\n\n if (enabledModules.length === 0) {\n logger.info(\"No modules enabled. Check your configuration.\");\n return [];\n }\n\n logger.info(`Enabled modules: ${enabledModules.map((m) => m.id).join(\", \")}`);\n\n // Get all files matching extensions\n const files = await findFiles(rootDir, config);\n logger.info(`Found ${files.length} files to index`);\n\n // Track overall timing\n const overallStart = Date.now();\n\n // Index with each module\n const results: IndexResult[] = [];\n\n for (const module of enabledModules) {\n const moduleStart = Date.now();\n logger.info(`\\n[${module.name}] Starting indexing...`);\n\n // Initialize module if needed\n const moduleConfig = getModuleConfig(config, module.id);\n if (module.initialize && moduleConfig) {\n // Apply CLI overrides to module config, including logger\n const configWithOverrides = { ...moduleConfig };\n if (options.model && module.id === \"language/typescript\") {\n configWithOverrides.options = {\n ...configWithOverrides.options,\n embeddingModel: options.model,\n };\n }\n // Pass logger to module via options\n configWithOverrides.options = {\n ...configWithOverrides.options,\n logger,\n };\n await module.initialize(configWithOverrides);\n }\n\n // Pre-filter files that this module supports\n const moduleFiles = module.supportsFile\n ? files.filter((f) => module.supportsFile!(f))\n : files;\n\n logger.info(` Processing ${moduleFiles.length} files...`);\n\n const result = await indexWithModule(\n rootDir,\n moduleFiles,\n module,\n config,\n verbose,\n introspection,\n logger,\n concurrency\n );\n results.push(result);\n\n // Call finalize to build secondary indexes (Tier 1, BM25, etc.)\n if (module.finalize) {\n logger.info(`[${module.name}] Building secondary indexes...`);\n const ctx: IndexContext = {\n rootDir,\n config,\n readFile: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n return fs.readFile(fullPath, \"utf-8\");\n },\n getFileStats: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n const stats = await fs.stat(fullPath);\n return { lastModified: stats.mtime.toISOString() };\n },\n };\n await module.finalize(ctx);\n }\n\n const moduleDuration = Date.now() - moduleStart;\n result.durationMs = moduleDuration;\n\n logger.info(\n `[${module.name}] Complete: ${result.indexed} indexed, ${\n result.skipped\n } skipped, ${result.errors} errors (${formatDuration(moduleDuration)})`\n );\n }\n\n // Save introspection data\n await introspection.save(config);\n\n // Log overall timing\n const overallDuration = Date.now() - overallStart;\n logger.info(`\\nIndexing complete in ${formatDuration(overallDuration)}`);\n\n // Log summary\n const totalIndexed = results.reduce((sum, r) => sum + r.indexed, 0);\n const totalSkipped = results.reduce((sum, r) => sum + r.skipped, 0);\n const totalErrors = results.reduce((sum, r) => sum + r.errors, 0);\n logger.info(\n `Total: ${totalIndexed} indexed, ${totalSkipped} skipped, ${totalErrors} errors`\n );\n\n // Update global manifest\n await updateGlobalManifest(rootDir, enabledModules, config);\n\n return results;\n}\n\n/**\n * Check if the existing index version is compatible with the current schema.\n * Returns true if compatible, false if needs rebuild.\n */\nasync function isIndexVersionCompatible(rootDir: string): Promise<boolean> {\n const config = await loadConfig(rootDir);\n const globalManifestPath = getGlobalManifestPath(rootDir, config);\n\n try {\n const content = await fs.readFile(globalManifestPath, \"utf-8\");\n const manifest: GlobalManifest = JSON.parse(content);\n\n // Check if version matches current schema version\n return manifest.version === INDEX_SCHEMA_VERSION;\n } catch {\n // Can't read manifest - treat as incompatible\n return false;\n }\n}\n\n/**\n * Delete the entire index directory to allow a clean rebuild.\n */\nasync function deleteIndex(rootDir: string): Promise<void> {\n const indexDir = getRaggrepDir(rootDir);\n\n try {\n await fs.rm(indexDir, { recursive: true, force: true });\n } catch {\n // Directory may not exist, that's okay\n }\n}\n\n/**\n * Result of a reset operation\n */\nexport interface ResetResult {\n /** Whether the reset was successful */\n success: boolean;\n /** The index directory that was removed */\n indexDir: string;\n}\n\n/**\n * Reset (delete) the index for a directory.\n *\n * @param rootDir - Root directory of the project\n * @returns ResetResult with success status\n * @throws Error if no index exists\n */\nexport async function resetIndex(rootDir: string): Promise<ResetResult> {\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Check if index exists\n const status = await getIndexStatus(rootDir);\n\n if (!status.exists) {\n throw new Error(`No index found for ${rootDir}`);\n }\n\n // Delete the index\n await deleteIndex(rootDir);\n\n return {\n success: true,\n indexDir: status.indexDir,\n };\n}\n\n/**\n * Ensure the index is fresh by checking for changes and updating incrementally.\n * This function is designed to be called before search to transparently manage the index.\n *\n * - If no index exists, creates a full index\n * - If index version is incompatible, rebuilds from scratch\n * - If files have changed, re-indexes only the modified files\n * - If files have been deleted, removes stale entries\n * - If nothing changed, returns immediately (uses cache)\n *\n * @param rootDir - Root directory of the project\n * @param options - Index options\n * @returns Statistics about what was updated\n */\nexport async function ensureIndexFresh(\n rootDir: string,\n options: IndexOptions = {}\n): Promise<EnsureFreshResult> {\n const verbose = options.verbose ?? false;\n const quiet = options.quiet ?? false;\n\n // Create logger based on options\n const logger: Logger = options.logger\n ? options.logger\n : quiet\n ? createSilentLogger()\n : createLogger({ verbose });\n\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Check if index exists\n const status = await getIndexStatus(rootDir);\n\n if (!status.exists) {\n // No index exists - do full indexing\n logger.info(\"No index found. Creating index...\\n\");\n const results = await indexDirectory(rootDir, { ...options, logger });\n const totalIndexed = results.reduce((sum, r) => sum + r.indexed, 0);\n return { indexed: totalIndexed, removed: 0, unchanged: 0 };\n }\n\n // Index exists - check if version is compatible\n const versionCompatible = await isIndexVersionCompatible(rootDir);\n if (!versionCompatible) {\n // Incompatible index version - delete and rebuild\n logger.info(\"Index version incompatible. Rebuilding...\\n\");\n await deleteIndex(rootDir);\n const results = await indexDirectory(rootDir, { ...options, logger });\n const totalIndexed = results.reduce((sum, r) => sum + r.indexed, 0);\n return { indexed: totalIndexed, removed: 0, unchanged: 0 };\n }\n\n // Index exists and is compatible - check for changes incrementally\n const config = await loadConfig(rootDir);\n\n // Register built-in modules\n await registerBuiltInModules();\n\n // Get enabled modules\n const enabledModules = registry.getEnabled(config);\n\n if (enabledModules.length === 0) {\n return { indexed: 0, removed: 0, unchanged: 0 };\n }\n\n // Initialize introspection\n const introspection = new IntrospectionIndex(rootDir);\n await introspection.initialize();\n\n // Get all current files\n const currentFiles = await findFiles(rootDir, config);\n const currentFileSet = new Set(\n currentFiles.map((f) => path.relative(rootDir, f))\n );\n\n let totalIndexed = 0;\n let totalRemoved = 0;\n let totalUnchanged = 0;\n\n for (const module of enabledModules) {\n // Initialize module if needed\n const moduleConfig = getModuleConfig(config, module.id);\n if (module.initialize && moduleConfig) {\n const configWithOverrides = { ...moduleConfig };\n if (options.model && module.id === \"language/typescript\") {\n configWithOverrides.options = {\n ...configWithOverrides.options,\n embeddingModel: options.model,\n };\n }\n // Pass logger to module\n configWithOverrides.options = {\n ...configWithOverrides.options,\n logger,\n };\n await module.initialize(configWithOverrides);\n }\n\n // Load manifest\n const manifest = await loadModuleManifest(rootDir, module.id, config);\n const indexPath = getModuleIndexPath(rootDir, module.id, config);\n\n // Find files to remove (in manifest but not on disk)\n const filesToRemove: string[] = [];\n for (const filepath of Object.keys(manifest.files)) {\n if (!currentFileSet.has(filepath)) {\n filesToRemove.push(filepath);\n }\n }\n\n // Remove stale entries\n // Also need to track files removed for literal index cleanup\n const removedFilepaths: string[] = [];\n for (const filepath of filesToRemove) {\n logger.debug(` Removing stale: ${filepath}`);\n // Remove main index file\n const indexFilePath = path.join(\n indexPath,\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(indexFilePath);\n } catch {\n // Index file may not exist\n }\n // Remove symbolic index file\n const symbolicFilePath = path.join(\n indexPath,\n \"symbolic\",\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(symbolicFilePath);\n } catch {\n // Symbolic file may not exist\n }\n delete manifest.files[filepath];\n removedFilepaths.push(filepath);\n totalRemoved++;\n }\n\n // Clean up literal index for removed files\n if (removedFilepaths.length > 0) {\n try {\n const { LiteralIndex } = await import(\n \"../../infrastructure/storage/literalIndex\"\n );\n // LiteralIndex expects the base raggrep directory\n const raggrepDir = getRaggrepDir(rootDir, config);\n const literalIndex = new LiteralIndex(raggrepDir, module.id);\n await literalIndex.initialize();\n for (const filepath of removedFilepaths) {\n literalIndex.removeFile(filepath);\n }\n await literalIndex.save();\n } catch {\n // Literal index may not exist yet\n }\n }\n\n // Index new/modified files\n const ctx: IndexContext = {\n rootDir,\n config,\n readFile: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n return fs.readFile(fullPath, \"utf-8\");\n },\n getFileStats: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n const stats = await fs.stat(fullPath);\n return { lastModified: stats.mtime.toISOString() };\n },\n getIntrospection: (filepath: string) => introspection.getFile(filepath),\n };\n\n const totalFiles = currentFiles.length;\n for (let i = 0; i < currentFiles.length; i++) {\n const filepath = currentFiles[i];\n const relativePath = path.relative(rootDir, filepath);\n const progress = `[${i + 1}/${totalFiles}]`;\n\n try {\n const stats = await fs.stat(filepath);\n const lastModified = stats.mtime.toISOString();\n\n // Check if file needs re-indexing\n const existingEntry = manifest.files[relativePath];\n if (existingEntry && existingEntry.lastModified === lastModified) {\n totalUnchanged++;\n continue;\n }\n\n // File is new or modified - index it\n logger.progress(` ${progress} Indexing: ${relativePath}`);\n\n const content = await fs.readFile(filepath, \"utf-8\");\n introspection.addFile(relativePath, content);\n\n const fileIndex = await module.indexFile(relativePath, content, ctx);\n\n if (fileIndex) {\n await writeFileIndex(\n rootDir,\n module.id,\n relativePath,\n fileIndex,\n config\n );\n manifest.files[relativePath] = {\n lastModified,\n chunkCount: fileIndex.chunks.length,\n };\n totalIndexed++;\n }\n } catch (error) {\n logger.clearProgress();\n logger.error(` ${progress} Error indexing ${relativePath}: ${error}`);\n }\n }\n\n // Clear progress line\n logger.clearProgress();\n\n // Update manifest if there were changes\n if (totalIndexed > 0 || totalRemoved > 0) {\n manifest.lastUpdated = new Date().toISOString();\n await writeModuleManifest(rootDir, module.id, manifest, config);\n\n // Call finalize to rebuild secondary indexes\n if (module.finalize) {\n await module.finalize(ctx);\n }\n }\n\n // Clean up empty directories\n if (totalRemoved > 0) {\n await cleanupEmptyDirectories(indexPath);\n }\n }\n\n // Save introspection if there were changes\n if (totalIndexed > 0) {\n await introspection.save(config);\n }\n\n // Update global manifest if needed\n if (totalIndexed > 0 || totalRemoved > 0) {\n await updateGlobalManifest(rootDir, enabledModules, config);\n }\n\n return {\n indexed: totalIndexed,\n removed: totalRemoved,\n unchanged: totalUnchanged,\n };\n}\n\n/**\n * Result of processing a single file\n */\ninterface FileProcessResult {\n relativePath: string;\n status: \"indexed\" | \"skipped\" | \"error\";\n lastModified?: string;\n chunkCount?: number;\n error?: unknown;\n}\n\n/**\n * Index files with a specific module using parallel processing\n */\nasync function indexWithModule(\n rootDir: string,\n files: string[],\n module: IndexModule,\n config: Config,\n verbose: boolean,\n introspection: IntrospectionIndex,\n logger: Logger,\n concurrency: number = DEFAULT_CONCURRENCY\n): Promise<IndexResult> {\n const result: IndexResult = {\n moduleId: module.id,\n indexed: 0,\n skipped: 0,\n errors: 0,\n };\n\n // Load existing manifest for this module\n const manifest = await loadModuleManifest(rootDir, module.id, config);\n const indexPath = getModuleIndexPath(rootDir, module.id, config);\n\n // Build set of current files for quick lookup\n const currentFileSet = new Set(files.map((f) => path.relative(rootDir, f)));\n\n // Clean up stale entries (files in manifest but no longer on disk)\n const filesToRemove: string[] = [];\n for (const filepath of Object.keys(manifest.files)) {\n if (!currentFileSet.has(filepath)) {\n filesToRemove.push(filepath);\n }\n }\n\n if (filesToRemove.length > 0) {\n logger.info(` Removing ${filesToRemove.length} stale entries...`);\n for (const filepath of filesToRemove) {\n logger.debug(` Removing: ${filepath}`);\n // Remove main index file\n const indexFilePath = path.join(\n indexPath,\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(indexFilePath);\n } catch {\n // Index file may not exist\n }\n // Remove symbolic index file\n const symbolicFilePath = path.join(\n indexPath,\n \"symbolic\",\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(symbolicFilePath);\n } catch {\n // Symbolic file may not exist\n }\n delete manifest.files[filepath];\n }\n // Clean up empty directories\n await cleanupEmptyDirectories(indexPath);\n }\n\n // Create index context\n const ctx: IndexContext = {\n rootDir,\n config,\n readFile: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n return fs.readFile(fullPath, \"utf-8\");\n },\n getFileStats: async (filepath: string) => {\n const fullPath = path.isAbsolute(filepath)\n ? filepath\n : path.join(rootDir, filepath);\n const stats = await fs.stat(fullPath);\n return { lastModified: stats.mtime.toISOString() };\n },\n getIntrospection: (filepath: string) => introspection.getFile(filepath),\n };\n\n const totalFiles = files.length;\n\n // Track progress across parallel operations\n let completedCount = 0;\n\n // Process files in parallel with concurrency control\n const processFile = async (\n filepath: string,\n _index: number\n ): Promise<FileProcessResult> => {\n const relativePath = path.relative(rootDir, filepath);\n\n try {\n const stats = await fs.stat(filepath);\n const lastModified = stats.mtime.toISOString();\n\n // Check if file needs re-indexing\n const existingEntry = manifest.files[relativePath];\n if (existingEntry && existingEntry.lastModified === lastModified) {\n completedCount++;\n logger.debug(\n ` [${completedCount}/${totalFiles}] Skipped ${relativePath} (unchanged)`\n );\n return { relativePath, status: \"skipped\" };\n }\n\n // Read and index file\n const content = await fs.readFile(filepath, \"utf-8\");\n\n // Add introspection for this file (thread-safe - just adds to a Map)\n introspection.addFile(relativePath, content);\n\n // Update progress\n completedCount++;\n logger.progress(\n ` [${completedCount}/${totalFiles}] Processing: ${relativePath}`\n );\n\n const fileIndex = await module.indexFile(relativePath, content, ctx);\n\n if (!fileIndex) {\n logger.debug(\n ` [${completedCount}/${totalFiles}] Skipped ${relativePath} (no chunks)`\n );\n return { relativePath, status: \"skipped\" };\n }\n\n // Write index file\n await writeFileIndex(rootDir, module.id, relativePath, fileIndex, config);\n\n return {\n relativePath,\n status: \"indexed\",\n lastModified,\n chunkCount: fileIndex.chunks.length,\n };\n } catch (error) {\n completedCount++;\n return { relativePath, status: \"error\", error };\n }\n };\n\n // Run parallel processing\n logger.debug(` Using concurrency: ${concurrency}`);\n const results = await parallelMap(files, processFile, concurrency);\n\n // Clear progress line\n logger.clearProgress();\n\n // Process results and update manifest\n for (const item of results) {\n if (!item.success) {\n // This shouldn't happen as we catch errors in processFile\n result.errors++;\n continue;\n }\n\n const fileResult = item.value;\n switch (fileResult.status) {\n case \"indexed\":\n manifest.files[fileResult.relativePath] = {\n lastModified: fileResult.lastModified!,\n chunkCount: fileResult.chunkCount!,\n };\n result.indexed++;\n break;\n case \"skipped\":\n result.skipped++;\n break;\n case \"error\":\n logger.error(\n ` Error indexing ${fileResult.relativePath}: ${fileResult.error}`\n );\n result.errors++;\n break;\n }\n }\n\n // Update manifest\n manifest.lastUpdated = new Date().toISOString();\n await writeModuleManifest(rootDir, module.id, manifest, config);\n\n return result;\n}\n\nasync function findFiles(rootDir: string, config: Config): Promise<string[]> {\n const patterns = config.extensions.map((ext) => `**/*${ext}`);\n const ignorePatterns = config.ignorePaths.map((p) => `**/${p}/**`);\n\n const files: string[] = [];\n for (const pattern of patterns) {\n const matches = await glob(pattern, {\n cwd: rootDir,\n absolute: true,\n ignore: ignorePatterns,\n });\n files.push(...matches);\n }\n\n return [...new Set(files)]; // Remove duplicates\n}\n\nasync function loadModuleManifest(\n rootDir: string,\n moduleId: string,\n config: Config\n): Promise<ModuleManifest> {\n const manifestPath = getModuleManifestPath(rootDir, moduleId, config);\n\n try {\n const content = await fs.readFile(manifestPath, \"utf-8\");\n return JSON.parse(content);\n } catch {\n return {\n moduleId,\n version: \"1.0.0\",\n lastUpdated: new Date().toISOString(),\n files: {},\n };\n }\n}\n\nasync function writeModuleManifest(\n rootDir: string,\n moduleId: string,\n manifest: ModuleManifest,\n config: Config\n): Promise<void> {\n const manifestPath = getModuleManifestPath(rootDir, moduleId, config);\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));\n}\n\nasync function writeFileIndex(\n rootDir: string,\n moduleId: string,\n filepath: string,\n fileIndex: FileIndex,\n config: Config\n): Promise<void> {\n const indexPath = getModuleIndexPath(rootDir, moduleId, config);\n const indexFilePath = path.join(\n indexPath,\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n\n await fs.mkdir(path.dirname(indexFilePath), { recursive: true });\n await fs.writeFile(indexFilePath, JSON.stringify(fileIndex, null, 2));\n}\n\nasync function updateGlobalManifest(\n rootDir: string,\n modules: IndexModule[],\n config: Config\n): Promise<void> {\n const manifestPath = getGlobalManifestPath(rootDir, config);\n\n const manifest: GlobalManifest = {\n version: INDEX_SCHEMA_VERSION,\n lastUpdated: new Date().toISOString(),\n modules: modules.map((m) => m.id),\n };\n\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));\n}\n\n/**\n * Options for cleanup operation\n */\nexport interface CleanupOptions {\n /** Show detailed progress */\n verbose?: boolean;\n /** Logger for progress reporting */\n logger?: Logger;\n}\n\n/**\n * Clean up stale index entries for files that no longer exist\n * @param rootDir - Root directory of the project\n * @param options - Cleanup options\n * @returns Array of cleanup results per module\n */\nexport async function cleanupIndex(\n rootDir: string,\n options: CleanupOptions = {}\n): Promise<CleanupResult[]> {\n const verbose = options.verbose ?? false;\n\n // Create logger\n const logger: Logger = options.logger ?? createLogger({ verbose });\n\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n logger.info(`Cleaning up index in: ${rootDir}`);\n\n // Load config\n const config = await loadConfig(rootDir);\n\n // Register built-in modules\n await registerBuiltInModules();\n\n // Get enabled modules\n const enabledModules = registry.getEnabled(config);\n\n if (enabledModules.length === 0) {\n logger.info(\"No modules enabled.\");\n return [];\n }\n\n const results: CleanupResult[] = [];\n\n for (const module of enabledModules) {\n logger.info(`\\n[${module.name}] Checking for stale entries...`);\n\n const result = await cleanupModuleIndex(rootDir, module.id, config, logger);\n results.push(result);\n\n logger.info(\n `[${module.name}] Removed ${result.removed} stale entries, kept ${result.kept} valid entries`\n );\n }\n\n return results;\n}\n\n/**\n * Clean up stale index entries for a specific module\n */\nasync function cleanupModuleIndex(\n rootDir: string,\n moduleId: string,\n config: Config,\n logger: Logger\n): Promise<CleanupResult> {\n const result: CleanupResult = {\n moduleId,\n removed: 0,\n kept: 0,\n };\n\n // Load manifest\n const manifest = await loadModuleManifest(rootDir, moduleId, config);\n const indexPath = getModuleIndexPath(rootDir, moduleId, config);\n\n const filesToRemove: string[] = [];\n const updatedFiles: ModuleManifest[\"files\"] = {};\n\n // Check each indexed file\n for (const [filepath, entry] of Object.entries(manifest.files)) {\n const fullPath = path.join(rootDir, filepath);\n\n try {\n await fs.access(fullPath);\n // File exists, keep it\n updatedFiles[filepath] = entry;\n result.kept++;\n } catch {\n // File doesn't exist, mark for removal\n filesToRemove.push(filepath);\n result.removed++;\n logger.debug(` Removing stale entry: ${filepath}`);\n }\n }\n\n // Remove stale index files\n for (const filepath of filesToRemove) {\n const indexFilePath = path.join(\n indexPath,\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n try {\n await fs.unlink(indexFilePath);\n } catch {\n // Index file may not exist, that's okay\n }\n }\n\n // Update manifest with only valid files\n manifest.files = updatedFiles;\n manifest.lastUpdated = new Date().toISOString();\n await writeModuleManifest(rootDir, moduleId, manifest, config);\n\n // Clean up empty directories in the index\n await cleanupEmptyDirectories(indexPath);\n\n return result;\n}\n\n/**\n * Recursively remove empty directories\n */\nasync function cleanupEmptyDirectories(dir: string): Promise<boolean> {\n try {\n const entries = await fs.readdir(dir, { withFileTypes: true });\n\n // Process subdirectories first\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const subDir = path.join(dir, entry.name);\n await cleanupEmptyDirectories(subDir);\n }\n }\n\n // Check if directory is now empty (re-read after potential subdirectory removal)\n const remainingEntries = await fs.readdir(dir);\n\n // Don't remove the root index directory or manifest files\n if (remainingEntries.length === 0) {\n await fs.rmdir(dir);\n return true;\n }\n\n return false;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the current status of the index\n * @param rootDir - Root directory of the project\n * @returns Index status information\n */\nexport async function getIndexStatus(rootDir: string): Promise<IndexStatus> {\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Load config\n const config = await loadConfig(rootDir);\n\n // Get index location (now in temp directory)\n const location = getIndexLocation(rootDir);\n const indexDir = location.indexDir;\n\n const status: IndexStatus = {\n exists: false,\n rootDir,\n indexDir,\n modules: [],\n totalFiles: 0,\n };\n\n // Check if index directory exists\n try {\n await fs.access(indexDir);\n } catch {\n return status;\n }\n\n // Try to load global manifest\n try {\n const globalManifestPath = getGlobalManifestPath(rootDir, config);\n const content = await fs.readFile(globalManifestPath, \"utf-8\");\n const globalManifest: GlobalManifest = JSON.parse(content);\n\n status.exists = true;\n status.lastUpdated = globalManifest.lastUpdated;\n\n // Load each module's manifest\n for (const moduleId of globalManifest.modules) {\n try {\n const manifest = await loadModuleManifest(rootDir, moduleId, config);\n const fileCount = Object.keys(manifest.files).length;\n\n status.modules.push({\n id: moduleId,\n fileCount,\n lastUpdated: manifest.lastUpdated,\n });\n\n status.totalFiles += fileCount;\n } catch {\n // Module manifest doesn't exist or is corrupt\n }\n }\n } catch {\n // Global manifest doesn't exist - check if there's any index data\n try {\n const entries = await fs.readdir(path.join(indexDir, \"index\"));\n if (entries.length > 0) {\n status.exists = true;\n // Try to load manifests for known modules\n for (const entry of entries) {\n try {\n const manifest = await loadModuleManifest(rootDir, entry, config);\n const fileCount = Object.keys(manifest.files).length;\n\n status.modules.push({\n id: entry,\n fileCount,\n lastUpdated: manifest.lastUpdated,\n });\n\n status.totalFiles += fileCount;\n } catch {\n // Skip\n }\n }\n }\n } catch {\n // No index directory\n }\n }\n\n return status;\n}\n\n// Re-export watcher\nexport { watchDirectory, type WatchOptions, type FileWatcher } from \"./watcher\";\n",
|
|
39
39
|
"// Module registry - manages available index modules\nimport { IndexModule, ModuleRegistry, Config } from \"../types\";\n\nclass ModuleRegistryImpl implements ModuleRegistry {\n private modules = new Map<string, IndexModule>();\n\n register(module: IndexModule): void {\n // Idempotent registration: avoid noisy logs when called multiple times\n if (!this.modules.has(module.id)) {\n this.modules.set(module.id, module);\n }\n }\n\n get(id: string): IndexModule | undefined {\n return this.modules.get(id);\n }\n\n list(): IndexModule[] {\n return Array.from(this.modules.values());\n }\n\n getEnabled(config: Config): IndexModule[] {\n const enabledIds = new Set(\n config.modules.filter((m) => m.enabled).map((m) => m.id)\n );\n\n return this.list().filter((m) => enabledIds.has(m.id));\n }\n}\n\n// Global singleton registry\nexport const registry: ModuleRegistry = new ModuleRegistryImpl();\n\n// Auto-register built-in modules\nexport async function registerBuiltInModules(): Promise<void> {\n // Dynamic import to avoid circular dependencies\n const { CoreModule } = await import(\"./core\");\n const { TypeScriptModule } = await import(\"./language/typescript\");\n const { JsonModule } = await import(\"./data/json\");\n const { MarkdownModule } = await import(\"./docs/markdown\");\n\n // Register core module first (fast, language-agnostic)\n registry.register(new CoreModule());\n\n // Register language-specific modules\n registry.register(new TypeScriptModule());\n\n // Register data format modules\n registry.register(new JsonModule());\n\n // Register documentation modules\n registry.register(new MarkdownModule());\n}\n",
|
|
40
40
|
"/**\n * Introspection Index Storage\n *\n * Manages file metadata for context-aware search boosting.\n * Handles saving and loading introspection data to/from disk.\n */\n\nimport * as path from \"path\";\nimport * as fs from \"fs/promises\";\nimport type {\n FileIntrospection,\n ProjectStructure,\n IntrospectionConfig,\n Scope,\n Config,\n} from \"../../domain/entities\";\nimport { detectProjectStructure } from \"./projectDetector\";\nimport { introspectFile } from \"../../domain/services/introspection\";\nimport { getRaggrepDir } from \"../config\";\n\n/**\n * Introspection index for a workspace.\n */\nexport class IntrospectionIndex {\n private rootDir: string;\n private structure: ProjectStructure | null = null;\n private files: Map<string, FileIntrospection> = new Map();\n private config: IntrospectionConfig = {};\n\n constructor(rootDir: string) {\n this.rootDir = rootDir;\n }\n\n /**\n * Initialize by detecting project structure.\n */\n async initialize(): Promise<void> {\n this.structure = await detectProjectStructure(this.rootDir);\n\n // Try to load config overrides\n try {\n const configPath = path.join(this.rootDir, \".raggrep\", \"config.json\");\n const configContent = await fs.readFile(configPath, \"utf-8\");\n const config = JSON.parse(configContent);\n this.config = config.introspection || {};\n } catch {\n // No config or introspection section\n }\n }\n\n /**\n * Get project structure.\n */\n getStructure(): ProjectStructure | null {\n return this.structure;\n }\n\n /**\n * Introspect a file and add to index.\n */\n addFile(filepath: string, content?: string): FileIntrospection {\n if (!this.structure) {\n throw new Error(\"IntrospectionIndex not initialized\");\n }\n\n const intro = introspectFile(filepath, this.structure, content);\n\n // Apply config overrides\n this.applyOverrides(intro);\n\n this.files.set(filepath, intro);\n return intro;\n }\n\n /**\n * Get introspection for a file.\n */\n getFile(filepath: string): FileIntrospection | undefined {\n return this.files.get(filepath);\n }\n\n /**\n * Get all introspected files.\n */\n getAllFiles(): FileIntrospection[] {\n return Array.from(this.files.values());\n }\n\n /**\n * Apply config overrides to introspection.\n */\n private applyOverrides(intro: FileIntrospection): void {\n if (!this.config.projects) return;\n\n for (const [projectPath, overrides] of Object.entries(\n this.config.projects\n )) {\n if (\n intro.filepath.startsWith(projectPath + \"/\") ||\n intro.project.root === projectPath\n ) {\n if (overrides.scope) {\n intro.scope = overrides.scope as Scope;\n }\n if (overrides.framework) {\n intro.framework = overrides.framework;\n }\n break;\n }\n }\n }\n\n /**\n * Save introspection index to disk.\n */\n async save(config: Config): Promise<void> {\n const introDir = path.join(\n getRaggrepDir(this.rootDir, config),\n \"introspection\"\n );\n await fs.mkdir(introDir, { recursive: true });\n\n // Save project structure\n const projectPath = path.join(introDir, \"_project.json\");\n await fs.writeFile(\n projectPath,\n JSON.stringify(\n {\n version: \"1.0.0\",\n lastUpdated: new Date().toISOString(),\n structure: this.structure,\n },\n null,\n 2\n )\n );\n\n // Save file introspections in directory structure\n for (const [filepath, intro] of this.files) {\n const introFilePath = path.join(\n introDir,\n \"files\",\n filepath.replace(/\\.[^.]+$/, \".json\")\n );\n await fs.mkdir(path.dirname(introFilePath), { recursive: true });\n await fs.writeFile(introFilePath, JSON.stringify(intro, null, 2));\n }\n }\n\n /**\n * Load introspection index from disk.\n */\n async load(config: Config): Promise<void> {\n const introDir = path.join(\n getRaggrepDir(this.rootDir, config),\n \"introspection\"\n );\n\n try {\n // Load project structure\n const projectPath = path.join(introDir, \"_project.json\");\n const projectContent = await fs.readFile(projectPath, \"utf-8\");\n const projectData = JSON.parse(projectContent);\n this.structure = projectData.structure;\n\n // Load file introspections\n await this.loadFilesRecursive(path.join(introDir, \"files\"), \"\");\n } catch {\n // No introspection index yet\n this.structure = null;\n this.files.clear();\n }\n }\n\n /**\n * Recursively load file introspections.\n */\n private async loadFilesRecursive(\n basePath: string,\n prefix: string\n ): Promise<void> {\n try {\n const entries = await fs.readdir(basePath, { withFileTypes: true });\n\n for (const entry of entries) {\n const entryPath = path.join(basePath, entry.name);\n const relativePath = prefix ? `${prefix}/${entry.name}` : entry.name;\n\n if (entry.isDirectory()) {\n await this.loadFilesRecursive(entryPath, relativePath);\n } else if (entry.name.endsWith(\".json\")) {\n const content = await fs.readFile(entryPath, \"utf-8\");\n const intro: FileIntrospection = JSON.parse(content);\n this.files.set(intro.filepath, intro);\n }\n }\n } catch {\n // Directory doesn't exist\n }\n }\n\n /**\n * Clear the index.\n */\n clear(): void {\n this.files.clear();\n this.structure = null;\n }\n}\n",
|
|
41
41
|
"/**\n * Project Structure Detection\n *\n * Auto-detects monorepo structure and project types from:\n * - Folder layout (apps/, packages/, etc.)\n * - package.json files (for TypeScript/JavaScript projects)\n *\n * This module performs file I/O to scan the filesystem.\n */\n\nimport * as path from \"path\";\nimport * as fs from \"fs/promises\";\nimport type {\n Project,\n ProjectType,\n ProjectStructure,\n} from \"../../domain/entities/introspection\";\n\n/** Maximum depth to scan for package.json files */\nconst MAX_SCAN_DEPTH = 4;\n\n/** Directories to skip when scanning for package.json */\nconst SKIP_DIRS = new Set([\n \"node_modules\",\n \".git\",\n \"dist\",\n \"build\",\n \".next\",\n \".nuxt\",\n \"coverage\",\n \".raggrep\",\n]);\n\n/**\n * Parsed information from a package.json file.\n */\ninterface PackageJsonInfo {\n name: string;\n relativePath: string;\n type: ProjectType;\n hasWorkspaces: boolean;\n}\n\n/**\n * Scan for package.json files and extract project info.\n */\nasync function scanForPackageJsons(\n rootDir: string,\n currentDir: string = \"\",\n depth: number = 0\n): Promise<PackageJsonInfo[]> {\n if (depth > MAX_SCAN_DEPTH) return [];\n\n const results: PackageJsonInfo[] = [];\n const fullDir = currentDir ? path.join(rootDir, currentDir) : rootDir;\n\n try {\n const entries = await fs.readdir(fullDir, { withFileTypes: true });\n\n // Check for package.json in current directory\n const hasPackageJson = entries.some(\n (e) => e.isFile() && e.name === \"package.json\"\n );\n\n if (hasPackageJson && currentDir) {\n const info = await parsePackageJson(rootDir, currentDir);\n if (info) results.push(info);\n }\n\n // Recursively scan subdirectories\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (SKIP_DIRS.has(entry.name)) continue;\n\n const subPath = currentDir ? `${currentDir}/${entry.name}` : entry.name;\n const subResults = await scanForPackageJsons(rootDir, subPath, depth + 1);\n results.push(...subResults);\n }\n } catch {\n // Directory not readable\n }\n\n return results;\n}\n\n/**\n * Parse a package.json file and extract project metadata.\n */\nasync function parsePackageJson(\n rootDir: string,\n relativePath: string\n): Promise<PackageJsonInfo | null> {\n try {\n const packageJsonPath = path.join(rootDir, relativePath, \"package.json\");\n const content = await fs.readFile(packageJsonPath, \"utf-8\");\n const pkg = JSON.parse(content);\n\n const name = pkg.name || path.basename(relativePath);\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n let type: ProjectType = \"unknown\";\n\n if (deps[\"next\"] || deps[\"react\"] || deps[\"vue\"] || deps[\"svelte\"]) {\n type = \"app\";\n } else if (\n deps[\"express\"] ||\n deps[\"fastify\"] ||\n deps[\"koa\"] ||\n deps[\"hono\"]\n ) {\n type = \"service\";\n } else if (pkg.main || pkg.exports) {\n type = \"library\";\n }\n\n const hasWorkspaces = Boolean(pkg.workspaces);\n return { name, relativePath, type, hasWorkspaces };\n } catch {\n return null;\n }\n}\n\n/**\n * Get project type from pattern directory name.\n */\nfunction getProjectType(patternDir: string): ProjectType {\n switch (patternDir) {\n case \"apps\":\n return \"app\";\n case \"packages\":\n case \"libs\":\n return \"library\";\n case \"services\":\n return \"service\";\n case \"scripts\":\n case \"tools\":\n return \"script\";\n default:\n return \"unknown\";\n }\n}\n\n/**\n * Detect project structure in a workspace.\n *\n * Uses two strategies:\n * 1. Folder pattern detection (apps/, packages/, etc.)\n * 2. package.json scanning for more accurate project boundaries\n */\nexport async function detectProjectStructure(\n rootDir: string\n): Promise<ProjectStructure> {\n const projectMap = new Map<string, Project>();\n let isMonorepo = false;\n\n try {\n const entries = await fs.readdir(rootDir, { withFileTypes: true });\n const dirNames = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n\n // Strategy 1: Check for standard monorepo patterns\n const monorepoPatterns = [\"apps\", \"packages\", \"libs\", \"services\"];\n const hasMonorepoStructure = monorepoPatterns.some((p) =>\n dirNames.includes(p)\n );\n\n if (hasMonorepoStructure) {\n isMonorepo = true;\n\n for (const pattern of monorepoPatterns) {\n if (!dirNames.includes(pattern)) continue;\n\n const patternDir = path.join(rootDir, pattern);\n try {\n const subDirs = await fs.readdir(patternDir, { withFileTypes: true });\n\n for (const subDir of subDirs) {\n if (!subDir.isDirectory()) continue;\n\n const projectRoot = `${pattern}/${subDir.name}`;\n const type = getProjectType(pattern);\n\n projectMap.set(projectRoot, {\n name: subDir.name,\n root: projectRoot,\n type,\n });\n }\n } catch {\n // Directory doesn't exist or not readable\n }\n }\n }\n\n // Strategy 2: Scan for package.json files\n const packageJsons = await scanForPackageJsons(rootDir);\n\n for (const pkg of packageJsons) {\n if (pkg.hasWorkspaces) isMonorepo = true;\n if (packageJsons.length > 1) isMonorepo = true;\n\n projectMap.set(pkg.relativePath, {\n name: pkg.name,\n root: pkg.relativePath,\n type: pkg.type,\n });\n }\n\n // Check root package.json\n let rootType: ProjectType = \"unknown\";\n try {\n const rootPkgPath = path.join(rootDir, \"package.json\");\n const rootPkg = JSON.parse(await fs.readFile(rootPkgPath, \"utf-8\"));\n\n if (rootPkg.workspaces) isMonorepo = true;\n\n const deps = { ...rootPkg.dependencies, ...rootPkg.devDependencies };\n if (deps[\"next\"] || deps[\"react\"] || deps[\"vue\"]) {\n rootType = \"app\";\n } else if (deps[\"express\"] || deps[\"fastify\"] || deps[\"koa\"]) {\n rootType = \"service\";\n }\n } catch {\n // No package.json\n }\n\n const projects = Array.from(projectMap.values()).sort(\n (a, b) => a.root.length - b.root.length\n );\n\n return {\n projects,\n isMonorepo,\n rootType: isMonorepo ? undefined : rootType,\n };\n } catch {\n return {\n projects: [],\n isMonorepo: false,\n rootType: \"unknown\",\n };\n }\n}\n\n\n\n",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"/**\n * Type definitions for the RAG system\n *\n * This file re-exports domain entities and defines module interfaces.\n * For new code, prefer importing directly from 'domain/entities'.\n */\n\n// Re-export all domain entities for backwards compatibility\nexport type {\n Chunk,\n ChunkType,\n FileIndex,\n FileManifestEntry,\n ModuleManifest,\n GlobalManifest,\n FileSummary,\n Tier1Manifest,\n SearchResult,\n SearchOptions,\n SearchContributions,\n CoreContribution,\n LanguageContribution,\n IntrospectionContribution,\n Config,\n ModuleConfig,\n} from \"./domain/entities\";\n\nexport {\n createChunkId,\n DEFAULT_SEARCH_OPTIONS,\n DEFAULT_IGNORE_PATHS,\n DEFAULT_EXTENSIONS,\n createDefaultConfig,\n} from \"./domain/entities\";\n\n// ============================================================================\n// Module System Interfaces\n// ============================================================================\n\nimport type {\n Config,\n FileIndex,\n SearchResult,\n SearchOptions,\n ModuleConfig,\n} from \"./domain/entities\";\n\n/**\n * Context provided to modules during indexing\n */\nimport type { FileIntrospection } from \"./domain/entities/introspection\";\n\nexport interface IndexContext {\n rootDir: string;\n config: Config;\n /** Get the content of a file */\n readFile: (filepath: string) => Promise<string>;\n /** Get file stats */\n getFileStats: (filepath: string) => Promise<{ lastModified: string }>;\n /** Get introspection data for a file (if available) */\n getIntrospection?: (filepath: string) => FileIntrospection | undefined;\n}\n\n/**\n * Context provided to modules during search\n */\nexport interface SearchContext {\n rootDir: string;\n config: Config;\n /** Load index data for a specific file */\n loadFileIndex: (filepath: string) => Promise<FileIndex | null>;\n /** List all indexed files */\n listIndexedFiles: () => Promise<string[]>;\n}\n\n/**\n * Base interface for index modules\n *\n * Modules provide different strategies for indexing and retrieving code.\n * Examples:\n * - SemanticModule: Uses text embeddings for natural language search\n * - SymbolModule: Uses TypeScript/LSP symbol information\n * - ASTModule: Uses AST-based code structure analysis\n */\nexport interface IndexModule {\n /** Unique identifier for this module */\n readonly id: string;\n\n /** Human-readable name */\n readonly name: string;\n\n /** Description of what this module indexes */\n readonly description: string;\n\n /** Version of the module (for index compatibility) */\n readonly version: string;\n\n /**\n * Index a single file\n * @returns FileIndex with module-specific data, or null if file should be skipped\n */\n indexFile(\n filepath: string,\n content: string,\n ctx: IndexContext\n ): Promise<FileIndex | null>;\n\n /**\n * Search the index with a query\n * @returns Ranked search results\n */\n search(\n query: string,\n ctx: SearchContext,\n options?: SearchOptions\n ): Promise<SearchResult[]>;\n\n /**\n * Optional: Initialize the module (e.g., load models, connect to services)\n */\n initialize?(config: ModuleConfig): Promise<void>;\n\n /**\n * Optional: Called after all files have been indexed.\n * Use for building secondary indexes (e.g., Tier 1 summaries, BM25 index).\n */\n finalize?(ctx: IndexContext): Promise<void>;\n\n /**\n * Optional: Check if this module supports a given file.\n * Used to pre-filter files before indexing to show accurate progress.\n * If not implemented, all files are passed to indexFile.\n */\n supportsFile?(filepath: string): boolean;\n\n /**\n * Optional: Cleanup resources\n */\n dispose?(): Promise<void>;\n}\n\n/**\n * Registry for managing available modules\n */\nexport interface ModuleRegistry {\n register(module: IndexModule): void;\n get(id: string): IndexModule | undefined;\n list(): IndexModule[];\n getEnabled(config: Config): IndexModule[];\n}\n",
|
|
46
46
|
"/**\n * RAGgrep - Local filesystem-based RAG system for codebases\n *\n * Provides semantic search over code using local embeddings.\n *\n * @example\n * ```ts\n * import raggrep from 'raggrep';\n *\n * // Index a directory (automatically cleans up deleted files)\n * await raggrep.index('/path/to/project');\n *\n * // Search the index\n * const results = await raggrep.search('/path/to/project', 'user authentication');\n *\n * // Reset (clear) the index completely\n * await raggrep.reset('/path/to/project');\n * ```\n *\n * @example With custom logger\n * ```ts\n * import raggrep, { createLogger, createInlineLogger } from 'raggrep';\n *\n * // Create a logger (defaults to console)\n * const logger = createLogger({ verbose: true });\n *\n * // Or use inline logger for CLI-style progress\n * const inlineLogger = createInlineLogger({ verbose: false });\n *\n * await raggrep.index('/path/to/project', { logger: inlineLogger });\n * ```\n */\n\nimport { indexDirectory, cleanupIndex, resetIndex } from \"./app/indexer\";\nimport type {\n IndexResult,\n IndexOptions,\n CleanupResult,\n CleanupOptions,\n ResetResult,\n} from \"./app/indexer\";\nimport { search as searchIndex, formatSearchResults } from \"./app/search\";\nimport type { SearchOptions, SearchResult } from \"./types\";\nimport type { Logger, LoggerFactory } from \"./domain/ports\";\nimport {\n ConsoleLogger,\n InlineProgressLogger,\n SilentLogger,\n createLogger,\n createInlineLogger,\n createSilentLogger,\n} from \"./infrastructure/logger\";\n\n// Re-export types\nexport type {\n IndexResult,\n IndexOptions,\n CleanupResult,\n CleanupOptions,\n ResetResult,\n} from \"./app/indexer\";\nexport type { SearchOptions, SearchResult, Chunk, FileIndex } from \"./types\";\nexport type { Logger, LoggerFactory } from \"./domain/ports\";\n\n// Re-export logger implementations and factories\nexport {\n ConsoleLogger,\n InlineProgressLogger,\n SilentLogger,\n createLogger,\n createInlineLogger,\n createSilentLogger,\n};\n\n/**\n * Index a directory for semantic search.\n *\n * Creates a `.raggrep/` folder with the index data.\n * Automatically cleans up stale entries for deleted files.\n *\n * @param directory - Path to the directory to index\n * @param options - Index options\n * @returns Array of results per module\n *\n * @example\n * ```ts\n * // Basic indexing\n * await raggrep.index('./my-project');\n *\n * // With options\n * await raggrep.index('./my-project', {\n * model: 'bge-small-en-v1.5',\n * verbose: true\n * });\n * ```\n */\nexport async function index(\n directory: string,\n options: IndexOptions = {}\n): Promise<IndexResult[]> {\n return indexDirectory(directory, options);\n}\n\n/**\n * Search the indexed codebase.\n *\n * @param directory - Path to the indexed directory\n * @param query - Natural language search query\n * @param options - Search options\n * @returns Array of search results sorted by relevance\n *\n * @example\n * ```ts\n * // Basic search\n * const results = await raggrep.search('./my-project', 'user login');\n *\n * // With options\n * const results = await raggrep.search('./my-project', 'database query', {\n * topK: 5,\n * minScore: 0.2,\n * filePatterns: ['*.ts']\n * });\n * ```\n */\nexport async function search(\n directory: string,\n query: string,\n options: SearchOptions = {}\n): Promise<SearchResult[]> {\n return searchIndex(directory, query, options);\n}\n\n/**\n * Clean up stale index entries for files that no longer exist.\n *\n * Note: Cleanup is now automatic during indexing. This function is provided\n * for explicit cleanup without re-indexing.\n *\n * @param directory - Path to the indexed directory\n * @param options - Cleanup options\n * @returns Array of cleanup results per module\n *\n * @example\n * ```ts\n * const results = await raggrep.cleanup('./my-project');\n * console.log(`Removed ${results[0].removed} stale entries`);\n * ```\n */\nexport async function cleanup(\n directory: string,\n options: CleanupOptions = {}\n): Promise<CleanupResult[]> {\n return cleanupIndex(directory, options);\n}\n\n/**\n * Reset (completely clear) the index for a directory.\n *\n * @param directory - Path to the indexed directory\n * @returns Result with success status and removed index path\n * @throws Error if no index exists for the directory\n *\n * @example\n * ```ts\n * try {\n * const result = await raggrep.reset('./my-project');\n * console.log(`Cleared index at: ${result.indexDir}`);\n * } catch (error) {\n * console.error('No index found');\n * }\n * ```\n */\nexport async function reset(directory: string): Promise<ResetResult> {\n return resetIndex(directory);\n}\n\n/**\n * Format search results for display.\n *\n * @param results - Array of search results\n * @returns Formatted string for console output\n */\nexport { formatSearchResults };\n\n// Default export for convenient importing\nconst raggrep = {\n index,\n search,\n cleanup,\n reset,\n formatSearchResults,\n};\n\nexport default raggrep;\n"
|
|
47
47
|
],
|
|
48
|
-
"mappings": "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",
|
|
49
|
-
"debugId": "
|
|
48
|
+
"mappings": "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",
|
|
49
|
+
"debugId": "F5160C7762E8AC7864756E2164756E21",
|
|
50
50
|
"names": []
|
|
51
51
|
}
|