/** * PostgresBrainStore — implementación multi-tenant del contrato BrainStore * (src/contracts/store.ts) sobre PostgreSQL. * * Tablas (ver db/migrations/001_memories.sql): `memories`, `claims`, * `evidence_hashes`, `memory_edges` (derivedFrom). * * SECURITY — regla de oro del lane: TODA consulta sobre tablas protegidas lleva * `tenant_id` en el WHERE. Ninguna fila de un tenant puede ser leída, verificada * ni borrada sin que el tenant llamante forme parte del filtro. El static-grep * test (tests/unit/lane-b-static-grep.test.ts) revienta si aparece un SELECT * sobre estas tablas sin filtro de tenant. * * Búsqueda: BM25 (Okapi, K1=1.5, B=0.75 — los mismos constantes que TheBrainV2) * + re-rank de Jaccard, calculados en SQL sobre el conjunto candidato que arroja * el índice GIN de `terms` (memories.terms && ), nunca sobre el * corpus entero. */ import { Pool } from 'pg'; import { BrainStore, Candidate } from '../../contracts/store'; export type EvidenceKind = 'file' | 'symbol' | 'symbol_normalized'; export interface NormalizedMemory { id: string; query: string; response: string; projectId: string | null; terms: string[]; termFreq: Record; payload: unknown; } /** Normaliza una memoria arbitraria a la forma persistible, enriqueciéndola con * termes/termFreq si no venía de un Brain que ya las computara. */ export declare function normalizeMemory(memory: unknown): NormalizedMemory; export interface PostgresBrainStoreOptions { /** Máx. candidatos que la búsqueda considera antes de rankear (cota de seguridad). */ maxCandidates?: number; } export declare class PostgresBrainStore implements BrainStore { private pool; private opts; readonly lane = "B"; constructor(pool: Pool, opts?: PostgresBrainStoreOptions); put(tenantId: string, memory: unknown): Promise; get(tenantId: string, id: string): Promise; searchCandidates(tenantId: string, query: string, limit: number): Promise; listByIds(tenantId: string, ids: string[]): Promise>; delete(tenantId: string, id: string): Promise; } export default PostgresBrainStore; //# sourceMappingURL=PostgresBrainStore.d.ts.map