UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

128 lines (127 loc) 4.48 kB
/** * PersistentMemory — 持久化语义记忆 (Tier 3) — Facade * * 统一的项目级永久记忆存储,使用 SQLite 提供: * - 重要性评分 (importance 1.0-10.0) * - 综合检索 (recency × importance × relevance) * - Extract-Update 模式固化 (ADD / UPDATE / MERGE / NOOP) * - Mem0 风格冲突解决 (矛盾检测 + 自动替换) * - TTL 自动过期 + 访问计数 * - 向量嵌入预留接口 * - 预算感知 toPromptSection * * 内部委托: * - MemoryStore — CRUD + SQL 基础设施 * - MemoryRetriever — 三维打分检索 + Prompt 生成 * - MemoryConsolidator — 智能固化 + 冲突解决 * * 记忆类型: fact / insight / preference * 来源: bootstrap / user / system * * @module PersistentMemory */ import type { CandidateMemory, ConsolidateOptions, ConsolidateStats } from './MemoryConsolidator.js'; import type { MemoryEmbeddingStore } from './MemoryEmbeddingStore.js'; import type { AppendEntry, EmbeddingFn, LoadOptions, PromptSectionOptions, RetrieveOptions, ScoredMemory } from './MemoryRetriever.js'; import type { DeserializedMemory, MemoryInput, MemoryUpdates, SqliteDatabase } from './MemoryStore.js'; /** PersistentMemory 构造选项 */ export interface PersistentMemoryOptions { logger?: MemoryLogger | null; embeddingFn?: EmbeddingFn; embeddingStore?: MemoryEmbeddingStore; } /** Logger 接口 */ interface MemoryLogger { info(msg: string): void; warn?(msg: string): void; debug?(msg: string): void; } /** 数据库包装器 (getDb 模式) */ interface DbWrapper { getDb(): SqliteDatabase; } export declare class PersistentMemory { #private; /** @param db better-sqlite3 实例 */ constructor(db: SqliteDatabase | DbWrapper, opts?: PersistentMemoryOptions); /** 添加一条记忆 */ add(memory: MemoryInput): { id: string; action: string; }; /** 更新已有记忆 */ update(id: string, updates: MemoryUpdates): boolean; /** 删除一条记忆 */ delete(id: string): boolean; /** 按 ID 获取 */ get(id: string): DeserializedMemory | null; /** 智能固化 (ADD / UPDATE / MERGE / NOOP + 冲突解决) */ consolidate(candidateMemories: CandidateMemory[], opts?: ConsolidateOptions): ConsolidateStats; /** 三维打分综合检索 (含向量相关性) */ retrieve(query: string, opts?: RetrieveOptions): Promise<ScoredMemory[]>; /** 简单文本搜索 */ search(content: string, opts?: { limit?: number; }): DeserializedMemory[]; /** 预算感知 Prompt section */ toPromptSection(opts?: PromptSectionOptions): Promise<string>; /** 兼容 Memory.load() */ load(limit: number, opts?: LoadOptions): { ts: string; type: string; content: string; source: string; importance: number; }[]; /** 兼容 Memory.append() */ append(entry: AppendEntry): void; /** 记忆总数 */ size(opts?: { source?: string; }): number; /** 维护: 过期清理 + 容量控制 */ compact(): { expired: number; forgotten: number; archived: number; remaining: number; }; /** 获取统计信息 */ getStats(): { total: number; byType: { [k: string]: number; }; bySource: { [k: string]: number; }; avgImportance: number; }; /** 清除所有 bootstrap 来源的记忆 */ clearBootstrapMemories(): number; /** 从旧版 Memory.js JSONL 文件迁移 */ migrateFromLegacy(projectRoot: string): Promise<{ migrated: number; skipped: number; error?: string; }>; /** 设置向量嵌入函数 */ setEmbeddingFunction(fn: EmbeddingFn | null): void; /** 获取当前嵌入函数 */ getEmbeddingFunction(): EmbeddingFn | null; /** * 为所有缺少 embedding 的记忆批量生成向量嵌入 * @param batchSize 每批数量 * @returns 成功嵌入的记忆数 */ embedAllMemories(batchSize?: number): Promise<number>; /** * 计算语义相关性 (异步,使用向量余弦相似度) * @param query 查询文本 * @param content 记忆内容 * @returns 相似度分数 或 null */ computeEmbeddingRelevance(query: string, content: string): Promise<number | null>; } export { PersistentMemory as ProjectSemanticMemory }; export default PersistentMemory;