raggrep 0.1.7 → 0.2.0

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/index.js.map CHANGED
@@ -12,8 +12,8 @@
12
12
  "/**\n * Next.js Framework Conventions\n *\n * Patterns for recognizing Next.js specific files and structures.\n */\n\nimport type {\n FileConvention,\n FrameworkConventions,\n} from \"../../../entities/conventions\";\n\nconst nextjsConventions: FileConvention[] = [\n // ============================================================================\n // Configuration\n // ============================================================================\n {\n id: \"next-config\",\n name: \"Next.js Config\",\n description: \"Next.js framework configuration\",\n category: \"configuration\",\n match: (filepath, filename) =>\n filename === \"next.config.js\" ||\n filename === \"next.config.mjs\" ||\n filename === \"next.config.ts\",\n keywords: [\"nextjs\", \"next\", \"config\", \"framework\", \"settings\"],\n },\n {\n id: \"next-env\",\n name: \"Next.js Environment Types\",\n description: \"Next.js TypeScript environment declarations\",\n category: \"types\",\n match: (filepath, filename) => filename === \"next-env.d.ts\",\n keywords: [\"nextjs\", \"types\", \"typescript\", \"declarations\"],\n },\n\n // ============================================================================\n // App Router (Next.js 13+)\n // ============================================================================\n {\n id: \"next-layout\",\n name: \"Next.js Layout\",\n description: \"Next.js layout component (App Router)\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"layout.tsx\" || filename === \"layout.js\") &&\n (filepath.includes(\"/app/\") || filepath.startsWith(\"app/\")),\n keywords: [\"nextjs\", \"layout\", \"wrapper\", \"template\", \"app router\"],\n dynamicKeywords: (filepath) => {\n // Extract route segment from path\n const match = filepath.match(/app\\/(.+?)\\/layout\\./);\n if (match) {\n const segments = match[1]\n .split(\"/\")\n .filter((s) => !s.startsWith(\"(\") && !s.startsWith(\"[\"));\n return segments.map((s) => s.toLowerCase());\n }\n if (filepath === \"app/layout.tsx\" || filepath === \"app/layout.js\") {\n return [\"root\", \"main\"];\n }\n return [];\n },\n },\n {\n id: \"next-page\",\n name: \"Next.js Page\",\n description: \"Next.js page component (App Router)\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"page.tsx\" || filename === \"page.js\") &&\n (filepath.includes(\"/app/\") || filepath.startsWith(\"app/\")),\n keywords: [\"nextjs\", \"page\", \"route\", \"view\", \"app router\"],\n dynamicKeywords: (filepath) => {\n // Extract route from path\n const match = filepath.match(/app\\/(.+?)\\/page\\./);\n if (match) {\n const segments = match[1]\n .split(\"/\")\n .filter((s) => !s.startsWith(\"(\"))\n .map((s) => s.replace(/^\\[(.+?)\\]$/, \"$1\")); // [id] -> id\n return segments.map((s) => s.toLowerCase());\n }\n if (filepath === \"app/page.tsx\" || filepath === \"app/page.js\") {\n return [\"home\", \"index\", \"root\"];\n }\n return [];\n },\n },\n {\n id: \"next-loading\",\n name: \"Next.js Loading\",\n description: \"Next.js loading UI component\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"loading.tsx\" || filename === \"loading.js\") &&\n (filepath.includes(\"/app/\") || filepath.startsWith(\"app/\")),\n keywords: [\"nextjs\", \"loading\", \"suspense\", \"skeleton\", \"spinner\"],\n },\n {\n id: \"next-error\",\n name: \"Next.js Error\",\n description: \"Next.js error boundary component\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"error.tsx\" || filename === \"error.js\") &&\n (filepath.includes(\"/app/\") || filepath.startsWith(\"app/\")),\n keywords: [\"nextjs\", \"error\", \"boundary\", \"fallback\", \"catch\"],\n },\n {\n id: \"next-not-found\",\n name: \"Next.js Not Found\",\n description: \"Next.js 404 page component\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"not-found.tsx\" || filename === \"not-found.js\") &&\n (filepath.includes(\"/app/\") || filepath.startsWith(\"app/\")),\n keywords: [\"nextjs\", \"404\", \"not found\", \"missing\", \"error\"],\n },\n {\n id: \"next-template\",\n name: \"Next.js Template\",\n description: \"Next.js template component\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"template.tsx\" || filename === \"template.js\") &&\n (filepath.includes(\"/app/\") || filepath.startsWith(\"app/\")),\n keywords: [\"nextjs\", \"template\", \"wrapper\", \"app router\"],\n },\n\n // ============================================================================\n // API Routes (App Router)\n // ============================================================================\n {\n id: \"next-route-handler\",\n name: \"Next.js Route Handler\",\n description: \"Next.js API route handler (App Router)\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"route.ts\" || filename === \"route.js\") &&\n (filepath.includes(\"/app/\") || filepath.startsWith(\"app/\")),\n keywords: [\"nextjs\", \"api\", \"route\", \"handler\", \"endpoint\", \"rest\"],\n dynamicKeywords: (filepath) => {\n // Extract API path\n const match = filepath.match(/app\\/api\\/(.+?)\\/route\\./);\n if (match) {\n const segments = match[1]\n .split(\"/\")\n .filter((s) => !s.startsWith(\"(\"))\n .map((s) => s.replace(/^\\[(.+?)\\]$/, \"$1\"));\n return [\"api\", ...segments.map((s) => s.toLowerCase())];\n }\n return [\"api\"];\n },\n },\n\n // ============================================================================\n // Middleware & Special Files\n // ============================================================================\n {\n id: \"next-middleware\",\n name: \"Next.js Middleware\",\n description: \"Next.js edge middleware\",\n category: \"framework\",\n match: (filepath, filename) =>\n filename === \"middleware.ts\" || filename === \"middleware.js\",\n keywords: [\"nextjs\", \"middleware\", \"edge\", \"request\", \"interceptor\"],\n },\n {\n id: \"next-global-error\",\n name: \"Next.js Global Error\",\n description: \"Next.js global error handler\",\n category: \"framework\",\n match: (filepath, filename) =>\n filename === \"global-error.tsx\" || filename === \"global-error.js\",\n keywords: [\"nextjs\", \"error\", \"global\", \"boundary\", \"catch\"],\n },\n\n // ============================================================================\n // Pages Router (Legacy)\n // ============================================================================\n {\n id: \"next-pages-api\",\n name: \"Next.js API Route (Pages)\",\n description: \"Next.js API route (Pages Router)\",\n category: \"framework\",\n match: (filepath) =>\n filepath.includes(\"/pages/api/\") || filepath.startsWith(\"pages/api/\"),\n keywords: [\"nextjs\", \"api\", \"route\", \"handler\", \"endpoint\", \"pages router\"],\n dynamicKeywords: (filepath) => {\n const match = filepath.match(/pages\\/api\\/(.+?)\\.(ts|js)/);\n if (match) {\n const segments = match[1]\n .split(\"/\")\n .map((s) => s.replace(/^\\[(.+?)\\]$/, \"$1\"));\n return [\"api\", ...segments.map((s) => s.toLowerCase())];\n }\n return [\"api\"];\n },\n },\n {\n id: \"next-pages-document\",\n name: \"Next.js Document\",\n description: \"Next.js custom document (Pages Router)\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"_document.tsx\" || filename === \"_document.js\") &&\n (filepath.includes(\"/pages/\") || filepath.startsWith(\"pages/\")),\n keywords: [\"nextjs\", \"document\", \"html\", \"head\", \"body\", \"pages router\"],\n },\n {\n id: \"next-pages-app\",\n name: \"Next.js App (Pages)\",\n description: \"Next.js custom app (Pages Router)\",\n category: \"framework\",\n match: (filepath, filename) =>\n (filename === \"_app.tsx\" || filename === \"_app.js\") &&\n (filepath.includes(\"/pages/\") || filepath.startsWith(\"pages/\")),\n keywords: [\"nextjs\", \"app\", \"wrapper\", \"provider\", \"pages router\"],\n },\n];\n\n/**\n * Next.js framework conventions provider.\n */\nexport const nextjsFramework: FrameworkConventions = {\n id: \"nextjs\",\n name: \"Next.js\",\n detect: (filepath) => {\n // Detect if this is likely a Next.js project\n return (\n filepath === \"next.config.js\" ||\n filepath === \"next.config.mjs\" ||\n filepath === \"next.config.ts\" ||\n filepath.includes(\"/app/page.\") ||\n filepath.includes(\"/pages/_app.\")\n );\n },\n conventions: nextjsConventions,\n};\n",
13
13
  "/**\n * Convex Framework Conventions\n *\n * Patterns for recognizing Convex backend files and structures.\n * Convex is a backend platform with real-time sync.\n */\n\nimport type {\n FileConvention,\n FrameworkConventions,\n} from \"../../../entities/conventions\";\n\nconst convexConventions: FileConvention[] = [\n // ============================================================================\n // Configuration\n // ============================================================================\n {\n id: \"convex-config\",\n name: \"Convex Config\",\n description: \"Convex project configuration\",\n category: \"configuration\",\n match: (filepath, filename) => filename === \"convex.json\",\n keywords: [\"convex\", \"config\", \"backend\", \"settings\"],\n },\n\n // ============================================================================\n // Schema\n // ============================================================================\n {\n id: \"convex-schema\",\n name: \"Convex Schema\",\n description: \"Convex database schema definition\",\n category: \"framework\",\n match: (filepath, filename) =>\n filename === \"schema.ts\" &&\n (filepath.includes(\"/convex/\") || filepath.startsWith(\"convex/\")),\n keywords: [\"convex\", \"schema\", \"database\", \"tables\", \"types\", \"model\"],\n },\n\n // ============================================================================\n // Functions\n // ============================================================================\n {\n id: \"convex-function\",\n name: \"Convex Function File\",\n description: \"Convex backend function file\",\n category: \"framework\",\n match: (filepath, filename, extension) =>\n (extension === \".ts\" || extension === \".js\") &&\n (filepath.includes(\"/convex/\") || filepath.startsWith(\"convex/\")) &&\n !filepath.includes(\"/_generated/\") &&\n filename !== \"schema.ts\" &&\n !filename.startsWith(\"_\"),\n keywords: [\"convex\", \"function\", \"backend\", \"query\", \"mutation\", \"action\"],\n dynamicKeywords: (filepath) => {\n // Extract function file name as keyword\n const match = filepath.match(/convex\\/(.+?)\\.(ts|js)/);\n if (match) {\n const name = match[1].replace(/\\//g, \" \").split(\" \").pop() || \"\";\n if (name && ![\"schema\", \"http\", \"crons\"].includes(name)) {\n return [name.toLowerCase()];\n }\n }\n return [];\n },\n },\n\n // ============================================================================\n // HTTP Routes\n // ============================================================================\n {\n id: \"convex-http\",\n name: \"Convex HTTP Routes\",\n description: \"Convex HTTP endpoint definitions\",\n category: \"framework\",\n match: (filepath, filename) =>\n filename === \"http.ts\" &&\n (filepath.includes(\"/convex/\") || filepath.startsWith(\"convex/\")),\n keywords: [\"convex\", \"http\", \"routes\", \"api\", \"endpoints\", \"rest\"],\n },\n\n // ============================================================================\n // Cron Jobs\n // ============================================================================\n {\n id: \"convex-crons\",\n name: \"Convex Cron Jobs\",\n description: \"Convex scheduled function definitions\",\n category: \"framework\",\n match: (filepath, filename) =>\n filename === \"crons.ts\" &&\n (filepath.includes(\"/convex/\") || filepath.startsWith(\"convex/\")),\n keywords: [\n \"convex\",\n \"crons\",\n \"scheduled\",\n \"jobs\",\n \"background\",\n \"recurring\",\n ],\n },\n\n // ============================================================================\n // Generated Files\n // ============================================================================\n {\n id: \"convex-generated\",\n name: \"Convex Generated\",\n description: \"Convex auto-generated files\",\n category: \"framework\",\n match: (filepath) =>\n filepath.includes(\"/convex/_generated/\") ||\n filepath.startsWith(\"convex/_generated/\"),\n keywords: [\"convex\", \"generated\", \"types\", \"api\"],\n },\n\n // ============================================================================\n // Auth\n // ============================================================================\n {\n id: \"convex-auth\",\n name: \"Convex Auth\",\n description: \"Convex authentication configuration\",\n category: \"framework\",\n match: (filepath, filename) =>\n filename === \"auth.ts\" &&\n (filepath.includes(\"/convex/\") || filepath.startsWith(\"convex/\")),\n keywords: [\"convex\", \"auth\", \"authentication\", \"login\", \"users\"],\n },\n {\n id: \"convex-auth-config\",\n name: \"Convex Auth Config\",\n description: \"Convex auth configuration file\",\n category: \"configuration\",\n match: (filepath, filename) => filename === \"auth.config.ts\",\n keywords: [\"convex\", \"auth\", \"config\", \"providers\", \"oauth\"],\n },\n];\n\n/**\n * Convex framework conventions provider.\n */\nexport const convexFramework: FrameworkConventions = {\n id: \"convex\",\n name: \"Convex\",\n detect: (filepath) => {\n // Detect if this is likely a Convex project\n return (\n filepath === \"convex.json\" ||\n filepath.startsWith(\"convex/\") ||\n filepath.includes(\"/convex/\")\n );\n },\n conventions: convexConventions,\n};\n",
14
14
  "/**\n * Framework Conventions Registry\n *\n * Central registry for framework-specific conventions.\n * Add new frameworks here to extend convention support.\n */\n\nimport type { FrameworkConventions } from \"../../../entities/conventions\";\nimport { nextjsFramework } from \"./nextjs\";\nimport { convexFramework } from \"./convex\";\n\n/**\n * All registered framework convention providers.\n * Add new frameworks to this array.\n */\nexport const frameworkProviders: FrameworkConventions[] = [\n nextjsFramework,\n convexFramework,\n];\n\n/**\n * Get all framework conventions.\n */\nexport function getAllFrameworkConventions() {\n return frameworkProviders.flatMap((f) => f.conventions);\n}\n\n/**\n * Get frameworks by ID.\n */\nexport function getFramework(id: string): FrameworkConventions | undefined {\n return frameworkProviders.find((f) => f.id === id);\n}\n\n// Re-export individual frameworks\nexport { nextjsFramework } from \"./nextjs\";\nexport { convexFramework } from \"./convex\";\n",
15
- "/**\n * File Conventions Service\n *\n * Pure functions for matching files against conventions and extracting keywords.\n * No I/O operations - all functions operate on file paths.\n *\n * Categories:\n * - Entry Points: index.ts, main.ts, App.tsx, etc.\n * - Configuration: tsconfig.json, .prettierrc, package.json, etc.\n * - Frameworks: Next.js, Convex, and other framework-specific patterns\n * - Type Definitions: *.d.ts, *.types.ts\n *\n * Extensibility:\n * - Add new conventions to entryPoints.ts or configFiles.ts\n * - Add new frameworks in the frameworks/ directory\n */\n\nimport * as path from \"path\";\nimport type {\n FileConvention,\n ConventionMatch,\n} from \"../../entities/conventions\";\nimport { entryPointConventions } from \"./entryPoints\";\nimport { configFileConventions } from \"./configFiles\";\nimport { getAllFrameworkConventions } from \"./frameworks\";\n\n// Re-export types from entities\nexport type {\n FileConvention,\n ConventionCategory,\n ConventionMatch,\n FrameworkConventions,\n} from \"../../entities/conventions\";\n\n/**\n * Type definition file conventions (built-in).\n */\nconst typeDefinitionConventions: FileConvention[] = [\n {\n id: \"dts-file\",\n name: \"TypeScript Declaration\",\n description: \"TypeScript type declaration file\",\n category: \"types\",\n match: (filepath, filename) => filename.endsWith(\".d.ts\"),\n keywords: [\"types\", \"declarations\", \"typescript\", \"definitions\"],\n },\n {\n id: \"types-file\",\n name: \"Types File\",\n description: \"TypeScript types file\",\n category: \"types\",\n match: (filepath, filename) =>\n filename.endsWith(\".types.ts\") || filename === \"types.ts\",\n keywords: [\"types\", \"definitions\", \"typescript\", \"interfaces\"],\n dynamicKeywords: (filepath) => {\n const match = filepath.match(/([^/]+)\\.types\\.ts$/);\n if (match) return [match[1].toLowerCase()];\n return [];\n },\n },\n {\n id: \"types-folder\",\n name: \"Types Folder File\",\n description: \"File in a types folder\",\n category: \"types\",\n match: (filepath) =>\n filepath.includes(\"/types/\") || filepath.startsWith(\"types/\"),\n keywords: [\"types\", \"definitions\"],\n },\n];\n\n/**\n * Test file conventions (built-in).\n */\nconst testFileConventions: FileConvention[] = [\n {\n id: \"test-file\",\n name: \"Test File\",\n description: \"Unit/integration test file\",\n category: \"test\",\n match: (filepath, filename) =>\n filename.includes(\".test.\") ||\n filename.includes(\".spec.\") ||\n filename.includes(\"_test.\"),\n keywords: [\"test\", \"spec\", \"unit test\"],\n dynamicKeywords: (filepath) => {\n const match = filepath.match(/([^/]+)\\.(test|spec)\\./);\n if (match) return [match[1].toLowerCase()];\n return [];\n },\n },\n {\n id: \"test-folder\",\n name: \"Test Folder File\",\n description: \"File in a test folder\",\n category: \"test\",\n match: (filepath) =>\n filepath.includes(\"/__tests__/\") ||\n filepath.includes(\"/test/\") ||\n filepath.includes(\"/tests/\") ||\n filepath.startsWith(\"__tests__/\") ||\n filepath.startsWith(\"test/\") ||\n filepath.startsWith(\"tests/\"),\n keywords: [\"test\", \"testing\"],\n },\n];\n\n/**\n * Get all conventions including built-in ones.\n */\nexport function getConventions(): FileConvention[] {\n return [\n ...entryPointConventions,\n ...configFileConventions,\n ...getAllFrameworkConventions(),\n ...typeDefinitionConventions,\n ...testFileConventions,\n ];\n}\n\n/**\n * Match a filepath against all conventions and return keywords.\n *\n * @param filepath - The file path (relative to project root)\n * @returns Array of keywords from all matching conventions\n */\nexport function getConventionKeywords(filepath: string): string[] {\n const conventions = getConventions();\n const filename = path.basename(filepath);\n const extension = path.extname(filepath);\n const keywords = new Set<string>();\n\n for (const convention of conventions) {\n try {\n if (convention.match(filepath, filename, extension)) {\n // Add static keywords\n for (const keyword of convention.keywords) {\n keywords.add(keyword.toLowerCase());\n }\n\n // Add dynamic keywords\n if (convention.dynamicKeywords) {\n const dynamicKws = convention.dynamicKeywords(filepath);\n for (const kw of dynamicKws) {\n if (kw && kw.length > 1) {\n keywords.add(kw.toLowerCase());\n }\n }\n }\n }\n } catch {\n // Skip conventions that throw errors\n }\n }\n\n return Array.from(keywords);\n}\n\n/**\n * Match a filepath against all conventions and return detailed matches.\n *\n * @param filepath - The file path (relative to project root)\n * @returns Array of convention matches with details\n */\nexport function matchConventions(filepath: string): ConventionMatch[] {\n const conventions = getConventions();\n const filename = path.basename(filepath);\n const extension = path.extname(filepath);\n const matches: ConventionMatch[] = [];\n\n for (const convention of conventions) {\n try {\n if (convention.match(filepath, filename, extension)) {\n const keywords = [...convention.keywords];\n\n if (convention.dynamicKeywords) {\n const dynamicKws = convention.dynamicKeywords(filepath);\n keywords.push(...dynamicKws.filter((k) => k && k.length > 1));\n }\n\n matches.push({\n convention,\n keywords: keywords.map((k) => k.toLowerCase()),\n });\n }\n } catch {\n // Skip conventions that throw errors\n }\n }\n\n return matches;\n}\n\n// Re-export convention collections for extension\nexport { entryPointConventions } from \"./entryPoints\";\nexport { configFileConventions } from \"./configFiles\";\nexport { frameworkProviders, getAllFrameworkConventions } from \"./frameworks\";\n",
16
- "/**\n * Introspection Service\n *\n * Pure functions for extracting file metadata from paths and content.\n * No I/O operations - all functions operate on provided data.\n */\n\nimport * as path from \"path\";\nimport type {\n FileIntrospection,\n Project,\n ProjectStructure,\n Scope,\n ProjectType,\n} from \"../entities/introspection\";\nimport { getConventionKeywords } from \"./conventions\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Layer detection patterns.\n */\nconst LAYER_PATTERNS: Record<string, string[]> = {\n controller: [\"controller\", \"api\", \"routes\", \"route\", \"handler\"],\n service: [\"service\", \"logic\", \"usecase\", \"usecases\", \"handler\"],\n repository: [\"repository\", \"repo\", \"dao\", \"store\", \"persistence\"],\n model: [\n \"model\",\n \"models\",\n \"entity\",\n \"entities\",\n \"schema\",\n \"schemas\",\n \"types\",\n \"type\",\n ],\n util: [\"util\", \"utils\", \"helper\", \"helpers\", \"common\", \"lib\"],\n config: [\"config\", \"configuration\", \"settings\"],\n middleware: [\"middleware\", \"middlewares\"],\n domain: [\"domain\"],\n infrastructure: [\"infrastructure\", \"infra\"],\n application: [\"application\", \"app\"],\n presentation: [\n \"presentation\",\n \"ui\",\n \"views\",\n \"view\",\n \"component\",\n \"components\",\n ],\n test: [\"test\", \"tests\", \"spec\", \"specs\", \"__tests__\", \"e2e\"],\n};\n\n/**\n * Domain detection patterns (feature areas).\n */\nconst DOMAIN_PATTERNS = [\n \"auth\",\n \"authentication\",\n \"user\",\n \"users\",\n \"account\",\n \"accounts\",\n \"profile\",\n \"profiles\",\n \"product\",\n \"products\",\n \"item\",\n \"items\",\n \"catalog\",\n \"order\",\n \"orders\",\n \"cart\",\n \"checkout\",\n \"payment\",\n \"payments\",\n \"billing\",\n \"subscription\",\n \"subscriptions\",\n \"notification\",\n \"notifications\",\n \"email\",\n \"sms\",\n \"report\",\n \"reports\",\n \"analytics\",\n \"metrics\",\n \"dashboard\",\n \"admin\",\n \"settings\",\n \"search\",\n \"chat\",\n \"message\",\n \"messages\",\n \"feed\",\n \"post\",\n \"posts\",\n \"comment\",\n \"comments\",\n \"media\",\n \"upload\",\n \"file\",\n \"files\",\n \"storage\",\n \"cache\",\n \"session\",\n \"log\",\n \"logs\",\n \"audit\",\n];\n\n/**\n * Framework detection from imports.\n */\nconst FRAMEWORK_INDICATORS: Record<string, string[]> = {\n nextjs: [\"next\", \"next/\"],\n express: [\"express\"],\n fastify: [\"fastify\"],\n react: [\"react\"],\n vue: [\"vue\"],\n angular: [\"@angular/\"],\n nestjs: [\"@nestjs/\"],\n koa: [\"koa\"],\n};\n\n/**\n * Language detection from file extension.\n */\nconst EXTENSION_TO_LANGUAGE: Record<string, string> = {\n \".ts\": \"typescript\",\n \".tsx\": \"typescript\",\n \".js\": \"javascript\",\n \".jsx\": \"javascript\",\n \".mjs\": \"javascript\",\n \".cjs\": \"javascript\",\n \".py\": \"python\",\n \".go\": \"go\",\n \".rs\": \"rust\",\n \".java\": \"java\",\n \".kt\": \"kotlin\",\n \".swift\": \"swift\",\n \".rb\": \"ruby\",\n \".php\": \"php\",\n \".cs\": \"csharp\",\n \".cpp\": \"cpp\",\n \".c\": \"c\",\n \".h\": \"c\",\n \".hpp\": \"cpp\",\n \".md\": \"markdown\",\n \".json\": \"json\",\n \".yaml\": \"yaml\",\n \".yml\": \"yaml\",\n \".txt\": \"text\",\n};\n\n/**\n * Keywords for detecting scope from project name or path.\n */\nconst SCOPE_KEYWORDS: Record<Scope, string[]> = {\n frontend: [\n \"web\",\n \"webapp\",\n \"frontend\",\n \"client\",\n \"ui\",\n \"app\",\n \"mobile\",\n \"react\",\n \"vue\",\n \"angular\",\n \"next\",\n \"nuxt\",\n ],\n backend: [\n \"api\",\n \"server\",\n \"backend\",\n \"service\",\n \"worker\",\n \"lambda\",\n \"functions\",\n ],\n shared: [\"shared\", \"common\", \"utils\", \"lib\", \"core\", \"types\", \"models\"],\n tooling: [\"scripts\", \"tools\", \"cli\", \"devtools\", \"build\", \"config\", \"infra\"],\n unknown: [],\n};\n\n/**\n * Patterns for detecting project directories.\n */\nconst PROJECT_PATTERNS: Array<{\n pattern: RegExp;\n type: ProjectType;\n defaultScope: Scope;\n}> = [\n { pattern: /^apps\\/([^/]+)/, type: \"app\", defaultScope: \"unknown\" },\n { pattern: /^packages\\/([^/]+)/, type: \"library\", defaultScope: \"shared\" },\n { pattern: /^libs\\/([^/]+)/, type: \"library\", defaultScope: \"shared\" },\n { pattern: /^services\\/([^/]+)/, type: \"service\", defaultScope: \"backend\" },\n { pattern: /^scripts\\/([^/]+)/, type: \"script\", defaultScope: \"tooling\" },\n { pattern: /^tools\\/([^/]+)/, type: \"script\", defaultScope: \"tooling\" },\n];\n\n// ============================================================================\n// Public Functions\n// ============================================================================\n\n/**\n * Extract introspection metadata for a file.\n *\n * @param filepath - Relative file path\n * @param structure - Project structure (from detectProjectStructure)\n * @param fileContent - Optional file content for framework detection\n */\nexport function introspectFile(\n filepath: string,\n structure: ProjectStructure,\n fileContent?: string\n): FileIntrospection {\n const normalizedPath = filepath.replace(/\\\\/g, \"/\");\n const segments = normalizedPath.split(\"/\").filter((s) => s.length > 0);\n const filename = segments[segments.length - 1] || \"\";\n const ext = path.extname(filename);\n\n const project = findProjectForFile(normalizedPath, structure);\n const language = EXTENSION_TO_LANGUAGE[ext] || \"unknown\";\n const layer = detectLayer(segments, filename);\n const domain = detectDomain(segments);\n const scope = detectScope(segments, project, layer);\n const framework = fileContent ? detectFramework(fileContent) : undefined;\n\n return {\n filepath: normalizedPath,\n project,\n scope,\n layer,\n domain,\n language,\n framework,\n depth: segments.length - 1,\n pathSegments: segments.slice(0, -1),\n };\n}\n\n/**\n * Extract keywords from introspection for search boosting.\n */\nexport function introspectionToKeywords(intro: FileIntrospection): string[] {\n const keywords: string[] = [];\n\n // Add filename keywords (without extension)\n const filename = path.basename(intro.filepath);\n const filenameWithoutExt = filename.replace(/\\.[^.]+$/, \"\");\n const filenameParts = filenameWithoutExt\n .split(/[-_.]/)\n .flatMap((part) => part.split(/(?=[A-Z])/))\n .map((part) => part.toLowerCase())\n .filter((part) => part.length > 1);\n keywords.push(...filenameParts);\n keywords.push(filenameWithoutExt.toLowerCase());\n\n // Add project name keywords\n if (intro.project.name && intro.project.name !== \"root\") {\n keywords.push(intro.project.name.toLowerCase());\n }\n\n // Add scope, layer, domain, language, framework\n if (intro.scope !== \"unknown\") keywords.push(intro.scope);\n if (intro.layer) keywords.push(intro.layer);\n if (intro.domain) keywords.push(intro.domain);\n if (intro.language !== \"unknown\") keywords.push(intro.language);\n if (intro.framework) keywords.push(intro.framework);\n\n // Add path segments (filtered)\n const skipSegments = new Set([\"src\", \"lib\", \"index\"]);\n for (const segment of intro.pathSegments) {\n if (!skipSegments.has(segment.toLowerCase()) && segment.length > 2) {\n keywords.push(segment.toLowerCase());\n }\n }\n\n // Add convention-based keywords\n const conventionKeywords = getConventionKeywords(intro.filepath);\n keywords.push(...conventionKeywords);\n\n return [...new Set(keywords)];\n}\n\n/**\n * Detect scope from project name.\n */\nexport function detectScopeFromName(name: string): Scope {\n const nameLower = name.toLowerCase();\n\n for (const [scope, keywords] of Object.entries(SCOPE_KEYWORDS)) {\n if (scope === \"unknown\") continue;\n for (const keyword of keywords) {\n if (nameLower.includes(keyword)) {\n return scope as Scope;\n }\n }\n }\n\n return \"unknown\";\n}\n\n/**\n * Find which project a file belongs to.\n */\nexport function findProjectForFile(\n filepath: string,\n structure: ProjectStructure\n): Project {\n const normalizedPath = filepath.replace(/\\\\/g, \"/\");\n const matches: Project[] = [];\n\n // Check against detected projects\n for (const project of structure.projects) {\n if (\n normalizedPath === project.root ||\n normalizedPath.startsWith(project.root + \"/\")\n ) {\n matches.push(project);\n }\n }\n\n // Return the most specific match (longest root path)\n if (matches.length > 0) {\n return matches.reduce((best, current) =>\n current.root.length > best.root.length ? current : best\n );\n }\n\n // Fallback: pattern matching\n for (const { pattern, type } of PROJECT_PATTERNS) {\n const match = normalizedPath.match(pattern);\n if (match) {\n return { name: match[1], root: match[0], type };\n }\n }\n\n // Default: root project\n return { name: \"root\", root: \"\", type: structure.rootType ?? \"unknown\" };\n}\n\n/**\n * Calculate search boost based on introspection and query.\n */\nexport function calculateIntrospectionBoost(\n intro: FileIntrospection,\n query: string\n): number {\n let boost = 1.0;\n const queryTerms = query.toLowerCase().split(/\\s+/);\n\n // Domain match: +10%\n if (\n intro.domain &&\n queryTerms.some(\n (t) => intro.domain!.includes(t) || t.includes(intro.domain!)\n )\n ) {\n boost *= 1.1;\n }\n\n // Layer match: +5%\n if (\n intro.layer &&\n queryTerms.some((t) => intro.layer!.includes(t) || t.includes(intro.layer!))\n ) {\n boost *= 1.05;\n }\n\n // Scope match for backend queries: +5%\n const backendTerms = [\"api\", \"server\", \"backend\", \"endpoint\", \"route\"];\n if (\n queryTerms.some((t) => backendTerms.includes(t)) &&\n intro.scope === \"backend\"\n ) {\n boost *= 1.05;\n }\n\n // Scope match for frontend queries: +5%\n const frontendTerms = [\n \"ui\",\n \"component\",\n \"page\",\n \"view\",\n \"frontend\",\n \"client\",\n ];\n if (\n queryTerms.some((t) => frontendTerms.includes(t)) &&\n intro.scope === \"frontend\"\n ) {\n boost *= 1.05;\n }\n\n // Path segment match: +3% per match\n for (const segment of intro.pathSegments) {\n if (queryTerms.some((t) => segment.toLowerCase().includes(t))) {\n boost *= 1.03;\n }\n }\n\n // Project name match: +5%\n if (\n intro.project.name !== \"root\" &&\n queryTerms.some((t) => intro.project.name.toLowerCase().includes(t))\n ) {\n boost *= 1.05;\n }\n\n return boost;\n}\n\n// ============================================================================\n// Internal Helper Functions\n// ============================================================================\n\nfunction detectLayer(segments: string[], filename: string): string | undefined {\n const filenameLower = filename.toLowerCase();\n for (const [layer, patterns] of Object.entries(LAYER_PATTERNS)) {\n for (const pattern of patterns) {\n if (filenameLower.includes(pattern)) return layer;\n }\n }\n\n for (let i = segments.length - 2; i >= 0; i--) {\n const segment = segments[i].toLowerCase();\n for (const [layer, patterns] of Object.entries(LAYER_PATTERNS)) {\n if (patterns.includes(segment)) return layer;\n }\n }\n\n return undefined;\n}\n\nfunction detectDomain(segments: string[]): string | undefined {\n const skipSegments = new Set([\n \"src\",\n \"lib\",\n \"app\",\n \"apps\",\n \"packages\",\n \"services\",\n \"modules\",\n \"features\",\n ...Object.values(LAYER_PATTERNS).flat(),\n ]);\n\n for (const segment of segments) {\n const segmentLower = segment.toLowerCase();\n if (skipSegments.has(segmentLower)) continue;\n\n if (DOMAIN_PATTERNS.includes(segmentLower)) return segmentLower;\n\n for (const domain of DOMAIN_PATTERNS) {\n if (segmentLower.startsWith(domain) || segmentLower.endsWith(domain)) {\n return domain;\n }\n }\n }\n\n return undefined;\n}\n\nfunction detectScope(\n segments: string[],\n project: Project,\n layer?: string\n): Scope {\n const projectScope = detectScopeFromName(project.name);\n if (projectScope !== \"unknown\") return projectScope;\n\n if (layer) {\n switch (layer) {\n case \"controller\":\n case \"repository\":\n case \"middleware\":\n return \"backend\";\n case \"presentation\":\n return \"frontend\";\n case \"util\":\n case \"model\":\n return \"shared\";\n case \"test\":\n return \"tooling\";\n }\n }\n\n for (const segment of segments) {\n const segmentLower = segment.toLowerCase();\n if ([\"server\", \"api\", \"backend\"].includes(segmentLower)) return \"backend\";\n if ([\"client\", \"web\", \"frontend\", \"ui\"].includes(segmentLower))\n return \"frontend\";\n if ([\"shared\", \"common\", \"lib\", \"libs\"].includes(segmentLower))\n return \"shared\";\n }\n\n return \"unknown\";\n}\n\nfunction detectFramework(content: string): string | undefined {\n for (const [framework, indicators] of Object.entries(FRAMEWORK_INDICATORS)) {\n for (const indicator of indicators) {\n if (\n content.includes(`from '${indicator}`) ||\n content.includes(`from \"${indicator}`) ||\n content.includes(`require('${indicator}`) ||\n content.includes(`require(\"${indicator}`)\n ) {\n return framework;\n }\n }\n }\n return undefined;\n}\n",
15
+ "/**\n * File Conventions Service\n *\n * Pure functions for matching files against conventions and extracting keywords.\n * No I/O operations - all functions operate on file paths.\n *\n * Categories:\n * - Entry Points: index.ts, main.ts, App.tsx, etc.\n * - Configuration: tsconfig.json, .prettierrc, package.json, etc.\n * - Frameworks: Next.js, Convex, and other framework-specific patterns\n * - Type Definitions: *.d.ts, *.types.ts\n *\n * Extensibility:\n * - Add new conventions to entryPoints.ts or configFiles.ts\n * - Add new frameworks in the frameworks/ directory\n */\n\nimport * as path from \"path\";\nimport type {\n FileConvention,\n ConventionMatch,\n} from \"../../entities/conventions\";\nimport { entryPointConventions } from \"./entryPoints\";\nimport { configFileConventions } from \"./configFiles\";\nimport { getAllFrameworkConventions } from \"./frameworks\";\n\n// Re-export types from entities\nexport type {\n FileConvention,\n ConventionCategory,\n ConventionMatch,\n FrameworkConventions,\n} from \"../../entities/conventions\";\n\n/**\n * Type definition file conventions (built-in).\n */\nconst typeDefinitionConventions: FileConvention[] = [\n {\n id: \"dts-file\",\n name: \"TypeScript Declaration\",\n description: \"TypeScript type declaration file\",\n category: \"types\",\n match: (filepath, filename) => filename.endsWith(\".d.ts\"),\n keywords: [\"types\", \"declarations\", \"typescript\", \"definitions\"],\n },\n {\n id: \"types-file\",\n name: \"Types File\",\n description: \"TypeScript types file\",\n category: \"types\",\n match: (filepath, filename) =>\n filename.endsWith(\".types.ts\") || filename === \"types.ts\",\n keywords: [\"types\", \"definitions\", \"typescript\", \"interfaces\"],\n dynamicKeywords: (filepath) => {\n const match = filepath.match(/([^/]+)\\.types\\.ts$/);\n if (match) return [match[1].toLowerCase()];\n return [];\n },\n },\n {\n id: \"types-folder\",\n name: \"Types Folder File\",\n description: \"File in a types folder\",\n category: \"types\",\n match: (filepath) =>\n filepath.includes(\"/types/\") || filepath.startsWith(\"types/\"),\n keywords: [\"types\", \"definitions\"],\n },\n];\n\n/**\n * Test file conventions (built-in).\n */\nconst testFileConventions: FileConvention[] = [\n {\n id: \"test-file\",\n name: \"Test File\",\n description: \"Unit/integration test file\",\n category: \"test\",\n match: (filepath, filename) =>\n filename.includes(\".test.\") ||\n filename.includes(\".spec.\") ||\n filename.includes(\"_test.\"),\n keywords: [\"test\", \"spec\", \"unit test\"],\n dynamicKeywords: (filepath) => {\n const match = filepath.match(/([^/]+)\\.(test|spec)\\./);\n if (match) return [match[1].toLowerCase()];\n return [];\n },\n },\n {\n id: \"test-folder\",\n name: \"Test Folder File\",\n description: \"File in a test folder\",\n category: \"test\",\n match: (filepath) =>\n filepath.includes(\"/__tests__/\") ||\n filepath.includes(\"/test/\") ||\n filepath.includes(\"/tests/\") ||\n filepath.startsWith(\"__tests__/\") ||\n filepath.startsWith(\"test/\") ||\n filepath.startsWith(\"tests/\"),\n keywords: [\"test\", \"testing\"],\n },\n];\n\n/**\n * Get all conventions including built-in ones.\n */\nexport function getConventions(): FileConvention[] {\n return [\n ...entryPointConventions,\n ...configFileConventions,\n ...getAllFrameworkConventions(),\n ...typeDefinitionConventions,\n ...testFileConventions,\n ];\n}\n\n/**\n * Match a filepath against all conventions and return keywords.\n *\n * @param filepath - The file path (relative to project root)\n * @returns Array of keywords from all matching conventions\n */\nexport function getConventionKeywords(filepath: string): string[] {\n const conventions = getConventions();\n const filename = path.basename(filepath);\n const extension = path.extname(filepath);\n const keywords = new Set<string>();\n\n for (const convention of conventions) {\n try {\n if (convention.match(filepath, filename, extension)) {\n // Add static keywords\n for (const keyword of convention.keywords) {\n keywords.add(keyword.toLowerCase());\n }\n\n // Add dynamic keywords\n if (convention.dynamicKeywords) {\n const dynamicKws = convention.dynamicKeywords(filepath);\n for (const kw of dynamicKws) {\n if (kw && kw.length > 1) {\n keywords.add(kw.toLowerCase());\n }\n }\n }\n }\n } catch {\n // Skip conventions that throw errors\n }\n }\n\n return Array.from(keywords);\n}\n\n/**\n * Match a filepath against all conventions and return detailed matches.\n *\n * @param filepath - The file path (relative to project root)\n * @returns Array of convention matches with details\n */\nexport function matchConventions(filepath: string): ConventionMatch[] {\n const conventions = getConventions();\n const filename = path.basename(filepath);\n const extension = path.extname(filepath);\n const matches: ConventionMatch[] = [];\n\n for (const convention of conventions) {\n try {\n if (convention.match(filepath, filename, extension)) {\n const keywords = [...convention.keywords];\n\n if (convention.dynamicKeywords) {\n const dynamicKws = convention.dynamicKeywords(filepath);\n keywords.push(...dynamicKws.filter((k) => k && k.length > 1));\n }\n\n matches.push({\n convention,\n keywords: keywords.map((k) => k.toLowerCase()),\n });\n }\n } catch {\n // Skip conventions that throw errors\n }\n }\n\n return matches;\n}\n\n// Re-export convention collections for extension\nexport { entryPointConventions } from \"./entryPoints\";\nexport { configFileConventions } from \"./configFiles\";\nexport { frameworkProviders, getAllFrameworkConventions } from \"./frameworks\";\n\n",
16
+ "/**\n * Introspection Service\n *\n * Pure functions for extracting file metadata from paths and content.\n * No I/O operations - all functions operate on provided data.\n */\n\nimport * as path from \"path\";\nimport type {\n FileIntrospection,\n Project,\n ProjectStructure,\n Scope,\n ProjectType,\n} from \"../entities/introspection\";\nimport { getConventionKeywords } from \"./conventions\";\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Layer detection patterns.\n */\nconst LAYER_PATTERNS: Record<string, string[]> = {\n controller: [\"controller\", \"api\", \"routes\", \"route\", \"handler\"],\n service: [\"service\", \"logic\", \"usecase\", \"usecases\", \"handler\"],\n repository: [\"repository\", \"repo\", \"dao\", \"store\", \"persistence\"],\n model: [\n \"model\",\n \"models\",\n \"entity\",\n \"entities\",\n \"schema\",\n \"schemas\",\n \"types\",\n \"type\",\n ],\n util: [\"util\", \"utils\", \"helper\", \"helpers\", \"common\", \"lib\"],\n config: [\"config\", \"configuration\", \"settings\"],\n middleware: [\"middleware\", \"middlewares\"],\n domain: [\"domain\"],\n infrastructure: [\"infrastructure\", \"infra\"],\n application: [\"application\", \"app\"],\n presentation: [\n \"presentation\",\n \"ui\",\n \"views\",\n \"view\",\n \"component\",\n \"components\",\n ],\n test: [\"test\", \"tests\", \"spec\", \"specs\", \"__tests__\", \"e2e\"],\n};\n\n/**\n * Domain detection patterns (feature areas).\n */\nconst DOMAIN_PATTERNS = [\n \"auth\",\n \"authentication\",\n \"user\",\n \"users\",\n \"account\",\n \"accounts\",\n \"profile\",\n \"profiles\",\n \"product\",\n \"products\",\n \"item\",\n \"items\",\n \"catalog\",\n \"order\",\n \"orders\",\n \"cart\",\n \"checkout\",\n \"payment\",\n \"payments\",\n \"billing\",\n \"subscription\",\n \"subscriptions\",\n \"notification\",\n \"notifications\",\n \"email\",\n \"sms\",\n \"report\",\n \"reports\",\n \"analytics\",\n \"metrics\",\n \"dashboard\",\n \"admin\",\n \"settings\",\n \"search\",\n \"chat\",\n \"message\",\n \"messages\",\n \"feed\",\n \"post\",\n \"posts\",\n \"comment\",\n \"comments\",\n \"media\",\n \"upload\",\n \"file\",\n \"files\",\n \"storage\",\n \"cache\",\n \"session\",\n \"log\",\n \"logs\",\n \"audit\",\n];\n\n/**\n * Framework detection from imports.\n */\nconst FRAMEWORK_INDICATORS: Record<string, string[]> = {\n nextjs: [\"next\", \"next/\"],\n express: [\"express\"],\n fastify: [\"fastify\"],\n react: [\"react\"],\n vue: [\"vue\"],\n angular: [\"@angular/\"],\n nestjs: [\"@nestjs/\"],\n koa: [\"koa\"],\n};\n\n/**\n * Language detection from file extension.\n */\nconst EXTENSION_TO_LANGUAGE: Record<string, string> = {\n \".ts\": \"typescript\",\n \".tsx\": \"typescript\",\n \".js\": \"javascript\",\n \".jsx\": \"javascript\",\n \".mjs\": \"javascript\",\n \".cjs\": \"javascript\",\n \".py\": \"python\",\n \".go\": \"go\",\n \".rs\": \"rust\",\n \".java\": \"java\",\n \".kt\": \"kotlin\",\n \".swift\": \"swift\",\n \".rb\": \"ruby\",\n \".php\": \"php\",\n \".cs\": \"csharp\",\n \".cpp\": \"cpp\",\n \".c\": \"c\",\n \".h\": \"c\",\n \".hpp\": \"cpp\",\n \".md\": \"markdown\",\n \".json\": \"json\",\n \".yaml\": \"yaml\",\n \".yml\": \"yaml\",\n \".txt\": \"text\",\n};\n\n/**\n * Keywords for detecting scope from project name or path.\n */\nconst SCOPE_KEYWORDS: Record<Scope, string[]> = {\n frontend: [\n \"web\",\n \"webapp\",\n \"frontend\",\n \"client\",\n \"ui\",\n \"app\",\n \"mobile\",\n \"react\",\n \"vue\",\n \"angular\",\n \"next\",\n \"nuxt\",\n ],\n backend: [\n \"api\",\n \"server\",\n \"backend\",\n \"service\",\n \"worker\",\n \"lambda\",\n \"functions\",\n ],\n shared: [\"shared\", \"common\", \"utils\", \"lib\", \"core\", \"types\", \"models\"],\n tooling: [\"scripts\", \"tools\", \"cli\", \"devtools\", \"build\", \"config\", \"infra\"],\n unknown: [],\n};\n\n/**\n * Patterns for detecting project directories.\n */\nconst PROJECT_PATTERNS: Array<{\n pattern: RegExp;\n type: ProjectType;\n defaultScope: Scope;\n}> = [\n { pattern: /^apps\\/([^/]+)/, type: \"app\", defaultScope: \"unknown\" },\n { pattern: /^packages\\/([^/]+)/, type: \"library\", defaultScope: \"shared\" },\n { pattern: /^libs\\/([^/]+)/, type: \"library\", defaultScope: \"shared\" },\n { pattern: /^services\\/([^/]+)/, type: \"service\", defaultScope: \"backend\" },\n { pattern: /^scripts\\/([^/]+)/, type: \"script\", defaultScope: \"tooling\" },\n { pattern: /^tools\\/([^/]+)/, type: \"script\", defaultScope: \"tooling\" },\n];\n\n// ============================================================================\n// Public Functions\n// ============================================================================\n\n/**\n * Extract introspection metadata for a file.\n *\n * @param filepath - Relative file path\n * @param structure - Project structure (from detectProjectStructure)\n * @param fileContent - Optional file content for framework detection\n */\nexport function introspectFile(\n filepath: string,\n structure: ProjectStructure,\n fileContent?: string\n): FileIntrospection {\n const normalizedPath = filepath.replace(/\\\\/g, \"/\");\n const segments = normalizedPath.split(\"/\").filter((s) => s.length > 0);\n const filename = segments[segments.length - 1] || \"\";\n const ext = path.extname(filename);\n\n const project = findProjectForFile(normalizedPath, structure);\n const language = EXTENSION_TO_LANGUAGE[ext] || \"unknown\";\n const layer = detectLayer(segments, filename);\n const domain = detectDomain(segments);\n const scope = detectScope(segments, project, layer);\n const framework = fileContent ? detectFramework(fileContent) : undefined;\n\n return {\n filepath: normalizedPath,\n project,\n scope,\n layer,\n domain,\n language,\n framework,\n depth: segments.length - 1,\n pathSegments: segments.slice(0, -1),\n };\n}\n\n/**\n * Extract keywords from introspection for search boosting.\n */\nexport function introspectionToKeywords(intro: FileIntrospection): string[] {\n const keywords: string[] = [];\n\n // Add filename keywords (without extension)\n const filename = path.basename(intro.filepath);\n const filenameWithoutExt = filename.replace(/\\.[^.]+$/, \"\");\n const filenameParts = filenameWithoutExt\n .split(/[-_.]/)\n .flatMap((part) => part.split(/(?=[A-Z])/))\n .map((part) => part.toLowerCase())\n .filter((part) => part.length > 1);\n keywords.push(...filenameParts);\n keywords.push(filenameWithoutExt.toLowerCase());\n\n // Add project name keywords\n if (intro.project.name && intro.project.name !== \"root\") {\n keywords.push(intro.project.name.toLowerCase());\n }\n\n // Add scope, layer, domain, language, framework\n if (intro.scope !== \"unknown\") keywords.push(intro.scope);\n if (intro.layer) keywords.push(intro.layer);\n if (intro.domain) keywords.push(intro.domain);\n if (intro.language !== \"unknown\") keywords.push(intro.language);\n if (intro.framework) keywords.push(intro.framework);\n\n // Add path segments (filtered)\n const skipSegments = new Set([\"src\", \"lib\", \"index\"]);\n for (const segment of intro.pathSegments) {\n if (!skipSegments.has(segment.toLowerCase()) && segment.length > 2) {\n keywords.push(segment.toLowerCase());\n }\n }\n\n // Add convention-based keywords\n const conventionKeywords = getConventionKeywords(intro.filepath);\n keywords.push(...conventionKeywords);\n\n return [...new Set(keywords)];\n}\n\n/**\n * Detect scope from project name.\n */\nexport function detectScopeFromName(name: string): Scope {\n const nameLower = name.toLowerCase();\n\n for (const [scope, keywords] of Object.entries(SCOPE_KEYWORDS)) {\n if (scope === \"unknown\") continue;\n for (const keyword of keywords) {\n if (nameLower.includes(keyword)) {\n return scope as Scope;\n }\n }\n }\n\n return \"unknown\";\n}\n\n/**\n * Find which project a file belongs to.\n */\nexport function findProjectForFile(\n filepath: string,\n structure: ProjectStructure\n): Project {\n const normalizedPath = filepath.replace(/\\\\/g, \"/\");\n const matches: Project[] = [];\n\n // Check against detected projects\n for (const project of structure.projects) {\n if (\n normalizedPath === project.root ||\n normalizedPath.startsWith(project.root + \"/\")\n ) {\n matches.push(project);\n }\n }\n\n // Return the most specific match (longest root path)\n if (matches.length > 0) {\n return matches.reduce((best, current) =>\n current.root.length > best.root.length ? current : best\n );\n }\n\n // Fallback: pattern matching\n for (const { pattern, type } of PROJECT_PATTERNS) {\n const match = normalizedPath.match(pattern);\n if (match) {\n return { name: match[1], root: match[0], type };\n }\n }\n\n // Default: root project\n return { name: \"root\", root: \"\", type: structure.rootType ?? \"unknown\" };\n}\n\n/**\n * Calculate search boost based on introspection and query.\n */\nexport function calculateIntrospectionBoost(\n intro: FileIntrospection,\n query: string\n): number {\n let boost = 1.0;\n const queryTerms = query.toLowerCase().split(/\\s+/);\n\n // Domain match: +10%\n if (\n intro.domain &&\n queryTerms.some(\n (t) => intro.domain!.includes(t) || t.includes(intro.domain!)\n )\n ) {\n boost *= 1.1;\n }\n\n // Layer match: +5%\n if (\n intro.layer &&\n queryTerms.some((t) => intro.layer!.includes(t) || t.includes(intro.layer!))\n ) {\n boost *= 1.05;\n }\n\n // Scope match for backend queries: +5%\n const backendTerms = [\"api\", \"server\", \"backend\", \"endpoint\", \"route\"];\n if (\n queryTerms.some((t) => backendTerms.includes(t)) &&\n intro.scope === \"backend\"\n ) {\n boost *= 1.05;\n }\n\n // Scope match for frontend queries: +5%\n const frontendTerms = [\n \"ui\",\n \"component\",\n \"page\",\n \"view\",\n \"frontend\",\n \"client\",\n ];\n if (\n queryTerms.some((t) => frontendTerms.includes(t)) &&\n intro.scope === \"frontend\"\n ) {\n boost *= 1.05;\n }\n\n // Path segment match: +3% per match\n for (const segment of intro.pathSegments) {\n if (queryTerms.some((t) => segment.toLowerCase().includes(t))) {\n boost *= 1.03;\n }\n }\n\n // Project name match: +5%\n if (\n intro.project.name !== \"root\" &&\n queryTerms.some((t) => intro.project.name.toLowerCase().includes(t))\n ) {\n boost *= 1.05;\n }\n\n return boost;\n}\n\n// ============================================================================\n// Internal Helper Functions\n// ============================================================================\n\nfunction detectLayer(segments: string[], filename: string): string | undefined {\n const filenameLower = filename.toLowerCase();\n for (const [layer, patterns] of Object.entries(LAYER_PATTERNS)) {\n for (const pattern of patterns) {\n if (filenameLower.includes(pattern)) return layer;\n }\n }\n\n for (let i = segments.length - 2; i >= 0; i--) {\n const segment = segments[i].toLowerCase();\n for (const [layer, patterns] of Object.entries(LAYER_PATTERNS)) {\n if (patterns.includes(segment)) return layer;\n }\n }\n\n return undefined;\n}\n\nfunction detectDomain(segments: string[]): string | undefined {\n const skipSegments = new Set([\n \"src\",\n \"lib\",\n \"app\",\n \"apps\",\n \"packages\",\n \"services\",\n \"modules\",\n \"features\",\n ...Object.values(LAYER_PATTERNS).flat(),\n ]);\n\n for (const segment of segments) {\n const segmentLower = segment.toLowerCase();\n if (skipSegments.has(segmentLower)) continue;\n\n if (DOMAIN_PATTERNS.includes(segmentLower)) return segmentLower;\n\n for (const domain of DOMAIN_PATTERNS) {\n if (segmentLower.startsWith(domain) || segmentLower.endsWith(domain)) {\n return domain;\n }\n }\n }\n\n return undefined;\n}\n\nfunction detectScope(\n segments: string[],\n project: Project,\n layer?: string\n): Scope {\n const projectScope = detectScopeFromName(project.name);\n if (projectScope !== \"unknown\") return projectScope;\n\n if (layer) {\n switch (layer) {\n case \"controller\":\n case \"repository\":\n case \"middleware\":\n return \"backend\";\n case \"presentation\":\n return \"frontend\";\n case \"util\":\n case \"model\":\n return \"shared\";\n case \"test\":\n return \"tooling\";\n }\n }\n\n for (const segment of segments) {\n const segmentLower = segment.toLowerCase();\n if ([\"server\", \"api\", \"backend\"].includes(segmentLower)) return \"backend\";\n if ([\"client\", \"web\", \"frontend\", \"ui\"].includes(segmentLower))\n return \"frontend\";\n if ([\"shared\", \"common\", \"lib\", \"libs\"].includes(segmentLower))\n return \"shared\";\n }\n\n return \"unknown\";\n}\n\nfunction detectFramework(content: string): string | undefined {\n for (const [framework, indicators] of Object.entries(FRAMEWORK_INDICATORS)) {\n for (const indicator of indicators) {\n if (\n content.includes(`from '${indicator}`) ||\n content.includes(`from \"${indicator}`) ||\n content.includes(`require('${indicator}`) ||\n content.includes(`require(\"${indicator}`)\n ) {\n return framework;\n }\n }\n }\n return undefined;\n}\n\n",
17
17
  "/**\n * Regex-based Symbol Extraction\n *\n * Extracts symbols from code using regular expressions.\n * Language-agnostic but optimized for common patterns.\n */\n\nexport type SymbolType =\n | \"function\"\n | \"class\"\n | \"variable\"\n | \"interface\"\n | \"type\"\n | \"enum\"\n | \"method\"\n | \"other\";\n\nexport interface ExtractedSymbol {\n name: string;\n type: SymbolType;\n line: number;\n isExported: boolean;\n}\n\n/**\n * Patterns for extracting symbols from code.\n * Order matters - more specific patterns should come first.\n */\nconst SYMBOL_PATTERNS: Array<{\n type: SymbolType;\n pattern: RegExp;\n exported: boolean;\n}> = [\n // Exported function declarations\n {\n type: \"function\",\n pattern: /^export\\s+(?:async\\s+)?function\\s+(\\w+)/gm,\n exported: true,\n },\n // Exported arrow functions\n {\n type: \"function\",\n pattern: /^export\\s+(?:const|let)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\(/gm,\n exported: true,\n },\n // Exported classes\n {\n type: \"class\",\n pattern: /^export\\s+(?:abstract\\s+)?class\\s+(\\w+)/gm,\n exported: true,\n },\n // Exported interfaces (TypeScript)\n {\n type: \"interface\",\n pattern: /^export\\s+interface\\s+(\\w+)/gm,\n exported: true,\n },\n // Exported types (TypeScript)\n {\n type: \"type\",\n pattern: /^export\\s+type\\s+(\\w+)/gm,\n exported: true,\n },\n // Exported enums\n {\n type: \"enum\",\n pattern: /^export\\s+(?:const\\s+)?enum\\s+(\\w+)/gm,\n exported: true,\n },\n // Exported variables\n {\n type: \"variable\",\n pattern: /^export\\s+(?:const|let|var)\\s+(\\w+)\\s*(?::|=)/gm,\n exported: true,\n },\n // Default exports\n {\n type: \"function\",\n pattern: /^export\\s+default\\s+(?:async\\s+)?function\\s+(\\w+)/gm,\n exported: true,\n },\n {\n type: \"class\",\n pattern: /^export\\s+default\\s+class\\s+(\\w+)/gm,\n exported: true,\n },\n\n // Non-exported declarations\n {\n type: \"function\",\n pattern: /^(?:async\\s+)?function\\s+(\\w+)/gm,\n exported: false,\n },\n {\n type: \"function\",\n pattern: /^(?:const|let)\\s+(\\w+)\\s*=\\s*(?:async\\s*)?\\(/gm,\n exported: false,\n },\n {\n type: \"class\",\n pattern: /^(?:abstract\\s+)?class\\s+(\\w+)/gm,\n exported: false,\n },\n {\n type: \"interface\",\n pattern: /^interface\\s+(\\w+)/gm,\n exported: false,\n },\n {\n type: \"type\",\n pattern: /^type\\s+(\\w+)/gm,\n exported: false,\n },\n {\n type: \"enum\",\n pattern: /^(?:const\\s+)?enum\\s+(\\w+)/gm,\n exported: false,\n },\n\n // Python patterns\n {\n type: \"function\",\n pattern: /^def\\s+(\\w+)\\s*\\(/gm,\n exported: false,\n },\n {\n type: \"class\",\n pattern: /^class\\s+(\\w+)(?:\\s*\\(|:)/gm,\n exported: false,\n },\n\n // Go patterns\n {\n type: \"function\",\n pattern: /^func\\s+(?:\\([^)]+\\)\\s+)?(\\w+)\\s*\\(/gm,\n exported: false,\n },\n {\n type: \"type\",\n pattern: /^type\\s+(\\w+)\\s+(?:struct|interface)/gm,\n exported: false,\n },\n\n // Rust patterns\n {\n type: \"function\",\n pattern: /^(?:pub\\s+)?(?:async\\s+)?fn\\s+(\\w+)/gm,\n exported: false,\n },\n {\n type: \"type\",\n pattern: /^(?:pub\\s+)?struct\\s+(\\w+)/gm,\n exported: false,\n },\n {\n type: \"enum\",\n pattern: /^(?:pub\\s+)?enum\\s+(\\w+)/gm,\n exported: false,\n },\n {\n type: \"interface\",\n pattern: /^(?:pub\\s+)?trait\\s+(\\w+)/gm,\n exported: false,\n },\n];\n\n/**\n * Extract symbols from code content using regex patterns.\n *\n * @param content - The source code content\n * @returns Array of extracted symbols with their locations\n */\nexport function extractSymbols(content: string): ExtractedSymbol[] {\n const symbols: ExtractedSymbol[] = [];\n const seenSymbols = new Set<string>(); // Track seen symbols to avoid duplicates\n\n // Split content into lines for line number calculation\n const lines = content.split(\"\\n\");\n\n for (const { type, pattern, exported } of SYMBOL_PATTERNS) {\n // Reset regex state\n pattern.lastIndex = 0;\n\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(content)) !== null) {\n const name = match[1];\n const symbolKey = `${name}:${type}`;\n\n // Skip if we've already seen this symbol (from a more specific pattern)\n if (seenSymbols.has(symbolKey)) continue;\n seenSymbols.add(symbolKey);\n\n // Calculate line number\n const beforeMatch = content.substring(0, match.index);\n const line = beforeMatch.split(\"\\n\").length;\n\n symbols.push({\n name,\n type,\n line,\n isExported: exported,\n });\n }\n }\n\n // Sort by line number\n return symbols.sort((a, b) => a.line - b.line);\n}\n\n/**\n * Extract symbol names as keywords for BM25 indexing.\n *\n * @param symbols - Array of extracted symbols\n * @returns Array of unique symbol names\n */\nexport function symbolsToKeywords(symbols: ExtractedSymbol[]): string[] {\n const keywords = new Set<string>();\n\n for (const symbol of symbols) {\n // Add the full name\n keywords.add(symbol.name.toLowerCase());\n\n // Split camelCase/PascalCase into parts\n const parts = symbol.name\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/([A-Z]+)([A-Z][a-z])/g, \"$1 $2\")\n .toLowerCase()\n .split(/\\s+/);\n\n for (const part of parts) {\n if (part.length > 2) {\n keywords.add(part);\n }\n }\n }\n\n return Array.from(keywords);\n}\n\n",
18
18
  "/**\n * Core Index Module\n *\n * Language-agnostic text search using:\n * - Regex-based symbol extraction\n * - BM25 keyword matching\n * - Line-based chunking\n *\n * Index location: .raggrep/index/core/\n *\n * This module provides fast, deterministic search without embeddings.\n * It complements language-specific modules by catching symbol matches.\n */\n\nimport * as path from \"path\";\nimport * as fs from \"fs/promises\";\nimport {\n IndexModule,\n IndexContext,\n SearchContext,\n SearchOptions,\n} from \"../../types\";\nimport type {\n FileIndex,\n SearchResult,\n Chunk,\n ModuleConfig,\n ChunkType,\n} from \"../../domain/entities\";\nimport {\n BM25Index,\n tokenize,\n normalizeScore,\n} from \"../../domain/services/bm25\";\nimport { getRaggrepDir } from \"../../infrastructure/config\";\nimport { introspectionToKeywords } from \"../../domain/services/introspection\";\nimport {\n extractSymbols,\n symbolsToKeywords,\n type ExtractedSymbol,\n} from \"./symbols\";\n\n/** Default minimum score for core search results */\nconst DEFAULT_MIN_SCORE = 0.1;\n\n/** Default number of results */\nconst DEFAULT_TOP_K = 20;\n\n/** Lines per chunk for basic chunking */\nconst LINES_PER_CHUNK = 50;\n\n/** Overlap between chunks */\nconst CHUNK_OVERLAP = 10;\n\n/**\n * Core module-specific data stored with file index\n */\nexport interface CoreModuleData {\n /** Extracted symbols */\n symbols: ExtractedSymbol[];\n /** BM25 tokens for this file */\n tokens: string[];\n [key: string]: unknown;\n}\n\n/**\n * Stored symbol index for fast lookup\n */\ninterface SymbolIndexEntry {\n filepath: string;\n symbols: ExtractedSymbol[];\n tokens: string[];\n}\n\nexport class CoreModule implements IndexModule {\n readonly id = \"core\";\n readonly name = \"Core Search\";\n readonly description = \"Language-agnostic text search with symbol extraction\";\n readonly version = \"1.0.0\";\n\n private symbolIndex: Map<string, SymbolIndexEntry> = new Map();\n private bm25Index: BM25Index | null = null;\n private rootDir: string = \"\";\n\n async initialize(_config: ModuleConfig): Promise<void> {\n // Core module needs no initialization\n }\n\n /**\n * Index a single file.\n */\n async indexFile(\n filepath: string,\n content: string,\n ctx: IndexContext\n ): Promise<FileIndex | null> {\n this.rootDir = ctx.rootDir;\n\n // Extract symbols using regex\n const symbols = extractSymbols(content);\n const symbolKeywords = symbolsToKeywords(symbols);\n\n // Tokenize content for BM25\n const contentTokens = tokenize(content);\n\n // Get introspection keywords (includes filename, path segments, etc.)\n const intro = ctx.getIntrospection?.(filepath);\n const introKeywords = intro ? introspectionToKeywords(intro) : [];\n\n const allTokens = [\n ...new Set([...contentTokens, ...symbolKeywords, ...introKeywords]),\n ];\n\n // Create line-based chunks\n const chunks = this.createChunks(filepath, content, symbols);\n\n // Get file stats\n const stats = await ctx.getFileStats(filepath);\n\n // Store in memory for finalize\n this.symbolIndex.set(filepath, {\n filepath,\n symbols,\n tokens: allTokens,\n });\n\n // Build module data\n const moduleData: CoreModuleData = {\n symbols,\n tokens: allTokens,\n };\n\n return {\n filepath,\n lastModified: stats.lastModified,\n chunks,\n moduleData,\n };\n }\n\n /**\n * Create line-based chunks from content.\n */\n private createChunks(\n filepath: string,\n content: string,\n symbols: ExtractedSymbol[]\n ): Chunk[] {\n const lines = content.split(\"\\n\");\n const chunks: Chunk[] = [];\n\n // Create overlapping chunks\n for (\n let start = 0;\n start < lines.length;\n start += LINES_PER_CHUNK - CHUNK_OVERLAP\n ) {\n const end = Math.min(start + LINES_PER_CHUNK, lines.length);\n const chunkLines = lines.slice(start, end);\n const chunkContent = chunkLines.join(\"\\n\");\n\n // Find symbols in this chunk\n const chunkSymbols = symbols.filter(\n (s) => s.line >= start + 1 && s.line <= end\n );\n\n // Determine chunk type based on symbols\n let chunkType: ChunkType = \"block\";\n let chunkName: string | undefined;\n let isExported = false;\n\n if (chunkSymbols.length > 0) {\n const primarySymbol = chunkSymbols[0];\n chunkType = this.symbolTypeToChunkType(primarySymbol.type);\n chunkName = primarySymbol.name;\n isExported = primarySymbol.isExported;\n }\n\n const chunkId = `${filepath}:${start + 1}-${end}`;\n\n chunks.push({\n id: chunkId,\n content: chunkContent,\n startLine: start + 1,\n endLine: end,\n type: chunkType,\n name: chunkName,\n isExported,\n });\n\n // Stop if we've reached the end\n if (end >= lines.length) break;\n }\n\n return chunks;\n }\n\n /**\n * Convert symbol type to chunk type.\n */\n private symbolTypeToChunkType(symbolType: string): ChunkType {\n switch (symbolType) {\n case \"function\":\n case \"method\":\n return \"function\";\n case \"class\":\n return \"class\";\n case \"interface\":\n return \"interface\";\n case \"type\":\n return \"type\";\n case \"enum\":\n return \"enum\";\n case \"variable\":\n return \"variable\";\n default:\n return \"block\";\n }\n }\n\n /**\n * Finalize indexing - build BM25 index and save symbol index.\n */\n async finalize(ctx: IndexContext): Promise<void> {\n const config = ctx.config;\n const coreDir = path.join(\n getRaggrepDir(ctx.rootDir, config),\n \"index\",\n \"core\"\n );\n\n // Ensure directory exists\n await fs.mkdir(coreDir, { recursive: true });\n\n // Build BM25 index from all tokens\n this.bm25Index = new BM25Index();\n for (const [filepath, entry] of this.symbolIndex) {\n this.bm25Index.addDocument(filepath, entry.tokens);\n }\n\n // Save symbol index\n const symbolIndexData = {\n version: this.version,\n lastUpdated: new Date().toISOString(),\n files: Object.fromEntries(this.symbolIndex),\n bm25Data: this.bm25Index.serialize(),\n };\n\n await fs.writeFile(\n path.join(coreDir, \"symbols.json\"),\n JSON.stringify(symbolIndexData, null, 2)\n );\n\n console.log(\n ` [Core] Symbol index built with ${this.symbolIndex.size} files`\n );\n }\n\n /**\n * Search the index.\n */\n async search(\n query: string,\n ctx: SearchContext,\n options?: SearchOptions\n ): Promise<SearchResult[]> {\n const config = ctx.config;\n const topK = options?.topK ?? DEFAULT_TOP_K;\n const minScore = options?.minScore ?? DEFAULT_MIN_SCORE;\n\n // Load symbol index if not in memory\n if (this.symbolIndex.size === 0) {\n await this.loadSymbolIndex(ctx.rootDir, config);\n }\n\n if (!this.bm25Index || this.symbolIndex.size === 0) {\n return [];\n }\n\n // Tokenize query\n const queryTokens = tokenize(query);\n\n // Get BM25 scores\n const bm25Results = this.bm25Index.search(query, topK * 2);\n const bm25Scores = new Map(bm25Results.map((r) => [r.id, r.score]));\n\n // Check for symbol name matches (exact or partial)\n const symbolMatches = this.findSymbolMatches(queryTokens);\n\n // Combine results\n const results: SearchResult[] = [];\n\n for (const filepath of this.symbolIndex.keys()) {\n const entry = this.symbolIndex.get(filepath)!;\n const bm25Score = bm25Scores.get(filepath) ?? 0;\n const symbolScore = symbolMatches.get(filepath) ?? 0;\n\n // Skip if no match\n if (bm25Score === 0 && symbolScore === 0) continue;\n\n // Combined score: symbol matches are highly weighted\n const combinedScore = 0.6 * normalizeScore(bm25Score) + 0.4 * symbolScore;\n\n if (combinedScore >= minScore) {\n // Load file index to get chunks\n const fileIndex = await ctx.loadFileIndex(filepath);\n if (!fileIndex) continue;\n\n // Find best matching chunk\n const bestChunk = this.findBestChunk(\n fileIndex.chunks,\n queryTokens,\n entry.symbols\n );\n\n results.push({\n filepath,\n chunk: bestChunk,\n score: combinedScore,\n moduleId: this.id,\n context: {\n bm25Score: normalizeScore(bm25Score),\n symbolScore,\n },\n });\n }\n }\n\n // Sort by score and limit\n return results.sort((a, b) => b.score - a.score).slice(0, topK);\n }\n\n /**\n * Find symbol name matches for query tokens.\n */\n private findSymbolMatches(queryTokens: string[]): Map<string, number> {\n const matches = new Map<string, number>();\n\n for (const [filepath, entry] of this.symbolIndex) {\n let matchScore = 0;\n\n for (const symbol of entry.symbols) {\n const symbolName = symbol.name.toLowerCase();\n const symbolParts = symbolsToKeywords([symbol]);\n\n for (const token of queryTokens) {\n // Exact match on symbol name\n if (symbolName === token) {\n matchScore += symbol.isExported ? 1.0 : 0.8;\n }\n // Partial match on symbol name\n else if (symbolName.includes(token) || token.includes(symbolName)) {\n matchScore += symbol.isExported ? 0.5 : 0.4;\n }\n // Match on symbol parts (camelCase split)\n else if (symbolParts.some((p) => p === token)) {\n matchScore += symbol.isExported ? 0.3 : 0.2;\n }\n }\n }\n\n if (matchScore > 0) {\n // Normalize by number of query tokens\n matches.set(filepath, Math.min(1, matchScore / queryTokens.length));\n }\n }\n\n return matches;\n }\n\n /**\n * Find the best matching chunk based on query tokens.\n */\n private findBestChunk(\n chunks: Chunk[],\n queryTokens: string[],\n symbols: ExtractedSymbol[]\n ): Chunk {\n let bestChunk = chunks[0];\n let bestScore = 0;\n\n for (const chunk of chunks) {\n let score = 0;\n const chunkContent = chunk.content.toLowerCase();\n\n // Score based on query token presence\n for (const token of queryTokens) {\n if (chunkContent.includes(token)) {\n score += 1;\n }\n }\n\n // Bonus for named chunks matching query\n if (chunk.name) {\n const nameLower = chunk.name.toLowerCase();\n for (const token of queryTokens) {\n if (nameLower.includes(token)) {\n score += 2;\n }\n }\n }\n\n // Bonus for exported symbols\n if (chunk.isExported) {\n score += 0.5;\n }\n\n if (score > bestScore) {\n bestScore = score;\n bestChunk = chunk;\n }\n }\n\n return bestChunk;\n }\n\n /**\n * Load the symbol index from disk.\n */\n private async loadSymbolIndex(rootDir: string, config: any): Promise<void> {\n const coreDir = path.join(getRaggrepDir(rootDir, config), \"index\", \"core\");\n const symbolsPath = path.join(coreDir, \"symbols.json\");\n\n try {\n const content = await fs.readFile(symbolsPath, \"utf-8\");\n const data = JSON.parse(content);\n\n // Restore symbol index\n this.symbolIndex = new Map(Object.entries(data.files));\n\n // Restore BM25 index\n if (data.bm25Data) {\n this.bm25Index = BM25Index.deserialize(data.bm25Data);\n }\n } catch (error) {\n // Index doesn't exist yet\n this.symbolIndex = new Map();\n this.bm25Index = null;\n }\n }\n\n async dispose(): Promise<void> {\n this.symbolIndex.clear();\n this.bm25Index = null;\n }\n}\n",
19
19
  "/**\n * Transformers.js Embedding Adapter\n * \n * Implements the EmbeddingProvider port using Transformers.js for local embeddings.\n * Models are automatically downloaded and cached on first use.\n */\n\nimport { pipeline, env, type FeatureExtractionPipeline } from '@xenova/transformers';\nimport * as path from 'path';\nimport * as os from 'os';\nimport type { EmbeddingProvider, EmbeddingConfig, EmbeddingModelName } from '../../domain/ports';\n\n// ============================================================================\n// Configuration\n// ============================================================================\n\n/** Cache directory for models */\nconst CACHE_DIR = path.join(os.homedir(), '.cache', 'raggrep', 'models');\n\n// Set the cache directory for transformers.js\nenv.cacheDir = CACHE_DIR;\nenv.allowLocalModels = true;\n\n/** Available embedding models and their Hugging Face IDs */\nexport const EMBEDDING_MODELS: Record<EmbeddingModelName, string> = {\n 'all-MiniLM-L6-v2': 'Xenova/all-MiniLM-L6-v2',\n 'all-MiniLM-L12-v2': 'Xenova/all-MiniLM-L12-v2',\n 'bge-small-en-v1.5': 'Xenova/bge-small-en-v1.5',\n 'paraphrase-MiniLM-L3-v2': 'Xenova/paraphrase-MiniLM-L3-v2',\n};\n\n/** Embedding dimension for all MiniLM models */\nconst EMBEDDING_DIMENSION = 384;\n\n/** Maximum texts per batch */\nconst BATCH_SIZE = 32;\n\n// ============================================================================\n// Transformers.js Embedding Provider\n// ============================================================================\n\n/**\n * Embedding provider using Transformers.js (local inference).\n */\nexport class TransformersEmbeddingProvider implements EmbeddingProvider {\n private pipeline: FeatureExtractionPipeline | null = null;\n private config: EmbeddingConfig;\n private isInitializing = false;\n private initPromise: Promise<void> | null = null;\n\n constructor(config?: Partial<EmbeddingConfig>) {\n this.config = {\n model: config?.model ?? 'all-MiniLM-L6-v2',\n showProgress: config?.showProgress ?? true,\n };\n }\n\n async initialize(config?: EmbeddingConfig): Promise<void> {\n if (config) {\n // If model changed, reset pipeline\n if (config.model !== this.config.model) {\n this.pipeline = null;\n }\n this.config = { ...this.config, ...config };\n }\n \n await this.ensurePipeline();\n }\n\n private async ensurePipeline(): Promise<void> {\n if (this.pipeline) {\n return;\n }\n \n // Prevent multiple simultaneous initializations\n if (this.isInitializing && this.initPromise) {\n return this.initPromise;\n }\n \n this.isInitializing = true;\n \n this.initPromise = (async () => {\n const modelId = EMBEDDING_MODELS[this.config.model];\n \n if (this.config.showProgress) {\n console.log(`\\n Loading embedding model: ${this.config.model}`);\n console.log(` Cache: ${CACHE_DIR}`);\n }\n \n try {\n this.pipeline = await pipeline('feature-extraction', modelId, {\n progress_callback: this.config.showProgress \n ? (progress: { status: string; file?: string; progress?: number }) => {\n if (progress.status === 'progress' && progress.file) {\n const pct = progress.progress ? Math.round(progress.progress) : 0;\n process.stdout.write(`\\r Downloading ${progress.file}: ${pct}% `);\n } else if (progress.status === 'done' && progress.file) {\n process.stdout.write(`\\r Downloaded ${progress.file} \\n`);\n }\n }\n : undefined,\n });\n \n if (this.config.showProgress) {\n console.log(` Model ready.\\n`);\n }\n } catch (error) {\n this.pipeline = null;\n throw new Error(`Failed to load embedding model: ${error}`);\n } finally {\n this.isInitializing = false;\n this.initPromise = null;\n }\n })();\n \n return this.initPromise;\n }\n\n async getEmbedding(text: string): Promise<number[]> {\n await this.ensurePipeline();\n \n if (!this.pipeline) {\n throw new Error('Embedding pipeline not initialized');\n }\n \n const output = await this.pipeline(text, {\n pooling: 'mean',\n normalize: true,\n });\n \n return Array.from(output.data as Float32Array);\n }\n\n async getEmbeddings(texts: string[]): Promise<number[][]> {\n if (texts.length === 0) return [];\n \n await this.ensurePipeline();\n \n if (!this.pipeline) {\n throw new Error('Embedding pipeline not initialized');\n }\n \n const results: number[][] = [];\n \n // Process in batches\n for (let i = 0; i < texts.length; i += BATCH_SIZE) {\n const batch = texts.slice(i, i + BATCH_SIZE);\n \n const outputs = await Promise.all(\n batch.map(async (text) => {\n const output = await this.pipeline!(text, {\n pooling: 'mean',\n normalize: true,\n });\n return Array.from(output.data as Float32Array);\n })\n );\n \n results.push(...outputs);\n }\n \n return results;\n }\n\n getDimension(): number {\n return EMBEDDING_DIMENSION;\n }\n\n getModelName(): string {\n return this.config.model;\n }\n\n async dispose(): Promise<void> {\n this.pipeline = null;\n }\n}\n\n/**\n * Get the cache directory path\n */\nexport function getCacheDir(): string {\n return CACHE_DIR;\n}\n\n/**\n * Check if a model is already cached\n */\nexport async function isModelCached(model: EmbeddingModelName): Promise<boolean> {\n const modelId = EMBEDDING_MODELS[model];\n const modelPath = path.join(CACHE_DIR, modelId.replace('/', '--'));\n \n try {\n const fs = await import('fs/promises');\n await fs.access(modelPath);\n return true;\n } catch {\n return false;\n }\n}\n\n// ============================================================================\n// Global Embedding API (convenience functions)\n// ============================================================================\n\n/** Global provider instance for convenience functions */\nlet globalProvider: TransformersEmbeddingProvider | null = null;\nlet globalConfig: EmbeddingConfig = {\n model: 'all-MiniLM-L6-v2',\n showProgress: true,\n};\n\n/**\n * Configure the global embedding provider.\n */\nexport function configureEmbeddings(config: Partial<EmbeddingConfig>): void {\n const newConfig = { ...globalConfig, ...config };\n \n // If model changed, reset provider\n if (newConfig.model !== globalConfig.model) {\n globalProvider = null;\n }\n \n globalConfig = newConfig as EmbeddingConfig;\n}\n\n/**\n * Get current embedding configuration.\n */\nexport function getEmbeddingConfig(): EmbeddingConfig {\n return { ...globalConfig };\n}\n\n/**\n * Ensure the global provider is initialized.\n */\nasync function ensureGlobalProvider(): Promise<TransformersEmbeddingProvider> {\n if (!globalProvider) {\n globalProvider = new TransformersEmbeddingProvider(globalConfig);\n await globalProvider.initialize();\n }\n return globalProvider;\n}\n\n/**\n * Get embedding for a single text using the global provider.\n */\nexport async function getEmbedding(text: string): Promise<number[]> {\n const provider = await ensureGlobalProvider();\n return provider.getEmbedding(text);\n}\n\n/**\n * Get embeddings for multiple texts using the global provider.\n */\nexport async function getEmbeddings(texts: string[]): Promise<number[][]> {\n const provider = await ensureGlobalProvider();\n return provider.getEmbeddings(texts);\n}\n\n",
@@ -25,15 +25,15 @@
25
25
  "/**\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",
26
26
  "/**\n * Storage Infrastructure\n *\n * Handles persistence of index data to the filesystem.\n */\n\nexport { FileIndexStorage } from \"./fileIndexStorage\";\nexport { SymbolicIndex, getSymbolicPath } from \"./symbolicIndex\";\n\n",
27
27
  "/**\n * TypeScript 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 * 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 { cosineSimilarity } from '../../../domain/services/similarity';\nimport { BM25Index, normalizeScore } from '../../../domain/services/bm25';\nimport { getEmbeddingConfigFromModule, getRaggrepDir } from '../../../infrastructure/config';\nimport { parseCode, generateChunkId } from './parseCode';\nimport { SymbolicIndex } from '../../../infrastructure/storage';\nimport { extractKeywords } from '../../../domain/services/keywords';\nimport type { EmbeddingConfig } from '../../../domain/ports';\nimport type { FileSummary } from '../../../domain/entities';\nimport { parsePathContext, formatPathContextForEmbedding } from '../../../domain/services/keywords';\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/**\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\n/** Number of candidate files to retrieve from Tier 1 before loading Tier 2 */\nconst TIER1_CANDIDATE_MULTIPLIER = 3;\n\nexport class TypeScriptModule implements IndexModule {\n readonly id = 'language/typescript';\n readonly name = 'TypeScript Search';\n readonly description = 'TypeScript-aware code search with AST parsing and semantic embeddings';\n readonly version = '1.0.0';\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\n async initialize(config: ModuleConfig): Promise<void> {\n // Extract embedding config from module options\n this.embeddingConfig = getEmbeddingConfigFromModule(config);\n \n // Configure the embedding provider\n configureEmbeddings(this.embeddingConfig);\n \n // Clear pending summaries for fresh indexing\n this.pendingSummaries.clear();\n }\n\n async indexFile(\n filepath: string,\n content: string,\n ctx: IndexContext\n ): Promise<FileIndex | null> {\n // Store rootDir for finalize\n this.rootDir = ctx.rootDir;\n \n // Parse code into chunks\n const parsedChunks = parseCode(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 = [...new Set(parsedChunks.map(pc => pc.type))] 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 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 index\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 console.log(` Symbolic index built with ${this.pendingSummaries.size} file summaries`);\n \n // Clear pending summaries\n this.pendingSummaries.clear();\n }\n\n /**\n * Search the semantic index for chunks matching the query.\n * \n * Uses a tiered approach for efficient search:\n * 1. Tier 1: Use BM25 on file summaries to find candidate files\n * 2. Tier 2: Load only candidate files and compute semantic similarity\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 { topK = DEFAULT_TOP_K, minScore = DEFAULT_MIN_SCORE, filePatterns } = options;\n\n // Load symbolic index for candidate filtering\n const indexDir = getRaggrepDir(ctx.rootDir, ctx.config);\n const symbolicIndex = new SymbolicIndex(indexDir, this.id);\n \n let candidateFiles: string[];\n \n try {\n await symbolicIndex.initialize();\n \n // Use BM25 keyword search on symbolic index to find candidate files\n const maxCandidates = topK * TIER1_CANDIDATE_MULTIPLIER;\n candidateFiles = symbolicIndex.findCandidates(query, maxCandidates);\n \n // If no candidates found via BM25, fall back to all files\n if (candidateFiles.length === 0) {\n candidateFiles = symbolicIndex.getAllFiles();\n }\n } catch {\n // Symbolic index doesn't exist, fall back to loading all files\n candidateFiles = await ctx.listIndexedFiles();\n }\n\n // Apply file pattern filter\n if (filePatterns && filePatterns.length > 0) {\n candidateFiles = candidateFiles.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 const queryEmbedding = await getEmbedding(query);\n\n // Tier 2: Load only candidate files and compute scores\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 candidateFiles) {\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\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\n const queryTerms = query.toLowerCase().split(/\\s+/).filter(t => t.length > 2);\n \n // Build path boost map from file summaries\n const pathBoosts = new Map<string, number>();\n for (const filepath of candidateFiles) {\n const summary = symbolicIndex.getFileSummary(filepath);\n if (summary?.pathContext) {\n let boost = 0;\n const ctx = summary.pathContext;\n \n // Check if query terms match domain\n if (ctx.domain && queryTerms.some(t => ctx.domain!.includes(t) || t.includes(ctx.domain!))) {\n boost += 0.1;\n }\n \n // Check if query terms match layer\n if (ctx.layer && queryTerms.some(t => ctx.layer!.includes(t) || t.includes(ctx.layer!))) {\n boost += 0.05;\n }\n \n // Check if query terms match path segments\n const segmentMatch = ctx.segments.some(seg => \n queryTerms.some(t => seg.toLowerCase().includes(t) || t.includes(seg.toLowerCase()))\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\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 // Hybrid score: weighted combination of semantic, BM25, and path boost\n const hybridScore = (SEMANTIC_WEIGHT * semanticScore) + (BM25_WEIGHT * bm25Score) + pathBoost;\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 pathBoost,\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",
28
- "// Main indexer - coordinates modules for indexing files\nimport { glob } from \"glob\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\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} from \"../../infrastructure/config\";\nimport { registry, registerBuiltInModules } from \"../../modules/registry\";\nimport type { EmbeddingModelName } from \"../../domain/ports\";\nimport { IntrospectionIndex } from \"../../infrastructure/introspection\";\n\nexport interface IndexResult {\n moduleId: string;\n indexed: number;\n skipped: number;\n errors: number;\n}\n\nexport interface IndexOptions {\n /** Override the embedding model (semantic module) */\n model?: EmbeddingModelName;\n /** Show detailed progress */\n verbose?: boolean;\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\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Show index location\n const location = getIndexLocation(rootDir);\n console.log(`Indexing directory: ${rootDir}`);\n console.log(`Index location: ${location.indexDir}`);\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 if (verbose) {\n const structure = introspection.getStructure();\n if (structure?.isMonorepo) {\n console.log(\n `Detected monorepo with ${structure.projects.length} projects`\n );\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 console.log(\"No modules enabled. Check your configuration.\");\n return [];\n }\n\n console.log(`Enabled modules: ${enabledModules.map((m) => m.id).join(\", \")}`);\n\n // Get all files matching extensions\n const files = await findFiles(rootDir, config);\n console.log(`Found ${files.length} files to index`);\n\n // Index with each module\n const results: IndexResult[] = [];\n\n for (const module of enabledModules) {\n console.log(`\\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\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 await module.initialize(configWithOverrides);\n }\n\n const result = await indexWithModule(\n rootDir,\n files,\n module,\n config,\n verbose,\n introspection\n );\n results.push(result);\n\n // Call finalize to build secondary indexes (Tier 1, BM25, etc.)\n if (module.finalize) {\n console.log(`[${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 console.log(\n `[${module.name}] Complete: ${result.indexed} indexed, ${result.skipped} skipped, ${result.errors} errors`\n );\n }\n\n // Save introspection data\n await introspection.save(config);\n\n // Update global manifest\n await updateGlobalManifest(rootDir, enabledModules, config);\n\n return results;\n}\n\n/**\n * Index files with a specific module\n */\nasync function indexWithModule(\n rootDir: string,\n files: string[],\n module: IndexModule,\n config: Config,\n verbose: boolean,\n introspection: IntrospectionIndex\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\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 // Process each file\n for (const filepath of files) {\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 if (verbose) {\n console.log(` Skipped ${relativePath} (unchanged)`);\n }\n result.skipped++;\n continue;\n }\n\n // Read and index file\n const content = await fs.readFile(filepath, \"utf-8\");\n\n // Add introspection for this file\n introspection.addFile(relativePath, content);\n\n if (verbose) {\n console.log(` Processing ${relativePath}...`);\n }\n const fileIndex = await module.indexFile(relativePath, content, ctx);\n\n if (!fileIndex) {\n if (verbose) {\n console.log(` Skipped ${relativePath} (no chunks)`);\n }\n result.skipped++;\n continue;\n }\n\n // Write index file\n await writeFileIndex(rootDir, module.id, relativePath, fileIndex, config);\n\n // Update manifest\n manifest.files[relativePath] = {\n lastModified,\n chunkCount: fileIndex.chunks.length,\n };\n\n result.indexed++;\n } catch (error) {\n console.error(` Error indexing ${relativePath}:`, error);\n result.errors++;\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: config.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 * 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: { verbose?: boolean } = {}\n): Promise<CleanupResult[]> {\n const verbose = options.verbose ?? false;\n\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n console.log(`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 console.log(\"No modules enabled.\");\n return [];\n }\n\n const results: CleanupResult[] = [];\n\n for (const module of enabledModules) {\n console.log(`\\n[${module.name}] Checking for stale entries...`);\n\n const result = await cleanupModuleIndex(\n rootDir,\n module.id,\n config,\n verbose\n );\n results.push(result);\n\n console.log(\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 verbose: boolean\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\n if (verbose) {\n console.log(` Removing stale entry: ${filepath}`);\n }\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",
28
+ "// Main indexer - coordinates modules for indexing files\nimport { glob } from \"glob\";\nimport * as fs from \"fs/promises\";\nimport * as path from \"path\";\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 } from \"../../domain/ports\";\nimport { IntrospectionIndex } from \"../../infrastructure/introspection\";\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 */\nconst INDEX_SCHEMA_VERSION = \"1.0.0\";\n\nexport interface IndexResult {\n moduleId: string;\n indexed: number;\n skipped: number;\n errors: number;\n}\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}\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\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n // Show index location\n const location = getIndexLocation(rootDir);\n if (!quiet) {\n console.log(`Indexing directory: ${rootDir}`);\n console.log(`Index location: ${location.indexDir}`);\n }\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 if (verbose) {\n const structure = introspection.getStructure();\n if (structure?.isMonorepo) {\n console.log(\n `Detected monorepo with ${structure.projects.length} projects`\n );\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 if (!quiet) {\n console.log(\"No modules enabled. Check your configuration.\");\n }\n return [];\n }\n\n if (!quiet) {\n console.log(\n `Enabled modules: ${enabledModules.map((m) => m.id).join(\", \")}`\n );\n }\n\n // Get all files matching extensions\n const files = await findFiles(rootDir, config);\n if (!quiet) {\n console.log(`Found ${files.length} files to index`);\n }\n\n // Index with each module\n const results: IndexResult[] = [];\n\n for (const module of enabledModules) {\n if (!quiet) {\n console.log(`\\n[${module.name}] Starting indexing...`);\n }\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\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 await module.initialize(configWithOverrides);\n }\n\n const result = await indexWithModule(\n rootDir,\n files,\n module,\n config,\n verbose,\n introspection\n );\n results.push(result);\n\n // Call finalize to build secondary indexes (Tier 1, BM25, etc.)\n if (module.finalize) {\n if (!quiet) {\n console.log(`[${module.name}] Building secondary indexes...`);\n }\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 if (!quiet) {\n console.log(\n `[${module.name}] Complete: ${result.indexed} indexed, ${result.skipped} skipped, ${result.errors} errors`\n );\n }\n }\n\n // Save introspection data\n await introspection.save(config);\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 * 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 // 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 if (!quiet) {\n console.log(\"No index found. Creating index...\\n\");\n }\n const results = await indexDirectory(rootDir, { ...options, quiet });\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 if (!quiet) {\n console.log(\"Index version incompatible. Rebuilding...\\n\");\n }\n await deleteIndex(rootDir);\n const results = await indexDirectory(rootDir, { ...options, quiet });\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 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 if (verbose) {\n console.log(` Removing stale: ${filepath}`);\n }\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 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 for (const filepath of currentFiles) {\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 totalUnchanged++;\n continue;\n }\n\n // File is new or modified - index it\n if (verbose) {\n console.log(` Indexing: ${relativePath}`);\n }\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 if (verbose) {\n console.error(` Error indexing ${relativePath}:`, error);\n }\n }\n }\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 * Index files with a specific module\n */\nasync function indexWithModule(\n rootDir: string,\n files: string[],\n module: IndexModule,\n config: Config,\n verbose: boolean,\n introspection: IntrospectionIndex\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\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 // Process each file\n for (const filepath of files) {\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 if (verbose) {\n console.log(` Skipped ${relativePath} (unchanged)`);\n }\n result.skipped++;\n continue;\n }\n\n // Read and index file\n const content = await fs.readFile(filepath, \"utf-8\");\n\n // Add introspection for this file\n introspection.addFile(relativePath, content);\n\n if (verbose) {\n console.log(` Processing ${relativePath}...`);\n }\n const fileIndex = await module.indexFile(relativePath, content, ctx);\n\n if (!fileIndex) {\n if (verbose) {\n console.log(` Skipped ${relativePath} (no chunks)`);\n }\n result.skipped++;\n continue;\n }\n\n // Write index file\n await writeFileIndex(rootDir, module.id, relativePath, fileIndex, config);\n\n // Update manifest\n manifest.files[relativePath] = {\n lastModified,\n chunkCount: fileIndex.chunks.length,\n };\n\n result.indexed++;\n } catch (error) {\n console.error(` Error indexing ${relativePath}:`, error);\n result.errors++;\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 * 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: { verbose?: boolean } = {}\n): Promise<CleanupResult[]> {\n const verbose = options.verbose ?? false;\n\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n console.log(`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 console.log(\"No modules enabled.\");\n return [];\n }\n\n const results: CleanupResult[] = [];\n\n for (const module of enabledModules) {\n console.log(`\\n[${module.name}] Checking for stale entries...`);\n\n const result = await cleanupModuleIndex(\n rootDir,\n module.id,\n config,\n verbose\n );\n results.push(result);\n\n console.log(\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 verbose: boolean\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\n if (verbose) {\n console.log(` Removing stale entry: ${filepath}`);\n }\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",
29
29
  "// 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 if (this.modules.has(module.id)) {\n console.warn(`Module '${module.id}' is already registered, overwriting...`);\n }\n this.modules.set(module.id, module);\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\n .filter(m => m.enabled)\n .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 \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",
30
- "/**\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 console.log(\n ` [Introspection] Saved metadata for ${this.files.size} files`\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",
31
- "/**\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",
30
+ "/**\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 console.log(\n ` [Introspection] Saved metadata for ${this.files.size} files`\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\n",
31
+ "/**\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",
32
32
  "/**\n * File watcher for incremental indexing\n * \n * Best practices implemented:\n * - Debouncing: Batches rapid file changes (e.g., IDE saves, git operations)\n * - Queuing: Prevents concurrent index operations\n * - Efficient filtering: Only watches relevant file types\n * - Graceful shutdown: Proper cleanup on SIGINT/SIGTERM\n * - Error recovery: Continues watching after index errors\n */\n\nimport { watch, type FSWatcher } from 'chokidar';\nimport * as path from 'path';\nimport { loadConfig, getIndexLocation } from '../../infrastructure/config';\nimport type { Config } from '../../domain/entities';\nimport { indexDirectory, cleanupIndex, type IndexOptions, type IndexResult } from './index';\n\n/** Default debounce delay in milliseconds */\nconst DEFAULT_DEBOUNCE_MS = 300;\n\n/** Maximum files to batch before forcing an index */\nconst MAX_BATCH_SIZE = 100;\n\nexport interface WatchOptions extends IndexOptions {\n /** Debounce delay in milliseconds (default: 300) */\n debounceMs?: number;\n /** Callback when indexing starts */\n onIndexStart?: (files: string[]) => void;\n /** Callback when indexing completes */\n onIndexComplete?: (results: IndexResult[]) => void;\n /** Callback when a file change is detected */\n onFileChange?: (event: 'add' | 'change' | 'unlink', filepath: string) => void;\n /** Callback for errors */\n onError?: (error: Error) => void;\n}\n\nexport interface FileWatcher {\n /** Stop watching and clean up */\n stop: () => Promise<void>;\n /** Whether the watcher is currently running */\n isRunning: () => boolean;\n}\n\n/**\n * Start watching a directory for file changes and index incrementally\n */\nexport async function watchDirectory(\n rootDir: string,\n options: WatchOptions = {}\n): Promise<FileWatcher> {\n const {\n debounceMs = DEFAULT_DEBOUNCE_MS,\n verbose = false,\n model,\n onIndexStart,\n onIndexComplete,\n onFileChange,\n onError,\n } = options;\n\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, so no need to ignore in project)\n const indexLocation = getIndexLocation(rootDir);\n \n // Create a set of valid extensions for fast lookup\n const validExtensions = new Set(config.extensions);\n \n // Build ignore patterns - watch directory, filter by extension\n const ignorePatterns = [\n ...config.ignorePaths.map(p => `**/${p}/**`),\n '**/node_modules/**',\n '**/.git/**',\n ];\n \n /**\n * Check if a file should be watched based on its extension\n */\n function shouldWatchFile(filepath: string): boolean {\n const ext = path.extname(filepath);\n return validExtensions.has(ext);\n }\n\n // State management\n let isRunning = true;\n let isIndexing = false;\n let pendingChanges = new Map<string, 'add' | 'change' | 'unlink'>();\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let watcher: FSWatcher | null = null;\n\n /**\n * Process pending file changes\n */\n async function processPendingChanges(): Promise<void> {\n if (!isRunning || isIndexing || pendingChanges.size === 0) {\n return;\n }\n\n isIndexing = true;\n const changes = new Map(pendingChanges);\n pendingChanges.clear();\n\n try {\n // Separate additions/changes from deletions\n const filesToIndex: string[] = [];\n const filesToDelete: string[] = [];\n\n for (const [filepath, event] of changes) {\n if (event === 'unlink') {\n filesToDelete.push(filepath);\n } else {\n filesToIndex.push(filepath);\n }\n }\n\n // Handle deletions via cleanup\n if (filesToDelete.length > 0) {\n if (verbose) {\n console.log(`\\n[Watch] Cleaning up ${filesToDelete.length} deleted file(s)...`);\n }\n await cleanupIndex(rootDir, { verbose: false });\n }\n\n // Handle additions/changes via incremental index\n if (filesToIndex.length > 0) {\n if (onIndexStart) {\n onIndexStart(filesToIndex);\n }\n\n if (verbose) {\n console.log(`\\n[Watch] Indexing ${filesToIndex.length} changed file(s)...`);\n }\n\n const results = await indexDirectory(rootDir, {\n model,\n verbose: false, // Keep output clean in watch mode\n });\n\n if (onIndexComplete) {\n onIndexComplete(results);\n }\n\n // Print summary\n for (const result of results) {\n if (result.indexed > 0 || result.errors > 0) {\n console.log(`[Watch] ${result.moduleId}: ${result.indexed} indexed, ${result.errors} errors`);\n }\n }\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n console.error('[Watch] Error during indexing:', err.message);\n if (onError) {\n onError(err);\n }\n } finally {\n isIndexing = false;\n\n // Process any changes that came in while we were indexing\n if (pendingChanges.size > 0) {\n scheduleProcessing();\n }\n }\n }\n\n /**\n * Schedule processing of pending changes (with debounce)\n */\n function scheduleProcessing(): void {\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n\n // Force processing if batch is too large\n if (pendingChanges.size >= MAX_BATCH_SIZE) {\n processPendingChanges();\n return;\n }\n\n debounceTimer = setTimeout(() => {\n debounceTimer = null;\n processPendingChanges();\n }, debounceMs);\n }\n\n /**\n * Handle a file event\n */\n function handleFileEvent(event: 'add' | 'change' | 'unlink', filepath: string): void {\n if (!isRunning) return;\n\n // Convert to relative path\n const relativePath = path.relative(rootDir, filepath);\n\n // Skip if file doesn't have a valid extension\n // For unlink events, we still need to check the extension to only clean up indexed files\n if (!shouldWatchFile(filepath)) {\n return;\n }\n\n // Skip if it's in an ignored directory (extra safety check)\n for (const ignorePath of config.ignorePaths) {\n if (relativePath.startsWith(ignorePath) || relativePath.includes(`/${ignorePath}/`)) {\n return;\n }\n }\n\n if (onFileChange) {\n onFileChange(event, relativePath);\n }\n\n if (verbose) {\n const symbol = event === 'add' ? '+' : event === 'unlink' ? '-' : '~';\n console.log(`[Watch] ${symbol} ${relativePath}`);\n }\n\n // Update pending changes (later events override earlier ones for same file)\n pendingChanges.set(relativePath, event);\n scheduleProcessing();\n }\n\n // Create the watcher - watch the directory itself (not glob patterns)\n // This ensures new files in new directories are detected\n watcher = watch(rootDir, {\n ignored: ignorePatterns,\n persistent: true,\n ignoreInitial: true, // Don't trigger events for existing files\n awaitWriteFinish: {\n stabilityThreshold: 100, // Wait for file to be stable\n pollInterval: 50,\n },\n // Performance optimizations\n usePolling: false, // Use native fs events when possible\n atomic: true, // Handle atomic writes (common in editors)\n // Watch directories for new file detection\n depth: 99, // Watch deeply nested directories\n });\n\n // Set up event handlers\n // When watching a directory directly, chokidar gives us absolute paths\n watcher.on('add', (filepath) => handleFileEvent('add', filepath));\n watcher.on('change', (filepath) => handleFileEvent('change', filepath));\n watcher.on('unlink', (filepath) => handleFileEvent('unlink', filepath));\n\n watcher.on('error', (error: unknown) => {\n const err = error instanceof Error ? error : new Error(String(error));\n console.error('[Watch] Watcher error:', err);\n if (onError) {\n onError(err);\n }\n });\n\n // Wait for watcher to be ready\n await new Promise<void>((resolve) => {\n watcher!.on('ready', () => {\n resolve();\n });\n });\n\n // Return control interface\n return {\n stop: async () => {\n isRunning = false;\n \n if (debounceTimer) {\n clearTimeout(debounceTimer);\n debounceTimer = null;\n }\n \n if (watcher) {\n await watcher.close();\n watcher = null;\n }\n },\n isRunning: () => isRunning,\n };\n}\n\n",
33
33
  "// Search module - queries across all enabled modules\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport {\n Config,\n SearchContext,\n SearchOptions,\n SearchResult,\n FileIndex,\n IndexModule,\n GlobalManifest,\n} from '../../types';\nimport {\n loadConfig,\n getModuleIndexPath,\n getGlobalManifestPath,\n getModuleConfig,\n} from '../../infrastructure/config';\nimport { registry, registerBuiltInModules } from '../../modules/registry';\n\n/**\n * Search across all enabled modules\n */\nexport async function search(\n rootDir: string,\n query: string,\n options: SearchOptions = {}\n): Promise<SearchResult[]> {\n // Ensure absolute path\n rootDir = path.resolve(rootDir);\n\n console.log(`Searching for: \"${query}\"`);\n\n // Load config\n const config = await loadConfig(rootDir);\n\n // Register built-in modules\n await registerBuiltInModules();\n\n // Check which modules have indexes\n const globalManifest = await loadGlobalManifest(rootDir, config);\n \n if (!globalManifest || globalManifest.modules.length === 0) {\n console.log('No index found. Run \"bun run index\" first.');\n return [];\n }\n\n // Get modules that are both enabled and have indexes\n const modulesToSearch: IndexModule[] = [];\n \n for (const moduleId of globalManifest.modules) {\n const module = registry.get(moduleId);\n const moduleConfig = getModuleConfig(config, moduleId);\n \n if (module && moduleConfig?.enabled) {\n // Initialize module if needed\n if (module.initialize) {\n await module.initialize(moduleConfig);\n }\n modulesToSearch.push(module);\n }\n }\n\n if (modulesToSearch.length === 0) {\n console.log('No enabled modules with indexes found.');\n return [];\n }\n\n // Search with each module and aggregate results\n const allResults: SearchResult[] = [];\n\n for (const module of modulesToSearch) {\n const ctx = createSearchContext(rootDir, module.id, config);\n const moduleResults = await module.search(query, ctx, options);\n allResults.push(...moduleResults);\n }\n\n // Sort all results by score\n allResults.sort((a, b) => b.score - a.score);\n\n // Return top K\n const topK = options.topK ?? 10;\n return allResults.slice(0, topK);\n}\n\n/**\n * Create a search context for a specific module\n */\nfunction createSearchContext(\n rootDir: string,\n moduleId: string,\n config: Config\n): SearchContext {\n const indexPath = getModuleIndexPath(rootDir, moduleId, config);\n\n return {\n rootDir,\n config,\n \n loadFileIndex: async (filepath: string): Promise<FileIndex | null> => {\n // filepath may or may not have an extension\n // If it has an extension, replace it with .json; otherwise append .json\n const hasExtension = /\\.[^./]+$/.test(filepath);\n const indexFilePath = hasExtension\n ? path.join(indexPath, filepath.replace(/\\.[^.]+$/, '.json'))\n : path.join(indexPath, filepath + '.json');\n \n try {\n const content = await fs.readFile(indexFilePath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n },\n \n listIndexedFiles: async (): Promise<string[]> => {\n const files: string[] = [];\n await traverseDirectory(indexPath, files, indexPath);\n \n // Convert index file paths back to source file paths\n return files\n .filter(f => f.endsWith('.json') && !f.endsWith('manifest.json'))\n .map(f => {\n const relative = path.relative(indexPath, f);\n // Convert .json back to original extension (we'll handle this generically)\n return relative.replace(/\\.json$/, '');\n });\n },\n };\n}\n\nasync function traverseDirectory(dir: string, files: string[], basePath: 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 traverseDirectory(fullPath, files, basePath);\n } else if (entry.isFile()) {\n files.push(fullPath);\n }\n }\n } catch {\n // Directory doesn't exist\n }\n}\n\nasync function loadGlobalManifest(rootDir: string, config: Config): Promise<GlobalManifest | null> {\n const manifestPath = getGlobalManifestPath(rootDir, config);\n\n try {\n const content = await fs.readFile(manifestPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\n/**\n * Get a human-friendly name for a module ID\n */\nfunction formatModuleName(moduleId: string): string {\n switch (moduleId) {\n case 'core':\n return 'Core';\n case 'language/typescript':\n return 'TypeScript';\n default:\n // Handle future modules: \"language/python\" -> \"Python\"\n if (moduleId.startsWith('language/')) {\n const lang = moduleId.replace('language/', '');\n return lang.charAt(0).toUpperCase() + lang.slice(1);\n }\n return moduleId;\n }\n}\n\n/**\n * Format search results for display\n * @param results - Array of search results to format\n * @returns Formatted string for console output\n */\nexport function formatSearchResults(results: SearchResult[]): string {\n if (results.length === 0) {\n return 'No results found.';\n }\n\n let output = `Found ${results.length} results:\\n\\n`;\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i];\n const { chunk } = result;\n \n // Format location with optional name\n const location = `${result.filepath}:${chunk.startLine}-${chunk.endLine}`;\n const nameInfo = chunk.name ? ` (${chunk.name})` : '';\n \n output += `${i + 1}. ${location}${nameInfo}\\n`;\n output += ` Score: ${(result.score * 100).toFixed(1)}% | Type: ${chunk.type}`;\n \n // Show which module contributed this result\n output += ` | via ${formatModuleName(result.moduleId)}`;\n \n // Add export indicator\n if (chunk.isExported) {\n output += ' | exported';\n }\n output += '\\n';\n\n // Show preview (first 3 lines)\n const lines = chunk.content.split('\\n').slice(0, 3);\n for (const line of lines) {\n const trimmedLine = line.substring(0, 80);\n output += ` ${trimmedLine}${line.length > 80 ? '...' : ''}\\n`;\n }\n\n output += '\\n';\n }\n\n return output;\n}\n",
34
34
  "/**\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\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 * // Clean up stale entries\n * await raggrep.cleanup('/path/to/project');\n * ```\n */\n\nimport { indexDirectory, cleanupIndex } from \"./app/indexer\";\nimport type { IndexResult, IndexOptions, CleanupResult } from \"./app/indexer\";\nimport { search as searchIndex, formatSearchResults } from \"./app/search\";\nimport type { SearchOptions, SearchResult } from \"./types\";\n\n// Re-export types\nexport type { IndexResult, IndexOptions, CleanupResult } from \"./app/indexer\";\nexport type { SearchOptions, SearchResult, Chunk, FileIndex } from \"./types\";\n\n/**\n * Index a directory for semantic search.\n *\n * Creates a `.raggrep/` folder with the index data.\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 * @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: { verbose?: boolean } = {}\n): Promise<CleanupResult[]> {\n return cleanupIndex(directory, options);\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 formatSearchResults,\n};\n\nexport default raggrep;\n"
35
35
  ],
36
- "mappings": "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",
37
- "debugId": "B36BFBBC8240BDFB64756E2164756E21",
36
+ "mappings": "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",
37
+ "debugId": "DEB2F8AAF72AF0A164756E2164756E21",
38
38
  "names": []
39
39
  }