Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/core/src/indexer/utils/documents.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ export function prepareDocumentsForEmbedding(documents: Document[]): EmbeddingDo
exported: doc.metadata.exported,
signature: doc.metadata.signature,
docstring: doc.metadata.docstring,
snippet: doc.metadata.snippet,
imports: doc.metadata.imports,
},
}));
}
Expand Down Expand Up @@ -72,6 +74,8 @@ export function prepareDocumentForEmbedding(doc: Document): EmbeddingDocument {
exported: doc.metadata.exported,
signature: doc.metadata.signature,
docstring: doc.metadata.docstring,
snippet: doc.metadata.snippet,
imports: doc.metadata.imports,
},
};
}
Expand Down
10 changes: 8 additions & 2 deletions packages/core/src/vector/store.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import type { Connection, Table } from '@lancedb/lancedb';
import * as lancedb from '@lancedb/lancedb';
import type { EmbeddingDocument, SearchOptions, SearchResult, VectorStore } from './types';
import type {
EmbeddingDocument,
SearchOptions,
SearchResult,
SearchResultMetadata,
VectorStore,
} from './types';

/**
* Vector store implementation using LanceDB
Expand Down Expand Up @@ -119,7 +125,7 @@ export class LanceDBVectorStore implements VectorStore {
return {
id: result.id as string,
score,
metadata: JSON.parse(result.metadata as string) as Record<string, unknown>,
metadata: JSON.parse(result.metadata as string) as SearchResultMetadata,
};
})
.filter((result) => result.score >= scoreThreshold);
Expand Down
28 changes: 27 additions & 1 deletion packages/core/src/vector/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
* Vector storage and embedding types
*/

import type { DocumentType } from '../scanner/types';

/**
* Document to be embedded and stored
*/
Expand All @@ -11,13 +13,37 @@ export interface EmbeddingDocument {
metadata: Record<string, unknown>;
}

/**
* Metadata stored in search results
* Maps from DocumentMetadata with 'file' renamed to 'path' for convenience
*
* This interface provides type hints for common fields while allowing
* additional custom fields for different use cases (e.g., GitHub indexer).
*/
export interface SearchResultMetadata {
// Core fields (present in code search results)
path?: string; // File path (mapped from DocumentMetadata.file)
type?: DocumentType | string; // Type of code element (or custom type)
language?: string; // Programming language
name?: string; // Symbol name
startLine?: number; // Start line number
endLine?: number; // End line number
exported?: boolean; // Is it a public API?
signature?: string; // Full signature
docstring?: string; // Documentation comment
snippet?: string; // Actual code content (truncated if large)
imports?: string[]; // File-level imports (module specifiers)
// Allow additional custom fields for extensibility (e.g., GitHub indexer uses 'document')
[key: string]: unknown;
}

/**
* Search result from vector store
*/
export interface SearchResult {
id: string;
score: number; // Cosine similarity score (0-1)
metadata: Record<string, unknown>;
metadata: SearchResultMetadata;
}

/**
Expand Down