UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

108 lines (107 loc) 3.05 kB
/** * EpisodicConsolidator — Episodic → Semantic 固化引擎 * * Bootstrap 完成后,将 SessionStore (Tier 2) 中的维度分析结果 * 提炼为结构化记忆,固化到 PersistentMemory (Tier 3)。 * * 固化策略 (规则化,无需额外 AI 调用): * 1. 从每个维度的 findings 提取 fact 记忆 * 2. 从 Tier Reflections 的 crossDimensionPatterns 提取 insight 记忆 * 3. 从 analysisText 中提取项目级别事实 (正则匹配) * 4. 使用 PersistentMemory.consolidate() 进行去重和合并 * * @module EpisodicConsolidator */ /** Logger 最小接口 */ interface ConsolidatorLogger { info(msg: string): void; } /** PersistentMemory 最小接口 */ interface PersistentMemoryLike { clearBootstrapMemories(): number; compact(): void; consolidate(candidates: CandidateMemoryEntry[], opts?: { bootstrapSession?: string; }): ConsolidateResult; } /** 固化结果 */ interface ConsolidateResult { added: number; updated: number; merged: number; skipped: number; } /** 候选记忆条目 */ interface CandidateMemoryEntry { type: string; content: string; source: string; importance: number; sourceDimension?: string; sourceEvidence?: string; relatedEntities?: string[]; tags: string[]; } /** 维度发现 */ interface FindingLike { finding?: string; evidence?: string; importance?: number; dimId?: string; } /** 维度报告 */ interface DimensionReportLike { analysisText?: string; findings?: FindingLike[]; } /** Tier 反思 */ interface TierReflectionLike { tierIndex: number; completedDimensions?: string[]; topFindings?: FindingLike[]; crossDimensionPatterns?: string[]; suggestionsForNextTier?: string[]; } /** SessionStore 最小接口 */ interface SessionStoreLike { getCompletedDimensions(): string[]; getDimensionReport(dimId: string): DimensionReportLike | undefined; toJSON(): { tierReflections?: TierReflectionLike[]; }; } export declare class EpisodicConsolidator { #private; constructor(semanticMemory: PersistentMemoryLike, { logger }?: { logger?: ConsolidatorLogger; }); /** * 执行固化: SessionStore → PersistentMemory * * @param [opts.bootstrapSession] Bootstrap session ID * @param [opts.clearPrevious=false] 是否先清除旧的 bootstrap 记忆 * @returns } */ consolidate(sessionStore: SessionStoreLike, { bootstrapSession, clearPrevious, }?: { bootstrapSession?: string; clearPrevious?: boolean; }): { findings: { extracted: number; }; insights: { extracted: number; }; textFacts: { extracted: number; }; total: ConsolidateResult; durationMs: number; perDimension: { [k: string]: number; }; importanceDistribution: Record<number, number>; entityCount: number; }; } export default EpisodicConsolidator;