/**
 * Fallback RAG backend: libsql + FTS5 only, no embedding.
 *
 * Used when Ollama is unavailable (no model pulled, network down, user opted
 * out). `embed()` always returns `null`, `recall()` is keyword-only via
 * SQLite FTS5 with the `unicode61` tokenizer. The same `lessons` /
 * `lessons_fts` schema as `libsql-qwen3` so the two backends can share a
 * dbUrl when the fallback wrapper swaps mid-session (Task 1.11) — the
 * vector column on the qwen3 schema is simply ignored here.
 *
 * Self-contained FTS5 (not `content='lessons'` external-content) for the
 * same reason as `libsql_qwen3.ts`: external-content needs mirroring
 * triggers we don't have. We pay O(N) duplicate text storage to keep the
 * write path a flat two-statement INSERT.
 *
 * FTS5 input sanitization here is the simple strip — drop `"` and `*` and
 * trim, then pass the rest verbatim. That gives the user normal phrase
 * search ("foo bar" matches docs containing both, in order) while
 * preventing the two FTS5 syntax tokens that most easily produce
 * `SqliteError: fts5: syntax error`. The qwen3 backend uses a stricter
 * tokens-OR'd scheme because hybrid recall lives or dies on the lexical
 * leg not raising; here the user asked for lexical-only, so we honor more
 * of their query intent (preserving casing, stopwords, ordering hints).
 *
 * Imports from: @libsql/client, ../types.js.
 * Imported by: src/rag/backend_factory.ts.
 */
import type { RagBackend } from '../types.js';
export interface LibsqlLexicalOpts {
    dbUrl: string;
}
export declare function libsqlLexicalBackend(opts: LibsqlLexicalOpts): RagBackend;
//# sourceMappingURL=libsql_lexical.d.ts.map