/**
 * KiroGraph Vector Manager
 *
 * Semantic search using nomic-ai/nomic-embed-text-v1.5 via @xenova/transformers.
 * Mirrors CodeGraph src/vectors/ (embedder.ts + manager.ts) adapted for KiroGraph:
 *   - Cache dir: ~/.kirograph/models/ (not ~/.codegraph/models/)
 *   - Embeddings stored in the `vectors` SQLite table
 *   - Cosine similarity search done in-process by default (no extra deps)
 *   - ANN search via sqlite-vec opt-in: set config.useVecIndex = true
 *     (requires `npm install better-sqlite3 sqlite-vec`)
 *   - Disabled by default; opt-in via config.enableEmbeddings = true
 */
import type { KiroGraphConfig } from '../config';
import type { Node } from '../types';
import type { GraphDatabase } from '../db/database';
export declare class VectorManager {
    private readonly db;
    private readonly config;
    private readonly projectRoot?;
    private pipeline;
    private _initialized;
    private vecIndex;
    private oramaIndex;
    private pgliteIndex;
    private lancedbIndex;
    private qdrantIndex;
    private typesenseIndex;
    private _engineFallback;
    constructor(db: GraphDatabase, config: KiroGraphConfig, projectRoot?: string | undefined);
    isInitialized(): boolean;
    /** Non-null when the configured engine failed to load and cosine is being used instead. */
    getEngineFallback(): string | null;
    /**
     * Load the embedding model. No-op when embeddings are disabled.
     * Fails silently so callers can continue without semantic search.
     * When config.useVecIndex is true, also initializes the sqlite-vec ANN index.
     */
    initialize(): Promise<void>;
    /**
     * Embed a single node and persist to the vectors table.
     * Skips silently when disabled; logs on failure without throwing.
     */
    embedNode(node: Node): Promise<void>;
    /** Number of entries currently in the active ANN/hybrid index (0 when not in use). */
    vecIndexCount(): Promise<number>;
    /**
     * Remove embeddings for the given node IDs from the active index.
     * For cosine the `vectors` SQLite table is cleaned up automatically via FK cascade
     * when nodes are deleted. For sqlite-vec, orama, and pglite the engine itself is
     * the sole store of record, so we delete from it explicitly here.
     */
    deleteEmbeddings(nodeIds: string[]): Promise<void>;
    /**
     * Embed all eligible nodes in the database that don't yet have embeddings.
     * Processes in batches of BATCH_SIZE.
     */
    embedAll(onProgress?: (current: number, total: number) => void): Promise<number>;
    /**
     * Semantic search: embed the query and return top-N nodes by similarity.
     *
     * When sqlite-vec is available (useVecIndex: true), delegates ANN search to
     * VecIndex (fast, sub-linear). Otherwise falls back to in-process cosine
     * similarity over all stored embeddings (linear scan, no extra deps).
     *
     * Returns empty array when not initialized.
     */
    search(query: string, topN?: number): Promise<Node[]>;
    /** Release engine resources (e.g. kill Qdrant child process). */
    close(): void;
}
//# sourceMappingURL=index.d.ts.map