codeseeker 1.9.0 → 1.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/README.md +14 -2
  2. package/dist/cli/commands/services/semantic-search-orchestrator.d.ts +21 -1
  3. package/dist/cli/commands/services/semantic-search-orchestrator.d.ts.map +1 -1
  4. package/dist/cli/commands/services/semantic-search-orchestrator.js +189 -52
  5. package/dist/cli/commands/services/semantic-search-orchestrator.js.map +1 -1
  6. package/dist/cli/services/search/raptor-indexing-service.d.ts +83 -0
  7. package/dist/cli/services/search/raptor-indexing-service.d.ts.map +1 -0
  8. package/dist/cli/services/search/raptor-indexing-service.js +403 -0
  9. package/dist/cli/services/search/raptor-indexing-service.js.map +1 -0
  10. package/dist/mcp/indexing-service.d.ts +1 -1
  11. package/dist/mcp/indexing-service.d.ts.map +1 -1
  12. package/dist/mcp/indexing-service.js +25 -0
  13. package/dist/mcp/indexing-service.js.map +1 -1
  14. package/dist/mcp/mcp-server.d.ts.map +1 -1
  15. package/dist/mcp/mcp-server.js +13 -2
  16. package/dist/mcp/mcp-server.js.map +1 -1
  17. package/dist/storage/embedded/sqlite-vector-store.d.ts +4 -0
  18. package/dist/storage/embedded/sqlite-vector-store.d.ts.map +1 -1
  19. package/dist/storage/embedded/sqlite-vector-store.js +57 -17
  20. package/dist/storage/embedded/sqlite-vector-store.js.map +1 -1
  21. package/dist/storage/interfaces.d.ts +19 -0
  22. package/dist/storage/interfaces.d.ts.map +1 -1
  23. package/dist/storage/server/postgres-vector-store.d.ts +4 -0
  24. package/dist/storage/server/postgres-vector-store.d.ts.map +1 -1
  25. package/dist/storage/server/postgres-vector-store.js +60 -0
  26. package/dist/storage/server/postgres-vector-store.js.map +1 -1
  27. package/package.json +1 -1
package/README.md CHANGED
@@ -222,7 +222,10 @@ Once configured, Claude has access to these MCP tools (used automatically):
222
222
 
223
223
  | Tool | Actions / Usage | What It Does |
224
224
  |------|-----------------|-------------|
225
- | `search` | `{query}` | Hybrid search: vector + text + path with RRF fusion |
225
+ | `search` | `{query}` | Hybrid search: vector + BM25 text + path-match, fused with RRF; RAPTOR directory summaries surface for abstract queries |
226
+ | `search` | `{query, search_type: "graph"}` | Hybrid search **+ Graph RAG** — follows import/call/extends edges to surface structurally connected files |
227
+ | `search` | `{query, search_type: "vector"}` | Pure embedding cosine-similarity search (no BM25 or path scoring) |
228
+ | `search` | `{query, search_type: "fts"}` | Pure BM25 text search with CamelCase tokenisation and synonym expansion |
226
229
  | `search` | `{query, read: true}` | Search + read file contents in one step |
227
230
  | `search` | `{filepath}` | Read a file with its related code automatically included |
228
231
  | `analyze` | `{action: "dependencies", filepath}` | Traverse the knowledge graph (imports, calls, extends) |
@@ -266,10 +269,16 @@ First search on a new project takes 30 seconds to several minutes (depending on
266
269
  | **Grep/ripgrep** | Text pattern matching | Fast, universal | No semantic understanding |
267
270
  | **Vector search only** | Embedding similarity | Finds similar code | Misses structural relationships |
268
271
  | **LSP-based tools** | Language server protocol | Precise symbol definitions | No semantic search, no cross-file reasoning |
269
- | **CodeSeeker** | Knowledge graph + hybrid search | Semantic + structure + patterns | Requires initial indexing (30s-5min) |
272
+ | **CodeSeeker** | Knowledge graph + hierarchical hybrid search | Semantic + structure + directory context + patterns | Requires initial indexing (30s-5min) |
270
273
 
271
274
  ### CodeSeeker's Unique Capabilities
272
275
 
276
+ **Hierarchical search (RAPTOR):**
277
+ CodeSeeker generates *directory summary nodes* by mean-pooling the embeddings of all files in each folder, plus a *project root node* for the whole codebase. These live in the same index as regular file chunks:
278
+ - *Concrete queries* ("find JWT refresh logic") surface precise file chunks as usual
279
+ - *Abstract queries* ("what does the auth package do?") naturally score higher against directory summaries → instant package-level answers without enumerating 20 files
280
+ - *On sync*, a structural hash + cosine drift check skips regeneration for most edits — no extra cost for routine code changes
281
+
273
282
  **What LSP tools can't do:**
274
283
  - *"Find code that handles errors like this"* → Semantic search finds similar patterns
275
284
  - *"What validation approach does this project use?"* → Auto-detected coding standards
@@ -283,6 +292,9 @@ First search on a new project takes 30 seconds to several minutes (depending on
283
292
 
284
293
  CodeSeeker combines all three: **graph traversal** for structure, **vector search** for meaning, **text search** for precision—fused with Reciprocal Rank Fusion (RRF) for optimal results.
285
294
 
295
+ **Search quality guarantee:**
296
+ Every release is gated by a precision/recall benchmark suite that runs 104 tests across hand-curated TypeScript, Python, and Go fixtures (JWT middleware, generic repositories, async ORMs, Pydantic schemas, goroutine workers, and more). FTS, hybrid, and graph modes must all achieve R@5 = 1.0 and MRR = 1.0 for language-specific queries; a regression of more than 0.15 on any (query × mode) cell blocks the release automatically.
297
+
286
298
  ## Auto-Detected Coding Standards
287
299
 
288
300
  CodeSeeker analyzes your codebase and extracts patterns:
@@ -43,6 +43,7 @@ export declare class SemanticSearchOrchestrator {
43
43
  private useEmbedded;
44
44
  private vectorStore?;
45
45
  private projectStore?;
46
+ private graphStore?;
46
47
  constructor();
47
48
  /**
48
49
  * Initialize storage - checks if we should use embedded or server mode
@@ -62,13 +63,32 @@ export declare class SemanticSearchOrchestrator {
62
63
  * Combines vector similarity with keyword/synonym matching for better recall
63
64
  * Returns empty array if storage unavailable or no results - Claude handles file discovery natively
64
65
  */
65
- performSemanticSearch(query: string, projectPath: string): Promise<SemanticResult[]>;
66
+ performSemanticSearch(query: string, projectPath: string, searchType?: 'hybrid' | 'vector' | 'fts' | 'graph'): Promise<SemanticResult[]>;
66
67
  /**
67
68
  * Perform hybrid search using the storage interface abstraction
68
69
  * Works for both embedded (SQLite + MiniSearch) and server (PostgreSQL + pgvector) modes
69
70
  * The IVectorStore implementation handles the specific search logic internally
70
71
  */
71
72
  private performHybridSearchViaInterface;
73
+ /**
74
+ * Perform vector-only semantic search (pure embedding similarity, no BM25/path matching)
75
+ */
76
+ private performVectorOnlySearch;
77
+ /**
78
+ * Perform text/FTS-only search (BM25 + synonyms, no vector similarity)
79
+ */
80
+ private performTextOnlySearch;
81
+ /**
82
+ * Deduplicate raw VectorSearchResults by file path, apply multi-chunk boost, and map to SemanticResult[].
83
+ * Shared by all search modes (vector, fts, hybrid, graph) to ensure consistent scoring behaviour.
84
+ */
85
+ private processRawResults;
86
+ /**
87
+ * Graph RAG: expand hybrid search results by following 1-hop code relationship edges.
88
+ * For each of the top-5 result files, lookup its graph node and collect neighbours
89
+ * (files connected via imports/calls/extends). Appends new files at a discounted score.
90
+ */
91
+ private expandWithGraphNeighbors;
72
92
  /**
73
93
  * Check if string is valid UUID
74
94
  */
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-search-orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/services/semantic-search-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAQH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,YAAY,CAAC,CAAgB;;IAMrC;;OAEG;YACW,WAAW;IAezB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;YACW,gBAAgB;IA0B9B;;;;;OAKG;IACG,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgC1F;;;;OAIG;YACW,+BAA+B;IAqF7C;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAiC1B"}
1
+ {"version":3,"file":"semantic-search-orchestrator.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/services/semantic-search-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AASH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,KAAK,CAAC,EAAE;QACN,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAAC,CAAe;IACnC,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAC,CAAc;;IAMjC;;OAEG;YACW,WAAW;IAgBzB;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;YACW,gBAAgB;IA0B9B;;;;;OAKG;IACG,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA4CxJ;;;;OAIG;YACW,+BAA+B;IA4B7C;;OAEG;YACW,uBAAuB;IAoBrC;;OAEG;YACW,qBAAqB;IAYnC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA+DzB;;;;OAIG;YACW,wBAAwB;IAsEtC;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,aAAa;IA0BrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAiC1B"}
@@ -60,6 +60,7 @@ const path = __importStar(require("path"));
60
60
  const logger_1 = require("../../../utils/logger");
61
61
  const embedding_generator_adapter_1 = require("../../services/search/embedding-generator-adapter");
62
62
  const storage_1 = require("../../../storage");
63
+ const raptor_indexing_service_1 = require("../../services/search/raptor-indexing-service");
63
64
  class SemanticSearchOrchestrator {
64
65
  logger = logger_1.Logger.getInstance();
65
66
  projectId;
@@ -68,6 +69,7 @@ class SemanticSearchOrchestrator {
68
69
  useEmbedded = false;
69
70
  vectorStore;
70
71
  projectStore;
72
+ graphStore;
71
73
  constructor() {
72
74
  this.embeddingGenerator = new embedding_generator_adapter_1.EmbeddingGeneratorAdapter();
73
75
  }
@@ -82,6 +84,10 @@ class SemanticSearchOrchestrator {
82
84
  this.useEmbedded = (0, storage_1.isUsingEmbeddedStorage)();
83
85
  this.vectorStore = this.storageManager.getVectorStore();
84
86
  this.projectStore = this.storageManager.getProjectStore();
87
+ try {
88
+ this.graphStore = this.storageManager.getGraphStore();
89
+ }
90
+ catch { /* graph store is optional */ }
85
91
  this.logger.debug(`Semantic search using ${this.useEmbedded ? 'embedded' : 'server'} storage`);
86
92
  }
87
93
  catch (error) {
@@ -128,7 +134,7 @@ class SemanticSearchOrchestrator {
128
134
  * Combines vector similarity with keyword/synonym matching for better recall
129
135
  * Returns empty array if storage unavailable or no results - Claude handles file discovery natively
130
136
  */
131
- async performSemanticSearch(query, projectPath) {
137
+ async performSemanticSearch(query, projectPath, searchType = 'hybrid') {
132
138
  try {
133
139
  // Initialize storage mode detection
134
140
  await this.initStorage();
@@ -148,8 +154,20 @@ class SemanticSearchOrchestrator {
148
154
  return [];
149
155
  }
150
156
  }
151
- // Perform HYBRID search using storage interface
152
- return await this.performHybridSearchViaInterface(query, projectPath);
157
+ // Route to appropriate search method based on search_type
158
+ switch (searchType) {
159
+ case 'vector':
160
+ return await this.performVectorOnlySearch(query, projectPath);
161
+ case 'fts':
162
+ return await this.performTextOnlySearch(query, projectPath);
163
+ case 'graph': {
164
+ const base = await this.performHybridSearchViaInterface(query, projectPath);
165
+ return await this.expandWithGraphNeighbors(base, projectPath);
166
+ }
167
+ case 'hybrid':
168
+ default:
169
+ return await this.performHybridSearchViaInterface(query, projectPath);
170
+ }
153
171
  }
154
172
  catch (error) {
155
173
  // Log at debug level - Claude handles file discovery anyway
@@ -180,62 +198,181 @@ class SemanticSearchOrchestrator {
180
198
  // Request more results to allow for deduplication by file path
181
199
  const results = await this.vectorStore.searchHybrid(query, queryEmbedding, this.projectId, 30);
182
200
  this.logger.debug(`Hybrid search found ${results.length} results (before dedup)`);
183
- // Deduplicate by file path with multi-chunk boost
184
- // If multiple chunks from the same file match, that file is more relevant
185
- // We keep the best chunk's content but boost the score based on chunk count
186
- const fileMap = new Map();
187
- for (const r of results) {
188
- const filePath = path.isAbsolute(r.document.filePath)
189
- ? path.relative(projectPath, r.document.filePath)
190
- : r.document.filePath;
191
- const existing = fileMap.get(filePath);
192
- if (existing) {
193
- // File already seen - increment count and accumulate score
194
- existing.chunkCount++;
195
- existing.totalScore += r.score;
196
- // Keep the highest scoring chunk's content
197
- if (r.score > existing.result.score) {
198
- existing.result = r;
199
- }
201
+ return this.processRawResults(results, projectPath);
202
+ }
203
+ catch (error) {
204
+ this.logger.debug(`Hybrid search error: ${error instanceof Error ? error.message : error}`);
205
+ return [];
206
+ }
207
+ }
208
+ /**
209
+ * Perform vector-only semantic search (pure embedding similarity, no BM25/path matching)
210
+ */
211
+ async performVectorOnlySearch(query, projectPath) {
212
+ if (!this.vectorStore || !this.projectId)
213
+ return [];
214
+ try {
215
+ let queryEmbedding = [];
216
+ try {
217
+ queryEmbedding = await this.embeddingGenerator.generateQueryEmbedding(query);
218
+ }
219
+ catch (e) {
220
+ this.logger.debug(`Vector embedding failed: ${e}`);
221
+ return [];
222
+ }
223
+ if (queryEmbedding.length === 0)
224
+ return [];
225
+ const results = await this.vectorStore.searchByVector(queryEmbedding, this.projectId, 30);
226
+ this.logger.debug(`Vector-only search found ${results.length} results`);
227
+ return this.processRawResults(results, projectPath);
228
+ }
229
+ catch (error) {
230
+ this.logger.debug(`Vector search error: ${error instanceof Error ? error.message : error}`);
231
+ return [];
232
+ }
233
+ }
234
+ /**
235
+ * Perform text/FTS-only search (BM25 + synonyms, no vector similarity)
236
+ */
237
+ async performTextOnlySearch(query, projectPath) {
238
+ if (!this.vectorStore || !this.projectId)
239
+ return [];
240
+ try {
241
+ const results = await this.vectorStore.searchByText(query, this.projectId, 30);
242
+ this.logger.debug(`Text-only search found ${results.length} results`);
243
+ return this.processRawResults(results, projectPath);
244
+ }
245
+ catch (error) {
246
+ this.logger.debug(`Text search error: ${error instanceof Error ? error.message : error}`);
247
+ return [];
248
+ }
249
+ }
250
+ /**
251
+ * Deduplicate raw VectorSearchResults by file path, apply multi-chunk boost, and map to SemanticResult[].
252
+ * Shared by all search modes (vector, fts, hybrid, graph) to ensure consistent scoring behaviour.
253
+ */
254
+ processRawResults(results, projectPath) {
255
+ // Deduplicate by file path with multi-chunk boost
256
+ // If multiple chunks from the same file match, that file is more relevant.
257
+ // Keep the highest-scoring chunk's content and boost its score.
258
+ const fileMap = new Map();
259
+ for (const r of results) {
260
+ const filePath = path.isAbsolute(r.document.filePath)
261
+ ? path.relative(projectPath, r.document.filePath)
262
+ : r.document.filePath;
263
+ // RAPTOR nodes are synthetic summaries; don't merge or boost them.
264
+ if (raptor_indexing_service_1.RaptorIndexingService.isRaptorPath(filePath)) {
265
+ if (!fileMap.has(filePath)) {
266
+ fileMap.set(filePath, { result: r, chunkCount: 1 });
200
267
  }
201
- else {
202
- fileMap.set(filePath, { result: r, chunkCount: 1, totalScore: r.score });
268
+ continue;
269
+ }
270
+ const existing = fileMap.get(filePath);
271
+ if (existing) {
272
+ existing.chunkCount++;
273
+ if (r.score > existing.result.score) {
274
+ existing.result = r;
203
275
  }
204
276
  }
205
- // Calculate boosted scores:
206
- // - Base: best chunk score
207
- // - Boost: +10% per additional matching chunk (capped at 50% boost)
208
- // - Final score ALWAYS capped at 1.0 (100%)
209
- const boostedResults = Array.from(fileMap.values()).map(entry => {
210
- const chunkBoost = Math.min((entry.chunkCount - 1) * 0.10, 0.50);
211
- const boostedScore = Math.min(1.0, entry.result.score * (1 + chunkBoost));
212
- return {
213
- ...entry.result,
214
- score: boostedScore,
215
- _chunkCount: entry.chunkCount // For debugging
216
- };
217
- });
218
- // Sort by boosted score and limit to 15 unique files
219
- const uniqueResults = boostedResults
220
- .sort((a, b) => b.score - a.score)
221
- .slice(0, 15);
222
- this.logger.debug(`Returning ${uniqueResults.length} unique files`);
223
- return uniqueResults.map(r => ({
224
- file: path.isAbsolute(r.document.filePath)
225
- ? path.relative(projectPath, r.document.filePath)
226
- : r.document.filePath,
227
- type: this.determineFileType(r.document.filePath),
277
+ else {
278
+ fileMap.set(filePath, { result: r, chunkCount: 1 });
279
+ }
280
+ }
281
+ // Boost: +10% per additional matching chunk (capped at 50%), score capped at 1.0
282
+ const boostedResults = Array.from(fileMap.values()).map(entry => {
283
+ const chunkBoost = Math.min((entry.chunkCount - 1) * 0.10, 0.50);
284
+ const boostedScore = Math.min(1.0, entry.result.score * (1 + chunkBoost));
285
+ return { ...entry.result, score: boostedScore };
286
+ });
287
+ const uniqueResults = boostedResults.sort((a, b) => b.score - a.score).slice(0, 15);
288
+ this.logger.debug(`Returning ${uniqueResults.length} unique files after dedup`);
289
+ return uniqueResults.map(r => {
290
+ const rawFilePath = path.isAbsolute(r.document.filePath)
291
+ ? path.relative(projectPath, r.document.filePath)
292
+ : r.document.filePath;
293
+ const isRaptor = raptor_indexing_service_1.RaptorIndexingService.isRaptorPath(rawFilePath);
294
+ const displayPath = isRaptor ? raptor_indexing_service_1.RaptorIndexingService.realPath(rawFilePath) : rawFilePath;
295
+ const raptorLevel = isRaptor ? r.document.metadata?.raptorLevel : undefined;
296
+ return {
297
+ file: displayPath,
298
+ type: isRaptor
299
+ ? (raptorLevel === 3 ? 'root-summary' : 'directory-summary')
300
+ : this.determineFileType(r.document.filePath),
228
301
  similarity: r.score,
229
302
  content: this.formatContent(r.document.content, r.document.metadata),
230
- lineStart: 1,
231
- lineEnd: 20,
232
- // Pass through debug info for verbose mode
233
- debug: r.debug
234
- }));
303
+ lineStart: isRaptor ? undefined : 1,
304
+ lineEnd: isRaptor ? undefined : 20,
305
+ debug: r.debug,
306
+ };
307
+ });
308
+ }
309
+ /**
310
+ * Graph RAG: expand hybrid search results by following 1-hop code relationship edges.
311
+ * For each of the top-5 result files, lookup its graph node and collect neighbours
312
+ * (files connected via imports/calls/extends). Appends new files at a discounted score.
313
+ */
314
+ async expandWithGraphNeighbors(results, projectPath) {
315
+ if (!this.graphStore || !this.projectId || results.length === 0)
316
+ return results;
317
+ try {
318
+ // Load all file nodes for this project once and build a filePath → nodeId map
319
+ const allFileNodes = await this.graphStore.findNodes(this.projectId, 'file');
320
+ if (allFileNodes.length === 0)
321
+ return results;
322
+ const normalize = (p) => p.replace(/\\/g, '/');
323
+ const filePathToNodeId = new Map();
324
+ for (const node of allFileNodes) {
325
+ // Index by both absolute and relative path to maximise matching
326
+ filePathToNodeId.set(normalize(node.filePath), node.id);
327
+ const rel = normalize(path.relative(projectPath, node.filePath));
328
+ if (rel && !rel.startsWith('..')) {
329
+ filePathToNodeId.set(rel, node.id);
330
+ }
331
+ }
332
+ const existingPaths = new Set(results.map(r => normalize(r.file)));
333
+ // Only expand the top-5 hits to avoid adding noise from lower-ranked files
334
+ const TOP_K = Math.min(5, results.length);
335
+ const neighborFilePaths = new Set();
336
+ for (const result of results.slice(0, TOP_K)) {
337
+ const relNorm = normalize(result.file);
338
+ const absNorm = normalize(path.isAbsolute(result.file) ? result.file : path.join(projectPath, result.file));
339
+ const nodeId = filePathToNodeId.get(relNorm) || filePathToNodeId.get(absNorm);
340
+ if (!nodeId)
341
+ continue;
342
+ const neighbors = await this.graphStore.getNeighbors(nodeId);
343
+ for (const neighbor of neighbors) {
344
+ if (neighbor.type !== 'file')
345
+ continue;
346
+ const neighborRel = normalize(path.isAbsolute(neighbor.filePath)
347
+ ? path.relative(projectPath, neighbor.filePath)
348
+ : neighbor.filePath);
349
+ if (!existingPaths.has(neighborRel)) {
350
+ neighborFilePaths.add(neighborRel);
351
+ }
352
+ }
353
+ }
354
+ if (neighborFilePaths.size === 0)
355
+ return results;
356
+ // Score neighbors 30% below the lowest vector result
357
+ const worstScore = results[results.length - 1]?.similarity ?? 0.1;
358
+ const expansionScore = parseFloat(Math.max(0.05, worstScore * 0.7).toFixed(4));
359
+ const expanded = [...results];
360
+ for (const neighborPath of neighborFilePaths) {
361
+ expanded.push({
362
+ file: neighborPath,
363
+ type: this.determineFileType(neighborPath),
364
+ similarity: expansionScore,
365
+ content: '[Graph-related: connected via code relationships (imports/calls/extends)]',
366
+ lineStart: undefined,
367
+ lineEnd: undefined,
368
+ });
369
+ }
370
+ this.logger.debug(`Graph RAG: appended ${neighborFilePaths.size} related file(s)`);
371
+ return expanded;
235
372
  }
236
373
  catch (error) {
237
- this.logger.debug(`Hybrid search error: ${error instanceof Error ? error.message : error}`);
238
- return [];
374
+ this.logger.debug(`Graph expansion error: ${error instanceof Error ? error.message : error}`);
375
+ return results; // Graceful fallback — return hybrid results unchanged
239
376
  }
240
377
  }
241
378
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"semantic-search-orchestrator.js","sourceRoot":"","sources":["../../../../src/cli/commands/services/semantic-search-orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic-search-orchestrator.js","sourceRoot":"","sources":["../../../../src/cli/commands/services/semantic-search-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * RAPTOR Hierarchical Indexing Service
3
+ *
4
+ * A code-native variant of RAPTOR (Recursive Abstractive Processing for
5
+ * Tree-Organized Retrieval) that exploits the natural hierarchy of source code:
6
+ *
7
+ * chunk (file segment) → file → L2 (directory node) → L3 (root node)
8
+ *
9
+ * L2 nodes are created by mean-pooling the embeddings of all chunks within a
10
+ * directory, placing the node at the semantic centroid of that directory's content.
11
+ * No Claude CLI calls are needed — the centroid is computed from embeddings that
12
+ * already exist in the vector store.
13
+ *
14
+ * L3 is the mean of all L2 embeddings, representing the entire project.
15
+ *
16
+ * During search, L2/L3 nodes live in the same vector store as regular chunks.
17
+ * They surface naturally for abstract queries ("what does the auth package do?")
18
+ * and are invisible for concrete queries ("find the JWT refresh function").
19
+ *
20
+ * Incremental drift detection (used during sync):
21
+ * 1. Structural hash (sha256 of sorted child file paths) — detects file additions/deletions
22
+ * 2. Cosine distance between new pooled mean and stored RAPTOR embedding —
23
+ * skips the update when drift is below DRIFT_SKIP_THRESHOLD
24
+ */
25
+ import type { IVectorStore } from '../../../storage/interfaces';
26
+ export declare const RAPTOR_FILE_PREFIX = "__raptor__/";
27
+ export interface RaptorGenerationResult {
28
+ l2NodesCreated: number;
29
+ l3Created: boolean;
30
+ durationMs: number;
31
+ }
32
+ export interface RaptorUpdateResult {
33
+ updatedDirs: string[];
34
+ skippedDirs: string[];
35
+ l3Updated: boolean;
36
+ }
37
+ export declare class RaptorIndexingService {
38
+ private logger;
39
+ /**
40
+ * Generate all RAPTOR nodes for a project immediately after file indexing.
41
+ * Reads embeddings back from the vector store and mean-pools per directory.
42
+ * Old RAPTOR nodes are purged first (idempotent on full reindex).
43
+ */
44
+ generateForProject(projectPath: string, projectId: string, indexedFiles: string[], vectorStore: IVectorStore): Promise<RaptorGenerationResult>;
45
+ /**
46
+ * Incrementally update RAPTOR nodes after a set of file changes.
47
+ * Uses structural hash + cosine drift to skip unnecessary regeneration.
48
+ *
49
+ * @param changedFiles Relative file paths that were created/modified/deleted
50
+ * @param deletedFiles Relative file paths that were deleted (subset of changedFiles)
51
+ */
52
+ updateForChanges(projectPath: string, projectId: string, changedFiles: string[], deletedFiles: string[], vectorStore: IVectorStore): Promise<RaptorUpdateResult>;
53
+ private maybeUpdateL2Node;
54
+ /**
55
+ * Recompute the L3 root node by mean-pooling all current L2 embeddings.
56
+ * Called only when at least one L2 node changed.
57
+ */
58
+ private maybeUpdateL3Node;
59
+ /**
60
+ * Return synthetic filePaths of all current L2 nodes (excludes the L3 root).
61
+ * Uses getFilePathsForDir with the __raptor__ prefix directory as root.
62
+ */
63
+ private getRaptorL2Paths;
64
+ private groupByDirectory;
65
+ /** sha256 of the sorted file paths — cheap O(n log n), no parsing */
66
+ private computeStructuralHash;
67
+ private meanPool;
68
+ private cosineSimilarity;
69
+ private buildL2Content;
70
+ private buildL3Content;
71
+ /** Deterministic ID for an L2 (directory) RAPTOR node */
72
+ makeL2Id(projectId: string, dirPath: string): string;
73
+ /** Deterministic ID for the L3 (project root) RAPTOR node */
74
+ makeL3Id(projectId: string): string;
75
+ /**
76
+ * Utility: check whether a filePath represents a RAPTOR synthetic node.
77
+ * Import and call this in the search layer to distinguish RAPTOR hits.
78
+ */
79
+ static isRaptorPath(filePath: string): boolean;
80
+ /** Strip the RAPTOR prefix, returning the real directory/root path */
81
+ static realPath(filePath: string): string;
82
+ }
83
+ //# sourceMappingURL=raptor-indexing-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raptor-indexing-service.d.ts","sourceRoot":"","sources":["../../../../src/cli/services/search/raptor-indexing-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAIhE,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AA4BhD,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB;AAID,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAwB;IAItC;;;;OAIG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,YAAY,GACxB,OAAO,CAAC,sBAAsB,CAAC;IAyFlC;;;;;;OAMG;IACG,gBAAgB,CACpB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,YAAY,EAAE,MAAM,EAAE,EACtB,WAAW,EAAE,YAAY,GACxB,OAAO,CAAC,kBAAkB,CAAC;YA+BhB,iBAAiB;IAwF/B;;;OAGG;YACW,iBAAiB;IAgD/B;;;OAGG;YACW,gBAAgB;IAwB9B,OAAO,CAAC,gBAAgB;IAWxB,qEAAqE;IACrE,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,cAAc;IAStB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAKpD,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAInC;;;OAGG;IACH,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9C,sEAAsE;IACtE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAK1C"}