autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
108 lines (107 loc) • 3.05 kB
TypeScript
/**
* 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;